@mk-kit/ui 0.51.0 → 0.52.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mk-kit-ui-forms.mjs","sources":["../../../projects/mk-kit/forms/form-field/form-field.ts","../../../projects/mk-kit/forms/form-field/form-field.html","../../../projects/mk-kit/forms/form-error-summary/form-error-summary.ts","../../../projects/mk-kit/forms/form-error-summary/form-error-summary.html","../../../projects/mk-kit/forms/input-group/input-group.ts","../../../projects/mk-kit/forms/input-group/input-group.html","../../../projects/mk-kit/forms/input/input.ts","../../../projects/mk-kit/forms/input/input.html","../../../projects/mk-kit/forms/submit-input/submit-input.ts","../../../projects/mk-kit/forms/submit-input/submit-input.html","../../../projects/mk-kit/forms/button-toggle/button-toggle.ts","../../../projects/mk-kit/forms/button-toggle/button-toggle.html","../../../projects/mk-kit/forms/button-toggle/button-toggle-group.ts","../../../projects/mk-kit/forms/button-toggle/button-toggle-group.html","../../../projects/mk-kit/forms/i18n-input/i18n-input.ts","../../../projects/mk-kit/forms/i18n-input/i18n-input.html","../../../projects/mk-kit/forms/select/select.ts","../../../projects/mk-kit/forms/select/select.html","../../../projects/mk-kit/forms/listbox/listbox.ts","../../../projects/mk-kit/forms/listbox/listbox.html","../../../projects/mk-kit/forms/cascader/cascader.ts","../../../projects/mk-kit/forms/cascader/cascader.html","../../../projects/mk-kit/forms/autocomplete/autocomplete.ts","../../../projects/mk-kit/forms/autocomplete/autocomplete.html","../../../projects/mk-kit/forms/mention/mention-panel.ts","../../../projects/mk-kit/forms/mention/mention-panel.html","../../../projects/mk-kit/forms/mention/mention.ts","../../../projects/mk-kit/forms/multi-select/multi-select.ts","../../../projects/mk-kit/forms/multi-select/multi-select.html","../../../projects/mk-kit/forms/tag-input/tag-input.ts","../../../projects/mk-kit/forms/tag-input/tag-input.html","../../../projects/mk-kit/forms/password-input/password-input.ts","../../../projects/mk-kit/forms/password-input/password-input.html","../../../projects/mk-kit/forms/transfer-list/transfer-list.ts","../../../projects/mk-kit/forms/transfer-list/transfer-list.html","../../../projects/mk-kit/forms/repeater/repeater.ts","../../../projects/mk-kit/forms/repeater/repeater.html","../../../projects/mk-kit/forms/tree-select/tree-select.ts","../../../projects/mk-kit/forms/tree-select/tree-select.html","../../../projects/mk-kit/forms/file-upload/file-upload.ts","../../../projects/mk-kit/forms/file-upload/file-upload.html","../../../projects/mk-kit/forms/code-editor/code-editor.ts","../../../projects/mk-kit/forms/code-editor/code-editor.html","../../../projects/mk-kit/forms/rating/rating.ts","../../../projects/mk-kit/forms/rating/rating.html","../../../projects/mk-kit/forms/number-input/number-input.ts","../../../projects/mk-kit/forms/number-input/number-input.html","../../../projects/mk-kit/forms/numeric-keypad/numeric-keypad.ts","../../../projects/mk-kit/forms/numeric-keypad/numeric-keypad.html","../../../projects/mk-kit/forms/on-screen-keyboard/keyboard-layouts.ts","../../../projects/mk-kit/forms/on-screen-keyboard/on-screen-keyboard.ts","../../../projects/mk-kit/forms/on-screen-keyboard/on-screen-keyboard.html","../../../projects/mk-kit/forms/on-screen-keyboard/on-screen-keyboard-trigger.ts","../../../projects/mk-kit/forms/otp/otp.ts","../../../projects/mk-kit/forms/otp/otp.html","../../../projects/mk-kit/forms/phone-input/phone-countries.ts","../../../projects/mk-kit/forms/phone-input/phone-input.ts","../../../projects/mk-kit/forms/phone-input/phone-input.html","../../../projects/mk-kit/forms/postal-code-input/postal-formats.ts","../../../projects/mk-kit/forms/postal-code-input/postal-code-input.ts","../../../projects/mk-kit/forms/postal-code-input/postal-code-input.html","../../../projects/mk-kit/forms/currency-input/currency-input.ts","../../../projects/mk-kit/forms/currency-input/currency-input.html","../../../projects/mk-kit/forms/card-number-input/card-number-input.ts","../../../projects/mk-kit/forms/card-number-input/card-number-input.html","../../../projects/mk-kit/forms/iban-input/iban-input.ts","../../../projects/mk-kit/forms/iban-input/iban-input.html","../../../projects/mk-kit/forms/tax-id-input/tax-id-input.ts","../../../projects/mk-kit/forms/tax-id-input/tax-id-input.html","../../../projects/mk-kit/forms/signature-pad/signature-pad.ts","../../../projects/mk-kit/forms/signature-pad/signature-pad.html","../../../projects/mk-kit/forms/radio/radio-group.ts","../../../projects/mk-kit/forms/radio/radio-group.html","../../../projects/mk-kit/forms/radio/radio.ts","../../../projects/mk-kit/forms/radio/radio.html","../../../projects/mk-kit/forms/switch/switch.ts","../../../projects/mk-kit/forms/switch/switch.html","../../../projects/mk-kit/forms/slider/slider.ts","../../../projects/mk-kit/forms/slider/slider.html","../../../projects/mk-kit/forms/color-picker/color-picker.ts","../../../projects/mk-kit/forms/color-picker/color-picker.html","../../../projects/mk-kit/forms/range-slider/range-slider.ts","../../../projects/mk-kit/forms/range-slider/range-slider.html","../../../projects/mk-kit/forms/index.ts","../../../projects/mk-kit/forms/mk-kit-ui-forms.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n type AbstractControl,\n FormGroupDirective,\n NgControl,\n NgForm,\n Validators,\n} from '@angular/forms';\nimport { FORM_FIELD, type Field, type FieldState } from '@angular/forms/signals';\nimport type { Subscription } from 'rxjs';\nimport type { MkErrorMessages, MkSize } from '@mk-kit/ui/core';\nimport {\n MK_I18N,\n MkFieldContext,\n mkFirstErrorMessage,\n mkSignalErrorMessage,\n mkUniqueId,\n} from '@mk-kit/ui/core';\n\n/**\n * FormField — an accessible wrapper that provides a real `<label>`, optional\n * hint text, error text and a required indicator for any nested control\n * (`input[mkInput]`, `mk-select`, `mk-checkbox`, …).\n *\n * It generates stable ids (via `mkUniqueId`) and exposes them so nested\n * controls can wire `aria-labelledby` / `aria-describedby` / `aria-invalid`\n * automatically by injecting this component. While an error shows, the hint is\n * hidden and the error is announced through a `role=\"alert\"` region.\n *\n * ## Automatic errors\n *\n * When the projected control is bound to a form (`formControlName`,\n * `[formControl]` or `[(ngModel)]`) the field adopts its `NgControl` and shows\n * the first validation error by itself — no `[error]` binding needed. Messages\n * come from the `validation` i18n table and can be reworded per field with\n * `errorMessages`. As with `mat-error`, an error only appears once the control\n * is touched or dirty, or its form has been submitted; `errorOn` changes that.\n * `required` and the disabled styling are derived from the control too.\n *\n * ## Signal Forms\n *\n * The same applies to a control bound with Signal Forms' `[formField]`\n * directive (`@angular/forms/signals`): the field adopts the projected\n * `FormField` binding and reads `touched()` / `dirty()` / `invalid()` /\n * `errors()` / `required()` / `disabled()` from its `FieldState`. Errors\n * written by the schema (`required(p.email)`, `minLength(p.name, 2)`, …) are\n * rendered through the same `validation` i18n table, a `message` supplied to\n * the schema rule wins over the table, and `errorMessages` / `errorOn` work\n * unchanged. Calling `submit()` marks every field touched, so errors surface\n * on a failed submit exactly as with `formControlName`. When the control is\n * not projected (or lives deeper), point the field at it with `[field]`.\n *\n * ```html\n * <mk-form-field label=\"Email\">\n * <input mkInput type=\"email\" [formField]=\"f.email\" />\n * </mk-form-field>\n *\n * <mk-form-field label=\"Country\" [field]=\"f.country\">\n * <mk-select [formField]=\"f.country\" [options]=\"countries\" />\n * </mk-form-field>\n * ```\n *\n * ```html\n * <!-- automatic: message + required marker come from the validators -->\n * <mk-form-field label=\"Email\">\n * <input mkInput type=\"email\" formControlName=\"email\" />\n * </mk-form-field>\n *\n * <!-- per-field wording -->\n * <mk-form-field label=\"Age\" [errorMessages]=\"{ min: 'You must be 18 or over' }\">\n * <mk-number-input formControlName=\"age\" [min]=\"18\" />\n * </mk-form-field>\n *\n * <!-- fully manual: an explicit [error] always wins -->\n * <mk-form-field label=\"Email\" hint=\"We never share it.\" required\n * [error]=\"emailError()\">\n * <input mkInput type=\"email\" [(ngModel)]=\"email\" />\n * </mk-form-field>\n * ```\n */\n@Component({\n selector: 'mk-form-field',\n templateUrl: './form-field.html',\n styleUrl: './form-field.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-form-field',\n '[class.mk-form-field--sm]': \"size() === 'sm'\",\n '[class.mk-form-field--md]': \"size() === 'md'\",\n '[class.mk-form-field--lg]': \"size() === 'lg'\",\n '[class.mk-form-field--invalid]': 'hasError()',\n '[class.mk-form-field--required]': 'isRequired()',\n '[class.mk-form-field--disabled]': 'isDisabled()',\n '[class.mk-form-field--float]': \"labelPosition() === 'float'\",\n '[class.mk-form-field--focused]': 'focused()',\n '[class.mk-form-field--filled]': 'hasValue()',\n '(focusin)': 'focused.set(true)',\n '(focusout)': 'focused.set(false)',\n '(input)': 'readDomValue($event.target)',\n '(change)': 'readDomValue($event.target)',\n },\n providers: [\n {\n provide: MkFieldContext,\n useExisting: forwardRef(() => MkFormField),\n },\n ],\n})\nexport class MkFormField implements MkFieldContext {\n private readonly i18n = inject(MK_I18N);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, {\n optional: true,\n });\n\n /** Visible field label. Rendered as a real `<label for>`. */\n readonly label = input<string>('');\n /** Optional helper text shown below the control (hidden while an error shows). */\n readonly hint = input<string>('');\n /**\n * Explicit error message. When non-null it overrides the automatic message\n * derived from the projected control; `''` suppresses errors entirely.\n */\n readonly error = input<string | null>(null);\n /**\n * Per-field wording for automatic errors, keyed by `ValidationErrors` key.\n * Each value is either a fixed string or a function of the error payload.\n */\n readonly errorMessages = input<MkErrorMessages | null>(null);\n /**\n * When automatic errors become visible. `touched` (the default) matches\n * Material: after the control is touched or dirty, or the form is submitted.\n * `dirty` waits for an actual edit; `always` shows as soon as it is invalid.\n */\n readonly errorOn = input<'touched' | 'dirty' | 'always'>('touched');\n /**\n * Marks the field required (adds an indicator + `aria-required`). Derived\n * from the projected control's validators when it is bound to a form.\n */\n readonly required = input(false, { transform: booleanAttribute });\n /**\n * Visually reflect a disabled control. Derived from the projected control\n * when it is bound to a form.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Control size; nested controls inherit it. */\n readonly size = input<MkSize>('md');\n /**\n * Where the label sits: above the control (default), or `float` — inside\n * the control, sliding up once it is focused or has a value. Floating works\n * with `mkInput` / textarea and any control bound with `ngModel` or a\n * `formControl`; the placeholder stays hidden until the label has moved.\n */\n readonly labelPosition = input<'top' | 'float'>('top');\n /**\n * Signal Forms field to read state from explicitly (`[field]=\"f.email\"`).\n * Not needed when the projected control carries the `[formField]` binding —\n * the wrapper finds that itself; set it when the control is nested deeper\n * or when the wrapper should follow a field it does not contain.\n */\n readonly field = input<Field<unknown> | null>(null);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The projected control's form binding, when it has one. */\n private readonly ngControl = contentChild(NgControl, { descendants: true });\n /** The projected control's Signal Forms `[formField]` binding, when it has one. */\n private readonly signalField = contentChild(FORM_FIELD, { descendants: true });\n\n /**\n * The Signal Forms field state driving this wrapper — the explicit `field`\n * input first, else the projected `[formField]` binding. `undefined` for a\n * reactive-forms / template-driven control.\n */\n private readonly fieldState = computed<FieldState<unknown> | undefined>(() => {\n const explicit = this.field();\n if (explicit) return explicit();\n return this.signalField()?.state();\n });\n\n /** A control inside the field has focus. */\n protected readonly focused = signal(false);\n /** Last value read straight from a native control (fallback when no NgControl). */\n private readonly domValue = signal<string | null>(null);\n /** The field holds a non-empty value (drives the floating label). */\n protected readonly hasValue = computed(() => {\n this.controlTick();\n const state = this.fieldState();\n const control = state ? null : this.ngControl();\n const v = state ? state.value() : control ? control.value : this.domValue();\n if (v == null || v === '') return false;\n if (Array.isArray(v)) return v.length > 0;\n return true;\n });\n\n /** Track a native control's value for the floating label when nothing else reports it. */\n protected readDomValue(target: EventTarget | null): void {\n const el = target as HTMLInputElement | null;\n if (!el || typeof el.value !== 'string') return;\n this.domValue.set(el.value);\n }\n\n /**\n * Bumped on every change of the bound control so the computed state below\n * re-reads it. `AbstractControl` is not signal-based, so this bridges its\n * event stream into the reactive graph.\n */\n private readonly controlTick = signal(0);\n\n /** Id for the nested interactive control — adopt on your control element. */\n readonly controlId = mkUniqueId('mk-field');\n /** Id of the `<label>` element (for `aria-labelledby`). */\n readonly labelId = `${this.controlId}-label`;\n /** Id of the hint element. */\n readonly hintId = `${this.controlId}-hint`;\n /** Id of the error element. */\n readonly errorId = `${this.controlId}-error`;\n\n constructor() {\n afterNextRender(() => {\n const el = this.host.nativeElement.querySelector<HTMLInputElement>('input, textarea, select');\n if (el) this.readDomValue(el);\n });\n const bump = () => this.controlTick.update((n) => n + 1);\n let sub: Subscription | null = null;\n\n // `AbstractControl.events` emits on value, status, pristine and touched\n // changes — every input the state below reads. Submitting flips the form's\n // `submitted` flag without touching a control, so watch that separately.\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n const submitSub = submit?.subscribe(bump) ?? null;\n\n effect(() => {\n // A `[formField]` binding provides an interop `NgControl` without an\n // `events` stream; its state is read reactively via `fieldState` instead.\n const control = this.signalField()\n ? null\n : (this.ngControl()?.control as Partial<AbstractControl> | null | undefined);\n sub?.unsubscribe();\n sub = control?.events ? control.events.subscribe(bump) : null;\n });\n\n inject(DestroyRef).onDestroy(() => {\n sub?.unsubscribe();\n submitSub?.unsubscribe();\n });\n }\n\n /** Whether the surrounding form (if any) has been submitted. */\n private readonly submitted = computed(() => {\n this.controlTick();\n return (\n this.parentFormGroup?.submitted || this.parentForm?.submitted || false\n );\n });\n\n /** The automatic message for the bound control, when one should show. */\n private readonly autoError = computed<string | null>(() => {\n const state = this.fieldState();\n if (state) {\n if (state.disabled() || state.hidden() || !state.invalid()) return null;\n const gate = this.errorOn();\n const visible =\n gate === 'always' ||\n (gate === 'dirty' ? state.dirty() : state.touched() || state.dirty());\n if (!visible) return null;\n return mkSignalErrorMessage(\n state.errors(),\n this.i18n.validation,\n this.errorMessages() ?? undefined,\n );\n }\n\n this.controlTick();\n const control = this.signalField() ? null : this.ngControl()?.control;\n if (!control || control.disabled || !control.invalid) return null;\n\n const gate = this.errorOn();\n const visible =\n gate === 'always' ||\n (gate === 'dirty' ? control.dirty : control.touched || control.dirty) ||\n this.submitted();\n if (!visible) return null;\n\n return mkFirstErrorMessage(\n control.errors,\n this.i18n.validation,\n this.errorMessages() ?? undefined,\n );\n });\n\n /** The message actually rendered — an explicit `error` always wins. */\n readonly errorText = computed<string | null>(\n () => this.error() ?? this.autoError(),\n );\n\n /** Whether the field currently has an error. */\n readonly hasError = computed(() => !!this.errorText());\n\n /** Required either explicitly or through the bound control's validators. */\n readonly isRequired = computed(() => {\n if (this.required()) return true;\n const state = this.fieldState();\n if (state) return state.required();\n this.controlTick();\n return this.ngControl()?.control?.hasValidator(Validators.required) ?? false;\n });\n\n /** Disabled either explicitly or through the bound control. */\n readonly isDisabled = computed(() => {\n if (this.disabled()) return true;\n const state = this.fieldState();\n if (state) return state.disabled();\n this.controlTick();\n return this.ngControl()?.control?.disabled ?? false;\n });\n\n /** Whether the hint should be shown (hidden while an error is present). */\n readonly hintVisible = computed(() => !this.hasError() && !!this.hint());\n\n /**\n * Space-separated id list for a nested control's `aria-describedby`,\n * or `null` when there is nothing to describe.\n */\n readonly describedBy = computed(() => {\n const ids: string[] = [];\n if (this.hintVisible()) ids.push(this.hintId);\n if (this.hasError()) ids.push(this.errorId);\n return ids.length ? ids.join(' ') : null;\n });\n}\n","@if (label() && labelPosition() !== 'float') {\n <label class=\"mk-form-field__label\" [id]=\"labelId\" [attr.for]=\"controlId\">\n <span class=\"mk-form-field__label-text\">{{ label() }}</span>\n @if (isRequired()) {\n <span class=\"mk-form-field__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n}\n\n<div class=\"mk-form-field__control\">\n <ng-content />\n @if (label() && labelPosition() === 'float') {\n <label class=\"mk-form-field__label mk-form-field__label--float\" [id]=\"labelId\" [attr.for]=\"controlId\">\n <span class=\"mk-form-field__label-text\">{{ label() }}</span>\n @if (isRequired()) {\n <span class=\"mk-form-field__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n</div>\n\n@if (hintVisible()) {\n <p class=\"mk-form-field__hint\" [id]=\"hintId\">{{ hint() }}</p>\n}\n\n@if (hasError()) {\n <p class=\"mk-form-field__error\" [id]=\"errorId\" role=\"alert\">{{ errorText() }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n DestroyRef,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormGroup,\n FormGroupDirective,\n NgForm,\n} from '@angular/forms';\nimport type { Field, ReadonlyFieldState } from '@angular/forms/signals';\nimport type { Subscription } from 'rxjs';\nimport type { MkErrorMessages } from '@mk-kit/ui/core';\nimport { MK_I18N, mkFirstErrorMessage, mkSignalErrorMessage } from '@mk-kit/ui/core';\n\n/** One field-level error to surface in {@link MkFormErrorSummary}. */\nexport interface MkFormError {\n /**\n * The `id` of the control (or `mk-form-field`'s `controlId`) the message\n * refers to. Clicking the summary entry focuses this element.\n */\n fieldId: string;\n /** The human-readable error message. */\n message: string;\n}\n\n/**\n * FormErrorSummary — an accessible summary of a form's validation errors,\n * shown at the top of the form on a failed submit. Each entry links to its\n * field and focuses it on click. Following the WAI/GOV.UK pattern it is an\n * `alert` region and, when the surrounding form is submitted with errors,\n * focus moves here automatically (opt out with `[autoFocus]=\"false\"`) so\n * screen-reader and keyboard users are taken straight to the problems. The\n * public `focus()` remains for manual flows (e.g. server-side errors).\n *\n * ## Automatic collection\n *\n * Point `form` at a `FormGroup` and the summary walks it itself: one entry per\n * invalid control, worded from the `validation` i18n table (override per key\n * with `errorMessages`). Pass `labels` to name the fields — without an entry\n * the control's path is used. Entries appear once the form is submitted;\n * `showOn=\"always\"` lists them as soon as they exist.\n *\n * Each entry is linked to its field by locating the control in the DOM, so\n * `formControlName` must be a static attribute (`formControlName=\"email\"`,\n * the usual form) rather than a binding.\n *\n * ## Signal Forms\n *\n * Point `field` at a Signal Forms root (`[field]=\"f\"`) instead of `form` and\n * the summary reads `errorSummary()` from the `FieldTree`: one entry per\n * invalid field, keyed by dotted path in `labels` / `errorMessages` like the\n * reactive path. With the default `showOn=\"submit\"` an entry appears once its\n * field is touched — `submit()` marks every field touched, so a failed submit\n * lists them all. Clicking an entry focuses the control bound with\n * `[formField]`. When the summary sits inside the `<form>`, focus also moves\n * to it after the form's `submit` event, as with `ngSubmit`.\n *\n * ```html\n * <form (submit)=\"save($event)\">\n * <mk-form-error-summary [field]=\"f\" [labels]=\"{ email: 'Email address' }\" />\n * …\n * </form>\n * ```\n *\n * ```html\n * <!-- automatic -->\n * <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n * <mk-form-error-summary #summary [form]=\"form\"\n * [labels]=\"{ email: 'Email address', age: 'Age' }\" />\n * …\n * </form>\n *\n * <!-- manual -->\n * <mk-form-error-summary #summary [errors]=\"errors()\" />\n * …\n * onSubmit() { if (invalid) { this.errors.set(collect()); this.summary.focus(); } }\n * ```\n */\n@Component({\n selector: 'mk-form-error-summary',\n templateUrl: './form-error-summary.html',\n styleUrl: './form-error-summary.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'mkFormErrorSummary',\n host: {\n class: 'mk-form-error-summary',\n role: 'alert',\n tabindex: '-1',\n '[attr.hidden]': 'hasErrors() ? null : \"\"',\n '[attr.aria-labelledby]': 'hasErrors() ? titleId : null',\n },\n})\nexport class MkFormErrorSummary {\n private readonly document = inject(DOCUMENT);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly i18n = inject(MK_I18N);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, {\n optional: true,\n });\n\n /**\n * Errors to list explicitly. When non-empty this wins over `form`, so a form\n * can mix automatic collection with server-side errors by not setting it.\n */\n readonly errors = input<readonly MkFormError[]>([]);\n /** Collect errors from this control tree instead of passing them in. */\n readonly form = input<AbstractControl | null>(null);\n /**\n * Collect errors from this Signal Forms field (usually the root returned by\n * `form()`) instead of `form`. Entries are keyed by dotted path for `labels`.\n */\n readonly field = input<Field<unknown> | null>(null);\n /** Field names for automatic entries, keyed by control path. */\n readonly labels = input<Readonly<Record<string, string>>>({});\n /** Per-key wording for automatic entries, as on `mk-form-field`. */\n readonly errorMessages = input<MkErrorMessages | null>(null);\n /** When automatic entries appear. Defaults to after the form is submitted. */\n readonly showOn = input<'submit' | 'always'>('submit');\n /** Heading shown above the list. */\n readonly summaryTitle = input<string>(this.i18n.errorSummaryTitle);\n /**\n * Move focus to the summary automatically when the surrounding form is\n * submitted with errors (the WAI/GOV.UK pattern). Disable to drive focus\n * yourself via the public `focus()`.\n */\n readonly autoFocus = input(true, { transform: booleanAttribute });\n\n readonly titleId = `${this.host.nativeElement.id || 'mk-error-summary'}-title`;\n\n /** Bumped on every change in the watched control tree. */\n private readonly formTick = signal(0);\n\n constructor() {\n const bump = () => this.formTick.update((n) => n + 1);\n let sub: Subscription | null = null;\n\n const injector = inject(Injector);\n const onSubmit = () => {\n bump();\n // After the entries have rendered (and [hidden] cleared), take the\n // user straight to the problems. `focus()` no-ops without errors.\n if (this.autoFocus()) {\n afterNextRender(() => this.focus(), { injector });\n }\n };\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n const submitSub = submit?.subscribe(onSubmit) ?? null;\n\n // Signal Forms has no `ngSubmit`; a summary placed inside the `<form>`\n // follows the native submit event instead (`submit()` marks every field\n // touched synchronously, so the entries exist by the next render).\n let nativeForm: HTMLFormElement | null = null;\n afterNextRender(() => {\n if (!this.field()) return;\n nativeForm = this.host.nativeElement.closest('form');\n nativeForm?.addEventListener('submit', onSubmit);\n });\n\n effect(() => {\n const form = this.form();\n sub?.unsubscribe();\n sub = form ? form.events.subscribe(bump) : null;\n });\n\n inject(DestroyRef).onDestroy(() => {\n sub?.unsubscribe();\n submitSub?.unsubscribe();\n nativeForm?.removeEventListener('submit', onSubmit);\n });\n }\n\n /** Whether the surrounding form (if any) has been submitted. */\n private readonly submitted = computed(() => {\n this.formTick();\n return (\n this.parentFormGroup?.submitted || this.parentForm?.submitted || false\n );\n });\n\n /**\n * Entries collected from `field` (a Signal Forms root), each with the element\n * carrying the field's `[formField]` binding so a click can focus it the way\n * `focusBoundControl()` would.\n */\n private readonly signalEntries = computed<\n readonly { error: MkFormError; element: HTMLElement | null }[]\n >(() => {\n const field = this.field();\n if (!field) return [];\n const root = field();\n const gateOnTouch = this.showOn() === 'submit';\n const labels = this.labels();\n const overrides = this.errorMessages() ?? undefined;\n const seen = new Set<string>();\n const out: { error: MkFormError; element: HTMLElement | null }[] = [];\n\n for (const err of root.errorSummary()) {\n const state = err.fieldTree();\n const name = state.name();\n if (seen.has(name) || state.disabled() || state.hidden()) continue;\n if (gateOnTouch && !state.touched()) continue;\n seen.add(name);\n const message = mkSignalErrorMessage([err], this.i18n.validation, overrides);\n if (!message) continue;\n const path = signalFieldPath(root, state) ?? '';\n const label = labels[path] ?? path;\n const element = state.formFieldBindings()[0]?.element ?? null;\n const fieldId = element?.id || name;\n out.push({\n error: { fieldId, message: label ? `${label}: ${message}` : message },\n element,\n });\n }\n return out;\n });\n\n /** Entries collected from `form`, when one is set and they should show. */\n private readonly autoErrors = computed<readonly MkFormError[]>(() => {\n if (this.field()) return this.signalEntries().map((e) => e.error);\n this.formTick();\n const form = this.form();\n if (!form) return [];\n if (this.showOn() === 'submit' && !this.submitted()) return [];\n\n const labels = this.labels();\n const overrides = this.errorMessages() ?? undefined;\n const out: MkFormError[] = [];\n\n for (const [path, control] of eachControl(form)) {\n if (control.disabled || !control.invalid || !control.errors) continue;\n const message = mkFirstErrorMessage(\n control.errors,\n this.i18n.validation,\n overrides,\n );\n if (!message) continue;\n const label = labels[path] ?? path;\n out.push({\n fieldId: this.fieldIdFor(path),\n message: label ? `${label}: ${message}` : message,\n });\n }\n return out;\n });\n\n /** The entries actually rendered — an explicit `errors` list wins. */\n protected readonly shownErrors = computed<readonly MkFormError[]>(() =>\n this.errors().length ? this.errors() : this.autoErrors(),\n );\n\n /** Whether there is anything to show. */\n protected readonly hasErrors = computed(() => this.shownErrors().length > 0);\n\n /** Move keyboard focus to the summary (call after a failed submit). */\n focus(): void {\n if (this.hasErrors()) this.host.nativeElement.focus();\n }\n\n /** Focus the field an entry points at (native anchor jump is unreliable). */\n protected focusField(event: Event, fieldId: string): void {\n const target =\n this.signalEntries().find((e) => e.error.fieldId === fieldId)?.element ??\n this.document.getElementById(fieldId) ??\n this.document.querySelector<HTMLElement>(\n `[formcontrolname=\"${cssEscape(fieldId)}\"]`,\n );\n if (!target) return;\n event.preventDefault();\n target.scrollIntoView?.({ block: 'center', behavior: 'smooth' });\n focusable(target)?.focus({ preventScroll: true });\n }\n\n /**\n * Resolves a control path to the id of the element to focus. Reactive forms\n * put `formControlName` in the DOM as a plain attribute, so the control can\n * be located from its path; the element's own `id` (which `mk-form-field`\n * assigns) is preferred so the link's `href` anchor also resolves.\n */\n private fieldIdFor(path: string): string {\n const el = this.document.querySelector<HTMLElement>(\n `[formcontrolname=\"${cssEscape(path.split('.').pop() ?? path)}\"]`,\n );\n return el?.id || path;\n }\n}\n\n/** Depth-first walk yielding `[dotted path, control]` for every leaf control. */\nfunction* eachControl(\n control: AbstractControl,\n path = '',\n): Generator<[string, AbstractControl]> {\n if (control instanceof FormGroup) {\n for (const [key, child] of Object.entries(control.controls)) {\n yield* eachControl(child, path ? `${path}.${key}` : key);\n }\n } else if (control instanceof FormArray) {\n for (let i = 0; i < control.controls.length; i++) {\n yield* eachControl(control.controls[i], `${path}.${i}`);\n }\n } else if (path) {\n yield [path, control];\n }\n}\n\n/**\n * Dotted path of a Signal Forms field under `root` (`'address.city'`,\n * `'contacts.0.name'`), found by walking the field tree along the model's\n * keys; `''` for the root itself, `null` when the field is not under `root`.\n */\nfunction signalFieldPath(\n root: ReadonlyFieldState<unknown>,\n target: ReadonlyFieldState<unknown>,\n): string | null {\n const wanted = target.name();\n const walk = (tree: Field<unknown>, path: string): string | null => {\n const state = tree();\n if (state.name() === wanted) return path;\n const value = state.value();\n if (!value || typeof value !== 'object') return null;\n const children = tree as unknown as Record<string, Field<unknown> | undefined>;\n for (const key of Object.keys(value)) {\n const child = children[key];\n if (typeof child !== 'function') continue;\n const found = walk(child, path ? `${path}.${key}` : key);\n if (found !== null) return found;\n }\n return null;\n };\n return walk(root.fieldTree as unknown as Field<unknown>, '');\n}\n\n/** Minimal attribute-value escaping for the selectors built above. */\nfunction cssEscape(value: string): string {\n return value.replace(/[\"\\\\]/g, '\\\\$&');\n}\n\n/** The element itself when focusable, otherwise its first focusable child. */\nfunction focusable(el: HTMLElement): HTMLElement | null {\n if (el.tabIndex >= 0 || /^(INPUT|SELECT|TEXTAREA|BUTTON|A)$/.test(el.tagName)) {\n return el;\n }\n return el.querySelector<HTMLElement>(\n 'input, select, textarea, button, a[href], [tabindex]:not([tabindex=\"-1\"])',\n );\n}\n","@if (hasErrors()) {\n <p [id]=\"titleId\" class=\"mk-form-error-summary__title\">{{ summaryTitle() }}</p>\n <ul class=\"mk-form-error-summary__list\">\n @for (error of shownErrors(); track error.fieldId) {\n <li class=\"mk-form-error-summary__item\">\n <a\n class=\"mk-form-error-summary__link\"\n [href]=\"'#' + error.fieldId\"\n (click)=\"focusField($event, error.fieldId)\"\n >{{ error.message }}</a\n >\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * InputGroup — wraps a native `input[mkInput]` with leading / trailing affixes\n * (icons, static text, compact buttons) inside one shared control frame. The\n * group carries the border, background and focus ring; the nested input\n * detects the group and drops its own chrome, so the whole assembly reads as\n * a single field.\n *\n * Project affixes with the `mkInputPrefix` / `mkInputSuffix` attributes. Both\n * are optional; interactive suffixes (a clear or scan button) keep their own\n * focus behaviour.\n *\n * Inside an `mk-form-field` the group inherits the field's size and invalid\n * state, and the field's label association still targets the inner input.\n *\n * ```html\n * <mk-input-group>\n * <mk-icon mkInputPrefix name=\"search\" />\n * <input mkInput type=\"search\" placeholder=\"Search…\" />\n * </mk-input-group>\n *\n * <mk-form-field label=\"Price\">\n * <mk-input-group>\n * <input mkInput type=\"number\" formControlName=\"price\" />\n * <span mkInputSuffix>zł</span>\n * </mk-input-group>\n * </mk-form-field>\n * ```\n */\n@Component({\n selector: 'mk-input-group',\n templateUrl: './input-group.html',\n styleUrl: './input-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-input-group',\n '[class.mk-input-group--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-input-group--md]': \"effectiveSize() === 'md'\",\n '[class.mk-input-group--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-input-group--invalid]': 'isInvalid()',\n '[class.mk-input-group--disabled]': 'isDisabled()',\n },\n})\nexport class MkInputGroup {\n private readonly field = inject(MkFormField, { optional: true });\n\n /** Control size. Ignored when nested in an `mk-form-field` (inherits it). */\n readonly size = input<MkSize>('md');\n /** Force the invalid visual when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Visually reflect a disabled inner control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** The size the group (and its nested input) renders at. */\n readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n /** Whether the group renders the invalid frame. */\n readonly isInvalid = computed(\n () => this.invalid() || (this.field?.hasError() ?? false),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || (this.field?.isDisabled() ?? false),\n );\n}\n","<span class=\"mk-input-group__affix mk-input-group__affix--prefix\"><ng-content select=\"[mkInputPrefix]\" /></span><ng-content /><span class=\"mk-input-group__affix mk-input-group__affix--suffix\"><ng-content select=\"[mkInputSuffix]\" /></span>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkInputGroup } from '../input-group/input-group';\n\n/**\n * Input — enhances a native `<input>` or `<textarea>` with mk-kit theming and\n * a11y wiring. It is an attribute-selector component so all native semantics\n * and keyboard behaviour come for free; this layers on tokenised styling, aria\n * state and form integration.\n *\n * It provides its own `ControlValueAccessor` (over the native `value`) so\n * `[(ngModel)]` and reactive forms write back to the DOM reliably — including\n * when the bound model is reset programmatically. IME composition is buffered\n * so `onChange` fires once per completed character, matching Angular's built-in\n * `DefaultValueAccessor`.\n *\n * When placed inside an `mk-form-field` it automatically adopts the field's\n * control id (so the `<label for>` associates), `aria-describedby`,\n * `aria-invalid` and `aria-required`.\n *\n * ```html\n * <input mkInput type=\"email\" placeholder=\"you@example.com\" />\n * <textarea mkInput rows=\"4\" [invalid]=\"true\"></textarea>\n * ```\n */\n@Component({\n selector: 'input[mkInput], textarea[mkInput]',\n templateUrl: './input.html',\n styleUrl: './input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-input',\n '[class.mk-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-input--md]': \"effectiveSize() === 'md'\",\n '[class.mk-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-input--invalid]': 'isInvalid()',\n '[class.mk-input--grouped]': 'inGroup',\n '[attr.id]': 'resolvedId()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '[attr.aria-required]': 'isRequired() || null',\n '[attr.aria-describedby]': 'describedBy()',\n '(input)': 'onInput($event)',\n '(compositionstart)': 'onCompositionStart()',\n '(compositionend)': 'onCompositionEnd($event)',\n '(blur)': 'onTouched()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkInput),\n multi: true,\n },\n ],\n})\nexport class MkInput implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly group = inject(MkInputGroup, { optional: true });\n private readonly host =\n inject<ElementRef<HTMLInputElement | HTMLTextAreaElement>>(ElementRef);\n private readonly initialId = this.host.nativeElement.getAttribute('id');\n\n /** Whether this input sits inside an `mk-input-group` (the group then owns the frame). */\n protected readonly inGroup = !!this.group;\n\n /** Control size. Ignored when nested in an `mk-form-field` (inherits it). */\n readonly size = input<MkSize>('md');\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field\n ? this.field.size()\n : (this.group?.effectiveSize() ?? this.size()),\n );\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.group?.isInvalid() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly resolvedId = computed(\n () => this.field?.controlId ?? this.initialId,\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n /** True while an IME composition is in flight (buffers `onChange`). */\n private composing = false;\n\n protected onInput(event: Event): void {\n if (this.composing) return;\n this.onChange((event.target as HTMLInputElement).value);\n }\n\n protected onCompositionStart(): void {\n this.composing = true;\n }\n\n protected onCompositionEnd(event: Event): void {\n this.composing = false;\n this.onChange((event.target as HTMLInputElement).value);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.host.nativeElement.value = value == null ? '' : String(value);\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.host.nativeElement.disabled = isDisabled;\n }\n}\n","<!-- Native input / textarea: no projected content. Styling + a11y only. -->\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize, MkTone, MkVariant } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkButton } from '@mk-kit/ui/button';\nimport { MkIcon } from '@mk-kit/ui/icon';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkInputGroup } from '../input-group/input-group';\n\n/**\n * SubmitInput — a short text entry and its action button rendered as one\n * connected control: the \"type a code and apply it\" pattern (discount codes,\n * gift cards, invite codes, newsletter sign-up, quick search).\n *\n * The button is disabled while the value is empty or blank, shows a spinner\n * while `loading` and emits {@link submitted} with the **trimmed** value on\n * click or on Enter.\n *\n * ## Enter never submits the surrounding form\n *\n * This control is normally dropped inside a bigger form (a checkout, a\n * settings page), where triggering that form's submit would be a bug. So the\n * action button is a `type=\"button\"` and, while `submitOnEnter` is on, the\n * Enter keydown is `preventDefault()`-ed — implicit form submission never\n * fires. Set `submitOnEnter=\"false\"` to restore the native behaviour and let\n * Enter reach the enclosing form.\n *\n * ## Button content\n *\n * The button is configured, not projected: `buttonLabel` sets its text.\n * Passing `buttonIcon` (a registered {@link MkIcon} name) switches it to the\n * square icon-only variant, where `buttonLabel` becomes its `aria-label` — so\n * the action always has an accessible name.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-submit-input\n * [(value)]=\"code\"\n * buttonLabel=\"Apply\"\n * [loading]=\"applying()\"\n * placeholder=\"SUMMER10\"\n * clearable\n * (submitted)=\"apply($event)\"\n * />\n *\n * <!-- icon-only, inside a field -->\n * <mk-form-field label=\"Search\">\n * <mk-submit-input buttonIcon=\"search\" buttonLabel=\"Search\" [(ngModel)]=\"q\" />\n * </mk-form-field>\n * ```\n */\n@Component({\n selector: 'mk-submit-input',\n templateUrl: './submit-input.html',\n styleUrl: './submit-input.scss',\n exportAs: 'mkSubmitInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkInputGroup, MkButton, MkIcon],\n host: {\n class: 'mk-submit-input',\n '[class.mk-submit-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-submit-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-submit-input--invalid]': 'isInvalid()',\n '[class.mk-submit-input--disabled]': 'isDisabled()',\n '[attr.aria-busy]': 'loading() || null',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSubmitInput),\n multi: true,\n },\n ],\n})\nexport class MkSubmitInput implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the whole control (input + button). */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('');\n /**\n * Accessible name for the inner input when the control is used outside an\n * `mk-form-field` (inside one, the field's `<label>` wins). Defaults to the\n * button's caption.\n */\n readonly label = input<string>('');\n /** Native `type` of the inner input (`text`, `search`, `email`, …). */\n readonly type = input<string>('text');\n /** Native `autocomplete` hint for the inner input. */\n readonly autocomplete = input<string>('off');\n /** Two-way value. `submitted` emits it trimmed; the model keeps what was typed. */\n readonly value = model<string>('');\n\n /** Button text — or, with `buttonIcon`, the icon button's `aria-label`. */\n readonly buttonLabel = input<string>('');\n /** Registered icon name; switches the button to the icon-only variant. */\n readonly buttonIcon = input<string>('');\n /** Button visual treatment. */\n readonly buttonVariant = input<MkVariant>('solid');\n /** Button colour tone. */\n readonly buttonTone = input<MkTone>('primary');\n /** Shows a spinner in the button and blocks submitting while an action runs. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Show a clear affix while the value is non-empty. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /**\n * Submit on Enter, without submitting an enclosing `<form>`. Turn it off to\n * let Enter bubble to the form as the browser normally would.\n */\n readonly submitOnEnter = input(true, { transform: booleanAttribute });\n\n /** Emits the current value, trimmed, when the action is triggered. */\n readonly submitted = output<string>();\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** Id of the inner input — the `<label for>` target inside an `mk-form-field`. */\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-submit-input');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n /** Fallback accessible name for the input when no field label describes it. */\n protected readonly inputLabel = computed(() =>\n this.labelledBy() ? null : this.label() || this.actionLabel(),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The accessible name of the action button in either variant. */\n protected readonly actionLabel = computed(\n () => this.buttonLabel() || this.i18n.submit,\n );\n /** Whether the clear affix is currently rendered. */\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n /** Blank values, a disabled control and an in-flight action all block submitting. */\n protected readonly canSubmit = computed(\n () => !this.isDisabled() && !this.loading() && this.value().trim() !== '',\n );\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).value;\n this.value.set(next);\n this.onChange(next);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || !this.submitOnEnter()) return;\n // Swallow the key so the browser's implicit submission of an enclosing\n // <form> never fires — this control owns Enter.\n event.preventDefault();\n this.submit();\n }\n\n /** Emit `submitted` with the trimmed value, when the control allows it. */\n submit(): void {\n if (!this.canSubmit()) return;\n this.submitted.emit(this.value().trim());\n }\n\n /** Clear the value and return focus to the input. */\n clear(): void {\n this.value.set('');\n this.onChange('');\n this.inputRef()?.nativeElement.focus();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set(value == null ? '' : String(value));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<mk-input-group\n [size]=\"effectiveSize()\"\n [invalid]=\"isInvalid()\"\n [disabled]=\"isDisabled()\"\n>\n <input\n #input\n class=\"mk-submit-input__field\"\n [id]=\"inputId\"\n [type]=\"type()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"inputLabel()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-submit-input__clear\"\n [attr.aria-label]=\"i18n.clear\"\n tabindex=\"-1\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"clear()\"\n ></button>\n }\n\n <button\n mkButton\n type=\"button\"\n class=\"mk-submit-input__button\"\n [size]=\"effectiveSize()\"\n [variant]=\"buttonVariant()\"\n [tone]=\"buttonTone()\"\n [iconOnly]=\"!!buttonIcon()\"\n [loading]=\"loading()\"\n [disabled]=\"!canSubmit()\"\n [attr.aria-label]=\"buttonIcon() ? actionLabel() : null\"\n (click)=\"submit()\"\n >\n @if (buttonIcon()) {\n <mk-icon [name]=\"buttonIcon()\" [size]=\"effectiveSize()\" />\n } @else {\n {{ actionLabel() }}\n }\n </button>\n</mk-input-group>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { MkButtonToggleGroup } from './button-toggle-group';\n\n/**\n * A single segment inside an `mk-button-toggle-group`. Projected content is the\n * label (text, an icon, or both). Its selected state and keyboard behaviour are\n * driven by the parent group.\n *\n * ```html\n * <mk-button-toggle value=\"bold\" aria-label=\"Bold\"><b>B</b></mk-button-toggle>\n * ```\n */\n@Component({\n selector: 'mk-button-toggle',\n templateUrl: './button-toggle.html',\n styleUrl: './button-toggle.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-button-toggle',\n '[class.mk-button-toggle--selected]': 'selected()',\n '[class.mk-button-toggle--disabled]': 'isDisabled()',\n },\n})\nexport class MkButtonToggle {\n private readonly group = inject<MkButtonToggleGroup>(\n forwardRef(() => MkButtonToggleGroup),\n { optional: true },\n );\n private readonly btnRef = viewChild.required<ElementRef<HTMLButtonElement>>(\n 'btn',\n );\n\n /** The value contributed to the group's selection when this item is on. */\n readonly value = input<unknown>(undefined);\n /** Disable just this item. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Whether this item is currently selected (owned by the parent group). */\n readonly selected = computed(() => this.group?.isSelected(this) ?? false);\n /** Disabled if the item or the whole group is disabled. */\n readonly isDisabled = computed(\n () => this.disabled() || (this.group?.isDisabled() ?? false),\n );\n\n /** `radio` in single-select groups; a plain toggle button in multiple mode. */\n protected readonly role = computed(() =>\n this.group && !this.group.multiple() ? 'radio' : null,\n );\n /** `aria-checked` for the radio role; `null` otherwise. */\n protected readonly ariaChecked = computed(() =>\n this.role() === 'radio' ? this.selected() : null,\n );\n /** `aria-pressed` for multiple-select toggle buttons; `null` otherwise. */\n protected readonly ariaPressed = computed(() =>\n this.group?.multiple() ? this.selected() : null,\n );\n /** Roving tabindex position within the group. */\n protected readonly tabIndex = computed(() => this.group?.tabIndexFor(this) ?? 0);\n\n protected onClick(): void {\n this.group?.select(this);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n this.group?.onKeydown(event, this);\n }\n\n /** Move focus to this item's button. Called by the parent group. */\n focus(): void {\n this.btnRef().nativeElement.focus();\n }\n}\n","<button\n #btn\n type=\"button\"\n class=\"mk-button-toggle__btn\"\n [attr.role]=\"role()\"\n [attr.aria-checked]=\"ariaChecked()\"\n [attr.aria-pressed]=\"ariaPressed()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [disabled]=\"isDisabled()\"\n [attr.tabindex]=\"tabIndex()\"\n (click)=\"onClick()\"\n (keydown)=\"onKeydown($event)\"\n>\n <ng-content />\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkButtonToggle } from './button-toggle';\n\n/**\n * ButtonToggleGroup — a segmented control grouping one or more\n * `mk-button-toggle` items into a single, keyboard-operable selection.\n *\n * In single-select mode (default) the group is an ARIA `radiogroup`: exactly\n * one item is selected, Arrow keys move and select, and the selected item is\n * the tab stop. Set `multiple` to allow any number of items — the group\n * becomes a toolbar of independent `aria-pressed` buttons.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model. In\n * single mode `value` is the chosen item's `value`; in multiple mode it is an\n * array of the selected values.\n *\n * ```html\n * <mk-button-toggle-group [(value)]=\"view\" aria-label=\"View\">\n * <mk-button-toggle value=\"grid\">Grid</mk-button-toggle>\n * <mk-button-toggle value=\"list\">List</mk-button-toggle>\n * </mk-button-toggle-group>\n * ```\n */\n@Component({\n selector: 'mk-button-toggle-group',\n templateUrl: './button-toggle-group.html',\n styleUrl: './button-toggle-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-button-toggle-group',\n '[attr.role]': \"multiple() ? 'group' : 'radiogroup'\",\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.data-tone]': 'tone()',\n '[class.mk-button-toggle-group--sm]': \"size() === 'sm'\",\n '[class.mk-button-toggle-group--md]': \"size() === 'md'\",\n '[class.mk-button-toggle-group--lg]': \"size() === 'lg'\",\n '[class.mk-button-toggle-group--disabled]': 'isDisabled()',\n '[class.mk-button-toggle-group--invalid]': 'isInvalid()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkButtonToggleGroup),\n multi: true,\n },\n ],\n})\nexport class MkButtonToggleGroup implements ControlValueAccessor {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n /** Optional surrounding form field — supplies label/hint/error wiring. */\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n\n /** Live list of projected toggle items, in DOM order. */\n readonly toggles = contentChildren(MkButtonToggle);\n\n /** Allow selecting any number of items (toolbar of `aria-pressed` buttons). */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Control size, applied to every item. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** The size actually applied (the form field's when nested). */\n readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n /** Label / description ids inherited from a surrounding form field. */\n protected readonly labelledBy = computed(() =>\n this.ariaLabel() ? null : (this.field?.labelId ?? null),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n /** Semantic color tone used for the selected fill. */\n readonly tone = input<MkTone>('primary');\n /** Disable the whole group. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Accessible name for the group (recommended). */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n\n /**\n * Two-way selected value. Single mode: the chosen item's `value` (or `null`).\n * Multiple mode: an array of selected values.\n */\n readonly value = model<unknown>(null);\n\n private readonly cvaDisabled = signal(false);\n private readonly roving = signal(-1);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n\n /** The single item that currently owns the tab stop (roving tabindex). */\n private readonly rovingTarget = computed<MkButtonToggle | null>(() => {\n const list = this.toggles();\n if (!list.length || this.isDisabled()) return null;\n const idx = this.roving();\n if (idx >= 0 && idx < list.length && !list[idx].disabled()) return list[idx];\n const selected = list.find((t) => this.isSelected(t) && !t.disabled());\n return selected ?? list.find((t) => !t.disabled()) ?? null;\n });\n\n /** Whether a given item is part of the current selection. */\n isSelected(toggle: MkButtonToggle): boolean {\n const v = this.value();\n if (this.multiple()) {\n return Array.isArray(v) && v.includes(toggle.value());\n }\n return v === toggle.value();\n }\n\n /** `0` for the item that owns the tab stop, `-1` for the rest. */\n tabIndexFor(toggle: MkButtonToggle): number {\n return this.rovingTarget() === toggle ? 0 : -1;\n }\n\n /** Toggle (multiple) or set (single) the selection for an item. */\n select(toggle: MkButtonToggle): void {\n if (this.isDisabled() || toggle.disabled()) return;\n if (this.multiple()) {\n const current = Array.isArray(this.value())\n ? [...(this.value() as unknown[])]\n : [];\n const at = current.indexOf(toggle.value());\n if (at >= 0) current.splice(at, 1);\n else current.push(toggle.value());\n this.commit(current);\n } else {\n if (this.value() === toggle.value()) return;\n this.commit(toggle.value());\n }\n }\n\n onKeydown(event: KeyboardEvent, toggle: MkButtonToggle): void {\n const list = this.toggles();\n const from = list.indexOf(toggle);\n let next = -1;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = this.nextEnabled(from, 1);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = this.nextEnabled(from, -1);\n break;\n case 'Home':\n next = this.nextEnabled(-1, 1);\n break;\n case 'End':\n next = this.nextEnabled(list.length, -1);\n break;\n case ' ':\n case 'Enter':\n event.preventDefault();\n this.select(toggle);\n return;\n default:\n return;\n }\n if (next >= 0) {\n event.preventDefault();\n this.roving.set(next);\n list[next].focus();\n // In single-select mode focus moves selection (radiogroup semantics).\n if (!this.multiple()) this.select(list[next]);\n }\n }\n\n private nextEnabled(from: number, step: number): number {\n const list = this.toggles();\n const count = list.length;\n if (!count) return -1;\n for (let i = 1; i <= count; i++) {\n const idx = (((from + step * i) % count) + count) % count;\n if (!list[idx].disabled()) return idx;\n }\n return -1;\n }\n\n private commit(value: unknown): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MkButtonToggle, MkButtonToggleGroup } from '../button-toggle';\nimport { MkInput } from '../input';\nimport { MkSize } from '@mk-kit/ui/core';\n\n/** One translatable locale offered by {@link MkI18nInput}. */\nexport interface MkI18nLocale {\n /** Value key in the bound record, e.g. `pl`. */\n code: string;\n /** Short switcher label, e.g. `PL`. */\n label: string;\n /** Longer name for the accessible label, e.g. `Polish`. */\n name?: string;\n}\n\n/** The bound value: one string per locale code. */\nexport type MkI18nValue = Record<string, string>;\n\n/**\n * I18nInput — one field that edits the same text in several languages.\n *\n * The common alternative is stacking one input per language, which grows the\n * form linearly with locale count and buries the field the author actually\n * cares about. This shows a single input and a compact switcher, and marks\n * which locales already have content so nothing is silently left untranslated.\n *\n * Binds a `Record<code, string>`, so it drops into reactive forms as one\n * control instead of a nested group:\n *\n * ```html\n * <mk-form-field label=\"Name\">\n * <mk-i18n-input formControlName=\"name\" [locales]=\"locales\" />\n * </mk-form-field>\n * ```\n *\n * ```ts\n * locales = [\n * { code: 'en', label: 'EN', name: 'English' },\n * { code: 'pl', label: 'PL', name: 'Polish' },\n * ];\n * ```\n */\n@Component({\n selector: 'mk-i18n-input',\n templateUrl: './i18n-input.html',\n styleUrl: './i18n-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, MkButtonToggle, MkButtonToggleGroup, MkInput],\n host: { class: 'mk-i18n-input' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkI18nInput),\n multi: true,\n },\n ],\n})\nexport class MkI18nInput implements ControlValueAccessor {\n /** Locales offered, in switcher order. The first is the initial tab. */\n readonly locales = input<readonly MkI18nLocale[]>([]);\n /** Render a textarea instead of a single-line input. */\n readonly multiline = input(false, { transform: booleanAttribute });\n /** Textarea rows (ignored unless `multiline`). */\n readonly rows = input(3, { transform: numberAttribute });\n /** Placeholder for the active locale's input. */\n readonly placeholder = input('');\n /** Control size, forwarded to the input and the switcher. */\n readonly size = input<MkSize>('md');\n /**\n * Locale codes that must be filled. They get a marker in the switcher while\n * empty, so a missing translation is visible without switching to it.\n */\n readonly requiredLocales = input<readonly string[]>([]);\n /** Disable the whole control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private readonly value = signal<MkI18nValue>({});\n private readonly cvaDisabled = signal(false);\n protected readonly activeCode = signal<string | null>(null);\n\n /** The locale currently being edited — the first one until switched. */\n protected readonly active = computed(() => {\n const list = this.locales();\n const code = this.activeCode();\n return list.find((l) => l.code === code) ?? list[0] ?? null;\n });\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n /** Text for the active locale. */\n protected readonly activeText = computed(() => {\n const code = this.active()?.code;\n return code ? (this.value()[code] ?? '') : '';\n });\n\n /** Locale codes that currently hold text — drives the switcher markers. */\n protected readonly filled = computed(() => {\n const v = this.value();\n return new Set(\n Object.keys(v).filter((code) => (v[code] ?? '').trim().length > 0),\n );\n });\n\n /** True when a required locale is still empty. */\n protected missing(code: string): boolean {\n return this.requiredLocales().includes(code) && !this.filled().has(code);\n }\n\n protected onSwitch(code: string): void {\n this.activeCode.set(code);\n }\n\n protected onInput(text: string): void {\n const code = this.active()?.code;\n if (!code) return;\n const next = { ...this.value(), [code]: text };\n this.value.set(next);\n this.onChange(next);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n /** Accessible label for a switcher item, e.g. \"Polish — missing\". */\n protected switcherAria(locale: MkI18nLocale): string {\n const base = locale.name ?? locale.label;\n return this.missing(locale.code) ? `${base} (empty)` : base;\n }\n\n // ── ControlValueAccessor ────────────────────────────────────────────────\n private onChange: (value: MkI18nValue) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: MkI18nValue | null): void {\n this.value.set(value ?? {});\n }\n\n registerOnChange(fn: (value: MkI18nValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","@if (locales().length > 1) {\n <mk-button-toggle-group\n class=\"mk-i18n-input__switcher\"\n [size]=\"size()\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"active()?.code\"\n (ngModelChange)=\"onSwitch($event)\"\n >\n @for (locale of locales(); track locale.code) {\n <mk-button-toggle [value]=\"locale.code\" [attr.aria-label]=\"switcherAria(locale)\">\n {{ locale.label }}\n @if (missing(locale.code)) {\n <span class=\"mk-i18n-input__marker\" aria-hidden=\"true\">•</span>\n }\n </mk-button-toggle>\n }\n </mk-button-toggle-group>\n}\n\n@if (multiline()) {\n <textarea\n mkInput\n class=\"mk-i18n-input__field\"\n [rows]=\"rows()\"\n [size]=\"size()\"\n [disabled]=\"isDisabled()\"\n [placeholder]=\"placeholder()\"\n [value]=\"activeText()\"\n [attr.lang]=\"active()?.code\"\n (input)=\"onInput($any($event.target).value)\"\n (blur)=\"onBlur()\"\n ></textarea>\n} @else {\n <input\n mkInput\n class=\"mk-i18n-input__field\"\n [size]=\"size()\"\n [disabled]=\"isDisabled()\"\n [placeholder]=\"placeholder()\"\n [value]=\"activeText()\"\n [attr.lang]=\"active()?.code\"\n (input)=\"onInput($any($event.target).value)\"\n (blur)=\"onBlur()\"\n />\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n type OnDestroy,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single selectable option for {@link MkSelect}. */\nexport interface MkSelectOption {\n /** Text shown to the user (and used for typeahead). */\n label: string;\n /** The value bound to the form control when chosen. */\n value: unknown;\n /** Disable the option (skipped by keyboard + not selectable). */\n disabled?: boolean;\n}\n\n/**\n * Select — a fully custom, accessible single-select implementing the ARIA\n * listbox/combobox pattern. Options are supplied via the `options` input.\n *\n * Keyboard: Up/Down to move, Home/End to jump, Enter/Space to select, Esc to\n * close, and typeahead by typing option text. Focus stays on the trigger\n * (`aria-activedescendant` pattern) for robust screen-reader behaviour.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so it\n * works with `[(ngModel)]`, reactive forms and `[(value)]`.\n *\n * ```html\n * <mk-select placeholder=\"Pick a role\"\n * [options]=\"[{label:'Admin', value:'admin'}, {label:'Editor', value:'editor'}]\"\n * [(ngModel)]=\"role\" />\n * ```\n */\n@Component({\n selector: 'mk-select',\n templateUrl: './select.html',\n styleUrl: './select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-select',\n '[class.mk-select--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-select--md]': \"effectiveSize() === 'md'\",\n '[class.mk-select--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-select--open]': 'open()',\n '[class.mk-select--invalid]': 'isInvalid()',\n '[class.mk-select--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSelect),\n multi: true,\n },\n ],\n})\nexport class MkSelect implements ControlValueAccessor, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n\n /** The list of options to choose from. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly options = input<readonly MkSelectOption[]>([]);\n /** Placeholder shown when nothing is selected. */\n readonly placeholder = input<string>(this.i18n.selectPlaceholder);\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Two-way selected value. */\n readonly value = model<unknown>(null);\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n private typeahead = '';\n private typeaheadTimer?: ReturnType<typeof setTimeout>;\n\n readonly listId = mkUniqueId('mk-select-list');\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-select');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n protected readonly selectedIndex = computed(() =>\n this.options().findIndex((o) => o.value === this.value()),\n );\n protected readonly displayLabel = computed(\n () => this.options()[this.selectedIndex()]?.label ?? '',\n );\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openList();\n }\n\n private openList(): void {\n if (this.isDisabled()) return;\n this.open.set(true);\n const sel = this.selectedIndex();\n this.activeIndex.set(sel >= 0 ? sel : this.firstEnabled());\n }\n\n protected close(): void {\n if (!this.open()) return;\n this.open.set(false);\n this.activeIndex.set(-1);\n this.onTouched();\n }\n\n protected selectOption(index: number): void {\n const opt = this.options()[index];\n if (!opt || opt.disabled) return;\n this.value.set(opt.value);\n this.onChange(opt.value);\n this.close();\n this.focusTrigger();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const key = e.key;\n\n if (!this.open()) {\n if (\n key === 'ArrowDown' ||\n key === 'ArrowUp' ||\n key === 'Enter' ||\n key === ' '\n ) {\n e.preventDefault();\n this.openList();\n } else if (key.length === 1) {\n this.openList();\n this.typeaheadSearch(key);\n }\n return;\n }\n\n switch (key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.selectOption(this.activeIndex());\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n this.focusTrigger();\n break;\n case 'Tab':\n this.close();\n break;\n default:\n if (key.length === 1) this.typeaheadSearch(key);\n }\n }\n\n protected onBlur(): void {\n // Closing on blur also fires onTouched via close().\n if (this.open()) this.close();\n else this.onTouched();\n }\n\n private move(delta: number): void {\n const opts = this.options();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.options().findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(): number {\n const opts = this.options();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) return i;\n }\n return -1;\n }\n\n private typeaheadSearch(char: string): void {\n this.typeahead += char.toLowerCase();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.typeaheadTimer = setTimeout(() => (this.typeahead = ''), 500);\n\n const opts = this.options();\n const match = opts.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(this.typeahead),\n );\n if (match >= 0) this.activeIndex.set(match);\n }\n\n private focusTrigger(): void {\n this.triggerRef()?.nativeElement.focus();\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"mk-select__trigger\"\n [id]=\"triggerId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || null)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n>\n @if (displayLabel()) {\n <span class=\"mk-select__value\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-select__value mk-select__value--placeholder\">{{\n placeholder()\n }}</span>\n }\n <span class=\"mk-select__arrow\" aria-hidden=\"true\"></span>\n</button>\n\n@if (open()) {\n <ul\n class=\"mk-select__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"trigger\"\n [matchWidth]=\"true\"\n (dismiss)=\"close()\"\n [id]=\"listId\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"labelledBy()\"\n >\n @for (opt of options(); track $index; let i = $index) {\n <li\n class=\"mk-select__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n [class.mk-select__option--active]=\"i === activeIndex()\"\n [class.mk-select__option--selected]=\"i === selectedIndex()\"\n [class.mk-select__option--disabled]=\"opt.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"!opt.disabled && activeIndex.set(i)\"\n (click)=\"selectOption(i)\"\n >\n <span class=\"mk-select__option-label\">{{ opt.label }}</span>\n @if (i === selectedIndex()) {\n <span class=\"mk-select__check\" aria-hidden=\"true\"></span>\n }\n </li>\n } @empty {\n <li class=\"mk-select__empty\" role=\"presentation\">{{ i18n.noOptions }}</li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterRenderEffect,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n type OnDestroy,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport { MK_I18N, mkUniqueId, type MkSize } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/** One row of an `mk-listbox`. */\nexport interface MkListboxOption {\n /** Text shown (and matched by typeahead / the filter). */\n label: string;\n /** Value committed to the model when selected. */\n value: unknown;\n /** Secondary line under the label. */\n description?: string;\n /** Skipped by keyboard, not selectable. */\n disabled?: boolean;\n /** Options sharing a `group` render under one heading (keep them adjacent). */\n group?: string;\n}\n\n/** A rendered row: either a group heading or an option with its index in the visible list. */\ntype Row = { kind: 'group'; label: string; id: string } | { kind: 'option'; option: MkListboxOption; index: number };\n\n/**\n * Listbox — a standalone, always-visible selection list (the ARIA `listbox`\n * pattern) for one or many values: settings panes, \"choose a template\"\n * pickers, side-by-side assignments, any place a dropdown would hide choices\n * the user should see at once.\n *\n * Keyboard: Up / Down move, Home / End jump, PageUp / PageDown skip ten,\n * type to jump to a label, Enter / Space select (toggle when `multiple`),\n * Shift+Arrow / Shift+click extend a range, Ctrl/Cmd+A selects all. Focus\n * stays on the list (`aria-activedescendant`). With `filterable`, a search\n * box above the list narrows it by label or description.\n *\n * Implements `ControlValueAccessor` and a two-way `value` model — a single\n * value, or an array when `multiple`.\n *\n * ```html\n * <mk-listbox [options]=\"plans\" [(value)]=\"plan\" ariaLabel=\"Plan\" />\n * <mk-listbox multiple filterable [options]=\"people\" [(ngModel)]=\"reviewers\" />\n * ```\n */\n@Component({\n selector: 'mk-listbox',\n templateUrl: './listbox.html',\n styleUrl: './listbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-listbox',\n '[class.mk-listbox--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-listbox--md]': \"effectiveSize() === 'md'\",\n '[class.mk-listbox--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-listbox--multiple]': 'multiple()',\n '[class.mk-listbox--invalid]': 'isInvalid()',\n '[class.mk-listbox--disabled]': 'isDisabled()',\n },\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MkListbox), multi: true }],\n})\nexport class MkListbox implements ControlValueAccessor, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly listRef = viewChild.required<ElementRef<HTMLElement>>('list');\n\n /** The rows to choose from. */\n readonly options = input<readonly MkListboxOption[]>([]);\n /** Allow several values; the model becomes an array. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Show a search box that narrows the list by label / description. */\n readonly filterable = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input<string | undefined>(undefined);\n /**\n * Single-select only: moving with the arrow keys selects immediately\n * (default `true`); `false` requires Enter / Space to commit.\n */\n readonly selectionFollowsFocus = input(true, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Accessible name when there is no visible label / form field. */\n readonly ariaLabel = input<string | undefined>(undefined);\n readonly ariaLabelledby = input<string | undefined>(undefined);\n /** Text shown when no option matches the filter. */\n readonly emptyText = input<string | undefined>(undefined);\n /** Two-way value: one value, or an array when `multiple`. */\n readonly value = model<unknown>(null);\n\n /** Emitted after the user changes the selection (not on programmatic writes). */\n readonly change = output<unknown>();\n\n readonly listId = this.field?.controlId ?? mkUniqueId('mk-listbox');\n protected readonly filterId = mkUniqueId('mk-listbox-filter');\n protected readonly query = signal('');\n protected readonly activeIndex = signal(-1);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n private typeahead = '';\n private typeaheadTimer?: ReturnType<typeof setTimeout>;\n /** Range anchor for Shift selection (index in the visible list). */\n private anchor = -1;\n\n protected readonly effectiveSize = computed<MkSize>(() => (this.field ? this.field.size() : this.size()));\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isInvalid = computed(() => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false));\n protected readonly labelledBy = computed(() => this.ariaLabelledby() ?? this.field?.labelId ?? null);\n protected readonly describedBy = computed(() => this.field?.describedBy() ?? null);\n\n /** Options that match the filter, in source order. */\n protected readonly visible = computed<MkListboxOption[]>(() => {\n const q = this.query().trim().toLocaleLowerCase();\n const all = this.options();\n if (!q) return [...all];\n return all.filter(\n (o) => o.label.toLocaleLowerCase().includes(q) || (o.description?.toLocaleLowerCase().includes(q) ?? false),\n );\n });\n\n /** Visible options with group headings interleaved. */\n protected readonly rows = computed<Row[]>(() => {\n const out: Row[] = [];\n let lastGroup: string | undefined;\n this.visible().forEach((option, index) => {\n if (option.group && option.group !== lastGroup) {\n out.push({ kind: 'group', label: option.group, id: `${this.listId}-grp-${out.length}` });\n }\n lastGroup = option.group;\n out.push({ kind: 'option', option, index });\n });\n return out;\n });\n\n protected readonly selectedValues = computed<unknown[]>(() => {\n const v = this.value();\n if (this.multiple()) return Array.isArray(v) ? v : v == null ? [] : [v];\n return v == null ? [] : [v];\n });\n\n protected readonly activeId = computed(() => (this.activeIndex() >= 0 ? this.optionId(this.activeIndex()) : null));\n\n constructor() {\n // Keep the active row in view as it changes.\n afterRenderEffect(() => {\n const i = this.activeIndex();\n if (i < 0) return;\n const el = this.listRef().nativeElement.ownerDocument.getElementById(this.optionId(i));\n el?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected isSelected(option: MkListboxOption): boolean {\n return this.selectedValues().includes(option.value);\n }\n\n /** Focus the list. */\n focus(): void {\n this.listRef().nativeElement.focus();\n }\n\n // --- Pointer -----------------------------------------------------------------\n\n protected onOptionClick(index: number, event: MouseEvent): void {\n if (this.isDisabled()) return;\n const option = this.visible()[index];\n if (!option || option.disabled) return;\n this.activeIndex.set(index);\n if (this.multiple() && event.shiftKey && this.anchor >= 0) {\n this.selectRange(this.anchor, index, !(event.ctrlKey || event.metaKey));\n } else {\n this.commit(index, this.multiple() ? 'toggle' : 'select');\n this.anchor = index;\n }\n }\n\n protected onFilterInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n this.activeIndex.set(-1);\n this.anchor = -1;\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n // Arrow keys from the search box hand over to the list.\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.focus();\n this.jump(event.key === 'ArrowDown' ? this.firstEnabled() : this.lastEnabled(), false);\n }\n }\n\n // --- Keyboard ----------------------------------------------------------------\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n const key = event.key;\n const multi = this.multiple();\n switch (key) {\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n this.step(key === 'ArrowDown' ? 1 : -1, event.shiftKey);\n break;\n case 'Home':\n case 'End':\n event.preventDefault();\n this.jump(key === 'Home' ? this.firstEnabled() : this.lastEnabled(), event.shiftKey);\n break;\n case 'PageDown':\n case 'PageUp':\n event.preventDefault();\n this.step(key === 'PageDown' ? 10 : -10, event.shiftKey, false);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.activeIndex() >= 0) {\n this.commit(this.activeIndex(), multi ? 'toggle' : 'select');\n this.anchor = this.activeIndex();\n }\n break;\n case 'a':\n case 'A':\n if (multi && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this.selectAll();\n } else if (key.length === 1) this.typeaheadSearch(key);\n break;\n default:\n if (key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) this.typeaheadSearch(key);\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n /** Move the active row by `delta` (wrapping for ±1), extending the selection with Shift. */\n private step(delta: number, extend: boolean, wrap = true): void {\n const opts = this.visible();\n if (!opts.length) return;\n let i = this.activeIndex();\n if (i < 0) {\n this.jump(delta > 0 ? this.firstEnabled() : this.lastEnabled(), extend);\n return;\n }\n if (Math.abs(delta) === 1) {\n for (let s = 0; s < opts.length; s++) {\n i = wrap ? (i + delta + opts.length) % opts.length : Math.min(Math.max(i + delta, 0), opts.length - 1);\n if (!opts[i].disabled) break;\n }\n } else {\n i = Math.min(Math.max(i + delta, 0), opts.length - 1);\n // Land on an enabled row, searching in the direction of travel then back.\n let j = i;\n while (j >= 0 && j < opts.length && opts[j].disabled) j += Math.sign(delta);\n if (j < 0 || j >= opts.length) {\n j = i;\n while (j >= 0 && j < opts.length && opts[j].disabled) j -= Math.sign(delta);\n }\n i = j;\n }\n this.jump(i, extend);\n }\n\n private jump(index: number, extend: boolean): void {\n if (index < 0) return;\n this.activeIndex.set(index);\n if (this.multiple()) {\n if (extend) {\n if (this.anchor < 0) this.anchor = index;\n this.selectRange(this.anchor, index, true);\n } else {\n // Plain navigation moves the range anchor along with the cursor.\n this.anchor = index;\n }\n } else if (this.selectionFollowsFocus()) {\n this.commit(index, 'select');\n }\n }\n\n private firstEnabled(): number {\n return this.visible().findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(): number {\n const opts = this.visible();\n for (let i = opts.length - 1; i >= 0; i--) if (!opts[i].disabled) return i;\n return -1;\n }\n\n private typeaheadSearch(char: string): void {\n this.typeahead += char.toLocaleLowerCase();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.typeaheadTimer = setTimeout(() => (this.typeahead = ''), 500);\n const opts = this.visible();\n const start = this.activeIndex() + 1;\n for (let s = 0; s < opts.length; s++) {\n const i = (start + s) % opts.length;\n if (!opts[i].disabled && opts[i].label.toLocaleLowerCase().startsWith(this.typeahead)) {\n this.jump(i, false);\n return;\n }\n }\n }\n\n // --- Selection ---------------------------------------------------------------\n\n private commit(index: number, mode: 'select' | 'toggle'): void {\n const option = this.visible()[index];\n if (!option || option.disabled) return;\n if (!this.multiple()) {\n if (this.value() === option.value) return;\n this.emit(option.value);\n return;\n }\n const current = this.selectedValues();\n const next =\n mode === 'toggle' && current.includes(option.value)\n ? current.filter((v) => v !== option.value)\n : current.includes(option.value)\n ? current\n : [...current, option.value];\n this.emit(next);\n }\n\n /** Select every enabled option between two visible indexes (replacing, or adding to, the selection). */\n private selectRange(from: number, to: number, replace: boolean): void {\n const opts = this.visible();\n const [lo, hi] = from < to ? [from, to] : [to, from];\n const range = opts.slice(lo, hi + 1).filter((o) => !o.disabled).map((o) => o.value);\n const base = replace ? [] : this.selectedValues();\n this.emit([...base, ...range.filter((v) => !base.includes(v))]);\n }\n\n private selectAll(): void {\n const all = this.visible().filter((o) => !o.disabled).map((o) => o.value);\n const current = this.selectedValues();\n // Ctrl+A toggles: everything selected → clear, else select all.\n this.emit(all.every((v) => current.includes(v)) ? [] : all);\n }\n\n private emit(value: unknown): void {\n this.value.set(value);\n this.onChange(value);\n this.change.emit(value);\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n }\n\n // --- ControlValueAccessor ----------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","@if (filterable()) {\n <div class=\"mk-listbox__filter\">\n <input\n class=\"mk-listbox__filter-input\"\n type=\"search\"\n [id]=\"filterId\"\n [value]=\"query()\"\n [placeholder]=\"filterPlaceholder() ?? i18n.listboxFilter\"\n [disabled]=\"isDisabled()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-label]=\"i18n.listboxFilter\"\n autocomplete=\"off\"\n (input)=\"onFilterInput($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n />\n </div>\n}\n\n<ul\n #list\n class=\"mk-listbox__list\"\n role=\"listbox\"\n [id]=\"listId\"\n [tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-multiselectable]=\"multiple() ? 'true' : null\"\n [attr.aria-activedescendant]=\"activeId()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n>\n @for (row of rows(); track row.kind === 'group' ? row.id : row.option.value) {\n @if (row.kind === 'group') {\n <li class=\"mk-listbox__group\" role=\"presentation\" [id]=\"row.id\">{{ row.label }}</li>\n } @else {\n @let selected = isSelected(row.option);\n <li\n class=\"mk-listbox__option\"\n role=\"option\"\n [id]=\"optionId(row.index)\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-disabled]=\"row.option.disabled || null\"\n [class.mk-listbox__option--active]=\"row.index === activeIndex()\"\n [class.mk-listbox__option--selected]=\"selected\"\n [class.mk-listbox__option--disabled]=\"row.option.disabled\"\n (click)=\"onOptionClick(row.index, $event)\"\n >\n @if (multiple()) {\n <span class=\"mk-listbox__box\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 12 12\" width=\"12\" height=\"12\" focusable=\"false\"><path d=\"M2.5 6.5l2.5 2.5 4.5-5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></svg>\n </span>\n }\n <span class=\"mk-listbox__text\">\n <span class=\"mk-listbox__label\">{{ row.option.label }}</span>\n @if (row.option.description) {\n <span class=\"mk-listbox__description\">{{ row.option.description }}</span>\n }\n </span>\n @if (!multiple() && selected) {\n <span class=\"mk-listbox__check\" aria-hidden=\"true\"></span>\n }\n </li>\n }\n }\n @if (!rows().length) {\n <li class=\"mk-listbox__empty\" role=\"presentation\">{{ emptyText() ?? i18n.listboxEmpty }}</li>\n }\n</ul>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n type OnDestroy,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport { MK_I18N, MkAnchoredPanel, mkUniqueId, type MkSize } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/** One node of a cascader: a leaf, or a parent with `children`. */\nexport interface MkCascaderOption {\n label: string;\n value: unknown;\n children?: readonly MkCascaderOption[];\n disabled?: boolean;\n}\n\n/**\n * Cascader — a select whose choices are a hierarchy shown as side-by-side\n * columns (region → country → city, category → subcategory, org unit → team).\n * Each pick opens the next column; picking a leaf commits the whole path.\n *\n * The value is the **path** of option values (`['eu', 'pl', 'krk']`) by\n * default, or just the leaf's value with `valueMode=\"leaf\"`. Parents are only\n * selectable with `selectParents` (a click on one then commits, and its\n * children stay reachable).\n *\n * Keyboard: Up / Down move within a column, Right opens the children, Left\n * goes back, Enter / Space selects, typing jumps to a label, Escape closes.\n * `expandTrigger=\"hover\"` opens columns on pointer hover as well as click.\n *\n * Implements `ControlValueAccessor` and a two-way `value` model.\n *\n * ```html\n * <mk-cascader [options]=\"regions\" [(value)]=\"location\" placeholder=\"Where?\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-cascader',\n templateUrl: './cascader.html',\n styleUrl: './cascader.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-cascader',\n '[class.mk-cascader--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-cascader--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-cascader--open]': 'open()',\n '[class.mk-cascader--invalid]': 'isInvalid()',\n '[class.mk-cascader--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MkCascader), multi: true }],\n})\nexport class MkCascader implements ControlValueAccessor, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef = viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** The hierarchy to choose from. */\n readonly options = input<readonly MkCascaderOption[]>([]);\n /** Two-way value: the path of values (default) or the leaf value (`valueMode=\"leaf\"`). */\n readonly value = model<unknown>(null);\n /** Bind the full path of values (default) or only the chosen option's value. */\n readonly valueMode = input<'path' | 'leaf'>('path');\n /** Allow committing a parent option (click / Enter on it) instead of leaves only. */\n readonly selectParents = input(false, { transform: booleanAttribute });\n /** Open the next column on click (default) or also on pointer hover. */\n readonly expandTrigger = input<'click' | 'hover'>('click');\n readonly placeholder = input(this.i18n.selectPlaceholder);\n /** Text between the labels of the chosen path. */\n readonly separator = input(' / ');\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n /** Emitted after the user commits or clears a value. */\n readonly change = output<unknown>();\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-cascader');\n readonly panelId = mkUniqueId('mk-cascader-panel');\n readonly valueId = mkUniqueId('mk-cascader-value');\n\n protected readonly open = signal(false);\n /** Row index highlighted in each open column, left to right. */\n protected readonly activePath = signal<number[]>([]);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n private typeahead = '';\n private typeaheadTimer?: ReturnType<typeof setTimeout>;\n\n protected readonly effectiveSize = computed<MkSize>(() => (this.field ? this.field.size() : this.size()));\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isInvalid = computed(() => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false));\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(() => this.field?.describedBy() ?? null);\n\n /** The options along the committed value, or `[]`. */\n protected readonly selectedPath = computed<MkCascaderOption[]>(() => {\n const v = this.value();\n if (v == null) return [];\n if (this.valueMode() === 'path') {\n if (!Array.isArray(v)) return [];\n const out: MkCascaderOption[] = [];\n let list: readonly MkCascaderOption[] = this.options();\n for (const step of v) {\n const hit = list.find((o) => o.value === step);\n if (!hit) return [];\n out.push(hit);\n list = hit.children ?? [];\n }\n return out;\n }\n return this.findPath(this.options(), v) ?? [];\n });\n\n protected readonly displayLabel = computed(() => this.selectedPath().map((o) => o.label).join(this.separator()));\n\n /**\n * Columns rendered in the panel: the root list, then the children of every\n * opened parent along the active path. The last entry of the path is the\n * cursor — resting on a parent does not open it (click, hover or → does).\n */\n protected readonly columns = computed<readonly MkCascaderOption[][]>(() => {\n const cols: MkCascaderOption[][] = [[...this.options()]];\n const path = this.activePath();\n for (let depth = 0; depth < path.length - 1; depth++) {\n const opt = cols[depth]?.[path[depth]];\n if (!opt?.children?.length) break;\n cols.push([...opt.children]);\n }\n return cols;\n });\n\n /** The column the keyboard cursor is in. */\n private readonly cursorColumn = computed(() => Math.max(0, Math.min(this.activePath().length - 1, this.columns().length - 1)));\n\n protected readonly activeId = computed(() => {\n const path = this.activePath();\n const col = this.cursorColumn();\n return path.length ? this.optionId(col, path[col]) : null;\n });\n\n constructor() {\n afterRenderEffect(() => {\n const id = this.activeId();\n if (!id || !this.open()) return;\n this.panelRef()?.nativeElement.ownerDocument.getElementById(id)?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n protected optionId(column: number, row: number): string {\n return `${this.panelId}-c${column}-r${row}`;\n }\n\n protected isOnPath(column: number, row: number): boolean {\n return this.activePath()[column] === row;\n }\n\n protected isSelected(column: number, option: MkCascaderOption): boolean {\n return this.selectedPath()[column] === option;\n }\n\n protected isCursor(column: number, row: number): boolean {\n return this.cursorColumn() === column && this.activePath()[column] === row;\n }\n\n // --- Open / close ------------------------------------------------------------\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n // Start on the committed path (its columns open), else on the first row.\n const sel = this.selectedPath();\n const path = sel.length ? this.indexPath(sel) : [this.firstEnabled(this.options())].filter((i) => i >= 0);\n this.activePath.set(path);\n this.open.set(true);\n afterNextRender(() => this.panelRef()?.nativeElement.focus(), { injector: this.injector });\n }\n\n protected close(restoreFocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (restoreFocus) this.triggerRef()?.nativeElement.focus();\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.openPanel();\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (related && (this.host.nativeElement.contains(related) || this.panelRef()?.nativeElement.contains(related))) return;\n this.close();\n this.onTouched();\n }\n\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (!related) return;\n if (this.host.nativeElement.contains(related) || this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n // --- Pointer -----------------------------------------------------------------\n\n protected onOptionClick(column: number, row: number): void {\n const option = this.columns()[column]?.[row];\n if (!option || option.disabled) return;\n if (option.children?.length) {\n this.expand(column, row);\n if (this.selectParents()) this.commit(column, row);\n return;\n }\n this.setCursor(column, row);\n this.commit(column, row);\n }\n\n protected onOptionHover(column: number, row: number): void {\n if (this.expandTrigger() !== 'hover') return;\n const option = this.columns()[column]?.[row];\n if (!option || option.disabled) return;\n this.expand(column, row);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.emit(null);\n this.triggerRef()?.nativeElement.focus();\n }\n\n // --- Keyboard ----------------------------------------------------------------\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n const col = this.cursorColumn();\n const column = this.columns()[col] ?? [];\n const row = this.activePath()[col] ?? -1;\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault();\n const next = this.stepRow(column, row, event.key === 'ArrowDown' ? 1 : -1);\n if (next >= 0) this.setCursor(col, next);\n break;\n }\n case 'Home':\n case 'End': {\n event.preventDefault();\n const next = event.key === 'Home' ? this.firstEnabled(column) : this.lastEnabled(column);\n if (next >= 0) this.setCursor(col, next);\n break;\n }\n case 'ArrowRight':\n event.preventDefault();\n if (row >= 0) this.expand(col, row);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (col > 0) this.activePath.set(this.activePath().slice(0, col));\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const option = column[row];\n if (!option || option.disabled) break;\n if (option.children?.length && !this.selectParents()) {\n this.expand(col, row);\n } else {\n this.commit(col, row);\n }\n break;\n }\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n break;\n case 'Tab':\n this.close();\n break;\n default:\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n this.typeaheadSearch(event.key, col, column, row);\n }\n }\n }\n\n /** Point the cursor at `(column, row)`, trimming any deeper columns. */\n private setCursor(column: number, row: number): void {\n this.activePath.set([...this.activePath().slice(0, column), row]);\n }\n\n /** Open the children of `(column, row)` and move the cursor onto the first enabled one. */\n private expand(column: number, row: number): void {\n const option = this.columns()[column]?.[row];\n const children = option?.children;\n const first = children?.length ? this.firstEnabled(children) : -1;\n this.activePath.set(first >= 0 ? [...this.activePath().slice(0, column), row, first] : [...this.activePath().slice(0, column), row]);\n }\n\n private stepRow(column: readonly MkCascaderOption[], from: number, delta: number): number {\n if (!column.length) return -1;\n let i = from;\n for (let s = 0; s < column.length; s++) {\n i = (i + delta + column.length) % column.length;\n if (!column[i].disabled) return i;\n }\n return -1;\n }\n\n private firstEnabled(list: readonly MkCascaderOption[]): number {\n return list.findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(list: readonly MkCascaderOption[]): number {\n for (let i = list.length - 1; i >= 0; i--) if (!list[i].disabled) return i;\n return -1;\n }\n\n private typeaheadSearch(char: string, col: number, column: readonly MkCascaderOption[], from: number): void {\n this.typeahead += char.toLocaleLowerCase();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.typeaheadTimer = setTimeout(() => (this.typeahead = ''), 500);\n for (let s = 1; s <= column.length; s++) {\n const i = (from + s) % column.length;\n if (!column[i].disabled && column[i].label.toLocaleLowerCase().startsWith(this.typeahead)) {\n this.setCursor(col, i);\n return;\n }\n }\n }\n\n // --- Value -------------------------------------------------------------------\n\n private commit(column: number, row: number): void {\n const cols = this.columns();\n const path: MkCascaderOption[] = [];\n for (let c = 0; c < column; c++) path.push(cols[c][this.activePath()[c]]);\n path.push(cols[column][row]);\n const value = this.valueMode() === 'path' ? path.map((o) => o.value) : path[path.length - 1].value;\n this.emit(value);\n this.close(true);\n }\n\n private emit(value: unknown): void {\n this.value.set(value);\n this.onChange(value);\n this.change.emit(value);\n }\n\n /** Row indexes of a path of options. */\n private indexPath(path: readonly MkCascaderOption[]): number[] {\n const out: number[] = [];\n let list: readonly MkCascaderOption[] = this.options();\n for (const opt of path) {\n const i = list.indexOf(opt);\n if (i < 0) break;\n out.push(i);\n list = opt.children ?? [];\n }\n return out;\n }\n\n /** Depth-first search for the option whose value is `value` (leaf mode). */\n private findPath(list: readonly MkCascaderOption[], value: unknown, trail: MkCascaderOption[] = []): MkCascaderOption[] | null {\n for (const opt of list) {\n const next = [...trail, opt];\n if (opt.value === value) return next;\n if (opt.children?.length) {\n const hit = this.findPath(opt.children, value, next);\n if (hit) return hit;\n }\n }\n return null;\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n }\n\n // --- ControlValueAccessor ----------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div #field class=\"mk-cascader__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-cascader__trigger\"\n [id]=\"triggerId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy() ? labelledBy() + ' ' + valueId : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (displayLabel()) {\n <span class=\"mk-cascader__value\" [id]=\"valueId\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-cascader__value mk-cascader__value--placeholder\" [id]=\"valueId\">{{ placeholder() }}</span>\n }\n <span class=\"mk-cascader__icon\" aria-hidden=\"true\"></span>\n </button>\n\n @if (clearable() && selectedPath().length && !isDisabled()) {\n <button type=\"button\" class=\"mk-cascader__clear\" [attr.aria-label]=\"i18n.clear\" (click)=\"clear($event)\">\n <span class=\"mk-cascader__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-cascader__panel\"\n role=\"listbox\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-activedescendant]=\"activeId()\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n (keydown)=\"onPanelKeydown($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n @for (column of columns(); track $index; let c = $index) {\n <ul class=\"mk-cascader__column\" role=\"group\">\n @for (opt of column; track $index; let r = $index) {\n <li\n class=\"mk-cascader__option\"\n role=\"option\"\n [id]=\"optionId(c, r)\"\n [attr.aria-selected]=\"isSelected(c, opt)\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n [class.mk-cascader__option--path]=\"isOnPath(c, r)\"\n [class.mk-cascader__option--cursor]=\"isCursor(c, r)\"\n [class.mk-cascader__option--selected]=\"isSelected(c, opt)\"\n [class.mk-cascader__option--disabled]=\"opt.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (mouseenter)=\"onOptionHover(c, r)\"\n (click)=\"onOptionClick(c, r)\"\n >\n <span class=\"mk-cascader__option-label\">{{ opt.label }}</span>\n @if (opt.children?.length) {\n <span class=\"mk-cascader__chevron\" aria-hidden=\"true\"></span>\n }\n </li>\n } @empty {\n <li class=\"mk-cascader__empty\" role=\"presentation\">{{ i18n.noOptions }}</li>\n }\n </ul>\n }\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single suggestion for {@link MkAutocomplete}. */\nexport interface MkAutocompleteOption {\n /** Text shown to the user and used as the input display value when chosen. */\n label: string;\n /** The value bound to the form control when this option is selected. */\n value: unknown;\n /** Disable the option (skipped by keyboard + not selectable). */\n disabled?: boolean;\n /**\n * Muted second line under the label — the disambiguator when labels can\n * collide (two customers named Jan Kowalski, telling accounts apart by\n * email, an id under a product name).\n */\n description?: string;\n}\n\n/** How the option list is narrowed against the typed text. */\nexport type MkAutocompleteFilterMode = 'contains' | 'startsWith' | 'none';\n\n/**\n * Autocomplete — an accessible text input that suggests options as the user\n * types, implementing the ARIA combobox (`aria-autocomplete=\"list\"`) pattern\n * with a popup listbox.\n *\n * Filtering is built in (`contains` / `startsWith`); set `filterMode=\"none\"`\n * and drive `options` yourself from the `search` output for async/server-side\n * suggestions. Typing arbitrary text is allowed unless `requireSelection` is\n * set, in which case the field clears on blur if it doesn't match an option.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so it\n * works with `[(ngModel)]`, reactive forms and `[(value)]`. When nested in an\n * `mk-form-field` it inherits size, label, hint/error and required wiring.\n *\n * ```html\n * <mk-autocomplete placeholder=\"Search users\"\n * [options]=\"filtered()\"\n * filterMode=\"none\"\n * (search)=\"query.set($event)\"\n * [(value)]=\"userId\" />\n * ```\n */\n@Component({\n selector: 'mk-autocomplete',\n templateUrl: './autocomplete.html',\n styleUrl: './autocomplete.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-autocomplete',\n '[class.mk-autocomplete--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-autocomplete--md]': \"effectiveSize() === 'md'\",\n '[class.mk-autocomplete--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-autocomplete--open]': 'open()',\n '[class.mk-autocomplete--invalid]': 'isInvalid()',\n '[class.mk-autocomplete--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkAutocomplete),\n multi: true,\n },\n ],\n})\nexport class MkAutocomplete implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Last announced result count (guards repeat announcements). */\n private lastAnnouncedCount = -1;\n\n constructor() {\n // Announce the suggestion count while the list is open (WCAG 4.1.3):\n // covers both built-in filtering and async `options` arriving via\n // `(search)`. Only a changed count is announced, so keystrokes that don't\n // narrow the list stay quiet.\n effect(() => {\n const open = this.open();\n const loading = this.loading();\n const count = this.filtered().length;\n if (!open || loading) {\n this.lastAnnouncedCount = -1;\n return;\n }\n if (count === this.lastAnnouncedCount) return;\n this.lastAnnouncedCount = count;\n this.announcer.announce(this.i18n.resultsCount(count));\n });\n }\n\n /** The list of suggestions. Update it from `search` for async sources. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly options = input<readonly MkAutocompleteOption[]>([]);\n /** Placeholder shown when the input is empty. */\n readonly placeholder = input<string>('');\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** How the option list is filtered against the typed text. */\n readonly filterMode = input<MkAutocompleteFilterMode>('contains');\n /** Only open the list once this many characters have been typed. */\n readonly minChars = input(0, { transform: numberAttribute });\n /** Show a loading row instead of \"no results\" (for async fetches). */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Clear the input on blur unless the text matches a selectable option. */\n readonly requireSelection = input(false, { transform: booleanAttribute });\n /** Message shown when there are no matching options. */\n readonly emptyMessage = input(this.i18n.noResults);\n\n /** Two-way selected value (the `value` of the chosen option, or `null`). */\n readonly value = model<unknown>(null);\n\n /** Emits the current input text on every keystroke — drive async loading. */\n readonly search = output<string>();\n /** Emits the option whenever one is committed by click or Enter. */\n readonly optionSelected = output<MkAutocompleteOption>();\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly query = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly listId = mkUniqueId('mk-ac-list');\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-ac');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Options after applying the built-in filter (or all, when `none`). */\n protected readonly filtered = computed<readonly MkAutocompleteOption[]>(() => {\n const mode = this.filterMode();\n const q = this.query().trim().toLowerCase();\n if (mode === 'none' || !q) return this.options();\n return this.options().filter((o) => {\n const label = o.label.toLowerCase();\n return mode === 'startsWith' ? label.startsWith(q) : label.includes(q);\n });\n });\n\n protected readonly hasResults = computed(() => this.filtered().length > 0);\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n /** The option matching the current value, if any. */\n private optionForValue(value: unknown): MkAutocompleteOption | undefined {\n return this.options().find((o) => o.value === value);\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.query.set(text);\n this.search.emit(text);\n // Typing frees the field from a previously committed value.\n if (this.value() !== null) {\n this.value.set(null);\n this.onChange(null);\n }\n this.openIfEligible();\n this.activeIndex.set(this.hasResults() ? this.firstEnabled() : -1);\n }\n\n protected onFocus(): void {\n this.openIfEligible();\n }\n\n private openIfEligible(): void {\n if (this.isDisabled()) return;\n const eligible = this.query().length >= this.minChars();\n this.open.set(eligible);\n if (eligible && this.activeIndex() < 0) {\n this.activeIndex.set(this.firstEnabled());\n }\n }\n\n protected close(): void {\n if (!this.open()) return;\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n\n protected selectOption(index: number): void {\n const opt = this.filtered()[index];\n if (!opt || opt.disabled) return;\n this.query.set(opt.label);\n this.value.set(opt.value);\n this.onChange(opt.value);\n this.optionSelected.emit(opt);\n this.close();\n this.focusInput();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const key = e.key;\n\n if (!this.open()) {\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n e.preventDefault();\n this.openIfEligible();\n }\n return;\n }\n\n switch (key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n if (this.open()) {\n e.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n }\n break;\n case 'End':\n if (this.open()) {\n e.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n }\n break;\n case 'Enter':\n if (this.activeIndex() >= 0) {\n e.preventDefault();\n this.selectOption(this.activeIndex());\n }\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n if (this.open()) this.close();\n this.reconcileOnBlur();\n }\n\n /**\n * When `requireSelection` is set, drop free text that doesn't map to an\n * option; otherwise restore the committed option's label if one exists.\n */\n private reconcileOnBlur(): void {\n const committed = this.optionForValue(this.value());\n if (committed) {\n if (this.query() !== committed.label) this.query.set(committed.label);\n return;\n }\n if (this.requireSelection() && this.query()) {\n this.query.set('');\n this.search.emit('');\n }\n }\n\n protected onOutsideDismiss(): void {\n if (!this.open()) return;\n this.close();\n this.reconcileOnBlur();\n }\n\n protected clear(): void {\n this.query.set('');\n this.value.set(null);\n this.onChange(null);\n this.search.emit('');\n this.focusInput();\n this.openIfEligible();\n }\n\n private move(delta: number): void {\n const opts = this.filtered();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.filtered().findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(): number {\n const opts = this.filtered();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) return i;\n }\n return -1;\n }\n\n private focusInput(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n const opt = this.optionForValue(value);\n this.query.set(opt?.label ?? (value == null ? '' : this.query()));\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div #field class=\"mk-autocomplete__field\">\n <input\n #input\n type=\"text\"\n class=\"mk-autocomplete__input\"\n [id]=\"inputId\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n aria-autocomplete=\"list\"\n [attr.aria-activedescendant]=\"\n open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || null)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n\n @if (query() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"mk-autocomplete__clear\"\n [attr.aria-label]=\"i18n.clear\"\n tabindex=\"-1\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"clear()\"\n ></button>\n }\n\n <span class=\"mk-autocomplete__arrow\" aria-hidden=\"true\"></span>\n</div>\n\n@if (open()) {\n <ul\n class=\"mk-autocomplete__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n [matchWidth]=\"true\"\n (dismiss)=\"onOutsideDismiss()\"\n [id]=\"listId\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"labelledBy()\"\n >\n @if (loading()) {\n <li class=\"mk-autocomplete__status\" role=\"presentation\">\n <span class=\"mk-autocomplete__spinner\" aria-hidden=\"true\"></span>\n {{ i18n.loading }}\n </li>\n } @else {\n @for (opt of filtered(); track $index; let i = $index) {\n <li\n class=\"mk-autocomplete__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === activeIndex()\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n [class.mk-autocomplete__option--active]=\"i === activeIndex()\"\n [class.mk-autocomplete__option--disabled]=\"opt.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"!opt.disabled && activeIndex.set(i)\"\n (click)=\"selectOption(i)\"\n >\n <span class=\"mk-autocomplete__option-label\">{{ opt.label }}</span>\n @if (opt.description) {\n <span class=\"mk-autocomplete__option-desc\">{{\n opt.description\n }}</span>\n }\n </li>\n } @empty {\n <li class=\"mk-autocomplete__status\" role=\"presentation\">\n {{ emptyMessage() }}\n </li>\n }\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n type Signal,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MK_I18N, MkAnchoredPanel } from '@mk-kit/ui/core';\nimport type { MkMentionOption } from './mention';\n\n/**\n * Suggestion listbox for {@link MkMention}. Created dynamically by the\n * directive and wired imperatively right after creation: the directive hands\n * it read-only signals (options, active index, caret anchor point) plus plain\n * callbacks, so the panel re-renders reactively without `setInput` churn.\n *\n * The `<ul>` is promoted to the top layer by `mkAnchoredPanel` and positioned\n * at the caret point; this host element stays empty in place.\n *\n * Not intended for direct use — the public API is the `[mkMention]` directive.\n */\n@Component({\n selector: 'mk-mention-panel',\n templateUrl: './mention-panel.html',\n styleUrl: './mention-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n})\nexport class MkMentionPanel {\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n // Wired by MkMention immediately after creation, before first render.\n options: Signal<readonly MkMentionOption[]> = signal([]);\n activeIndex: Signal<number> = signal(0);\n /** Caret point (viewport px) the panel is anchored to. */\n anchorPoint: Signal<{ x: number; y: number }> = signal({ x: 0, y: 0 });\n loading: Signal<boolean> = signal(false);\n listId = '';\n /**\n * The mention control itself — passed as the anchored panel's element\n * anchor so pointerdowns inside the control don't count as \"outside\"\n * dismissals (the point anchor still wins for positioning).\n */\n anchorEl: HTMLElement | undefined = undefined;\n onPick: (index: number) => void = () => {};\n onHover: (index: number) => void = () => {};\n onDismiss: () => void = () => {};\n\n private readonly panel = viewChild(MkAnchoredPanel);\n /** The teleported listbox element (used for the blur containment guard). */\n readonly list = viewChild<ElementRef<HTMLUListElement>>('list');\n\n constructor() {\n // Follow the caret: mkAnchoredPanel only repositions on scroll/resize by\n // itself, so re-run positioning whenever the anchor point moves.\n effect(() => {\n this.anchorPoint();\n untracked(() => this.panel()?.position());\n });\n }\n\n optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected pick(event: Event, index: number): void {\n // Keep focus (and the software keyboard) in the textarea.\n event.preventDefault();\n this.onPick(index);\n }\n}\n","<ul\n #list\n class=\"mk-mention__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"anchorEl\"\n [anchorRect]=\"anchorPoint()\"\n [gap]=\"6\"\n (dismiss)=\"onDismiss()\"\n [id]=\"listId\"\n role=\"listbox\"\n>\n @if (loading() && !options().length) {\n <li class=\"mk-mention__status\" role=\"presentation\">\n <span class=\"mk-mention__spinner\" aria-hidden=\"true\"></span>\n {{ i18n.loading }}\n </li>\n } @else {\n @for (opt of options(); track $index; let i = $index) {\n <li\n class=\"mk-mention__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === activeIndex()\"\n [class.mk-mention__option--active]=\"i === activeIndex()\"\n (pointerdown)=\"pick($event, i)\"\n (pointermove)=\"onHover(i)\"\n >\n <span class=\"mk-mention__option-label\">{{ opt.label }}</span>\n @if (opt.hint) {\n <span class=\"mk-mention__option-hint\">{{ opt.hint }}</span>\n }\n </li>\n }\n }\n</ul>\n","import {\n type ComponentRef,\n DOCUMENT,\n Directive,\n ElementRef,\n type OnDestroy,\n ViewContainerRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkMentionPanel } from './mention-panel';\n\n/** How mention suggestions are narrowed against the typed query. */\nexport type MkMentionFilterMode = 'contains' | 'startsWith' | 'none';\n\n/** A single suggestion offered by {@link MkMention}. */\nexport interface MkMentionOption {\n /** Machine identifier (username, tag slug) — also matched when filtering. */\n value: string;\n /** Text shown in the panel; the default insertion writes `trigger + label`. */\n label: string;\n /** Muted, single-line disambiguator shown after the label (e-mail, count…). */\n hint?: string;\n /**\n * Offer this option for one trigger character only (e.g. `'#'` for tags).\n * Options without a `trigger` are offered for every trigger.\n */\n trigger?: string;\n}\n\n/** Payload of {@link MkMention.mentionSearch}. */\nexport interface MkMentionSearchEvent {\n /** The trigger character that opened the session (`'@'`, `'#'`, …). */\n trigger: string;\n /** Text typed between the trigger and the caret. */\n query: string;\n}\n\n/** Payload of {@link MkMention.mentionSelect}. */\nexport interface MkMentionSelectEvent {\n option: MkMentionOption;\n trigger: string;\n}\n\n/** An active mention context inside the control's value. */\ninterface MentionSession {\n trigger: string;\n /** Index of the trigger character in the control's value. */\n start: number;\n /** Text between the trigger and the caret. */\n query: string;\n}\n\n/** Queries longer than this stop being treated as an active mention. */\nconst MAX_QUERY = 60;\n\n/**\n * CSS properties cloned from the control onto the offscreen mirror `<div>`\n * used to measure the caret's pixel position. Together they reproduce the\n * control's text layout closely enough that a marker span placed at the\n * caret's character index lands on the caret's on-screen coordinates.\n */\nconst MIRROR_PROPS = [\n 'box-sizing',\n 'width',\n 'padding-top',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'border-top-width',\n 'border-right-width',\n 'border-bottom-width',\n 'border-left-width',\n 'font-family',\n 'font-size',\n 'font-weight',\n 'font-style',\n 'font-variant',\n 'font-stretch',\n 'line-height',\n 'letter-spacing',\n 'word-spacing',\n 'text-transform',\n 'text-indent',\n 'text-align',\n 'direction',\n 'tab-size',\n 'overflow-wrap',\n 'word-break',\n] as const;\n\n/**\n * Mention / hashtag autocomplete for a **native** `<textarea>` or text\n * `<input>`. Typing a trigger character (`@`, `#`, …) at the start of a word\n * opens a top-layer suggestion panel anchored at the caret; picking an option\n * replaces the trigger-plus-query with the completed mention and dispatches an\n * `input` event so `ngModel`/reactive-forms bindings stay in sync.\n *\n * The element keeps its native textbox semantics — no `role=\"combobox\"` — and\n * follows the ARIA activedescendant pattern while the panel is open\n * (`aria-autocomplete=\"list\"`, `aria-controls`, `aria-expanded`,\n * `aria-activedescendant`).\n *\n * Filtering is built in (`contains` / `startsWith` over label + value); set\n * `mentionFilter=\"none\"` and drive `mentionOptions` from the `mentionSearch`\n * output for async/server-side suggestions (`mentionLoading` keeps the panel\n * open with a spinner while results are in flight).\n *\n * ```html\n * <textarea mkMention\n * [mentionTriggers]=\"['@', '#']\"\n * [mentionOptions]=\"users\"\n * (mentionSelect)=\"onPick($event)\"\n * ></textarea>\n * ```\n */\n@Directive({\n selector: 'textarea[mkMention], input[mkMention]',\n exportAs: 'mkMention',\n host: {\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'list',\n '[attr.aria-expanded]': 'panelOpen()',\n '[attr.aria-controls]': 'panelOpen() ? listId : null',\n '[attr.aria-activedescendant]': 'activeOptionId()',\n '(input)': 'update()',\n '(click)': 'update()',\n '(keydown)': 'onKeydown($event)',\n '(keyup)': 'onKeyup($event)',\n '(blur)': 'onBlur($event)',\n },\n})\nexport class MkMention implements OnDestroy {\n private readonly host =\n inject<ElementRef<HTMLTextAreaElement | HTMLInputElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly vcr = inject(ViewContainerRef);\n\n /** Single characters that start a mention session. */\n readonly mentionTriggers = input<readonly string[]>(['@']);\n /** The suggestion pool. Update it from `mentionSearch` for async sources. */\n readonly mentionOptions = input<readonly MkMentionOption[]>([]);\n /** How suggestions are filtered against the typed query. */\n readonly mentionFilter = input<MkMentionFilterMode>('contains');\n /** Keep the panel open with a loading row while async results are pending. */\n readonly mentionLoading = input(false, { transform: booleanAttribute });\n /**\n * Builds the text inserted for a picked option. Defaults to\n * `` `${trigger}${option.label} ` `` (note the trailing space).\n */\n readonly mentionInsert = input<\n ((option: MkMentionOption, trigger: string) => string) | null\n >(null);\n\n /** Emits `{trigger, query}` whenever the active query changes — drive async loading. */\n readonly mentionSearch = output<MkMentionSearchEvent>();\n /** Emits after an option has been inserted into the control. */\n readonly mentionSelect = output<MkMentionSelectEvent>();\n\n /** Id of the listbox panel, wired to `aria-controls` while open. */\n readonly listId = mkUniqueId('mk-mention-list');\n\n private readonly session = signal<MentionSession | null>(null);\n private readonly activeIndex = signal(0);\n /** Caret anchor point (viewport px) the panel is positioned against. */\n private readonly caretAnchor = signal({ x: 0, y: 0 });\n /**\n * Trigger index dismissed via Escape. The session stays closed while the\n * caret remains in a mention context at this index — i.e. until a new\n * trigger is typed elsewhere (or this one is deleted).\n */\n private dismissedStart: number | null = null;\n\n private panelRef: ComponentRef<MkMentionPanel> | null = null;\n\n /** Options for the active session, after trigger scoping + filtering. */\n private readonly filtered = computed<readonly MkMentionOption[]>(() => {\n const s = this.session();\n if (!s) return [];\n const pool = this.mentionOptions().filter(\n (o) => !o.trigger || o.trigger === s.trigger,\n );\n const mode = this.mentionFilter();\n const q = s.query.toLowerCase();\n if (mode === 'none' || !q) return pool;\n return pool.filter((o) => {\n const label = o.label.toLowerCase();\n const value = o.value.toLowerCase();\n return mode === 'startsWith'\n ? label.startsWith(q) || value.startsWith(q)\n : label.includes(q) || value.includes(q);\n });\n });\n\n /**\n * The panel shows while a session is active and there is something to show:\n * matching options, or a pending async fetch (`mentionLoading`). Zero\n * options with nothing pending closes the panel (the session itself stays\n * active, so async results arriving later reopen it).\n */\n protected readonly panelOpen = computed(\n () =>\n this.session() !== null &&\n (this.filtered().length > 0 || this.mentionLoading()),\n );\n\n protected readonly activeOptionId = computed(() => {\n if (!this.panelOpen()) return null;\n const i = this.activeIndex();\n return i >= 0 && i < this.filtered().length\n ? `${this.listId}-opt-${i}`\n : null;\n });\n\n constructor() {\n // Create/tear down the caret-anchored panel as the session opens and\n // closes — including async `mentionOptions` arriving (or emptying) while\n // a session is active.\n effect(() => {\n const open = this.panelOpen();\n untracked(() => (open ? this.createPanel() : this.destroyPanel()));\n });\n // Keep the active option inside the (re-)filtered list.\n effect(() => {\n const count = this.filtered().length;\n if (count > 0 && untracked(this.activeIndex) >= count) {\n this.activeIndex.set(0);\n }\n });\n }\n\n // --- session detection ----------------------------------------------------\n\n /**\n * Looks backwards from the caret for a trigger character that starts a\n * mention context: the trigger must sit at the start of the text or be\n * preceded by whitespace, and the text between it and the caret (the query)\n * must contain no whitespace and stay under {@link MAX_QUERY} characters.\n */\n private detect(): MentionSession | null {\n const el = this.host.nativeElement;\n const caret = el.selectionStart;\n if (caret == null) return null;\n const value = el.value;\n const triggers = this.mentionTriggers();\n const min = Math.max(0, caret - MAX_QUERY - 1);\n for (let i = caret - 1; i >= min; i--) {\n const ch = value[i];\n if (/\\s/.test(ch)) return null;\n if (triggers.includes(ch)) {\n if (i > 0 && !/\\s/.test(value[i - 1])) return null;\n return { trigger: ch, start: i, query: value.slice(i + 1, caret) };\n }\n }\n return null;\n }\n\n /** Re-evaluates the mention context after typing or caret movement. */\n protected update(): void {\n const s = this.detect();\n if (!s) {\n this.dismissedStart = null;\n if (untracked(this.session)) this.session.set(null);\n return;\n }\n if (this.dismissedStart != null) {\n // Escaped session: same trigger position stays closed.\n if (s.start === this.dismissedStart) return;\n this.dismissedStart = null;\n }\n this.caretAnchor.set(this.caretPoint());\n const prev = untracked(this.session);\n if (\n prev &&\n prev.start === s.start &&\n prev.trigger === s.trigger &&\n prev.query === s.query\n ) {\n return;\n }\n this.session.set(s);\n this.activeIndex.set(0);\n this.mentionSearch.emit({ trigger: s.trigger, query: s.query });\n }\n\n private closeSession(viaEscape = false): void {\n const s = untracked(this.session);\n if (!s) return;\n if (viaEscape) this.dismissedStart = s.start;\n this.session.set(null);\n }\n\n // --- keyboard -------------------------------------------------------------\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (!untracked(this.panelOpen)) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Enter':\n case 'Tab':\n if (untracked(this.filtered).length > 0) {\n e.preventDefault();\n this.commit(untracked(this.activeIndex));\n }\n break;\n case 'Escape':\n // Swallow the key entirely so an enclosing dialog/drawer stays open —\n // Escape dismisses only the topmost layer (the mention panel).\n e.preventDefault();\n e.stopPropagation();\n this.closeSession(true);\n break;\n }\n }\n\n /** Caret-only movements never fire `input`; re-detect on their keyup. */\n protected onKeyup(event: Event): void {\n switch ((event as KeyboardEvent).key) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End':\n case 'PageUp':\n case 'PageDown':\n this.update();\n }\n }\n\n private move(delta: number): void {\n const count = untracked(this.filtered).length;\n if (!count) return;\n this.activeIndex.set(\n (untracked(this.activeIndex) + delta + count) % count,\n );\n }\n\n // --- focus ----------------------------------------------------------------\n\n protected onBlur(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n // Focus moving into the panel (e.g. a screen-reader virtual cursor)\n // must not tear the panel down mid-interaction.\n if (\n related &&\n this.panelRef?.instance.list()?.nativeElement.contains(related)\n ) {\n return;\n }\n this.closeSession();\n }\n\n // --- insertion ------------------------------------------------------------\n\n private commit(index: number): void {\n const s = untracked(this.session);\n const opt = untracked(this.filtered)[index];\n if (!s || !opt) return;\n const el = this.host.nativeElement;\n const end = s.start + 1 + s.query.length;\n const insert = this.mentionInsert();\n const text = insert ? insert(opt, s.trigger) : `${s.trigger}${opt.label} `;\n const value = el.value;\n el.value = value.slice(0, s.start) + text + value.slice(end);\n this.session.set(null);\n this.dismissedStart = null;\n const caret = s.start + text.length;\n try {\n el.setSelectionRange(caret, caret);\n } catch {\n // Some input types refuse selection APIs — the value still updated.\n }\n // Let ngModel / reactive-forms CVAs (which listen for `input`) see the\n // programmatic edit.\n el.dispatchEvent(new Event('input', { bubbles: true }));\n this.mentionSelect.emit({ option: opt, trigger: s.trigger });\n el.focus();\n }\n\n // --- panel lifecycle ------------------------------------------------------\n\n private createPanel(): void {\n if (this.panelRef) return;\n const ref = this.vcr.createComponent(MkMentionPanel);\n const panel = ref.instance;\n panel.listId = this.listId;\n panel.anchorEl = this.host.nativeElement;\n panel.options = this.filtered;\n panel.activeIndex = this.activeIndex.asReadonly();\n panel.anchorPoint = this.caretAnchor.asReadonly();\n panel.loading = this.mentionLoading;\n panel.onPick = (i) => this.commit(i);\n panel.onHover = (i) => this.activeIndex.set(i);\n panel.onDismiss = () => this.closeSession();\n this.panelRef = ref;\n }\n\n private destroyPanel(): void {\n this.panelRef?.destroy();\n this.panelRef = null;\n }\n\n ngOnDestroy(): void {\n this.destroyPanel();\n }\n\n // --- caret measurement ----------------------------------------------------\n\n /**\n * Caret pixel position via the mirror-div technique: an offscreen `<div>`\n * cloning the control's text layout gets the value up to the caret plus a\n * marker span; the marker's rect, offset by the control's own rect and\n * scroll position, is the caret's viewport coordinate. Returns the point\n * just **below** the caret's line so the panel opens under it.\n *\n * Environments without layout (SSR, jsdom) safely yield `{0, 0}`.\n */\n private caretPoint(): { x: number; y: number } {\n try {\n const el = this.host.nativeElement;\n const view = this.document.defaultView;\n if (!view) return { x: 0, y: 0 };\n const caret = el.selectionStart ?? el.value.length;\n const style = view.getComputedStyle(el);\n\n const mirror = this.document.createElement('div');\n for (const prop of MIRROR_PROPS) {\n mirror.style.setProperty(prop, style.getPropertyValue(prop));\n }\n const isInput = el.tagName === 'INPUT';\n // Single-line inputs never wrap; textareas wrap like `pre-wrap`.\n mirror.style.setProperty('white-space', isInput ? 'pre' : 'pre-wrap');\n if (!isInput) mirror.style.setProperty('overflow-wrap', 'break-word');\n mirror.style.position = 'fixed';\n mirror.style.top = '0';\n mirror.style.left = '0';\n mirror.style.visibility = 'hidden';\n mirror.style.pointerEvents = 'none';\n\n mirror.textContent = el.value.slice(0, caret);\n const marker = this.document.createElement('span');\n // Give the marker the caret's character (or a zero-width space) so it\n // owns a rect on the caret's line instead of collapsing.\n marker.textContent = el.value.slice(caret, caret + 1) || '\\u200b';\n mirror.appendChild(marker);\n this.document.body.appendChild(mirror);\n\n const hostRect = el.getBoundingClientRect();\n const mirrorRect = mirror.getBoundingClientRect();\n const markerRect = marker.getBoundingClientRect();\n const lineHeight =\n markerRect.height || parseFloat(style.lineHeight) || 0;\n const x = hostRect.left + (markerRect.left - mirrorRect.left) - el.scrollLeft;\n const y =\n hostRect.top +\n (markerRect.top - mirrorRect.top) -\n el.scrollTop +\n lineHeight;\n mirror.remove();\n\n if (!Number.isFinite(x) || !Number.isFinite(y)) return { x: 0, y: 0 };\n return { x, y };\n } catch {\n return { x: 0, y: 0 };\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkChip } from '@mk-kit/ui/chip';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single selectable option for {@link MkMultiSelect}. */\nexport interface MkMultiSelectOption {\n /** Text shown to the user (and used for the chip + typeahead). */\n label: string;\n /** The value committed to the form control when chosen. */\n value: unknown;\n /** Disable the option (skipped by keyboard + not selectable). */\n disabled?: boolean;\n}\n\n/** How the option list is narrowed against the typed text. */\nexport type MkMultiSelectFilterMode = 'contains' | 'startsWith' | 'none';\n\n/**\n * MultiSelect — an accessible combobox that commits **multiple** values,\n * rendering each selection as a removable chip inside the control. Implements\n * the ARIA combobox + multiselectable listbox pattern.\n *\n * Filtering is built in (`contains` / `startsWith`); set `filterMode=\"none\"`\n * and drive `options` from the `search` output for async / server-side sources.\n * Selected options are remembered even after they leave the `options` list, so\n * chips keep their labels across async pages.\n *\n * Implements `ControlValueAccessor` over an **array** value and exposes a\n * two-way `value` model, so it works with `[(ngModel)]`, reactive forms and\n * `[(value)]`. When nested in an `mk-form-field` it inherits size, label,\n * hint/error and required wiring.\n *\n * Keyboard: type to filter, Up/Down to move, Home/End to jump, Enter/Space to\n * toggle the active option, Backspace on an empty query removes the last chip,\n * Escape closes. The dropdown renders in the top layer via\n * {@link MkAnchoredPanel} so it is never clipped by a container.\n *\n * ```html\n * <mk-multi-select placeholder=\"Add tags\"\n * [options]=\"tagOptions()\"\n * [(value)]=\"tags\" />\n * ```\n */\n@Component({\n selector: 'mk-multi-select',\n templateUrl: './multi-select.html',\n styleUrl: './multi-select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel, MkChip],\n host: {\n class: 'mk-multi-select',\n '[class.mk-multi-select--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-multi-select--md]': \"effectiveSize() === 'md'\",\n '[class.mk-multi-select--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-multi-select--open]': 'open()',\n '[class.mk-multi-select--invalid]': 'isInvalid()',\n '[class.mk-multi-select--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkMultiSelect),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkMultiSelect),\n multi: true,\n },\n ],\n})\nexport class MkMultiSelect implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** The list of options to choose from. Update from `search` for async. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly options = input<readonly MkMultiSelectOption[]>([]);\n /** Placeholder shown when no value is selected. */\n readonly placeholder = input<string>('');\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** How the option list is filtered against the typed text. */\n readonly filterMode = input<MkMultiSelectFilterMode>('contains');\n /** Only open the list once this many characters have been typed. */\n readonly minChars = input(0, { transform: numberAttribute });\n /** Show a loading row instead of \"no results\" (for async fetches). */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Maximum number of selections (0 = unlimited). */\n readonly max = input(0, { transform: numberAttribute });\n /** Close the dropdown after each selection. Default keeps it open. */\n readonly closeOnSelect = input(false, { transform: booleanAttribute });\n /** Message shown when there are no matching options. */\n readonly emptyMessage = input(this.i18n.noResults);\n\n /** Two-way selected values. */\n readonly value = model<unknown[]>([]);\n\n /** Emits the current query text on every keystroke — drive async loading. */\n readonly search = output<string>();\n /** Emits the option whenever one is added. */\n readonly optionAdded = output<MkMultiSelectOption>();\n /** Emits the value whenever a selection is removed. */\n readonly optionRemoved = output<unknown>();\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly query = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly listId = mkUniqueId('mk-ms-list');\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-ms');\n\n /**\n * Every option ever seen, keyed by value — so chips keep their labels even\n * after the option leaves the (async, filtered) `options` list.\n */\n private readonly seen = signal(new Map<unknown, MkMultiSelectOption>());\n\n /** Last announced result count (guards repeat announcements). */\n private lastAnnouncedCount = -1;\n /**\n * Skips the next results-count announcement — set when a selection resets\n * the query, so \"x added\" is not immediately clobbered by \"n results\".\n */\n private suppressCountAnnouncement = false;\n\n constructor() {\n // Accumulate seen options as `options` changes (untracked read → no loop).\n effect(() => {\n const opts = this.options();\n if (!opts.length) return;\n const next = new Map(untracked(this.seen));\n let changed = false;\n for (const o of opts) {\n if (next.get(o.value) !== o) {\n next.set(o.value, o);\n changed = true;\n }\n }\n if (changed) this.seen.set(next);\n });\n\n // Announce the filtered result count while the list is open (WCAG 4.1.3):\n // covers both built-in filtering and async `options` arriving. Only a\n // changed count is announced, so keystrokes that don't narrow the list\n // stay quiet.\n effect(() => {\n const open = this.open();\n const loading = this.loading();\n const count = this.filtered().length;\n const suppress = this.suppressCountAnnouncement;\n this.suppressCountAnnouncement = false;\n if (!open || loading) {\n this.lastAnnouncedCount = -1;\n return;\n }\n if (count === this.lastAnnouncedCount) return;\n this.lastAnnouncedCount = count;\n if (!suppress) this.announcer.announce(this.i18n.resultsCount(count));\n });\n }\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Whether the selection cap has been reached. */\n protected readonly atMax = computed(\n () => this.max() > 0 && this.value().length >= this.max(),\n );\n\n /** Why unselected options are unavailable once the cap is reached. */\n protected readonly atMaxHint = computed(() =>\n this.i18n.validation.mkMaxItems({\n max: this.max(),\n actual: this.value().length,\n }),\n );\n\n /** The selected values resolved to option objects (for the chips). */\n protected readonly chips = computed<MkMultiSelectOption[]>(() => {\n const seen = this.seen();\n return this.value().map(\n (v) => seen.get(v) ?? { label: String(v), value: v },\n );\n });\n\n /** Options after the built-in filter (or all, when `none`). */\n protected readonly filtered = computed<readonly MkMultiSelectOption[]>(() => {\n const mode = this.filterMode();\n const q = this.query().trim().toLowerCase();\n if (mode === 'none' || !q) return this.options();\n return this.options().filter((o) => {\n const label = o.label.toLowerCase();\n return mode === 'startsWith' ? label.startsWith(q) : label.includes(q);\n });\n });\n\n protected readonly hasResults = computed(() => this.filtered().length > 0);\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected isSelected(value: unknown): boolean {\n return this.value().includes(value);\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.query.set(text);\n this.search.emit(text);\n this.openIfEligible();\n this.activeIndex.set(this.hasResults() ? this.firstEnabled() : -1);\n }\n\n protected onFocus(): void {\n this.openIfEligible();\n }\n\n private openIfEligible(): void {\n if (this.isDisabled()) return;\n const eligible = this.query().length >= this.minChars();\n this.open.set(eligible);\n if (eligible && this.activeIndex() < 0) {\n this.activeIndex.set(this.firstEnabled());\n }\n }\n\n protected close(): void {\n if (!this.open()) return;\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n\n /** Add or remove the option at `index` in the filtered list. */\n protected toggleOption(index: number): void {\n const opt = this.filtered()[index];\n if (!opt || opt.disabled) return;\n // Options blocked by the cap stay focusable (APG); say why nothing happens.\n if (!this.isSelected(opt.value) && this.atMax()) {\n this.announcer.announce(this.atMaxHint());\n return;\n }\n this.isSelected(opt.value) ? this.remove(opt.value) : this.add(opt);\n this.focusInput();\n }\n\n private add(opt: MkMultiSelectOption): void {\n if (this.atMax() || this.isSelected(opt.value)) return;\n // Remember the option so its chip keeps a label if `options` changes.\n const seen = new Map(this.seen());\n seen.set(opt.value, opt);\n this.seen.set(seen);\n this.setValue([...this.value(), opt.value]);\n this.optionAdded.emit(opt);\n this.announcer.announce(this.i18n.itemAdded(opt.label));\n // Reset the query so the full list is available for the next pick.\n if (this.query()) {\n // The reset re-expands the filtered list; don't let \"n results\"\n // immediately overwrite the \"added\" announcement.\n this.suppressCountAnnouncement = true;\n this.query.set('');\n this.search.emit('');\n }\n if (this.closeOnSelect()) this.close();\n }\n\n private remove(value: unknown): void {\n const label = this.seen().get(value)?.label ?? String(value);\n this.setValue(this.value().filter((v) => v !== value));\n this.optionRemoved.emit(value);\n this.announcer.announce(this.i18n.itemRemoved(label));\n }\n\n /** Remove a chip from its remove button. */\n protected removeChip(value: unknown): void {\n if (this.isDisabled()) return;\n this.remove(value);\n this.focusInput();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const key = e.key;\n\n // Backspace on an empty query removes the last chip.\n if (key === 'Backspace' && !this.query() && this.value().length) {\n e.preventDefault();\n this.remove(this.value()[this.value().length - 1]);\n return;\n }\n\n if (!this.open()) {\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n e.preventDefault();\n this.openIfEligible();\n }\n return;\n }\n\n switch (key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n break;\n case 'Enter':\n case ' ':\n if (this.query() && key === ' ') break; // let the space type into the query\n if (this.activeIndex() >= 0) {\n e.preventDefault();\n this.toggleOption(this.activeIndex());\n }\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected onBlur(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n // Keep focus/selection when moving to a chip's remove button inside the host.\n if (related && this.host.nativeElement.contains(related)) return;\n this.onTouched();\n this.close();\n }\n\n protected onOutsideDismiss(): void {\n if (this.open()) this.close();\n }\n\n /** Clicking anywhere in the control focuses the input. */\n protected onControlPointerdown(event: Event): void {\n if (this.isDisabled()) return;\n const target = event.target as HTMLElement;\n // Don't steal clicks aimed at a chip's remove button.\n if (target.closest('.mk-chip__remove')) return;\n if (target !== this.inputRef()?.nativeElement) {\n event.preventDefault();\n this.focusInput();\n this.openIfEligible();\n }\n }\n\n private move(delta: number): void {\n const opts = this.filtered();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.filtered().findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(): number {\n const opts = this.filtered();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) return i;\n }\n return -1;\n }\n\n private focusInput(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n private setValue(next: unknown[]): void {\n this.value.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown[] | null): void {\n this.value.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.max();\n });\n\n /**\n * Reports `mkMaxItems` when more options are selected than `[max]` allows.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const max = this.max();\n const v = control.value;\n if (max <= 0 || !Array.isArray(v) || v.length <= max) return null;\n return { mkMaxItems: { max, actual: v.length } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div\n #control\n class=\"mk-multi-select__control\"\n (pointerdown)=\"onControlPointerdown($event)\"\n>\n @for (chip of chips(); track chip.value) {\n <mk-chip\n class=\"mk-multi-select__chip\"\n size=\"sm\"\n [removable]=\"!isDisabled()\"\n [disabled]=\"isDisabled()\"\n [removeLabel]=\"i18n.removeItem(chip.label)\"\n (removed)=\"removeChip(chip.value)\"\n >\n {{ chip.label }}\n </mk-chip>\n }\n\n <input\n #input\n type=\"text\"\n class=\"mk-multi-select__input\"\n [id]=\"inputId\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || null)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [placeholder]=\"chips().length ? '' : placeholder()\"\n [value]=\"query()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <span class=\"mk-multi-select__arrow\" aria-hidden=\"true\"></span>\n</div>\n\n@if (open()) {\n <ul\n #list\n class=\"mk-multi-select__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"control\"\n [matchWidth]=\"true\"\n (dismiss)=\"onOutsideDismiss()\"\n [id]=\"listId\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-labelledby]=\"labelledBy()\"\n >\n @if (loading()) {\n <li class=\"mk-multi-select__status\" role=\"presentation\">\n <span class=\"mk-multi-select__spinner\" aria-hidden=\"true\"></span>\n {{ i18n.loading }}\n </li>\n } @else {\n @for (opt of filtered(); track $index; let i = $index) {\n <li\n class=\"mk-multi-select__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(opt.value)\"\n [attr.aria-disabled]=\"\n opt.disabled || (atMax() && !isSelected(opt.value)) || null\n \"\n [attr.title]=\"\n atMax() && !isSelected(opt.value) && !opt.disabled\n ? atMaxHint()\n : null\n \"\n [class.mk-multi-select__option--active]=\"i === activeIndex()\"\n [class.mk-multi-select__option--selected]=\"isSelected(opt.value)\"\n [class.mk-multi-select__option--disabled]=\"\n opt.disabled || (atMax() && !isSelected(opt.value))\n \"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"!opt.disabled && activeIndex.set(i)\"\n (click)=\"toggleOption(i)\"\n >\n <span class=\"mk-multi-select__check\" aria-hidden=\"true\"></span>\n <span class=\"mk-multi-select__option-label\">{{ opt.label }}</span>\n </li>\n } @empty {\n <li class=\"mk-multi-select__status\" role=\"presentation\">\n {{ emptyMessage() }}\n </li>\n }\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkChip } from '@mk-kit/ui/chip';\n\n/**\n * TagInput — a freeform token input: type a value and press Enter (or a\n * separator) to add it as a removable chip. Backspace on an empty field removes\n * the last tag, and pasting a delimited string adds several at once. Unlike\n * `mk-multi-select` the tags are not drawn from a fixed option list. Implements\n * `ControlValueAccessor` + a two-way `value` model of `string[]`.\n *\n * ```html\n * <mk-tag-input placeholder=\"Add tags…\" [(value)]=\"tags\" />\n * ```\n */\n@Component({\n selector: 'mk-tag-input',\n templateUrl: './tag-input.html',\n styleUrl: './tag-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkChip],\n host: {\n class: 'mk-tag-input',\n '[class.mk-tag-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-tag-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-tag-input--invalid]': 'isInvalid()',\n '[class.mk-tag-input--disabled]': 'isDisabled()',\n '(click)': 'focusInput()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTagInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkTagInput),\n multi: true,\n },\n ],\n})\nexport class MkTagInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Two-way list of tags. */\n readonly value = model<string[]>([]);\n /** Placeholder shown in the text field. */\n readonly placeholder = input<string>('');\n /** Maximum number of tags (0 = unlimited). */\n readonly max = input(0, { transform: numberAttribute });\n /** Allow the same tag more than once. */\n readonly allowDuplicates = input(false, { transform: booleanAttribute });\n /** Commit the pending text as a tag when the field loses focus. */\n readonly addOnBlur = input(false, { transform: booleanAttribute });\n /**\n * Extra characters that commit the pending text (Enter always does). A\n * pasted string is split on these too. Default: comma.\n */\n readonly separators = input<readonly string[]>([',']);\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n /** Emitted when a tag is added. */\n readonly added = output<string>();\n /** Emitted when a tag is removed. */\n readonly removed = output<string>();\n\n protected readonly query = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-tag-input');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly atMax = computed(\n () => this.max() > 0 && this.value().length >= this.max(),\n );\n\n protected focusInput(): void {\n if (!this.isDisabled()) this.inputRef()?.nativeElement.focus();\n }\n\n protected onQueryInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const key = event.key;\n if (key === 'Enter' || this.separators().includes(key)) {\n if (this.query().trim()) {\n event.preventDefault();\n this.commit(this.query());\n } else if (key === 'Enter') {\n event.preventDefault();\n }\n } else if (key === 'Backspace' && this.query() === '') {\n this.removeAt(this.value().length - 1);\n }\n }\n\n protected onPaste(event: ClipboardEvent): void {\n const text = event.clipboardData?.getData('text') ?? '';\n if (this.splitPattern().test(text)) {\n event.preventDefault();\n for (const part of text.split(this.splitPattern())) this.commit(part);\n }\n }\n\n protected onBlur(): void {\n if (this.addOnBlur() && this.query().trim()) this.commit(this.query());\n this.onTouched();\n }\n\n private splitPattern(): RegExp {\n const chars = this.separators()\n .map((s) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('');\n return new RegExp(`[${chars}\\\\n]`);\n }\n\n private commit(raw: string): void {\n const tag = raw.trim();\n if (!tag) {\n this.clearQuery();\n return;\n }\n if (this.isDisabled() || this.atMax()) return;\n // Keep the typed text when the tag is rejected so nothing is lost silently.\n if (!this.allowDuplicates() && this.value().includes(tag)) return;\n this.clearQuery();\n const next = [...this.value(), tag];\n this.setValue(next);\n this.added.emit(tag);\n this.announcer.announce(this.i18n.itemAdded(tag));\n }\n\n /**\n * Reset the pending text. A one-way `[value]=\"query()\"` binding does not\n * reliably push an empty value back onto an input the user has just edited,\n * so clear the native element directly as well as the signal.\n */\n private clearQuery(): void {\n this.query.set('');\n const el = this.inputRef()?.nativeElement;\n if (el) el.value = '';\n }\n\n protected removeAt(index: number): boolean {\n if (this.isDisabled() || index < 0 || index >= this.value().length) {\n return false;\n }\n const tag = this.value()[index];\n const next = this.value().filter((_, i) => i !== index);\n this.setValue(next);\n this.removed.emit(tag);\n this.announcer.announce(this.i18n.itemRemoved(tag));\n return true;\n }\n\n /**\n * Remove a chip via its remove button. The button disappears with the chip,\n * so keep focus useful: the next chip's remove button, else the previous\n * one's, else the text input.\n */\n protected removeChipAt(index: number): void {\n if (!this.removeAt(index)) return;\n afterNextRender(\n () => {\n const buttons =\n this.host.nativeElement.querySelectorAll<HTMLElement>('.mk-chip__remove');\n const target = buttons[index] ?? buttons[index - 1];\n (target ?? this.inputRef()?.nativeElement)?.focus();\n },\n { injector: this.injector },\n );\n }\n\n private setValue(next: string[]): void {\n this.value.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string[] | null): void {\n this.value.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.max();\n });\n\n /**\n * Reports `mkMaxItems` when more tags are present than `[max]` allows.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const max = this.max();\n const v = control.value;\n if (max <= 0 || !Array.isArray(v) || v.length <= max) return null;\n return { mkMaxItems: { max, actual: v.length } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div class=\"mk-tag-input__field\">\n <ul class=\"mk-tag-input__tags\">\n @for (tag of value(); track $index; let i = $index) {\n <li class=\"mk-tag-input__tag\">\n <mk-chip\n [size]=\"effectiveSize()\"\n [removable]=\"!isDisabled()\"\n [disabled]=\"isDisabled()\"\n [removeLabel]=\"i18n.removeItem(tag)\"\n (removed)=\"removeChipAt(i)\"\n >\n {{ tag }}\n </mk-chip>\n </li>\n }\n <li class=\"mk-tag-input__entry\">\n <input\n #input\n class=\"mk-tag-input__input\"\n type=\"text\"\n autocomplete=\"off\"\n [id]=\"inputId\"\n [value]=\"query()\"\n [placeholder]=\"value().length ? '' : placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"atMax()\"\n [attr.aria-disabled]=\"atMax() || null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onQueryInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (paste)=\"onPaste($event)\"\n (blur)=\"onBlur()\"\n />\n </li>\n </ul>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single password rule with its current pass/fail state. */\nexport interface MkPasswordRule {\n readonly key: 'length' | 'uppercase' | 'number' | 'symbol';\n readonly label: string;\n readonly met: boolean;\n}\n\n/**\n * PasswordInput — a password field with a reveal toggle, an optional strength\n * meter and an optional rules checklist. Implements `ControlValueAccessor` over\n * `string` with a two-way `value` model, and wires label / description /\n * validity a11y automatically when nested in an `mk-form-field`.\n *\n * ```html\n * <mk-password-input [(value)]=\"pw\" showStrength showRules [minLength]=\"10\" />\n * ```\n */\n@Component({\n selector: 'mk-password-input',\n templateUrl: './password-input.html',\n styleUrl: './password-input.scss',\n exportAs: 'mkPasswordInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-password-input',\n '[class.mk-password-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-password-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-password-input--invalid]': 'isInvalid()',\n '[class.mk-password-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkPasswordInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkPasswordInput),\n multi: true,\n },\n ],\n})\nexport class MkPasswordInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Two-way value. */\n readonly value = model<string>('');\n /** Placeholder when empty. */\n readonly placeholder = input('');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Show the 0–4 strength meter below the field. */\n readonly showStrength = input(false, { transform: booleanAttribute });\n /** Show the rules checklist below the field. */\n readonly showRules = input(false, { transform: booleanAttribute });\n /** Minimum length used by the strength score and rules. */\n readonly minLength = input(8, { transform: numberAttribute });\n /**\n * `autocomplete` for the native input. Use `'new-password'` on signup /\n * change-password forms (where the strength meter and rules belong) so the\n * browser offers a generated password instead of the saved one.\n */\n readonly autocomplete = input<'current-password' | 'new-password' | (string & {})>(\n 'current-password',\n );\n\n protected readonly inputId =\n this.field?.controlId ?? mkUniqueId('mk-password');\n protected readonly strengthId = `${this.inputId}-strength`;\n protected readonly rulesId = `${this.inputId}-rules`;\n\n /** Whether the password characters are currently visible. */\n protected readonly revealed = signal(false);\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n\n /** The four rules and whether the current value satisfies each. */\n protected readonly rules = computed<MkPasswordRule[]>(() => {\n const v = this.value();\n return [\n {\n key: 'length',\n label: this.i18n.passwordRuleMinLength(this.minLength()),\n met: v.length >= this.minLength(),\n },\n {\n key: 'uppercase',\n label: this.i18n.passwordRuleUppercase,\n met: /[A-Z]/.test(v),\n },\n { key: 'number', label: this.i18n.passwordRuleNumber, met: /[0-9]/.test(v) },\n {\n key: 'symbol',\n label: this.i18n.passwordRuleSymbol,\n met: /[^A-Za-z0-9]/.test(v),\n },\n ];\n });\n\n /**\n * Password strength as a 0–4 score, counting distinct character classes\n * (lowercase, uppercase, digit, symbol) plus a length ≥ minLength bonus,\n * capped at 4.\n */\n protected readonly strength = computed(() => {\n const v = this.value();\n if (!v) return 0;\n let score = 0;\n if (v.length >= this.minLength()) score++;\n if (/[a-z]/.test(v)) score++;\n if (/[A-Z]/.test(v)) score++;\n if (/[0-9]/.test(v)) score++;\n if (/[^A-Za-z0-9]/.test(v)) score++;\n return Math.min(4, score);\n });\n\n protected readonly strengthLabel = computed(() =>\n this.i18n.passwordStrength(this.strength()),\n );\n\n /** The 4 meter segments, marked filled up to the current score. */\n protected readonly segments = computed(() => {\n const score = this.strength();\n return [0, 1, 2, 3].map((i) => i < score);\n });\n\n /** Combined `aria-describedby` for the input, or `null`. */\n protected readonly describedBy = computed(() => {\n const ids: string[] = [];\n const fieldIds = this.field?.describedBy();\n if (fieldIds) ids.push(fieldIds);\n if (this.showStrength()) ids.push(this.strengthId);\n if (this.showRules()) ids.push(this.rulesId);\n return ids.length ? ids.join(' ') : null;\n });\n\n protected toggleReveal(): void {\n if (this.isDisabled()) return;\n this.revealed.update((r) => !r);\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.value.set(text);\n this.onChange(text);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.minLength();\n });\n\n /**\n * Reports `minlength` for a password shorter than `[minLength]` — the same\n * requirement the rules list shows. An empty value passes; compose with\n * `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'string' || !v) return null;\n const requiredLength = this.minLength();\n if (v.length >= requiredLength) return null;\n return { minlength: { requiredLength, actualLength: v.length } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div class=\"mk-password-input__field\">\n <input\n #input\n class=\"mk-password-input__input\"\n [id]=\"inputId\"\n [type]=\"revealed() ? 'text' : 'password'\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n\n <button\n type=\"button\"\n class=\"mk-password-input__toggle\"\n [attr.aria-label]=\"revealed() ? i18n.hidePassword : i18n.showPassword\"\n [attr.aria-pressed]=\"revealed()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggleReveal()\"\n >\n @if (revealed()) {\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <path d=\"M1 1l22 22\" />\n </svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n }\n </button>\n</div>\n\n@if (showStrength()) {\n <div\n class=\"mk-password-input__strength\"\n [id]=\"strengthId\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"mk-password-input__meter\" aria-hidden=\"true\">\n @for (filled of segments(); track $index) {\n <span\n class=\"mk-password-input__segment\"\n [class.mk-password-input__segment--filled]=\"filled\"\n [attr.data-score]=\"strength()\"\n ></span>\n }\n </div>\n <span class=\"mk-password-input__strength-label\">\n {{ i18n.passwordStrengthLabel }} {{ strengthLabel() }}\n </span>\n </div>\n}\n\n@if (showRules()) {\n <ul class=\"mk-password-input__rules\" [id]=\"rulesId\" role=\"list\">\n @for (rule of rules(); track rule.key) {\n <li\n class=\"mk-password-input__rule\"\n [class.mk-password-input__rule--met]=\"rule.met\"\n >\n <span class=\"mk-password-input__rule-marker\" aria-hidden=\"true\">\n {{ rule.met ? '✓' : '○' }}\n </span>\n <span class=\"mk-visually-hidden\">{{ rule.met ? i18n.ruleMet : i18n.ruleNotMet }}</span>\n <span class=\"mk-password-input__rule-text\">{{ rule.label }}</span>\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkButton } from '@mk-kit/ui/button';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single transferable item for {@link MkTransferList}. */\nexport interface MkTransferItem {\n /** The value committed to the form control when the item is in the selected list. */\n value: unknown;\n /** Text shown to the user. */\n label: string;\n /** Disable the item (cannot be checked or moved). */\n disabled?: boolean;\n}\n\n/** Which of the two lists a row belongs to. */\ntype MkTransferSide = 'available' | 'selected';\n\n/**\n * TransferList — a dual list box (a.k.a. pick list) for moving items between an\n * **available** list and a **selected** list, e.g. assigning roles or\n * permissions. The user checks rows in one list then clicks the middle move\n * buttons (or presses Enter on a row) to shuttle them across.\n *\n * Implements `ControlValueAccessor` over an **array** value (the values in the\n * selected list) and exposes a two-way `value` model, so it works with\n * `[(ngModel)]`, reactive forms and `[(value)]`. When nested in an\n * `mk-form-field` it inherits size and label wiring.\n *\n * Keyboard: each listbox is a single tab stop (roving tabindex). Arrow Up/Down\n * and Home/End move between rows, Space toggles a row's check and Enter moves\n * it to the opposite list.\n *\n * ```html\n * <mk-transfer-list filterable\n * [items]=\"allRoles()\"\n * [(value)]=\"assignedRoles\"\n * availableLabel=\"All roles\"\n * selectedLabel=\"Assigned\" />\n * ```\n */\n@Component({\n selector: 'mk-transfer-list',\n templateUrl: './transfer-list.html',\n styleUrl: './transfer-list.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkButton],\n host: {\n class: 'mk-transfer-list',\n '[class.mk-transfer-list--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-transfer-list--md]': \"effectiveSize() === 'md'\",\n '[class.mk-transfer-list--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-transfer-list--invalid]': 'isInvalid()',\n '[class.mk-transfer-list--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTransferList),\n multi: true,\n },\n ],\n})\nexport class MkTransferList implements ControlValueAccessor {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly injector = inject(Injector);\n private readonly availableOptEls =\n viewChildren<ElementRef<HTMLElement>>('availableOpt');\n private readonly selectedOptEls =\n viewChildren<ElementRef<HTMLElement>>('selectedOpt');\n private readonly availableListEl =\n viewChild<ElementRef<HTMLElement>>('availableList');\n private readonly selectedListEl =\n viewChild<ElementRef<HTMLElement>>('selectedList');\n\n /** The full set of items to shuttle between the two lists. */\n readonly items = input<readonly MkTransferItem[]>([]);\n /** Heading for the left (available) list. */\n readonly availableLabel = input(this.i18n.available);\n /** Heading for the right (selected) list. */\n readonly selectedLabel = input(this.i18n.selected);\n /** Show a search box over each list. */\n readonly filterable = input(false, { transform: booleanAttribute });\n /** Disable the whole control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n /** Two-way values currently in the selected (right) list. */\n readonly value = model<unknown[]>([]);\n\n /** Emits the new selected values whenever items are moved. */\n readonly change = output<unknown[]>();\n\n private readonly cvaDisabled = signal(false);\n /** Values checked in each list, awaiting a move. */\n private readonly checkedAvailable = signal(new Set<unknown>());\n private readonly checkedSelected = signal(new Set<unknown>());\n /** Per-list search queries (only used when `filterable`). */\n protected readonly availableQuery = signal('');\n protected readonly selectedQuery = signal('');\n /** Roving-tabindex active option index per list. */\n private readonly activeAvailable = signal(0);\n private readonly activeSelected = signal(0);\n\n private onChange: (value: unknown[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly baseId = mkUniqueId('mk-transfer');\n readonly availableListId = `${this.baseId}-available`;\n readonly selectedListId = `${this.baseId}-selected`;\n readonly availableLabelId = `${this.baseId}-available-label`;\n readonly selectedLabelId = `${this.baseId}-selected-label`;\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n\n /** Items keyed by value, for resolving the selected order. */\n private readonly byValue = computed(() => {\n const map = new Map<unknown, MkTransferItem>();\n for (const it of this.items()) map.set(it.value, it);\n return map;\n });\n\n /** Items not currently in the value (in `items` order). */\n protected readonly available = computed<readonly MkTransferItem[]>(() => {\n const chosen = new Set(this.value());\n return this.items().filter((it) => !chosen.has(it.value));\n });\n\n /** Items currently in the value, preserving the value array order. */\n protected readonly selected = computed<readonly MkTransferItem[]>(() => {\n const map = this.byValue();\n const out: MkTransferItem[] = [];\n for (const v of this.value()) {\n const it = map.get(v);\n if (it) out.push(it);\n }\n return out;\n });\n\n protected readonly filteredAvailable = computed<readonly MkTransferItem[]>(() =>\n this.applyFilter(this.available(), this.availableQuery()),\n );\n protected readonly filteredSelected = computed<readonly MkTransferItem[]>(() =>\n this.applyFilter(this.selected(), this.selectedQuery()),\n );\n\n private applyFilter(\n list: readonly MkTransferItem[],\n query: string,\n ): readonly MkTransferItem[] {\n if (!this.filterable()) return list;\n const q = query.trim().toLowerCase();\n if (!q) return list;\n return list.filter((it) => it.label.toLowerCase().includes(q));\n }\n\n /** Whether the \"move right\" controls are actionable. */\n protected readonly canMoveRight = computed(() =>\n this.available().some(\n (it) => !it.disabled && this.checkedAvailable().has(it.value),\n ),\n );\n /** Whether the \"move left\" controls are actionable. */\n protected readonly canMoveLeft = computed(() =>\n this.selected().some(\n (it) => !it.disabled && this.checkedSelected().has(it.value),\n ),\n );\n protected readonly canMoveAllRight = computed(() =>\n this.available().some((it) => !it.disabled),\n );\n protected readonly canMoveAllLeft = computed(() =>\n this.selected().some((it) => !it.disabled),\n );\n\n protected isChecked(side: MkTransferSide, value: unknown): boolean {\n return this.checkedFor(side)().has(value);\n }\n\n private checkedFor(side: MkTransferSide) {\n return side === 'available' ? this.checkedAvailable : this.checkedSelected;\n }\n\n /** Toggle a row's checked state (Space / click on the row). */\n protected toggleCheck(side: MkTransferSide, item: MkTransferItem): void {\n if (this.isDisabled() || item.disabled) return;\n const sig = this.checkedFor(side);\n const next = new Set(sig());\n next.has(item.value) ? next.delete(item.value) : next.add(item.value);\n sig.set(next);\n }\n\n protected onQueryInput(side: MkTransferSide, event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n (side === 'available' ? this.availableQuery : this.selectedQuery).set(text);\n }\n\n // --- Roving tabindex --------------------------------------------------------\n private filteredFor(side: MkTransferSide): readonly MkTransferItem[] {\n return side === 'available'\n ? this.filteredAvailable()\n : this.filteredSelected();\n }\n\n private activeSignalFor(side: MkTransferSide) {\n return side === 'available' ? this.activeAvailable : this.activeSelected;\n }\n\n /** The active (tabbable) option index for a list, clamped to its length. */\n protected activeIdx(side: MkTransferSide): number {\n const max = Math.max(0, this.filteredFor(side).length - 1);\n return Math.min(this.activeSignalFor(side)(), max);\n }\n\n /** Keep the roving index in sync when an option is focused (e.g. by click). */\n protected setActive(side: MkTransferSide, index: number): void {\n this.activeSignalFor(side).set(index);\n }\n\n /** Move the active index and focus that option. */\n private moveActive(side: MkTransferSide, index: number): void {\n const list = this.filteredFor(side);\n if (!list.length) return;\n const next = Math.max(0, Math.min(index, list.length - 1));\n this.activeSignalFor(side).set(next);\n this.focusOption(side, next);\n }\n\n private focusOption(side: MkTransferSide, index: number): void {\n const els =\n side === 'available' ? this.availableOptEls() : this.selectedOptEls();\n els[index]?.nativeElement.focus();\n }\n\n /**\n * After a move, keep focus useful: focus the source list's next remaining\n * option, or the (empty) list element itself.\n */\n private focusAfterMove(side: MkTransferSide): void {\n afterNextRender(\n () => {\n const list = this.filteredFor(side);\n if (!list.length) {\n this.activeSignalFor(side).set(0);\n const listEl =\n side === 'available' ? this.availableListEl() : this.selectedListEl();\n listEl?.nativeElement.focus();\n return;\n }\n this.moveActive(side, this.activeSignalFor(side)());\n },\n { injector: this.injector },\n );\n }\n\n private announceMove(count: number, side: MkTransferSide): void {\n const target =\n side === 'available' ? this.selectedLabel() : this.availableLabel();\n this.announcer.announce(this.i18n.itemsMoved(count, target));\n }\n\n protected onRowKeydown(\n side: MkTransferSide,\n item: MkTransferItem,\n event: Event,\n ): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const index = this.filteredFor(side).indexOf(item);\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.moveActive(side, index + 1);\n return;\n case 'ArrowUp':\n e.preventDefault();\n this.moveActive(side, index - 1);\n return;\n case 'Home':\n e.preventDefault();\n this.moveActive(side, 0);\n return;\n case 'End':\n e.preventDefault();\n this.moveActive(side, this.filteredFor(side).length - 1);\n return;\n }\n if (item.disabled) return;\n if (e.key === ' ') {\n e.preventDefault();\n this.toggleCheck(side, item);\n } else if (e.key === 'Enter') {\n e.preventDefault();\n this.moveOne(side, item);\n }\n }\n\n /** Move a single item to the opposite list (Enter on a row). */\n private moveOne(side: MkTransferSide, item: MkTransferItem): void {\n const index = this.filteredFor(side).indexOf(item);\n if (index >= 0) this.activeSignalFor(side).set(index);\n if (side === 'available') {\n this.commit([...this.value(), item.value]);\n } else {\n this.commit(this.value().filter((v) => v !== item.value));\n }\n this.uncheck(side, [item.value]);\n this.announceMove(1, side);\n this.focusAfterMove(side);\n }\n\n /** Move all checked available items into the selected list. */\n protected moveRight(): void {\n if (this.isDisabled()) return;\n const checked = this.checkedAvailable();\n const moving = this.available()\n .filter((it) => !it.disabled && checked.has(it.value))\n .map((it) => it.value);\n if (!moving.length) return;\n this.commit([...this.value(), ...moving]);\n this.uncheck('available', moving);\n this.announceMove(moving.length, 'available');\n this.focusAfterMove('available');\n }\n\n /** Move all checked selected items back to the available list. */\n protected moveLeft(): void {\n if (this.isDisabled()) return;\n const checked = this.checkedSelected();\n const moving = new Set(\n this.selected()\n .filter((it) => !it.disabled && checked.has(it.value))\n .map((it) => it.value),\n );\n if (!moving.size) return;\n this.commit(this.value().filter((v) => !moving.has(v)));\n this.uncheck('selected', [...moving]);\n this.announceMove(moving.size, 'selected');\n this.focusAfterMove('selected');\n }\n\n /** Move every movable available item into the selected list. */\n protected moveAllRight(): void {\n if (this.isDisabled()) return;\n const moving = this.available()\n .filter((it) => !it.disabled)\n .map((it) => it.value);\n if (!moving.length) return;\n this.commit([...this.value(), ...moving]);\n this.checkedAvailable.set(new Set());\n this.announceMove(moving.length, 'available');\n this.focusAfterMove('available');\n }\n\n /** Move every movable selected item back to the available list. */\n protected moveAllLeft(): void {\n if (this.isDisabled()) return;\n const moving = new Set(\n this.selected()\n .filter((it) => !it.disabled)\n .map((it) => it.value),\n );\n if (!moving.size) return;\n this.commit(this.value().filter((v) => !moving.has(v)));\n this.checkedSelected.set(new Set());\n this.announceMove(moving.size, 'selected');\n this.focusAfterMove('selected');\n }\n\n private uncheck(side: MkTransferSide, values: readonly unknown[]): void {\n const sig = this.checkedFor(side);\n const next = new Set(sig());\n for (const v of values) next.delete(v);\n sig.set(next);\n }\n\n private commit(next: unknown[]): void {\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n this.change.emit(next);\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown[] | null): void {\n this.value.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<!-- Available (left) list -->\n<div class=\"mk-transfer-list__panel\">\n <div class=\"mk-transfer-list__heading\" [id]=\"availableLabelId\">\n {{ availableLabel() }}\n <span class=\"mk-transfer-list__count\">{{ available().length }}</span>\n </div>\n\n @if (filterable()) {\n <input\n class=\"mk-transfer-list__search\"\n type=\"text\"\n [value]=\"availableQuery()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"availableLabel() + ' — ' + i18n.filter\"\n [placeholder]=\"i18n.filter\"\n (input)=\"onQueryInput('available', $event)\"\n />\n }\n\n <ul\n #availableList\n class=\"mk-transfer-list__list\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n tabindex=\"-1\"\n [id]=\"availableListId\"\n [attr.aria-labelledby]=\"availableLabelId\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n >\n @for (item of filteredAvailable(); track item.value) {\n <li\n #availableOpt\n class=\"mk-transfer-list__option\"\n [class.mk-transfer-list__option--checked]=\"isChecked('available', item.value)\"\n [class.mk-transfer-list__option--disabled]=\"item.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isChecked('available', item.value)\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.tabindex]=\"$index === activeIdx('available') ? 0 : -1\"\n (focus)=\"setActive('available', $index)\"\n (click)=\"toggleCheck('available', item)\"\n (keydown)=\"onRowKeydown('available', item, $event)\"\n >\n <span class=\"mk-transfer-list__check\" aria-hidden=\"true\"></span>\n <span class=\"mk-transfer-list__label\">{{ item.label }}</span>\n </li>\n } @empty {\n <li class=\"mk-transfer-list__empty\">{{ i18n.noData }}</li>\n }\n </ul>\n</div>\n\n<!-- Middle controls -->\n<div class=\"mk-transfer-list__controls\">\n <button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n [attr.aria-label]=\"i18n.transferSelected(selectedLabel())\"\n [disabled]=\"isDisabled() || !canMoveRight()\"\n (click)=\"moveRight()\"\n >\n <span class=\"mk-transfer-list__arrow\" aria-hidden=\"true\">→</span>\n </button>\n <button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n [attr.aria-label]=\"i18n.transferAll(selectedLabel())\"\n [disabled]=\"isDisabled() || !canMoveAllRight()\"\n (click)=\"moveAllRight()\"\n >\n <span class=\"mk-transfer-list__arrow\" aria-hidden=\"true\">≫</span>\n </button>\n <button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n [attr.aria-label]=\"i18n.transferAll(availableLabel())\"\n [disabled]=\"isDisabled() || !canMoveAllLeft()\"\n (click)=\"moveAllLeft()\"\n >\n <span class=\"mk-transfer-list__arrow\" aria-hidden=\"true\">≪</span>\n </button>\n <button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n [attr.aria-label]=\"i18n.transferSelected(availableLabel())\"\n [disabled]=\"isDisabled() || !canMoveLeft()\"\n (click)=\"moveLeft()\"\n >\n <span class=\"mk-transfer-list__arrow\" aria-hidden=\"true\">←</span>\n </button>\n</div>\n\n<!-- Selected (right) list -->\n<div class=\"mk-transfer-list__panel\">\n <div class=\"mk-transfer-list__heading\" [id]=\"selectedLabelId\">\n {{ selectedLabel() }}\n <span class=\"mk-transfer-list__count\">{{ selected().length }}</span>\n </div>\n\n @if (filterable()) {\n <input\n class=\"mk-transfer-list__search\"\n type=\"text\"\n [value]=\"selectedQuery()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"selectedLabel() + ' — ' + i18n.filter\"\n [placeholder]=\"i18n.filter\"\n (input)=\"onQueryInput('selected', $event)\"\n />\n }\n\n <ul\n #selectedList\n class=\"mk-transfer-list__list\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n tabindex=\"-1\"\n [id]=\"selectedListId\"\n [attr.aria-labelledby]=\"selectedLabelId\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n >\n @for (item of filteredSelected(); track item.value) {\n <li\n #selectedOpt\n class=\"mk-transfer-list__option\"\n [class.mk-transfer-list__option--checked]=\"isChecked('selected', item.value)\"\n [class.mk-transfer-list__option--disabled]=\"item.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isChecked('selected', item.value)\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.tabindex]=\"$index === activeIdx('selected') ? 0 : -1\"\n (focus)=\"setActive('selected', $index)\"\n (click)=\"toggleCheck('selected', item)\"\n (keydown)=\"onRowKeydown('selected', item, $event)\"\n >\n <span class=\"mk-transfer-list__check\" aria-hidden=\"true\"></span>\n <span class=\"mk-transfer-list__label\">{{ item.label }}</span>\n </li>\n } @empty {\n <li class=\"mk-transfer-list__empty\">{{ i18n.noData }}</li>\n }\n </ul>\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n booleanAttribute,\n computed,\n contentChild,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MK_I18N, MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { MkButton } from '@mk-kit/ui/button';\nimport {\n MkDrag,\n MkDragHandle,\n MkDropList,\n mkMoveItemInArray,\n type MkDropEvent,\n} from '@mk-kit/ui/dnd';\n\n/** Template context for a {@link MkRepeaterRow} row template. */\nexport interface MkRepeaterRowContext<T> {\n /** The row's item — destructure with `let-item`. */\n $implicit: T;\n /** The row's current index — destructure with `let-i=\"index\"`. */\n index: number;\n}\n\n/**\n * Marks an `<ng-template>` as the row template for {@link MkRepeater}. The\n * template receives the item as its implicit context plus its `index`:\n *\n * ```html\n * <ng-template mkRepeaterRow let-item let-i=\"index\">\n * <input mkInput [(ngModel)]=\"item.name\" />\n * </ng-template>\n * ```\n */\n@Directive({\n selector: '[mkRepeaterRow]',\n})\nexport class MkRepeaterRow<T = unknown> {\n /** The projected row template, rendered once per item. */\n readonly template = inject<TemplateRef<MkRepeaterRowContext<T>>>(TemplateRef);\n\n static ngTemplateContextGuard<T>(\n _dir: MkRepeaterRow<T>,\n _ctx: unknown,\n ): _ctx is MkRepeaterRowContext<T> {\n return true;\n }\n}\n\n/**\n * Marks an `<ng-template>` as {@link MkRepeater}'s custom empty state, shown\n * instead of the row list while there are no items.\n */\n@Directive({\n selector: '[mkRepeaterEmpty]',\n})\nexport class MkRepeaterEmpty {\n /** The projected empty-state template. */\n readonly template = inject(TemplateRef);\n}\n\n/**\n * Repeater — the schema-friendly editable list: renders one instance of a\n * consumer-projected row template per item, with add / remove / (optional)\n * drag-and-drop + keyboard reorder built in.\n *\n * `items` is a two-way model and the component also implements\n * `ControlValueAccessor` over `T[]`, so it drops into template-driven and\n * reactive forms alike. **Every mutation produces a new array** — the\n * consumer's array is never mutated in place.\n *\n * Rows are tracked by **item object identity** (stable across the repeater's\n * immutable array copies), so removing a middle row keeps the following rows'\n * DOM — and any in-progress input state — intact. Consequently, arrays of\n * primitives with duplicate values (e.g. `['a', 'a']`) are not supported\n * directly: wrap each value in an object (`{ value: 'a' }`) so every row has\n * a distinct identity.\n *\n * With `reorderable`, each row gets a drag handle wired through the dnd\n * module's touch-safe handle-based configuration (a swipe on the row body\n * still scrolls the page). The handle button is the only control the dnd\n * layer adds — rows stay plain list items, so the inputs and buttons inside\n * them are never nested in an interactive role. Reordering also works by\n * keyboard: focus the handle and press Space/Enter to pick up, arrows to\n * move, Space/Enter to drop, Escape to cancel. Each completed reorder is\n * announced via {@link MkLiveAnnouncer}.\n *\n * ```html\n * <mk-repeater [(items)]=\"rows\" [min]=\"1\" [max]=\"10\" reorderable\n * [factory]=\"newRow\" addLabel=\"Add row\">\n * <ng-template mkRepeaterRow let-item let-i=\"index\">\n * <input mkInput [(ngModel)]=\"item.name\" />\n * </ng-template>\n * <ng-template mkRepeaterEmpty>No rows yet.</ng-template>\n * </mk-repeater>\n * ```\n *\n * @typeParam T item data type.\n */\n@Component({\n selector: 'mk-repeater',\n templateUrl: './repeater.html',\n styleUrl: './repeater.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, MkButton, MkDropList, MkDrag, MkDragHandle],\n host: {\n class: 'mk-repeater',\n '[class.mk-repeater--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkRepeater),\n multi: true,\n },\n ],\n})\nexport class MkRepeater<T = unknown> implements ControlValueAccessor {\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n\n /** The rows (two-way). Every mutation sets a **new** array. */\n readonly items = model<T[]>([]);\n\n /** Creates the item appended by the add button. Default: `{}` cast to `T`. */\n readonly factory = input<() => T>(() => ({}) as T);\n\n /** Minimum number of rows — remove buttons disable at (or below) it. */\n readonly min = input(0, { transform: numberAttribute });\n\n /** Maximum number of rows (0 = unlimited) — the add button disables at it. */\n readonly max = input(0, { transform: numberAttribute });\n\n /** Enable per-row drag handles (pointer + keyboard reorder). */\n readonly reorderable = input(false, { transform: booleanAttribute });\n\n /** Disable the whole control (add, remove and reorder). */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Add-button caption. Defaults to the i18n `repeaterAddRow` string. */\n readonly addLabel = input<string>('');\n\n /** Emitted after the add button appended a factory-made item. */\n readonly added = output<{ item: T; index: number }>();\n /** Emitted after a row was removed. */\n readonly removed = output<{ item: T; index: number }>();\n /** Emitted after a row was reordered (drag or keyboard). */\n readonly moved = output<{ from: number; to: number }>();\n\n /** The projected `[mkRepeaterRow]` row template (required). */\n protected readonly rowTemplate =\n contentChild.required<MkRepeaterRow<T>>(MkRepeaterRow);\n /** The optional `[mkRepeaterEmpty]` empty-state template. */\n protected readonly emptyTemplate = contentChild(MkRepeaterEmpty);\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: T[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** Effective disabled state (input- or form-driven). */\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n /** Whether the row cap has been reached (add disables). */\n protected readonly atMax = computed(\n () => this.max() > 0 && this.items().length >= this.max(),\n );\n\n /** Whether the row floor has been reached (remove disables). */\n protected readonly atMin = computed(\n () => this.items().length <= Math.max(0, this.min()),\n );\n\n /** The add button's caption (input, falling back to i18n). */\n protected readonly effectiveAddLabel = computed(\n () => this.addLabel() || this.i18n.repeaterAddRow,\n );\n\n /** Append a new `factory()` item (no-op when disabled or at `max`). */\n protected add(): void {\n if (this.isDisabled() || this.atMax()) return;\n const item = this.factory()();\n const next = [...this.items(), item];\n this.setItems(next);\n this.onTouched();\n this.added.emit({ item, index: next.length - 1 });\n }\n\n /** Remove the row at `index` (no-op when disabled or at `min`). */\n protected removeAt(index: number): void {\n if (this.isDisabled() || this.atMin()) return;\n const current = this.items();\n if (index < 0 || index >= current.length) return;\n const item = current[index];\n this.setItems(current.filter((_, i) => i !== index));\n this.onTouched();\n this.removed.emit({ item, index });\n }\n\n /** Apply a dnd drop (pointer or keyboard) to a **copy** of the array. */\n protected onDrop(event: MkDropEvent<T>): void {\n const from = event.previousIndex;\n const to = event.currentIndex;\n if (from === to) return;\n const next = [...this.items()];\n mkMoveItemInArray(next, from, to);\n this.setItems(next);\n this.onTouched();\n this.moved.emit({ from, to });\n this.announcer.announce(this.i18n.repeaterRowMoved(from + 1, to + 1));\n }\n\n /**\n * Keep keys typed into the projected row content (and pressed on the remove\n * button) from bubbling to the row's `[mkDrag]` host, where Space/Enter\n * would pick the row up for keyboard dragging. Reordering by keyboard stays\n * available from the drag handle and the row element itself.\n */\n protected onContentKeydown(event: Event): void {\n event.stopPropagation();\n }\n\n private setItems(next: T[]): void {\n this.items.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: T[] | null): void {\n this.items.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: T[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","@if (items().length > 0) {\n @if (reorderable()) {\n <ul\n class=\"mk-repeater__rows\"\n mkDropList\n [mkDropListData]=\"items()\"\n [mkDropListDisabled]=\"isDisabled()\"\n (mkDropListDropped)=\"onDrop($event)\"\n >\n @for (item of items(); track item) {\n <li class=\"mk-repeater__row\" mkDrag [mkDragData]=\"item\">\n <button\n type=\"button\"\n class=\"mk-repeater__handle\"\n mkDragHandle\n [attr.aria-label]=\"i18n.repeaterReorderRow($index + 1)\"\n [disabled]=\"isDisabled()\"\n >\n <span aria-hidden=\"true\">⠿</span>\n </button>\n <ng-container\n [ngTemplateOutlet]=\"rowInner\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: $index }\"\n />\n </li>\n }\n </ul>\n } @else {\n <ul class=\"mk-repeater__rows\">\n @for (item of items(); track item) {\n <li class=\"mk-repeater__row\">\n <ng-container\n [ngTemplateOutlet]=\"rowInner\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: $index }\"\n />\n </li>\n }\n </ul>\n }\n} @else {\n @if (emptyTemplate(); as empty) {\n <div class=\"mk-repeater__empty\">\n <ng-container [ngTemplateOutlet]=\"empty.template\" />\n </div>\n }\n}\n\n<button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n class=\"mk-repeater__add\"\n [disabled]=\"isDisabled() || atMax()\"\n (click)=\"add()\"\n>\n {{ effectiveAddLabel() }}\n</button>\n\n<!-- Shared row body: projected content + remove button (both branches). -->\n<ng-template #rowInner let-item let-i=\"index\">\n <div class=\"mk-repeater__content\" (keydown)=\"onContentKeydown($event)\">\n <ng-container\n [ngTemplateOutlet]=\"rowTemplate().template\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: i }\"\n />\n </div>\n <button\n mkButton\n variant=\"ghost\"\n tone=\"neutral\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n class=\"mk-repeater__remove\"\n [attr.aria-label]=\"i18n.repeaterRemoveRow(i + 1)\"\n [disabled]=\"isDisabled() || atMin()\"\n (click)=\"removeAt(i)\"\n (keydown)=\"onContentKeydown($event)\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkTree, type MkTreeNode } from '@mk-kit/ui/navigation';\n\n/**\n * TreeSelect — a form field whose popover contains a hierarchical\n * {@link MkTree}. The trigger shows the selected node's label (or a\n * placeholder); opening it reveals a selectable tree rendered in the top layer\n * via {@link MkAnchoredPanel}, so it is never clipped. Choosing a node sets the\n * value to that node's `value` (or the node itself when `value` is unset),\n * closes the panel and restores focus to the trigger. Implements\n * `ControlValueAccessor` and a two-way `value` model.\n *\n * ```html\n * <mk-tree-select [nodes]=\"tree\" [(value)]=\"picked\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-tree-select',\n templateUrl: './tree-select.html',\n styleUrl: './tree-select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkTree, MkAnchoredPanel],\n host: {\n class: 'mk-tree-select',\n '[class.mk-tree-select--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-tree-select--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-tree-select--open]': 'open()',\n '[class.mk-tree-select--invalid]': 'isInvalid()',\n '[class.mk-tree-select--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTreeSelect),\n multi: true,\n },\n ],\n})\nexport class MkTreeSelect implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** The hierarchical data to render in the panel. */\n readonly nodes = input<readonly MkTreeNode[]>([]);\n /** Two-way selected value (a node's `value`, or the node itself if unset). */\n readonly value = model<unknown | null>(null);\n /** Placeholder shown when nothing is selected. */\n readonly placeholder = input(this.i18n.selectPlaceholder);\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a value is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-tree-select');\n readonly panelId = mkUniqueId('mk-tree-select-panel');\n /** Id of the rendered value/placeholder span, appended to `aria-labelledby`. */\n readonly valueId = mkUniqueId('mk-tree-select-value');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Label of the selected node (found by walking `nodes` recursively). */\n protected readonly selectedLabel = computed(() => {\n const v = this.value();\n if (v === null || v === undefined) return '';\n return this.findNode(this.nodes(), v)?.label ?? '';\n });\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n // Move focus into the tree once the panel is in the DOM.\n afterNextRender(() => this.focusTree(), { injector: this.injector });\n }\n\n protected close(restoreFocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (restoreFocus) this.triggerRef()?.nativeElement.focus();\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n }\n }\n\n /**\n * Focus left the teleported panel. The host `(focusout)` never sees this —\n * the panel lives under `document.body` — so Tab-out of the tree is handled\n * here: close unless focus moved back into the field or the panel.\n */\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n // Focus fell to a non-focusable spot (body) — keep open; an outside\n // pointerdown is dismissed by the anchored panel itself.\n if (!related) return;\n if (this.host.nativeElement.contains(related)) return;\n if (this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n /** Handle a selection emitted by the tree (a value) or a node passed directly. */\n protected onPick(selected: unknown): void {\n const value = this.valueOf(selected);\n this.value.set(value);\n this.onChange(value);\n this.close(true);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.onChange(null);\n this.triggerRef()?.nativeElement.focus();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n /** Resolve the bound value for a node (or pass a primitive value through). */\n private valueOf(node: unknown): unknown {\n if (\n node &&\n typeof node === 'object' &&\n 'value' in node &&\n (node as MkTreeNode).value !== undefined\n ) {\n return (node as MkTreeNode).value;\n }\n return node;\n }\n\n private findNode(\n list: readonly MkTreeNode[],\n value: unknown,\n ): MkTreeNode | null {\n for (const node of list) {\n if (this.valueOf(node) === value) return node;\n if (node.children?.length) {\n const hit = this.findNode(node.children, value);\n if (hit) return hit;\n }\n }\n return null;\n }\n\n private focusTree(): void {\n const panel = this.panelRef()?.nativeElement;\n if (!panel) return;\n const active =\n panel.querySelector<HTMLElement>('[role=\"treeitem\"][tabindex=\"0\"]') ??\n panel.querySelector<HTMLElement>('[role=\"treeitem\"]');\n active?.focus();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: unknown | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div #field class=\"mk-tree-select__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-tree-select__trigger\"\n [id]=\"triggerId\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy() ? labelledBy() + ' ' + valueId : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (selectedLabel()) {\n <span class=\"mk-tree-select__value\" [id]=\"valueId\">{{ selectedLabel() }}</span>\n } @else {\n <span\n class=\"mk-tree-select__value mk-tree-select__value--placeholder\"\n [id]=\"valueId\"\n >{{ placeholder() }}</span\n >\n }\n <span class=\"mk-tree-select__icon\" aria-hidden=\"true\"></span>\n </button>\n\n @if (clearable() && value() !== null && value() !== undefined && !isDisabled()) {\n <button\n type=\"button\"\n class=\"mk-tree-select__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear($event)\"\n >\n <span class=\"mk-tree-select__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-tree-select__panel\"\n role=\"dialog\"\n [id]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n [matchWidth]=\"true\"\n (dismiss)=\"close()\"\n (keydown)=\"onPanelKeydown($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n <mk-tree\n class=\"mk-tree-select__tree\"\n selectable\n [nodes]=\"nodes()\"\n [selected]=\"value()\"\n (selectedChange)=\"onPick($event)\"\n />\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n effect,\n forwardRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\n\n/** Upload lifecycle state for a single file. */\nexport type MkUploadStatus = 'pending' | 'uploading' | 'success' | 'error';\n\n/** A file tracked by {@link MkFileUpload}. */\nexport interface MkUploadFile {\n /** Stable id for tracking + removal. */\n id: string;\n /** The underlying browser `File`. */\n file: File;\n /** File name. */\n name: string;\n /** Size in bytes. */\n size: number;\n /** Upload lifecycle state. */\n status: MkUploadStatus;\n /** Upload progress, 0–100. */\n progress: number;\n /** Failure reason (validation or upload error). */\n error?: string;\n /** Object URL for an image preview, when the file is an image. */\n previewUrl?: string;\n}\n\n/** Why a dropped/selected file was rejected. */\nexport interface MkUploadRejection {\n file: File;\n reason: 'type' | 'size' | 'maxFiles';\n message: string;\n}\n\n/**\n * Uploads the given file, reporting progress via `onProgress` (0–100) and\n * resolving on success / rejecting (optionally with an `Error`) on failure.\n */\nexport type MkUploadFn = (\n file: File,\n onProgress: (percent: number) => void,\n) => Promise<void>;\n\n/**\n * What {@link MkFileUpload} publishes as its form value: the raw browser\n * `File`s (the default, and what you would send in a `FormData`), or the full\n * tracked items including upload status and progress.\n */\nexport type MkUploadValueFormat = 'file' | 'item';\n\nlet uploadSeq = 0;\n\n/**\n * FileUpload — an accessible click-or-drag dropzone with multi-file support,\n * type/size/count validation, image thumbnails and per-file progress.\n *\n * Provide an `uploadFn` to stream each accepted file to your backend (it\n * reports progress and resolves/rejects); with `autoUpload` (on by default when\n * an `uploadFn` is set) files upload as soon as they are accepted. Without one,\n * the component just validates + tracks files and emits `filesSelected` for you\n * to handle. The tracked list is a two-way `files` model so you can reset it.\n *\n * Keyboard: the dropzone is a button — Enter/Space opens the native picker.\n * Rejections are announced through a polite live region.\n *\n * Implements `ControlValueAccessor` and `Validator`, so it drops into a\n * reactive form like any other control. The form value is `File[]` by default\n * (`[valueFormat]=\"'item'\"` publishes the tracked `MkUploadFile[]` instead),\n * and `accept` / `maxSize` / `maxFiles` are enforced as validation errors as\n * well as at pick time — a list written in from the model side is checked too.\n *\n * ```html\n * <mk-file-upload accept=\"image/*\" multiple [maxSize]=\"5_000_000\"\n * [uploadFn]=\"upload\" (filesSelected)=\"onFiles($event)\" [(files)]=\"files\" />\n *\n * <mk-file-upload formControlName=\"attachments\" accept=\".pdf\" [maxFiles]=\"3\" />\n * ```\n */\n@Component({\n selector: 'mk-file-upload',\n templateUrl: './file-upload.html',\n styleUrl: './file-upload.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-file-upload',\n '[class.mk-file-upload--disabled]': 'isDisabled()',\n '[class.mk-file-upload--dragging]': 'dragging()',\n '[class.mk-file-upload--invalid]': 'invalid()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkFileUpload),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkFileUpload),\n multi: true,\n },\n ],\n})\nexport class MkFileUpload implements ControlValueAccessor, Validator {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly i18n = inject(MK_I18N);\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n /** Native `accept` filter, e.g. `image/*` or `.pdf,.doc`. */\n readonly accept = input<string>('');\n /** Allow selecting more than one file. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Maximum size per file in bytes (0 = unlimited). */\n readonly maxSize = input(0, { transform: numberAttribute });\n /** Maximum number of files kept (0 = unlimited). */\n readonly maxFiles = input(0, { transform: numberAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Primary dropzone prompt. */\n readonly label = input(this.i18n.dropzoneLabel);\n /** Secondary hint under the prompt (e.g. accepted types / size). */\n readonly hint = input('');\n /** Hide the built-in file list (render your own from `files`). */\n readonly hideList = input(false, { transform: booleanAttribute });\n /** Async upload handler. When set, files upload automatically. */\n readonly uploadFn = input<MkUploadFn | null>(null);\n /** Upload accepted files immediately. Defaults to true when `uploadFn` set. */\n readonly autoUpload = input<boolean | undefined>(undefined);\n /** Shape of the value published to a bound form control. */\n readonly valueFormat = input<MkUploadValueFormat>('file');\n\n /** The tracked files (two-way, so consumers can reset the list). */\n readonly files = model<MkUploadFile[]>([]);\n\n /** Emits the accepted `File`s each time files are added. */\n readonly filesSelected = output<File[]>();\n /** Emits rejected files with a reason. */\n readonly rejected = output<MkUploadRejection[]>();\n /** Emits a file once its upload succeeds. */\n readonly uploaded = output<MkUploadFile>();\n /** Emits a file when it is removed from the list. */\n readonly removed = output<MkUploadFile>();\n\n protected readonly dragging = signal(false);\n /** Latest rejection messages, surfaced in a polite live region. */\n protected readonly announcement = signal('');\n\n readonly inputId = mkUniqueId('mk-file-upload');\n\n /** Set by reactive forms through `setDisabledState`. */\n private readonly cvaDisabled = signal(false);\n /** Disabled either by the `disabled` input or by the bound form control. */\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n private onChange: (value: File[] | MkUploadFile[]) => void = () => {};\n private onTouched: () => void = () => {};\n /** Guards `writeValue` from echoing back through `onChange`. */\n private writing = false;\n\n protected readonly shouldAutoUpload = computed(\n () => this.autoUpload() ?? !!this.uploadFn(),\n );\n\n protected openPicker(): void {\n if (this.isDisabled()) return;\n this.inputRef()?.nativeElement.click();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.openPicker();\n }\n }\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) this.addFiles(input.files);\n // Reset so re-selecting the same file fires `change` again.\n input.value = '';\n }\n\n protected onDragOver(event: DragEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(true);\n }\n\n protected onDragLeave(event: DragEvent): void {\n event.preventDefault();\n this.dragging.set(false);\n }\n\n protected onDrop(event: DragEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(false);\n if (event.dataTransfer?.files) this.addFiles(event.dataTransfer.files);\n }\n\n /** Validate + track a batch of files, uploading them when configured. */\n private addFiles(list: FileList): void {\n const incoming = this.multiple() ? Array.from(list) : list[0] ? [list[0]] : [];\n const accepted: MkUploadFile[] = [];\n const rejections: MkUploadRejection[] = [];\n const max = this.maxFiles();\n let count = this.multiple() ? this.files().length : 0;\n\n for (const file of incoming) {\n if (!this.matchesAccept(file)) {\n rejections.push({ file, reason: 'type', message: this.i18n.fileRejectedType(file.name) });\n continue;\n }\n if (this.maxSize() > 0 && file.size > this.maxSize()) {\n rejections.push({\n file,\n reason: 'size',\n message: this.i18n.fileRejectedSize(file.name, this.formatBytes(this.maxSize())),\n });\n continue;\n }\n if (max > 0 && count >= max) {\n rejections.push({ file, reason: 'maxFiles', message: this.i18n.fileRejectedCount(file.name, max) });\n continue;\n }\n accepted.push(this.toItem(file));\n count++;\n }\n\n if (accepted.length) {\n // In single mode a new file replaces the previous one.\n const base = this.multiple() ? this.files() : [];\n if (!this.multiple()) this.files().forEach((i) => this.revoke(i));\n this.files.set([...base, ...accepted]);\n this.filesSelected.emit(accepted.map((i) => i.file));\n if (this.shouldAutoUpload() && this.uploadFn()) {\n accepted.forEach((i) => this.upload(i));\n }\n }\n if (rejections.length) {\n this.rejected.emit(rejections);\n this.announcement.set(rejections.map((r) => r.message).join('. '));\n }\n }\n\n /** Remove a tracked file. */\n protected remove(item: MkUploadFile): void {\n this.revoke(item);\n this.files.set(this.files().filter((i) => i.id !== item.id));\n this.removed.emit(item);\n }\n\n /** Retry a failed upload. */\n protected retry(item: MkUploadFile): void {\n if (this.uploadFn()) this.upload(item);\n }\n\n private async upload(item: MkUploadFile): Promise<void> {\n const fn = this.uploadFn();\n if (!fn) return;\n this.patch(item.id, { status: 'uploading', progress: 0, error: undefined });\n try {\n await fn(item.file, (pct) =>\n this.patch(item.id, { progress: Math.max(0, Math.min(100, Math.round(pct))) }),\n );\n this.patch(item.id, { status: 'success', progress: 100 });\n const done = this.files().find((i) => i.id === item.id);\n if (done) this.uploaded.emit(done);\n } catch (err) {\n const message =\n err instanceof Error ? err.message : this.i18n.uploadFailed;\n this.patch(item.id, { status: 'error', error: message });\n }\n }\n\n /** Immutably update one tracked file by id. */\n private patch(id: string, partial: Partial<MkUploadFile>): void {\n this.files.set(\n this.files().map((i) => (i.id === id ? { ...i, ...partial } : i)),\n );\n }\n\n private toItem(file: File): MkUploadFile {\n const isImage = file.type.startsWith('image/');\n return {\n id: `mk-upload-${uploadSeq++}`,\n file,\n name: file.name,\n size: file.size,\n status: 'pending',\n progress: 0,\n previewUrl:\n isImage && this.isBrowser\n ? this.document.defaultView?.URL.createObjectURL(file)\n : undefined,\n };\n }\n\n private revoke(item: MkUploadFile): void {\n if (item.previewUrl && this.isBrowser) {\n this.document.defaultView?.URL.revokeObjectURL(item.previewUrl);\n }\n }\n\n private matchesAccept(file: File): boolean {\n const accept = this.accept().trim();\n if (!accept) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return accept.split(',').some((raw) => {\n const token = raw.trim().toLowerCase();\n if (!token) return false;\n if (token.startsWith('.')) return name.endsWith(token);\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, -1));\n return type === token;\n });\n }\n\n protected formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KB', 'MB', 'GB'];\n let value = bytes / 1024;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024;\n unit++;\n }\n return `${value.toFixed(value < 10 ? 1 : 0)} ${units[unit]}`;\n }\n\n /**\n * Revoke preview object-URLs for items that leave the two-way `files` model\n * externally (e.g. a consumer resetting the list), not just via `remove()`.\n */\n private readonly trackedPreviews = new Map<string, string>();\n private readonly trackPreviews = effect(() => {\n const current = this.files();\n const liveIds = new Set(current.map((i) => i.id));\n for (const [id, url] of this.trackedPreviews) {\n if (!liveIds.has(id)) {\n if (this.isBrowser) this.document.defaultView?.URL.revokeObjectURL(url);\n this.trackedPreviews.delete(id);\n }\n }\n for (const item of current) {\n if (item.previewUrl) this.trackedPreviews.set(item.id, item.previewUrl);\n }\n });\n\n ngOnDestroy(): void {\n if (this.isBrowser) {\n for (const url of this.trackedPreviews.values()) {\n this.document.defaultView?.URL.revokeObjectURL(url);\n }\n this.trackedPreviews.clear();\n }\n }\n\n /** Marks the control touched once focus leaves the dropzone and its list. */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor ---------------------------------------------------\n\n /** The value published to a bound form control, in the requested shape. */\n private readonly formValue = computed<File[] | MkUploadFile[]>(() =>\n this.valueFormat() === 'item'\n ? this.files()\n : this.files().map((i) => i.file),\n );\n\n /**\n * Last value handed to `onChange`, for change detection against `formValue`.\n * `null` suppresses the next emission — used for the initial render and for\n * every `writeValue`, so writing from the model side never dirties the\n * control or loops back.\n */\n private lastEmitted: readonly unknown[] | null = null;\n\n private readonly emitOnChange = effect(() => {\n const value = this.formValue();\n const previous = this.lastEmitted;\n this.lastEmitted = value;\n if (previous === null) return;\n // Upload progress replaces item objects without changing the file set, so\n // in `file` format those ticks compare equal and stay off the form value.\n const same =\n previous.length === value.length &&\n previous.every((entry, i) => entry === value[i]);\n if (!same) this.onChange(value);\n });\n\n writeValue(value: unknown): void {\n this.lastEmitted = null;\n const list = Array.isArray(value) ? value : [];\n this.files.set(\n list\n .map((entry) => this.adopt(entry))\n .filter((item): item is MkUploadFile => item !== null),\n );\n }\n registerOnChange(fn: (value: File[] | MkUploadFile[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n /** Accepts either shape of written value; drops anything unrecognisable. */\n private adopt(entry: unknown): MkUploadFile | null {\n if (entry instanceof File) return this.toItem(entry);\n const item = entry as MkUploadFile | null;\n return item?.file instanceof File ? item : null;\n }\n\n // --- Validator --------------------------------------------------------------\n\n private readonly validatorChange = mkValidatorChange(() => {\n this.accept();\n this.maxSize();\n this.maxFiles();\n });\n\n /**\n * Applies the same `accept` / `maxSize` / `maxFiles` rules the dropzone\n * enforces at pick time, so a list written in from the model side — which\n * never goes through that path — is checked too. An empty list passes;\n * compose with `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (!Array.isArray(value) || !value.length) return null;\n const files = value\n .map((entry) => (entry instanceof File ? entry : (entry?.file as File)))\n .filter((f): f is File => f instanceof File);\n\n const max = this.maxFiles();\n if (max > 0 && files.length > max) {\n return { mkMaxItems: { max, actual: files.length } };\n }\n\n const maxSize = this.maxSize();\n if (maxSize > 0) {\n const tooBig = files.find((f) => f.size > maxSize);\n if (tooBig) {\n return {\n mkFileSize: {\n max: maxSize,\n maxLabel: this.formatBytes(maxSize),\n name: tooBig.name,\n },\n };\n }\n }\n\n const wrongType = files.find((f) => !this.matchesAccept(f));\n if (wrongType) {\n return { mkFileType: { accept: this.accept(), name: wrongType.name } };\n }\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div\n class=\"mk-file-upload__dropzone\"\n role=\"button\"\n [attr.tabindex]=\"isDisabled() ? null : 0\"\n [attr.aria-label]=\"label()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (click)=\"openPicker()\"\n (keydown)=\"onKeydown($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <span class=\"mk-file-upload__icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"28\" height=\"28\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M12 15V3M8 7l4-4 4 4\" />\n <path d=\"M4 15v4a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-4\" />\n </svg>\n </span>\n <span class=\"mk-file-upload__prompt\">{{ label() }}</span>\n @if (hint()) {\n <span class=\"mk-file-upload__hint\">{{ hint() }}</span>\n }\n\n</div>\n\n<input\n #fileInput\n type=\"file\"\n class=\"mk-file-upload__input\"\n [id]=\"inputId\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"isDisabled()\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (change)=\"onInputChange($event)\"\n/>\n\n<div class=\"mk-file-upload__sr\" role=\"status\" aria-live=\"polite\">\n {{ announcement() }}\n</div>\n\n@if (!hideList() && files().length) {\n <ul class=\"mk-file-upload__list\">\n @for (item of files(); track item.id) {\n <li\n class=\"mk-file-upload__item\"\n [class.mk-file-upload__item--error]=\"item.status === 'error'\"\n [class.mk-file-upload__item--success]=\"item.status === 'success'\"\n >\n <span class=\"mk-file-upload__thumb\" aria-hidden=\"true\">\n @if (item.previewUrl) {\n <img [src]=\"item.previewUrl\" [alt]=\"item.name\" />\n } @else {\n <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n </svg>\n }\n </span>\n\n <span class=\"mk-file-upload__meta\">\n <span class=\"mk-file-upload__name\">{{ item.name }}</span>\n <span class=\"mk-file-upload__size\">\n @if (item.status === 'error') {\n {{ item.error }}\n } @else {\n {{ formatBytes(item.size) }}\n @if (item.status === 'uploading') {\n · {{ item.progress }}%\n }\n }\n </span>\n @if (item.status === 'uploading') {\n <span\n class=\"mk-file-upload__progress\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"item.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <span class=\"mk-file-upload__bar\" [style.width.%]=\"item.progress\"></span>\n </span>\n }\n </span>\n\n <span class=\"mk-file-upload__status\">\n @if (item.status === 'success') {\n <span class=\"mk-file-upload__check\" aria-hidden=\"true\"></span>\n } @else if (item.status === 'error') {\n <button\n type=\"button\"\n class=\"mk-file-upload__retry\"\n [attr.aria-label]=\"i18n.retryUpload\"\n (click)=\"retry(item)\"\n >\n <span aria-hidden=\"true\">↻</span>\n </button>\n }\n </span>\n\n <button\n type=\"button\"\n class=\"mk-file-upload__remove\"\n [attr.aria-label]=\"i18n.removeItem(item.name)\"\n (click)=\"remove(item)\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { mkHighlight, type MkCodeLanguage } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\n\nexport type { MkCodeLanguage } from '@mk-kit/ui/core';\n\n/** The validity of the editor's current content. */\nexport interface MkCodeValidity {\n valid: boolean;\n /** Parser error message, or `null` when valid / not validated. */\n error: string | null;\n}\n\n/**\n * How long (ms) after the last keystroke the expensive derivations (highlight\n * re-render, JSON validation) wait before recomputing. The textarea text itself\n * is always live — only the overlay/validation lag, invisibly, while typing.\n */\nconst MK_CODE_EDITOR_DEBOUNCE_MS = 180;\n\n/**\n * CodeEditor — a lightweight, dependency-free code field with syntax\n * highlighting, JSON validation and pretty-printing. A `<textarea>` provides\n * editing and a synced highlight layer sits behind it, so it stays fully\n * accessible (real textarea semantics, `aria-invalid`, form-field wiring)\n * without pulling in a heavyweight editor.\n *\n * With `language=\"json\"` it validates on every change (exposing an inline error\n * + `(validate)` output) and offers `format()` to pretty-print. Ideal for a CMS\n * `json` field or plugin/settings JSONB editing.\n *\n * Keyboard: Tab inserts `tabSize` spaces; press Escape then Tab to move focus\n * out (so it is never a keyboard trap). Implements `ControlValueAccessor` over a\n * string value with a two-way `value` model.\n *\n * ```html\n * <mk-code-editor #editor language=\"json\" [(value)]=\"config\" [rows]=\"10\" />\n * <button mkButton (click)=\"editor.format()\">Format</button>\n * ```\n */\n@Component({\n selector: 'mk-code-editor',\n exportAs: 'mkCodeEditor',\n templateUrl: './code-editor.html',\n styleUrl: './code-editor.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-code-editor',\n '[class.mk-code-editor--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-code-editor--md]': \"effectiveSize() === 'md'\",\n '[class.mk-code-editor--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-code-editor--invalid]': 'isInvalid()',\n '[class.mk-code-editor--disabled]': 'isDisabled()',\n '[class.mk-code-editor--wrap]': 'wrap()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkCodeEditor),\n multi: true,\n },\n ],\n})\nexport class MkCodeEditor implements ControlValueAccessor, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n private readonly textareaRef =\n viewChild<ElementRef<HTMLTextAreaElement>>('textarea');\n private readonly highlightRef = viewChild<ElementRef<HTMLElement>>('highlight');\n private readonly gutterRef = viewChild<ElementRef<HTMLElement>>('gutter');\n\n /** Language for highlighting + validation. */\n readonly language = input<MkCodeLanguage>('plaintext');\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('');\n /** Render read-only (still focusable/selectable). */\n readonly readOnly = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Visible rows (minimum height). */\n readonly rows = input(8, { transform: numberAttribute });\n /** Show a line-number gutter. */\n readonly lineNumbers = input(true, { transform: booleanAttribute });\n /** Number of spaces inserted by Tab. */\n readonly tabSize = input(2, { transform: numberAttribute });\n /** Soft-wrap long lines instead of scrolling horizontally. */\n readonly wrap = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Accessible label when used standalone (no form field). */\n readonly ariaLabel = input<string>('');\n\n /** Two-way editor content. */\n readonly value = model<string>('');\n\n /** Emits the content validity whenever it changes (JSON only). */\n readonly validate = output<MkCodeValidity>();\n\n private readonly cvaDisabled = signal(false);\n /**\n * Debounced mirror of `value` that the expensive derivations (highlight,\n * JSON validation) read. Typing schedules a trailing update; programmatic\n * writes (`writeValue`, `format()`, `[(value)]` at rest) flush synchronously\n * so the overlay never lags when the user is not typing.\n */\n private readonly debouncedValue = signal('');\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n /** Set true by Escape so the next Tab moves focus instead of indenting. */\n private escapeArmed = false;\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly editorId = this.field?.controlId ?? mkUniqueId('mk-code-editor');\n readonly errorId = `${this.editorId}-json-error`;\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Parse error for JSON content, or `null` when valid / empty / plaintext. */\n protected readonly jsonError = computed<string | null>(() => {\n if (this.language() !== 'json') return null;\n const text = this.debouncedValue().trim();\n if (!text) return null;\n try {\n JSON.parse(text);\n return null;\n } catch (err) {\n return err instanceof Error ? err.message : 'Invalid JSON';\n }\n });\n\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false) || !!this.jsonError(),\n );\n\n /** `aria-describedby` merging the field's ids with the JSON error id. */\n protected readonly ariaDescribedBy = computed(() => {\n const ids: string[] = [];\n const fieldIds = this.describedBy();\n if (fieldIds) ids.push(fieldIds);\n if (this.jsonError()) ids.push(this.errorId);\n return ids.length ? ids.join(' ') : null;\n });\n\n /**\n * Highlighted HTML for the layer behind the textarea. Reads the debounced\n * value: while typing the (transparent-text) textarea sits above the overlay,\n * so a briefly stale highlight is invisible; at rest both are identical.\n */\n protected readonly highlightedHtml = computed(() =>\n mkHighlight(this.debouncedValue(), this.language()),\n );\n\n /** Cache so `lines()` returns the same array while the count is unchanged. */\n private cachedLines: number[] = [1];\n\n /**\n * Line numbers to render in the gutter. Counts newlines in the LIVE value\n * (cheap single scan, no `split()` allocation) so the gutter never lags the\n * textarea, and returns a cached array while the count is unchanged so the\n * `@for` never re-diffs on same-line edits.\n */\n protected readonly lines = computed(() => {\n const text = this.value();\n let count = 1;\n for (let i = text.indexOf('\\n'); i !== -1; i = text.indexOf('\\n', i + 1)) {\n count++;\n }\n if (count !== this.cachedLines.length) {\n this.cachedLines = Array.from({ length: count }, (_, i) => i + 1);\n }\n return this.cachedLines;\n });\n\n constructor() {\n // Keep the debounced mirror in sync for value changes that do not come\n // from typing (e.g. the `[(value)]` binding written by the parent). Typing\n // schedules its own trailing timer in `onInput`, so while one is pending\n // the timer callback is left to settle on the latest value.\n effect(() => {\n const text = this.value();\n if (this.debounceTimer === null) {\n untracked(() => this.debouncedValue.set(text));\n }\n });\n\n // Surface validity changes for JSON.\n effect(() => {\n const error = this.jsonError();\n // Read language so plaintext still resets validity once.\n this.language();\n this.validate.emit({ valid: !error, error });\n });\n }\n\n ngOnDestroy(): void {\n if (this.debounceTimer !== null) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n }\n\n /** Trailing-edge debounce for the expensive derivations while typing. */\n private scheduleDerivations(): void {\n if (this.debounceTimer !== null) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => {\n this.debounceTimer = null;\n this.debouncedValue.set(this.value());\n }, MK_CODE_EDITOR_DEBOUNCE_MS);\n }\n\n /** Cancels any pending debounce and syncs the derivations immediately. */\n private flushDerivations(): void {\n if (this.debounceTimer !== null) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n this.debouncedValue.set(this.value());\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLTextAreaElement).value;\n this.value.set(text);\n this.onChange(text);\n this.scheduleDerivations();\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n /** Keep the highlight layer + gutter aligned with the textarea scroll. */\n protected onScroll(event: Event): void {\n const ta = event.target as HTMLTextAreaElement;\n const hl = this.highlightRef()?.nativeElement;\n if (hl) {\n hl.scrollTop = ta.scrollTop;\n hl.scrollLeft = ta.scrollLeft;\n }\n const gutter = this.gutterRef()?.nativeElement;\n if (gutter) gutter.scrollTop = ta.scrollTop;\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n // Arm the keyboard-trap escape hatch (do not swallow the event).\n this.escapeArmed = true;\n return;\n }\n if (event.key === 'Tab') {\n if (this.escapeArmed) {\n // Let focus move out of the editor.\n this.escapeArmed = false;\n return;\n }\n if (this.readOnly() || this.isDisabled()) return;\n event.preventDefault();\n this.insertText(' '.repeat(Math.max(1, this.tabSize())));\n return;\n }\n this.escapeArmed = false;\n }\n\n /** Insert text at the caret, preserving undo history where supported. */\n private insertText(text: string): void {\n const ta = this.textareaRef()?.nativeElement;\n if (!ta) return;\n // execCommand keeps the caret + native undo stack and fires `input`.\n ta.focus();\n const inserted =\n typeof document.execCommand === 'function' &&\n document.execCommand('insertText', false, text);\n if (!inserted) {\n const start = ta.selectionStart;\n const end = ta.selectionEnd;\n const next = ta.value.slice(0, start) + text + ta.value.slice(end);\n ta.value = next;\n ta.selectionStart = ta.selectionEnd = start + text.length;\n this.value.set(next);\n this.onChange(next);\n this.scheduleDerivations();\n }\n }\n\n // --- Public API (via exportAs) --------------------------------------------\n\n /** The parsed JSON value, or `undefined` when empty / invalid / plaintext. */\n parsed(): unknown {\n if (this.language() !== 'json') return undefined;\n const text = this.value().trim();\n if (!text) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n }\n\n /** Pretty-print valid JSON with `tabSize` indentation. No-op otherwise. */\n format(): void {\n if (this.language() !== 'json') return;\n const text = this.value().trim();\n if (!text) return;\n try {\n const formatted = JSON.stringify(JSON.parse(text), null, this.tabSize());\n if (formatted !== this.value()) {\n this.value.set(formatted);\n this.onChange(formatted);\n this.flushDerivations();\n }\n } catch {\n // Leave invalid JSON untouched.\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n // Programmatic writes must never show a stale overlay / validation.\n this.flushDerivations();\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div class=\"mk-code-editor__frame\">\n @if (lineNumbers()) {\n <div #gutter class=\"mk-code-editor__gutter\" aria-hidden=\"true\">\n @for (n of lines(); track n) {\n <span class=\"mk-code-editor__lineno\">{{ n }}</span>\n }\n </div>\n }\n\n <div class=\"mk-code-editor__scroll\">\n <pre #highlight class=\"mk-code-editor__highlight\" aria-hidden=\"true\"><code [innerHTML]=\"highlightedHtml()\"></code></pre>\n\n <textarea\n #textarea\n class=\"mk-code-editor__textarea\"\n [id]=\"editorId\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [readOnly]=\"readOnly()\"\n [disabled]=\"isDisabled()\"\n [rows]=\"rows()\"\n [attr.wrap]=\"wrap() ? 'soft' : 'off'\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n [attr.aria-label]=\"labelledBy() ? null : ariaLabel() || 'Code editor'\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (scroll)=\"onScroll($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n ></textarea>\n </div>\n</div>\n\n@if (jsonError(); as error) {\n <p class=\"mk-code-editor__error\" [id]=\"errorId\" role=\"alert\">{{ error }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\n\n/**\n * Rating — a star rating input (and read-only display). Implements the ARIA\n * slider pattern: one focusable control, Arrow keys adjust, Home/End jump.\n * Click or hover a star to set the value. `ControlValueAccessor` + two-way\n * `value` model over a number.\n *\n * ```html\n * <mk-rating [(value)]=\"score\" [max]=\"5\" />\n * <mk-rating [value]=\"4\" readonly />\n * ```\n */\n@Component({\n selector: 'mk-rating',\n templateUrl: './rating.html',\n styleUrl: './rating.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-rating',\n '[class.mk-rating--sm]': \"size() === 'sm'\",\n '[class.mk-rating--lg]': \"size() === 'lg'\",\n '[class.mk-rating--readonly]': 'readonly() || isDisabled()',\n '[attr.role]': \"readonly() || isDisabled() ? 'img' : 'slider'\",\n '[attr.tabindex]': 'readonly() || isDisabled() ? null : 0',\n '[attr.aria-label]': 'effectiveAriaLabel()',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-valuemin]': \"readonly() || isDisabled() ? null : 0\",\n '[attr.aria-valuemax]': \"readonly() || isDisabled() ? null : max()\",\n '[attr.aria-valuenow]': \"readonly() || isDisabled() ? null : value()\",\n '[attr.aria-valuetext]': 'valueText()',\n '[attr.aria-readonly]': 'readonly() || null',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[class.mk-rating--invalid]': 'isInvalid()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '(keydown)': 'onKeydown($event)',\n '(mouseleave)': 'hover.set(-1)',\n '(blur)': 'onBlur()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkRating),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkRating),\n multi: true,\n },\n ],\n})\nexport class MkRating implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n\n /** Number of stars. */\n readonly max = input(5, { transform: numberAttribute });\n /** Two-way rating value (0–max). */\n readonly value = model(0);\n /** Read-only display (no interaction). */\n readonly readonly = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Size scale. */\n readonly size = input<MkSize>('md');\n /** Accessible label. */\n readonly ariaLabel = input(this.i18n.ratingLabel);\n\n protected readonly hover = signal(-1);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n /** The surrounding field's label labels this control (`aria-labelledby`). */\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n /** Hint/error ids from the surrounding field (`aria-describedby`). */\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n /**\n * The `aria-label` actually rendered. When an `mk-form-field` provides a\n * label, `aria-labelledby` wins and the default label is dropped so it\n * cannot override the field's visible label.\n */\n protected readonly effectiveAriaLabel = computed(() =>\n this.labelledBy() ? null : this.ariaLabel(),\n );\n\n /** The stars to render (1-based indices). */\n protected readonly stars = computed(() =>\n Array.from({ length: this.max() }, (_, i) => i + 1),\n );\n\n /** The value shown right now (hover preview wins). */\n protected readonly displayValue = computed(() =>\n this.hover() >= 0 ? this.hover() : this.value(),\n );\n\n protected readonly valueText = computed(\n () => this.i18n.ratingValueText(this.value(), this.max()),\n );\n\n protected setValue(v: number): void {\n if (this.readonly() || this.isDisabled()) return;\n // Clicking the only-filled star clears back to zero.\n const next = v === this.value() ? v - 1 : v;\n this.value.set(next);\n this.onChange(next);\n }\n\n protected onStarEnter(v: number): void {\n if (this.readonly() || this.isDisabled()) return;\n this.hover.set(v);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.readonly() || this.isDisabled()) return;\n let next = this.value();\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = Math.min(this.max(), next + 1);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = Math.max(0, next - 1);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = this.max();\n break;\n default:\n return;\n }\n event.preventDefault();\n if (next !== this.value()) {\n this.value.set(next);\n this.onChange(next);\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: number | null): void {\n this.value.set(value ?? 0);\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.max();\n });\n\n /**\n * Reports `max` for a rating above `[max]`. Zero means \"unrated\" and is\n * left to `Validators.required` to reject.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'number' || !Number.isFinite(v) || v === 0) return null;\n if (v < 0) return { min: { min: 0, actual: v } };\n const max = this.max();\n if (v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@for (star of stars(); track star) {\n <button\n type=\"button\"\n class=\"mk-rating__star\"\n [class.mk-rating__star--filled]=\"star <= displayValue()\"\n [disabled]=\"readonly() || isDisabled()\"\n tabindex=\"-1\"\n [attr.aria-hidden]=\"true\"\n (click)=\"setValue(star)\"\n (mouseenter)=\"onStarEnter(star)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" aria-hidden=\"true\">\n <path\n d=\"M12 2.5l2.9 6 6.6.9-4.8 4.6 1.2 6.5L12 18.9 6.1 21l1.2-6.5L2.5 9.9l6.6-.9z\"\n />\n </svg>\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * NumberInput — a numeric field with −/+ stepper buttons, clamping and keyboard\n * stepping (Arrow keys / Page keys). Implements the ARIA `spinbutton` pattern\n * and `ControlValueAccessor` over `number | null`, with a two-way `value` model.\n *\n * ```html\n * <mk-number-input [(value)]=\"qty\" [min]=\"0\" [max]=\"99\" [step]=\"1\" />\n * ```\n */\n@Component({\n selector: 'mk-number-input',\n templateUrl: './number-input.html',\n styleUrl: './number-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-number-input',\n '[class.mk-number-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-number-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-number-input--invalid]': 'isInvalid()',\n '[class.mk-number-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkNumberInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkNumberInput),\n multi: true,\n },\n ],\n})\nexport class MkNumberInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Minimum value. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly min = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Maximum value. */\n readonly max = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Step increment for buttons + Arrow keys. */\n readonly step = input(1, { transform: numberAttribute });\n /** Two-way value. */\n readonly value = model<number | null>(null);\n /** Placeholder when empty. */\n readonly placeholder = input('');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly inputId = this.field?.controlId ?? mkUniqueId('mk-number');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Text mirror of the value for the input. */\n protected readonly display = computed(() => {\n const v = this.value();\n return v == null ? '' : String(v);\n });\n\n protected readonly canDecrement = computed(() => {\n if (this.isDisabled()) return false;\n const min = this.min();\n return min == null || (this.value() ?? min) > min;\n });\n protected readonly canIncrement = computed(() => {\n if (this.isDisabled()) return false;\n const max = this.max();\n return max == null || (this.value() ?? max) < max;\n });\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value.trim();\n if (text === '' || text === '-') {\n this.commit(null, false);\n return;\n }\n const parsed = Number(text);\n if (!Number.isNaN(parsed)) this.commit(parsed, false);\n }\n\n protected onBlur(): void {\n // Clamp to bounds on blur and normalise the displayed text.\n const v = this.value();\n if (v != null) this.commit(this.clamp(v), true);\n this.onTouched();\n }\n\n protected step_(delta: number): void {\n if (this.isDisabled()) return;\n const cur = this.value();\n // From empty, the first press lands on the minimum (or 0), not min ± step.\n const next =\n cur == null ? (this.min() ?? 0) : cur + delta * this.step();\n this.commit(this.clamp(next), true);\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.step_(1);\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.step_(-1);\n }\n }\n\n private clamp(v: number): number {\n const min = this.min();\n const max = this.max();\n if (min != null && v < min) return min;\n if (max != null && v > max) return max;\n return v;\n }\n\n private commit(v: number | null, syncInput: boolean): void {\n this.value.set(v);\n this.onChange(v);\n if (syncInput) {\n const input = this.inputRef()?.nativeElement;\n if (input) input.value = v == null ? '' : String(v);\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: number | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `min` / `max` against the `[min]` and `[max]` inputs, using the\n * same error shapes as `Validators.min` / `Validators.max`.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'number' || Number.isNaN(v)) return null;\n const min = this.min();\n if (min != null && v < min) return { min: { min, actual: v } };\n const max = this.max();\n if (max != null && v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<button\n type=\"button\"\n class=\"mk-number-input__btn mk-number-input__btn--dec\"\n [attr.aria-label]=\"i18n.decrease\"\n tabindex=\"-1\"\n [disabled]=\"!canDecrement()\"\n (click)=\"step_(-1)\"\n>\n <span aria-hidden=\"true\">−</span>\n</button>\n\n<input\n #input\n type=\"text\"\n inputmode=\"decimal\"\n class=\"mk-number-input__field\"\n [id]=\"inputId\"\n role=\"spinbutton\"\n [value]=\"display()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || null)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n/>\n\n<button\n type=\"button\"\n class=\"mk-number-input__btn mk-number-input__btn--inc\"\n [attr.aria-label]=\"i18n.increase\"\n tabindex=\"-1\"\n [disabled]=\"!canIncrement()\"\n (click)=\"step_(1)\"\n>\n <span aria-hidden=\"true\">+</span>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { MK_I18N, MkLiveAnnouncer, mkUniqueId, mkValidatorChange } from '@mk-kit/ui/core';\nimport { MkIcon } from '@mk-kit/ui/icon';\n\nexport type MkNumericKeypadMode = 'pin' | 'quantity' | 'amount';\n\n/** A key on the pad: a digit, or one of the three action keys. */\ntype PadKey = { id: string; label: string; action: 'digit' | 'clear' | 'decimal' | 'backspace' };\n\n/**\n * Numeric keypad — a touch-first 3×4 digit pad for PIN entry, quantity entry\n * and money amounts (POS-style). `ControlValueAccessor` + two-way `value`\n * model; the value is a **string** in `pin` mode (leading zeros preserved)\n * and a **number | null** in `quantity`/`amount` mode.\n *\n * - `pin`: masked echo row by default; `(submit)` fires automatically when\n * `length` digits are entered.\n * - `quantity`: integer entry; the bottom-left key clears.\n * - `amount`: decimal entry (value uses `.`; the echo shows\n * `decimalSeparator`); capped at `fractionDigits` fraction digits.\n *\n * A physical keyboard works anywhere inside the pad: digits, Backspace,\n * Delete (clear), Enter (submit) and the decimal separator. Arrow keys move\n * between the on-screen keys (roving tabindex).\n *\n * ```html\n * <mk-numeric-keypad mode=\"pin\" [length]=\"4\" (submit)=\"unlock($event)\" />\n * <mk-numeric-keypad mode=\"quantity\" [min]=\"1\" [(value)]=\"qty\" />\n * ```\n */\n@Component({\n selector: 'mk-numeric-keypad',\n templateUrl: './numeric-keypad.html',\n styleUrl: './numeric-keypad.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkIcon],\n host: {\n class: 'mk-numeric-keypad',\n role: 'group',\n '[attr.aria-label]': 'ariaLabel()',\n '[class.mk-numeric-keypad--disabled]': 'isDisabled()',\n '[class.mk-numeric-keypad--invalid]': 'invalid()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkNumericKeypad),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkNumericKeypad),\n multi: true,\n },\n ],\n})\nexport class MkNumericKeypad implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly keyEls = viewChildren<ElementRef<HTMLButtonElement>>('key');\n\n /** Entry mode. Decides the value type and the bottom-left key. */\n readonly mode = input<MkNumericKeypadMode>('quantity');\n /** PIN length (`pin` mode only). Reaching it emits `submit`. */\n readonly length = input(4, { transform: numberAttribute });\n /** Lower bound reported through the validator (`quantity`/`amount`). */\n readonly min = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Upper bound reported through the validator (`quantity`/`amount`). */\n readonly max = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Mask the echo row in `pin` mode. Default `true`. */\n readonly mask = input(true, { transform: booleanAttribute });\n /** Show the echo row above the keys. Default `true`. */\n readonly showValue = input(true, { transform: booleanAttribute });\n /** Echo-row separator for `amount` mode. The VALUE always uses `.`. */\n readonly decimalSeparator = input(',');\n /** Max fraction digits accepted in `amount` mode. */\n readonly fractionDigits = input(2, { transform: numberAttribute });\n /** Disable the pad. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Accessible label for the pad. */\n readonly ariaLabel = input(this.i18n.numericKeypadLabel);\n /** Two-way value: `string` in `pin` mode, `number | null` otherwise. */\n readonly value = model<string | number | null>(null);\n\n /** Enter key / full PIN. Emits the current value. */\n readonly submit = output<string | number | null>();\n\n readonly padId = mkUniqueId('mk-numeric-keypad');\n\n /** Raw entry buffer ('' = empty; amount keeps a '.' while typing). */\n private readonly buffer = signal('');\n private readonly cvaDisabled = signal(false);\n /** Roving-tabindex position inside the flattened key list. */\n protected readonly focusIndex = signal(0);\n private onChange: (value: string | number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly keys = computed<PadKey[]>(() => {\n const digit = (d: string): PadKey => ({ id: d, label: d, action: 'digit' });\n const corner: PadKey =\n this.mode() === 'amount'\n ? { id: 'decimal', label: this.decimalSeparator(), action: 'decimal' }\n : { id: 'clear', label: this.i18n.keypadClear, action: 'clear' };\n return [\n ...['1', '2', '3', '4', '5', '6', '7', '8', '9'].map(digit),\n corner,\n digit('0'),\n { id: 'backspace', label: this.i18n.keypadBackspace, action: 'backspace' },\n ];\n });\n\n /** Echo text: masked dots are rendered separately in `pin` mode. */\n protected readonly echoText = computed(() => {\n const raw = this.buffer();\n if (this.mode() === 'amount') {\n return raw ? raw.replace('.', this.decimalSeparator()) : '0';\n }\n return raw || '0';\n });\n protected readonly isPinMasked = computed(() => this.mode() === 'pin' && this.mask());\n protected readonly pinDots = computed(() =>\n Array.from({ length: this.length() }, (_, i) => i < this.buffer().length),\n );\n\n protected keyAriaLabel(key: PadKey): string | null {\n // Digits read themselves from their text content.\n return key.action === 'digit' ? null : key.label;\n }\n\n protected onKeyClick(key: PadKey): void {\n if (this.isDisabled()) return;\n switch (key.action) {\n case 'digit':\n this.pushDigit(key.id);\n break;\n case 'decimal':\n this.pushDecimal();\n break;\n case 'clear':\n this.commit('');\n break;\n case 'backspace':\n this.commit(this.buffer().slice(0, -1));\n break;\n }\n }\n\n /** Physical-keyboard entry + arrow-key roving over the on-screen keys. */\n protected onGridKeydown(event: KeyboardEvent): void {\n const key = event.key;\n if (/^[0-9]$/.test(key)) {\n event.preventDefault();\n if (!this.isDisabled()) this.pushDigit(key);\n } else if (key === '.' || key === ',' || key === this.decimalSeparator()) {\n event.preventDefault();\n if (!this.isDisabled()) this.pushDecimal();\n } else if (key === 'Backspace') {\n event.preventDefault();\n if (!this.isDisabled()) this.commit(this.buffer().slice(0, -1));\n } else if (key === 'Delete') {\n event.preventDefault();\n if (!this.isDisabled()) this.commit('');\n } else if (key === 'Enter') {\n event.preventDefault();\n this.submit.emit(this.value());\n } else if (key === 'ArrowRight') {\n event.preventDefault();\n this.focusKey(this.focusIndex() + 1);\n } else if (key === 'ArrowLeft') {\n event.preventDefault();\n this.focusKey(this.focusIndex() - 1);\n } else if (key === 'ArrowDown') {\n event.preventDefault();\n this.focusKey(this.focusIndex() + 3);\n } else if (key === 'ArrowUp') {\n event.preventDefault();\n this.focusKey(this.focusIndex() - 3);\n } else if (key === 'Home') {\n event.preventDefault();\n this.focusKey(0);\n } else if (key === 'End') {\n event.preventDefault();\n this.focusKey(this.keys().length - 1);\n }\n }\n\n protected onKeyFocus(index: number): void {\n this.focusIndex.set(index);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private focusKey(index: number): void {\n const clamped = Math.max(0, Math.min(this.keys().length - 1, index));\n this.focusIndex.set(clamped);\n this.keyEls()[clamped]?.nativeElement.focus();\n }\n\n private pushDigit(digit: string): void {\n const raw = this.buffer();\n if (this.mode() === 'pin') {\n if (raw.length >= this.length()) return;\n const next = raw + digit;\n this.commit(next);\n if (this.isPinMasked()) {\n this.announcer.announce(\n this.i18n.keypadDigitsEntered(next.length, this.length()),\n 'polite',\n );\n }\n if (next.length === this.length()) this.submit.emit(next);\n return;\n }\n const frac = raw.split('.')[1];\n if (frac !== undefined && frac.length >= this.fractionDigits()) return;\n // '0' → '05' would silently read as 5; replace the bare zero instead.\n this.commit(raw === '0' ? digit : raw + digit);\n }\n\n private pushDecimal(): void {\n if (this.mode() !== 'amount') return;\n const raw = this.buffer();\n if (raw.includes('.')) return;\n this.commit((raw || '0') + '.');\n }\n\n private commit(raw: string): void {\n this.buffer.set(raw);\n const value =\n this.mode() === 'pin'\n ? raw\n : raw === '' || raw === '.'\n ? null\n : Number(raw);\n this.value.set(value);\n this.onChange(value);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | number | null): void {\n const raw =\n value === null || value === undefined || value === ''\n ? ''\n : String(value);\n this.buffer.set(raw);\n this.value.set(this.mode() === 'pin' ? raw : raw === '' ? null : Number(raw));\n }\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.mode();\n this.length();\n this.min();\n this.max();\n });\n\n /**\n * `pin`: reports `minlength` while the code is incomplete (empty passes —\n * compose with `Validators.required`). `quantity`/`amount`: reports\n * `min`/`max` against the bounds.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (this.mode() === 'pin') {\n if (typeof v !== 'string' || !v) return null;\n const requiredLength = this.length();\n return v.length >= requiredLength\n ? null\n : { minlength: { requiredLength, actualLength: v.length } };\n }\n if (typeof v !== 'number' || Number.isNaN(v)) return null;\n const min = this.min();\n if (min !== null && v < min) return { min: { min, actual: v } };\n const max = this.max();\n if (max !== null && v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@if (showValue()) {\n <div class=\"mk-numeric-keypad__echo\">\n @if (isPinMasked()) {\n <span class=\"mk-numeric-keypad__dots\" aria-hidden=\"true\">\n @for (filled of pinDots(); track $index) {\n <span\n class=\"mk-numeric-keypad__dot\"\n [class.mk-numeric-keypad__dot--filled]=\"filled\"\n ></span>\n }\n </span>\n } @else {\n <span class=\"mk-numeric-keypad__readout\">{{ echoText() }}</span>\n }\n </div>\n}\n\n<div\n class=\"mk-numeric-keypad__grid\"\n (keydown)=\"onGridKeydown($event)\"\n (focusout)=\"onBlur()\"\n>\n @for (key of keys(); track key.id; let i = $index) {\n <button\n #key\n type=\"button\"\n class=\"mk-numeric-keypad__key\"\n [class.mk-numeric-keypad__key--action]=\"key.action !== 'digit'\"\n [id]=\"padId + '-' + key.id\"\n [tabindex]=\"focusIndex() === i ? 0 : -1\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"keyAriaLabel(key)\"\n (focus)=\"onKeyFocus(i)\"\n (click)=\"onKeyClick(key)\"\n >\n @switch (key.action) {\n @case ('backspace') {\n <mk-icon name=\"backspace\" />\n }\n @case ('clear') {\n <span class=\"mk-numeric-keypad__key-text\">C</span>\n }\n @default {\n {{ key.label }}\n }\n }\n </button>\n }\n</div>\n","/**\n * Layout data for {@link MkOnScreenKeyboard}.\n *\n * A layout is a set of rows per layer. String entries are literal character\n * keys (lowercase base form); object entries are action keys. Shifted\n * characters come from `shiftMap` when present, else `toUpperCase()` — which\n * handles Polish diacritics for free (`ą` → `Ą`).\n */\n\n/** Non-character keys. `span` stretches the key across extra grid columns. */\nexport interface MkKeyboardActionKey {\n readonly action: 'shift' | 'backspace' | 'space' | 'enter' | 'layer';\n readonly span?: number;\n}\n\nexport type MkKeyboardKey = string | MkKeyboardActionKey;\n\nexport interface MkKeyboardLayout {\n /** Letter layer. */\n readonly base: ReadonlyArray<ReadonlyArray<MkKeyboardKey>>;\n /** Alternate layer (digits live in the base top row; this holds diacritics + symbols). */\n readonly alt: ReadonlyArray<ReadonlyArray<MkKeyboardKey>>;\n /** Overrides for shifted characters; missing keys fall back to `toUpperCase()`. */\n readonly shiftMap?: Readonly<Record<string, string>>;\n}\n\nconst SHIFT: MkKeyboardActionKey = { action: 'shift' };\nconst BACKSPACE: MkKeyboardActionKey = { action: 'backspace' };\nconst LAYER: MkKeyboardActionKey = { action: 'layer' };\nconst SPACE: MkKeyboardActionKey = { action: 'space', span: 5 };\nconst ENTER: MkKeyboardActionKey = { action: 'enter', span: 2 };\n\n/**\n * QWERTY with a Polish alternate layer (programmer-Polish convention: base\n * letters are plain QWERTY, diacritics sit on the `?ąę` layer along with the\n * common symbols).\n */\nexport const MK_KEYBOARD_LAYOUT_QWERTY_PL: MkKeyboardLayout = {\n base: [\n ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],\n ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'],\n ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'],\n [SHIFT, 'z', 'x', 'c', 'v', 'b', 'n', 'm', BACKSPACE],\n [LAYER, ',', SPACE, '.', ENTER],\n ],\n alt: [\n ['ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż'],\n ['@', '#', '%', '&', '*', '(', ')', '-', '_'],\n ['+', '=', '/', ':', ';', '!', '?', \"'\", '\"'],\n [SHIFT, '€', '$', '~', '„', '”', '…', BACKSPACE],\n [LAYER, ',', SPACE, '.', ENTER],\n ],\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n PLATFORM_ID,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { MkPlacement } from '@mk-kit/ui/core';\nimport { MK_I18N, MkAnchoredPanel, mkUniqueId } from '@mk-kit/ui/core';\nimport { MkIcon } from '@mk-kit/ui/icon';\nimport {\n MK_KEYBOARD_LAYOUT_QWERTY_PL,\n type MkKeyboardActionKey,\n type MkKeyboardKey,\n type MkKeyboardLayout,\n} from './keyboard-layouts';\n\n/** A resolved key ready for the template. */\ninterface RenderKey {\n readonly char?: string;\n readonly action?: MkKeyboardActionKey['action'];\n readonly span: number;\n}\n\nexport type MkOnScreenKeyboardTarget = HTMLInputElement | HTMLTextAreaElement;\n\n/**\n * On-screen keyboard — a touch QWERTY panel for kiosk/till screens where no\n * physical keyboard exists. Anchored below its input in the browser top layer\n * (via {@link MkAnchoredPanel}), it writes caret-aware into the target's\n * native value and dispatches `input` events, so `ngModel`/reactive forms\n * stay in sync with no extra wiring.\n *\n * Pair it with the `mkOnScreenKeyboardFor` directive, which opens the panel\n * on focus and suppresses the OS keyboard (`inputmode=\"none\"`):\n *\n * ```html\n * <input mkInput [mkOnScreenKeyboardFor]=\"kbd\" />\n * <mk-on-screen-keyboard #kbd />\n * ```\n *\n * Layers: base (letters + digit row), shift (auto-resets after one\n * character) and an alternate layer (Polish diacritics + symbols in the\n * default {@link MK_KEYBOARD_LAYOUT_QWERTY_PL}); pass `layout` for other\n * languages. Enter inserts a newline in a `<textarea>` and emits `enter`\n * for single-line inputs. Keys are excluded from the tab order — physical\n * keyboards type into the input directly, the panel is a pointer surface.\n */\n@Component({\n selector: 'mk-on-screen-keyboard',\n exportAs: 'mkOnScreenKeyboard',\n templateUrl: './on-screen-keyboard.html',\n styleUrl: './on-screen-keyboard.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel, MkIcon],\n host: {\n class: 'mk-on-screen-keyboard',\n },\n})\nexport class MkOnScreenKeyboard {\n protected readonly i18n = inject(MK_I18N);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** Stable id for `aria-controls` on the trigger. */\n readonly panelId = mkUniqueId('mk-on-screen-keyboard');\n\n /** Key layout. Defaults to QWERTY with a Polish alternate layer. */\n readonly layout = input<MkKeyboardLayout>(MK_KEYBOARD_LAYOUT_QWERTY_PL);\n /** Preferred placement relative to the input. */\n readonly placement = input<MkPlacement>('bottom-start');\n\n /** Enter pressed on a single-line input (textareas insert a newline instead). */\n readonly enter = output<void>();\n /** Emitted whenever the keyboard closes (any reason). */\n readonly closed = output<void>();\n\n private readonly _open = signal(false);\n /** Whether the panel is open. */\n readonly opened = this._open.asReadonly();\n\n protected readonly anchorEl = signal<HTMLElement | undefined>(undefined);\n protected readonly shift = signal(false);\n protected readonly layer = signal<'base' | 'alt'>('base');\n private target: MkOnScreenKeyboardTarget | null = null;\n\n protected readonly rows = computed<RenderKey[][]>(() => {\n const layout = this.layout();\n const rows = this.layer() === 'alt' ? layout.alt : layout.base;\n const shift = this.shift();\n return rows.map((row) =>\n row.map((key) => this.resolve(key, shift, layout)),\n );\n });\n\n private resolve(\n key: MkKeyboardKey,\n shift: boolean,\n layout: MkKeyboardLayout,\n ): RenderKey {\n if (typeof key !== 'string') {\n return { action: key.action, span: key.span ?? 1 };\n }\n const char = shift ? (layout.shiftMap?.[key] ?? key.toUpperCase()) : key;\n return { char, span: 1 };\n }\n\n /** Open anchored to `anchor`, typing into `target`. */\n open(anchor: HTMLElement, target: MkOnScreenKeyboardTarget): void {\n if (!this.isBrowser) return;\n this.target = target;\n if (this._open()) return;\n this.anchorEl.set(anchor);\n this._open.set(true);\n }\n\n /** Close the panel. */\n close(): void {\n if (!this._open()) return;\n this._open.set(false);\n this.anchorEl.set(undefined);\n this.target = null;\n this.shift.set(false);\n this.layer.set('base');\n this.closed.emit();\n }\n\n /** Keys must never steal focus from the input. */\n protected onPanelPointerdown(event: Event): void {\n event.preventDefault();\n }\n\n protected onKeyClick(key: RenderKey): void {\n if (key.char !== undefined) {\n this.insert(key.char);\n if (this.shift()) this.shift.set(false);\n return;\n }\n switch (key.action) {\n case 'shift':\n this.shift.update((s) => !s);\n break;\n case 'layer':\n this.layer.update((l) => (l === 'base' ? 'alt' : 'base'));\n this.shift.set(false);\n break;\n case 'space':\n this.insert(' ');\n break;\n case 'backspace':\n this.deleteBack();\n break;\n case 'enter':\n if (this.target instanceof HTMLTextAreaElement) this.insert('\\n');\n else this.enter.emit();\n break;\n }\n }\n\n protected keyLabel(key: RenderKey): string {\n switch (key.action) {\n case 'shift':\n return this.i18n.keyboardShift;\n case 'backspace':\n return this.i18n.keypadBackspace;\n case 'space':\n return this.i18n.keyboardSpace;\n case 'enter':\n return this.i18n.keyboardEnter;\n case 'layer':\n return this.layer() === 'base'\n ? this.i18n.keyboardAltLayer\n : this.i18n.keyboardBaseLayer;\n default:\n return key.char ?? '';\n }\n }\n\n /** The visible face of the layer key: `?ąę` on base, `abc` on alt. */\n protected layerFace(): string {\n return this.layer() === 'base' ? '?ąę' : 'abc';\n }\n\n private insert(text: string): void {\n const el = this.target;\n if (!el) return;\n const start = el.selectionStart ?? el.value.length;\n const end = el.selectionEnd ?? start;\n el.setRangeText(text, start, end, 'end');\n this.notify(el);\n }\n\n private deleteBack(): void {\n const el = this.target;\n if (!el) return;\n const start = el.selectionStart ?? el.value.length;\n const end = el.selectionEnd ?? start;\n if (start === end) {\n if (start === 0) return;\n el.setRangeText('', start - 1, start, 'end');\n } else {\n el.setRangeText('', start, end, 'end');\n }\n this.notify(el);\n }\n\n private notify(el: MkOnScreenKeyboardTarget): void {\n el.dispatchEvent(new Event('input', { bubbles: true }));\n }\n}\n","@if (opened()) {\n <div\n #panel\n class=\"mk-on-screen-keyboard__panel\"\n role=\"group\"\n [id]=\"panelId\"\n [attr.aria-label]=\"i18n.onScreenKeyboardLabel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"anchorEl()\"\n [placement]=\"placement()\"\n [gap]=\"8\"\n [clamp]=\"true\"\n (dismiss)=\"close()\"\n (pointerdown)=\"onPanelPointerdown($event)\"\n >\n @for (row of rows(); track $index) {\n <div class=\"mk-on-screen-keyboard__row\">\n @for (key of row; track $index) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"mk-on-screen-keyboard__key\"\n [class.mk-on-screen-keyboard__key--action]=\"key.action !== undefined\"\n [class.mk-on-screen-keyboard__key--active]=\"\n (key.action === 'shift' && shift()) ||\n (key.action === 'layer' && layer() === 'alt')\n \"\n [style.--_span]=\"key.span\"\n [attr.aria-label]=\"key.action !== undefined ? keyLabel(key) : null\"\n [attr.aria-pressed]=\"\n key.action === 'shift'\n ? shift()\n : key.action === 'layer'\n ? layer() === 'alt'\n : null\n \"\n (click)=\"onKeyClick(key)\"\n >\n @switch (key.action) {\n @case ('shift') {\n <mk-icon name=\"arrow-up\" />\n }\n @case ('backspace') {\n <mk-icon name=\"backspace\" />\n }\n @case ('enter') {\n <mk-icon name=\"corner-down-left\" />\n }\n @case ('space') {\n <span class=\"mk-on-screen-keyboard__space-bar\"></span>\n }\n @case ('layer') {\n {{ layerFace() }}\n }\n @default {\n {{ key.char }}\n }\n }\n </button>\n }\n </div>\n }\n </div>\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport type { MkOnScreenKeyboardTarget } from './on-screen-keyboard';\nimport { MkOnScreenKeyboard } from './on-screen-keyboard';\n\n/**\n * Binds an `<input>`/`<textarea>` to an {@link MkOnScreenKeyboard}: opens the\n * panel on focus/click, closes it when focus leaves, and sets\n * `inputmode=\"none\"` so touch devices don't raise the OS keyboard on top of\n * it. Disabled/readonly fields never open the panel.\n *\n * ```html\n * <input mkInput [mkOnScreenKeyboardFor]=\"kbd\" />\n * <mk-on-screen-keyboard #kbd />\n * ```\n */\n@Directive({\n selector: 'input[mkOnScreenKeyboardFor], textarea[mkOnScreenKeyboardFor]',\n exportAs: 'mkOnScreenKeyboardTrigger',\n // No aria-expanded: a plain textbox doesn't permit it (axe aria-allowed-attr)\n // and promoting the role to combobox would misdescribe the field.\n host: {\n inputmode: 'none',\n '[attr.aria-controls]': 'keyboard().opened() ? keyboard().panelId : null',\n 'aria-haspopup': 'true',\n '(focus)': 'open()',\n '(click)': 'open()',\n '(blur)': 'onBlur()',\n '(keydown.escape)': 'keyboard().close()',\n },\n})\nexport class MkOnScreenKeyboardTrigger {\n private readonly host = inject<ElementRef<MkOnScreenKeyboardTarget>>(ElementRef);\n\n /** The keyboard instance to open for this field. */\n readonly keyboard = input.required<MkOnScreenKeyboard>({\n alias: 'mkOnScreenKeyboardFor',\n });\n\n protected open(): void {\n const el = this.host.nativeElement;\n if (el.disabled || el.readOnly) return;\n this.keyboard().open(el, el);\n }\n\n /**\n * Panel keys `preventDefault()` their pointerdown, so the input only blurs\n * when focus genuinely moves elsewhere — close then.\n */\n protected onBlur(): void {\n this.keyboard().close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n untracked,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * OTP — a segmented one-time-code input: N single-character boxes with automatic\n * focus advance, Backspace-to-previous, Arrow navigation and full-code paste.\n * `ControlValueAccessor` + two-way `value` model over the concatenated string.\n *\n * ```html\n * <mk-otp [(value)]=\"code\" [length]=\"6\" />\n * ```\n */\n@Component({\n selector: 'mk-otp',\n templateUrl: './otp.html',\n styleUrl: './otp.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-otp',\n role: 'group',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[class.mk-otp--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-otp--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-otp--invalid]': 'isInvalid()',\n '[class.mk-otp--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkOtp),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkOtp),\n multi: true,\n },\n ],\n})\nexport class MkOtp implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly cells =\n viewChildren<ElementRef<HTMLInputElement>>('cell');\n\n /** Number of character boxes. */\n readonly length = input(6, { transform: numberAttribute });\n /** Restrict input to digits (`number`) or allow any char (`text`). */\n readonly type = input<'number' | 'text'>('number');\n /** Mask entered characters (password style). */\n readonly mask = input(false, { transform: booleanAttribute });\n /** Two-way concatenated value. */\n readonly value = model('');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Accessible label for the group. */\n readonly ariaLabel = input(this.i18n.oneTimeCode);\n\n readonly cellId = mkUniqueId('mk-otp');\n private readonly chars = signal<string[]>([]);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly indexes = computed(() =>\n Array.from({ length: this.length() }, (_, i) => i),\n );\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n /** Required state from the surrounding field (`aria-required` on the cells). */\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n /** Hint/error ids from the surrounding field (`aria-describedby` on the cells). */\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly inputMode = computed(() =>\n this.type() === 'number' ? 'numeric' : 'text',\n );\n\n /**\n * Cell ids. The first cell adopts the surrounding field's `controlId` so the\n * field's `<label for>` resolves to a real element.\n */\n protected cellIdFor(i: number): string {\n if (i === 0 && this.field) return this.field.controlId;\n return `${this.cellId}-${i}`;\n }\n\n constructor() {\n // Keep the boxes in sync with external value / length changes.\n effect(() => {\n const v = this.value();\n const len = this.length();\n if (\n v !== untracked(this.chars).join('') ||\n untracked(this.chars).length !== len\n ) {\n this.chars.set(this.split(v, len));\n }\n });\n }\n\n protected charAt(i: number): string {\n return this.chars()[i] ?? '';\n }\n\n protected onCellInput(i: number, event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = this.sanitize(input.value);\n if (raw.length > 1) {\n this.fillFrom(i, raw);\n return;\n }\n const arr = [...this.chars()];\n arr[i] = raw;\n input.value = raw; // keep the box showing a single char\n this.commit(arr);\n if (raw) this.focusCell(i + 1);\n }\n\n protected onCellKeydown(i: number, event: KeyboardEvent): void {\n const key = event.key;\n if (key === 'Backspace') {\n if (!this.charAt(i)) {\n event.preventDefault();\n const arr = [...this.chars()];\n if (i > 0) arr[i - 1] = '';\n this.commit(arr);\n this.focusCell(i - 1);\n }\n } else if (key === 'ArrowLeft') {\n event.preventDefault();\n this.focusCell(i - 1);\n } else if (key === 'ArrowRight') {\n event.preventDefault();\n this.focusCell(i + 1);\n }\n }\n\n protected onPaste(i: number, event: ClipboardEvent): void {\n event.preventDefault();\n const text = this.sanitize(event.clipboardData?.getData('text') ?? '');\n if (text) this.fillFrom(i, text);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private fillFrom(start: number, text: string): void {\n const arr = [...this.chars()];\n let i = start;\n for (const ch of text) {\n if (i >= this.length()) break;\n arr[i++] = ch;\n }\n this.commit(arr);\n this.focusCell(Math.min(i, this.length() - 1));\n }\n\n private commit(arr: string[]): void {\n this.chars.set(arr);\n const value = arr.join('');\n this.value.set(value);\n this.onChange(value);\n }\n\n private focusCell(i: number): void {\n const cell = this.cells()[Math.max(0, Math.min(this.length() - 1, i))];\n cell?.nativeElement.focus();\n cell?.nativeElement.select();\n }\n\n private sanitize(text: string): string {\n const trimmed = text.trim();\n return this.type() === 'number' ? trimmed.replace(/\\D/g, '') : trimmed;\n }\n\n private split(v: string, len: number): string[] {\n const arr = new Array(len).fill('');\n for (let i = 0; i < Math.min(len, v.length); i++) arr[i] = v[i];\n return arr;\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n const v = value ?? '';\n this.value.set(v);\n // Seed the cells synchronously (don't wait for the sync effect).\n this.chars.set(this.split(v, this.length()));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.length();\n });\n\n /**\n * Reports `minlength` for a partially entered code. An empty value passes;\n * compose with `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'string' || !v) return null;\n const requiredLength = this.length();\n if (v.length >= requiredLength) return null;\n return { minlength: { requiredLength, actualLength: v.length } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@for (i of indexes(); track i) {\n <input\n #cell\n class=\"mk-otp__cell\"\n [id]=\"cellIdFor(i)\"\n [type]=\"mask() ? 'password' : 'text'\"\n [attr.inputmode]=\"inputMode()\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [value]=\"charAt(i)\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"i18n.otpDigit(i + 1)\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onCellInput(i, $event)\"\n (keydown)=\"onCellKeydown(i, $event)\"\n (paste)=\"onPaste(i, $event)\"\n (blur)=\"onBlur()\"\n />\n}\n","/**\n * Per-country dialing metadata for {@link MkPhoneInput}.\n *\n * `mask` is an `mkApplyMask`-style pattern for the **national** number\n * (`0` = digit, everything else is a literal). Masks follow the most common\n * national formatting; countries with several plan lengths use their longest\n * common mobile format. The set covers the countries an admin product is\n * likely to meet — extend or replace it via the `countries` input.\n */\nexport interface MkPhoneCountry {\n /** ISO 3166-1 alpha-2 code, uppercase (drives the flag + display name). */\n code: string;\n /** International dialing code, digits only (no `+`). */\n dialCode: string;\n /** Mask for the national number, `0` = digit. */\n mask: string;\n}\n\n/** The built-in country set (alphabetical by ISO code). */\nexport const MK_PHONE_COUNTRIES: readonly MkPhoneCountry[] = [\n { code: 'AE', dialCode: '971', mask: '00 000 0000' },\n { code: 'AR', dialCode: '54', mask: '00 0000-0000' },\n { code: 'AT', dialCode: '43', mask: '000 000000' },\n { code: 'AU', dialCode: '61', mask: '000 000 000' },\n { code: 'BE', dialCode: '32', mask: '000 00 00 00' },\n { code: 'BG', dialCode: '359', mask: '00 000 0000' },\n { code: 'BR', dialCode: '55', mask: '(00) 00000-0000' },\n { code: 'CA', dialCode: '1', mask: '(000) 000-0000' },\n { code: 'CH', dialCode: '41', mask: '00 000 00 00' },\n { code: 'CL', dialCode: '56', mask: '0 0000 0000' },\n { code: 'CN', dialCode: '86', mask: '000 0000 0000' },\n { code: 'CO', dialCode: '57', mask: '000 000 0000' },\n { code: 'CZ', dialCode: '420', mask: '000 000 000' },\n { code: 'DE', dialCode: '49', mask: '0000 0000000' },\n { code: 'DK', dialCode: '45', mask: '00 00 00 00' },\n { code: 'EE', dialCode: '372', mask: '0000 0000' },\n { code: 'EG', dialCode: '20', mask: '00 0000 0000' },\n { code: 'ES', dialCode: '34', mask: '000 000 000' },\n { code: 'FI', dialCode: '358', mask: '00 000 0000' },\n { code: 'FR', dialCode: '33', mask: '0 00 00 00 00' },\n { code: 'GB', dialCode: '44', mask: '0000 000000' },\n { code: 'GR', dialCode: '30', mask: '000 000 0000' },\n { code: 'HK', dialCode: '852', mask: '0000 0000' },\n { code: 'HR', dialCode: '385', mask: '00 000 0000' },\n { code: 'HU', dialCode: '36', mask: '00 000 0000' },\n { code: 'ID', dialCode: '62', mask: '000-0000-0000' },\n { code: 'IE', dialCode: '353', mask: '00 000 0000' },\n { code: 'IL', dialCode: '972', mask: '00-000-0000' },\n { code: 'IN', dialCode: '91', mask: '00000 00000' },\n { code: 'IT', dialCode: '39', mask: '000 000 0000' },\n { code: 'JP', dialCode: '81', mask: '00-0000-0000' },\n { code: 'KR', dialCode: '82', mask: '00-0000-0000' },\n { code: 'LT', dialCode: '370', mask: '000 00000' },\n { code: 'LU', dialCode: '352', mask: '000 000 000' },\n { code: 'LV', dialCode: '371', mask: '00 000 000' },\n { code: 'MX', dialCode: '52', mask: '00 0000 0000' },\n { code: 'MY', dialCode: '60', mask: '00-000 0000' },\n { code: 'NG', dialCode: '234', mask: '000 000 0000' },\n { code: 'NL', dialCode: '31', mask: '0 00000000' },\n { code: 'NO', dialCode: '47', mask: '000 00 000' },\n { code: 'NZ', dialCode: '64', mask: '00 000 0000' },\n { code: 'PH', dialCode: '63', mask: '000 000 0000' },\n { code: 'PK', dialCode: '92', mask: '000 0000000' },\n { code: 'PL', dialCode: '48', mask: '000 000 000' },\n { code: 'PT', dialCode: '351', mask: '000 000 000' },\n { code: 'RO', dialCode: '40', mask: '000 000 000' },\n { code: 'RS', dialCode: '381', mask: '00 000 0000' },\n { code: 'SA', dialCode: '966', mask: '00 000 0000' },\n { code: 'SE', dialCode: '46', mask: '00-000 00 00' },\n { code: 'SG', dialCode: '65', mask: '0000 0000' },\n { code: 'SI', dialCode: '386', mask: '00 000 000' },\n { code: 'SK', dialCode: '421', mask: '000 000 000' },\n { code: 'TH', dialCode: '66', mask: '00 000 0000' },\n { code: 'TR', dialCode: '90', mask: '000 000 0000' },\n { code: 'TW', dialCode: '886', mask: '000 000 000' },\n { code: 'UA', dialCode: '380', mask: '00 000 0000' },\n { code: 'US', dialCode: '1', mask: '(000) 000-0000' },\n { code: 'VN', dialCode: '84', mask: '000 000 0000' },\n { code: 'ZA', dialCode: '27', mask: '00 000 0000' },\n];\n\n/** Regional-indicator flag emoji for an ISO 3166-1 alpha-2 code. */\nexport function mkCountryFlag(code: string): string {\n if (!/^[A-Za-z]{2}$/.test(code)) return '';\n const A = 0x1f1e6;\n const upper = code.toUpperCase();\n return String.fromCodePoint(\n A + upper.charCodeAt(0) - 65,\n A + upper.charCodeAt(1) - 65,\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, MkAnchoredPanel, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkMask, mkApplyMask } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport {\n MK_PHONE_COUNTRIES,\n MkPhoneCountry,\n mkCountryFlag,\n} from './phone-countries';\n\n/** Structured value emitted by {@link MkPhoneInput} in `parts` mode. */\nexport interface MkPhoneValue {\n /** ISO 3166-1 alpha-2 country code, e.g. `PL`. */\n country: string;\n /** Dialing prefix with the leading `+`, e.g. `+48`. */\n dialCode: string;\n /** National number, digits only. */\n national: string;\n /** The full E.164 number, e.g. `+48601234567`. */\n e164: string;\n}\n\n/** A country row prepared for the dropdown list. */\ninterface CountryOption {\n country: MkPhoneCountry;\n name: string;\n flag: string;\n}\n\n/**\n * PhoneInput — an international telephone field: a searchable country-prefix\n * dropdown (flag + dial code) next to a national-number input that formats\n * itself with the selected country's mask as the user types.\n *\n * The form value is either a single E.164 string (`\"+48601234567\"`, default)\n * or a structured object (`valueFormat=\"parts\"`) carrying the country, dial\n * code and national number separately; both modes read back either shape and\n * `null` when empty. Pasting a full international number (`+44…`) into the\n * number field switches the country automatically.\n *\n * Implements `ControlValueAccessor` and exposes two-way `value` and `country`\n * models, so `[(ngModel)]`, reactive forms, `[(value)]` and `[(country)]` all\n * work.\n *\n * ```html\n * <mk-phone-input [(ngModel)]=\"phone\" country=\"PL\" />\n * <mk-phone-input valueFormat=\"parts\" [preferredCountries]=\"['PL','DE','CZ']\"\n * [(value)]=\"phoneParts\" />\n * ```\n */\n@Component({\n selector: 'mk-phone-input',\n templateUrl: './phone-input.html',\n styleUrl: './phone-input.scss',\n exportAs: 'mkPhoneInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel, MkMask],\n host: {\n class: 'mk-phone-input',\n '[class.mk-phone-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-phone-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-phone-input--invalid]': 'isInvalid()',\n '[class.mk-phone-input--disabled]': 'isDisabled()',\n '[class.mk-phone-input--open]': 'open()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkPhoneInput),\n multi: true,\n },\n ],\n})\nexport class MkPhoneInput implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly searchRef = viewChild<ElementRef<HTMLInputElement>>('search');\n private readonly nationalRef =\n viewChild<ElementRef<HTMLInputElement>>('national');\n\n /** The selectable country set (defaults to the built-in list). */\n readonly countries = input<readonly MkPhoneCountry[]>(MK_PHONE_COUNTRIES);\n /** ISO codes pinned, in order, to the top of the dropdown. */\n readonly preferredCountries = input<readonly string[]>([]);\n /** Shape of the form value: an E.164 string or a structured object. */\n readonly valueFormat = input<'e164' | 'parts'>('e164');\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder for the national-number field. */\n readonly placeholder = input<string>('');\n /** Two-way selected ISO country code. */\n readonly country = model<string>('US');\n /** Two-way form value (`string` in `e164` mode, {@link MkPhoneValue} in `parts`). */\n readonly value = model<string | MkPhoneValue | null>(null);\n\n protected readonly open = signal(false);\n protected readonly query = signal('');\n protected readonly activeIndex = signal(-1);\n private readonly nationalDigits = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string | MkPhoneValue | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** The last value this component itself wrote into the `value` model. */\n private lastDerived: string | MkPhoneValue | null = null;\n private lastCountry = '';\n\n readonly listId = mkUniqueId('mk-phone-list');\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-phone');\n readonly searchId = `${this.inputId}-search`;\n\n private readonly displayNames = (() => {\n try {\n return new Intl.DisplayNames(undefined, { type: 'region' });\n } catch {\n return null;\n }\n })();\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(\n () => this.field?.labelId ?? null,\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The currently selected country (falls back to the first in the set). */\n protected readonly selectedCountry = computed<MkPhoneCountry>(() => {\n const code = this.country().toUpperCase();\n const list = this.countries();\n return list.find((c) => c.code === code) ?? list[0];\n });\n protected readonly selectedFlag = computed(() =>\n mkCountryFlag(this.selectedCountry().code),\n );\n protected readonly selectedName = computed(() =>\n this.countryName(this.selectedCountry().code),\n );\n\n /** Masked national number shown in the field. */\n protected readonly nationalMasked = computed(\n () => mkApplyMask(this.nationalDigits(), this.selectedCountry().mask).masked,\n );\n\n /** Countries sorted preferred-first, then A→Z by localised name. */\n private readonly sortedCountries = computed<CountryOption[]>(() => {\n const preferred = this.preferredCountries().map((c) => c.toUpperCase());\n const rank = (code: string) => {\n const i = preferred.indexOf(code);\n return i === -1 ? preferred.length : i;\n };\n return this.countries()\n .map((country) => ({\n country,\n name: this.countryName(country.code),\n flag: mkCountryFlag(country.code),\n }))\n .sort(\n (a, b) =>\n rank(a.country.code) - rank(b.country.code) ||\n a.name.localeCompare(b.name),\n );\n });\n\n /** Dropdown rows matching the search query. */\n protected readonly filtered = computed<CountryOption[]>(() => {\n const q = this.query().trim().toLowerCase();\n const all = this.sortedCountries();\n if (!q) return all;\n const digits = q.replace(/^\\+/, '');\n return all.filter(\n (o) =>\n o.name.toLowerCase().includes(q) ||\n o.country.code.toLowerCase() === q ||\n (/^\\d+$/.test(digits) && o.country.dialCode.startsWith(digits)),\n );\n });\n\n constructor() {\n // Parse values assigned from outside ([(value)] writes we didn't derive).\n effect(() => {\n const v = this.value();\n if (v === this.lastDerived) return;\n untracked(() => {\n this.applyExternalValue(v);\n this.deriveValue(false);\n });\n });\n // Re-derive when the country is changed from outside ([country]=\"…\").\n effect(() => {\n const c = this.country();\n if (c === this.lastCountry) return;\n untracked(() => {\n this.lastCountry = c;\n this.deriveValue(false);\n });\n });\n }\n\n /** Localised display name for an ISO country code. */\n protected countryName(code: string): string {\n try {\n return this.displayNames?.of(code) ?? code;\n } catch {\n return code;\n }\n }\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n // --- National number field ------------------------------------------------\n\n protected onNationalChange(unmasked: string): void {\n this.nationalDigits.set(unmasked);\n this.deriveValue(true);\n }\n\n /** Pasting a full `+…` number switches country + fills the national part. */\n protected onNationalPaste(event: ClipboardEvent): void {\n const text = event.clipboardData?.getData('text') ?? '';\n if (!text.trim().startsWith('+')) return;\n event.preventDefault();\n this.applyE164(text);\n this.deriveValue(true);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n // --- Country dropdown -----------------------------------------------------\n\n /** Pending focus-the-search-box timeout; cleared on re-open and destroy. */\n private searchFocusTimer?: ReturnType<typeof setTimeout>;\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openList();\n }\n\n private openList(): void {\n this.open.set(true);\n this.query.set('');\n const list = this.filtered();\n const selected = list.findIndex(\n (o) => o.country.code === this.selectedCountry().code,\n );\n this.activeIndex.set(selected >= 0 ? selected : 0);\n // The panel renders on the next change-detection pass.\n clearTimeout(this.searchFocusTimer);\n this.searchFocusTimer = setTimeout(() =>\n this.searchRef()?.nativeElement.focus(),\n );\n }\n\n protected close(refocusTrigger = false): void {\n if (!this.open()) return;\n this.open.set(false);\n this.activeIndex.set(-1);\n this.onTouched();\n if (refocusTrigger) this.triggerRef()?.nativeElement.focus();\n }\n\n protected onTriggerKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(e.key) && !this.open()) {\n e.preventDefault();\n this.openList();\n }\n }\n\n protected onSearch(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n this.activeIndex.set(this.filtered().length ? 0 : -1);\n }\n\n protected onSearchKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n const count = this.filtered().length;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (count) this.activeIndex.set((this.activeIndex() + 1) % count);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (count)\n this.activeIndex.set((this.activeIndex() - 1 + count) % count);\n break;\n case 'Home':\n e.preventDefault();\n if (count) this.activeIndex.set(0);\n break;\n case 'End':\n e.preventDefault();\n if (count) this.activeIndex.set(count - 1);\n break;\n case 'Enter':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.selectCountry(this.activeIndex());\n break;\n case 'Escape':\n e.preventDefault();\n this.close(true);\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected selectCountry(index: number): void {\n const option = this.filtered()[index];\n if (!option) return;\n this.lastCountry = option.country.code;\n this.country.set(option.country.code);\n this.deriveValue(true);\n this.close();\n this.nationalRef()?.nativeElement.focus();\n }\n\n // --- Value plumbing -------------------------------------------------------\n\n /** Compute the outward value and push it to the model (+ form when `emit`). */\n private deriveValue(emit: boolean): void {\n const digits = this.nationalDigits();\n let next: string | MkPhoneValue | null = null;\n if (digits) {\n const c = this.selectedCountry();\n const e164 = `+${c.dialCode}${digits}`;\n next =\n this.valueFormat() === 'parts'\n ? {\n country: c.code,\n dialCode: `+${c.dialCode}`,\n national: digits,\n e164,\n }\n : e164;\n }\n if (this.sameValue(next, this.lastDerived) && this.value() === this.lastDerived) {\n return;\n }\n this.lastDerived = next;\n this.value.set(next);\n if (emit) this.onChange(next);\n }\n\n private sameValue(\n a: string | MkPhoneValue | null,\n b: string | MkPhoneValue | null,\n ): boolean {\n if (a === b) return true;\n if (!a || !b || typeof a === 'string' || typeof b === 'string') return false;\n return a.country === b.country && a.national === b.national;\n }\n\n /** Interpret an externally-assigned value (writeValue or `[value]`). */\n private applyExternalValue(v: string | MkPhoneValue | null): void {\n if (v == null || v === '') {\n this.nationalDigits.set('');\n return;\n }\n if (typeof v === 'string') {\n if (v.trim().startsWith('+')) this.applyE164(v);\n else this.nationalDigits.set(v.replace(/\\D/g, ''));\n return;\n }\n if (v.country) {\n this.lastCountry = v.country.toUpperCase();\n this.country.set(this.lastCountry);\n }\n this.nationalDigits.set((v.national ?? '').replace(/\\D/g, ''));\n }\n\n /** Split an E.164-ish string into a country + national digits. */\n private applyE164(text: string): void {\n const digits = text.replace(/\\D/g, '');\n if (!digits) {\n this.nationalDigits.set('');\n return;\n }\n const matches = this.countries().filter((c) =>\n digits.startsWith(c.dialCode),\n );\n if (matches.length) {\n const longest = Math.max(...matches.map((c) => c.dialCode.length));\n const best =\n matches.find(\n (c) =>\n c.dialCode.length === longest &&\n c.code === this.selectedCountry().code,\n ) ?? matches.find((c) => c.dialCode.length === longest)!;\n this.lastCountry = best.code;\n this.country.set(best.code);\n this.nationalDigits.set(digits.slice(best.dialCode.length));\n } else {\n this.nationalDigits.set(digits);\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | MkPhoneValue | null): void {\n this.applyExternalValue(value);\n this.deriveValue(false);\n }\n registerOnChange(fn: (value: string | MkPhoneValue | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.searchFocusTimer);\n this.searchFocusTimer = undefined;\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"mk-phone-input__country\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? listId : null\"\n [attr.aria-label]=\"i18n.chooseCountry\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span class=\"mk-phone-input__flag\" aria-hidden=\"true\">{{\n selectedFlag()\n }}</span>\n <span class=\"mk-phone-input__dial\">+{{ selectedCountry().dialCode }}</span>\n <span class=\"mk-visually-hidden\">{{ selectedName() }}</span>\n <span class=\"mk-phone-input__arrow\" aria-hidden=\"true\"></span>\n</button>\n\n<input\n #national\n type=\"tel\"\n class=\"mk-phone-input__field\"\n [id]=\"inputId\"\n autocomplete=\"tel-national\"\n [mkMask]=\"selectedCountry().mask\"\n mkMaskInputmode=\"tel\"\n [value]=\"nationalMasked()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.phoneNumber\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (unmaskedChange)=\"onNationalChange($event)\"\n (paste)=\"onNationalPaste($event)\"\n (blur)=\"onBlur()\"\n/>\n\n@if (open()) {\n <div\n class=\"mk-phone-input__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"trigger\"\n (dismiss)=\"close()\"\n >\n <input\n #search\n type=\"text\"\n class=\"mk-phone-input__search\"\n [id]=\"searchId\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"true\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [placeholder]=\"i18n.searchCountries\"\n [value]=\"query()\"\n (input)=\"onSearch($event)\"\n (keydown)=\"onSearchKeydown($event)\"\n />\n <ul\n class=\"mk-phone-input__list\"\n [id]=\"listId\"\n role=\"listbox\"\n [attr.aria-label]=\"i18n.chooseCountry\"\n >\n @for (opt of filtered(); track opt.country.code; let i = $index) {\n <li\n class=\"mk-phone-input__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"opt.country.code === selectedCountry().code\"\n [class.mk-phone-input__option--active]=\"i === activeIndex()\"\n [class.mk-phone-input__option--selected]=\"\n opt.country.code === selectedCountry().code\n \"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"activeIndex.set(i)\"\n (click)=\"selectCountry(i)\"\n >\n <span class=\"mk-phone-input__flag\" aria-hidden=\"true\">{{\n opt.flag\n }}</span>\n <span class=\"mk-phone-input__option-name\">{{ opt.name }}</span>\n <span class=\"mk-phone-input__option-dial\"\n >+{{ opt.country.dialCode }}</span\n >\n </li>\n } @empty {\n <li class=\"mk-phone-input__empty\" role=\"presentation\">\n {{ i18n.noResults }}\n </li>\n }\n </ul>\n </div>\n}\n","/**\n * Per-country postal-code formats for {@link MkPostalCodeInput}.\n *\n * `mask` is an `mkApplyMask`-style pattern (`0` = digit, `A` = letter,\n * `*` = alphanumeric, everything else a literal). `pattern` validates the\n * complete formatted value. Countries whose codes vary too much for a fixed\n * mask (e.g. GB) omit `mask` and rely on `pattern` + uppercasing alone.\n */\nexport interface MkPostalFormat {\n /** ISO 3166-1 alpha-2 code, uppercase. */\n code: string;\n /** Input mask; omitted for free-form (variable-length) codes. */\n mask?: string;\n /** Regex the complete formatted value must match to be valid. */\n pattern: RegExp;\n /** Example of a valid code, used as the default placeholder. */\n example: string;\n}\n\n/** The built-in postal formats (alphabetical by ISO code). */\nexport const MK_POSTAL_FORMATS: readonly MkPostalFormat[] = [\n { code: 'AT', mask: '0000', pattern: /^\\d{4}$/, example: '1010' },\n { code: 'AU', mask: '0000', pattern: /^\\d{4}$/, example: '2000' },\n { code: 'BE', mask: '0000', pattern: /^\\d{4}$/, example: '1000' },\n { code: 'BR', mask: '00000-000', pattern: /^\\d{5}-\\d{3}$/, example: '01310-100' },\n { code: 'CA', mask: 'A0A 0A0', pattern: /^[A-Z]\\d[A-Z] \\d[A-Z]\\d$/, example: 'K1A 0B1' },\n { code: 'CH', mask: '0000', pattern: /^\\d{4}$/, example: '8001' },\n { code: 'CZ', mask: '000 00', pattern: /^\\d{3} \\d{2}$/, example: '110 00' },\n { code: 'DE', mask: '00000', pattern: /^\\d{5}$/, example: '10115' },\n { code: 'DK', mask: '0000', pattern: /^\\d{4}$/, example: '1050' },\n { code: 'EE', mask: '00000', pattern: /^\\d{5}$/, example: '10111' },\n { code: 'ES', mask: '00000', pattern: /^\\d{5}$/, example: '28001' },\n { code: 'FI', mask: '00000', pattern: /^\\d{5}$/, example: '00100' },\n { code: 'FR', mask: '00000', pattern: /^\\d{5}$/, example: '75001' },\n {\n code: 'GB',\n pattern: /^[A-Z]{1,2}\\d[A-Z\\d]? \\d[A-Z]{2}$/,\n example: 'SW1A 1AA',\n },\n { code: 'GR', mask: '000 00', pattern: /^\\d{3} \\d{2}$/, example: '105 57' },\n { code: 'HR', mask: '00000', pattern: /^\\d{5}$/, example: '10000' },\n { code: 'HU', mask: '0000', pattern: /^\\d{4}$/, example: '1051' },\n {\n code: 'IE',\n mask: 'A00 ****',\n pattern: /^[A-Z]\\d{2} [A-Z\\d]{4}$/,\n example: 'D02 X285',\n },\n { code: 'IN', mask: '000000', pattern: /^\\d{6}$/, example: '110001' },\n { code: 'IT', mask: '00000', pattern: /^\\d{5}$/, example: '00184' },\n { code: 'JP', mask: '000-0000', pattern: /^\\d{3}-\\d{4}$/, example: '100-0001' },\n { code: 'LT', mask: '00000', pattern: /^\\d{5}$/, example: '01100' },\n { code: 'LU', mask: '0000', pattern: /^\\d{4}$/, example: '1111' },\n { code: 'LV', mask: '0000', pattern: /^\\d{4}$/, example: '1010' },\n { code: 'MX', mask: '00000', pattern: /^\\d{5}$/, example: '06000' },\n {\n code: 'NL',\n mask: '0000 AA',\n pattern: /^\\d{4} [A-Z]{2}$/,\n example: '1012 AB',\n },\n { code: 'NO', mask: '0000', pattern: /^\\d{4}$/, example: '0150' },\n { code: 'NZ', mask: '0000', pattern: /^\\d{4}$/, example: '6011' },\n { code: 'PL', mask: '00-000', pattern: /^\\d{2}-\\d{3}$/, example: '00-950' },\n {\n code: 'PT',\n mask: '0000-000',\n pattern: /^\\d{4}-\\d{3}$/,\n example: '1100-048',\n },\n { code: 'RO', mask: '000000', pattern: /^\\d{6}$/, example: '010011' },\n { code: 'SE', mask: '000 00', pattern: /^\\d{3} \\d{2}$/, example: '111 29' },\n { code: 'SI', mask: '0000', pattern: /^\\d{4}$/, example: '1000' },\n { code: 'SK', mask: '000 00', pattern: /^\\d{3} \\d{2}$/, example: '811 01' },\n {\n code: 'US',\n mask: '00000-0000',\n pattern: /^\\d{5}(-\\d{4})?$/,\n example: '90210',\n },\n];\n\n/** Look up the built-in format for an ISO country code (case-insensitive). */\nexport function mkPostalFormat(code: string): MkPostalFormat | undefined {\n const upper = code.toUpperCase();\n return MK_POSTAL_FORMATS.find((f) => f.code === upper);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n ValidatorFn,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { mkApplyMask, mkMaskCaret } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport {\n MK_POSTAL_FORMATS,\n MkPostalFormat,\n mkPostalFormat,\n} from './postal-formats';\n\n/**\n * Reactive-forms validator for a postal code in a given country. Empty values\n * pass (compose with `Validators.required`); countries without a built-in\n * format pass everything.\n *\n * ```ts\n * zip: ['', [Validators.required, mkPostalCodeValidator('PL')]]\n * ```\n */\nexport function mkPostalCodeValidator(\n country: string,\n formats: readonly MkPostalFormat[] = MK_POSTAL_FORMATS,\n): ValidatorFn {\n const upper = country.toUpperCase();\n const format = formats.find((f) => f.code === upper);\n return (control: AbstractControl): ValidationErrors | null => {\n const value = typeof control.value === 'string' ? control.value.trim() : '';\n if (!value || !format || format.pattern.test(value)) return null;\n return {\n postalCode: { country: upper, example: format.example },\n };\n };\n}\n\n/**\n * PostalCodeInput — a postal/ZIP code field that masks, uppercases and\n * validates itself for the given `country` (35+ built-in formats: `PL`\n * `00-000`, `US` `00000[-0000]`, `CA` `A0A 0A0`, `NL` `0000 AA`, …).\n * Free-format countries (e.g. `GB`) skip the mask and validate against the\n * national pattern instead, normalising the inward-code space on blur.\n *\n * The placeholder defaults to a valid example for the country. `valid()`\n * (via `exportAs`) reports `true`/`false` for a complete/incomplete code and\n * `null` when empty or the country is unknown; invalid styling engages after\n * the field is touched.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-postal-code-input country=\"PL\" [(ngModel)]=\"zip\" />\n * <mk-postal-code-input [country]=\"form.value.country\" [(value)]=\"zip\" />\n * ```\n */\n@Component({\n selector: 'mk-postal-code-input',\n templateUrl: './postal-code-input.html',\n styleUrl: './postal-code-input.scss',\n exportAs: 'mkPostalCodeInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-postal-code-input',\n '[class.mk-postal-code-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-postal-code-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-postal-code-input--invalid]': 'isInvalid()',\n '[class.mk-postal-code-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkPostalCodeInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkPostalCodeInput),\n multi: true,\n },\n ],\n})\nexport class MkPostalCodeInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** ISO 3166-1 alpha-2 country whose format applies. */\n readonly country = input<string>('US');\n /** The format table (defaults to the built-in set) — extend to add countries. */\n readonly formats = input<readonly MkPostalFormat[]>(MK_POSTAL_FORMATS);\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder; defaults to a valid example for the country. */\n readonly placeholder = input<string>('');\n /** Two-way formatted value (e.g. `00-950`, `K1A 0B1`). */\n readonly value = model<string>('');\n\n private readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-postal');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The active format, or `undefined` for unknown countries (free text). */\n protected readonly format = computed<MkPostalFormat | undefined>(() => {\n const code = this.country().toUpperCase();\n return this.formats().find((f) => f.code === code) ?? mkPostalFormat(code);\n });\n\n /**\n * `true`/`false` for a complete/incomplete code, `null` when empty or the\n * country has no known format.\n */\n readonly valid = computed<boolean | null>(() => {\n const v = this.value().trim();\n const fmt = this.format();\n if (!v || !fmt) return null;\n return fmt.pattern.test(v);\n });\n\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.touched() && this.valid() === false),\n );\n\n protected readonly effectivePlaceholder = computed(\n () => this.placeholder() || (this.format()?.example ?? ''),\n );\n\n /** Numeric keyboard for digit-only masks. */\n protected readonly inputMode = computed(() => {\n const mask = this.format()?.mask;\n return mask && !/[A*]/.test(mask) ? 'numeric' : 'text';\n });\n\n protected readonly maxLength = computed(() => {\n const fmt = this.format();\n if (fmt?.mask) return fmt.mask.length;\n return fmt ? fmt.example.length + 2 : 12;\n });\n\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const rawValue = el.value;\n const caret = el.selectionStart ?? rawValue.length;\n const upper = rawValue.toUpperCase();\n const mask = this.format()?.mask;\n\n let next = upper;\n if (mask) {\n next = mkApplyMask(upper, mask).masked;\n el.value = next;\n const pos = mkMaskCaret(rawValue, caret, next);\n el.setSelectionRange(pos, pos);\n } else if (next !== rawValue) {\n // Uppercasing preserves length, so the caret can stay where it was.\n el.value = next;\n el.setSelectionRange(caret, caret);\n }\n this.commit(next);\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n const fmt = this.format();\n const v = this.value();\n // Free-format codes (GB, …): insert the missing space before the final\n // 3-character inward part, so \"SW1A1AA\" normalises to \"SW1A 1AA\".\n if (fmt && !fmt.mask && v && !v.includes(' ') && v.length >= 5) {\n const spaced = `${v.slice(0, -3)} ${v.slice(-3)}`;\n if (fmt.pattern.test(spaced)) this.commit(spaced);\n }\n this.onTouched();\n }\n\n private commit(next: string): void {\n if (next === this.value()) return;\n this.value.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n const text = (value ?? '').toUpperCase();\n const mask = this.format()?.mask;\n this.value.set(mask ? mkApplyMask(text, mask).masked : text);\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.country();\n this.formats();\n });\n\n /**\n * Reports `postalCode` for a code not matching `[country]`'s format — the\n * same error `mkPostalCodeValidator()` produces. Empty values and countries\n * without a built-in format pass.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const raw = control.value;\n const v = typeof raw === 'string' ? raw.trim() : '';\n const format = this.format();\n if (!v || !format || format.pattern.test(v)) return null;\n return { postalCode: { country: format.code, example: format.example } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<input\n type=\"text\"\n class=\"mk-postal-code-input__field\"\n [id]=\"inputId\"\n autocomplete=\"postal-code\"\n autocapitalize=\"characters\"\n spellcheck=\"false\"\n [attr.inputmode]=\"inputMode()\"\n [attr.maxlength]=\"maxLength()\"\n [value]=\"value()\"\n [placeholder]=\"effectivePlaceholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.postalCode\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { mkMaskCaret } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\n\n/** Locale-derived formatting facts used while editing. */\ninterface LocaleInfo {\n /** Grouping separator, e.g. `,` / ` ` / `.`. */\n group: string;\n /** Decimal separator, e.g. `.` / `,`. */\n decimal: string;\n /** Currency symbol text (empty in plain-decimal mode). */\n symbol: string;\n /** Whether the symbol renders before the number. */\n symbolPrefix: boolean;\n /** The currency's default fraction digits (2 for USD, 0 for JPY, …). */\n fractionDigits: number;\n}\n\n/**\n * CurrencyInput — a money/amount field that formats itself with\n * `Intl.NumberFormat`: thousands grouping live as the user types, the\n * currency symbol as a fixed prefix/suffix (per locale), fraction digits\n * padded to the currency's convention on blur (`1234,5` → `1 234,50 zł`).\n * The form value is always a plain `number` (or `null` when empty) — the\n * locale formatting never leaks into the data.\n *\n * `currency` takes an ISO 4217 code; omit it for a plain grouped decimal.\n * `locale` defaults to the runtime locale. `decimals` overrides the\n * currency's fraction digits; `min`/`max` clamp on blur.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-currency-input currency=\"PLN\" [(ngModel)]=\"price\" />\n * <mk-currency-input currency=\"USD\" [min]=\"0\" [(value)]=\"budget\" />\n * ```\n */\n@Component({\n selector: 'mk-currency-input',\n templateUrl: './currency-input.html',\n styleUrl: './currency-input.scss',\n exportAs: 'mkCurrencyInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-currency-input',\n '[class.mk-currency-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-currency-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-currency-input--invalid]': 'isInvalid()',\n '[class.mk-currency-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkCurrencyInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkCurrencyInput),\n multi: true,\n },\n ],\n})\nexport class MkCurrencyInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** ISO 4217 currency code (`PLN`, `USD`, …). Empty = plain decimal. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly currency = input<string>('');\n /** BCP 47 locale for separators/symbol; defaults to the runtime locale. */\n readonly locale = input<string | undefined>(undefined);\n /** Max fraction digits; defaults to the currency's convention (else 2). */\n readonly decimals = input<number | null>(null);\n /** Clamp the value to at least this on blur. */\n readonly min = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Clamp the value to at most this on blur. */\n readonly max = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Allow a leading minus sign. */\n readonly allowNegative = input(true, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('');\n /** Two-way numeric value (`null` when empty). */\n readonly value = model<number | null>(null);\n\n /** The text currently shown in the field. */\n protected readonly display = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: number | null) => void = () => {};\n private onTouched: () => void = () => {};\n /** The last value this component itself pushed into the `value` model. */\n private lastEmitted: number | null = null;\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-currency');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Separators, symbol and fraction convention for the current setup. */\n protected readonly localeInfo = computed<LocaleInfo>(() => {\n const locale = this.locale();\n const currency = this.currency().toUpperCase();\n let group = ',';\n let decimal = '.';\n try {\n for (const part of new Intl.NumberFormat(locale).formatToParts(12345.6)) {\n if (part.type === 'group') group = part.value;\n if (part.type === 'decimal') decimal = part.value;\n }\n } catch {\n /* keep defaults */\n }\n let symbol = '';\n let symbolPrefix = true;\n let fractionDigits = 2;\n if (currency) {\n try {\n const fmt = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n });\n fractionDigits = fmt.resolvedOptions().maximumFractionDigits ?? 2;\n const parts = fmt.formatToParts(1);\n const idx = parts.findIndex((p) => p.type === 'currency');\n symbol = idx >= 0 ? parts[idx].value : currency;\n symbolPrefix =\n idx >= 0 ? !parts.slice(0, idx).some((p) => p.type === 'integer') : true;\n } catch {\n symbol = currency;\n }\n }\n return { group, decimal, symbol, symbolPrefix, fractionDigits };\n });\n\n /** Effective max fraction digits. */\n private readonly maxDecimals = computed(\n () => this.decimals() ?? this.localeInfo().fractionDigits,\n );\n\n constructor() {\n // Re-render when the value is assigned from outside ([(value)] writes we\n // didn't emit). Our own emits leave the display as typed.\n effect(() => {\n const v = this.value();\n untracked(() => {\n if (v === this.lastEmitted) return;\n this.lastEmitted = v;\n this.display.set(this.formatSettled(v));\n });\n });\n // Re-render when the locale/currency/decimals setup changes.\n effect(() => {\n this.localeInfo();\n this.maxDecimals();\n untracked(() => this.display.set(this.formatSettled(this.value())));\n });\n }\n\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const oldValue = el.value;\n const caret = el.selectionStart ?? oldValue.length;\n const canonical = this.parseCanonical(oldValue);\n const next = this.formatEditing(canonical);\n\n el.value = next;\n const pos = mkMaskCaret(oldValue, caret, next);\n el.setSelectionRange(pos, pos);\n this.display.set(next);\n\n const num = this.toNumber(canonical);\n if (num !== this.value()) {\n this.lastEmitted = num;\n this.value.set(num);\n this.onChange(num);\n }\n }\n\n protected onBlur(): void {\n let v = this.value();\n if (v != null) {\n const min = this.min();\n const max = this.max();\n if (min != null && v < min) v = min;\n if (max != null && v > max) v = max;\n const factor = 10 ** this.maxDecimals();\n v = Math.round(v * factor) / factor;\n if (v !== this.value()) {\n this.lastEmitted = v;\n this.value.set(v);\n this.onChange(v);\n }\n }\n this.display.set(this.formatSettled(v));\n this.onTouched();\n }\n\n /**\n * Reduce whatever is in the field to a canonical `-?digits(.digits)?`\n * string. Accepts the locale decimal separator plus `.`/`,` when they are\n * not the grouping separator; drops everything else.\n */\n private parseCanonical(text: string): string {\n const { group, decimal } = this.localeInfo();\n const negative =\n this.allowNegative() && text.trimStart().startsWith('-') ? '-' : '';\n const decimalChars = new Set([decimal]);\n for (const c of ['.', ',']) {\n if (c !== group) decimalChars.add(c);\n }\n let intPart = '';\n let fracPart: string | null = null;\n for (const ch of text) {\n if (/\\d/.test(ch)) {\n if (fracPart === null) intPart += ch;\n else if (fracPart.length < this.maxDecimals()) fracPart += ch;\n } else if (decimalChars.has(ch) && fracPart === null) {\n fracPart = '';\n }\n }\n if (this.maxDecimals() === 0) fracPart = null;\n return `${negative}${intPart}${fracPart !== null ? `.${fracPart}` : ''}`;\n }\n\n /** Canonical string → number (`null` for empty / lone `-`). */\n private toNumber(canonical: string): number | null {\n if (!/\\d/.test(canonical)) return null;\n return Number(canonical);\n }\n\n /** Grouped editing text preserving a partially-typed fraction (`1 234,5`). */\n private formatEditing(canonical: string): string {\n if (!canonical) return '';\n const { group, decimal } = this.localeInfo();\n const negative = canonical.startsWith('-');\n const [intPart, fracPart] = canonical.replace('-', '').split('.');\n const grouped = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, group);\n let out = `${negative ? '-' : ''}${grouped}`;\n if (fracPart !== undefined) out += `${decimal}${fracPart}`;\n return out;\n }\n\n /** Settled (blur / programmatic) text with padded fraction digits. */\n private formatSettled(v: number | null): string {\n if (v == null) return '';\n const digits = this.maxDecimals();\n try {\n return new Intl.NumberFormat(this.locale(), {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n }).format(v);\n } catch {\n return String(v);\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: number | null): void {\n const v = typeof value === 'number' && !Number.isNaN(value) ? value : null;\n this.lastEmitted = v;\n this.value.set(v);\n this.display.set(this.formatSettled(v));\n }\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `min` / `max` against the `[min]` and `[max]` inputs, using the\n * same error shapes as `Validators.min` / `Validators.max`.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'number' || Number.isNaN(v)) return null;\n const min = this.min();\n if (min != null && v < min) return { min: { min, actual: v } };\n const max = this.max();\n if (max != null && v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@if (localeInfo().symbol && localeInfo().symbolPrefix) {\n <span class=\"mk-currency-input__symbol\" aria-hidden=\"true\">{{\n localeInfo().symbol\n }}</span>\n}\n\n<input\n type=\"text\"\n class=\"mk-currency-input__field\"\n [id]=\"inputId\"\n inputmode=\"decimal\"\n autocomplete=\"transaction-amount\"\n spellcheck=\"false\"\n [value]=\"display()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || i18n.amount)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n\n@if (localeInfo().symbol && !localeInfo().symbolPrefix) {\n <span class=\"mk-currency-input__symbol\" aria-hidden=\"true\">{{\n localeInfo().symbol\n }}</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkMask, mkApplyMask } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport { detectCardBrand, isLuhn } from '@mk-kit/validators';\n\n/** Card networks {@link MkCardNumberInput} recognises. */\nexport type MkCardBrand =\n | 'visa'\n | 'mastercard'\n | 'amex'\n | 'discover'\n | 'diners'\n | 'jcb';\n\n/** Human-readable names for the recognised brands. */\nexport const MK_CARD_BRAND_NAMES: Record<MkCardBrand, string> = {\n visa: 'Visa',\n mastercard: 'Mastercard',\n amex: 'American Express',\n discover: 'Discover',\n diners: 'Diners Club',\n jcb: 'JCB',\n};\n\n/** Detect the card network from the leading digits — `detectCardBrand` from `@mk-kit/validators`. */\nexport function mkDetectCardBrand(digits: string): MkCardBrand | null {\n return detectCardBrand(digits);\n}\n\n/** Luhn (mod 10) checksum over a digit string — `isLuhn` from `@mk-kit/validators`. */\nexport function mkLuhnCheck(digits: string): boolean {\n return /^\\d+$/.test(digits) && isLuhn(digits);\n}\n\n/** Grouping masks per brand (digit counts differ). */\nconst BRAND_MASKS: Partial<Record<MkCardBrand, string>> = {\n amex: '0000 000000 00000',\n diners: '0000 000000 0000',\n};\nconst DEFAULT_MASK = '0000 0000 0000 0000';\n\n/**\n * CardNumberInput — a payment-card number field that groups digits with the\n * detected network's layout (16-digit `0000 0000 0000 0000`, Amex\n * `0000 000000 00000`, Diners `0000 000000 0000`), shows the brand as a\n * badge, and validates the complete number with the Luhn checksum.\n *\n * The form value is the raw digit string (no spaces). `brand()` exposes the\n * detected network (also via `(brandChange)`), and `valid()` reports\n * `true`/`false` for a complete number passing/failing Luhn and `null` while\n * empty or incomplete; invalid styling engages after the field was touched.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-card-number-input [(ngModel)]=\"cardNumber\" />\n * ```\n */\n@Component({\n selector: 'mk-card-number-input',\n templateUrl: './card-number-input.html',\n styleUrl: './card-number-input.scss',\n exportAs: 'mkCardNumberInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkMask],\n host: {\n class: 'mk-card-number-input',\n '[class.mk-card-number-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-card-number-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-card-number-input--invalid]': 'isInvalid()',\n '[class.mk-card-number-input--disabled]': 'isDisabled()',\n '[attr.data-brand]': 'brand()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkCardNumberInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkCardNumberInput),\n multi: true,\n },\n ],\n})\nexport class MkCardNumberInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** Show the detected brand as a badge inside the field. */\n readonly showBrand = input(true, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('0000 0000 0000 0000');\n /** Two-way card number, digits only (no spaces). */\n readonly value = model<string>('');\n /** Emits whenever the detected brand changes. */\n readonly brandChange = output<MkCardBrand | null>();\n\n private readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n private lastBrand: MkCardBrand | null = null;\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-card');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The detected card network, `null` while unrecognised. */\n readonly brand = computed<MkCardBrand | null>(() =>\n mkDetectCardBrand(this.value()),\n );\n /** Human-readable brand name (empty while unrecognised). */\n protected readonly brandName = computed(() => {\n const b = this.brand();\n return b ? MK_CARD_BRAND_NAMES[b] : '';\n });\n\n /** The grouping mask for the current brand. */\n protected readonly mask = computed(() => {\n const b = this.brand();\n return (b && BRAND_MASKS[b]) || DEFAULT_MASK;\n });\n /** Digits the current brand's complete number has. */\n private readonly expectedLength = computed(\n () => (this.mask().match(/0/g) ?? []).length,\n );\n\n /** Formatted (grouped) number shown in the field. */\n protected readonly masked = computed(\n () => mkApplyMask(this.value(), this.mask()).masked,\n );\n\n /**\n * `true` for a complete number passing Luhn, `false` for a complete number\n * failing it, `null` while empty or incomplete.\n */\n readonly valid = computed<boolean | null>(() => {\n const digits = this.value();\n if (!digits) return null;\n if (digits.length < this.expectedLength()) return null;\n return mkLuhnCheck(digits);\n });\n\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.touched() && this.valid() === false),\n );\n\n protected onDigitsChange(unmasked: string): void {\n if (unmasked === this.value()) return;\n this.value.set(unmasked);\n this.onChange(unmasked);\n const brand = this.brand();\n if (brand !== this.lastBrand) {\n this.lastBrand = brand;\n this.brandChange.emit(brand);\n }\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set((value ?? '').replace(/\\D/g, ''));\n this.lastBrand = this.brand();\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n /**\n * Reports `cardNumber` for a number failing the Luhn checksum (which\n * includes a half-typed one). An empty value passes; compose with\n * `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const raw = control.value;\n const digits = typeof raw === 'string' ? raw.replace(/\\D/g, '') : '';\n if (!digits) return null;\n return mkLuhnCheck(digits) ? null : { cardNumber: true };\n }\n}\n","<input\n type=\"text\"\n class=\"mk-card-number-input__field\"\n [id]=\"inputId\"\n autocomplete=\"cc-number\"\n spellcheck=\"false\"\n [mkMask]=\"mask()\"\n [value]=\"masked()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.cardNumber\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (unmaskedChange)=\"onDigitsChange($event)\"\n (blur)=\"onBlur()\"\n/>\n\n@if (showBrand() && brandName()) {\n <span class=\"mk-card-number-input__brand\">\n {{ brandName() }}\n <span class=\"mk-visually-hidden\">{{ i18n.cardBrand(brandName()) }}</span>\n </span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n ValidatorFn,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { mkMaskCaret } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport { IBAN_LENGTHS, ibanMod97, isIban } from '@mk-kit/validators';\n\n/**\n * IBAN lengths per country — re-exported from `@mk-kit/validators`\n * (`IBAN_LENGTHS`, the SWIFT registry).\n */\nexport const MK_IBAN_LENGTHS: Readonly<Record<string, number>> = IBAN_LENGTHS;\n\n/** Longest IBAN in the registry (Malta, 31) rounded up to the ISO 13616 maximum. */\nconst IBAN_MAX = 34;\n\n/** ISO 7064 MOD 97-10 over a compact (uppercase, no separators) IBAN. */\nexport function mkIbanChecksum(compact: string): boolean {\n return /^[A-Z]{2}\\d{2}[A-Z0-9]+$/.test(compact) && ibanMod97(compact) === 1;\n}\n\n/**\n * Shape, the registry length for the country and the checksum — delegates\n * to `isIban` from `@mk-kit/validators`. Unlike that function this one keeps\n * the input kit's stricter rule that the country must be in the table.\n */\nexport function mkIbanIsValid(compact: string): boolean {\n return MK_IBAN_LENGTHS[compact.slice(0, 2)] !== undefined && isIban(compact);\n}\n\n/**\n * Reactive-forms validator for an IBAN (any supported country). Empty values\n * pass (compose with `Validators.required`); the error carries the country\n * and its expected length when known.\n *\n * ```ts\n * account: ['', [Validators.required, mkIbanValidator()]]\n * ```\n */\nexport function mkIbanValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const raw = typeof control.value === 'string' ? control.value : '';\n const compact = raw.replace(/\\s+/g, '').toUpperCase();\n if (!compact || mkIbanIsValid(compact)) return null;\n const country = compact.slice(0, 2);\n return {\n iban: { country, expectedLength: MK_IBAN_LENGTHS[country] ?? null },\n };\n };\n}\n\n/**\n * IbanInput — an international bank account number field: uppercases and\n * groups the number in blocks of four as the user types (`PL61 1090 1014 …`),\n * caps input at the country's exact length (65 countries built in) and\n * validates with the ISO 13616 mod-97 checksum.\n *\n * The form value is the compact electronic format (uppercase, no spaces).\n * `valid()` (via `exportAs`) reports `true`/`false` for a complete number\n * passing/failing validation and `null` while empty or incomplete; invalid\n * styling engages after the field was touched.\n * `mkIbanValidator()` covers reactive forms.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-iban-input [(ngModel)]=\"account\" />\n * ```\n */\n@Component({\n selector: 'mk-iban-input',\n templateUrl: './iban-input.html',\n styleUrl: './iban-input.scss',\n exportAs: 'mkIbanInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-iban-input',\n '[class.mk-iban-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-iban-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-iban-input--invalid]': 'isInvalid()',\n '[class.mk-iban-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkIbanInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkIbanInput),\n multi: true,\n },\n ],\n})\nexport class MkIbanInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('PL61 1090 1014 0000 0712 1981 2874');\n /** Two-way IBAN in compact electronic format (uppercase, no spaces). */\n readonly value = model<string>('');\n\n private readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-iban');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The value grouped in blocks of four for display. */\n protected readonly grouped = computed(\n () => this.value().replace(/(.{4})(?=.)/g, '$1 '),\n );\n\n /** The expected length for the typed country, when known. */\n private readonly expectedLength = computed<number | null>(() => {\n const country = this.value().slice(0, 2);\n return country.length === 2 ? (MK_IBAN_LENGTHS[country] ?? null) : null;\n });\n\n /**\n * `true` for a complete IBAN passing the mod-97 check, `false` for a\n * complete-but-wrong one (or an unknown country once 2+ chars are typed and\n * the field was left), `null` while empty or still incomplete.\n */\n readonly valid = computed<boolean | null>(() => {\n const compact = this.value();\n if (!compact) return null;\n const expected = this.expectedLength();\n if (expected === null) return compact.length >= 2 ? false : null;\n if (compact.length < expected) return null;\n return mkIbanChecksum(compact);\n });\n\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.touched() && this.valid() === false),\n );\n\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const rawValue = el.value;\n const caret = el.selectionStart ?? rawValue.length;\n\n let compact = rawValue.toUpperCase().replace(/[^A-Z0-9]/g, '');\n compact = compact.slice(0, this.expectedLengthFor(compact));\n\n const next = compact.replace(/(.{4})(?=.)/g, '$1 ');\n el.value = next;\n const pos = mkMaskCaret(rawValue, caret, next);\n el.setSelectionRange(pos, pos);\n\n if (compact !== this.value()) {\n this.value.set(compact);\n this.onChange(compact);\n }\n }\n\n private expectedLengthFor(compact: string): number {\n return MK_IBAN_LENGTHS[compact.slice(0, 2)] ?? IBAN_MAX;\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set((value ?? '').toUpperCase().replace(/[^A-Z0-9]/g, ''));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n /**\n * Reports `iban` for a number failing the mod-97 checksum — the same error\n * `mkIbanValidator()` produces, so the two are interchangeable. An empty\n * value passes; compose with `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const raw = control.value;\n const compact = typeof raw === 'string' ? raw.replace(/\\s+/g, '').toUpperCase() : '';\n if (!compact || mkIbanIsValid(compact)) return null;\n const country = compact.slice(0, 2);\n return { iban: { country, expectedLength: MK_IBAN_LENGTHS[country] ?? null } };\n }\n}\n","<input\n type=\"text\"\n class=\"mk-iban-input__field\"\n [id]=\"inputId\"\n autocomplete=\"off\"\n autocapitalize=\"characters\"\n spellcheck=\"false\"\n [value]=\"grouped()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.iban\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n ValidatorFn,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId, mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { mkApplyMask, mkMaskCaret } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport { isNip } from '@mk-kit/validators';\n\n/**\n * Per-country business tax-identifier format for {@link MkTaxIdInput}.\n *\n * `mask` is an `mkApplyMask` pattern (`0` = digit; every built-in format is\n * digits only). `compact` validates the unmasked value — the form value —\n * and `validate` adds the national checksum where one exists and is\n * unambiguous. Formats without a `validate` are pattern-checked only.\n */\nexport interface MkTaxIdFormat {\n /** ISO 3166-1 alpha-2 code, uppercase. */\n country: string;\n /** Local name of the identifier, e.g. `NIP`. */\n label: string;\n /** Input mask; `0` = digit. */\n mask: string;\n /** Regex the complete unmasked (compact) value must match. */\n compact: RegExp;\n /** Example of a valid identifier, used as the default placeholder. */\n example: string;\n /** National checksum over the compact value; omitted when there is none. */\n validate?: (compact: string) => boolean;\n}\n\n/**\n * Polish NIP checksum — delegates to `isNip` from `@mk-kit/validators`\n * (weights 6-5-7-2-3-4-5-6-7 mod 11; a remainder of 10 is invalid).\n */\nexport function mkNipChecksum(compact: string): boolean {\n return /^\\d{10}$/.test(compact) && isNip(compact);\n}\n\n/**\n * The built-in tax-identifier formats (alphabetical by ISO code). Only Poland\n * carries a checksum; the rest are length/shape checks, which is what the\n * national registries publish without ambiguity.\n */\nexport const MK_TAX_ID_FORMATS: readonly MkTaxIdFormat[] = [\n {\n country: 'CZ',\n label: 'DIČ',\n mask: '0000000000',\n compact: /^\\d{8,10}$/,\n example: '25123891',\n },\n {\n country: 'DE',\n label: 'USt-IdNr.',\n mask: '000000000',\n compact: /^\\d{9}$/,\n example: '123456789',\n },\n {\n country: 'IT',\n label: 'Partita IVA',\n mask: '00000000000',\n compact: /^\\d{11}$/,\n example: '00743110157',\n },\n {\n country: 'PL',\n label: 'NIP',\n mask: '000-000-00-00',\n compact: /^\\d{10}$/,\n example: '123-456-32-18',\n validate: mkNipChecksum,\n },\n {\n country: 'SK',\n label: 'IČ DPH',\n mask: '0000000000',\n compact: /^\\d{10}$/,\n example: '2020317068',\n },\n];\n\n/** Look up the built-in format for an ISO country code (case-insensitive). */\nexport function mkTaxIdFormat(country: string): MkTaxIdFormat | undefined {\n const upper = country.toUpperCase();\n return MK_TAX_ID_FORMATS.find((f) => f.country === upper);\n}\n\n/** Strip everything the mask would insert, leaving the compact value. */\nfunction compactOf(value: unknown): string {\n return typeof value === 'string' ? value.replace(/\\D/g, '') : '';\n}\n\n/**\n * Full validity for a country: shape plus the national checksum when the\n * format defines one. Masked and compact input are both accepted; unknown\n * countries have no rule to fail, so they pass.\n */\nexport function mkTaxIdIsValid(value: string, country: string): boolean {\n const format = mkTaxIdFormat(country);\n if (!format) return true;\n const compact = compactOf(value);\n return format.compact.test(compact) && (format.validate?.(compact) ?? true);\n}\n\n/**\n * Reactive-forms validator for a business tax identifier in a given country.\n * Empty values pass (compose with `Validators.required`); countries without a\n * built-in format pass everything.\n *\n * ```ts\n * nip: ['', [Validators.required, mkTaxIdValidator('PL')]]\n * ```\n */\nexport function mkTaxIdValidator(country: string): ValidatorFn {\n const format = mkTaxIdFormat(country);\n return (control: AbstractControl): ValidationErrors | null => {\n const compact = compactOf(control.value);\n if (!compact || !format || mkTaxIdIsValid(compact, format.country)) {\n return null;\n }\n return {\n taxId: {\n country: format.country,\n label: format.label,\n example: format.example,\n },\n };\n };\n}\n\n/**\n * TaxIdInput — a business tax-identifier field that masks and validates itself\n * for the given `country` (`PL` NIP `000-000-00-00`, `DE` USt-IdNr., `CZ` DIČ,\n * `IT` Partita IVA, `SK` IČ DPH). Poland's NIP is checksum-verified; the other\n * built-ins are shape-verified.\n *\n * Like `MkIbanInput`, the form value is the **compact** identifier (digits\n * only, e.g. `1234563218`) while the field *displays* it masked\n * (`123-456-32-18`) — so what is stored is what an API or invoice expects, and\n * `writeValue()` accepts either form. The placeholder defaults to a valid\n * example for the country. `valid()` (via `exportAs`) reports `true`/`false`\n * for a complete identifier passing/failing validation and `null` while empty,\n * still incomplete or the country is unknown; invalid styling engages after\n * the field was touched. `mkTaxIdValidator()` covers reactive forms.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-tax-id-input [(ngModel)]=\"nip\" />\n * <mk-tax-id-input [country]=\"form.value.country\" [(value)]=\"taxId\" />\n * ```\n */\n@Component({\n selector: 'mk-tax-id-input',\n templateUrl: './tax-id-input.html',\n styleUrl: './tax-id-input.scss',\n exportAs: 'mkTaxIdInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-tax-id-input',\n '[class.mk-tax-id-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-tax-id-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-tax-id-input--invalid]': 'isInvalid()',\n '[class.mk-tax-id-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTaxIdInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkTaxIdInput),\n multi: true,\n },\n ],\n})\nexport class MkTaxIdInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** ISO 3166-1 alpha-2 country whose format applies. */\n readonly country = input<string>('PL');\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder; defaults to a valid example for the country. */\n readonly placeholder = input<string>('');\n /** Two-way identifier in compact form (digits only, e.g. `1234563218`). */\n readonly value = model<string>('');\n\n private readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-tax-id');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The active format, or `undefined` for unknown countries (free digits). */\n protected readonly format = computed<MkTaxIdFormat | undefined>(() =>\n mkTaxIdFormat(this.country()),\n );\n\n /** The compact value rendered through the country's mask. */\n protected readonly masked = computed(() => {\n const format = this.format();\n return format ? mkApplyMask(this.value(), format.mask).masked : this.value();\n });\n\n protected readonly effectivePlaceholder = computed(\n () => this.placeholder() || (this.format()?.example ?? ''),\n );\n\n protected readonly maxLength = computed(() => this.format()?.mask.length ?? 20);\n\n /**\n * `true` for a complete identifier passing its format (and checksum),\n * `false` for a complete-but-wrong one, `null` while empty, still shorter\n * than the mask allows, or the country has no known format.\n */\n readonly valid = computed<boolean | null>(() => {\n const compact = this.value();\n const format = this.format();\n if (!compact || !format) return null;\n if (format.compact.test(compact)) return format.validate?.(compact) ?? true;\n const digits = format.mask.replace(/[^0]/g, '').length;\n return compact.length < digits ? null : false;\n });\n\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.touched() && this.valid() === false),\n );\n\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const rawValue = el.value;\n const caret = el.selectionStart ?? rawValue.length;\n const format = this.format();\n\n const applied = format\n ? mkApplyMask(rawValue, format.mask)\n : { masked: rawValue.replace(/\\D/g, ''), unmasked: rawValue.replace(/\\D/g, '') };\n\n el.value = applied.masked;\n const pos = mkMaskCaret(rawValue, caret, applied.masked);\n el.setSelectionRange(pos, pos);\n\n if (applied.unmasked !== this.value()) {\n this.value.set(applied.unmasked);\n this.onChange(applied.unmasked);\n }\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n /** Accepts both the masked (`123-456-32-18`) and compact (`1234563218`) form. */\n writeValue(value: string | null): void {\n const digits = compactOf(value ?? '');\n const format = this.format();\n this.value.set(\n format ? mkApplyMask(digits, format.mask).unmasked : digits,\n );\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.country();\n });\n\n /**\n * Reports `taxId` for an identifier not matching `[country]`'s format or\n * failing its checksum — the same error `mkTaxIdValidator()` produces, so\n * the two are interchangeable. Empty values and unknown countries pass;\n * compose with `Validators.required` to reject an empty one.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const compact = compactOf(control.value);\n const format = this.format();\n if (!compact || !format || mkTaxIdIsValid(compact, format.country)) {\n return null;\n }\n return {\n taxId: {\n country: format.country,\n label: format.label,\n example: format.example,\n },\n };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<input\n type=\"text\"\n class=\"mk-tax-id-input__field\"\n [id]=\"inputId\"\n autocomplete=\"off\"\n inputmode=\"numeric\"\n spellcheck=\"false\"\n [value]=\"masked()\"\n [attr.maxlength]=\"maxLength()\"\n [placeholder]=\"effectivePlaceholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.taxId\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n type OnDestroy,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/** One drawn stroke: pointer positions in CSS pixels. */\ntype Stroke = { x: number; y: number }[];\n\n/**\n * SignaturePad — a canvas the user draws a signature on (pointer, touch or\n * pen). Strokes are captured as smoothed polylines, rendered crisp on hi-DPI\n * screens and re-drawn losslessly when the pad resizes. The form value is a\n * PNG data-URL of the drawing (`null` while empty), so it drops straight into\n * an `<img>`, a form post or an upload.\n *\n * A Clear control resets the pad (also available as `clear()`); `isEmpty()`\n * reports whether anything is drawn. Programmatic values (`writeValue`,\n * `[value]`) are painted onto the canvas as an image.\n *\n * Drawing is inherently pointer-based; pair the pad with an alternative flow\n * (e.g. a typed-name checkbox) where WCAG requires a keyboard equivalent.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-signature-pad [(ngModel)]=\"signature\" />\n * <img [src]=\"signature\" alt=\"Captured signature\" />\n * ```\n */\n@Component({\n selector: 'mk-signature-pad',\n templateUrl: './signature-pad.html',\n styleUrl: './signature-pad.scss',\n exportAs: 'mkSignaturePad',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-signature-pad',\n '[class.mk-signature-pad--invalid]': 'isInvalid()',\n '[class.mk-signature-pad--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSignaturePad),\n multi: true,\n },\n ],\n})\nexport class MkSignaturePad implements ControlValueAccessor, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n private readonly canvasRef =\n viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n /** Stroke width in CSS pixels. */\n readonly strokeWidth = input(2, { transform: numberAttribute });\n /** Pad height in CSS pixels (width follows the container). */\n readonly height = input(160, { transform: numberAttribute });\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Two-way PNG data-URL of the signature (`null` while empty). */\n readonly value = model<string | null>(null);\n /** Emits when the pad is cleared (via the button or `clear()`). */\n readonly cleared = output<void>();\n\n private readonly strokes: Stroke[] = [];\n private current: Stroke | null = null;\n /**\n * Per-gesture cache: canvas rect, devicePixelRatio and stroke color are\n * read once at pointerdown so pointermove does no layout/style reads.\n * Refreshed on a mid-stroke resize, dropped at pointerup/cancel.\n */\n private gesture: { rect: DOMRect; dpr: number; color: string } | null = null;\n /**\n * Highest smoothing segment of `current` already painted incrementally.\n * Segment `i` (1-based) is `quadraticCurveTo(p[i], mid(p[i], p[i+1]))` —\n * exactly the curve `redraw()` produces, so the final full redraw matches.\n */\n private lastSeg = 0;\n /** Pending animation-frame handle for the incremental draw. */\n private rafId: number | null = null;\n private readonly empty = signal(true);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n private resizeObserver?: ResizeObserver;\n /** Set while `value` holds an external image we can't re-derive strokes from. */\n private externalImage: string | null = null;\n\n readonly padId = this.field?.controlId ?? mkUniqueId('mk-signature');\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n /** Whether nothing is drawn yet. */\n readonly isEmpty = this.empty.asReadonly();\n\n constructor() {\n afterNextRender(() => {\n this.resizeCanvas();\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => this.resizeCanvas());\n this.resizeObserver.observe(this.canvasRef().nativeElement);\n }\n // A value assigned before render (writeValue / [value]) paints now.\n if (this.value()) this.paintExternal(this.value()!);\n });\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n this.cancelFlush();\n }\n\n // --- Drawing --------------------------------------------------------------\n\n protected onPointerDown(event: PointerEvent): void {\n if (this.isDisabled()) return;\n const canvas = this.canvasRef().nativeElement;\n try {\n canvas.setPointerCapture(event.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n this.cacheGesture();\n this.lastSeg = 0;\n this.current = [this.toLocal(event)];\n event.preventDefault();\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (!this.current) return;\n // Coalesced events keep full input fidelity while we draw once per frame.\n const coalesced = event.getCoalescedEvents?.();\n const events = coalesced?.length ? coalesced : [event];\n for (const e of events) this.current.push(this.toLocal(e));\n this.scheduleFlush();\n }\n\n protected onPointerUp(): void {\n // All points are already accumulated in `current`; the final redraw()\n // below supersedes any pending incremental frame.\n this.cancelFlush();\n this.gesture = null;\n if (!this.current) return;\n // A tap leaves a dot; keep it.\n this.strokes.push(this.current);\n this.current = null;\n this.lastSeg = 0;\n this.externalImage = null;\n this.empty.set(false);\n this.redraw();\n this.emitValue();\n this.onTouched();\n }\n\n /** Clear the drawing (and the form value). */\n clear(): void {\n this.cancelFlush();\n this.gesture = null;\n this.lastSeg = 0;\n this.strokes.length = 0;\n this.current = null;\n this.externalImage = null;\n this.empty.set(true);\n this.redraw();\n this.value.set(null);\n this.onChange(null);\n this.cleared.emit();\n }\n\n protected onClearClick(): void {\n if (this.isDisabled()) return;\n this.clear();\n this.onTouched();\n }\n\n // --- Canvas plumbing ------------------------------------------------------\n\n private toLocal(event: {\n clientX: number;\n clientY: number;\n }): { x: number; y: number } {\n const rect =\n this.gesture?.rect ??\n this.canvasRef().nativeElement.getBoundingClientRect();\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n }\n\n /** Snapshot the per-gesture environment (rect, dpr, stroke color). */\n private cacheGesture(): void {\n const canvas = this.canvasRef().nativeElement;\n this.gesture = {\n rect: canvas.getBoundingClientRect(),\n dpr: window.devicePixelRatio || 1,\n color: getComputedStyle(canvas).color,\n };\n }\n\n private scheduleFlush(): void {\n if (this.rafId != null) return;\n if (typeof requestAnimationFrame !== 'function') {\n this.drawPending();\n return;\n }\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.drawPending();\n });\n }\n\n private cancelFlush(): void {\n if (this.rafId == null) return;\n if (typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this.rafId);\n }\n this.rafId = null;\n }\n\n /**\n * Paint only the not-yet-drawn part of the in-flight stroke. Produces the\n * same midpoint-smoothed curve as `redraw()` minus the trailing straight\n * cap to the last point, which the final redraw on pointerup adds.\n */\n private drawPending(): void {\n if (!this.isBrowser || !this.current) return;\n const g = this.gesture;\n if (!g) return;\n const ctx = this.context();\n if (!ctx) return;\n const pts = this.current;\n const n = pts.length;\n if (n < 2) return;\n\n ctx.setTransform(g.dpr, 0, 0, g.dpr, 0, 0);\n ctx.lineWidth = this.strokeWidth();\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = g.color;\n\n if (n === 2) {\n // Two points: only the straight segment exists yet (as in redraw()).\n if (this.lastSeg === 0) {\n ctx.beginPath();\n ctx.moveTo(pts[0].x, pts[0].y);\n ctx.lineTo(pts[1].x, pts[1].y);\n ctx.stroke();\n }\n return;\n }\n\n const first = this.lastSeg + 1;\n if (first > n - 2) return;\n ctx.beginPath();\n if (first === 1) {\n ctx.moveTo(pts[0].x, pts[0].y);\n } else {\n // Resume where the previous segment ended: the midpoint.\n ctx.moveTo(\n (pts[first - 1].x + pts[first].x) / 2,\n (pts[first - 1].y + pts[first].y) / 2,\n );\n }\n for (let i = first; i <= n - 2; i++) {\n ctx.quadraticCurveTo(\n pts[i].x,\n pts[i].y,\n (pts[i].x + pts[i + 1].x) / 2,\n (pts[i].y + pts[i + 1].y) / 2,\n );\n }\n ctx.stroke();\n this.lastSeg = n - 2;\n }\n\n /** Match the bitmap to the CSS size × devicePixelRatio, then re-render. */\n private resizeCanvas(): void {\n if (!this.isBrowser) return;\n const canvas = this.canvasRef().nativeElement;\n const dpr = window.devicePixelRatio || 1;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n if (!width || !height) return;\n canvas.width = Math.round(width * dpr);\n canvas.height = Math.round(height * dpr);\n // Geometry changed: refresh the cache mid-stroke, drop it otherwise.\n if (this.current) this.cacheGesture();\n else this.gesture = null;\n if (this.externalImage) this.paintExternal(this.externalImage);\n else this.redraw();\n }\n\n private context(): CanvasRenderingContext2D | null {\n return this.canvasRef().nativeElement.getContext('2d');\n }\n\n private redraw(): void {\n if (!this.isBrowser) return;\n const canvas = this.canvasRef().nativeElement;\n const ctx = this.context();\n if (!ctx) return;\n const dpr = window.devicePixelRatio || 1;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, canvas.clientWidth, canvas.clientHeight);\n ctx.lineWidth = this.strokeWidth();\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = getComputedStyle(canvas).color;\n ctx.fillStyle = ctx.strokeStyle;\n\n for (const stroke of [...this.strokes, ...(this.current ? [this.current] : [])]) {\n if (stroke.length === 1) {\n ctx.beginPath();\n ctx.arc(stroke[0].x, stroke[0].y, this.strokeWidth() / 2, 0, Math.PI * 2);\n ctx.fill();\n continue;\n }\n ctx.beginPath();\n ctx.moveTo(stroke[0].x, stroke[0].y);\n // Quadratic smoothing through midpoints.\n for (let i = 1; i < stroke.length - 1; i++) {\n const midX = (stroke[i].x + stroke[i + 1].x) / 2;\n const midY = (stroke[i].y + stroke[i + 1].y) / 2;\n ctx.quadraticCurveTo(stroke[i].x, stroke[i].y, midX, midY);\n }\n const last = stroke[stroke.length - 1];\n ctx.lineTo(last.x, last.y);\n ctx.stroke();\n }\n // The in-flight stroke (if any) is now fully painted — the incremental\n // path must not repaint it.\n if (this.current) this.lastSeg = Math.max(0, this.current.length - 2);\n }\n\n private emitValue(): void {\n let dataUrl: string | null = null;\n try {\n dataUrl = this.canvasRef().nativeElement.toDataURL('image/png') || null;\n } catch {\n // Environments without canvas rasterisation (e.g. jsdom).\n }\n this.value.set(dataUrl);\n this.onChange(dataUrl);\n }\n\n /** Paint an externally-provided data-URL/image URL onto the pad. */\n private paintExternal(src: string): void {\n if (!this.isBrowser) return;\n this.externalImage = src;\n this.strokes.length = 0;\n const img = new Image();\n img.onload = () => {\n const canvas = this.canvasRef().nativeElement;\n const ctx = this.context();\n if (!ctx) return;\n const dpr = window.devicePixelRatio || 1;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, canvas.clientWidth, canvas.clientHeight);\n ctx.drawImage(img, 0, 0, canvas.clientWidth, canvas.clientHeight);\n this.empty.set(false);\n };\n img.src = src;\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set(value || null);\n if (value) {\n // Canvas may not exist yet (before first render) — afterNextRender in\n // the constructor paints the pending value in that case.\n if (this.isBrowser && this.canvasRef !== undefined) {\n try {\n this.paintExternal(value);\n } catch {\n this.externalImage = value;\n }\n }\n } else {\n this.strokes.length = 0;\n this.externalImage = null;\n this.empty.set(true);\n if (this.isBrowser) {\n try {\n this.redraw();\n } catch {\n /* not rendered yet */\n }\n }\n }\n }\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<canvas\n #canvas\n class=\"mk-signature-pad__canvas\"\n [id]=\"padId\"\n role=\"img\"\n [style.height.px]=\"height()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.signature\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp()\"\n (pointercancel)=\"onPointerUp()\"\n></canvas>\n\n@if (!isEmpty() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"mk-signature-pad__clear\"\n (click)=\"onClearClick()\"\n >\n {{ i18n.clear }}\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n type Signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport type { MkRadio } from './radio';\n\n/**\n * RadioGroup — an ARIA `radiogroup` that coordinates projected `mk-radio`\n * children. It manages a single selected value with roving tabindex and\n * Arrow-key navigation (Up/Left = previous, Down/Right = next, wrapping and\n * skipping disabled radios).\n *\n * Implements `ControlValueAccessor` with a two-way `value` model.\n *\n * ```html\n * <mk-radio-group [(ngModel)]=\"plan\" aria-label=\"Plan\">\n * <mk-radio [value]=\"'free'\">Free</mk-radio>\n * <mk-radio [value]=\"'pro'\">Pro</mk-radio>\n * </mk-radio-group>\n * ```\n */\n@Component({\n selector: 'mk-radio-group',\n templateUrl: './radio-group.html',\n styleUrl: './radio-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-radio-group',\n role: 'radiogroup',\n '[class.mk-radio-group--horizontal]': \"orientation() === 'horizontal'\",\n '[class.mk-radio-group--disabled]': 'isDisabled()',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '[attr.aria-required]': 'isRequired() || null',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '(keydown)': 'onKeydown($event)',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkRadioGroup),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkRadioGroup),\n multi: true,\n },\n ],\n})\nexport class MkRadioGroup implements ControlValueAccessor, Validator {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n\n /** Two-way selected value. */\n readonly value = model<unknown>(null);\n /** Disable the whole group. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). */\n readonly required = input(false, { transform: booleanAttribute });\n /** Size applied to all child radios. */\n readonly size = input<MkSize>('md');\n /** Semantic color tone applied to all child radios. */\n readonly tone = input<MkTone>('primary');\n /** Shared `name` grouping (defaults to a generated unique name). */\n readonly name = input<string>(mkUniqueId('mk-radio'));\n /** Layout direction; also sets arrow-key mapping expectations. */\n readonly orientation = input<'horizontal' | 'vertical'>('vertical');\n\n private readonly radios = signal<MkRadio[]>([]);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Whether a radio currently matches the selected value. */\n readonly hasChecked = computed(() =>\n this.radios().some((r) => r.value() === this.value()),\n );\n\n /** Register a child radio (called from `mk-radio` on init). */\n register(radio: MkRadio): void {\n this.radios.update((list) => [...list, radio]);\n }\n\n /** Unregister a child radio (called on destroy). */\n unregister(radio: MkRadio): void {\n this.radios.update((list) => list.filter((r) => r !== radio));\n }\n\n /** True when `radio` matches the group's current value. */\n isChecked(radio: MkRadio): boolean {\n return radio.value() === this.value();\n }\n\n /** The radio that should be tabbable when nothing is selected. */\n readonly firstEnabled: Signal<MkRadio | null> = computed(\n () => this.radios().find((r) => !r.isDisabled()) ?? null,\n );\n\n /** Select a radio's value (guarded by disabled state). */\n select(radio: MkRadio): void {\n if (this.isDisabled() || radio.isDisabled()) return;\n this.value.set(radio.value());\n this.onChange(radio.value());\n this.onTouched();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const enabled = this.radios().filter((r) => !r.isDisabled());\n if (!enabled.length) return;\n\n const key = e.key;\n const current = enabled.findIndex((r) => this.isChecked(r));\n let next: number;\n if (key === 'ArrowDown' || key === 'ArrowRight') {\n next = current < 0 ? 0 : (current + 1) % enabled.length;\n } else if (key === 'ArrowUp' || key === 'ArrowLeft') {\n next =\n current < 0\n ? enabled.length - 1\n : (current - 1 + enabled.length) % enabled.length;\n } else if (key === ' ' || key === 'Enter') {\n next = current < 0 ? 0 : current;\n } else {\n return;\n }\n e.preventDefault();\n const radio = enabled[next];\n this.select(radio);\n radio.focus();\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.required();\n });\n\n /**\n * Reports `required` when `[required]` is set and no radio is selected.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n if (!this.required()) return null;\n const v = control.value;\n return v === null || v === undefined || v === '' ? { required: true } : null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n type OnDestroy,\n type OnInit,\n type Signal,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MkRadioGroup } from './radio-group';\n\n/**\n * Radio — a single option within an `mk-radio-group`. Rendered as\n * `role=\"radio\"` with a roving tabindex managed by the parent group, so the\n * whole group is a single Tab stop and Arrow keys move between options.\n *\n * Must be used as a child of `mk-radio-group`.\n *\n * ```html\n * <mk-radio [value]=\"'pro'\">Pro plan</mk-radio>\n * ```\n */\n@Component({\n selector: 'mk-radio',\n templateUrl: './radio.html',\n styleUrl: './radio.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-radio',\n role: 'radio',\n '[class.mk-radio--checked]': 'checked()',\n '[class.mk-radio--disabled]': 'isDisabled()',\n '[class.mk-radio--sm]': \"size() === 'sm'\",\n '[class.mk-radio--md]': \"size() === 'md'\",\n '[class.mk-radio--lg]': \"size() === 'lg'\",\n '[attr.data-tone]': 'group.tone()',\n '[attr.aria-checked]': 'checked()',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.tabindex]': 'tabindex()',\n '(click)': 'onClick()',\n },\n})\nexport class MkRadio implements OnInit, OnDestroy {\n protected readonly group = inject(MkRadioGroup);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The value contributed to the group when this radio is selected. */\n readonly value = input<unknown>(null);\n /** Disable just this radio. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly size: Signal<MkSize> = computed(() => this.group.size());\n readonly checked: Signal<boolean> = computed(() =>\n this.group.isChecked(this),\n );\n readonly isDisabled: Signal<boolean> = computed(\n () => this.disabled() || this.group.isDisabled(),\n );\n\n /** Roving tabindex: the checked radio (or the first enabled one) is tabbable. */\n protected readonly tabindex: Signal<number> = computed(() => {\n if (this.isDisabled()) return -1;\n if (this.group.hasChecked()) return this.checked() ? 0 : -1;\n return this.group.firstEnabled() === this ? 0 : -1;\n });\n\n ngOnInit(): void {\n this.group.register(this);\n }\n ngOnDestroy(): void {\n this.group.unregister(this);\n }\n\n /** Focus this radio's host element (used by the group's keyboard nav). */\n focus(): void {\n this.host.nativeElement.focus();\n }\n\n protected onClick(): void {\n if (this.isDisabled()) return;\n this.group.select(this);\n this.focus();\n }\n}\n","<span class=\"mk-radio__control\" aria-hidden=\"true\">\n <span class=\"mk-radio__dot\"></span>\n</span>\n<span class=\"mk-radio__label\"><ng-content /></span>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * Switch — a toggle with `role=\"switch\"` and an animated knob. Operable with\n * Space/Enter, projects its label, and supports size + tone.\n *\n * Implements `ControlValueAccessor` with a two-way `checked` model, so it works\n * with `[(ngModel)]`, reactive forms and `[(checked)]`.\n *\n * ```html\n * <mk-switch [(ngModel)]=\"notify\">Email notifications</mk-switch>\n * <mk-switch [(checked)]=\"dark\" tone=\"success\" size=\"lg\">Dark mode</mk-switch>\n * ```\n */\n@Component({\n selector: 'mk-switch',\n templateUrl: './switch.html',\n styleUrl: './switch.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-switch',\n '[class.mk-switch--sm]': \"size() === 'sm'\",\n '[class.mk-switch--md]': \"size() === 'md'\",\n '[class.mk-switch--lg]': \"size() === 'lg'\",\n '[class.mk-switch--checked]': 'checked()',\n '[class.mk-switch--disabled]': 'isDisabled()',\n '[attr.data-tone]': 'tone()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSwitch),\n multi: true,\n },\n ],\n})\nexport class MkSwitch implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n\n /** Two-way checked (on/off) state. */\n readonly checked = model(false);\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Control size. */\n readonly size = input<MkSize>('md');\n /** Semantic color tone for the \"on\" track. */\n readonly tone = input<MkTone>('primary');\n /** Accessible label when no text content is projected. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n readonly labelId = mkUniqueId('mk-switch-label');\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly labelledBy = computed(() => {\n if (this.ariaLabel()) return null;\n return this.field?.labelId ?? this.labelId;\n });\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.checked.update((v) => !v);\n this.onChange(this.checked());\n this.onTouched();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n this.toggle();\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<button\n type=\"button\"\n class=\"mk-switch__control\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onTouched()\"\n>\n <span class=\"mk-switch__track\">\n <span class=\"mk-switch__thumb\"></span>\n </span>\n</button>\n<span class=\"mk-switch__label\" [id]=\"labelId\" (click)=\"toggle()\">\n <ng-content />\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n type OnDestroy,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * Slider — a single-value range slider with `role=\"slider\"`, a filled track and\n * a draggable thumb (pointer events). Fully keyboard operable: Arrow keys step,\n * Page Up/Down take larger steps, Home/End jump to the bounds.\n *\n * Implements `ControlValueAccessor` with a two-way `value` model, so it works\n * with `[(ngModel)]`, reactive forms and `[(value)]`.\n *\n * ```html\n * <mk-slider [min]=\"0\" [max]=\"100\" [step]=\"5\" [(ngModel)]=\"volume\" />\n * ```\n */\n@Component({\n selector: 'mk-slider',\n templateUrl: './slider.html',\n styleUrl: './slider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-slider',\n '[class.mk-slider--sm]': \"size() === 'sm'\",\n '[class.mk-slider--md]': \"size() === 'md'\",\n '[class.mk-slider--lg]': \"size() === 'lg'\",\n '[class.mk-slider--disabled]': 'isDisabled()',\n '[attr.data-tone]': 'tone()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSlider),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkSlider),\n multi: true,\n },\n ],\n})\nexport class MkSlider implements ControlValueAccessor, Validator, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly trackRef = viewChild<ElementRef<HTMLElement>>('track');\n private readonly thumbRef = viewChild<ElementRef<HTMLElement>>('thumb');\n\n /** Minimum value. */\n readonly min = input(0, { transform: numberAttribute });\n /** Maximum value. */\n readonly max = input(100, { transform: numberAttribute });\n /** Step increment (must be > 0). */\n readonly step = input(1, { transform: numberAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Control size (track/thumb thickness). */\n readonly size = input<MkSize>('md');\n /** Semantic color tone for the filled track + thumb. */\n readonly tone = input<MkTone>('primary');\n /** Accessible label for the thumb. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n /** Two-way current value. */\n readonly value = model<number>(0);\n\n private dragging = false;\n /** Element the drag listeners are attached to (only while dragging). */\n private dragTarget: HTMLElement | null = null;\n /** Track geometry cached at pointerdown — no layout reads per move. */\n private dragRect: DOMRect | null = null;\n /** Text direction cached at pointerdown (keyboard keeps live reads). */\n private dragRtl = false;\n private readonly cvaDisabled = signal(false);\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => {\n if (this.ariaLabel()) return null;\n return this.field?.labelId ?? null;\n });\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Fill percentage (0–100) for the track + thumb position. */\n protected readonly percent = computed(() => {\n const span = this.max() - this.min();\n if (span <= 0) return 0;\n const ratio = (this.value() - this.min()) / span;\n return Math.min(100, Math.max(0, ratio * 100));\n });\n\n private get bigStep(): number {\n return Math.max(this.step(), (this.max() - this.min()) / 10);\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n // In RTL the track is mirrored, so Left/Right must follow the visual\n // direction (Right moves the thumb right → towards min). Up/Down,\n // Page and Home/End are direction-agnostic.\n const horizontal = this.isRtl() ? -this.step() : this.step();\n let next = this.value();\n switch (e.key) {\n case 'ArrowRight':\n next += horizontal;\n break;\n case 'ArrowUp':\n next += this.step();\n break;\n case 'ArrowLeft':\n next -= horizontal;\n break;\n case 'ArrowDown':\n next -= this.step();\n break;\n case 'PageUp':\n next += this.bigStep;\n break;\n case 'PageDown':\n next -= this.bigStep;\n break;\n case 'Home':\n next = this.min();\n break;\n case 'End':\n next = this.max();\n break;\n default:\n return;\n }\n e.preventDefault();\n this.setValue(next, true);\n }\n\n protected onPointerDown(event: Event): void {\n if (this.isDisabled()) return;\n const e = event as PointerEvent;\n const track = this.trackRef()?.nativeElement;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n if (rect.width <= 0) return;\n // Cache the geometry + direction for the whole gesture: pointer capture\n // means no scrolling can happen mid-drag, so one layout read suffices.\n this.dragRect = rect;\n this.dragRtl = this.isRtl();\n this.dragging = true;\n const target = (e.currentTarget as HTMLElement | null) ?? track;\n this.dragTarget = target;\n try {\n target.setPointerCapture(e.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n // Capture routes the pointer stream to this element for the drag only —\n // no document-wide listeners outliving the gesture.\n target.addEventListener('pointermove', this.onDragMove);\n target.addEventListener('pointerup', this.onDragEnd);\n target.addEventListener('pointercancel', this.onDragEnd);\n this.thumbRef()?.nativeElement.focus();\n this.updateFromClientX(e.clientX);\n event.preventDefault();\n }\n\n private readonly onDragMove = (event: PointerEvent): void => {\n if (!this.dragging) return;\n this.updateFromClientX(event.clientX);\n };\n\n private readonly onDragEnd = (): void => {\n this.endDrag(true);\n };\n\n /** Blur while dragging releases the drag (template binding). */\n protected onPointerUp(): void {\n this.endDrag(true);\n }\n\n private endDrag(markTouched: boolean): void {\n const target = this.dragTarget;\n if (target) {\n target.removeEventListener('pointermove', this.onDragMove);\n target.removeEventListener('pointerup', this.onDragEnd);\n target.removeEventListener('pointercancel', this.onDragEnd);\n }\n this.dragTarget = null;\n this.dragRect = null;\n if (!this.dragging) return;\n this.dragging = false;\n if (markTouched) this.onTouched();\n }\n\n ngOnDestroy(): void {\n this.endDrag(false);\n }\n\n /** Whether the rendered track is right-to-left. */\n private isRtl(): boolean {\n const track = this.trackRef()?.nativeElement;\n return (\n !!track &&\n typeof getComputedStyle === 'function' &&\n getComputedStyle(track).direction === 'rtl'\n );\n }\n\n /** Pointer-drag path only — uses the geometry cached at pointerdown. */\n private updateFromClientX(clientX: number): void {\n const rect = this.dragRect;\n if (!rect || rect.width <= 0) return;\n const offset = this.dragRtl ? rect.right - clientX : clientX - rect.left;\n const ratio = Math.min(1, Math.max(0, offset / rect.width));\n const raw = this.min() + ratio * (this.max() - this.min());\n this.setValue(raw);\n }\n\n private setValue(raw: number, markTouched = false): void {\n const clamped = this.clampSnap(raw);\n if (clamped !== this.value()) {\n this.value.set(clamped);\n this.onChange(clamped);\n }\n if (markTouched) this.onTouched();\n }\n\n private clampSnap(raw: number): number {\n const step = this.step() > 0 ? this.step() : 1;\n const min = this.min();\n const max = this.max();\n const snapped = Math.round((raw - min) / step) * step + min;\n return Math.min(max, Math.max(min, Number(snapped.toFixed(6))));\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n const num = typeof value === 'number' ? value : Number(value);\n this.value.set(this.clampSnap(Number.isFinite(num) ? num : this.min()));\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `min` / `max` for a value outside the track. The slider clamps\n * what the user can produce, so this only fires for a value written in\n * from the model side.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'number' || !Number.isFinite(v)) return null;\n const min = this.min();\n if (v < min) return { min: { min, actual: v } };\n const max = this.max();\n if (v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #track class=\"mk-slider__track\" (pointerdown)=\"onPointerDown($event)\">\n <div class=\"mk-slider__fill\" [style.width.%]=\"percent()\"></div>\n <div\n #thumb\n class=\"mk-slider__thumb\"\n role=\"slider\"\n [style.inset-inline-start.%]=\"percent()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuetext]=\"value()\"\n aria-orientation=\"horizontal\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onPointerUp()\"\n ></div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\n\n/** Whether `value` is a valid `#rgb` / `#rrggbb` hex color. */\nfunction isHex(value: string): boolean {\n return /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(value);\n}\n\n/** Expand `#rgb` to `#rrggbb` (native color inputs need 6 digits). */\nfunction toLongHex(value: string): string {\n if (/^#[0-9a-f]{3}$/i.test(value)) {\n const [, r, g, b] = value;\n return `#${r}${r}${g}${g}${b}${b}`;\n }\n return value;\n}\n\n/**\n * ColorPicker — a compact color control: a live swatch that opens the native OS\n * picker, an editable hex field and an optional row of preset swatches.\n * `ControlValueAccessor` + two-way `value` model over a hex string.\n *\n * ```html\n * <mk-color-picker [(value)]=\"brand\" [swatches]=\"palette\" />\n * ```\n */\n@Component({\n selector: 'mk-color-picker',\n templateUrl: './color-picker.html',\n styleUrl: './color-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-color-picker',\n '[class.mk-color-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-color-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-color-picker--invalid]': 'isInvalid()',\n '[class.mk-color-picker--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkColorPicker),\n multi: true,\n },\n ],\n})\nexport class MkColorPicker implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly nativeRef =\n viewChild<ElementRef<HTMLInputElement>>('native');\n\n /** Two-way hex color value. */\n readonly value = model('#000000');\n /** Preset swatches (hex strings). */\n readonly swatches = input<readonly string[]>([]);\n /** Show the editable hex text field. */\n readonly hexInput = input(true, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Accessible label for the swatch trigger. */\n readonly ariaLabel = input(this.i18n.chooseColor);\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-color');\n /** Uncommitted text in the hex field (may be partial while typing). */\n protected readonly hexText = signal('#000000');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n // Mirror the value into the hex field, incl. external / two-way updates.\n effect(() => this.hexText.set(this.value()));\n }\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly nativeValue = computed(() => toLongHex(this.value()));\n\n /** Open the OS color picker (via the hidden native input). */\n protected openNative(): void {\n if (this.isDisabled()) return;\n this.nativeRef()?.nativeElement.click();\n }\n\n protected onNativeInput(event: Event): void {\n this.setValue((event.target as HTMLInputElement).value);\n }\n\n protected onHexInput(event: Event): void {\n this.hexText.set((event.target as HTMLInputElement).value);\n }\n\n protected commitHex(): void {\n let text = this.hexText().trim();\n if (text && !text.startsWith('#')) text = `#${text}`;\n if (isHex(text)) {\n this.setValue(text);\n } else {\n this.hexText.set(this.value()); // revert invalid entry\n }\n this.onTouched();\n }\n\n protected pickSwatch(hex: string): void {\n if (this.isDisabled()) return;\n this.setValue(hex);\n }\n\n private setValue(hex: string): void {\n const next = hex.toLowerCase();\n this.value.set(next);\n this.hexText.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n const v = value ?? '#000000';\n this.value.set(v);\n this.hexText.set(v);\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div class=\"mk-color-picker__field\">\n <button\n type=\"button\"\n class=\"mk-color-picker__swatch\"\n [id]=\"inputId\"\n [style.background-color]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel() + ': ' + value()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (click)=\"openNative()\"\n ></button>\n\n <input\n #native\n type=\"color\"\n class=\"mk-color-picker__native\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"nativeValue()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onNativeInput($event)\"\n />\n\n @if (hexInput()) {\n <input\n type=\"text\"\n class=\"mk-color-picker__hex\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [value]=\"hexText()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"i18n.hexValue\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onHexInput($event)\"\n (blur)=\"commitHex()\"\n (keydown.enter)=\"commitHex()\"\n />\n }\n</div>\n\n@if (swatches().length) {\n <div class=\"mk-color-picker__swatches\" role=\"group\" [attr.aria-label]=\"i18n.presetColors\">\n @for (s of swatches(); track s) {\n <button\n type=\"button\"\n class=\"mk-color-picker__preset\"\n [class.mk-color-picker__preset--active]=\"s.toLowerCase() === value()\"\n [style.background-color]=\"s\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"s\"\n [attr.aria-pressed]=\"s.toLowerCase() === value()\"\n (click)=\"pickSwatch(s)\"\n ></button>\n }\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n type OnDestroy,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\n\n/** A `[low, high]` value pair. */\nexport type MkRange = [number, number];\n\n/**\n * RangeSlider — a two-thumb slider selecting a `[low, high]` range. Each thumb is\n * a `role=\"slider\"` (Arrow / Page / Home / End keys); the thumbs can't cross.\n * Implements `ControlValueAccessor` over a `[number, number]` tuple with a\n * two-way `value` model.\n *\n * ```html\n * <mk-range-slider [min]=\"0\" [max]=\"1000\" [step]=\"10\" [(value)]=\"priceRange\" />\n * ```\n */\n@Component({\n selector: 'mk-range-slider',\n templateUrl: './range-slider.html',\n styleUrl: './range-slider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-range-slider',\n '[class.mk-range-slider--sm]': \"size() === 'sm'\",\n '[class.mk-range-slider--lg]': \"size() === 'lg'\",\n '[class.mk-range-slider--disabled]': 'isDisabled()',\n '[class.mk-range-slider--invalid]': 'isInvalid()',\n '[attr.data-tone]': 'tone()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkRangeSlider),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkRangeSlider),\n multi: true,\n },\n ],\n})\nexport class MkRangeSlider implements ControlValueAccessor, Validator, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly trackRef = viewChildren<ElementRef<HTMLElement>>('track');\n private readonly thumbRefs = viewChildren<ElementRef<HTMLElement>>('thumb');\n\n /** Minimum value. */\n readonly min = input(0, { transform: numberAttribute });\n /** Maximum value. */\n readonly max = input(100, { transform: numberAttribute });\n /** Step increment (must be > 0). */\n readonly step = input(1, { transform: numberAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. */\n readonly size = input<MkSize>('md');\n /** Semantic tone for the filled range + thumbs. */\n readonly tone = input<MkTone>('primary');\n /** Accessible label for the low thumb. */\n readonly minLabel = input(this.i18n.minimum);\n /** Accessible label for the high thumb. */\n readonly maxLabel = input(this.i18n.maximum);\n /** Two-way `[low, high]` value. */\n readonly value = model<MkRange>([0, 100]);\n\n private activeThumb: 0 | 1 | null = null;\n /** Element the drag listeners are attached to (only while dragging). */\n private dragTarget: HTMLElement | null = null;\n /** Track geometry cached at pointerdown — no layout reads per move. */\n private dragRect: DOMRect | null = null;\n /** Text direction cached at pointerdown (keyboard keeps live reads). */\n private dragRtl = false;\n private readonly cvaDisabled = signal(false);\n private onChange: (value: MkRange) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly low = computed(() => this.value()[0]);\n protected readonly high = computed(() => this.value()[1]);\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n\n private pct(v: number): number {\n const span = this.max() - this.min();\n if (span <= 0) return 0;\n return Math.min(100, Math.max(0, ((v - this.min()) / span) * 100));\n }\n\n protected readonly lowPercent = computed(() => this.pct(this.low()));\n protected readonly highPercent = computed(() => this.pct(this.high()));\n\n private get bigStep(): number {\n return Math.max(this.step(), (this.max() - this.min()) / 10);\n }\n\n protected onKeydown(thumb: 0 | 1, event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const current = this.value()[thumb];\n // In RTL the track is mirrored, so Left/Right must follow the visual\n // direction (Right moves the thumb right → towards min). Up/Down,\n // Page and Home/End are direction-agnostic.\n const horizontal = this.isRtl() ? -this.step() : this.step();\n let next = current;\n switch (e.key) {\n case 'ArrowRight':\n next += horizontal;\n break;\n case 'ArrowUp':\n next += this.step();\n break;\n case 'ArrowLeft':\n next -= horizontal;\n break;\n case 'ArrowDown':\n next -= this.step();\n break;\n case 'PageUp':\n next += this.bigStep;\n break;\n case 'PageDown':\n next -= this.bigStep;\n break;\n case 'Home':\n next = thumb === 0 ? this.min() : this.low();\n break;\n case 'End':\n next = thumb === 1 ? this.max() : this.high();\n break;\n default:\n return;\n }\n e.preventDefault();\n this.setThumb(thumb, next, true);\n }\n\n protected onPointerDown(event: Event): void {\n if (this.isDisabled()) return;\n const e = event as PointerEvent;\n const track = this.trackRef()[0]?.nativeElement;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n if (rect.width <= 0) return;\n // Cache the geometry + direction for the whole gesture: pointer capture\n // means no scrolling can happen mid-drag, so one layout read suffices.\n this.dragRect = rect;\n this.dragRtl = this.isRtl();\n const raw = this.rawFromClientX(e.clientX);\n if (raw == null) {\n this.dragRect = null;\n return;\n }\n // Grab whichever thumb is closer to the pointer.\n const thumb: 0 | 1 =\n Math.abs(raw - this.low()) <= Math.abs(raw - this.high()) ? 0 : 1;\n this.activeThumb = thumb;\n const target = (e.currentTarget as HTMLElement | null) ?? track;\n this.dragTarget = target;\n try {\n target.setPointerCapture(e.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n // Capture routes the pointer stream to this element for the drag only —\n // no document-wide listeners outliving the gesture.\n target.addEventListener('pointermove', this.onDragMove);\n target.addEventListener('pointerup', this.onDragEnd);\n target.addEventListener('pointercancel', this.onDragEnd);\n this.thumbRefs()[thumb]?.nativeElement.focus();\n this.setThumb(thumb, raw);\n event.preventDefault();\n }\n\n private readonly onDragMove = (event: PointerEvent): void => {\n if (this.activeThumb == null) return;\n const raw = this.rawFromClientX(event.clientX);\n if (raw != null) this.setThumb(this.activeThumb, raw);\n };\n\n private readonly onDragEnd = (): void => {\n this.endDrag(true);\n };\n\n private endDrag(markTouched: boolean): void {\n const target = this.dragTarget;\n if (target) {\n target.removeEventListener('pointermove', this.onDragMove);\n target.removeEventListener('pointerup', this.onDragEnd);\n target.removeEventListener('pointercancel', this.onDragEnd);\n }\n this.dragTarget = null;\n this.dragRect = null;\n if (this.activeThumb == null) return;\n this.activeThumb = null;\n if (markTouched) this.onTouched();\n }\n\n ngOnDestroy(): void {\n this.endDrag(false);\n }\n\n /** Whether the rendered track is right-to-left. */\n private isRtl(): boolean {\n const track = this.trackRef()[0]?.nativeElement;\n return (\n !!track &&\n typeof getComputedStyle === 'function' &&\n getComputedStyle(track).direction === 'rtl'\n );\n }\n\n /** Pointer-drag path only — uses the geometry cached at pointerdown. */\n private rawFromClientX(clientX: number): number | null {\n const rect = this.dragRect;\n if (!rect || rect.width <= 0) return null;\n const offset = this.dragRtl ? rect.right - clientX : clientX - rect.left;\n const ratio = Math.min(1, Math.max(0, offset / rect.width));\n return this.min() + ratio * (this.max() - this.min());\n }\n\n private setThumb(thumb: 0 | 1, raw: number, markTouched = false): void {\n const snapped = this.clampSnap(raw);\n const [lo, hi] = this.value();\n // Keep low ≤ high (no crossing).\n const next: MkRange =\n thumb === 0 ? [Math.min(snapped, hi), hi] : [lo, Math.max(snapped, lo)];\n if (next[0] !== lo || next[1] !== hi) {\n this.value.set(next);\n this.onChange(next);\n }\n if (markTouched) this.onTouched();\n }\n\n private clampSnap(raw: number): number {\n const step = this.step() > 0 ? this.step() : 1;\n const min = this.min();\n const snapped = Math.round((raw - min) / step) * step + min;\n return Math.min(this.max(), Math.max(min, Number(snapped.toFixed(6))));\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: MkRange | null): void {\n if (Array.isArray(value) && value.length === 2) {\n const lo = this.clampSnap(Number(value[0]));\n const hi = this.clampSnap(Number(value[1]));\n this.value.set([Math.min(lo, hi), Math.max(lo, hi)]);\n }\n }\n registerOnChange(fn: (value: MkRange) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `min` / `max` for either endpoint falling outside the track. The\n * slider clamps what the user can produce, so this only fires for a range\n * written in from the model side.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!Array.isArray(v) || v.length !== 2) return null;\n const lo = Number(v[0]);\n const hi = Number(v[1]);\n if (!Number.isFinite(lo) || !Number.isFinite(hi)) return null;\n const min = this.min();\n if (lo < min) return { min: { min, actual: lo } };\n const max = this.max();\n if (hi > max) return { max: { max, actual: hi } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div class=\"mk-range-slider__track-wrap\" (pointerdown)=\"onPointerDown($event)\">\n <div #track class=\"mk-range-slider__track\">\n <div\n class=\"mk-range-slider__fill\"\n [style.inset-inline-start.%]=\"lowPercent()\"\n [style.width.%]=\"highPercent() - lowPercent()\"\n ></div>\n </div>\n\n <div\n #thumb\n class=\"mk-range-slider__thumb\"\n role=\"slider\"\n [attr.tabindex]=\"isDisabled() ? null : 0\"\n [style.inset-inline-start.%]=\"lowPercent()\"\n [attr.aria-label]=\"minLabel()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"high()\"\n [attr.aria-valuenow]=\"low()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (keydown)=\"onKeydown(0, $event)\"\n ></div>\n\n <div\n #thumb\n class=\"mk-range-slider__thumb\"\n role=\"slider\"\n [attr.tabindex]=\"isDisabled() ? null : 0\"\n [style.inset-inline-start.%]=\"highPercent()\"\n [attr.aria-label]=\"maxLabel()\"\n [attr.aria-valuemin]=\"low()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"high()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (keydown)=\"onKeydown(1, $event)\"\n ></div>\n</div>\n","/**\n * FORM COMPONENTS group barrel for @mk-kit/ui.\n * Re-exports every public component and type in the form group.\n */\nexport * from './form-field';\nexport * from './form-error-summary';\nexport * from './input';\nexport * from './input-group';\nexport * from './submit-input';\nexport * from './i18n-input';\nexport * from './select';\nexport * from './listbox';\nexport * from './cascader';\nexport * from './autocomplete';\nexport * from './mention';\nexport * from './multi-select';\nexport * from './tag-input';\nexport * from './password-input';\nexport * from './transfer-list';\nexport * from './repeater';\nexport * from './tree-select';\nexport * from './file-upload';\nexport * from './code-editor';\nexport * from './rating';\nexport * from './number-input';\nexport * from './numeric-keypad';\nexport * from './on-screen-keyboard';\nexport * from './otp';\nexport * from './phone-input';\nexport * from './postal-code-input';\nexport * from './currency-input';\nexport * from './card-number-input';\nexport * from './iban-input';\nexport * from './tax-id-input';\nexport * from './signature-pad';\nexport * from './button-toggle';\n// Checkbox moved to its own entry (`@mk-kit/ui/checkbox`) so non-forms\n// consumers (mk-table row selection) don't drag the whole forms group;\n// re-exported here for backward compatibility.\nexport * from '@mk-kit/ui/checkbox';\nexport * from './radio';\nexport * from './switch';\nexport * from './slider';\nexport * from './color-picker';\nexport * from './range-slider';\n// Shared JSON/code highlighter — moved to core; re-exported for compat.\nexport { mkHighlight } from '@mk-kit/ui/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DG;MA6BU,WAAW,CAAA;AACL,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IACtB,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/C,IAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE;AAC5D,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;;IAGO,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;;IAEzB,IAAI,GAAG,KAAK,CAAS,EAAE;6EAAC;AACjC;;;AAGG;IACM,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;AAC3C;;;AAGG;IACM,aAAa,GAAG,KAAK,CAAyB,IAAI;sFAAC;AAC5D;;;;AAIG;IACM,OAAO,GAAG,KAAK,CAAiC,SAAS;gFAAC;AACnE;;;AAGG;IACM,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACjE;;;AAGG;IACM,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;AACnC;;;;;AAKG;IACM,aAAa,GAAG,KAAK,CAAkB,KAAK;sFAAC;AACtD;;;;;AAKG;IACM,KAAK,GAAG,KAAK,CAAwB,IAAI;8EAAC;AAElC,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;;IAGlD,SAAS,GAAG,YAAY,CAAC,SAAS,iFAAI,WAAW,EAAE,IAAI,EAAA,CAAG;;IAE1D,WAAW,GAAG,YAAY,CAAC,UAAU,mFAAI,WAAW,EAAE,IAAI,EAAA,CAAG;AAE9E;;;;AAIG;AACc,IAAA,UAAU,GAAG,QAAQ,CAAkC,MAAK;AAC3E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,QAAQ;YAAE,OAAO,QAAQ,EAAE;AAC/B,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE;IACpC,CAAC;mFAAC;;IAGiB,OAAO,GAAG,MAAM,CAAC,KAAK;gFAAC;;IAEzB,QAAQ,GAAG,MAAM,CAAgB,IAAI;iFAAC;;AAEpC,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QAC1C,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;QAC/C,MAAM,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3E,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,KAAK;AACvC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;AACzC,QAAA,OAAO,IAAI;IACb,CAAC;iFAAC;;AAGQ,IAAA,YAAY,CAAC,MAA0B,EAAA;QAC/C,MAAM,EAAE,GAAG,MAAiC;QAC5C,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ;YAAE;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7B;AAEA;;;;AAIG;IACc,WAAW,GAAG,MAAM,CAAC,CAAC;oFAAC;;AAG/B,IAAA,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC;;AAElC,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,QAAQ;;AAEnC,IAAA,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,OAAO;;AAEjC,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,QAAQ;AAE5C,IAAA,WAAA,GAAA;QACE,eAAe,CAAC,MAAK;AACnB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAmB,yBAAyB,CAAC;AAC7F,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAC/B,QAAA,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,GAAG,GAAwB,IAAI;;;;AAKnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ;QAC1E,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI;QAEjD,MAAM,CAAC,MAAK;;;AAGV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAC9B,kBAAE;AACF,kBAAG,IAAI,CAAC,SAAS,EAAE,EAAE,OAAuD;YAC9E,GAAG,EAAE,WAAW,EAAE;AAClB,YAAA,GAAG,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI;AAC/D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;YAChC,GAAG,EAAE,WAAW,EAAE;YAClB,SAAS,EAAE,WAAW,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;;AAGiB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACzC,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,QACE,IAAI,CAAC,eAAe,EAAE,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK;IAE1E,CAAC;kFAAC;;AAGe,IAAA,SAAS,GAAG,QAAQ,CAAgB,MAAK;AACxD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,IAAI;AACvE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,MAAM,OAAO,GACX,IAAI,KAAK,QAAQ;iBAChB,IAAI,KAAK,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;AACvE,YAAA,IAAI,CAAC,OAAO;AAAE,gBAAA,OAAO,IAAI;YACzB,OAAO,oBAAoB,CACzB,KAAK,CAAC,MAAM,EAAE,EACd,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS,CAClC;QACH;QAEA,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO;QACrE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAEjE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,MAAM,OAAO,GACX,IAAI,KAAK,QAAQ;AACjB,aAAC,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;YACrE,IAAI,CAAC,SAAS,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAEzB,QAAA,OAAO,mBAAmB,CACxB,OAAO,CAAC,MAAM,EACd,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS,CAClC;IACH,CAAC;kFAAC;;AAGO,IAAA,SAAS,GAAG,QAAQ,CAC3B,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;kFACvC;;IAGQ,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;iFAAC;;AAG7C,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,IAAI;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;QAClC,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK;IAC9E,CAAC;mFAAC;;AAGO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,IAAI;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;QAClC,IAAI,CAAC,WAAW,EAAE;QAClB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK;IACrD,CAAC;mFAAC;;AAGO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;oFAAC;AAExE;;;AAGG;AACM,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QACnC,MAAM,GAAG,GAAa,EAAE;QACxB,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3C,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IAC1C,CAAC;oFAAC;uGA7NS,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,WAAA,EAAA,6BAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAPX;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,WAAW,CAAC;AAC3C,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA2DyC,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEP,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrLxD,i9BA4BA,EAAA,MAAA,EAAA,CAAA,o4EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FD8Fa,WAAW,EAAA,UAAA,EAAA,CAAA;kBA5BvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,2BAA2B,EAAE,iBAAiB;AAC9C,wBAAA,2BAA2B,EAAE,iBAAiB;AAC9C,wBAAA,2BAA2B,EAAE,iBAAiB;AAC9C,wBAAA,gCAAgC,EAAE,YAAY;AAC9C,wBAAA,iCAAiC,EAAE,cAAc;AACjD,wBAAA,iCAAiC,EAAE,cAAc;AACjD,wBAAA,8BAA8B,EAAE,6BAA6B;AAC7D,wBAAA,gCAAgC,EAAE,WAAW;AAC7C,wBAAA,+BAA+B,EAAE,YAAY;AAC7C,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,YAAY,EAAE,oBAAoB;AAClC,wBAAA,SAAS,EAAE,6BAA6B;AACxC,wBAAA,UAAU,EAAE,6BAA6B;qBAC1C,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC;AAC3C,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,i9BAAA,EAAA,MAAA,EAAA,CAAA,o4EAAA,CAAA,EAAA;AA2DyC,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,SAAS,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAE9B,UAAU,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE/I/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDG;MAeU,kBAAkB,CAAA;AACZ,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IACtB,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/C,IAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE;AAC5D,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;AAEF;;;AAGG;IACM,MAAM,GAAG,KAAK,CAAyB,EAAE;+EAAC;;IAE1C,IAAI,GAAG,KAAK,CAAyB,IAAI;6EAAC;AACnD;;;AAGG;IACM,KAAK,GAAG,KAAK,CAAwB,IAAI;8EAAC;;IAE1C,MAAM,GAAG,KAAK,CAAmC,EAAE;+EAAC;;IAEpD,aAAa,GAAG,KAAK,CAAyB,IAAI;sFAAC;;IAEnD,MAAM,GAAG,KAAK,CAAsB,QAAQ;+EAAC;;AAE7C,IAAA,YAAY,GAAG,KAAK,CAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB;qFAAC;AAClE;;;;AAIG;IACM,SAAS,GAAG,KAAK,CAAC,IAAI,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,kBAAkB,CAAA,MAAA,CAAQ;;IAG7D,QAAQ,GAAG,MAAM,CAAC,CAAC;iFAAC;AAErC,IAAA,WAAA,GAAA;QACE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,GAAG,GAAwB,IAAI;AAEnC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAK;AACpB,YAAA,IAAI,EAAE;;;AAGN,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,eAAe,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;YACnD;AACF,QAAA,CAAC;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ;QAC1E,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI;;;;QAKrD,IAAI,UAAU,GAA2B,IAAI;QAC7C,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAAE;YACnB,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;AACpD,YAAA,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAClD,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,GAAG,EAAE,WAAW,EAAE;AAClB,YAAA,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI;AACjD,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;YAChC,GAAG,EAAE,WAAW,EAAE;YAClB,SAAS,EAAE,WAAW,EAAE;AACxB,YAAA,UAAU,EAAE,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrD,QAAA,CAAC,CAAC;IACJ;;AAGiB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACzC,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,QACE,IAAI,CAAC,eAAe,EAAE,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK;IAE1E,CAAC;kFAAC;AAEF;;;;AAIG;AACc,IAAA,aAAa,GAAG,QAAQ,CAEvC,MAAK;AACL,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,MAAM,IAAI,GAAG,KAAK,EAAE;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,QAAQ;AAC9C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;QAC9B,MAAM,GAAG,GAA0D,EAAE;QAErE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrC,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,EAAE;AAC7B,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE;AAC1D,YAAA,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBAAE;AACrC,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACd,YAAA,MAAM,OAAO,GAAG,oBAAoB,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;AAC5E,YAAA,IAAI,CAAC,OAAO;gBAAE;YACd,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;AAClC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI;AAC7D,YAAA,MAAM,OAAO,GAAG,OAAO,EAAE,EAAE,IAAI,IAAI;YACnC,GAAG,CAAC,IAAI,CAAC;AACP,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,CAAA,EAAG,KAAK,KAAK,OAAO,CAAA,CAAE,GAAG,OAAO,EAAE;gBACrE,OAAO;AACR,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,GAAG;IACZ,CAAC;sFAAC;;AAGe,IAAA,UAAU,GAAG,QAAQ,CAAyB,MAAK;QAClE,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,EAAE;AAE9D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS;QACnD,MAAM,GAAG,GAAkB,EAAE;AAE7B,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;AAC/C,YAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE;AAC7D,YAAA,MAAM,OAAO,GAAG,mBAAmB,CACjC,OAAO,CAAC,MAAM,EACd,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB,SAAS,CACV;AACD,YAAA,IAAI,CAAC,OAAO;gBAAE;YACd,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;YAClC,GAAG,CAAC,IAAI,CAAC;AACP,gBAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAC9B,gBAAA,OAAO,EAAE,KAAK,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,GAAG,OAAO;AAClD,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,GAAG;IACZ,CAAC;mFAAC;;IAGiB,WAAW,GAAG,QAAQ,CAAyB,MAChE,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;oFACzD;;AAGkB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC;kFAAC;;IAG5E,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;IACvD;;IAGU,UAAU,CAAC,KAAY,EAAE,OAAe,EAAA;QAChD,MAAM,MAAM,GACV,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,OAAO;AACtE,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CACzB,CAAA,kBAAA,EAAqB,SAAS,CAAC,OAAO,CAAC,CAAA,EAAA,CAAI,CAC5C;AACH,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,CAAC,cAAc,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChE,QAAA,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACnD;AAEA;;;;;AAKG;AACK,IAAA,UAAU,CAAC,IAAY,EAAA;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CACpC,CAAA,kBAAA,EAAqB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAA,EAAA,CAAI,CAClE;AACD,QAAA,OAAO,EAAE,EAAE,EAAE,IAAI,IAAI;IACvB;uGAhMW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,w1CCzG/B,sfAeA,EAAA,MAAA,EAAA,CAAA,i9BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FD0Fa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,mBAGhB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,oBAAoB,EAAA,IAAA,EACxB;AACJ,wBAAA,KAAK,EAAE,uBAAuB;AAC9B,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,eAAe,EAAE,yBAAyB;AAC1C,wBAAA,wBAAwB,EAAE,8BAA8B;AACzD,qBAAA,EAAA,QAAA,EAAA,sfAAA,EAAA,MAAA,EAAA,CAAA,i9BAAA,CAAA,EAAA;;AAqMH;AACA,UAAU,WAAW,CACnB,OAAwB,EACxB,IAAI,GAAG,EAAE,EAAA;AAET,IAAA,IAAI,OAAO,YAAY,SAAS,EAAE;AAChC,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3D,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,GAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG,CAAC;QAC1D;IACF;AAAO,SAAA,IAAI,OAAO,YAAY,SAAS,EAAE;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,YAAA,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA,EAAG,IAAI,IAAI,CAAC,CAAA,CAAE,CAAC;QACzD;IACF;SAAO,IAAI,IAAI,EAAE;AACf,QAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;AACF;AAEA;;;;AAIG;AACH,SAAS,eAAe,CACtB,IAAiC,EACjC,MAAmC,EAAA;AAEnC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE;AAC5B,IAAA,MAAM,IAAI,GAAG,CAAC,IAAoB,EAAE,IAAY,KAAmB;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,EAAE;AACpB,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AACxC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;AAC3B,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QACpD,MAAM,QAAQ,GAAG,IAA6D;QAC9E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;YAC3B,IAAI,OAAO,KAAK,KAAK,UAAU;gBAAE;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,GAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG,CAAC;YACxD,IAAI,KAAK,KAAK,IAAI;AAAE,gBAAA,OAAO,KAAK;QAClC;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAsC,EAAE,EAAE,CAAC;AAC9D;AAEA;AACA,SAAS,SAAS,CAAC,KAAa,EAAA;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AACxC;AAEA;AACA,SAAS,SAAS,CAAC,EAAe,EAAA;AAChC,IAAA,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC,IAAI,oCAAoC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AAC7E,QAAA,OAAO,EAAE;IACX;AACA,IAAA,OAAO,EAAE,CAAC,aAAa,CACrB,2EAA2E,CAC5E;AACH;;AE3VA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAeU,YAAY,CAAA;IACN,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAGvD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGxD,aAAa,GAAG,QAAQ,CAAS,MACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;;IAEQ,SAAS,GAAG,QAAQ,CAC3B,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFAC1D;IACkB,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC;mFAC7D;uGApBU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,gxBCrDzB,0PACA,EAAA,MAAA,EAAA,CAAA,sxCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDoDa,YAAY,EAAA,UAAA,EAAA,CAAA;kBAdxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,4BAA4B,EAAE,0BAA0B;AACxD,wBAAA,4BAA4B,EAAE,0BAA0B;AACxD,wBAAA,4BAA4B,EAAE,0BAA0B;AACxD,wBAAA,iCAAiC,EAAE,aAAa;AAChD,wBAAA,kCAAkC,EAAE,cAAc;AACnD,qBAAA,EAAA,QAAA,EAAA,0PAAA,EAAA,MAAA,EAAA,CAAA,sxCAAA,CAAA,EAAA;;;AEnCH;;;;;;;;;;;;;;;;;;;;AAoBG;MA8BU,OAAO,CAAA;IACD,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;IACrC,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAChD,IAAA,IAAI,GACnB,MAAM,CAAqD,UAAU,CAAC;IACvD,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC;;AAGpD,IAAA,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;;IAGhC,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAE7C,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC;AACH,UAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACjB,WAAG,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;sFACjD;AACkB,IAAA,SAAS,GAAG,QAAQ,CACrC,MACE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;SACrC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;SAChC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,KAAK,CAAC;kFACrC;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK;mFAAC;AAC9D,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS;mFAC9C;AACkB,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFACxC;AAEO,IAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC1C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;;IAElC,SAAS,GAAG,KAAK;AAEf,IAAA,OAAO,CAAC,KAAY,EAAA;QAC5B,IAAI,IAAI,CAAC,SAAS;YAAE;QACpB,IAAI,CAAC,QAAQ,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;IACzD;IAEU,kBAAkB,GAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACvB;AAEU,IAAA,gBAAgB,CAAC,KAAY,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,QAAQ,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;IACzD;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;IACpE;AACA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAU;IAC/C;uGAnEW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,aAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,aAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EARP;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,OAAO,CAAC;AACtC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChEH,gFACA,EAAA,MAAA,EAAA,CAAA,opEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDiEa,OAAO,EAAA,UAAA,EAAA,CAAA;kBA7BnB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mCAAmC,EAAA,eAAA,EAG5B,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,sBAAsB,EAAE,0BAA0B;AAClD,wBAAA,sBAAsB,EAAE,0BAA0B;AAClD,wBAAA,sBAAsB,EAAE,0BAA0B;AAClD,wBAAA,2BAA2B,EAAE,aAAa;AAC1C,wBAAA,2BAA2B,EAAE,SAAS;AACtC,wBAAA,WAAW,EAAE,cAAc;AAC3B,wBAAA,qBAAqB,EAAE,qBAAqB;AAC5C,wBAAA,sBAAsB,EAAE,sBAAsB;AAC9C,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,oBAAoB,EAAE,sBAAsB;AAC5C,wBAAA,kBAAkB,EAAE,0BAA0B;AAC9C,wBAAA,QAAQ,EAAE,aAAa;qBACxB,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,aAAa,CAAC;AACtC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,gFAAA,EAAA,MAAA,EAAA,CAAA,opEAAA,CAAA,EAAA;;;AEzCH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CG;MAwBU,aAAa,CAAA;IACP,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;;AAEnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IACxB,QAAQ,GAAG,SAAS,CAA+B,OAAO;iFAAC;;IAGnE,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;AACxC;;;;AAIG;IACM,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;;IAEzB,IAAI,GAAG,KAAK,CAAS,MAAM;6EAAC;;IAE5B,YAAY,GAAG,KAAK,CAAS,KAAK;qFAAC;;IAEnC,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;;IAGzB,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAE/B,UAAU,GAAG,KAAK,CAAS,EAAE;mFAAC;;IAE9B,aAAa,GAAG,KAAK,CAAY,OAAO;sFAAC;;IAEzC,UAAU,GAAG,KAAK,CAAS,SAAS;mFAAC;;IAErC,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAClE;;;AAGG;IACM,aAAa,GAAG,KAAK,CAAC,IAAI,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG5D,SAAS,GAAG,MAAM,EAAU;IAEpB,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC5C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;;IAG/B,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,iBAAiB,CAAC;IAEtD,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;IACkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK;mFACxC;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;;IAExD,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC9D;AACkB,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFACxC;;AAGkB,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;oFAC7C;;IAEkB,SAAS,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;kFAC/D;;IAEkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE;kFAC1E;AAES,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;IAEU,MAAM,GAAA;QACd,IAAI,CAAC,SAAS,EAAE;IAClB;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAAE;;;QAGpD,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,MAAM,EAAE;IACf;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1C;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;;AAGA,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD;AACA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGAtIW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,gCAAA,EAAA,aAAA,EAAA,iCAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EARb;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxFH,29CAuDA,EAAA,MAAA,EAAA,CAAA,qgDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDkBY,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,+JAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiB7B,aAAa,EAAA,UAAA,EAAA,CAAA;kBAvBzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,QAAA,EAGjB,eAAe,EAAA,eAAA,EACR,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAA,IAAA,EACnC;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,kCAAkC,EAAE,aAAa;AACjD,wBAAA,mCAAmC,EAAE,cAAc;AACnD,wBAAA,kBAAkB,EAAE,mBAAmB;qBACxC,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,29CAAA,EAAA,MAAA,EAAA,CAAA,qgDAAA,CAAA,EAAA;sEAQmE,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEnF7E;;;;;;;;AAQG;MAYU,cAAc,CAAA;AACR,IAAA,KAAK,GAAG,MAAM,CAC7B,UAAU,CAAC,MAAM,mBAAmB,CAAC,EACrC,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;AACgB,IAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAC1C,KAAK;+EACN;;IAGQ,KAAK,GAAG,KAAK,CAAU,SAAS;8EAAC;;IAEjC,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGxD,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK;iFAAC;;IAEhE,UAAU,GAAG,QAAQ,CAC5B,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC;mFAC7D;;IAGkB,IAAI,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,GAAG,IAAI;6EACtD;;IAEkB,WAAW,GAAG,QAAQ,CAAC,MACxC,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI;oFACjD;;IAEkB,WAAW,GAAG,QAAQ,CAAC,MACxC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI;oFAChD;;AAEkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;iFAAC;IAEtE,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;IAC1B;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;IACpC;;IAGA,KAAK,GAAA;QACH,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;IACrC;uGA/CW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,omBCjC3B,mYAeA,EAAA,MAAA,EAAA,CAAA,m4DAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDkBa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAX1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,oCAAoC,EAAE,YAAY;AAClD,wBAAA,oCAAoC,EAAE,cAAc;AACrD,qBAAA,EAAA,QAAA,EAAA,mYAAA,EAAA,MAAA,EAAA,CAAA,m4DAAA,CAAA,EAAA;oEAQC,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpBT;;;;;;;;;;;;;;;;;;;AAmBG;MA8BU,mBAAmB,CAAA;AACb,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;;IAElD,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;;IAG7C,OAAO,GAAG,eAAe,CAAC,cAAc;gFAAC;;IAGzC,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,aAAa,GAAG,QAAQ,CAAS,MACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;;IAEkB,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;mFACxD;AACkB,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFACxC;;IAEQ,IAAI,GAAG,KAAK,CAAS,SAAS;6EAAC;;IAE/B,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,SAAS,GAAG,KAAK,CAAS,EAAE,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;AAE/D;;;AAGG;IACM,KAAK,GAAG,KAAK,CAAU,IAAI;8EAAC;IAEpB,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AAC3B,IAAA,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;+EAAC;AAC5B,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAE/B,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAAC;IACxD,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;;AAGgB,IAAA,YAAY,GAAG,QAAQ,CAAwB,MAAK;AACnE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,IAAI;AAClD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtE,QAAA,OAAO,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI;IAC5D,CAAC;qFAAC;;AAGF,IAAA,UAAU,CAAC,MAAsB,EAAA;AAC/B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACvD;AACA,QAAA,OAAO,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE;IAC7B;;AAGA,IAAA,WAAW,CAAC,MAAsB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;IAChD;;AAGA,IAAA,MAAM,CAAC,MAAsB,EAAA;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE;YAAE;AAC5C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;AACxC,kBAAE,CAAC,GAAI,IAAI,CAAC,KAAK,EAAgB;kBAC/B,EAAE;YACN,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;;gBAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACtB;aAAO;YACL,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,MAAM,CAAC,KAAK,EAAE;gBAAE;YACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B;IACF;IAEA,SAAS,CAAC,KAAoB,EAAE,MAAsB,EAAA;AACpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,WAAW;gBACd,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChC;AACF,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,SAAS;gBACZ,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACjC;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9B;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxC;AACF,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBACnB;AACF,YAAA;gBACE;;AAEJ,QAAA,IAAI,IAAI,IAAI,CAAC,EAAE;YACb,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;;AAElB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C;IACF;IAEQ,WAAW,CAAC,IAAY,EAAE,IAAY,EAAA;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;AACrB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,GAAG;QACvC;QACA,OAAO,CAAC,CAAC;IACX;AAEQ,IAAA,MAAM,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;AAGG;AACO,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAA4B;QAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;QACpD,IAAI,CAAC,SAAS,EAAE;IAClB;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AACA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGAtKW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,qCAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,iBAAA,EAAA,kCAAA,EAAA,iBAAA,EAAA,kCAAA,EAAA,iBAAA,EAAA,wCAAA,EAAA,cAAA,EAAA,uCAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EARnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAUkC,cAAc,6CC5EnD,kBACA,EAAA,MAAA,EAAA,CAAA,uyEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDmEa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA7B/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,eAAA,EAGjB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,wBAAwB;AAC/B,wBAAA,aAAa,EAAE,qCAAqC;AACpD,wBAAA,mBAAmB,EAAE,qBAAqB;AAC1C,wBAAA,wBAAwB,EAAE,cAAc;AACxC,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,sBAAsB,EAAE,sBAAsB;AAC9C,wBAAA,kBAAkB,EAAE,QAAQ;AAC5B,wBAAA,oCAAoC,EAAE,iBAAiB;AACvD,wBAAA,oCAAoC,EAAE,iBAAiB;AACvD,wBAAA,oCAAoC,EAAE,iBAAiB;AACvD,wBAAA,0CAA0C,EAAE,cAAc;AAC1D,wBAAA,yCAAyC,EAAE,aAAa;AACxD,wBAAA,qBAAqB,EAAE,qBAAqB;AAC5C,wBAAA,YAAY,EAAE,oBAAoB;qBACnC,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,uyEAAA,CAAA,EAAA;+FAUkC,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5CnD;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAgBU,WAAW,CAAA;;IAEb,OAAO,GAAG,KAAK,CAA0B,EAAE;gFAAC;;IAE5C,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEzD,IAAI,GAAG,KAAK,CAAC,CAAC,4EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAE/C,WAAW,GAAG,KAAK,CAAC,EAAE;oFAAC;;IAEvB,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;AACnC;;;AAGG;IACM,eAAe,GAAG,KAAK,CAAoB,EAAE;wFAAC;;IAE9C,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAEhD,KAAK,GAAG,MAAM,CAAc,EAAE;8EAAC;IAC/B,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;IACzB,UAAU,GAAG,MAAM,CAAgB,IAAI;mFAAC;;AAGxC,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;IAC7D,CAAC;+EAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;;AAGkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI;AAChC,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;IAC/C,CAAC;mFAAC;;AAGiB,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,OAAO,IAAI,GAAG,CACZ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CACnE;IACH,CAAC;+EAAC;;AAGQ,IAAA,OAAO,CAAC,IAAY,EAAA;QAC5B,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1E;AAEU,IAAA,QAAQ,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEU,IAAA,OAAO,CAAC,IAAY,EAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE;AAC9C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;IAEU,MAAM,GAAA;QACd,IAAI,CAAC,SAAS,EAAE;IAClB;;AAGU,IAAA,YAAY,CAAC,MAAoB,EAAA;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK;AACxC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAA,QAAA,CAAU,GAAG,IAAI;IAC7D;;AAGQ,IAAA,QAAQ,GAAiC,MAAK,EAAE,CAAC;AACjD,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC,IAAA,UAAU,CAAC,KAAyB,EAAA;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;AAEA,IAAA,gBAAgB,CAAC,EAAgC,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGA7FW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EARX;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,WAAW,CAAC;AAC1C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrEH,mwCA6CA,gWDgBY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,iLAAE,OAAO,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAUxD,WAAW,EAAA,UAAA,EAAA,CAAA;kBAfvB,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,WACtC,CAAC,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAA,IAAA,EAC9D,EAAE,KAAK,EAAE,eAAe,EAAE,EAAA,SAAA,EACrB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC;AAC1C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,mwCAAA,EAAA,MAAA,EAAA,CAAA,ySAAA,CAAA,EAAA;;;AErCH;;;;;;;;;;;;;;;;AAgBG;MAwBU,QAAQ,CAAA;IACF,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;;AAEnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IACxB,UAAU,GACzB,SAAS,CAAgC,SAAS;mFAAC;;;IAI5C,SAAS,GAAG,KAAK,CAAS,EAAE,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;IACtD,OAAO,GAAG,KAAK,CAA4B,EAAE;gFAAC;;AAE9C,IAAA,WAAW,GAAG,KAAK,CAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB;oFAAC;;IAExD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,KAAK,GAAG,KAAK,CAAU,IAAI;8EAAC;IAElB,IAAI,GAAG,MAAM,CAAC,KAAK;6EAAC;AACpB,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;oFAAC;IAC1B,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAEhC,SAAS,GAAG,EAAE;AACd,IAAA,cAAc;AAEb,IAAA,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC;IACrC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,WAAW,CAAC;IAElD,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;IACkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;IACkB,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC;mFAC7D;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;AACxD,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFACxC;IAEkB,aAAa,GAAG,QAAQ,CAAC,MAC1C,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;sFAC1D;AACkB,IAAA,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE;qFACxD;AAES,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA,KAAA,EAAQ,KAAK,EAAE;IACtC;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;IAC9C;IAEQ,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;QAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5D;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEU,IAAA,YAAY,CAAC,KAAa,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ;YAAE;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,YAAY,EAAE;IACrB;AAEU,IAAA,SAAS,CAAC,KAAY,EAAA;QAC9B,MAAM,CAAC,GAAG,KAAsB;QAChC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG;AAEjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YAChB,IACE,GAAG,KAAK,WAAW;AACnB,gBAAA,GAAG,KAAK,SAAS;AACjB,gBAAA,GAAG,KAAK,OAAO;gBACf,GAAG,KAAK,GAAG,EACX;gBACA,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,QAAQ,EAAE;YACjB;AAAO,iBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC3B,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAC3B;YACA;QACF;QAEA,QAAQ,GAAG;AACT,YAAA,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACZ;AACF,YAAA,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb;AACF,YAAA,KAAK,MAAM;gBACT,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACzC;AACF,YAAA,KAAK,KAAK;gBACR,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxC;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;oBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClE;AACF,YAAA,KAAK,QAAQ;gBACX,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,YAAY,EAAE;gBACnB;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,KAAK,EAAE;gBACZ;AACF,YAAA;AACE,gBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;;IAErD;IAEU,MAAM,GAAA;;QAEd,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;;YACxB,IAAI,CAAC,SAAS,EAAE;IACvB;AAEQ,IAAA,IAAI,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;AAC7C,YAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB;YACF;QACF;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrD;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,CAAC;QACjC;QACA,OAAO,CAAC,CAAC;IACX;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;QACpC,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAElE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAC1B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CACvE;QACD,IAAI,KAAK,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7C;IAEQ,YAAY,GAAA;QAClB,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAC1C;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5D;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AACA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGArNW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EARR;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,QAAQ,CAAC;AACvC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtEH,kqEAmEA,63GDbY,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkBd,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAvBpB,SAAS;+BACE,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,MAAM,WACtC,CAAC,eAAe,CAAC,EAAA,IAAA,EACpB;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,uBAAuB,EAAE,0BAA0B;AACnD,wBAAA,uBAAuB,EAAE,0BAA0B;AACnD,wBAAA,uBAAuB,EAAE,0BAA0B;AACnD,wBAAA,yBAAyB,EAAE,QAAQ;AACnC,wBAAA,4BAA4B,EAAE,aAAa;AAC3C,wBAAA,6BAA6B,EAAE,cAAc;qBAC9C,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,cAAc,CAAC;AACvC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,kqEAAA,EAAA,MAAA,EAAA,CAAA,q0GAAA,CAAA,EAAA;wEAS0C,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzCtD;;;;;;;;;;;;;;;;;;;AAmBG;MAiBU,SAAS,CAAA;IACH,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAA0B,MAAM;gFAAC;;IAGrE,OAAO,GAAG,KAAK,CAA6B,EAAE;gFAAC;;IAE/C,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC1D,iBAAiB,GAAG,KAAK,CAAqB,SAAS;0FAAC;AACjE;;;AAGG;IACM,qBAAqB,GAAG,KAAK,CAAC,IAAI,6FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEpE,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACvD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,cAAc,GAAG,KAAK,CAAqB,SAAS;uFAAC;;IAErD,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;;IAEhD,KAAK,GAAG,KAAK,CAAU,IAAI;8EAAC;;IAG5B,MAAM,GAAG,MAAM,EAAW;IAE1B,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC;AAChD,IAAA,QAAQ,GAAG,UAAU,CAAC,mBAAmB,CAAC;IAC1C,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;AAClB,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;oFAAC;IAC1B,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAChC,SAAS,GAAG,EAAE;AACd,IAAA,cAAc;;IAEd,MAAM,GAAG,CAAC,CAAC;IAEA,aAAa,GAAG,QAAQ,CAAS,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;sFAAC;AACtF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAAC;IAClE,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFAAC;AACxG,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;AACjF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFAAC;;AAG/D,IAAA,OAAO,GAAG,QAAQ,CAAoB,MAAK;AAC5D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,iBAAiB,EAAE;AACjD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,GAAG,GAAG,CAAC;AACvB,QAAA,OAAO,GAAG,CAAC,MAAM,CACf,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAC5G;IACH,CAAC;gFAAC;;AAGiB,IAAA,IAAI,GAAG,QAAQ,CAAQ,MAAK;QAC7C,MAAM,GAAG,GAAU,EAAE;AACrB,QAAA,IAAI,SAA6B;QACjC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;YACvC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC9C,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,KAAA,EAAQ,GAAG,CAAC,MAAM,CAAA,CAAE,EAAE,CAAC;YAC1F;AACA,YAAA,SAAS,GAAG,MAAM,CAAC,KAAK;AACxB,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC7C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACZ,CAAC;6EAAC;AAEiB,IAAA,cAAc,GAAG,QAAQ,CAAY,MAAK;AAC3D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACvE,QAAA,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;uFAAC;AAEiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;iFAAC;AAElH,IAAA,WAAA,GAAA;;QAEE,iBAAiB,CAAC,MAAK;AACrB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;YAC5B,IAAI,CAAC,GAAG,CAAC;gBAAE;YACX,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtF,EAAE,EAAE,cAAc,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5C,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA,KAAA,EAAQ,KAAK,EAAE;IACtC;AAEU,IAAA,UAAU,CAAC,MAAuB,EAAA;QAC1C,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;IACrD;;IAGA,KAAK,GAAA;QACH,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;IACtC;;IAIU,aAAa,CAAC,KAAa,EAAE,KAAiB,EAAA;QACtD,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;YAAE;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACzE;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACzD,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;IACF;AAEU,IAAA,aAAa,CAAC,KAAY,EAAA;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB;AAEU,IAAA,eAAe,CAAC,KAAoB,EAAA;;AAE5C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACxD,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC;QACxF;IACF;;AAIU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,QAAQ,GAAG;AACT,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACvD;AACF,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACpF;AACF,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAC/D;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;AAC3B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC5D,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;gBAClC;gBACA;AACF,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;oBAC7C,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,SAAS,EAAE;gBAClB;AAAO,qBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;gBACtD;AACF,YAAA;AACE,gBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;;IAE1G;IAEU,MAAM,GAAA;QACd,IAAI,CAAC,SAAS,EAAE;IAClB;;AAGQ,IAAA,IAAI,CAAC,KAAa,EAAE,MAAe,EAAE,IAAI,GAAG,IAAI,EAAA;AACtD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC;YACvE;QACF;QACA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,gBAAA,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACtG,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;oBAAE;YACzB;QACF;aAAO;YACL,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;YAErD,IAAI,CAAC,GAAG,CAAC;AACT,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC7B,CAAC,GAAG,CAAC;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,oBAAA,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7E;YACA,CAAC,GAAG,CAAC;QACP;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC;IACtB;IAEQ,IAAI,CAAC,KAAa,EAAE,MAAe,EAAA;QACzC,IAAI,KAAK,GAAG,CAAC;YAAE;AACf,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;gBACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;YAC5C;iBAAO;;AAEL,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACrB;QACF;AAAO,aAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC9B;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrD;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,CAAC;QAC1E,OAAO,CAAC,CAAC;IACX;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE;QAC1C,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;AACpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;YACnC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACrF,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;gBACnB;YACF;QACF;IACF;;IAIQ,MAAM,CAAC,KAAa,EAAE,IAAyB,EAAA;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;YAAE;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,MAAM,CAAC,KAAK;gBAAE;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACvB;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,IAAI,GACR,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;AAChD,cAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK;cACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;AAC7B,kBAAE;kBACA,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB;;AAGQ,IAAA,WAAW,CAAC,IAAY,EAAE,EAAU,EAAE,OAAgB,EAAA;AAC5D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;AACpD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AACnF,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;QACjD,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AACzE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;;AAErC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;IAC7D;AAEQ,IAAA,IAAI,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5D;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AACA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGAtTW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,YAAA,EAAA,2BAAA,EAAA,aAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFT,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxEpG,+qFAuEA,EAAA,MAAA,EAAA,CAAA,w8GAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDGa,SAAS,EAAA,UAAA,EAAA,CAAA;kBAhBrB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,wBAAwB,EAAE,0BAA0B;AACpD,wBAAA,wBAAwB,EAAE,0BAA0B;AACpD,wBAAA,wBAAwB,EAAE,0BAA0B;AACpD,wBAAA,8BAA8B,EAAE,YAAY;AAC5C,wBAAA,6BAA6B,EAAE,aAAa;AAC5C,wBAAA,8BAA8B,EAAE,cAAc;AAC/C,qBAAA,EAAA,SAAA,EACU,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,+qFAAA,EAAA,MAAA,EAAA,CAAA,w8GAAA,CAAA,EAAA;+FAO3B,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhD/E;;;;;;;;;;;;;;;;;;;AAmBG;MAkBU,UAAU,CAAA;IACJ,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,UAAU,GAAG,SAAS,CAAgC,SAAS;mFAAC;IAChE,QAAQ,GAAG,SAAS,CAA0B,OAAO;iFAAC;;IAG9D,OAAO,GAAG,KAAK,CAA8B,EAAE;gFAAC;;IAEhD,KAAK,GAAG,KAAK,CAAU,IAAI;8EAAC;;IAE5B,SAAS,GAAG,KAAK,CAAkB,MAAM;kFAAC;;IAE1C,aAAa,GAAG,KAAK,CAAC,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE7D,aAAa,GAAG,KAAK,CAAoB,OAAO;sFAAC;AACjD,IAAA,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB;oFAAC;;IAEhD,SAAS,GAAG,KAAK,CAAC,KAAK;kFAAC;IACxB,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACzD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACxD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAG1B,MAAM,GAAG,MAAM,EAAW;IAE1B,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,aAAa,CAAC;AAC9D,IAAA,OAAO,GAAG,UAAU,CAAC,mBAAmB,CAAC;AACzC,IAAA,OAAO,GAAG,UAAU,CAAC,mBAAmB,CAAC;IAE/B,IAAI,GAAG,MAAM,CAAC,KAAK;6EAAC;;IAEpB,UAAU,GAAG,MAAM,CAAW,EAAE;mFAAC;IACnC,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAChC,SAAS,GAAG,EAAE;AACd,IAAA,cAAc;IAEH,aAAa,GAAG,QAAQ,CAAS,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;sFAAC;AACtF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAAC;IAClE,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFAAC;AACxG,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK;mFAAC;AAC9D,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;AACxD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFAAC;;AAG/D,IAAA,YAAY,GAAG,QAAQ,CAAqB,MAAK;AAClE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;QACtB,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,EAAE;YAChC,MAAM,GAAG,GAAuB,EAAE;AAClC,YAAA,IAAI,IAAI,GAAgC,IAAI,CAAC,OAAO,EAAE;AACtD,YAAA,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE;AACpB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;AAC9C,gBAAA,IAAI,CAAC,GAAG;AAAE,oBAAA,OAAO,EAAE;AACnB,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,gBAAA,IAAI,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE;YAC3B;AACA,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;IAC/C,CAAC;qFAAC;AAEiB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;qFAAC;AAEhH;;;;AAIG;AACgB,IAAA,OAAO,GAAG,QAAQ,CAAgC,MAAK;QACxE,MAAM,IAAI,GAAyB,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACxD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE;AACpD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM;gBAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B;AACA,QAAA,OAAO,IAAI;IACb,CAAC;gFAAC;;AAGe,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qFAAC;AAE3G,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;QAC/B,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;IAC3D,CAAC;iFAAC;AAEF,IAAA,WAAA,GAAA;QACE,iBAAiB,CAAC,MAAK;AACrB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC1B,YAAA,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE;YACzB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACzG,QAAA,CAAC,CAAC;IACJ;IAEU,QAAQ,CAAC,MAAc,EAAE,GAAW,EAAA;QAC5C,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,KAAK,MAAM,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE;IAC7C;IAEU,QAAQ,CAAC,MAAc,EAAE,GAAW,EAAA;QAC5C,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG;IAC1C;IAEU,UAAU,CAAC,MAAc,EAAE,MAAwB,EAAA;QAC3D,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,MAAM;IAC/C;IAEU,QAAQ,CAAC,MAAc,EAAE,GAAW,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG;IAC5E;;IAIU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;IAC/C;IAEU,SAAS,GAAA;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE;;AAEtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACzG,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACnB,eAAe,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5F;IAEU,KAAK,CAAC,YAAY,GAAG,KAAK,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,YAAY;YAAE,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAC5D;AAEU,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AAC7C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACxD,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,SAAS,EAAE;QAClB;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YACjC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEU,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B;QAClD,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAAE;QAChH,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,SAAS,EAAE;IAClB;AAEU,IAAA,eAAe,CAAC,KAAiB,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B;AAClD,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;QACnG,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,SAAS,EAAE;IAClB;;IAIU,aAAa,CAAC,MAAc,EAAE,GAAW,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAC5C,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;YAAE;AAChC,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;YACxB,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;YAClD;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC1B;IAEU,aAAa,CAAC,MAAc,EAAE,GAAW,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,OAAO;YAAE;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAC5C,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;YAAE;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC1B;AAEU,IAAA,KAAK,CAAC,KAAY,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACf,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAC1C;;AAIU,IAAA,cAAc,CAAC,KAAoB,EAAA;AAC3C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;YAChB,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1E,IAAI,IAAI,IAAI,CAAC;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;gBACxC;YACF;AACA,YAAA,KAAK,MAAM;YACX,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACxF,IAAI,IAAI,IAAI,CAAC;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;gBACxC;YACF;AACA,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,GAAG,IAAI,CAAC;AAAE,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;gBACnC;AACF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,GAAG,GAAG,CAAC;AAAE,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACjE;AACF,YAAA,KAAK,OAAO;YACZ,KAAK,GAAG,EAAE;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1B,gBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;oBAAE;AAChC,gBAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACpD,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;gBACvB;qBAAO;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;gBACvB;gBACA;YACF;AACA,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChB;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,KAAK,EAAE;gBACZ;AACF,YAAA;gBACE,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC/E,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC;gBACnD;;IAEN;;IAGQ,SAAS,CAAC,MAAc,EAAE,GAAW,EAAA;QAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACnE;;IAGQ,MAAM,CAAC,MAAc,EAAE,GAAW,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAC5C,QAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ;AACjC,QAAA,MAAM,KAAK,GAAG,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACtI;AAEQ,IAAA,OAAO,CAAC,MAAmC,EAAE,IAAY,EAAE,KAAa,EAAA;QAC9E,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI;AACZ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,CAAC;QACnC;QACA,OAAO,CAAC,CAAC;IACX;AAEQ,IAAA,YAAY,CAAC,IAAiC,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3C;AAEQ,IAAA,WAAW,CAAC,IAAiC,EAAA;AACnD,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,CAAC;QAC1E,OAAO,CAAC,CAAC;IACX;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAE,GAAW,EAAE,MAAmC,EAAE,IAAY,EAAA;AAClG,QAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE;QAC1C,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM;YACpC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACzF,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;gBACtB;YACF;QACF;IACF;;IAIQ,MAAM,CAAC,MAAc,EAAE,GAAW,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,MAAM,IAAI,GAAuB,EAAE;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;AAClG,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAClB;AAEQ,IAAA,IAAI,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;;AAGQ,IAAA,SAAS,CAAC,IAAiC,EAAA;QACjD,MAAM,GAAG,GAAa,EAAE;AACxB,QAAA,IAAI,IAAI,GAAgC,IAAI,CAAC,OAAO,EAAE;AACtD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC;gBAAE;AACX,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACX,YAAA,IAAI,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE;QAC3B;AACA,QAAA,OAAO,GAAG;IACZ;;AAGQ,IAAA,QAAQ,CAAC,IAAiC,EAAE,KAAc,EAAE,QAA4B,EAAE,EAAA;AAChG,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC;AAC5B,YAAA,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK;AAAE,gBAAA,OAAO,IAAI;AACpC,YAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE;AACxB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;AACpD,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,GAAG;YACrB;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5D;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;IAC/B;AACA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGAtWW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAFV,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClErG,k1FA6EA,EAAA,MAAA,EAAA,CAAA,8uIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrBY,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAYd,UAAU,EAAA,UAAA,EAAA,CAAA;kBAjBtB,SAAS;+BACE,aAAa,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,WACtC,CAAC,eAAe,CAAC,EAAA,IAAA,EACpB;AACJ,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,yBAAyB,EAAE,0BAA0B;AACrD,wBAAA,yBAAyB,EAAE,0BAA0B;AACrD,wBAAA,2BAA2B,EAAE,QAAQ;AACrC,wBAAA,8BAA8B,EAAE,aAAa;AAC7C,wBAAA,+BAA+B,EAAE,cAAc;AAC/C,wBAAA,YAAY,EAAE,oBAAoB;AACnC,qBAAA,EAAA,SAAA,EACU,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,k1FAAA,EAAA,MAAA,EAAA,CAAA,8uIAAA,CAAA,EAAA;AAS5B,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,kEACjB,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhCxE;;;;;;;;;;;;;;;;;;;;;AAqBG;MAwBU,cAAc,CAAA;IACR,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;;AAEnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;IACnC,QAAQ,GAAG,SAAS,CAA+B,OAAO;iFAAC;;IAGpE,kBAAkB,GAAG,CAAC,CAAC;AAE/B,IAAA,WAAA,GAAA;;;;;QAKE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AACpC,YAAA,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE;AACpB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;gBAC5B;YACF;AACA,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,kBAAkB;gBAAE;AACvC,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACxD,QAAA,CAAC,CAAC;IACJ;;;IAIS,SAAS,GAAG,KAAK,CAAS,EAAE,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;IACtD,OAAO,GAAG,KAAK,CAAkC,EAAE;gFAAC;;IAEpD,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAE/B,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,UAAU,GAAG,KAAK,CAA2B,UAAU;mFAAC;;IAExD,QAAQ,GAAG,KAAK,CAAC,CAAC,gFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAEnD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,gBAAgB,GAAG,KAAK,CAAC,KAAK,wFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAEhE,IAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;qFAAC;;IAGzC,KAAK,GAAG,KAAK,CAAU,IAAI;8EAAC;;IAG5B,MAAM,GAAG,MAAM,EAAU;;IAEzB,cAAc,GAAG,MAAM,EAAwB;IAErC,IAAI,GAAG,MAAM,CAAC,KAAK;6EAAC;AACpB,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;oFAAC;IACxB,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;IACpB,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAE/B,IAAA,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;IACjC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC;IAE5C,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;IACkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;IACkB,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC;mFAC7D;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;AACxD,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFACxC;;AAGkB,IAAA,QAAQ,GAAG,QAAQ,CAAkC,MAAK;AAC3E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3C,QAAA,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QAChD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;YACjC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,OAAO,IAAI,KAAK,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxE,QAAA,CAAC,CAAC;IACJ,CAAC;iFAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC;mFAAC;AAEhE,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA,KAAA,EAAQ,KAAK,EAAE;IACtC;;AAGQ,IAAA,cAAc,CAAC,KAAc,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;IACtD;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEtB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB;QACA,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE;IAEU,OAAO,GAAA;QACf,IAAI,CAAC,cAAc,EAAE;IACvB;IAEQ,cAAc,GAAA;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QACvB,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C;IACF;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B;AAEU,IAAA,YAAY,CAAC,KAAa,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ;YAAE;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,UAAU,EAAE;IACnB;AAEU,IAAA,SAAS,CAAC,KAAY,EAAA;QAC9B,MAAM,CAAC,GAAG,KAAsB;QAChC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG;AAEjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,EAAE;gBAC5C,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,cAAc,EAAE;YACvB;YACA;QACF;QAEA,QAAQ,GAAG;AACT,YAAA,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACZ;AACF,YAAA,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;oBACf,CAAC,CAAC,cAAc,EAAE;oBAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC3C;gBACA;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;oBACf,CAAC,CAAC,cAAc,EAAE;oBAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1C;gBACA;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;oBAC3B,CAAC,CAAC,cAAc,EAAE;oBAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;gBACZ;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,KAAK,EAAE;gBACZ;;IAEN;IAEU,MAAM,GAAA;QACd,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;QAC7B,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA;;;AAGG;IACK,eAAe,GAAA;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnD,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;YACrE;QACF;QACA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB;IACF;IAEU,gBAAgB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;QAClB,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,eAAe,EAAE;IACxB;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,IAAI,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;AAC7C,YAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB;YACF;QACF;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,CAAC;QACjC;QACA,OAAO,CAAC,CAAC;IACX;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACnE;AACA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGA9RW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,aAAA,EAAA,iCAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EARd;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvFH,gwFAwFA,qnJDjBY,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkBd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAvB1B,SAAS;+BACE,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,WACtC,CAAC,eAAe,CAAC,EAAA,IAAA,EACpB;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,+BAA+B,EAAE,QAAQ;AACzC,wBAAA,kCAAkC,EAAE,aAAa;AACjD,wBAAA,mCAAmC,EAAE,cAAc;qBACpD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,gwFAAA,EAAA,MAAA,EAAA,CAAA,6jJAAA,CAAA,EAAA;gGASmE,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AElF7E;;;;;;;;;;AAUG;MAQU,cAAc,CAAA;;AAEN,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;;IAGzC,OAAO,GAAuC,MAAM,CAAC,EAAE;gFAAC;IACxD,WAAW,GAAmB,MAAM,CAAC,CAAC;oFAAC;;IAEvC,WAAW,GAAqC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;oFAAC;IACtE,OAAO,GAAoB,MAAM,CAAC,KAAK;gFAAC;IACxC,MAAM,GAAG,EAAE;AACX;;;;AAIG;IACH,QAAQ,GAA4B,SAAS;AAC7C,IAAA,MAAM,GAA4B,MAAK,EAAE,CAAC;AAC1C,IAAA,OAAO,GAA4B,MAAK,EAAE,CAAC;AAC3C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAEf,KAAK,GAAG,SAAS,CAAC,eAAe;8EAAC;;IAE1C,IAAI,GAAG,SAAS,CAA+B,MAAM;6EAAC;AAE/D,IAAA,WAAA,GAAA;;;QAGE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC3C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA,KAAA,EAAQ,KAAK,EAAE;IACtC;IAEU,IAAI,CAAC,KAAY,EAAE,KAAa,EAAA;;QAExC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACpB;uGA1CW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqBU,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDpD,+gCAmCA,qhDDLY,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,mBAGX,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,+gCAAA,EAAA,MAAA,EAAA,CAAA,69CAAA,CAAA,EAAA;AAuBS,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,eAAe,+DAEM,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEKhE;AACA,MAAM,SAAS,GAAG,EAAE;AAEpB;;;;;AAKG;AACH,MAAM,YAAY,GAAG;IACnB,YAAY;IACZ,OAAO;IACP,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;IACnB,aAAa;IACb,WAAW;IACX,aAAa;IACb,YAAY;IACZ,cAAc;IACd,cAAc;IACd,aAAa;IACb,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UAAU;IACV,eAAe;IACf,YAAY;CACJ;AAEV;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAiBU,SAAS,CAAA;AACH,IAAA,IAAI,GACnB,MAAM,CAAqD,UAAU,CAAC;AACvD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAGtC,IAAA,eAAe,GAAG,KAAK,CAAoB,CAAC,GAAG,CAAC;wFAAC;;IAEjD,cAAc,GAAG,KAAK,CAA6B,EAAE;uFAAC;;IAEtD,aAAa,GAAG,KAAK,CAAsB,UAAU;sFAAC;;IAEtD,cAAc,GAAG,KAAK,CAAC,KAAK,sFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACvE;;;AAGG;IACM,aAAa,GAAG,KAAK,CAE5B,IAAI;sFAAC;;IAGE,aAAa,GAAG,MAAM,EAAwB;;IAE9C,aAAa,GAAG,MAAM,EAAwB;;AAG9C,IAAA,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC;IAE9B,OAAO,GAAG,MAAM,CAAwB,IAAI;gFAAC;IAC7C,WAAW,GAAG,MAAM,CAAC,CAAC;oFAAC;;IAEvB,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;oFAAC;AACrD;;;;AAIG;IACK,cAAc,GAAkB,IAAI;IAEpC,QAAQ,GAAwC,IAAI;;AAG3C,IAAA,QAAQ,GAAG,QAAQ,CAA6B,MAAK;AACpE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;AACxB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CACvC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAC7C;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AACtC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,OAAO,IAAI,KAAK;AACd,kBAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;AAC3C,kBAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5C,QAAA,CAAC,CAAC;IACJ,CAAC;iFAAC;AAEF;;;;;AAKG;IACgB,SAAS,GAAG,QAAQ,CACrC,MACE,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI;AACvB,SAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;kFACxD;AAEkB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,IAAI;AAClC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;QAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnC,cAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,KAAA,EAAQ,CAAC,CAAA;cACvB,IAAI;IACV,CAAC;uFAAC;AAEF,IAAA,WAAA,GAAA;;;;QAIE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;YAC7B,SAAS,CAAC,OAAO,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AACpE,QAAA,CAAC,CAAC;;QAEF,MAAM,CAAC,MAAK;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AACpC,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,EAAE;AACrD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB;AACF,QAAA,CAAC,CAAC;IACJ;;AAIA;;;;;AAKG;IACK,MAAM,GAAA;AACZ,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AAClC,QAAA,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc;QAC/B,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC;AAC9C,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AACnB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC9B,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,oBAAA,OAAO,IAAI;gBAClD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE;YACpE;QACF;AACA,QAAA,OAAO,IAAI;IACb;;IAGU,MAAM,GAAA;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;QACvB,IAAI,CAAC,CAAC,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAAE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACnD;QACF;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;;AAE/B,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc;gBAAE;AACrC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;QACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACpC,QAAA,IACE,IAAI;AACJ,YAAA,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;AACtB,YAAA,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;AAC1B,YAAA,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EACtB;YACA;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE;IAEQ,YAAY,CAAC,SAAS,GAAG,KAAK,EAAA;QACpC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,KAAK;AAC5C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;;AAIU,IAAA,SAAS,CAAC,KAAY,EAAA;QAC9B,MAAM,CAAC,GAAG,KAAsB;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE;AAChC,QAAA,QAAQ,CAAC,CAAC,GAAG;AACX,YAAA,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACZ;AACF,YAAA,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,KAAK;gBACR,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvC,CAAC,CAAC,cAAc,EAAE;oBAClB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1C;gBACA;AACF,YAAA,KAAK,QAAQ;;;gBAGX,CAAC,CAAC,cAAc,EAAE;gBAClB,CAAC,CAAC,eAAe,EAAE;AACnB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACvB;;IAEN;;AAGU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,QAAS,KAAuB,CAAC,GAAG;AAClC,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,UAAU;gBACb,IAAI,CAAC,MAAM,EAAE;;IAEnB;AAEQ,IAAA,IAAI,CAAC,KAAa,EAAA;QACxB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;AAC7C,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,CACtD;IACH;;AAIU,IAAA,MAAM,CAAC,KAAY,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAI,KAAoB,CAAC,aAA4B;;;AAGlE,QAAA,IACE,OAAO;AACP,YAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC/D;YACA;QACF;QACA,IAAI,CAAC,YAAY,EAAE;IACrB;;AAIQ,IAAA,MAAM,CAAC,KAAa,EAAA;QAC1B,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG;YAAE;AAChB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AAClC,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;QACnC,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,EAAG,CAAC,CAAC,OAAO,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,CAAA,CAAG;AAC1E,QAAA,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK;QACtB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AACnC,QAAA,IAAI;AACF,YAAA,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;QACpC;AAAE,QAAA,MAAM;;QAER;;;AAGA,QAAA,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5D,EAAE,CAAC,KAAK,EAAE;IACZ;;IAIQ,WAAW,GAAA;QACjB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC;AACpD,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ;AAC1B,QAAA,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACxC,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ;QAC7B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;QACjD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AACjD,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc;AACnC,QAAA,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,QAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;IACrB;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,EAAE;IACrB;;AAIA;;;;;;;;AAQG;IACK,UAAU,GAAA;AAChB,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AAClC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YAChC,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACjD,YAAA,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;AAC/B,gBAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC9D;AACA,YAAA,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,KAAK,OAAO;;AAEtC,YAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;AACrE,YAAA,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,YAAY,CAAC;AACrE,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC/B,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;AACtB,YAAA,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;AACvB,YAAA,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AAClC,YAAA,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM;AAEnC,YAAA,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;;;AAGlD,YAAA,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,QAAQ;AACjE,YAAA,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAEtC,YAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,qBAAqB,EAAE;AAC3C,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE;AACjD,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE;AACjD,YAAA,MAAM,UAAU,GACd,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;AACxD,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU;AAC7E,YAAA,MAAM,CAAC,GACL,QAAQ,CAAC,GAAG;AACZ,iBAAC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;AACjC,gBAAA,EAAE,CAAC,SAAS;AACZ,gBAAA,UAAU;YACZ,MAAM,CAAC,MAAM,EAAE;AAEf,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACrE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;QACjB;AAAE,QAAA,MAAM;YACN,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACvB;IACF;uGAtVW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,4BAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAhBrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uCAAuC;AACjD,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,IAAI,EAAE;AACJ,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,sBAAsB,EAAE,aAAa;AACrC,wBAAA,sBAAsB,EAAE,6BAA6B;AACrD,wBAAA,8BAA8B,EAAE,kBAAkB;AAClD,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,QAAQ,EAAE,gBAAgB;AAC3B,qBAAA;AACF,iBAAA;;;AC1FD;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MA6BU,aAAa,CAAA;IACP,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;AACrC,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;;AAEhD,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;IACnC,QAAQ,GAAG,SAAS,CAA+B,OAAO;iFAAC;;;IAInE,SAAS,GAAG,KAAK,CAAS,EAAE,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;IACtD,OAAO,GAAG,KAAK,CAAiC,EAAE;gFAAC;;IAEnD,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAE/B,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,UAAU,GAAG,KAAK,CAA0B,UAAU;mFAAC;;IAEvD,QAAQ,GAAG,KAAK,CAAC,CAAC,gFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAEnD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,GAAG,GAAG,KAAK,CAAC,CAAC,2EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAE9C,aAAa,GAAG,KAAK,CAAC,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAE7D,IAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;qFAAC;;IAGzC,KAAK,GAAG,KAAK,CAAY,EAAE;8EAAC;;IAG5B,MAAM,GAAG,MAAM,EAAU;;IAEzB,WAAW,GAAG,MAAM,EAAuB;;IAE3C,aAAa,GAAG,MAAM,EAAW;IAEvB,IAAI,GAAG,MAAM,CAAC,KAAK;6EAAC;AACpB,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;oFAAC;IACxB,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;IACpB,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAA+B,MAAK,EAAE,CAAC;AAC/C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAE/B,IAAA,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;IACjC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC;AAE/D;;;AAGG;AACc,IAAA,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,EAAgC;6EAAC;;IAG/D,kBAAkB,GAAG,CAAC,CAAC;AAC/B;;;AAGG;IACK,yBAAyB,GAAG,KAAK;AAEzC,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,GAAG,KAAK;AACnB,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;oBACpB,OAAO,GAAG,IAAI;gBAChB;YACF;AACA,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,QAAA,CAAC,CAAC;;;;;QAMF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AACpC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB;AAC/C,YAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACtC,YAAA,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE;AACpB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;gBAC5B;YACF;AACA,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,kBAAkB;gBAAE;AACvC,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,QAAQ;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACvE,QAAA,CAAC,CAAC;IACJ;IAEmB,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;IACkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;IACkB,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC;mFAC7D;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;AACxD,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFACxC;;IAGkB,KAAK,GAAG,QAAQ,CACjC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE;8EAC1D;;AAGkB,IAAA,SAAS,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AAC9B,QAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,QAAA,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM;KAC5B,CAAC;kFACH;;AAGkB,IAAA,KAAK,GAAG,QAAQ,CAAwB,MAAK;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CACrB,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CACrD;IACH,CAAC;8EAAC;;AAGiB,IAAA,QAAQ,GAAG,QAAQ,CAAiC,MAAK;AAC1E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3C,QAAA,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QAChD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;YACjC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,OAAO,IAAI,KAAK,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxE,QAAA,CAAC,CAAC;IACJ,CAAC;iFAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC;mFAAC;AAEhE,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA,KAAA,EAAQ,KAAK,EAAE;IACtC;AAEU,IAAA,UAAU,CAAC,KAAc,EAAA;QACjC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrC;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE;IAEU,OAAO,GAAA;QACf,IAAI,CAAC,cAAc,EAAE;IACvB;IAEQ,cAAc,GAAA;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QACvB,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C;IACF;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B;;AAGU,IAAA,YAAY,CAAC,KAAa,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ;YAAE;;AAE1B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YAC/C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC;QACF;QACA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACnE,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,GAAG,CAAC,GAAwB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE;;QAEhD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;AAEvD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;;;AAGhB,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB;QACA,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;IACxC;AAEQ,IAAA,MAAM,CAAC,KAAc,EAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACvD;;AAGU,IAAA,UAAU,CAAC,KAAc,EAAA;QACjC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEU,IAAA,SAAS,CAAC,KAAY,EAAA;QAC9B,MAAM,CAAC,GAAG,KAAsB;QAChC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG;;AAGjB,QAAA,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;YAC/D,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClD;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,EAAE;gBAC5C,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,cAAc,EAAE;YACvB;YACA;QACF;QAEA,QAAQ,GAAG;AACT,YAAA,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACZ;AACF,YAAA,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb;AACF,YAAA,KAAK,MAAM;gBACT,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACzC;AACF,YAAA,KAAK,KAAK;gBACR,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxC;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG;AAAE,oBAAA,MAAM;AACvC,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;oBAC3B,CAAC,CAAC,cAAc,EAAE;oBAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;gBACZ;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,KAAK,EAAE;gBACZ;;IAEN;AAEU,IAAA,MAAM,CAAC,KAAY,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAI,KAAoB,CAAC,aAA4B;;QAElE,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;QAC1D,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,KAAK,EAAE;IACd;IAEU,gBAAgB,GAAA;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;IAC/B;;AAGU,IAAA,oBAAoB,CAAC,KAAY,EAAA;QACzC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;;AAE1C,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAAE;QACxC,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE;YAC7C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;AAEQ,IAAA,IAAI,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;AAC7C,YAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB;YACF;QACF;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,CAAC;QACjC;QACA,OAAO,CAAC,CAAC;IACX;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;AAEQ,IAAA,QAAQ,CAAC,IAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;;AAGA,IAAA,UAAU,CAAC,KAAuB,EAAA;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;IACnD;AACA,IAAA,gBAAgB,CAAC,EAA8B,EAAA;AAC7C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;;AAGiB,IAAA,eAAe,GAAG,iBAAiB,CAAC,MAAK;QACxD,IAAI,CAAC,GAAG,EAAE;AACZ,IAAA,CAAC,CAAC;AAEF;;AAEG;AACH,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK;AACvB,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG;AAAE,YAAA,OAAO,IAAI;AACjE,QAAA,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IAClD;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnC;uGAjYW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,aAAA,EAAA,iCAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAbb;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpGH,0uGAsGA,EAAA,MAAA,EAAA,CAAA,+/IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvBY,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAuBtB,aAAa,EAAA,UAAA,EAAA,CAAA;kBA5BzB,SAAS;+BACE,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,eAAe,EAAE,MAAM,CAAC,EAAA,IAAA,EAC5B;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,6BAA6B,EAAE,0BAA0B;AACzD,wBAAA,+BAA+B,EAAE,QAAQ;AACzC,wBAAA,kCAAkC,EAAE,aAAa;AACjD,wBAAA,mCAAmC,EAAE,cAAc;qBACpD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,0uGAAA,EAAA,MAAA,EAAA,CAAA,+/IAAA,CAAA,EAAA;gGAUmE,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5E7E;;;;;;;;;;AAUG;MA4BU,UAAU,CAAA;IACJ,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;AACnC,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,QAAQ,GAAG,SAAS,CAA+B,OAAO;iFAAC;;IAGnE,KAAK,GAAG,KAAK,CAAW,EAAE;8EAAC;;IAE3B,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;;IAE/B,GAAG,GAAG,KAAK,CAAC,CAAC,2EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAE9C,eAAe,GAAG,KAAK,CAAC,KAAK,uFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE/D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAClE;;;AAGG;AACM,IAAA,UAAU,GAAG,KAAK,CAAoB,CAAC,GAAG,CAAC;mFAAC;;IAE5C,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAG1B,KAAK,GAAG,MAAM,EAAU;;IAExB,OAAO,GAAG,MAAM,EAAU;IAEhB,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;IACpB,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAA8B,MAAK,EAAE,CAAC;AAC9C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAE/B,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,cAAc,CAAC;IAEnD,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;IACkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;IACkB,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC;mFAC7D;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;AACxD,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFACxC;IACkB,KAAK,GAAG,QAAQ,CACjC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE;8EAC1D;IAES,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAChE;AAEU,IAAA,YAAY,CAAC,KAAY,EAAA;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;IAC1D;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AACrB,QAAA,IAAI,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACtD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B;AAAO,iBAAA,IAAI,GAAG,KAAK,OAAO,EAAE;gBAC1B,KAAK,CAAC,cAAc,EAAE;YACxB;QACF;aAAO,IAAI,GAAG,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;AACrD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC;IACF;AAEU,IAAA,OAAO,CAAC,KAAqB,EAAA;AACrC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;QACvD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACvE;IACF;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACtE,IAAI,CAAC,SAAS,EAAE;IAClB;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;AAC1B,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;aACnD,IAAI,CAAC,EAAE,CAAC;AACX,QAAA,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,CAAA,IAAA,CAAM,CAAC;IACpC;AAEQ,IAAA,MAAM,CAAC,GAAW,EAAA;AACxB,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE;QACtB,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,CAAC,UAAU,EAAE;YACjB;QACF;QACA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE;;AAEvC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE;QAC3D,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnD;AAEA;;;;AAIG;IACK,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;AACzC,QAAA,IAAI,EAAE;AAAE,YAAA,EAAE,CAAC,KAAK,GAAG,EAAE;IACvB;AAEU,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAClE,YAAA,OAAO,KAAK;QACd;QACA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACnD,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;AACO,IAAA,YAAY,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE;QAC3B,eAAe,CACb,MAAK;AACH,YAAA,MAAM,OAAO,GACX,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,kBAAkB,CAAC;AAC3E,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;AACnD,YAAA,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,GAAG,KAAK,EAAE;QACrD,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;IACH;AAEQ,IAAA,QAAQ,CAAC,IAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;;AAGA,IAAA,UAAU,CAAC,KAAsB,EAAA;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;IACnD;AACA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;;AAGiB,IAAA,eAAe,GAAG,iBAAiB,CAAC,MAAK;QACxD,IAAI,CAAC,GAAG,EAAE;AACZ,IAAA,CAAC,CAAC;AAEF;;AAEG;AACH,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK;AACvB,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG;AAAE,YAAA,OAAO,IAAI;AACjE,QAAA,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IAClD;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnC;uGAzMW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAbV;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtEH,ovCAuCA,25DDWY,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAsBL,UAAU,EAAA,UAAA,EAAA,CAAA;kBA3BtB,SAAS;+BACE,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,WACtC,CAAC,MAAM,CAAC,EAAA,IAAA,EACX;AACJ,wBAAA,KAAK,EAAE,cAAc;AACrB,wBAAA,0BAA0B,EAAE,0BAA0B;AACtD,wBAAA,0BAA0B,EAAE,0BAA0B;AACtD,wBAAA,+BAA+B,EAAE,aAAa;AAC9C,wBAAA,gCAAgC,EAAE,cAAc;AAChD,wBAAA,SAAS,EAAE,cAAc;qBAC1B,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,ovCAAA,EAAA,MAAA,EAAA,CAAA,m2DAAA,CAAA,EAAA;sEAUmE,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5C7E;;;;;;;;;AASG;MA2BU,eAAe,CAAA;IACT,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IACxB,QAAQ,GAAG,SAAS,CAA+B,OAAO;iFAAC;;IAGnE,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;;IAEzB,WAAW,GAAG,KAAK,CAAC,EAAE;oFAAC;;IAEvB,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,YAAY,GAAG,KAAK,CAAC,KAAK,oFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE5D,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEzD,SAAS,GAAG,KAAK,CAAC,CAAC,iFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAC7D;;;;AAIG;IACM,YAAY,GAAG,KAAK,CAC3B,kBAAkB;qFACnB;IAEkB,OAAO,GACxB,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,aAAa,CAAC;AACjC,IAAA,UAAU,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,WAAW;AACvC,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,QAAQ;;IAGjC,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;IAE1B,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC5C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAErB,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;IACkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK;mFAAC;AAC9D,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;;AAGxD,IAAA,KAAK,GAAG,QAAQ,CAAmB,MAAK;AACzD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;QACtB,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxD,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AAClC,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB;AACtC,gBAAA,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACrB,aAAA;YACD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC5E,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB;AACnC,gBAAA,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,aAAA;SACF;IACH,CAAC;8EAAC;AAEF;;;;AAIG;AACgB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,KAAK,EAAE;AACzC,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,YAAA,KAAK,EAAE;AAC5B,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,YAAA,KAAK,EAAE;AAC5B,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,YAAA,KAAK,EAAE;AAC5B,QAAA,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,YAAA,KAAK,EAAE;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;IAC3B,CAAC;iFAAC;AAEiB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAC1C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;sFAC5C;;AAGkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;iFAAC;;AAGiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC7C,MAAM,GAAG,GAAa,EAAE;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE;AAC1C,QAAA,IAAI,QAAQ;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAClD,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5C,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IAC1C,CAAC;oFAAC;IAEQ,YAAY,GAAA;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;IAEU,MAAM,GAAA;QACd,IAAI,CAAC,SAAS,EAAE;IAClB;;AAGA,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;AACA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;;AAGiB,IAAA,eAAe,GAAG,iBAAiB,CAAC,MAAK;QACxD,IAAI,CAAC,SAAS,EAAE;AAClB,IAAA,CAAC,CAAC;AAEF;;;;AAIG;AACH,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK;AACvB,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAC5C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE;AACvC,QAAA,IAAI,CAAC,CAAC,MAAM,IAAI,cAAc;AAAE,YAAA,OAAO,IAAI;AAC3C,QAAA,OAAO,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IAClE;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnC;uGAtKW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,kCAAA,EAAA,aAAA,EAAA,mCAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,SAAA,EAbf;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtEH,q4FAkFA,EAAA,MAAA,EAAA,CAAA,4+FAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDVa,eAAe,EAAA,UAAA,EAAA,CAAA;kBA1B3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,YAGnB,iBAAiB,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,mBAAmB;AAC1B,wBAAA,+BAA+B,EAAE,0BAA0B;AAC3D,wBAAA,+BAA+B,EAAE,0BAA0B;AAC3D,wBAAA,oCAAoC,EAAE,aAAa;AACnD,wBAAA,qCAAqC,EAAE,cAAc;qBACtD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,q4FAAA,EAAA,MAAA,EAAA,CAAA,4+FAAA,CAAA,EAAA;sEAOmE,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtC7E;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAwBU,cAAc,CAAA;AACR,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;IAClD,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;AACnC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,eAAe,GAC9B,YAAY,CAA0B,cAAc;wFAAC;IACtC,cAAc,GAC7B,YAAY,CAA0B,aAAa;uFAAC;IACrC,eAAe,GAC9B,SAAS,CAA0B,eAAe;wFAAC;IACpC,cAAc,GAC7B,SAAS,CAA0B,cAAc;uFAAC;;IAG3C,KAAK,GAAG,KAAK,CAA4B,EAAE;8EAAC;;AAE5C,IAAA,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;uFAAC;;AAE3C,IAAA,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;sFAAC;;IAEzC,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAE1D,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAG1B,KAAK,GAAG,KAAK,CAAY,EAAE;8EAAC;;IAG5B,MAAM,GAAG,MAAM,EAAa;IAEpB,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;;AAE3B,IAAA,gBAAgB,GAAG,MAAM,CAAC,IAAI,GAAG,EAAW;yFAAC;AAC7C,IAAA,eAAe,GAAG,MAAM,CAAC,IAAI,GAAG,EAAW;wFAAC;;IAE1C,cAAc,GAAG,MAAM,CAAC,EAAE;uFAAC;IAC3B,aAAa,GAAG,MAAM,CAAC,EAAE;sFAAC;;IAE5B,eAAe,GAAG,MAAM,CAAC,CAAC;wFAAC;IAC3B,cAAc,GAAG,MAAM,CAAC,CAAC;uFAAC;AAEnC,IAAA,QAAQ,GAA+B,MAAK,EAAE,CAAC;AAC/C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAE/B,IAAA,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;AAClC,IAAA,eAAe,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,YAAY;AAC5C,IAAA,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,WAAW;AAC1C,IAAA,gBAAgB,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,kBAAkB;AACnD,IAAA,eAAe,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,iBAAiB;IAEvC,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;IACkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;;AAGgB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B;AAC9C,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AACpD,QAAA,OAAO,GAAG;IACZ,CAAC;gFAAC;;AAGiB,IAAA,SAAS,GAAG,QAAQ,CAA4B,MAAK;QACtE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;kFAAC;;AAGiB,IAAA,QAAQ,GAAG,QAAQ,CAA4B,MAAK;AACrE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;QAC1B,MAAM,GAAG,GAAqB,EAAE;QAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,EAAE;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB;AACA,QAAA,OAAO,GAAG;IACZ,CAAC;iFAAC;AAEiB,IAAA,iBAAiB,GAAG,QAAQ,CAA4B,MACzE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;0FAC1D;AACkB,IAAA,gBAAgB,GAAG,QAAQ,CAA4B,MACxE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;yFACxD;IAEO,WAAW,CACjB,IAA+B,EAC/B,KAAa,EAAA;AAEb,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,IAAI;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChE;;AAGmB,IAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CACnB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAC9D;qFACF;;AAEkB,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAClB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAC7D;oFACF;IACkB,eAAe,GAAG,QAAQ,CAAC,MAC5C,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC;wFAC5C;IACkB,cAAc,GAAG,QAAQ,CAAC,MAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC;uFAC3C;IAES,SAAS,CAAC,IAAoB,EAAE,KAAc,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3C;AAEQ,IAAA,UAAU,CAAC,IAAoB,EAAA;AACrC,QAAA,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe;IAC5E;;IAGU,WAAW,CAAC,IAAoB,EAAE,IAAoB,EAAA;AAC9D,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ;YAAE;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACrE,QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IACf;IAEU,YAAY,CAAC,IAAoB,EAAE,KAAY,EAAA;AACvD,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;QACrD,CAAC,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC;IAC7E;;AAGQ,IAAA,WAAW,CAAC,IAAoB,EAAA;QACtC,OAAO,IAAI,KAAK;AACd,cAAE,IAAI,CAAC,iBAAiB;AACxB,cAAE,IAAI,CAAC,gBAAgB,EAAE;IAC7B;AAEQ,IAAA,eAAe,CAAC,IAAoB,EAAA;AAC1C,QAAA,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc;IAC1E;;AAGU,IAAA,SAAS,CAAC,IAAoB,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC;IACpD;;IAGU,SAAS,CAAC,IAAoB,EAAE,KAAa,EAAA;QACrD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACvC;;IAGQ,UAAU,CAAC,IAAoB,EAAE,KAAa,EAAA;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9B;IAEQ,WAAW,CAAC,IAAoB,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,GAAG,GACP,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;QACvE,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE;IACnC;AAEA;;;AAGG;AACK,IAAA,cAAc,CAAC,IAAoB,EAAA;QACzC,eAAe,CACb,MAAK;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,gBAAA,MAAM,MAAM,GACV,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AACvE,gBAAA,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE;gBAC7B;YACF;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;IACH;IAEQ,YAAY,CAAC,KAAa,EAAE,IAAoB,EAAA;AACtD,QAAA,MAAM,MAAM,GACV,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AACrE,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9D;AAEU,IAAA,YAAY,CACpB,IAAoB,EACpB,IAAoB,EACpB,KAAY,EAAA;QAEZ,MAAM,CAAC,GAAG,KAAsB;QAChC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,QAAA,QAAQ,CAAC,CAAC,GAAG;AACX,YAAA,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;gBAChC;AACF,YAAA,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;gBAChC;AACF,YAAA,KAAK,MAAM;gBACT,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxB;AACF,YAAA,KAAK,KAAK;gBACR,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBACxD;;QAEJ,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;YACjB,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;QAC9B;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YAC5B,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QAC1B;IACF;;IAGQ,OAAO,CAAC,IAAoB,EAAE,IAAoB,EAAA;AACxD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QAClD,IAAI,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;AACrD,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C;aAAO;YACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC3B;;IAGU,SAAS,GAAA;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS;AAC1B,aAAA,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;aACpD,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;IAClC;;IAGU,QAAQ,GAAA;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;QACtC,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,IAAI,CAAC,QAAQ;AACV,aAAA,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;aACpD,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CACzB;QACD,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;IACjC;;IAGU,YAAY,GAAA;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS;aAC1B,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ;aAC3B,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;IAClC;;IAGU,WAAW,GAAA;QACnB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,IAAI,CAAC,QAAQ;aACV,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ;aAC3B,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CACzB;QACD,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;IACjC;IAEQ,OAAO,CAAC,IAAoB,EAAE,MAA0B,EAAA;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IACf;AAEQ,IAAA,MAAM,CAAC,IAAe,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AAEA;;;AAGG;AACO,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAA4B;QAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;QACpD,IAAI,CAAC,SAAS,EAAE;IAClB;;AAGA,IAAA,UAAU,CAAC,KAAuB,EAAA;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;IACnD;AACA,IAAA,gBAAgB,CAAC,EAA8B,EAAA;AAC7C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGAtWW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,iCAAA,EAAA,aAAA,EAAA,kCAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EARd;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnFH,yiKA2JA,u8FDxFY,QAAQ,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkBP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAvB1B,SAAS;+BACE,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,WACtC,CAAC,QAAQ,CAAC,EAAA,IAAA,EACb;AACJ,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,8BAA8B,EAAE,0BAA0B;AAC1D,wBAAA,8BAA8B,EAAE,0BAA0B;AAC1D,wBAAA,8BAA8B,EAAE,0BAA0B;AAC1D,wBAAA,mCAAmC,EAAE,aAAa;AAClD,wBAAA,oCAAoC,EAAE,cAAc;AACpD,wBAAA,YAAY,EAAE,oBAAoB;qBACnC,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,yiKAAA,EAAA,MAAA,EAAA,CAAA,+4FAAA,CAAA,EAAA;AAWuC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAEd,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAEhB,eAAe,wEAEf,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhErD;;;;;;;;;AASG;MAIU,aAAa,CAAA;;AAEf,IAAA,QAAQ,GAAG,MAAM,CAAuC,WAAW,CAAC;AAE7E,IAAA,OAAO,sBAAsB,CAC3B,IAAsB,EACtB,IAAa,EAAA;AAEb,QAAA,OAAO,IAAI;IACb;uGATW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;;AAaD;;;AAGG;MAIU,eAAe,CAAA;;AAEjB,IAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;uGAF5B,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCG;MAmBU,UAAU,CAAA;;AAEF,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;;IAG3C,KAAK,GAAG,KAAK,CAAM,EAAE;8EAAC;;IAGtB,OAAO,GAAG,KAAK,CAAU,OAAO,EAAE,CAAM;gFAAC;;IAGzC,GAAG,GAAG,KAAK,CAAC,CAAC,2EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAG9C,GAAG,GAAG,KAAK,CAAC,CAAC,2EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAG9C,WAAW,GAAG,KAAK,CAAC,KAAK,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG3D,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGxD,QAAQ,GAAG,KAAK,CAAS,EAAE;iFAAC;;IAG5B,KAAK,GAAG,MAAM,EAA8B;;IAE5C,OAAO,GAAG,MAAM,EAA8B;;IAE9C,KAAK,GAAG,MAAM,EAAgC;;AAGpC,IAAA,WAAW,GAC5B,YAAY,CAAC,QAAQ,CAAmB,aAAa;oFAAC;;IAErC,aAAa,GAAG,YAAY,CAAC,eAAe;sFAAC;IAE/C,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAAyB,MAAK,EAAE,CAAC;AACzC,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;;AAGrB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;;IAGkB,KAAK,GAAG,QAAQ,CACjC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE;8EAC1D;;IAGkB,KAAK,GAAG,QAAQ,CACjC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;8EACrD;;AAGkB,IAAA,iBAAiB,GAAG,QAAQ,CAC7C,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc;0FAClD;;IAGS,GAAG,GAAA;QACX,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACnD;;AAGU,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC9B,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;QAC5B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM;YAAE;AAC1C,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACpC;;AAGU,IAAA,MAAM,CAAC,KAAqB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa;AAChC,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY;QAC7B,IAAI,IAAI,KAAK,EAAE;YAAE;QACjB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAA,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE;AAEA;;;;;AAKG;AACO,IAAA,gBAAgB,CAAC,KAAY,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE;IACzB;AAEQ,IAAA,QAAQ,CAAC,IAAS,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;;AAGA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;IACnD;AACA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGA5HW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6BAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EARV;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqCyC,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEP,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtKjE,60EAmFA,EAAA,MAAA,EAAA,CAAA,+jDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDiCY,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,yIAAE,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAa3D,UAAU,EAAA,UAAA,EAAA,CAAA;kBAlBtB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,mBAGN,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAA,IAAA,EACjE;AACJ,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,+BAA+B,EAAE,cAAc;qBAChD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,60EAAA,EAAA,MAAA,EAAA,CAAA,+jDAAA,CAAA,EAAA;AAqCyC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,aAAa,+FAEP,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE9IjE;;;;;;;;;;;;AAYG;MAwBU,YAAY,CAAA;IACN,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAE/C,YAAY,GAAG,oBAAoB,EAAE;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,UAAU,GACzB,SAAS,CAAgC,SAAS;mFAAC;IACpC,QAAQ,GAAG,SAAS,CAA0B,OAAO;iFAAC;;IAG9D,KAAK,GAAG,KAAK,CAAwB,EAAE;8EAAC;;IAExC,KAAK,GAAG,KAAK,CAAiB,IAAI;8EAAC;;AAEnC,IAAA,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB;oFAAC;;IAEhD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEzD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAEhB,IAAI,GAAG,MAAM,CAAC,KAAK;6EAAC;IACtB,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACpC,IAAA,QAAQ,GAAoC,MAAK,EAAE,CAAC;AACpD,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAE/B,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC,gBAAgB,CAAC;AACjE,IAAA,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC;;AAE5C,IAAA,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC;IAElC,aAAa,GAAG,QAAQ,CAAS,MAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;sFAC7C;AACkB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;IACkB,SAAS,GAAG,QAAQ,CACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC;kFACnF;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK;mFAAC;AAC9D,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;mFAAC;AACxD,IAAA,WAAW,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI;oFACxC;;AAGkB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAC5C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;IACpD,CAAC;sFAAC;IAEQ,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;IAC/C;IAEU,SAAS,GAAA;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;AAEnB,QAAA,eAAe,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACtE;IAEU,KAAK,CAAC,YAAY,GAAG,KAAK,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,YAAY;YAAE,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAC5D;AAEU,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AAC7C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEU,IAAA,cAAc,CAAC,KAAoB,EAAA;AAC3C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClB;IACF;AAEA;;;;AAIG;AACO,IAAA,eAAe,CAAC,KAAiB,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B;;;AAGlD,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;QAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;QACtD,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,SAAS,EAAE;IAClB;;AAGU,IAAA,MAAM,CAAC,QAAiB,EAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAClB;AAEU,IAAA,KAAK,CAAC,KAAY,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAC1C;AAEU,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B;QAClD,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;AAC1D,QAAA,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;QACjE,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,SAAS,EAAE;IAClB;;AAGQ,IAAA,OAAO,CAAC,IAAa,EAAA;AAC3B,QAAA,IACE,IAAI;YACJ,OAAO,IAAI,KAAK,QAAQ;AACxB,YAAA,OAAO,IAAI,IAAI;AACd,YAAA,IAAmB,CAAC,KAAK,KAAK,SAAS,EACxC;YACA,OAAQ,IAAmB,CAAC,KAAK;QACnC;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,QAAQ,CACd,IAA2B,EAC3B,KAAc,EAAA;AAEd,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK;AAAE,gBAAA,OAAO,IAAI;AAC7C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACzB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC/C,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,GAAG;YACrB;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,SAAS,GAAA;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;AAC5C,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,MAAM,MAAM,GACV,KAAK,CAAC,aAAa,CAAc,iCAAiC,CAAC;AACnE,YAAA,KAAK,CAAC,aAAa,CAAc,mBAAmB,CAAC;QACvD,MAAM,EAAE,KAAK,EAAE;IACjB;;AAGA,IAAA,UAAU,CAAC,KAAqB,EAAA;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;IAC/B;AACA,IAAA,gBAAgB,CAAC,EAAmC,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGAlLW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,gCAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EARZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1DH,m2DAgEA,EAAA,MAAA,EAAA,CAAA,usFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtBY,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkBtB,YAAY,EAAA,UAAA,EAAA,CAAA;kBAvBxB,SAAS;+BACE,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,MAAM,EAAE,eAAe,CAAC,EAAA,IAAA,EAC5B;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,4BAA4B,EAAE,0BAA0B;AACxD,wBAAA,4BAA4B,EAAE,0BAA0B;AACxD,wBAAA,8BAA8B,EAAE,QAAQ;AACxC,wBAAA,iCAAiC,EAAE,aAAa;AAChD,wBAAA,kCAAkC,EAAE,cAAc;AAClD,wBAAA,YAAY,EAAE,oBAAoB;qBACnC,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,m2DAAA,EAAA,MAAA,EAAA,CAAA,usFAAA,CAAA,EAAA;AAU0C,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,kEACW,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEQxE,IAAI,SAAS,GAAG,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MA0BU,YAAY,CAAA;AACN,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAChD,IAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClD,QAAQ,GAAG,SAAS,CAA+B,WAAW;iFAAC;;IAGvE,MAAM,GAAG,KAAK,CAAS,EAAE;+EAAC;;IAE1B,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,OAAO,GAAG,KAAK,CAAC,CAAC,+EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAElD,QAAQ,GAAG,KAAK,CAAC,CAAC,gFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAEnD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAEvD,IAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa;8EAAC;;IAEtC,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;;IAEhB,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAExD,QAAQ,GAAG,KAAK,CAAoB,IAAI;iFAAC;;IAEzC,UAAU,GAAG,KAAK,CAAsB,SAAS;mFAAC;;IAElD,WAAW,GAAG,KAAK,CAAsB,MAAM;oFAAC;;IAGhD,KAAK,GAAG,KAAK,CAAiB,EAAE;8EAAC;;IAGjC,aAAa,GAAG,MAAM,EAAU;;IAEhC,QAAQ,GAAG,MAAM,EAAuB;;IAExC,QAAQ,GAAG,MAAM,EAAgB;;IAEjC,OAAO,GAAG,MAAM,EAAgB;IAEtB,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;;IAExB,YAAY,GAAG,MAAM,CAAC,EAAE;qFAAC;AAEnC,IAAA,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC;;IAG9B,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;;AAEzB,IAAA,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;mFAC5C;AAEO,IAAA,QAAQ,GAA6C,MAAK,EAAE,CAAC;AAC7D,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;;IAEhC,OAAO,GAAG,KAAK;AAEJ,IAAA,gBAAgB,GAAG,QAAQ,CAC5C,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;yFAC7C;IAES,UAAU,GAAA;QAClB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;AAEU,IAAA,aAAa,CAAC,KAAY,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,IAAI,KAAK,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;;AAE3C,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;AAEU,IAAA,UAAU,CAAC,KAAgB,EAAA;QACnC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;AAEU,IAAA,WAAW,CAAC,KAAgB,EAAA;QACpC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;AAEU,IAAA,MAAM,CAAC,KAAgB,EAAA;QAC/B,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE,KAAK;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;IACxE;;AAGQ,IAAA,QAAQ,CAAC,IAAc,EAAA;AAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QAC9E,MAAM,QAAQ,GAAmB,EAAE;QACnC,MAAM,UAAU,GAAwB,EAAE;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;AAErD,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC7B,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzF;YACF;AACA,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;gBACpD,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI;AACJ,oBAAA,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACjF,iBAAA,CAAC;gBACF;YACF;YACA,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,EAAE;gBAC3B,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACnG;YACF;YACA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChC,YAAA,KAAK,EAAE;QACT;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;;AAEnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;AAChD,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC9C,gBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzC;QACF;AACA,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE;IACF;;AAGU,IAAA,MAAM,CAAC,IAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;;AAGU,IAAA,KAAK,CAAC,IAAkB,EAAA;QAChC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACxC;IAEQ,MAAM,MAAM,CAAC,IAAkB,EAAA;AACrC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC1B,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC3E,QAAA,IAAI;YACF,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,KACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC/E;AACD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AACvD,YAAA,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;AAC7D,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC1D;IACF;;IAGQ,KAAK,CAAC,EAAU,EAAE,OAA8B,EAAA;AACtD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAClE;IACH;AAEQ,IAAA,MAAM,CAAC,IAAU,EAAA;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC9C,OAAO;AACL,YAAA,EAAE,EAAE,CAAA,UAAA,EAAa,SAAS,EAAE,CAAA,CAAE;YAC9B,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,UAAU,EACR,OAAO,IAAI,IAAI,CAAC;AACd,kBAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI;AACrD,kBAAE,SAAS;SAChB;IACH;AAEQ,IAAA,MAAM,CAAC,IAAkB,EAAA;QAC/B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QACjE;IACF;AAEQ,IAAA,aAAa,CAAC,IAAU,EAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;AACnC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACpC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;YACpC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,KAAK;AACxB,YAAA,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtD,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,OAAO,IAAI,KAAK,KAAK;AACvB,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,WAAW,CAAC,KAAa,EAAA;QACjC,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;QACrC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAChC,QAAA,IAAI,KAAK,GAAG,KAAK,GAAG,IAAI;QACxB,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,OAAO,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,KAAK,IAAI,IAAI;AACb,YAAA,IAAI,EAAE;QACR;QACA,OAAO,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,CAAA,CAAE;IAC9D;AAEA;;;AAGG;AACc,IAAA,eAAe,GAAG,IAAI,GAAG,EAAkB;AAC3C,IAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE;YAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACpB,IAAI,IAAI,CAAC,SAAS;oBAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACvE,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC;QACF;AACA,QAAA,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;YAC1B,IAAI,IAAI,CAAC,UAAU;AAAE,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;QACzE;IACF,CAAC;sFAAC;IAEF,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE;gBAC/C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;YACrD;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;QAC9B;IACF;;AAGU,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAA4B;QAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;QACpD,IAAI,CAAC,SAAS,EAAE;IAClB;;;IAKiB,SAAS,GAAG,QAAQ,CAA0B,MAC7D,IAAI,CAAC,WAAW,EAAE,KAAK;AACrB,UAAE,IAAI,CAAC,KAAK;AACZ,UAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;kFACpC;AAED;;;;;AAKG;IACK,WAAW,GAA8B,IAAI;AAEpC,IAAA,YAAY,GAAG,MAAM,CAAC,MAAK;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,QAAQ,KAAK,IAAI;YAAE;;;QAGvB,MAAM,IAAI,GACR,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;AAChC,YAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACjC,CAAC;qFAAC;AAEF,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC9C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ;AACG,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;aAChC,MAAM,CAAC,CAAC,IAAI,KAA2B,IAAI,KAAK,IAAI,CAAC,CACzD;IACH;AACA,IAAA,gBAAgB,CAAC,EAA4C,EAAA;AAC3D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;;AAGQ,IAAA,KAAK,CAAC,KAAc,EAAA;QAC1B,IAAI,KAAK,YAAY,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACpD,MAAM,IAAI,GAAG,KAA4B;AACzC,QAAA,OAAO,IAAI,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,GAAG,IAAI;IACjD;;AAIiB,IAAA,eAAe,GAAG,iBAAiB,CAAC,MAAK;QACxD,IAAI,CAAC,MAAM,EAAE;QACb,IAAI,CAAC,OAAO,EAAE;QACd,IAAI,CAAC,QAAQ,EAAE;AACjB,IAAA,CAAC,CAAC;AAEF;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QACvD,MAAM,KAAK,GAAG;aACX,GAAG,CAAC,CAAC,KAAK,MAAM,KAAK,YAAY,IAAI,GAAG,KAAK,GAAI,KAAK,EAAE,IAAa,CAAC;aACtE,MAAM,CAAC,CAAC,CAAC,KAAgB,CAAC,YAAY,IAAI,CAAC;AAE9C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC3B,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;AACjC,YAAA,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE;QACtD;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;AACf,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC;YAClD,IAAI,MAAM,EAAE;gBACV,OAAO;AACL,oBAAA,UAAU,EAAE;AACV,wBAAA,GAAG,EAAE,OAAO;AACZ,wBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;wBACnC,IAAI,EAAE,MAAM,CAAC,IAAI;AAClB,qBAAA;iBACF;YACH;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE;QACxE;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnC;uGArXW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gCAAA,EAAA,cAAA,EAAA,gCAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,WAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAbZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChIH,w1HAqHA,EAAA,MAAA,EAAA,CAAA,+uIAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDaa,YAAY,EAAA,UAAA,EAAA,CAAA;kBAzBxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,kCAAkC,EAAE,cAAc;AAClD,wBAAA,kCAAkC,EAAE,YAAY;AAChD,wBAAA,iCAAiC,EAAE,WAAW;AAC9C,wBAAA,YAAY,EAAE,oBAAoB;qBACnC,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,w1HAAA,EAAA,MAAA,EAAA,CAAA,+uIAAA,CAAA,EAAA;sEAOmE,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,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"}
1
+ {"version":3,"file":"mk-kit-ui-forms.mjs","sources":["../../../projects/mk-kit/forms/form-field/form-field.ts","../../../projects/mk-kit/forms/form-field/form-field.html","../../../projects/mk-kit/forms/form-error-summary/form-error-summary.ts","../../../projects/mk-kit/forms/form-error-summary/form-error-summary.html","../../../projects/mk-kit/forms/input-group/input-group.ts","../../../projects/mk-kit/forms/input-group/input-group.html","../../../projects/mk-kit/forms/input/input.ts","../../../projects/mk-kit/forms/input/input.html","../../../projects/mk-kit/forms/submit-input/submit-input.ts","../../../projects/mk-kit/forms/submit-input/submit-input.html","../../../projects/mk-kit/forms/button-toggle/button-toggle.ts","../../../projects/mk-kit/forms/button-toggle/button-toggle.html","../../../projects/mk-kit/forms/button-toggle/button-toggle-group.ts","../../../projects/mk-kit/forms/button-toggle/button-toggle-group.html","../../../projects/mk-kit/forms/i18n-input/i18n-input.ts","../../../projects/mk-kit/forms/i18n-input/i18n-input.html","../../../projects/mk-kit/forms/select/select.ts","../../../projects/mk-kit/forms/select/select.html","../../../projects/mk-kit/forms/listbox/listbox.ts","../../../projects/mk-kit/forms/listbox/listbox.html","../../../projects/mk-kit/forms/cascader/cascader.ts","../../../projects/mk-kit/forms/cascader/cascader.html","../../../projects/mk-kit/forms/autocomplete/autocomplete.ts","../../../projects/mk-kit/forms/autocomplete/autocomplete.html","../../../projects/mk-kit/forms/mention/mention-panel.ts","../../../projects/mk-kit/forms/mention/mention-panel.html","../../../projects/mk-kit/forms/mention/mention.ts","../../../projects/mk-kit/forms/multi-select/multi-select.ts","../../../projects/mk-kit/forms/multi-select/multi-select.html","../../../projects/mk-kit/forms/tag-input/tag-input.ts","../../../projects/mk-kit/forms/tag-input/tag-input.html","../../../projects/mk-kit/forms/password-input/password-input.ts","../../../projects/mk-kit/forms/password-input/password-input.html","../../../projects/mk-kit/forms/transfer-list/transfer-list.ts","../../../projects/mk-kit/forms/transfer-list/transfer-list.html","../../../projects/mk-kit/forms/repeater/repeater.ts","../../../projects/mk-kit/forms/repeater/repeater.html","../../../projects/mk-kit/forms/tree-select/tree-select.ts","../../../projects/mk-kit/forms/tree-select/tree-select.html","../../../projects/mk-kit/forms/file-upload/file-upload.ts","../../../projects/mk-kit/forms/file-upload/file-upload.html","../../../projects/mk-kit/forms/code-editor/code-editor.ts","../../../projects/mk-kit/forms/code-editor/code-editor.html","../../../projects/mk-kit/forms/rating/rating.ts","../../../projects/mk-kit/forms/rating/rating.html","../../../projects/mk-kit/forms/number-input/number-input.ts","../../../projects/mk-kit/forms/number-input/number-input.html","../../../projects/mk-kit/forms/numeric-keypad/numeric-keypad.ts","../../../projects/mk-kit/forms/numeric-keypad/numeric-keypad.html","../../../projects/mk-kit/forms/on-screen-keyboard/keyboard-layouts.ts","../../../projects/mk-kit/forms/on-screen-keyboard/on-screen-keyboard.ts","../../../projects/mk-kit/forms/on-screen-keyboard/on-screen-keyboard.html","../../../projects/mk-kit/forms/on-screen-keyboard/on-screen-keyboard-trigger.ts","../../../projects/mk-kit/forms/otp/otp.ts","../../../projects/mk-kit/forms/otp/otp.html","../../../projects/mk-kit/forms/phone-input/phone-countries.ts","../../../projects/mk-kit/forms/phone-input/phone-input.ts","../../../projects/mk-kit/forms/phone-input/phone-input.html","../../../projects/mk-kit/forms/postal-code-input/postal-formats.ts","../../../projects/mk-kit/forms/postal-code-input/postal-code-input.ts","../../../projects/mk-kit/forms/postal-code-input/postal-code-input.html","../../../projects/mk-kit/forms/currency-input/currency-input.ts","../../../projects/mk-kit/forms/currency-input/currency-input.html","../../../projects/mk-kit/forms/card-number-input/card-number-input.ts","../../../projects/mk-kit/forms/card-number-input/card-number-input.html","../../../projects/mk-kit/forms/iban-input/iban-input.ts","../../../projects/mk-kit/forms/iban-input/iban-input.html","../../../projects/mk-kit/forms/tax-id-input/tax-id-input.ts","../../../projects/mk-kit/forms/tax-id-input/tax-id-input.html","../../../projects/mk-kit/forms/signature-pad/signature-pad.ts","../../../projects/mk-kit/forms/signature-pad/signature-pad.html","../../../projects/mk-kit/forms/radio/radio-group.ts","../../../projects/mk-kit/forms/radio/radio-group.html","../../../projects/mk-kit/forms/radio/radio.ts","../../../projects/mk-kit/forms/radio/radio.html","../../../projects/mk-kit/forms/switch/switch.ts","../../../projects/mk-kit/forms/switch/switch.html","../../../projects/mk-kit/forms/slider/slider.ts","../../../projects/mk-kit/forms/slider/slider.html","../../../projects/mk-kit/forms/color-picker/color-picker.ts","../../../projects/mk-kit/forms/color-picker/color-picker.html","../../../projects/mk-kit/forms/range-slider/range-slider.ts","../../../projects/mk-kit/forms/range-slider/range-slider.html","../../../projects/mk-kit/forms/index.ts","../../../projects/mk-kit/forms/mk-kit-ui-forms.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n type AbstractControl,\n FormGroupDirective,\n NgControl,\n NgForm,\n Validators,\n} from '@angular/forms';\nimport { FORM_FIELD, type Field, type FieldState } from '@angular/forms/signals';\nimport type { Subscription } from 'rxjs';\nimport type { MkErrorMessages, MkSize } from '@mk-kit/ui/core';\nimport {\n MK_I18N,\n MkFieldContext,\n mkFirstErrorMessage,\n mkSignalErrorMessage,\n mkUniqueId,\n} from '@mk-kit/ui/core';\n\n/**\n * FormField — an accessible wrapper that provides a real `<label>`, optional\n * hint text, error text and a required indicator for any nested control\n * (`input[mkInput]`, `mk-select`, `mk-checkbox`, …).\n *\n * It generates stable ids (via `mkUniqueId`) and exposes them so nested\n * controls can wire `aria-labelledby` / `aria-describedby` / `aria-invalid`\n * automatically by injecting this component. While an error shows, the hint is\n * hidden and the error is announced through a `role=\"alert\"` region.\n *\n * ## Automatic errors\n *\n * When the projected control is bound to a form (`formControlName`,\n * `[formControl]` or `[(ngModel)]`) the field adopts its `NgControl` and shows\n * the first validation error by itself — no `[error]` binding needed. Messages\n * come from the `validation` i18n table and can be reworded per field with\n * `errorMessages`. As with `mat-error`, an error only appears once the control\n * is touched or dirty, or its form has been submitted; `errorOn` changes that.\n * `required` and the disabled styling are derived from the control too.\n *\n * ## Signal Forms\n *\n * The same applies to a control bound with Signal Forms' `[formField]`\n * directive (`@angular/forms/signals`): the field adopts the projected\n * `FormField` binding and reads `touched()` / `dirty()` / `invalid()` /\n * `errors()` / `required()` / `disabled()` from its `FieldState`. Errors\n * written by the schema (`required(p.email)`, `minLength(p.name, 2)`, …) are\n * rendered through the same `validation` i18n table, a `message` supplied to\n * the schema rule wins over the table, and `errorMessages` / `errorOn` work\n * unchanged. Calling `submit()` marks every field touched, so errors surface\n * on a failed submit exactly as with `formControlName`. When the control is\n * not projected (or lives deeper), point the field at it with `[field]`.\n *\n * ```html\n * <mk-form-field label=\"Email\">\n * <input mkInput type=\"email\" [formField]=\"f.email\" />\n * </mk-form-field>\n *\n * <mk-form-field label=\"Country\" [field]=\"f.country\">\n * <mk-select [formField]=\"f.country\" [options]=\"countries\" />\n * </mk-form-field>\n * ```\n *\n * ```html\n * <!-- automatic: message + required marker come from the validators -->\n * <mk-form-field label=\"Email\">\n * <input mkInput type=\"email\" formControlName=\"email\" />\n * </mk-form-field>\n *\n * <!-- per-field wording -->\n * <mk-form-field label=\"Age\" [errorMessages]=\"{ min: 'You must be 18 or over' }\">\n * <mk-number-input formControlName=\"age\" [min]=\"18\" />\n * </mk-form-field>\n *\n * <!-- fully manual: an explicit [error] always wins -->\n * <mk-form-field label=\"Email\" hint=\"We never share it.\" required\n * [error]=\"emailError()\">\n * <input mkInput type=\"email\" [(ngModel)]=\"email\" />\n * </mk-form-field>\n * ```\n */\n@Component({\n selector: 'mk-form-field',\n templateUrl: './form-field.html',\n styleUrl: './form-field.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-form-field',\n '[class.mk-form-field--sm]': \"size() === 'sm'\",\n '[class.mk-form-field--md]': \"size() === 'md'\",\n '[class.mk-form-field--lg]': \"size() === 'lg'\",\n '[class.mk-form-field--invalid]': 'hasError()',\n '[class.mk-form-field--required]': 'isRequired()',\n '[class.mk-form-field--disabled]': 'isDisabled()',\n '[class.mk-form-field--float]': \"labelPosition() === 'float'\",\n '[class.mk-form-field--focused]': 'focused()',\n '[class.mk-form-field--filled]': 'hasValue()',\n '(focusin)': 'focused.set(true)',\n '(focusout)': 'focused.set(false)',\n '(input)': 'readDomValue($event.target)',\n '(change)': 'readDomValue($event.target)',\n },\n providers: [\n {\n provide: MkFieldContext,\n useExisting: forwardRef(() => MkFormField),\n },\n ],\n})\nexport class MkFormField implements MkFieldContext {\n private readonly i18n = inject(MK_I18N);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, {\n optional: true,\n });\n\n /** Visible field label. Rendered as a real `<label for>`. */\n readonly label = input<string>('');\n /** Optional helper text shown below the control (hidden while an error shows). */\n readonly hint = input<string>('');\n /**\n * Explicit error message. When non-null it overrides the automatic message\n * derived from the projected control; `''` suppresses errors entirely.\n */\n readonly error = input<string | null>(null);\n /**\n * Per-field wording for automatic errors, keyed by `ValidationErrors` key.\n * Each value is either a fixed string or a function of the error payload.\n */\n readonly errorMessages = input<MkErrorMessages | null>(null);\n /**\n * When automatic errors become visible. `touched` (the default) matches\n * Material: after the control is touched or dirty, or the form is submitted.\n * `dirty` waits for an actual edit; `always` shows as soon as it is invalid.\n */\n readonly errorOn = input<'touched' | 'dirty' | 'always'>('touched');\n /**\n * Marks the field required (adds an indicator + `aria-required`). Derived\n * from the projected control's validators when it is bound to a form.\n */\n readonly required = input(false, { transform: booleanAttribute });\n /**\n * Visually reflect a disabled control. Derived from the projected control\n * when it is bound to a form.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Control size; nested controls inherit it. */\n readonly size = input<MkSize>('md');\n /**\n * Where the label sits: above the control (default), or `float` — inside\n * the control, sliding up once it is focused or has a value. Floating works\n * with `mkInput` / textarea and any control bound with `ngModel` or a\n * `formControl`; the placeholder stays hidden until the label has moved.\n */\n readonly labelPosition = input<'top' | 'float'>('top');\n /**\n * Signal Forms field to read state from explicitly (`[field]=\"f.email\"`).\n * Not needed when the projected control carries the `[formField]` binding —\n * the wrapper finds that itself; set it when the control is nested deeper\n * or when the wrapper should follow a field it does not contain.\n */\n readonly field = input<Field<unknown> | null>(null);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The projected control's form binding, when it has one. */\n private readonly ngControl = contentChild(NgControl, { descendants: true });\n /** The projected control's Signal Forms `[formField]` binding, when it has one. */\n private readonly signalField = contentChild(FORM_FIELD, { descendants: true });\n\n /**\n * The Signal Forms field state driving this wrapper — the explicit `field`\n * input first, else the projected `[formField]` binding. `undefined` for a\n * reactive-forms / template-driven control.\n */\n private readonly fieldState = computed<FieldState<unknown> | undefined>(() => {\n const explicit = this.field();\n if (explicit) return explicit();\n return this.signalField()?.state();\n });\n\n /** A control inside the field has focus. */\n protected readonly focused = signal(false);\n /** Last value read straight from a native control (fallback when no NgControl). */\n private readonly domValue = signal<string | null>(null);\n /** The field holds a non-empty value (drives the floating label). */\n protected readonly hasValue = computed(() => {\n this.controlTick();\n const state = this.fieldState();\n const control = state ? null : this.ngControl();\n const v = state ? state.value() : control ? control.value : this.domValue();\n if (v == null || v === '') return false;\n if (Array.isArray(v)) return v.length > 0;\n return true;\n });\n\n /** Track a native control's value for the floating label when nothing else reports it. */\n protected readDomValue(target: EventTarget | null): void {\n const el = target as HTMLInputElement | null;\n if (!el || typeof el.value !== 'string') return;\n this.domValue.set(el.value);\n }\n\n /**\n * Bumped on every change of the bound control so the computed state below\n * re-reads it. `AbstractControl` is not signal-based, so this bridges its\n * event stream into the reactive graph.\n */\n private readonly controlTick = signal(0);\n\n /** Id for the nested interactive control — adopt on your control element. */\n readonly controlId = mkUniqueId('mk-field');\n /** Id of the `<label>` element (for `aria-labelledby`). */\n readonly labelId = `${this.controlId}-label`;\n /** Id of the hint element. */\n readonly hintId = `${this.controlId}-hint`;\n /** Id of the error element. */\n readonly errorId = `${this.controlId}-error`;\n\n constructor() {\n afterNextRender(() => {\n const el = this.host.nativeElement.querySelector<HTMLInputElement>('input, textarea, select');\n if (el) this.readDomValue(el);\n });\n const bump = () => this.controlTick.update((n) => n + 1);\n let sub: Subscription | null = null;\n\n // `AbstractControl.events` emits on value, status, pristine and touched\n // changes — every input the state below reads. Submitting flips the form's\n // `submitted` flag without touching a control, so watch that separately.\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n const submitSub = submit?.subscribe(bump) ?? null;\n\n effect(() => {\n // A `[formField]` binding provides an interop `NgControl` without an\n // `events` stream; its state is read reactively via `fieldState` instead.\n const control = this.signalField()\n ? null\n : (this.ngControl()?.control as Partial<AbstractControl> | null | undefined);\n sub?.unsubscribe();\n sub = control?.events ? control.events.subscribe(bump) : null;\n });\n\n inject(DestroyRef).onDestroy(() => {\n sub?.unsubscribe();\n submitSub?.unsubscribe();\n });\n }\n\n /** Whether the surrounding form (if any) has been submitted. */\n private readonly submitted = computed(() => {\n this.controlTick();\n return (\n this.parentFormGroup?.submitted || this.parentForm?.submitted || false\n );\n });\n\n /** The automatic message for the bound control, when one should show. */\n private readonly autoError = computed<string | null>(() => {\n const state = this.fieldState();\n if (state) {\n if (state.disabled() || state.hidden() || !state.invalid()) return null;\n const gate = this.errorOn();\n const visible =\n gate === 'always' ||\n (gate === 'dirty' ? state.dirty() : state.touched() || state.dirty());\n if (!visible) return null;\n return mkSignalErrorMessage(\n state.errors(),\n this.i18n.validation,\n this.errorMessages() ?? undefined,\n );\n }\n\n this.controlTick();\n const control = this.signalField() ? null : this.ngControl()?.control;\n if (!control || control.disabled || !control.invalid) return null;\n\n const gate = this.errorOn();\n const visible =\n gate === 'always' ||\n (gate === 'dirty' ? control.dirty : control.touched || control.dirty) ||\n this.submitted();\n if (!visible) return null;\n\n return mkFirstErrorMessage(\n control.errors,\n this.i18n.validation,\n this.errorMessages() ?? undefined,\n );\n });\n\n /** The message actually rendered — an explicit `error` always wins. */\n readonly errorText = computed<string | null>(\n () => this.error() ?? this.autoError(),\n );\n\n /** Whether the field currently has an error. */\n readonly hasError = computed(() => !!this.errorText());\n\n /** Required either explicitly or through the bound control's validators. */\n readonly isRequired = computed(() => {\n if (this.required()) return true;\n const state = this.fieldState();\n if (state) return state.required();\n this.controlTick();\n return this.ngControl()?.control?.hasValidator(Validators.required) ?? false;\n });\n\n /** Disabled either explicitly or through the bound control. */\n readonly isDisabled = computed(() => {\n if (this.disabled()) return true;\n const state = this.fieldState();\n if (state) return state.disabled();\n this.controlTick();\n return this.ngControl()?.control?.disabled ?? false;\n });\n\n /** Whether the hint should be shown (hidden while an error is present). */\n readonly hintVisible = computed(() => !this.hasError() && !!this.hint());\n\n /**\n * Space-separated id list for a nested control's `aria-describedby`,\n * or `null` when there is nothing to describe.\n */\n readonly describedBy = computed(() => {\n const ids: string[] = [];\n if (this.hintVisible()) ids.push(this.hintId);\n if (this.hasError()) ids.push(this.errorId);\n return ids.length ? ids.join(' ') : null;\n });\n}\n","@if (label() && labelPosition() !== 'float') {\n <label class=\"mk-form-field__label\" [id]=\"labelId\" [attr.for]=\"controlId\">\n <span class=\"mk-form-field__label-text\">{{ label() }}</span>\n @if (isRequired()) {\n <span class=\"mk-form-field__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n}\n\n<div class=\"mk-form-field__control\">\n <ng-content />\n @if (label() && labelPosition() === 'float') {\n <label class=\"mk-form-field__label mk-form-field__label--float\" [id]=\"labelId\" [attr.for]=\"controlId\">\n <span class=\"mk-form-field__label-text\">{{ label() }}</span>\n @if (isRequired()) {\n <span class=\"mk-form-field__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n</div>\n\n@if (hintVisible()) {\n <p class=\"mk-form-field__hint\" [id]=\"hintId\">{{ hint() }}</p>\n}\n\n@if (hasError()) {\n <p class=\"mk-form-field__error\" [id]=\"errorId\" role=\"alert\">{{ errorText() }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n DestroyRef,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormGroup,\n FormGroupDirective,\n NgForm,\n} from '@angular/forms';\nimport type { Field, ReadonlyFieldState } from '@angular/forms/signals';\nimport type { Subscription } from 'rxjs';\nimport type { MkErrorMessages } from '@mk-kit/ui/core';\nimport { MK_I18N, mkFirstErrorMessage, mkSignalErrorMessage } from '@mk-kit/ui/core';\n\n/** One field-level error to surface in {@link MkFormErrorSummary}. */\nexport interface MkFormError {\n /**\n * The `id` of the control (or `mk-form-field`'s `controlId`) the message\n * refers to. Clicking the summary entry focuses this element.\n */\n fieldId: string;\n /** The human-readable error message. */\n message: string;\n}\n\n/**\n * FormErrorSummary — an accessible summary of a form's validation errors,\n * shown at the top of the form on a failed submit. Each entry links to its\n * field and focuses it on click. Following the WAI/GOV.UK pattern it is an\n * `alert` region and, when the surrounding form is submitted with errors,\n * focus moves here automatically (opt out with `[autoFocus]=\"false\"`) so\n * screen-reader and keyboard users are taken straight to the problems. The\n * public `focus()` remains for manual flows (e.g. server-side errors).\n *\n * ## Automatic collection\n *\n * Point `form` at a `FormGroup` and the summary walks it itself: one entry per\n * invalid control, worded from the `validation` i18n table (override per key\n * with `errorMessages`). Pass `labels` to name the fields — without an entry\n * the control's path is used. Entries appear once the form is submitted;\n * `showOn=\"always\"` lists them as soon as they exist.\n *\n * Each entry is linked to its field by locating the control in the DOM, so\n * `formControlName` must be a static attribute (`formControlName=\"email\"`,\n * the usual form) rather than a binding.\n *\n * ## Signal Forms\n *\n * Point `field` at a Signal Forms root (`[field]=\"f\"`) instead of `form` and\n * the summary reads `errorSummary()` from the `FieldTree`: one entry per\n * invalid field, keyed by dotted path in `labels` / `errorMessages` like the\n * reactive path. With the default `showOn=\"submit\"` an entry appears once its\n * field is touched — `submit()` marks every field touched, so a failed submit\n * lists them all. Clicking an entry focuses the control bound with\n * `[formField]`. When the summary sits inside the `<form>`, focus also moves\n * to it after the form's `submit` event, as with `ngSubmit`.\n *\n * ```html\n * <form (submit)=\"save($event)\">\n * <mk-form-error-summary [field]=\"f\" [labels]=\"{ email: 'Email address' }\" />\n * …\n * </form>\n * ```\n *\n * ```html\n * <!-- automatic -->\n * <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n * <mk-form-error-summary #summary [form]=\"form\"\n * [labels]=\"{ email: 'Email address', age: 'Age' }\" />\n * …\n * </form>\n *\n * <!-- manual -->\n * <mk-form-error-summary #summary [errors]=\"errors()\" />\n * …\n * onSubmit() { if (invalid) { this.errors.set(collect()); this.summary.focus(); } }\n * ```\n */\n@Component({\n selector: 'mk-form-error-summary',\n templateUrl: './form-error-summary.html',\n styleUrl: './form-error-summary.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'mkFormErrorSummary',\n host: {\n class: 'mk-form-error-summary',\n role: 'alert',\n tabindex: '-1',\n '[attr.hidden]': 'hasErrors() ? null : \"\"',\n '[attr.aria-labelledby]': 'hasErrors() ? titleId : null',\n },\n})\nexport class MkFormErrorSummary {\n private readonly document = inject(DOCUMENT);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly i18n = inject(MK_I18N);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, {\n optional: true,\n });\n\n /**\n * Errors to list explicitly. When non-empty this wins over `form`, so a form\n * can mix automatic collection with server-side errors by not setting it.\n */\n readonly errors = input<readonly MkFormError[]>([]);\n /** Collect errors from this control tree instead of passing them in. */\n readonly form = input<AbstractControl | null>(null);\n /**\n * Collect errors from this Signal Forms field (usually the root returned by\n * `form()`) instead of `form`. Entries are keyed by dotted path for `labels`.\n */\n readonly field = input<Field<unknown> | null>(null);\n /** Field names for automatic entries, keyed by control path. */\n readonly labels = input<Readonly<Record<string, string>>>({});\n /** Per-key wording for automatic entries, as on `mk-form-field`. */\n readonly errorMessages = input<MkErrorMessages | null>(null);\n /** When automatic entries appear. Defaults to after the form is submitted. */\n readonly showOn = input<'submit' | 'always'>('submit');\n /** Heading shown above the list. */\n readonly summaryTitle = input<string>(this.i18n.errorSummaryTitle);\n /**\n * Move focus to the summary automatically when the surrounding form is\n * submitted with errors (the WAI/GOV.UK pattern). Disable to drive focus\n * yourself via the public `focus()`.\n */\n readonly autoFocus = input(true, { transform: booleanAttribute });\n\n readonly titleId = `${this.host.nativeElement.id || 'mk-error-summary'}-title`;\n\n /** Bumped on every change in the watched control tree. */\n private readonly formTick = signal(0);\n\n constructor() {\n const bump = () => this.formTick.update((n) => n + 1);\n let sub: Subscription | null = null;\n\n const injector = inject(Injector);\n const onSubmit = () => {\n bump();\n // After the entries have rendered (and [hidden] cleared), take the\n // user straight to the problems. `focus()` no-ops without errors.\n if (this.autoFocus()) {\n afterNextRender(() => this.focus(), { injector });\n }\n };\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n const submitSub = submit?.subscribe(onSubmit) ?? null;\n\n // Signal Forms has no `ngSubmit`; a summary placed inside the `<form>`\n // follows the native submit event instead (`submit()` marks every field\n // touched synchronously, so the entries exist by the next render).\n let nativeForm: HTMLFormElement | null = null;\n afterNextRender(() => {\n if (!this.field()) return;\n nativeForm = this.host.nativeElement.closest('form');\n nativeForm?.addEventListener('submit', onSubmit);\n });\n\n effect(() => {\n const form = this.form();\n sub?.unsubscribe();\n sub = form ? form.events.subscribe(bump) : null;\n });\n\n inject(DestroyRef).onDestroy(() => {\n sub?.unsubscribe();\n submitSub?.unsubscribe();\n nativeForm?.removeEventListener('submit', onSubmit);\n });\n }\n\n /** Whether the surrounding form (if any) has been submitted. */\n private readonly submitted = computed(() => {\n this.formTick();\n return (\n this.parentFormGroup?.submitted || this.parentForm?.submitted || false\n );\n });\n\n /**\n * Entries collected from `field` (a Signal Forms root), each with the element\n * carrying the field's `[formField]` binding so a click can focus it the way\n * `focusBoundControl()` would.\n */\n private readonly signalEntries = computed<\n readonly { error: MkFormError; element: HTMLElement | null }[]\n >(() => {\n const field = this.field();\n if (!field) return [];\n const root = field();\n const gateOnTouch = this.showOn() === 'submit';\n const labels = this.labels();\n const overrides = this.errorMessages() ?? undefined;\n const seen = new Set<string>();\n const out: { error: MkFormError; element: HTMLElement | null }[] = [];\n\n for (const err of root.errorSummary()) {\n const state = err.fieldTree();\n const name = state.name();\n if (seen.has(name) || state.disabled() || state.hidden()) continue;\n if (gateOnTouch && !state.touched()) continue;\n seen.add(name);\n const message = mkSignalErrorMessage([err], this.i18n.validation, overrides);\n if (!message) continue;\n const path = signalFieldPath(root, state) ?? '';\n const label = labels[path] ?? path;\n const element = state.formFieldBindings()[0]?.element ?? null;\n const fieldId = element?.id || name;\n out.push({\n error: { fieldId, message: label ? `${label}: ${message}` : message },\n element,\n });\n }\n return out;\n });\n\n /** Entries collected from `form`, when one is set and they should show. */\n private readonly autoErrors = computed<readonly MkFormError[]>(() => {\n if (this.field()) return this.signalEntries().map((e) => e.error);\n this.formTick();\n const form = this.form();\n if (!form) return [];\n if (this.showOn() === 'submit' && !this.submitted()) return [];\n\n const labels = this.labels();\n const overrides = this.errorMessages() ?? undefined;\n const out: MkFormError[] = [];\n\n for (const [path, control] of eachControl(form)) {\n if (control.disabled || !control.invalid || !control.errors) continue;\n const message = mkFirstErrorMessage(\n control.errors,\n this.i18n.validation,\n overrides,\n );\n if (!message) continue;\n const label = labels[path] ?? path;\n out.push({\n fieldId: this.fieldIdFor(path),\n message: label ? `${label}: ${message}` : message,\n });\n }\n return out;\n });\n\n /** The entries actually rendered — an explicit `errors` list wins. */\n protected readonly shownErrors = computed<readonly MkFormError[]>(() =>\n this.errors().length ? this.errors() : this.autoErrors(),\n );\n\n /** Whether there is anything to show. */\n protected readonly hasErrors = computed(() => this.shownErrors().length > 0);\n\n /** Move keyboard focus to the summary (call after a failed submit). */\n focus(): void {\n if (this.hasErrors()) this.host.nativeElement.focus();\n }\n\n /** Focus the field an entry points at (native anchor jump is unreliable). */\n protected focusField(event: Event, fieldId: string): void {\n const target =\n this.signalEntries().find((e) => e.error.fieldId === fieldId)?.element ??\n this.document.getElementById(fieldId) ??\n this.document.querySelector<HTMLElement>(\n `[formcontrolname=\"${cssEscape(fieldId)}\"]`,\n );\n if (!target) return;\n event.preventDefault();\n target.scrollIntoView?.({ block: 'center', behavior: 'smooth' });\n focusable(target)?.focus({ preventScroll: true });\n }\n\n /**\n * Resolves a control path to the id of the element to focus. Reactive forms\n * put `formControlName` in the DOM as a plain attribute, so the control can\n * be located from its path; the element's own `id` (which `mk-form-field`\n * assigns) is preferred so the link's `href` anchor also resolves.\n */\n private fieldIdFor(path: string): string {\n const el = this.document.querySelector<HTMLElement>(\n `[formcontrolname=\"${cssEscape(path.split('.').pop() ?? path)}\"]`,\n );\n return el?.id || path;\n }\n}\n\n/** Depth-first walk yielding `[dotted path, control]` for every leaf control. */\nfunction* eachControl(\n control: AbstractControl,\n path = '',\n): Generator<[string, AbstractControl]> {\n if (control instanceof FormGroup) {\n for (const [key, child] of Object.entries(control.controls)) {\n yield* eachControl(child, path ? `${path}.${key}` : key);\n }\n } else if (control instanceof FormArray) {\n for (let i = 0; i < control.controls.length; i++) {\n yield* eachControl(control.controls[i], `${path}.${i}`);\n }\n } else if (path) {\n yield [path, control];\n }\n}\n\n/**\n * Dotted path of a Signal Forms field under `root` (`'address.city'`,\n * `'contacts.0.name'`), found by walking the field tree along the model's\n * keys; `''` for the root itself, `null` when the field is not under `root`.\n */\nfunction signalFieldPath(\n root: ReadonlyFieldState<unknown>,\n target: ReadonlyFieldState<unknown>,\n): string | null {\n const wanted = target.name();\n const walk = (tree: Field<unknown>, path: string): string | null => {\n const state = tree();\n if (state.name() === wanted) return path;\n const value = state.value();\n if (!value || typeof value !== 'object') return null;\n const children = tree as unknown as Record<string, Field<unknown> | undefined>;\n for (const key of Object.keys(value)) {\n const child = children[key];\n if (typeof child !== 'function') continue;\n const found = walk(child, path ? `${path}.${key}` : key);\n if (found !== null) return found;\n }\n return null;\n };\n return walk(root.fieldTree as unknown as Field<unknown>, '');\n}\n\n/** Minimal attribute-value escaping for the selectors built above. */\nfunction cssEscape(value: string): string {\n return value.replace(/[\"\\\\]/g, '\\\\$&');\n}\n\n/** The element itself when focusable, otherwise its first focusable child. */\nfunction focusable(el: HTMLElement): HTMLElement | null {\n if (el.tabIndex >= 0 || /^(INPUT|SELECT|TEXTAREA|BUTTON|A)$/.test(el.tagName)) {\n return el;\n }\n return el.querySelector<HTMLElement>(\n 'input, select, textarea, button, a[href], [tabindex]:not([tabindex=\"-1\"])',\n );\n}\n","@if (hasErrors()) {\n <p [id]=\"titleId\" class=\"mk-form-error-summary__title\">{{ summaryTitle() }}</p>\n <ul class=\"mk-form-error-summary__list\">\n @for (error of shownErrors(); track error.fieldId) {\n <li class=\"mk-form-error-summary__item\">\n <a\n class=\"mk-form-error-summary__link\"\n [href]=\"'#' + error.fieldId\"\n (click)=\"focusField($event, error.fieldId)\"\n >{{ error.message }}</a\n >\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * InputGroup — wraps a native `input[mkInput]` with leading / trailing affixes\n * (icons, static text, compact buttons) inside one shared control frame. The\n * group carries the border, background and focus ring; the nested input\n * detects the group and drops its own chrome, so the whole assembly reads as\n * a single field.\n *\n * Project affixes with the `mkInputPrefix` / `mkInputSuffix` attributes. Both\n * are optional; interactive suffixes (a clear or scan button) keep their own\n * focus behaviour.\n *\n * Inside an `mk-form-field` the group inherits the field's size and invalid\n * state, and the field's label association still targets the inner input.\n *\n * ```html\n * <mk-input-group>\n * <mk-icon mkInputPrefix name=\"search\" />\n * <input mkInput type=\"search\" placeholder=\"Search…\" />\n * </mk-input-group>\n *\n * <mk-form-field label=\"Price\">\n * <mk-input-group>\n * <input mkInput type=\"number\" formControlName=\"price\" />\n * <span mkInputSuffix>zł</span>\n * </mk-input-group>\n * </mk-form-field>\n * ```\n */\n@Component({\n selector: 'mk-input-group',\n templateUrl: './input-group.html',\n styleUrl: './input-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-input-group',\n '[class.mk-input-group--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-input-group--md]': \"effectiveSize() === 'md'\",\n '[class.mk-input-group--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-input-group--invalid]': 'isInvalid()',\n '[class.mk-input-group--disabled]': 'isDisabled()',\n },\n})\nexport class MkInputGroup {\n private readonly field = inject(MkFormField, { optional: true });\n\n /** Control size. Ignored when nested in an `mk-form-field` (inherits it). */\n readonly size = input<MkSize>('md');\n /** Force the invalid visual when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Visually reflect a disabled inner control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** The size the group (and its nested input) renders at. */\n readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n /** Whether the group renders the invalid frame. */\n readonly isInvalid = computed(\n () => this.invalid() || (this.field?.hasError() ?? false),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || (this.field?.isDisabled() ?? false),\n );\n}\n","<span class=\"mk-input-group__affix mk-input-group__affix--prefix\"><ng-content select=\"[mkInputPrefix]\" /></span><ng-content /><span class=\"mk-input-group__affix mk-input-group__affix--suffix\"><ng-content select=\"[mkInputSuffix]\" /></span>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkInputGroup } from '../input-group/input-group';\n\n/**\n * Input — enhances a native `<input>` or `<textarea>` with mk-kit theming and\n * a11y wiring. It is an attribute-selector component so all native semantics\n * and keyboard behaviour come for free; this layers on tokenised styling, aria\n * state and form integration.\n *\n * It provides its own `ControlValueAccessor` (over the native `value`) so\n * `[(ngModel)]` and reactive forms write back to the DOM reliably — including\n * when the bound model is reset programmatically. IME composition is buffered\n * so `onChange` fires once per completed character, matching Angular's built-in\n * `DefaultValueAccessor`.\n *\n * When placed inside an `mk-form-field` it automatically adopts the field's\n * control id (so the `<label for>` associates), `aria-describedby`,\n * `aria-invalid` and `aria-required`.\n *\n * ```html\n * <input mkInput type=\"email\" placeholder=\"you@example.com\" />\n * <textarea mkInput rows=\"4\" [invalid]=\"true\"></textarea>\n * ```\n */\n@Component({\n selector: 'input[mkInput], textarea[mkInput]',\n templateUrl: './input.html',\n styleUrl: './input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-input',\n '[class.mk-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-input--md]': \"effectiveSize() === 'md'\",\n '[class.mk-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-input--invalid]': 'isInvalid()',\n '[class.mk-input--grouped]': 'inGroup',\n '[attr.id]': 'resolvedId()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '[attr.aria-required]': 'isRequired() || null',\n '[attr.aria-describedby]': 'describedBy()',\n '(input)': 'onInput($event)',\n '(compositionstart)': 'onCompositionStart()',\n '(compositionend)': 'onCompositionEnd($event)',\n '(blur)': 'onTouched()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkInput),\n multi: true,\n },\n ],\n})\nexport class MkInput implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly group = inject(MkInputGroup, { optional: true });\n private readonly host =\n inject<ElementRef<HTMLInputElement | HTMLTextAreaElement>>(ElementRef);\n private readonly initialId = this.host.nativeElement.getAttribute('id');\n\n /** Whether this input sits inside an `mk-input-group` (the group then owns the frame). */\n protected readonly inGroup = !!this.group;\n\n /** Control size. Ignored when nested in an `mk-form-field` (inherits it). */\n readonly size = input<MkSize>('md');\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field\n ? this.field.size()\n : (this.group?.effectiveSize() ?? this.size()),\n );\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.group?.isInvalid() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly resolvedId = computed(\n () => this.field?.controlId ?? this.initialId,\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n /** True while an IME composition is in flight (buffers `onChange`). */\n private composing = false;\n\n protected onInput(event: Event): void {\n if (this.composing) return;\n this.onChange((event.target as HTMLInputElement).value);\n }\n\n protected onCompositionStart(): void {\n this.composing = true;\n }\n\n protected onCompositionEnd(event: Event): void {\n this.composing = false;\n this.onChange((event.target as HTMLInputElement).value);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.host.nativeElement.value = value == null ? '' : String(value);\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.host.nativeElement.disabled = isDisabled;\n }\n}\n","<!-- Native input / textarea: no projected content. Styling + a11y only. -->\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize, MkTone, MkVariant } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkButton } from '@mk-kit/ui/button';\nimport { MkIcon } from '@mk-kit/ui/icon';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkInputGroup } from '../input-group/input-group';\n\n/**\n * SubmitInput — a short text entry and its action button rendered as one\n * connected control: the \"type a code and apply it\" pattern (discount codes,\n * gift cards, invite codes, newsletter sign-up, quick search).\n *\n * The button is disabled while the value is empty or blank, shows a spinner\n * while `loading` and emits {@link submitted} with the **trimmed** value on\n * click or on Enter.\n *\n * ## Enter never submits the surrounding form\n *\n * This control is normally dropped inside a bigger form (a checkout, a\n * settings page), where triggering that form's submit would be a bug. So the\n * action button is a `type=\"button\"` and, while `submitOnEnter` is on, the\n * Enter keydown is `preventDefault()`-ed — implicit form submission never\n * fires. Set `submitOnEnter=\"false\"` to restore the native behaviour and let\n * Enter reach the enclosing form.\n *\n * ## Button content\n *\n * The button is configured, not projected: `buttonLabel` sets its text.\n * Passing `buttonIcon` (a registered {@link MkIcon} name) switches it to the\n * square icon-only variant, where `buttonLabel` becomes its `aria-label` — so\n * the action always has an accessible name.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-submit-input\n * [(value)]=\"code\"\n * buttonLabel=\"Apply\"\n * [loading]=\"applying()\"\n * placeholder=\"SUMMER10\"\n * clearable\n * (submitted)=\"apply($event)\"\n * />\n *\n * <!-- icon-only, inside a field -->\n * <mk-form-field label=\"Search\">\n * <mk-submit-input buttonIcon=\"search\" buttonLabel=\"Search\" [(ngModel)]=\"q\" />\n * </mk-form-field>\n * ```\n */\n@Component({\n selector: 'mk-submit-input',\n templateUrl: './submit-input.html',\n styleUrl: './submit-input.scss',\n exportAs: 'mkSubmitInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkInputGroup, MkButton, MkIcon],\n host: {\n class: 'mk-submit-input',\n '[class.mk-submit-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-submit-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-submit-input--invalid]': 'isInvalid()',\n '[class.mk-submit-input--disabled]': 'isDisabled()',\n '[attr.aria-busy]': 'loading() || null',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSubmitInput),\n multi: true,\n },\n ],\n})\nexport class MkSubmitInput implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the whole control (input + button). */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('');\n /**\n * Accessible name for the inner input when the control is used outside an\n * `mk-form-field` (inside one, the field's `<label>` wins). Defaults to the\n * button's caption.\n */\n readonly label = input<string>('');\n /** Native `type` of the inner input (`text`, `search`, `email`, …). */\n readonly type = input<string>('text');\n /** Native `autocomplete` hint for the inner input. */\n readonly autocomplete = input<string>('off');\n /** Two-way value. `submitted` emits it trimmed; the model keeps what was typed. */\n readonly value = model<string>('');\n\n /** Button text — or, with `buttonIcon`, the icon button's `aria-label`. */\n readonly buttonLabel = input<string>('');\n /** Registered icon name; switches the button to the icon-only variant. */\n readonly buttonIcon = input<string>('');\n /** Button visual treatment. */\n readonly buttonVariant = input<MkVariant>('solid');\n /** Button colour tone. */\n readonly buttonTone = input<MkTone>('primary');\n /** Shows a spinner in the button and blocks submitting while an action runs. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Show a clear affix while the value is non-empty. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /**\n * Submit on Enter, without submitting an enclosing `<form>`. Turn it off to\n * let Enter bubble to the form as the browser normally would.\n */\n readonly submitOnEnter = input(true, { transform: booleanAttribute });\n\n /** Emits the current value, trimmed, when the action is triggered. */\n readonly submitted = output<string>();\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** Id of the inner input — the `<label for>` target inside an `mk-form-field`. */\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-submit-input');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n /** Fallback accessible name for the input when no field label describes it. */\n protected readonly inputLabel = computed(() =>\n this.labelledBy() ? null : this.label() || this.actionLabel(),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The accessible name of the action button in either variant. */\n protected readonly actionLabel = computed(\n () => this.buttonLabel() || this.i18n.submit,\n );\n /** Whether the clear affix is currently rendered. */\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n /** Blank values, a disabled control and an in-flight action all block submitting. */\n protected readonly canSubmit = computed(\n () => !this.isDisabled() && !this.loading() && this.value().trim() !== '',\n );\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).value;\n this.value.set(next);\n this.onChange(next);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || !this.submitOnEnter()) return;\n // Swallow the key so the browser's implicit submission of an enclosing\n // <form> never fires — this control owns Enter.\n event.preventDefault();\n this.submit();\n }\n\n /** Emit `submitted` with the trimmed value, when the control allows it. */\n submit(): void {\n if (!this.canSubmit()) return;\n this.submitted.emit(this.value().trim());\n }\n\n /** Clear the value and return focus to the input. */\n clear(): void {\n this.value.set('');\n this.onChange('');\n this.inputRef()?.nativeElement.focus();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set(value == null ? '' : String(value));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<mk-input-group\n [size]=\"effectiveSize()\"\n [invalid]=\"isInvalid()\"\n [disabled]=\"isDisabled()\"\n>\n <input\n #input\n class=\"mk-submit-input__field\"\n [id]=\"inputId\"\n [type]=\"type()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"inputLabel()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-submit-input__clear\"\n [attr.aria-label]=\"i18n.clear\"\n tabindex=\"-1\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"clear()\"\n ></button>\n }\n\n <button\n mkButton\n type=\"button\"\n class=\"mk-submit-input__button\"\n [size]=\"effectiveSize()\"\n [variant]=\"buttonVariant()\"\n [tone]=\"buttonTone()\"\n [iconOnly]=\"!!buttonIcon()\"\n [loading]=\"loading()\"\n [disabled]=\"!canSubmit()\"\n [attr.aria-label]=\"buttonIcon() ? actionLabel() : null\"\n (click)=\"submit()\"\n >\n @if (buttonIcon()) {\n <mk-icon [name]=\"buttonIcon()\" [size]=\"effectiveSize()\" />\n } @else {\n {{ actionLabel() }}\n }\n </button>\n</mk-input-group>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { MkButtonToggleGroup } from './button-toggle-group';\n\n/**\n * A single segment inside an `mk-button-toggle-group`. Projected content is the\n * label (text, an icon, or both). Its selected state and keyboard behaviour are\n * driven by the parent group.\n *\n * ```html\n * <mk-button-toggle value=\"bold\" aria-label=\"Bold\"><b>B</b></mk-button-toggle>\n * ```\n */\n@Component({\n selector: 'mk-button-toggle',\n templateUrl: './button-toggle.html',\n styleUrl: './button-toggle.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-button-toggle',\n '[class.mk-button-toggle--selected]': 'selected()',\n '[class.mk-button-toggle--disabled]': 'isDisabled()',\n },\n})\nexport class MkButtonToggle {\n private readonly group = inject<MkButtonToggleGroup>(\n forwardRef(() => MkButtonToggleGroup),\n { optional: true },\n );\n private readonly btnRef = viewChild.required<ElementRef<HTMLButtonElement>>(\n 'btn',\n );\n\n /** The value contributed to the group's selection when this item is on. */\n readonly value = input<unknown>(undefined);\n /** Disable just this item. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Whether this item is currently selected (owned by the parent group). */\n readonly selected = computed(() => this.group?.isSelected(this) ?? false);\n /** Disabled if the item or the whole group is disabled. */\n readonly isDisabled = computed(\n () => this.disabled() || (this.group?.isDisabled() ?? false),\n );\n\n /** `radio` in single-select groups; a plain toggle button in multiple mode. */\n protected readonly role = computed(() =>\n this.group && !this.group.multiple() ? 'radio' : null,\n );\n /** `aria-checked` for the radio role; `null` otherwise. */\n protected readonly ariaChecked = computed(() =>\n this.role() === 'radio' ? this.selected() : null,\n );\n /** `aria-pressed` for multiple-select toggle buttons; `null` otherwise. */\n protected readonly ariaPressed = computed(() =>\n this.group?.multiple() ? this.selected() : null,\n );\n /** Roving tabindex position within the group. */\n protected readonly tabIndex = computed(() => this.group?.tabIndexFor(this) ?? 0);\n\n protected onClick(): void {\n this.group?.select(this);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n this.group?.onKeydown(event, this);\n }\n\n /** Move focus to this item's button. Called by the parent group. */\n focus(): void {\n this.btnRef().nativeElement.focus();\n }\n}\n","<button\n #btn\n type=\"button\"\n class=\"mk-button-toggle__btn\"\n [attr.role]=\"role()\"\n [attr.aria-checked]=\"ariaChecked()\"\n [attr.aria-pressed]=\"ariaPressed()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [disabled]=\"isDisabled()\"\n [attr.tabindex]=\"tabIndex()\"\n (click)=\"onClick()\"\n (keydown)=\"onKeydown($event)\"\n>\n <ng-content />\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkButtonToggle } from './button-toggle';\n\n/**\n * ButtonToggleGroup — a segmented control grouping one or more\n * `mk-button-toggle` items into a single, keyboard-operable selection.\n *\n * In single-select mode (default) the group is an ARIA `radiogroup`: exactly\n * one item is selected, Arrow keys move and select, and the selected item is\n * the tab stop. Set `multiple` to allow any number of items — the group\n * becomes a toolbar of independent `aria-pressed` buttons.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model. In\n * single mode `value` is the chosen item's `value`; in multiple mode it is an\n * array of the selected values.\n *\n * ```html\n * <mk-button-toggle-group [(value)]=\"view\" aria-label=\"View\">\n * <mk-button-toggle value=\"grid\">Grid</mk-button-toggle>\n * <mk-button-toggle value=\"list\">List</mk-button-toggle>\n * </mk-button-toggle-group>\n * ```\n */\n@Component({\n selector: 'mk-button-toggle-group',\n templateUrl: './button-toggle-group.html',\n styleUrl: './button-toggle-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-button-toggle-group',\n '[attr.role]': \"multiple() ? 'group' : 'radiogroup'\",\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.data-tone]': 'tone()',\n '[class.mk-button-toggle-group--sm]': \"size() === 'sm'\",\n '[class.mk-button-toggle-group--md]': \"size() === 'md'\",\n '[class.mk-button-toggle-group--lg]': \"size() === 'lg'\",\n '[class.mk-button-toggle-group--disabled]': 'isDisabled()',\n '[class.mk-button-toggle-group--invalid]': 'isInvalid()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkButtonToggleGroup),\n multi: true,\n },\n ],\n})\nexport class MkButtonToggleGroup implements ControlValueAccessor {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n /** Optional surrounding form field — supplies label/hint/error wiring. */\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n\n /** Live list of projected toggle items, in DOM order. */\n readonly toggles = contentChildren(MkButtonToggle);\n\n /** Allow selecting any number of items (toolbar of `aria-pressed` buttons). */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Control size, applied to every item. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** The size actually applied (the form field's when nested). */\n readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n /** Label / description ids inherited from a surrounding form field. */\n protected readonly labelledBy = computed(() =>\n this.ariaLabel() ? null : (this.field?.labelId ?? null),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n /** Semantic color tone used for the selected fill. */\n readonly tone = input<MkTone>('primary');\n /** Disable the whole group. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Accessible name for the group (recommended). */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n\n /**\n * Two-way selected value. Single mode: the chosen item's `value` (or `null`).\n * Multiple mode: an array of selected values.\n */\n readonly value = model<unknown>(null);\n\n private readonly cvaDisabled = signal(false);\n private readonly roving = signal(-1);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n\n /** The single item that currently owns the tab stop (roving tabindex). */\n private readonly rovingTarget = computed<MkButtonToggle | null>(() => {\n const list = this.toggles();\n if (!list.length || this.isDisabled()) return null;\n const idx = this.roving();\n if (idx >= 0 && idx < list.length && !list[idx].disabled()) return list[idx];\n const selected = list.find((t) => this.isSelected(t) && !t.disabled());\n return selected ?? list.find((t) => !t.disabled()) ?? null;\n });\n\n /** Whether a given item is part of the current selection. */\n isSelected(toggle: MkButtonToggle): boolean {\n const v = this.value();\n if (this.multiple()) {\n return Array.isArray(v) && v.includes(toggle.value());\n }\n return v === toggle.value();\n }\n\n /** `0` for the item that owns the tab stop, `-1` for the rest. */\n tabIndexFor(toggle: MkButtonToggle): number {\n return this.rovingTarget() === toggle ? 0 : -1;\n }\n\n /** Toggle (multiple) or set (single) the selection for an item. */\n select(toggle: MkButtonToggle): void {\n if (this.isDisabled() || toggle.disabled()) return;\n if (this.multiple()) {\n const current = Array.isArray(this.value())\n ? [...(this.value() as unknown[])]\n : [];\n const at = current.indexOf(toggle.value());\n if (at >= 0) current.splice(at, 1);\n else current.push(toggle.value());\n this.commit(current);\n } else {\n if (this.value() === toggle.value()) return;\n this.commit(toggle.value());\n }\n }\n\n onKeydown(event: KeyboardEvent, toggle: MkButtonToggle): void {\n const list = this.toggles();\n const from = list.indexOf(toggle);\n let next = -1;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = this.nextEnabled(from, 1);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = this.nextEnabled(from, -1);\n break;\n case 'Home':\n next = this.nextEnabled(-1, 1);\n break;\n case 'End':\n next = this.nextEnabled(list.length, -1);\n break;\n case ' ':\n case 'Enter':\n event.preventDefault();\n this.select(toggle);\n return;\n default:\n return;\n }\n if (next >= 0) {\n event.preventDefault();\n this.roving.set(next);\n list[next].focus();\n // In single-select mode focus moves selection (radiogroup semantics).\n if (!this.multiple()) this.select(list[next]);\n }\n }\n\n private nextEnabled(from: number, step: number): number {\n const list = this.toggles();\n const count = list.length;\n if (!count) return -1;\n for (let i = 1; i <= count; i++) {\n const idx = (((from + step * i) % count) + count) % count;\n if (!list[idx].disabled()) return idx;\n }\n return -1;\n }\n\n private commit(value: unknown): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MkButtonToggle, MkButtonToggleGroup } from '../button-toggle';\nimport { MkInput } from '../input';\nimport { MkSize } from '@mk-kit/ui/core';\n\n/** One translatable locale offered by {@link MkI18nInput}. */\nexport interface MkI18nLocale {\n /** Value key in the bound record, e.g. `pl`. */\n code: string;\n /** Short switcher label, e.g. `PL`. */\n label: string;\n /** Longer name for the accessible label, e.g. `Polish`. */\n name?: string;\n}\n\n/** The bound value: one string per locale code. */\nexport type MkI18nValue = Record<string, string>;\n\n/**\n * I18nInput — one field that edits the same text in several languages.\n *\n * The common alternative is stacking one input per language, which grows the\n * form linearly with locale count and buries the field the author actually\n * cares about. This shows a single input and a compact switcher, and marks\n * which locales already have content so nothing is silently left untranslated.\n *\n * Binds a `Record<code, string>`, so it drops into reactive forms as one\n * control instead of a nested group:\n *\n * ```html\n * <mk-form-field label=\"Name\">\n * <mk-i18n-input formControlName=\"name\" [locales]=\"locales\" />\n * </mk-form-field>\n * ```\n *\n * ```ts\n * locales = [\n * { code: 'en', label: 'EN', name: 'English' },\n * { code: 'pl', label: 'PL', name: 'Polish' },\n * ];\n * ```\n */\n@Component({\n selector: 'mk-i18n-input',\n templateUrl: './i18n-input.html',\n styleUrl: './i18n-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, MkButtonToggle, MkButtonToggleGroup, MkInput],\n host: { class: 'mk-i18n-input' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkI18nInput),\n multi: true,\n },\n ],\n})\nexport class MkI18nInput implements ControlValueAccessor {\n /** Locales offered, in switcher order. The first is the initial tab. */\n readonly locales = input<readonly MkI18nLocale[]>([]);\n /** Render a textarea instead of a single-line input. */\n readonly multiline = input(false, { transform: booleanAttribute });\n /** Textarea rows (ignored unless `multiline`). */\n readonly rows = input(3, { transform: numberAttribute });\n /** Placeholder for the active locale's input. */\n readonly placeholder = input('');\n /** Control size, forwarded to the input and the switcher. */\n readonly size = input<MkSize>('md');\n /**\n * Locale codes that must be filled. They get a marker in the switcher while\n * empty, so a missing translation is visible without switching to it.\n */\n readonly requiredLocales = input<readonly string[]>([]);\n /** Disable the whole control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private readonly value = signal<MkI18nValue>({});\n private readonly cvaDisabled = signal(false);\n protected readonly activeCode = signal<string | null>(null);\n\n /** The locale currently being edited — the first one until switched. */\n protected readonly active = computed(() => {\n const list = this.locales();\n const code = this.activeCode();\n return list.find((l) => l.code === code) ?? list[0] ?? null;\n });\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n /** Text for the active locale. */\n protected readonly activeText = computed(() => {\n const code = this.active()?.code;\n return code ? (this.value()[code] ?? '') : '';\n });\n\n /** Locale codes that currently hold text — drives the switcher markers. */\n protected readonly filled = computed(() => {\n const v = this.value();\n return new Set(\n Object.keys(v).filter((code) => (v[code] ?? '').trim().length > 0),\n );\n });\n\n /** True when a required locale is still empty. */\n protected missing(code: string): boolean {\n return this.requiredLocales().includes(code) && !this.filled().has(code);\n }\n\n protected onSwitch(code: string): void {\n this.activeCode.set(code);\n }\n\n protected onInput(text: string): void {\n const code = this.active()?.code;\n if (!code) return;\n const next = { ...this.value(), [code]: text };\n this.value.set(next);\n this.onChange(next);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n /** Accessible label for a switcher item, e.g. \"Polish — missing\". */\n protected switcherAria(locale: MkI18nLocale): string {\n const base = locale.name ?? locale.label;\n return this.missing(locale.code) ? `${base} (empty)` : base;\n }\n\n // ── ControlValueAccessor ────────────────────────────────────────────────\n private onChange: (value: MkI18nValue) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: MkI18nValue | null): void {\n this.value.set(value ?? {});\n }\n\n registerOnChange(fn: (value: MkI18nValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","@if (locales().length > 1) {\n <mk-button-toggle-group\n class=\"mk-i18n-input__switcher\"\n [size]=\"size()\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"active()?.code\"\n (ngModelChange)=\"onSwitch($event)\"\n >\n @for (locale of locales(); track locale.code) {\n <mk-button-toggle [value]=\"locale.code\" [attr.aria-label]=\"switcherAria(locale)\">\n {{ locale.label }}\n @if (missing(locale.code)) {\n <span class=\"mk-i18n-input__marker\" aria-hidden=\"true\">•</span>\n }\n </mk-button-toggle>\n }\n </mk-button-toggle-group>\n}\n\n@if (multiline()) {\n <textarea\n mkInput\n class=\"mk-i18n-input__field\"\n [rows]=\"rows()\"\n [size]=\"size()\"\n [disabled]=\"isDisabled()\"\n [placeholder]=\"placeholder()\"\n [value]=\"activeText()\"\n [attr.lang]=\"active()?.code\"\n (input)=\"onInput($any($event.target).value)\"\n (blur)=\"onBlur()\"\n ></textarea>\n} @else {\n <input\n mkInput\n class=\"mk-i18n-input__field\"\n [size]=\"size()\"\n [disabled]=\"isDisabled()\"\n [placeholder]=\"placeholder()\"\n [value]=\"activeText()\"\n [attr.lang]=\"active()?.code\"\n (input)=\"onInput($any($event.target).value)\"\n (blur)=\"onBlur()\"\n />\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n type OnDestroy,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single selectable option for {@link MkSelect}. */\nexport interface MkSelectOption {\n /** Text shown to the user (and used for typeahead). */\n label: string;\n /** The value bound to the form control when chosen. */\n value: unknown;\n /** Disable the option (skipped by keyboard + not selectable). */\n disabled?: boolean;\n}\n\n/**\n * Select — a fully custom, accessible single-select implementing the ARIA\n * listbox/combobox pattern. Options are supplied via the `options` input.\n *\n * Keyboard: Up/Down to move, Home/End to jump, Enter/Space to select, Esc to\n * close, and typeahead by typing option text. Focus stays on the trigger\n * (`aria-activedescendant` pattern) for robust screen-reader behaviour.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so it\n * works with `[(ngModel)]`, reactive forms and `[(value)]`.\n *\n * ```html\n * <mk-select placeholder=\"Pick a role\"\n * [options]=\"[{label:'Admin', value:'admin'}, {label:'Editor', value:'editor'}]\"\n * [(ngModel)]=\"role\" />\n * ```\n */\n@Component({\n selector: 'mk-select',\n templateUrl: './select.html',\n styleUrl: './select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-select',\n '[class.mk-select--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-select--md]': \"effectiveSize() === 'md'\",\n '[class.mk-select--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-select--open]': 'open()',\n '[class.mk-select--invalid]': 'isInvalid()',\n '[class.mk-select--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSelect),\n multi: true,\n },\n ],\n})\nexport class MkSelect implements ControlValueAccessor, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n\n /** The list of options to choose from. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly options = input<readonly MkSelectOption[]>([]);\n /** Placeholder shown when nothing is selected. */\n readonly placeholder = input<string>(this.i18n.selectPlaceholder);\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Two-way selected value. */\n readonly value = model<unknown>(null);\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n private typeahead = '';\n private typeaheadTimer?: ReturnType<typeof setTimeout>;\n\n readonly listId = mkUniqueId('mk-select-list');\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-select');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n protected readonly selectedIndex = computed(() =>\n this.options().findIndex((o) => o.value === this.value()),\n );\n protected readonly displayLabel = computed(\n () => this.options()[this.selectedIndex()]?.label ?? '',\n );\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openList();\n }\n\n private openList(): void {\n if (this.isDisabled()) return;\n this.open.set(true);\n const sel = this.selectedIndex();\n this.activeIndex.set(sel >= 0 ? sel : this.firstEnabled());\n }\n\n protected close(): void {\n if (!this.open()) return;\n this.open.set(false);\n this.activeIndex.set(-1);\n this.onTouched();\n }\n\n protected selectOption(index: number): void {\n const opt = this.options()[index];\n if (!opt || opt.disabled) return;\n this.value.set(opt.value);\n this.onChange(opt.value);\n this.close();\n this.focusTrigger();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const key = e.key;\n\n if (!this.open()) {\n if (\n key === 'ArrowDown' ||\n key === 'ArrowUp' ||\n key === 'Enter' ||\n key === ' '\n ) {\n e.preventDefault();\n this.openList();\n } else if (key.length === 1) {\n this.openList();\n this.typeaheadSearch(key);\n }\n return;\n }\n\n switch (key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.selectOption(this.activeIndex());\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n this.focusTrigger();\n break;\n case 'Tab':\n this.close();\n break;\n default:\n if (key.length === 1) this.typeaheadSearch(key);\n }\n }\n\n protected onBlur(): void {\n // Closing on blur also fires onTouched via close().\n if (this.open()) this.close();\n else this.onTouched();\n }\n\n private move(delta: number): void {\n const opts = this.options();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.options().findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(): number {\n const opts = this.options();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) return i;\n }\n return -1;\n }\n\n private typeaheadSearch(char: string): void {\n this.typeahead += char.toLowerCase();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.typeaheadTimer = setTimeout(() => (this.typeahead = ''), 500);\n\n const opts = this.options();\n const match = opts.findIndex(\n (o) => !o.disabled && o.label.toLowerCase().startsWith(this.typeahead),\n );\n if (match >= 0) this.activeIndex.set(match);\n }\n\n private focusTrigger(): void {\n this.triggerRef()?.nativeElement.focus();\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"mk-select__trigger\"\n [id]=\"triggerId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || null)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n>\n @if (displayLabel()) {\n <span class=\"mk-select__value\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-select__value mk-select__value--placeholder\">{{\n placeholder()\n }}</span>\n }\n <span class=\"mk-select__arrow\" aria-hidden=\"true\"></span>\n</button>\n\n@if (open()) {\n <ul\n class=\"mk-select__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"trigger\"\n [matchWidth]=\"true\"\n (dismiss)=\"close()\"\n [id]=\"listId\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"labelledBy()\"\n >\n @for (opt of options(); track $index; let i = $index) {\n <li\n class=\"mk-select__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n [class.mk-select__option--active]=\"i === activeIndex()\"\n [class.mk-select__option--selected]=\"i === selectedIndex()\"\n [class.mk-select__option--disabled]=\"opt.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"!opt.disabled && activeIndex.set(i)\"\n (click)=\"selectOption(i)\"\n >\n <span class=\"mk-select__option-label\">{{ opt.label }}</span>\n @if (i === selectedIndex()) {\n <span class=\"mk-select__check\" aria-hidden=\"true\"></span>\n }\n </li>\n } @empty {\n <li class=\"mk-select__empty\" role=\"presentation\">{{ i18n.noOptions }}</li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterRenderEffect,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n type OnDestroy,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport { MK_I18N, mkUniqueId, type MkSize } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/** One row of an `mk-listbox`. */\nexport interface MkListboxOption {\n /** Text shown (and matched by typeahead / the filter). */\n label: string;\n /** Value committed to the model when selected. */\n value: unknown;\n /** Secondary line under the label. */\n description?: string;\n /** Skipped by keyboard, not selectable. */\n disabled?: boolean;\n /** Options sharing a `group` render under one heading (keep them adjacent). */\n group?: string;\n}\n\n/** A rendered row: either a group heading or an option with its index in the visible list. */\ntype Row = { kind: 'group'; label: string; id: string } | { kind: 'option'; option: MkListboxOption; index: number };\n\n/**\n * Listbox — a standalone, always-visible selection list (the ARIA `listbox`\n * pattern) for one or many values: settings panes, \"choose a template\"\n * pickers, side-by-side assignments, any place a dropdown would hide choices\n * the user should see at once.\n *\n * Keyboard: Up / Down move, Home / End jump, PageUp / PageDown skip ten,\n * type to jump to a label, Enter / Space select (toggle when `multiple`),\n * Shift+Arrow / Shift+click extend a range, Ctrl/Cmd+A selects all. Focus\n * stays on the list (`aria-activedescendant`). With `filterable`, a search\n * box above the list narrows it by label or description.\n *\n * Implements `ControlValueAccessor` and a two-way `value` model — a single\n * value, or an array when `multiple`.\n *\n * ```html\n * <mk-listbox [options]=\"plans\" [(value)]=\"plan\" ariaLabel=\"Plan\" />\n * <mk-listbox multiple filterable [options]=\"people\" [(ngModel)]=\"reviewers\" />\n * ```\n */\n@Component({\n selector: 'mk-listbox',\n templateUrl: './listbox.html',\n styleUrl: './listbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-listbox',\n '[class.mk-listbox--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-listbox--md]': \"effectiveSize() === 'md'\",\n '[class.mk-listbox--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-listbox--multiple]': 'multiple()',\n '[class.mk-listbox--invalid]': 'isInvalid()',\n '[class.mk-listbox--disabled]': 'isDisabled()',\n },\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MkListbox), multi: true }],\n})\nexport class MkListbox implements ControlValueAccessor, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly listRef = viewChild.required<ElementRef<HTMLElement>>('list');\n\n /** The rows to choose from. */\n readonly options = input<readonly MkListboxOption[]>([]);\n /** Allow several values; the model becomes an array. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Show a search box that narrows the list by label / description. */\n readonly filterable = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input<string | undefined>(undefined);\n /**\n * Single-select only: moving with the arrow keys selects immediately\n * (default `true`); `false` requires Enter / Space to commit.\n */\n readonly selectionFollowsFocus = input(true, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Accessible name when there is no visible label / form field. */\n readonly ariaLabel = input<string | undefined>(undefined);\n readonly ariaLabelledby = input<string | undefined>(undefined);\n /** Text shown when no option matches the filter. */\n readonly emptyText = input<string | undefined>(undefined);\n /** Two-way value: one value, or an array when `multiple`. */\n readonly value = model<unknown>(null);\n\n /** Emitted after the user changes the selection (not on programmatic writes). */\n readonly change = output<unknown>();\n\n readonly listId = this.field?.controlId ?? mkUniqueId('mk-listbox');\n protected readonly filterId = mkUniqueId('mk-listbox-filter');\n protected readonly query = signal('');\n protected readonly activeIndex = signal(-1);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n private typeahead = '';\n private typeaheadTimer?: ReturnType<typeof setTimeout>;\n /** Range anchor for Shift selection (index in the visible list). */\n private anchor = -1;\n\n protected readonly effectiveSize = computed<MkSize>(() => (this.field ? this.field.size() : this.size()));\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isInvalid = computed(() => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false));\n protected readonly labelledBy = computed(() => this.ariaLabelledby() ?? this.field?.labelId ?? null);\n protected readonly describedBy = computed(() => this.field?.describedBy() ?? null);\n\n /** Options that match the filter, in source order. */\n protected readonly visible = computed<MkListboxOption[]>(() => {\n const q = this.query().trim().toLocaleLowerCase();\n const all = this.options();\n if (!q) return [...all];\n return all.filter(\n (o) => o.label.toLocaleLowerCase().includes(q) || (o.description?.toLocaleLowerCase().includes(q) ?? false),\n );\n });\n\n /** Visible options with group headings interleaved. */\n protected readonly rows = computed<Row[]>(() => {\n const out: Row[] = [];\n let lastGroup: string | undefined;\n this.visible().forEach((option, index) => {\n if (option.group && option.group !== lastGroup) {\n out.push({ kind: 'group', label: option.group, id: `${this.listId}-grp-${out.length}` });\n }\n lastGroup = option.group;\n out.push({ kind: 'option', option, index });\n });\n return out;\n });\n\n protected readonly selectedValues = computed<unknown[]>(() => {\n const v = this.value();\n if (this.multiple()) return Array.isArray(v) ? v : v == null ? [] : [v];\n return v == null ? [] : [v];\n });\n\n protected readonly activeId = computed(() => (this.activeIndex() >= 0 ? this.optionId(this.activeIndex()) : null));\n\n constructor() {\n // Keep the active row in view as it changes.\n afterRenderEffect(() => {\n const i = this.activeIndex();\n if (i < 0) return;\n const el = this.listRef().nativeElement.ownerDocument.getElementById(this.optionId(i));\n el?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected isSelected(option: MkListboxOption): boolean {\n return this.selectedValues().includes(option.value);\n }\n\n /** Focus the list. */\n focus(): void {\n this.listRef().nativeElement.focus();\n }\n\n // --- Pointer -----------------------------------------------------------------\n\n protected onOptionClick(index: number, event: MouseEvent): void {\n if (this.isDisabled()) return;\n const option = this.visible()[index];\n if (!option || option.disabled) return;\n this.activeIndex.set(index);\n if (this.multiple() && event.shiftKey && this.anchor >= 0) {\n this.selectRange(this.anchor, index, !(event.ctrlKey || event.metaKey));\n } else {\n this.commit(index, this.multiple() ? 'toggle' : 'select');\n this.anchor = index;\n }\n }\n\n protected onFilterInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n this.activeIndex.set(-1);\n this.anchor = -1;\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n // Arrow keys from the search box hand over to the list.\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.focus();\n this.jump(event.key === 'ArrowDown' ? this.firstEnabled() : this.lastEnabled(), false);\n }\n }\n\n // --- Keyboard ----------------------------------------------------------------\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n const key = event.key;\n const multi = this.multiple();\n switch (key) {\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n this.step(key === 'ArrowDown' ? 1 : -1, event.shiftKey);\n break;\n case 'Home':\n case 'End':\n event.preventDefault();\n this.jump(key === 'Home' ? this.firstEnabled() : this.lastEnabled(), event.shiftKey);\n break;\n case 'PageDown':\n case 'PageUp':\n event.preventDefault();\n this.step(key === 'PageDown' ? 10 : -10, event.shiftKey, false);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.activeIndex() >= 0) {\n this.commit(this.activeIndex(), multi ? 'toggle' : 'select');\n this.anchor = this.activeIndex();\n }\n break;\n case 'a':\n case 'A':\n if (multi && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this.selectAll();\n } else if (key.length === 1) this.typeaheadSearch(key);\n break;\n default:\n if (key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) this.typeaheadSearch(key);\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n /** Move the active row by `delta` (wrapping for ±1), extending the selection with Shift. */\n private step(delta: number, extend: boolean, wrap = true): void {\n const opts = this.visible();\n if (!opts.length) return;\n let i = this.activeIndex();\n if (i < 0) {\n this.jump(delta > 0 ? this.firstEnabled() : this.lastEnabled(), extend);\n return;\n }\n if (Math.abs(delta) === 1) {\n for (let s = 0; s < opts.length; s++) {\n i = wrap ? (i + delta + opts.length) % opts.length : Math.min(Math.max(i + delta, 0), opts.length - 1);\n if (!opts[i].disabled) break;\n }\n } else {\n i = Math.min(Math.max(i + delta, 0), opts.length - 1);\n // Land on an enabled row, searching in the direction of travel then back.\n let j = i;\n while (j >= 0 && j < opts.length && opts[j].disabled) j += Math.sign(delta);\n if (j < 0 || j >= opts.length) {\n j = i;\n while (j >= 0 && j < opts.length && opts[j].disabled) j -= Math.sign(delta);\n }\n i = j;\n }\n this.jump(i, extend);\n }\n\n private jump(index: number, extend: boolean): void {\n if (index < 0) return;\n this.activeIndex.set(index);\n if (this.multiple()) {\n if (extend) {\n if (this.anchor < 0) this.anchor = index;\n this.selectRange(this.anchor, index, true);\n } else {\n // Plain navigation moves the range anchor along with the cursor.\n this.anchor = index;\n }\n } else if (this.selectionFollowsFocus()) {\n this.commit(index, 'select');\n }\n }\n\n private firstEnabled(): number {\n return this.visible().findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(): number {\n const opts = this.visible();\n for (let i = opts.length - 1; i >= 0; i--) if (!opts[i].disabled) return i;\n return -1;\n }\n\n private typeaheadSearch(char: string): void {\n this.typeahead += char.toLocaleLowerCase();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.typeaheadTimer = setTimeout(() => (this.typeahead = ''), 500);\n const opts = this.visible();\n const start = this.activeIndex() + 1;\n for (let s = 0; s < opts.length; s++) {\n const i = (start + s) % opts.length;\n if (!opts[i].disabled && opts[i].label.toLocaleLowerCase().startsWith(this.typeahead)) {\n this.jump(i, false);\n return;\n }\n }\n }\n\n // --- Selection ---------------------------------------------------------------\n\n private commit(index: number, mode: 'select' | 'toggle'): void {\n const option = this.visible()[index];\n if (!option || option.disabled) return;\n if (!this.multiple()) {\n if (this.value() === option.value) return;\n this.emit(option.value);\n return;\n }\n const current = this.selectedValues();\n const next =\n mode === 'toggle' && current.includes(option.value)\n ? current.filter((v) => v !== option.value)\n : current.includes(option.value)\n ? current\n : [...current, option.value];\n this.emit(next);\n }\n\n /** Select every enabled option between two visible indexes (replacing, or adding to, the selection). */\n private selectRange(from: number, to: number, replace: boolean): void {\n const opts = this.visible();\n const [lo, hi] = from < to ? [from, to] : [to, from];\n const range = opts.slice(lo, hi + 1).filter((o) => !o.disabled).map((o) => o.value);\n const base = replace ? [] : this.selectedValues();\n this.emit([...base, ...range.filter((v) => !base.includes(v))]);\n }\n\n private selectAll(): void {\n const all = this.visible().filter((o) => !o.disabled).map((o) => o.value);\n const current = this.selectedValues();\n // Ctrl+A toggles: everything selected → clear, else select all.\n this.emit(all.every((v) => current.includes(v)) ? [] : all);\n }\n\n private emit(value: unknown): void {\n this.value.set(value);\n this.onChange(value);\n this.change.emit(value);\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n }\n\n // --- ControlValueAccessor ----------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","@if (filterable()) {\n <div class=\"mk-listbox__filter\">\n <input\n class=\"mk-listbox__filter-input\"\n type=\"search\"\n [id]=\"filterId\"\n [value]=\"query()\"\n [placeholder]=\"filterPlaceholder() ?? i18n.listboxFilter\"\n [disabled]=\"isDisabled()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-label]=\"i18n.listboxFilter\"\n autocomplete=\"off\"\n (input)=\"onFilterInput($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n />\n </div>\n}\n\n<ul\n #list\n class=\"mk-listbox__list\"\n role=\"listbox\"\n [id]=\"listId\"\n [tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-multiselectable]=\"multiple() ? 'true' : null\"\n [attr.aria-activedescendant]=\"activeId()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n>\n @for (row of rows(); track row.kind === 'group' ? row.id : row.option.value) {\n @if (row.kind === 'group') {\n <li class=\"mk-listbox__group\" role=\"presentation\" [id]=\"row.id\">{{ row.label }}</li>\n } @else {\n @let selected = isSelected(row.option);\n <li\n class=\"mk-listbox__option\"\n role=\"option\"\n [id]=\"optionId(row.index)\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-disabled]=\"row.option.disabled || null\"\n [class.mk-listbox__option--active]=\"row.index === activeIndex()\"\n [class.mk-listbox__option--selected]=\"selected\"\n [class.mk-listbox__option--disabled]=\"row.option.disabled\"\n (click)=\"onOptionClick(row.index, $event)\"\n >\n @if (multiple()) {\n <span class=\"mk-listbox__box\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 12 12\" width=\"12\" height=\"12\" focusable=\"false\"><path d=\"M2.5 6.5l2.5 2.5 4.5-5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></svg>\n </span>\n }\n <span class=\"mk-listbox__text\">\n <span class=\"mk-listbox__label\">{{ row.option.label }}</span>\n @if (row.option.description) {\n <span class=\"mk-listbox__description\">{{ row.option.description }}</span>\n }\n </span>\n @if (!multiple() && selected) {\n <span class=\"mk-listbox__check\" aria-hidden=\"true\"></span>\n }\n </li>\n }\n }\n @if (!rows().length) {\n <li class=\"mk-listbox__empty\" role=\"presentation\">{{ emptyText() ?? i18n.listboxEmpty }}</li>\n }\n</ul>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n type OnDestroy,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport { MK_I18N, MkAnchoredPanel, mkUniqueId, type MkSize } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/** One node of a cascader: a leaf, or a parent with `children`. */\nexport interface MkCascaderOption {\n label: string;\n value: unknown;\n children?: readonly MkCascaderOption[];\n disabled?: boolean;\n}\n\n/**\n * Cascader — a select whose choices are a hierarchy shown as side-by-side\n * columns (region → country → city, category → subcategory, org unit → team).\n * Each pick opens the next column; picking a leaf commits the whole path.\n *\n * The value is the **path** of option values (`['eu', 'pl', 'krk']`) by\n * default, or just the leaf's value with `valueMode=\"leaf\"`. Parents are only\n * selectable with `selectParents` (a click on one then commits, and its\n * children stay reachable).\n *\n * Keyboard: Up / Down move within a column, Right opens the children, Left\n * goes back, Enter / Space selects, typing jumps to a label, Escape closes.\n * `expandTrigger=\"hover\"` opens columns on pointer hover as well as click.\n *\n * Implements `ControlValueAccessor` and a two-way `value` model.\n *\n * ```html\n * <mk-cascader [options]=\"regions\" [(value)]=\"location\" placeholder=\"Where?\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-cascader',\n templateUrl: './cascader.html',\n styleUrl: './cascader.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-cascader',\n '[class.mk-cascader--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-cascader--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-cascader--open]': 'open()',\n '[class.mk-cascader--invalid]': 'isInvalid()',\n '[class.mk-cascader--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MkCascader), multi: true }],\n})\nexport class MkCascader implements ControlValueAccessor, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef = viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** The hierarchy to choose from. */\n readonly options = input<readonly MkCascaderOption[]>([]);\n /** Two-way value: the path of values (default) or the leaf value (`valueMode=\"leaf\"`). */\n readonly value = model<unknown>(null);\n /** Bind the full path of values (default) or only the chosen option's value. */\n readonly valueMode = input<'path' | 'leaf'>('path');\n /** Allow committing a parent option (click / Enter on it) instead of leaves only. */\n readonly selectParents = input(false, { transform: booleanAttribute });\n /** Open the next column on click (default) or also on pointer hover. */\n readonly expandTrigger = input<'click' | 'hover'>('click');\n readonly placeholder = input(this.i18n.selectPlaceholder);\n /** Text between the labels of the chosen path. */\n readonly separator = input(' / ');\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n /** Emitted after the user commits or clears a value. */\n readonly change = output<unknown>();\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-cascader');\n readonly panelId = mkUniqueId('mk-cascader-panel');\n readonly valueId = mkUniqueId('mk-cascader-value');\n\n protected readonly open = signal(false);\n /** Row index highlighted in each open column, left to right. */\n protected readonly activePath = signal<number[]>([]);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n private typeahead = '';\n private typeaheadTimer?: ReturnType<typeof setTimeout>;\n\n protected readonly effectiveSize = computed<MkSize>(() => (this.field ? this.field.size() : this.size()));\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isInvalid = computed(() => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false));\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(() => this.field?.describedBy() ?? null);\n\n /** The options along the committed value, or `[]`. */\n protected readonly selectedPath = computed<MkCascaderOption[]>(() => {\n const v = this.value();\n if (v == null) return [];\n if (this.valueMode() === 'path') {\n if (!Array.isArray(v)) return [];\n const out: MkCascaderOption[] = [];\n let list: readonly MkCascaderOption[] = this.options();\n for (const step of v) {\n const hit = list.find((o) => o.value === step);\n if (!hit) return [];\n out.push(hit);\n list = hit.children ?? [];\n }\n return out;\n }\n return this.findPath(this.options(), v) ?? [];\n });\n\n protected readonly displayLabel = computed(() => this.selectedPath().map((o) => o.label).join(this.separator()));\n\n /**\n * Columns rendered in the panel: the root list, then the children of every\n * opened parent along the active path. The last entry of the path is the\n * cursor — resting on a parent does not open it (click, hover or → does).\n */\n protected readonly columns = computed<readonly MkCascaderOption[][]>(() => {\n const cols: MkCascaderOption[][] = [[...this.options()]];\n const path = this.activePath();\n for (let depth = 0; depth < path.length - 1; depth++) {\n const opt = cols[depth]?.[path[depth]];\n if (!opt?.children?.length) break;\n cols.push([...opt.children]);\n }\n return cols;\n });\n\n /** The column the keyboard cursor is in. */\n private readonly cursorColumn = computed(() => Math.max(0, Math.min(this.activePath().length - 1, this.columns().length - 1)));\n\n protected readonly activeId = computed(() => {\n const path = this.activePath();\n const col = this.cursorColumn();\n return path.length ? this.optionId(col, path[col]) : null;\n });\n\n constructor() {\n afterRenderEffect(() => {\n const id = this.activeId();\n if (!id || !this.open()) return;\n this.panelRef()?.nativeElement.ownerDocument.getElementById(id)?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n protected optionId(column: number, row: number): string {\n return `${this.panelId}-c${column}-r${row}`;\n }\n\n protected isOnPath(column: number, row: number): boolean {\n return this.activePath()[column] === row;\n }\n\n protected isSelected(column: number, option: MkCascaderOption): boolean {\n return this.selectedPath()[column] === option;\n }\n\n protected isCursor(column: number, row: number): boolean {\n return this.cursorColumn() === column && this.activePath()[column] === row;\n }\n\n // --- Open / close ------------------------------------------------------------\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n // Start on the committed path (its columns open), else on the first row.\n const sel = this.selectedPath();\n const path = sel.length ? this.indexPath(sel) : [this.firstEnabled(this.options())].filter((i) => i >= 0);\n this.activePath.set(path);\n this.open.set(true);\n afterNextRender(() => this.panelRef()?.nativeElement.focus(), { injector: this.injector });\n }\n\n protected close(restoreFocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (restoreFocus) this.triggerRef()?.nativeElement.focus();\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.openPanel();\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (related && (this.host.nativeElement.contains(related) || this.panelRef()?.nativeElement.contains(related))) return;\n this.close();\n this.onTouched();\n }\n\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (!related) return;\n if (this.host.nativeElement.contains(related) || this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n // --- Pointer -----------------------------------------------------------------\n\n protected onOptionClick(column: number, row: number): void {\n const option = this.columns()[column]?.[row];\n if (!option || option.disabled) return;\n if (option.children?.length) {\n this.expand(column, row);\n if (this.selectParents()) this.commit(column, row);\n return;\n }\n this.setCursor(column, row);\n this.commit(column, row);\n }\n\n protected onOptionHover(column: number, row: number): void {\n if (this.expandTrigger() !== 'hover') return;\n const option = this.columns()[column]?.[row];\n if (!option || option.disabled) return;\n this.expand(column, row);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.emit(null);\n this.triggerRef()?.nativeElement.focus();\n }\n\n // --- Keyboard ----------------------------------------------------------------\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n const col = this.cursorColumn();\n const column = this.columns()[col] ?? [];\n const row = this.activePath()[col] ?? -1;\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault();\n const next = this.stepRow(column, row, event.key === 'ArrowDown' ? 1 : -1);\n if (next >= 0) this.setCursor(col, next);\n break;\n }\n case 'Home':\n case 'End': {\n event.preventDefault();\n const next = event.key === 'Home' ? this.firstEnabled(column) : this.lastEnabled(column);\n if (next >= 0) this.setCursor(col, next);\n break;\n }\n case 'ArrowRight':\n event.preventDefault();\n if (row >= 0) this.expand(col, row);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (col > 0) this.activePath.set(this.activePath().slice(0, col));\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const option = column[row];\n if (!option || option.disabled) break;\n if (option.children?.length && !this.selectParents()) {\n this.expand(col, row);\n } else {\n this.commit(col, row);\n }\n break;\n }\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n break;\n case 'Tab':\n this.close();\n break;\n default:\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n this.typeaheadSearch(event.key, col, column, row);\n }\n }\n }\n\n /** Point the cursor at `(column, row)`, trimming any deeper columns. */\n private setCursor(column: number, row: number): void {\n this.activePath.set([...this.activePath().slice(0, column), row]);\n }\n\n /** Open the children of `(column, row)` and move the cursor onto the first enabled one. */\n private expand(column: number, row: number): void {\n const option = this.columns()[column]?.[row];\n const children = option?.children;\n const first = children?.length ? this.firstEnabled(children) : -1;\n this.activePath.set(first >= 0 ? [...this.activePath().slice(0, column), row, first] : [...this.activePath().slice(0, column), row]);\n }\n\n private stepRow(column: readonly MkCascaderOption[], from: number, delta: number): number {\n if (!column.length) return -1;\n let i = from;\n for (let s = 0; s < column.length; s++) {\n i = (i + delta + column.length) % column.length;\n if (!column[i].disabled) return i;\n }\n return -1;\n }\n\n private firstEnabled(list: readonly MkCascaderOption[]): number {\n return list.findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(list: readonly MkCascaderOption[]): number {\n for (let i = list.length - 1; i >= 0; i--) if (!list[i].disabled) return i;\n return -1;\n }\n\n private typeaheadSearch(char: string, col: number, column: readonly MkCascaderOption[], from: number): void {\n this.typeahead += char.toLocaleLowerCase();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.typeaheadTimer = setTimeout(() => (this.typeahead = ''), 500);\n for (let s = 1; s <= column.length; s++) {\n const i = (from + s) % column.length;\n if (!column[i].disabled && column[i].label.toLocaleLowerCase().startsWith(this.typeahead)) {\n this.setCursor(col, i);\n return;\n }\n }\n }\n\n // --- Value -------------------------------------------------------------------\n\n private commit(column: number, row: number): void {\n const cols = this.columns();\n const path: MkCascaderOption[] = [];\n for (let c = 0; c < column; c++) path.push(cols[c][this.activePath()[c]]);\n path.push(cols[column][row]);\n const value = this.valueMode() === 'path' ? path.map((o) => o.value) : path[path.length - 1].value;\n this.emit(value);\n this.close(true);\n }\n\n private emit(value: unknown): void {\n this.value.set(value);\n this.onChange(value);\n this.change.emit(value);\n }\n\n /** Row indexes of a path of options. */\n private indexPath(path: readonly MkCascaderOption[]): number[] {\n const out: number[] = [];\n let list: readonly MkCascaderOption[] = this.options();\n for (const opt of path) {\n const i = list.indexOf(opt);\n if (i < 0) break;\n out.push(i);\n list = opt.children ?? [];\n }\n return out;\n }\n\n /** Depth-first search for the option whose value is `value` (leaf mode). */\n private findPath(list: readonly MkCascaderOption[], value: unknown, trail: MkCascaderOption[] = []): MkCascaderOption[] | null {\n for (const opt of list) {\n const next = [...trail, opt];\n if (opt.value === value) return next;\n if (opt.children?.length) {\n const hit = this.findPath(opt.children, value, next);\n if (hit) return hit;\n }\n }\n return null;\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n }\n\n // --- ControlValueAccessor ----------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div #field class=\"mk-cascader__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-cascader__trigger\"\n [id]=\"triggerId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy() ? labelledBy() + ' ' + valueId : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (displayLabel()) {\n <span class=\"mk-cascader__value\" [id]=\"valueId\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-cascader__value mk-cascader__value--placeholder\" [id]=\"valueId\">{{ placeholder() }}</span>\n }\n <span class=\"mk-cascader__icon\" aria-hidden=\"true\"></span>\n </button>\n\n @if (clearable() && selectedPath().length && !isDisabled()) {\n <button type=\"button\" class=\"mk-cascader__clear\" [attr.aria-label]=\"i18n.clear\" (click)=\"clear($event)\">\n <span class=\"mk-cascader__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-cascader__panel\"\n role=\"listbox\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-activedescendant]=\"activeId()\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n (keydown)=\"onPanelKeydown($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n @for (column of columns(); track $index; let c = $index) {\n <ul class=\"mk-cascader__column\" role=\"group\">\n @for (opt of column; track $index; let r = $index) {\n <li\n class=\"mk-cascader__option\"\n role=\"option\"\n [id]=\"optionId(c, r)\"\n [attr.aria-selected]=\"isSelected(c, opt)\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n [class.mk-cascader__option--path]=\"isOnPath(c, r)\"\n [class.mk-cascader__option--cursor]=\"isCursor(c, r)\"\n [class.mk-cascader__option--selected]=\"isSelected(c, opt)\"\n [class.mk-cascader__option--disabled]=\"opt.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (mouseenter)=\"onOptionHover(c, r)\"\n (click)=\"onOptionClick(c, r)\"\n >\n <span class=\"mk-cascader__option-label\">{{ opt.label }}</span>\n @if (opt.children?.length) {\n <span class=\"mk-cascader__chevron\" aria-hidden=\"true\"></span>\n }\n </li>\n } @empty {\n <li class=\"mk-cascader__empty\" role=\"presentation\">{{ i18n.noOptions }}</li>\n }\n </ul>\n }\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single suggestion for {@link MkAutocomplete}. */\nexport interface MkAutocompleteOption {\n /** Text shown to the user and used as the input display value when chosen. */\n label: string;\n /** The value bound to the form control when this option is selected. */\n value: unknown;\n /** Disable the option (skipped by keyboard + not selectable). */\n disabled?: boolean;\n /**\n * Muted second line under the label — the disambiguator when labels can\n * collide (two customers named Jan Kowalski, telling accounts apart by\n * email, an id under a product name).\n */\n description?: string;\n}\n\n/** How the option list is narrowed against the typed text. */\nexport type MkAutocompleteFilterMode = 'contains' | 'startsWith' | 'none';\n\n/**\n * Autocomplete — an accessible text input that suggests options as the user\n * types, implementing the ARIA combobox (`aria-autocomplete=\"list\"`) pattern\n * with a popup listbox.\n *\n * Filtering is built in (`contains` / `startsWith`); set `filterMode=\"none\"`\n * and drive `options` yourself from the `search` output for async/server-side\n * suggestions. Typing arbitrary text is allowed unless `requireSelection` is\n * set, in which case the field clears on blur if it doesn't match an option.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so it\n * works with `[(ngModel)]`, reactive forms and `[(value)]`. When nested in an\n * `mk-form-field` it inherits size, label, hint/error and required wiring.\n *\n * ```html\n * <mk-autocomplete placeholder=\"Search users\"\n * [options]=\"filtered()\"\n * filterMode=\"none\"\n * (search)=\"query.set($event)\"\n * [(value)]=\"userId\" />\n * ```\n */\n@Component({\n selector: 'mk-autocomplete',\n templateUrl: './autocomplete.html',\n styleUrl: './autocomplete.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-autocomplete',\n '[class.mk-autocomplete--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-autocomplete--md]': \"effectiveSize() === 'md'\",\n '[class.mk-autocomplete--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-autocomplete--open]': 'open()',\n '[class.mk-autocomplete--invalid]': 'isInvalid()',\n '[class.mk-autocomplete--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkAutocomplete),\n multi: true,\n },\n ],\n})\nexport class MkAutocomplete implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Last announced result count (guards repeat announcements). */\n private lastAnnouncedCount = -1;\n\n constructor() {\n // Announce the suggestion count while the list is open (WCAG 4.1.3):\n // covers both built-in filtering and async `options` arriving via\n // `(search)`. Only a changed count is announced, so keystrokes that don't\n // narrow the list stay quiet.\n effect(() => {\n const open = this.open();\n const loading = this.loading();\n const count = this.filtered().length;\n if (!open || loading) {\n this.lastAnnouncedCount = -1;\n return;\n }\n if (count === this.lastAnnouncedCount) return;\n this.lastAnnouncedCount = count;\n this.announcer.announce(this.i18n.resultsCount(count));\n });\n }\n\n /** The list of suggestions. Update it from `search` for async sources. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly options = input<readonly MkAutocompleteOption[]>([]);\n /** Placeholder shown when the input is empty. */\n readonly placeholder = input<string>('');\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** How the option list is filtered against the typed text. */\n readonly filterMode = input<MkAutocompleteFilterMode>('contains');\n /** Only open the list once this many characters have been typed. */\n readonly minChars = input(0, { transform: numberAttribute });\n /** Show a loading row instead of \"no results\" (for async fetches). */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Clear the input on blur unless the text matches a selectable option. */\n readonly requireSelection = input(false, { transform: booleanAttribute });\n /** Message shown when there are no matching options. */\n readonly emptyMessage = input(this.i18n.noResults);\n\n /** Two-way selected value (the `value` of the chosen option, or `null`). */\n readonly value = model<unknown>(null);\n\n /** Emits the current input text on every keystroke — drive async loading. */\n readonly search = output<string>();\n /** Emits the option whenever one is committed by click or Enter. */\n readonly optionSelected = output<MkAutocompleteOption>();\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly query = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly listId = mkUniqueId('mk-ac-list');\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-ac');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Options after applying the built-in filter (or all, when `none`). */\n protected readonly filtered = computed<readonly MkAutocompleteOption[]>(() => {\n const mode = this.filterMode();\n const q = this.query().trim().toLowerCase();\n if (mode === 'none' || !q) return this.options();\n return this.options().filter((o) => {\n const label = o.label.toLowerCase();\n return mode === 'startsWith' ? label.startsWith(q) : label.includes(q);\n });\n });\n\n protected readonly hasResults = computed(() => this.filtered().length > 0);\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n /** The option matching the current value, if any. */\n private optionForValue(value: unknown): MkAutocompleteOption | undefined {\n return this.options().find((o) => o.value === value);\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.query.set(text);\n this.search.emit(text);\n // Typing frees the field from a previously committed value.\n if (this.value() !== null) {\n this.value.set(null);\n this.onChange(null);\n }\n this.openIfEligible();\n this.activeIndex.set(this.hasResults() ? this.firstEnabled() : -1);\n }\n\n protected onFocus(): void {\n this.openIfEligible();\n }\n\n private openIfEligible(): void {\n if (this.isDisabled()) return;\n const eligible = this.query().length >= this.minChars();\n this.open.set(eligible);\n if (eligible && this.activeIndex() < 0) {\n this.activeIndex.set(this.firstEnabled());\n }\n }\n\n protected close(): void {\n if (!this.open()) return;\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n\n protected selectOption(index: number): void {\n const opt = this.filtered()[index];\n if (!opt || opt.disabled) return;\n this.query.set(opt.label);\n this.value.set(opt.value);\n this.onChange(opt.value);\n this.optionSelected.emit(opt);\n this.close();\n this.focusInput();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const key = e.key;\n\n if (!this.open()) {\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n e.preventDefault();\n this.openIfEligible();\n }\n return;\n }\n\n switch (key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n if (this.open()) {\n e.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n }\n break;\n case 'End':\n if (this.open()) {\n e.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n }\n break;\n case 'Enter':\n if (this.activeIndex() >= 0) {\n e.preventDefault();\n this.selectOption(this.activeIndex());\n }\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n if (this.open()) this.close();\n this.reconcileOnBlur();\n }\n\n /**\n * When `requireSelection` is set, drop free text that doesn't map to an\n * option; otherwise restore the committed option's label if one exists.\n */\n private reconcileOnBlur(): void {\n const committed = this.optionForValue(this.value());\n if (committed) {\n if (this.query() !== committed.label) this.query.set(committed.label);\n return;\n }\n if (this.requireSelection() && this.query()) {\n this.query.set('');\n this.search.emit('');\n }\n }\n\n protected onOutsideDismiss(): void {\n if (!this.open()) return;\n this.close();\n this.reconcileOnBlur();\n }\n\n protected clear(): void {\n this.query.set('');\n this.value.set(null);\n this.onChange(null);\n this.search.emit('');\n this.focusInput();\n this.openIfEligible();\n }\n\n private move(delta: number): void {\n const opts = this.filtered();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.filtered().findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(): number {\n const opts = this.filtered();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) return i;\n }\n return -1;\n }\n\n private focusInput(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n const opt = this.optionForValue(value);\n this.query.set(opt?.label ?? (value == null ? '' : this.query()));\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div #field class=\"mk-autocomplete__field\">\n <input\n #input\n type=\"text\"\n class=\"mk-autocomplete__input\"\n [id]=\"inputId\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n aria-autocomplete=\"list\"\n [attr.aria-activedescendant]=\"\n open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || null)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n\n @if (query() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"mk-autocomplete__clear\"\n [attr.aria-label]=\"i18n.clear\"\n tabindex=\"-1\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"clear()\"\n ></button>\n }\n\n <span class=\"mk-autocomplete__arrow\" aria-hidden=\"true\"></span>\n</div>\n\n@if (open()) {\n <ul\n class=\"mk-autocomplete__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n [matchWidth]=\"true\"\n (dismiss)=\"onOutsideDismiss()\"\n [id]=\"listId\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"labelledBy()\"\n >\n @if (loading()) {\n <li class=\"mk-autocomplete__status\" role=\"presentation\">\n <span class=\"mk-autocomplete__spinner\" aria-hidden=\"true\"></span>\n {{ i18n.loading }}\n </li>\n } @else {\n @for (opt of filtered(); track $index; let i = $index) {\n <li\n class=\"mk-autocomplete__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === activeIndex()\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n [class.mk-autocomplete__option--active]=\"i === activeIndex()\"\n [class.mk-autocomplete__option--disabled]=\"opt.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"!opt.disabled && activeIndex.set(i)\"\n (click)=\"selectOption(i)\"\n >\n <span class=\"mk-autocomplete__option-label\">{{ opt.label }}</span>\n @if (opt.description) {\n <span class=\"mk-autocomplete__option-desc\">{{\n opt.description\n }}</span>\n }\n </li>\n } @empty {\n <li class=\"mk-autocomplete__status\" role=\"presentation\">\n {{ emptyMessage() }}\n </li>\n }\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n type Signal,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MK_I18N, MkAnchoredPanel } from '@mk-kit/ui/core';\nimport type { MkMentionOption } from './mention';\n\n/**\n * Suggestion listbox for {@link MkMention}. Created dynamically by the\n * directive and wired imperatively right after creation: the directive hands\n * it read-only signals (options, active index, caret anchor point) plus plain\n * callbacks, so the panel re-renders reactively without `setInput` churn.\n *\n * The `<ul>` is promoted to the top layer by `mkAnchoredPanel` and positioned\n * at the caret point; this host element stays empty in place.\n *\n * Not intended for direct use — the public API is the `[mkMention]` directive.\n */\n@Component({\n selector: 'mk-mention-panel',\n templateUrl: './mention-panel.html',\n styleUrl: './mention-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n})\nexport class MkMentionPanel {\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n // Wired by MkMention immediately after creation, before first render.\n options: Signal<readonly MkMentionOption[]> = signal([]);\n activeIndex: Signal<number> = signal(0);\n /** Caret point (viewport px) the panel is anchored to. */\n anchorPoint: Signal<{ x: number; y: number }> = signal({ x: 0, y: 0 });\n loading: Signal<boolean> = signal(false);\n listId = '';\n /**\n * The mention control itself — passed as the anchored panel's element\n * anchor so pointerdowns inside the control don't count as \"outside\"\n * dismissals (the point anchor still wins for positioning).\n */\n anchorEl: HTMLElement | undefined = undefined;\n onPick: (index: number) => void = () => {};\n onHover: (index: number) => void = () => {};\n onDismiss: () => void = () => {};\n\n private readonly panel = viewChild(MkAnchoredPanel);\n /** The teleported listbox element (used for the blur containment guard). */\n readonly list = viewChild<ElementRef<HTMLUListElement>>('list');\n\n constructor() {\n // Follow the caret: mkAnchoredPanel only repositions on scroll/resize by\n // itself, so re-run positioning whenever the anchor point moves.\n effect(() => {\n this.anchorPoint();\n untracked(() => this.panel()?.position());\n });\n }\n\n optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected pick(event: Event, index: number): void {\n // Keep focus (and the software keyboard) in the textarea.\n event.preventDefault();\n this.onPick(index);\n }\n}\n","<ul\n #list\n class=\"mk-mention__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"anchorEl\"\n [anchorRect]=\"anchorPoint()\"\n [gap]=\"6\"\n (dismiss)=\"onDismiss()\"\n [id]=\"listId\"\n role=\"listbox\"\n>\n @if (loading() && !options().length) {\n <li class=\"mk-mention__status\" role=\"presentation\">\n <span class=\"mk-mention__spinner\" aria-hidden=\"true\"></span>\n {{ i18n.loading }}\n </li>\n } @else {\n @for (opt of options(); track $index; let i = $index) {\n <li\n class=\"mk-mention__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === activeIndex()\"\n [class.mk-mention__option--active]=\"i === activeIndex()\"\n (pointerdown)=\"pick($event, i)\"\n (pointermove)=\"onHover(i)\"\n >\n <span class=\"mk-mention__option-label\">{{ opt.label }}</span>\n @if (opt.hint) {\n <span class=\"mk-mention__option-hint\">{{ opt.hint }}</span>\n }\n </li>\n }\n }\n</ul>\n","import {\n type ComponentRef,\n DOCUMENT,\n Directive,\n ElementRef,\n type OnDestroy,\n ViewContainerRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkMentionPanel } from './mention-panel';\n\n/** How mention suggestions are narrowed against the typed query. */\nexport type MkMentionFilterMode = 'contains' | 'startsWith' | 'none';\n\n/** A single suggestion offered by {@link MkMention}. */\nexport interface MkMentionOption {\n /** Machine identifier (username, tag slug) — also matched when filtering. */\n value: string;\n /** Text shown in the panel; the default insertion writes `trigger + label`. */\n label: string;\n /** Muted, single-line disambiguator shown after the label (e-mail, count…). */\n hint?: string;\n /**\n * Offer this option for one trigger character only (e.g. `'#'` for tags).\n * Options without a `trigger` are offered for every trigger.\n */\n trigger?: string;\n}\n\n/** Payload of {@link MkMention.mentionSearch}. */\nexport interface MkMentionSearchEvent {\n /** The trigger character that opened the session (`'@'`, `'#'`, …). */\n trigger: string;\n /** Text typed between the trigger and the caret. */\n query: string;\n}\n\n/** Payload of {@link MkMention.mentionSelect}. */\nexport interface MkMentionSelectEvent {\n option: MkMentionOption;\n trigger: string;\n}\n\n/** An active mention context inside the control's value. */\ninterface MentionSession {\n trigger: string;\n /** Index of the trigger character in the control's value. */\n start: number;\n /** Text between the trigger and the caret. */\n query: string;\n}\n\n/** Queries longer than this stop being treated as an active mention. */\nconst MAX_QUERY = 60;\n\n/**\n * CSS properties cloned from the control onto the offscreen mirror `<div>`\n * used to measure the caret's pixel position. Together they reproduce the\n * control's text layout closely enough that a marker span placed at the\n * caret's character index lands on the caret's on-screen coordinates.\n */\nconst MIRROR_PROPS = [\n 'box-sizing',\n 'width',\n 'padding-top',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'border-top-width',\n 'border-right-width',\n 'border-bottom-width',\n 'border-left-width',\n 'font-family',\n 'font-size',\n 'font-weight',\n 'font-style',\n 'font-variant',\n 'font-stretch',\n 'line-height',\n 'letter-spacing',\n 'word-spacing',\n 'text-transform',\n 'text-indent',\n 'text-align',\n 'direction',\n 'tab-size',\n 'overflow-wrap',\n 'word-break',\n] as const;\n\n/**\n * Mention / hashtag autocomplete for a **native** `<textarea>` or text\n * `<input>`. Typing a trigger character (`@`, `#`, …) at the start of a word\n * opens a top-layer suggestion panel anchored at the caret; picking an option\n * replaces the trigger-plus-query with the completed mention and dispatches an\n * `input` event so `ngModel`/reactive-forms bindings stay in sync.\n *\n * The element keeps its native textbox semantics — no `role=\"combobox\"` — and\n * follows the ARIA activedescendant pattern while the panel is open\n * (`aria-autocomplete=\"list\"`, `aria-controls`, `aria-expanded`,\n * `aria-activedescendant`).\n *\n * Filtering is built in (`contains` / `startsWith` over label + value); set\n * `mentionFilter=\"none\"` and drive `mentionOptions` from the `mentionSearch`\n * output for async/server-side suggestions (`mentionLoading` keeps the panel\n * open with a spinner while results are in flight).\n *\n * ```html\n * <textarea mkMention\n * [mentionTriggers]=\"['@', '#']\"\n * [mentionOptions]=\"users\"\n * (mentionSelect)=\"onPick($event)\"\n * ></textarea>\n * ```\n */\n@Directive({\n selector: 'textarea[mkMention], input[mkMention]',\n exportAs: 'mkMention',\n host: {\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'list',\n '[attr.aria-expanded]': 'panelOpen()',\n '[attr.aria-controls]': 'panelOpen() ? listId : null',\n '[attr.aria-activedescendant]': 'activeOptionId()',\n '(input)': 'update()',\n '(click)': 'update()',\n '(keydown)': 'onKeydown($event)',\n '(keyup)': 'onKeyup($event)',\n '(blur)': 'onBlur($event)',\n },\n})\nexport class MkMention implements OnDestroy {\n private readonly host =\n inject<ElementRef<HTMLTextAreaElement | HTMLInputElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly vcr = inject(ViewContainerRef);\n\n /** Single characters that start a mention session. */\n readonly mentionTriggers = input<readonly string[]>(['@']);\n /** The suggestion pool. Update it from `mentionSearch` for async sources. */\n readonly mentionOptions = input<readonly MkMentionOption[]>([]);\n /** How suggestions are filtered against the typed query. */\n readonly mentionFilter = input<MkMentionFilterMode>('contains');\n /** Keep the panel open with a loading row while async results are pending. */\n readonly mentionLoading = input(false, { transform: booleanAttribute });\n /**\n * Builds the text inserted for a picked option. Defaults to\n * `` `${trigger}${option.label} ` `` (note the trailing space).\n */\n readonly mentionInsert = input<\n ((option: MkMentionOption, trigger: string) => string) | null\n >(null);\n\n /** Emits `{trigger, query}` whenever the active query changes — drive async loading. */\n readonly mentionSearch = output<MkMentionSearchEvent>();\n /** Emits after an option has been inserted into the control. */\n readonly mentionSelect = output<MkMentionSelectEvent>();\n\n /** Id of the listbox panel, wired to `aria-controls` while open. */\n readonly listId = mkUniqueId('mk-mention-list');\n\n private readonly session = signal<MentionSession | null>(null);\n private readonly activeIndex = signal(0);\n /** Caret anchor point (viewport px) the panel is positioned against. */\n private readonly caretAnchor = signal({ x: 0, y: 0 });\n /**\n * Trigger index dismissed via Escape. The session stays closed while the\n * caret remains in a mention context at this index — i.e. until a new\n * trigger is typed elsewhere (or this one is deleted).\n */\n private dismissedStart: number | null = null;\n\n private panelRef: ComponentRef<MkMentionPanel> | null = null;\n\n /** Options for the active session, after trigger scoping + filtering. */\n private readonly filtered = computed<readonly MkMentionOption[]>(() => {\n const s = this.session();\n if (!s) return [];\n const pool = this.mentionOptions().filter(\n (o) => !o.trigger || o.trigger === s.trigger,\n );\n const mode = this.mentionFilter();\n const q = s.query.toLowerCase();\n if (mode === 'none' || !q) return pool;\n return pool.filter((o) => {\n const label = o.label.toLowerCase();\n const value = o.value.toLowerCase();\n return mode === 'startsWith'\n ? label.startsWith(q) || value.startsWith(q)\n : label.includes(q) || value.includes(q);\n });\n });\n\n /**\n * The panel shows while a session is active and there is something to show:\n * matching options, or a pending async fetch (`mentionLoading`). Zero\n * options with nothing pending closes the panel (the session itself stays\n * active, so async results arriving later reopen it).\n */\n protected readonly panelOpen = computed(\n () =>\n this.session() !== null &&\n (this.filtered().length > 0 || this.mentionLoading()),\n );\n\n protected readonly activeOptionId = computed(() => {\n if (!this.panelOpen()) return null;\n const i = this.activeIndex();\n return i >= 0 && i < this.filtered().length\n ? `${this.listId}-opt-${i}`\n : null;\n });\n\n constructor() {\n // Create/tear down the caret-anchored panel as the session opens and\n // closes — including async `mentionOptions` arriving (or emptying) while\n // a session is active.\n effect(() => {\n const open = this.panelOpen();\n untracked(() => (open ? this.createPanel() : this.destroyPanel()));\n });\n // Keep the active option inside the (re-)filtered list.\n effect(() => {\n const count = this.filtered().length;\n if (count > 0 && untracked(this.activeIndex) >= count) {\n this.activeIndex.set(0);\n }\n });\n }\n\n // --- session detection ----------------------------------------------------\n\n /**\n * Looks backwards from the caret for a trigger character that starts a\n * mention context: the trigger must sit at the start of the text or be\n * preceded by whitespace, and the text between it and the caret (the query)\n * must contain no whitespace and stay under {@link MAX_QUERY} characters.\n */\n private detect(): MentionSession | null {\n const el = this.host.nativeElement;\n const caret = el.selectionStart;\n if (caret == null) return null;\n const value = el.value;\n const triggers = this.mentionTriggers();\n const min = Math.max(0, caret - MAX_QUERY - 1);\n for (let i = caret - 1; i >= min; i--) {\n const ch = value[i];\n if (/\\s/.test(ch)) return null;\n if (triggers.includes(ch)) {\n if (i > 0 && !/\\s/.test(value[i - 1])) return null;\n return { trigger: ch, start: i, query: value.slice(i + 1, caret) };\n }\n }\n return null;\n }\n\n /** Re-evaluates the mention context after typing or caret movement. */\n protected update(): void {\n const s = this.detect();\n if (!s) {\n this.dismissedStart = null;\n if (untracked(this.session)) this.session.set(null);\n return;\n }\n if (this.dismissedStart != null) {\n // Escaped session: same trigger position stays closed.\n if (s.start === this.dismissedStart) return;\n this.dismissedStart = null;\n }\n this.caretAnchor.set(this.caretPoint());\n const prev = untracked(this.session);\n if (\n prev &&\n prev.start === s.start &&\n prev.trigger === s.trigger &&\n prev.query === s.query\n ) {\n return;\n }\n this.session.set(s);\n this.activeIndex.set(0);\n this.mentionSearch.emit({ trigger: s.trigger, query: s.query });\n }\n\n private closeSession(viaEscape = false): void {\n const s = untracked(this.session);\n if (!s) return;\n if (viaEscape) this.dismissedStart = s.start;\n this.session.set(null);\n }\n\n // --- keyboard -------------------------------------------------------------\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (!untracked(this.panelOpen)) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Enter':\n case 'Tab':\n if (untracked(this.filtered).length > 0) {\n e.preventDefault();\n this.commit(untracked(this.activeIndex));\n }\n break;\n case 'Escape':\n // Swallow the key entirely so an enclosing dialog/drawer stays open —\n // Escape dismisses only the topmost layer (the mention panel).\n e.preventDefault();\n e.stopPropagation();\n this.closeSession(true);\n break;\n }\n }\n\n /** Caret-only movements never fire `input`; re-detect on their keyup. */\n protected onKeyup(event: Event): void {\n switch ((event as KeyboardEvent).key) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End':\n case 'PageUp':\n case 'PageDown':\n this.update();\n }\n }\n\n private move(delta: number): void {\n const count = untracked(this.filtered).length;\n if (!count) return;\n this.activeIndex.set(\n (untracked(this.activeIndex) + delta + count) % count,\n );\n }\n\n // --- focus ----------------------------------------------------------------\n\n protected onBlur(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n // Focus moving into the panel (e.g. a screen-reader virtual cursor)\n // must not tear the panel down mid-interaction.\n if (\n related &&\n this.panelRef?.instance.list()?.nativeElement.contains(related)\n ) {\n return;\n }\n this.closeSession();\n }\n\n // --- insertion ------------------------------------------------------------\n\n private commit(index: number): void {\n const s = untracked(this.session);\n const opt = untracked(this.filtered)[index];\n if (!s || !opt) return;\n const el = this.host.nativeElement;\n const end = s.start + 1 + s.query.length;\n const insert = this.mentionInsert();\n const text = insert ? insert(opt, s.trigger) : `${s.trigger}${opt.label} `;\n const value = el.value;\n el.value = value.slice(0, s.start) + text + value.slice(end);\n this.session.set(null);\n this.dismissedStart = null;\n const caret = s.start + text.length;\n try {\n el.setSelectionRange(caret, caret);\n } catch {\n // Some input types refuse selection APIs — the value still updated.\n }\n // Let ngModel / reactive-forms CVAs (which listen for `input`) see the\n // programmatic edit.\n el.dispatchEvent(new Event('input', { bubbles: true }));\n this.mentionSelect.emit({ option: opt, trigger: s.trigger });\n el.focus();\n }\n\n // --- panel lifecycle ------------------------------------------------------\n\n private createPanel(): void {\n if (this.panelRef) return;\n const ref = this.vcr.createComponent(MkMentionPanel);\n const panel = ref.instance;\n panel.listId = this.listId;\n panel.anchorEl = this.host.nativeElement;\n panel.options = this.filtered;\n panel.activeIndex = this.activeIndex.asReadonly();\n panel.anchorPoint = this.caretAnchor.asReadonly();\n panel.loading = this.mentionLoading;\n panel.onPick = (i) => this.commit(i);\n panel.onHover = (i) => this.activeIndex.set(i);\n panel.onDismiss = () => this.closeSession();\n this.panelRef = ref;\n }\n\n private destroyPanel(): void {\n this.panelRef?.destroy();\n this.panelRef = null;\n }\n\n ngOnDestroy(): void {\n this.destroyPanel();\n }\n\n // --- caret measurement ----------------------------------------------------\n\n /**\n * Caret pixel position via the mirror-div technique: an offscreen `<div>`\n * cloning the control's text layout gets the value up to the caret plus a\n * marker span; the marker's rect, offset by the control's own rect and\n * scroll position, is the caret's viewport coordinate. Returns the point\n * just **below** the caret's line so the panel opens under it.\n *\n * Environments without layout (SSR, jsdom) safely yield `{0, 0}`.\n */\n private caretPoint(): { x: number; y: number } {\n try {\n const el = this.host.nativeElement;\n const view = this.document.defaultView;\n if (!view) return { x: 0, y: 0 };\n const caret = el.selectionStart ?? el.value.length;\n const style = view.getComputedStyle(el);\n\n const mirror = this.document.createElement('div');\n for (const prop of MIRROR_PROPS) {\n mirror.style.setProperty(prop, style.getPropertyValue(prop));\n }\n const isInput = el.tagName === 'INPUT';\n // Single-line inputs never wrap; textareas wrap like `pre-wrap`.\n mirror.style.setProperty('white-space', isInput ? 'pre' : 'pre-wrap');\n if (!isInput) mirror.style.setProperty('overflow-wrap', 'break-word');\n mirror.style.position = 'fixed';\n mirror.style.top = '0';\n mirror.style.left = '0';\n mirror.style.visibility = 'hidden';\n mirror.style.pointerEvents = 'none';\n\n mirror.textContent = el.value.slice(0, caret);\n const marker = this.document.createElement('span');\n // Give the marker the caret's character (or a zero-width space) so it\n // owns a rect on the caret's line instead of collapsing.\n marker.textContent = el.value.slice(caret, caret + 1) || '\\u200b';\n mirror.appendChild(marker);\n this.document.body.appendChild(mirror);\n\n const hostRect = el.getBoundingClientRect();\n const mirrorRect = mirror.getBoundingClientRect();\n const markerRect = marker.getBoundingClientRect();\n const lineHeight =\n markerRect.height || parseFloat(style.lineHeight) || 0;\n const x = hostRect.left + (markerRect.left - mirrorRect.left) - el.scrollLeft;\n const y =\n hostRect.top +\n (markerRect.top - mirrorRect.top) -\n el.scrollTop +\n lineHeight;\n mirror.remove();\n\n if (!Number.isFinite(x) || !Number.isFinite(y)) return { x: 0, y: 0 };\n return { x, y };\n } catch {\n return { x: 0, y: 0 };\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkChip } from '@mk-kit/ui/chip';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single selectable option for {@link MkMultiSelect}. */\nexport interface MkMultiSelectOption {\n /** Text shown to the user (and used for the chip + typeahead). */\n label: string;\n /** The value committed to the form control when chosen. */\n value: unknown;\n /** Disable the option (skipped by keyboard + not selectable). */\n disabled?: boolean;\n}\n\n/** How the option list is narrowed against the typed text. */\nexport type MkMultiSelectFilterMode = 'contains' | 'startsWith' | 'none';\n\n/**\n * MultiSelect — an accessible combobox that commits **multiple** values,\n * rendering each selection as a removable chip inside the control. Implements\n * the ARIA combobox + multiselectable listbox pattern.\n *\n * Filtering is built in (`contains` / `startsWith`); set `filterMode=\"none\"`\n * and drive `options` from the `search` output for async / server-side sources.\n * Selected options are remembered even after they leave the `options` list, so\n * chips keep their labels across async pages.\n *\n * Implements `ControlValueAccessor` over an **array** value and exposes a\n * two-way `value` model, so it works with `[(ngModel)]`, reactive forms and\n * `[(value)]`. When nested in an `mk-form-field` it inherits size, label,\n * hint/error and required wiring.\n *\n * Keyboard: type to filter, Up/Down to move, Home/End to jump, Enter/Space to\n * toggle the active option, Backspace on an empty query removes the last chip,\n * Escape closes. The dropdown renders in the top layer via\n * {@link MkAnchoredPanel} so it is never clipped by a container.\n *\n * ```html\n * <mk-multi-select placeholder=\"Add tags\"\n * [options]=\"tagOptions()\"\n * [(value)]=\"tags\" />\n * ```\n */\n@Component({\n selector: 'mk-multi-select',\n templateUrl: './multi-select.html',\n styleUrl: './multi-select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel, MkChip],\n host: {\n class: 'mk-multi-select',\n '[class.mk-multi-select--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-multi-select--md]': \"effectiveSize() === 'md'\",\n '[class.mk-multi-select--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-multi-select--open]': 'open()',\n '[class.mk-multi-select--invalid]': 'isInvalid()',\n '[class.mk-multi-select--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkMultiSelect),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkMultiSelect),\n multi: true,\n },\n ],\n})\nexport class MkMultiSelect implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** The list of options to choose from. Update from `search` for async. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly options = input<readonly MkMultiSelectOption[]>([]);\n /** Placeholder shown when no value is selected. */\n readonly placeholder = input<string>('');\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** How the option list is filtered against the typed text. */\n readonly filterMode = input<MkMultiSelectFilterMode>('contains');\n /** Only open the list once this many characters have been typed. */\n readonly minChars = input(0, { transform: numberAttribute });\n /** Show a loading row instead of \"no results\" (for async fetches). */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Maximum number of selections (0 = unlimited). */\n readonly max = input(0, { transform: numberAttribute });\n /** Close the dropdown after each selection. Default keeps it open. */\n readonly closeOnSelect = input(false, { transform: booleanAttribute });\n /** Message shown when there are no matching options. */\n readonly emptyMessage = input(this.i18n.noResults);\n\n /** Two-way selected values. */\n readonly value = model<unknown[]>([]);\n\n /** Emits the current query text on every keystroke — drive async loading. */\n readonly search = output<string>();\n /** Emits the option whenever one is added. */\n readonly optionAdded = output<MkMultiSelectOption>();\n /** Emits the value whenever a selection is removed. */\n readonly optionRemoved = output<unknown>();\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly query = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly listId = mkUniqueId('mk-ms-list');\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-ms');\n\n /**\n * Every option ever seen, keyed by value — so chips keep their labels even\n * after the option leaves the (async, filtered) `options` list.\n */\n private readonly seen = signal(new Map<unknown, MkMultiSelectOption>());\n\n /** Last announced result count (guards repeat announcements). */\n private lastAnnouncedCount = -1;\n /**\n * Skips the next results-count announcement — set when a selection resets\n * the query, so \"x added\" is not immediately clobbered by \"n results\".\n */\n private suppressCountAnnouncement = false;\n\n constructor() {\n // Accumulate seen options as `options` changes (untracked read → no loop).\n effect(() => {\n const opts = this.options();\n if (!opts.length) return;\n const next = new Map(untracked(this.seen));\n let changed = false;\n for (const o of opts) {\n if (next.get(o.value) !== o) {\n next.set(o.value, o);\n changed = true;\n }\n }\n if (changed) this.seen.set(next);\n });\n\n // Announce the filtered result count while the list is open (WCAG 4.1.3):\n // covers both built-in filtering and async `options` arriving. Only a\n // changed count is announced, so keystrokes that don't narrow the list\n // stay quiet.\n effect(() => {\n const open = this.open();\n const loading = this.loading();\n const count = this.filtered().length;\n const suppress = this.suppressCountAnnouncement;\n this.suppressCountAnnouncement = false;\n if (!open || loading) {\n this.lastAnnouncedCount = -1;\n return;\n }\n if (count === this.lastAnnouncedCount) return;\n this.lastAnnouncedCount = count;\n if (!suppress) this.announcer.announce(this.i18n.resultsCount(count));\n });\n }\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Whether the selection cap has been reached. */\n protected readonly atMax = computed(\n () => this.max() > 0 && this.value().length >= this.max(),\n );\n\n /** Why unselected options are unavailable once the cap is reached. */\n protected readonly atMaxHint = computed(() =>\n this.i18n.validation.mkMaxItems({\n max: this.max(),\n actual: this.value().length,\n }),\n );\n\n /** The selected values resolved to option objects (for the chips). */\n protected readonly chips = computed<MkMultiSelectOption[]>(() => {\n const seen = this.seen();\n return this.value().map(\n (v) => seen.get(v) ?? { label: String(v), value: v },\n );\n });\n\n /** Options after the built-in filter (or all, when `none`). */\n protected readonly filtered = computed<readonly MkMultiSelectOption[]>(() => {\n const mode = this.filterMode();\n const q = this.query().trim().toLowerCase();\n if (mode === 'none' || !q) return this.options();\n return this.options().filter((o) => {\n const label = o.label.toLowerCase();\n return mode === 'startsWith' ? label.startsWith(q) : label.includes(q);\n });\n });\n\n protected readonly hasResults = computed(() => this.filtered().length > 0);\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected isSelected(value: unknown): boolean {\n return this.value().includes(value);\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.query.set(text);\n this.search.emit(text);\n this.openIfEligible();\n this.activeIndex.set(this.hasResults() ? this.firstEnabled() : -1);\n }\n\n protected onFocus(): void {\n this.openIfEligible();\n }\n\n private openIfEligible(): void {\n if (this.isDisabled()) return;\n const eligible = this.query().length >= this.minChars();\n this.open.set(eligible);\n if (eligible && this.activeIndex() < 0) {\n this.activeIndex.set(this.firstEnabled());\n }\n }\n\n protected close(): void {\n if (!this.open()) return;\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n\n /** Add or remove the option at `index` in the filtered list. */\n protected toggleOption(index: number): void {\n const opt = this.filtered()[index];\n if (!opt || opt.disabled) return;\n // Options blocked by the cap stay focusable (APG); say why nothing happens.\n if (!this.isSelected(opt.value) && this.atMax()) {\n this.announcer.announce(this.atMaxHint());\n return;\n }\n this.isSelected(opt.value) ? this.remove(opt.value) : this.add(opt);\n this.focusInput();\n }\n\n private add(opt: MkMultiSelectOption): void {\n if (this.atMax() || this.isSelected(opt.value)) return;\n // Remember the option so its chip keeps a label if `options` changes.\n const seen = new Map(this.seen());\n seen.set(opt.value, opt);\n this.seen.set(seen);\n this.setValue([...this.value(), opt.value]);\n this.optionAdded.emit(opt);\n this.announcer.announce(this.i18n.itemAdded(opt.label));\n // Reset the query so the full list is available for the next pick.\n if (this.query()) {\n // The reset re-expands the filtered list; don't let \"n results\"\n // immediately overwrite the \"added\" announcement.\n this.suppressCountAnnouncement = true;\n this.query.set('');\n this.search.emit('');\n }\n if (this.closeOnSelect()) this.close();\n }\n\n private remove(value: unknown): void {\n const label = this.seen().get(value)?.label ?? String(value);\n this.setValue(this.value().filter((v) => v !== value));\n this.optionRemoved.emit(value);\n this.announcer.announce(this.i18n.itemRemoved(label));\n }\n\n /** Remove a chip from its remove button. */\n protected removeChip(value: unknown): void {\n if (this.isDisabled()) return;\n this.remove(value);\n this.focusInput();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const key = e.key;\n\n // Backspace on an empty query removes the last chip.\n if (key === 'Backspace' && !this.query() && this.value().length) {\n e.preventDefault();\n this.remove(this.value()[this.value().length - 1]);\n return;\n }\n\n if (!this.open()) {\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n e.preventDefault();\n this.openIfEligible();\n }\n return;\n }\n\n switch (key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n break;\n case 'Enter':\n case ' ':\n if (this.query() && key === ' ') break; // let the space type into the query\n if (this.activeIndex() >= 0) {\n e.preventDefault();\n this.toggleOption(this.activeIndex());\n }\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected onBlur(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n // Keep focus/selection when moving to a chip's remove button inside the host.\n if (related && this.host.nativeElement.contains(related)) return;\n this.onTouched();\n this.close();\n }\n\n protected onOutsideDismiss(): void {\n if (this.open()) this.close();\n }\n\n /** Clicking anywhere in the control focuses the input. */\n protected onControlPointerdown(event: Event): void {\n if (this.isDisabled()) return;\n const target = event.target as HTMLElement;\n // Don't steal clicks aimed at a chip's remove button.\n if (target.closest('.mk-chip__remove')) return;\n if (target !== this.inputRef()?.nativeElement) {\n event.preventDefault();\n this.focusInput();\n this.openIfEligible();\n }\n }\n\n private move(delta: number): void {\n const opts = this.filtered();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.filtered().findIndex((o) => !o.disabled);\n }\n\n private lastEnabled(): number {\n const opts = this.filtered();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) return i;\n }\n return -1;\n }\n\n private focusInput(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n private setValue(next: unknown[]): void {\n this.value.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown[] | null): void {\n this.value.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.max();\n });\n\n /**\n * Reports `mkMaxItems` when more options are selected than `[max]` allows.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const max = this.max();\n const v = control.value;\n if (max <= 0 || !Array.isArray(v) || v.length <= max) return null;\n return { mkMaxItems: { max, actual: v.length } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div\n #control\n class=\"mk-multi-select__control\"\n (pointerdown)=\"onControlPointerdown($event)\"\n>\n @for (chip of chips(); track chip.value) {\n <mk-chip\n class=\"mk-multi-select__chip\"\n size=\"sm\"\n [removable]=\"!isDisabled()\"\n [disabled]=\"isDisabled()\"\n [removeLabel]=\"i18n.removeItem(chip.label)\"\n (removed)=\"removeChip(chip.value)\"\n >\n {{ chip.label }}\n </mk-chip>\n }\n\n <input\n #input\n type=\"text\"\n class=\"mk-multi-select__input\"\n [id]=\"inputId\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || null)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [placeholder]=\"chips().length ? '' : placeholder()\"\n [value]=\"query()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <span class=\"mk-multi-select__arrow\" aria-hidden=\"true\"></span>\n</div>\n\n@if (open()) {\n <ul\n #list\n class=\"mk-multi-select__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"control\"\n [matchWidth]=\"true\"\n (dismiss)=\"onOutsideDismiss()\"\n [id]=\"listId\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-labelledby]=\"labelledBy()\"\n >\n @if (loading()) {\n <li class=\"mk-multi-select__status\" role=\"presentation\">\n <span class=\"mk-multi-select__spinner\" aria-hidden=\"true\"></span>\n {{ i18n.loading }}\n </li>\n } @else {\n @for (opt of filtered(); track $index; let i = $index) {\n <li\n class=\"mk-multi-select__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(opt.value)\"\n [attr.aria-disabled]=\"\n opt.disabled || (atMax() && !isSelected(opt.value)) || null\n \"\n [attr.title]=\"\n atMax() && !isSelected(opt.value) && !opt.disabled\n ? atMaxHint()\n : null\n \"\n [class.mk-multi-select__option--active]=\"i === activeIndex()\"\n [class.mk-multi-select__option--selected]=\"isSelected(opt.value)\"\n [class.mk-multi-select__option--disabled]=\"\n opt.disabled || (atMax() && !isSelected(opt.value))\n \"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"!opt.disabled && activeIndex.set(i)\"\n (click)=\"toggleOption(i)\"\n >\n <span class=\"mk-multi-select__check\" aria-hidden=\"true\"></span>\n <span class=\"mk-multi-select__option-label\">{{ opt.label }}</span>\n </li>\n } @empty {\n <li class=\"mk-multi-select__status\" role=\"presentation\">\n {{ emptyMessage() }}\n </li>\n }\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkChip } from '@mk-kit/ui/chip';\n\n/**\n * TagInput — a freeform token input: type a value and press Enter (or a\n * separator) to add it as a removable chip. Backspace on an empty field removes\n * the last tag, and pasting a delimited string adds several at once. Unlike\n * `mk-multi-select` the tags are not drawn from a fixed option list. Implements\n * `ControlValueAccessor` + a two-way `value` model of `string[]`.\n *\n * ```html\n * <mk-tag-input placeholder=\"Add tags…\" [(value)]=\"tags\" />\n * ```\n */\n@Component({\n selector: 'mk-tag-input',\n templateUrl: './tag-input.html',\n styleUrl: './tag-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkChip],\n host: {\n class: 'mk-tag-input',\n '[class.mk-tag-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-tag-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-tag-input--invalid]': 'isInvalid()',\n '[class.mk-tag-input--disabled]': 'isDisabled()',\n '(click)': 'focusInput()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTagInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkTagInput),\n multi: true,\n },\n ],\n})\nexport class MkTagInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Two-way list of tags. */\n readonly value = model<string[]>([]);\n /** Placeholder shown in the text field. */\n readonly placeholder = input<string>('');\n /** Maximum number of tags (0 = unlimited). */\n readonly max = input(0, { transform: numberAttribute });\n /** Allow the same tag more than once. */\n readonly allowDuplicates = input(false, { transform: booleanAttribute });\n /** Commit the pending text as a tag when the field loses focus. */\n readonly addOnBlur = input(false, { transform: booleanAttribute });\n /**\n * Extra characters that commit the pending text (Enter always does). A\n * pasted string is split on these too. Default: comma.\n */\n readonly separators = input<readonly string[]>([',']);\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n /** Emitted when a tag is added. */\n readonly added = output<string>();\n /** Emitted when a tag is removed. */\n readonly removed = output<string>();\n\n protected readonly query = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-tag-input');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly atMax = computed(\n () => this.max() > 0 && this.value().length >= this.max(),\n );\n\n protected focusInput(): void {\n if (!this.isDisabled()) this.inputRef()?.nativeElement.focus();\n }\n\n protected onQueryInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const key = event.key;\n if (key === 'Enter' || this.separators().includes(key)) {\n if (this.query().trim()) {\n event.preventDefault();\n this.commit(this.query());\n } else if (key === 'Enter') {\n event.preventDefault();\n }\n } else if (key === 'Backspace' && this.query() === '') {\n this.removeAt(this.value().length - 1);\n }\n }\n\n protected onPaste(event: ClipboardEvent): void {\n const text = event.clipboardData?.getData('text') ?? '';\n if (this.splitPattern().test(text)) {\n event.preventDefault();\n for (const part of text.split(this.splitPattern())) this.commit(part);\n }\n }\n\n protected onBlur(): void {\n if (this.addOnBlur() && this.query().trim()) this.commit(this.query());\n this.onTouched();\n }\n\n private splitPattern(): RegExp {\n const chars = this.separators()\n .map((s) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('');\n return new RegExp(`[${chars}\\\\n]`);\n }\n\n private commit(raw: string): void {\n const tag = raw.trim();\n if (!tag) {\n this.clearQuery();\n return;\n }\n if (this.isDisabled() || this.atMax()) return;\n // Keep the typed text when the tag is rejected so nothing is lost silently.\n if (!this.allowDuplicates() && this.value().includes(tag)) return;\n this.clearQuery();\n const next = [...this.value(), tag];\n this.setValue(next);\n this.added.emit(tag);\n this.announcer.announce(this.i18n.itemAdded(tag));\n }\n\n /**\n * Reset the pending text. A one-way `[value]=\"query()\"` binding does not\n * reliably push an empty value back onto an input the user has just edited,\n * so clear the native element directly as well as the signal.\n */\n private clearQuery(): void {\n this.query.set('');\n const el = this.inputRef()?.nativeElement;\n if (el) el.value = '';\n }\n\n protected removeAt(index: number): boolean {\n if (this.isDisabled() || index < 0 || index >= this.value().length) {\n return false;\n }\n const tag = this.value()[index];\n const next = this.value().filter((_, i) => i !== index);\n this.setValue(next);\n this.removed.emit(tag);\n this.announcer.announce(this.i18n.itemRemoved(tag));\n return true;\n }\n\n /**\n * Remove a chip via its remove button. The button disappears with the chip,\n * so keep focus useful: the next chip's remove button, else the previous\n * one's, else the text input.\n */\n protected removeChipAt(index: number): void {\n if (!this.removeAt(index)) return;\n afterNextRender(\n () => {\n const buttons =\n this.host.nativeElement.querySelectorAll<HTMLElement>('.mk-chip__remove');\n const target = buttons[index] ?? buttons[index - 1];\n (target ?? this.inputRef()?.nativeElement)?.focus();\n },\n { injector: this.injector },\n );\n }\n\n private setValue(next: string[]): void {\n this.value.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string[] | null): void {\n this.value.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.max();\n });\n\n /**\n * Reports `mkMaxItems` when more tags are present than `[max]` allows.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const max = this.max();\n const v = control.value;\n if (max <= 0 || !Array.isArray(v) || v.length <= max) return null;\n return { mkMaxItems: { max, actual: v.length } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div class=\"mk-tag-input__field\">\n <ul class=\"mk-tag-input__tags\">\n @for (tag of value(); track $index; let i = $index) {\n <li class=\"mk-tag-input__tag\">\n <mk-chip\n [size]=\"effectiveSize()\"\n [removable]=\"!isDisabled()\"\n [disabled]=\"isDisabled()\"\n [removeLabel]=\"i18n.removeItem(tag)\"\n (removed)=\"removeChipAt(i)\"\n >\n {{ tag }}\n </mk-chip>\n </li>\n }\n <li class=\"mk-tag-input__entry\">\n <input\n #input\n class=\"mk-tag-input__input\"\n type=\"text\"\n autocomplete=\"off\"\n [id]=\"inputId\"\n [value]=\"query()\"\n [placeholder]=\"value().length ? '' : placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"atMax()\"\n [attr.aria-disabled]=\"atMax() || null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onQueryInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (paste)=\"onPaste($event)\"\n (blur)=\"onBlur()\"\n />\n </li>\n </ul>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single password rule with its current pass/fail state. */\nexport interface MkPasswordRule {\n readonly key: 'length' | 'uppercase' | 'number' | 'symbol';\n readonly label: string;\n readonly met: boolean;\n}\n\n/**\n * PasswordInput — a password field with a reveal toggle, an optional strength\n * meter and an optional rules checklist. Implements `ControlValueAccessor` over\n * `string` with a two-way `value` model, and wires label / description /\n * validity a11y automatically when nested in an `mk-form-field`.\n *\n * ```html\n * <mk-password-input [(value)]=\"pw\" showStrength showRules [minLength]=\"10\" />\n * ```\n */\n@Component({\n selector: 'mk-password-input',\n templateUrl: './password-input.html',\n styleUrl: './password-input.scss',\n exportAs: 'mkPasswordInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-password-input',\n '[class.mk-password-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-password-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-password-input--invalid]': 'isInvalid()',\n '[class.mk-password-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkPasswordInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkPasswordInput),\n multi: true,\n },\n ],\n})\nexport class MkPasswordInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Two-way value. */\n readonly value = model<string>('');\n /** Placeholder when empty. */\n readonly placeholder = input('');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Show the 0–4 strength meter below the field. */\n readonly showStrength = input(false, { transform: booleanAttribute });\n /** Show the rules checklist below the field. */\n readonly showRules = input(false, { transform: booleanAttribute });\n /** Minimum length used by the strength score and rules. */\n readonly minLength = input(8, { transform: numberAttribute });\n /**\n * `autocomplete` for the native input. Use `'new-password'` on signup /\n * change-password forms (where the strength meter and rules belong) so the\n * browser offers a generated password instead of the saved one.\n */\n readonly autocomplete = input<'current-password' | 'new-password' | (string & {})>(\n 'current-password',\n );\n\n protected readonly inputId =\n this.field?.controlId ?? mkUniqueId('mk-password');\n protected readonly strengthId = `${this.inputId}-strength`;\n protected readonly rulesId = `${this.inputId}-rules`;\n\n /** Whether the password characters are currently visible. */\n protected readonly revealed = signal(false);\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n\n /** The four rules and whether the current value satisfies each. */\n protected readonly rules = computed<MkPasswordRule[]>(() => {\n const v = this.value();\n return [\n {\n key: 'length',\n label: this.i18n.passwordRuleMinLength(this.minLength()),\n met: v.length >= this.minLength(),\n },\n {\n key: 'uppercase',\n label: this.i18n.passwordRuleUppercase,\n met: /[A-Z]/.test(v),\n },\n { key: 'number', label: this.i18n.passwordRuleNumber, met: /[0-9]/.test(v) },\n {\n key: 'symbol',\n label: this.i18n.passwordRuleSymbol,\n met: /[^A-Za-z0-9]/.test(v),\n },\n ];\n });\n\n /**\n * Password strength as a 0–4 score, counting distinct character classes\n * (lowercase, uppercase, digit, symbol) plus a length ≥ minLength bonus,\n * capped at 4.\n */\n protected readonly strength = computed(() => {\n const v = this.value();\n if (!v) return 0;\n let score = 0;\n if (v.length >= this.minLength()) score++;\n if (/[a-z]/.test(v)) score++;\n if (/[A-Z]/.test(v)) score++;\n if (/[0-9]/.test(v)) score++;\n if (/[^A-Za-z0-9]/.test(v)) score++;\n return Math.min(4, score);\n });\n\n protected readonly strengthLabel = computed(() =>\n this.i18n.passwordStrength(this.strength()),\n );\n\n /** The 4 meter segments, marked filled up to the current score. */\n protected readonly segments = computed(() => {\n const score = this.strength();\n return [0, 1, 2, 3].map((i) => i < score);\n });\n\n /** Combined `aria-describedby` for the input, or `null`. */\n protected readonly describedBy = computed(() => {\n const ids: string[] = [];\n const fieldIds = this.field?.describedBy();\n if (fieldIds) ids.push(fieldIds);\n if (this.showStrength()) ids.push(this.strengthId);\n if (this.showRules()) ids.push(this.rulesId);\n return ids.length ? ids.join(' ') : null;\n });\n\n protected toggleReveal(): void {\n if (this.isDisabled()) return;\n this.revealed.update((r) => !r);\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.value.set(text);\n this.onChange(text);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.minLength();\n });\n\n /**\n * Reports `minlength` for a password shorter than `[minLength]` — the same\n * requirement the rules list shows. An empty value passes; compose with\n * `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'string' || !v) return null;\n const requiredLength = this.minLength();\n if (v.length >= requiredLength) return null;\n return { minlength: { requiredLength, actualLength: v.length } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div class=\"mk-password-input__field\">\n <input\n #input\n class=\"mk-password-input__input\"\n [id]=\"inputId\"\n [type]=\"revealed() ? 'text' : 'password'\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n\n <button\n type=\"button\"\n class=\"mk-password-input__toggle\"\n [attr.aria-label]=\"revealed() ? i18n.hidePassword : i18n.showPassword\"\n [attr.aria-pressed]=\"revealed()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggleReveal()\"\n >\n @if (revealed()) {\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <path d=\"M1 1l22 22\" />\n </svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n }\n </button>\n</div>\n\n@if (showStrength()) {\n <div\n class=\"mk-password-input__strength\"\n [id]=\"strengthId\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"mk-password-input__meter\" aria-hidden=\"true\">\n @for (filled of segments(); track $index) {\n <span\n class=\"mk-password-input__segment\"\n [class.mk-password-input__segment--filled]=\"filled\"\n [attr.data-score]=\"strength()\"\n ></span>\n }\n </div>\n <span class=\"mk-password-input__strength-label\">\n {{ i18n.passwordStrengthLabel }} {{ strengthLabel() }}\n </span>\n </div>\n}\n\n@if (showRules()) {\n <ul class=\"mk-password-input__rules\" [id]=\"rulesId\" role=\"list\">\n @for (rule of rules(); track rule.key) {\n <li\n class=\"mk-password-input__rule\"\n [class.mk-password-input__rule--met]=\"rule.met\"\n >\n <span class=\"mk-password-input__rule-marker\" aria-hidden=\"true\">\n {{ rule.met ? '✓' : '○' }}\n </span>\n <span class=\"mk-visually-hidden\">{{ rule.met ? i18n.ruleMet : i18n.ruleNotMet }}</span>\n <span class=\"mk-password-input__rule-text\">{{ rule.label }}</span>\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkButton } from '@mk-kit/ui/button';\nimport { MkFormField } from '../form-field/form-field';\n\n/** A single transferable item for {@link MkTransferList}. */\nexport interface MkTransferItem {\n /** The value committed to the form control when the item is in the selected list. */\n value: unknown;\n /** Text shown to the user. */\n label: string;\n /** Disable the item (cannot be checked or moved). */\n disabled?: boolean;\n}\n\n/** Which of the two lists a row belongs to. */\ntype MkTransferSide = 'available' | 'selected';\n\n/**\n * TransferList — a dual list box (a.k.a. pick list) for moving items between an\n * **available** list and a **selected** list, e.g. assigning roles or\n * permissions. The user checks rows in one list then clicks the middle move\n * buttons (or presses Enter on a row) to shuttle them across.\n *\n * Implements `ControlValueAccessor` over an **array** value (the values in the\n * selected list) and exposes a two-way `value` model, so it works with\n * `[(ngModel)]`, reactive forms and `[(value)]`. When nested in an\n * `mk-form-field` it inherits size and label wiring.\n *\n * Keyboard: each listbox is a single tab stop (roving tabindex). Arrow Up/Down\n * and Home/End move between rows, Space toggles a row's check and Enter moves\n * it to the opposite list.\n *\n * ```html\n * <mk-transfer-list filterable\n * [items]=\"allRoles()\"\n * [(value)]=\"assignedRoles\"\n * availableLabel=\"All roles\"\n * selectedLabel=\"Assigned\" />\n * ```\n */\n@Component({\n selector: 'mk-transfer-list',\n templateUrl: './transfer-list.html',\n styleUrl: './transfer-list.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkButton],\n host: {\n class: 'mk-transfer-list',\n '[class.mk-transfer-list--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-transfer-list--md]': \"effectiveSize() === 'md'\",\n '[class.mk-transfer-list--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-transfer-list--invalid]': 'isInvalid()',\n '[class.mk-transfer-list--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTransferList),\n multi: true,\n },\n ],\n})\nexport class MkTransferList implements ControlValueAccessor {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly injector = inject(Injector);\n private readonly availableOptEls =\n viewChildren<ElementRef<HTMLElement>>('availableOpt');\n private readonly selectedOptEls =\n viewChildren<ElementRef<HTMLElement>>('selectedOpt');\n private readonly availableListEl =\n viewChild<ElementRef<HTMLElement>>('availableList');\n private readonly selectedListEl =\n viewChild<ElementRef<HTMLElement>>('selectedList');\n\n /** The full set of items to shuttle between the two lists. */\n readonly items = input<readonly MkTransferItem[]>([]);\n /** Heading for the left (available) list. */\n readonly availableLabel = input(this.i18n.available);\n /** Heading for the right (selected) list. */\n readonly selectedLabel = input(this.i18n.selected);\n /** Show a search box over each list. */\n readonly filterable = input(false, { transform: booleanAttribute });\n /** Disable the whole control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n /** Two-way values currently in the selected (right) list. */\n readonly value = model<unknown[]>([]);\n\n /** Emits the new selected values whenever items are moved. */\n readonly change = output<unknown[]>();\n\n private readonly cvaDisabled = signal(false);\n /** Values checked in each list, awaiting a move. */\n private readonly checkedAvailable = signal(new Set<unknown>());\n private readonly checkedSelected = signal(new Set<unknown>());\n /** Per-list search queries (only used when `filterable`). */\n protected readonly availableQuery = signal('');\n protected readonly selectedQuery = signal('');\n /** Roving-tabindex active option index per list. */\n private readonly activeAvailable = signal(0);\n private readonly activeSelected = signal(0);\n\n private onChange: (value: unknown[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly baseId = mkUniqueId('mk-transfer');\n readonly availableListId = `${this.baseId}-available`;\n readonly selectedListId = `${this.baseId}-selected`;\n readonly availableLabelId = `${this.baseId}-available-label`;\n readonly selectedLabelId = `${this.baseId}-selected-label`;\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n\n /** Items keyed by value, for resolving the selected order. */\n private readonly byValue = computed(() => {\n const map = new Map<unknown, MkTransferItem>();\n for (const it of this.items()) map.set(it.value, it);\n return map;\n });\n\n /** Items not currently in the value (in `items` order). */\n protected readonly available = computed<readonly MkTransferItem[]>(() => {\n const chosen = new Set(this.value());\n return this.items().filter((it) => !chosen.has(it.value));\n });\n\n /** Items currently in the value, preserving the value array order. */\n protected readonly selected = computed<readonly MkTransferItem[]>(() => {\n const map = this.byValue();\n const out: MkTransferItem[] = [];\n for (const v of this.value()) {\n const it = map.get(v);\n if (it) out.push(it);\n }\n return out;\n });\n\n protected readonly filteredAvailable = computed<readonly MkTransferItem[]>(() =>\n this.applyFilter(this.available(), this.availableQuery()),\n );\n protected readonly filteredSelected = computed<readonly MkTransferItem[]>(() =>\n this.applyFilter(this.selected(), this.selectedQuery()),\n );\n\n private applyFilter(\n list: readonly MkTransferItem[],\n query: string,\n ): readonly MkTransferItem[] {\n if (!this.filterable()) return list;\n const q = query.trim().toLowerCase();\n if (!q) return list;\n return list.filter((it) => it.label.toLowerCase().includes(q));\n }\n\n /** Whether the \"move right\" controls are actionable. */\n protected readonly canMoveRight = computed(() =>\n this.available().some(\n (it) => !it.disabled && this.checkedAvailable().has(it.value),\n ),\n );\n /** Whether the \"move left\" controls are actionable. */\n protected readonly canMoveLeft = computed(() =>\n this.selected().some(\n (it) => !it.disabled && this.checkedSelected().has(it.value),\n ),\n );\n protected readonly canMoveAllRight = computed(() =>\n this.available().some((it) => !it.disabled),\n );\n protected readonly canMoveAllLeft = computed(() =>\n this.selected().some((it) => !it.disabled),\n );\n\n protected isChecked(side: MkTransferSide, value: unknown): boolean {\n return this.checkedFor(side)().has(value);\n }\n\n private checkedFor(side: MkTransferSide) {\n return side === 'available' ? this.checkedAvailable : this.checkedSelected;\n }\n\n /** Toggle a row's checked state (Space / click on the row). */\n protected toggleCheck(side: MkTransferSide, item: MkTransferItem): void {\n if (this.isDisabled() || item.disabled) return;\n const sig = this.checkedFor(side);\n const next = new Set(sig());\n next.has(item.value) ? next.delete(item.value) : next.add(item.value);\n sig.set(next);\n }\n\n protected onQueryInput(side: MkTransferSide, event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n (side === 'available' ? this.availableQuery : this.selectedQuery).set(text);\n }\n\n // --- Roving tabindex --------------------------------------------------------\n private filteredFor(side: MkTransferSide): readonly MkTransferItem[] {\n return side === 'available'\n ? this.filteredAvailable()\n : this.filteredSelected();\n }\n\n private activeSignalFor(side: MkTransferSide) {\n return side === 'available' ? this.activeAvailable : this.activeSelected;\n }\n\n /** The active (tabbable) option index for a list, clamped to its length. */\n protected activeIdx(side: MkTransferSide): number {\n const max = Math.max(0, this.filteredFor(side).length - 1);\n return Math.min(this.activeSignalFor(side)(), max);\n }\n\n /** Keep the roving index in sync when an option is focused (e.g. by click). */\n protected setActive(side: MkTransferSide, index: number): void {\n this.activeSignalFor(side).set(index);\n }\n\n /** Move the active index and focus that option. */\n private moveActive(side: MkTransferSide, index: number): void {\n const list = this.filteredFor(side);\n if (!list.length) return;\n const next = Math.max(0, Math.min(index, list.length - 1));\n this.activeSignalFor(side).set(next);\n this.focusOption(side, next);\n }\n\n private focusOption(side: MkTransferSide, index: number): void {\n const els =\n side === 'available' ? this.availableOptEls() : this.selectedOptEls();\n els[index]?.nativeElement.focus();\n }\n\n /**\n * After a move, keep focus useful: focus the source list's next remaining\n * option, or the (empty) list element itself.\n */\n private focusAfterMove(side: MkTransferSide): void {\n afterNextRender(\n () => {\n const list = this.filteredFor(side);\n if (!list.length) {\n this.activeSignalFor(side).set(0);\n const listEl =\n side === 'available' ? this.availableListEl() : this.selectedListEl();\n listEl?.nativeElement.focus();\n return;\n }\n this.moveActive(side, this.activeSignalFor(side)());\n },\n { injector: this.injector },\n );\n }\n\n private announceMove(count: number, side: MkTransferSide): void {\n const target =\n side === 'available' ? this.selectedLabel() : this.availableLabel();\n this.announcer.announce(this.i18n.itemsMoved(count, target));\n }\n\n protected onRowKeydown(\n side: MkTransferSide,\n item: MkTransferItem,\n event: Event,\n ): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const index = this.filteredFor(side).indexOf(item);\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.moveActive(side, index + 1);\n return;\n case 'ArrowUp':\n e.preventDefault();\n this.moveActive(side, index - 1);\n return;\n case 'Home':\n e.preventDefault();\n this.moveActive(side, 0);\n return;\n case 'End':\n e.preventDefault();\n this.moveActive(side, this.filteredFor(side).length - 1);\n return;\n }\n if (item.disabled) return;\n if (e.key === ' ') {\n e.preventDefault();\n this.toggleCheck(side, item);\n } else if (e.key === 'Enter') {\n e.preventDefault();\n this.moveOne(side, item);\n }\n }\n\n /** Move a single item to the opposite list (Enter on a row). */\n private moveOne(side: MkTransferSide, item: MkTransferItem): void {\n const index = this.filteredFor(side).indexOf(item);\n if (index >= 0) this.activeSignalFor(side).set(index);\n if (side === 'available') {\n this.commit([...this.value(), item.value]);\n } else {\n this.commit(this.value().filter((v) => v !== item.value));\n }\n this.uncheck(side, [item.value]);\n this.announceMove(1, side);\n this.focusAfterMove(side);\n }\n\n /** Move all checked available items into the selected list. */\n protected moveRight(): void {\n if (this.isDisabled()) return;\n const checked = this.checkedAvailable();\n const moving = this.available()\n .filter((it) => !it.disabled && checked.has(it.value))\n .map((it) => it.value);\n if (!moving.length) return;\n this.commit([...this.value(), ...moving]);\n this.uncheck('available', moving);\n this.announceMove(moving.length, 'available');\n this.focusAfterMove('available');\n }\n\n /** Move all checked selected items back to the available list. */\n protected moveLeft(): void {\n if (this.isDisabled()) return;\n const checked = this.checkedSelected();\n const moving = new Set(\n this.selected()\n .filter((it) => !it.disabled && checked.has(it.value))\n .map((it) => it.value),\n );\n if (!moving.size) return;\n this.commit(this.value().filter((v) => !moving.has(v)));\n this.uncheck('selected', [...moving]);\n this.announceMove(moving.size, 'selected');\n this.focusAfterMove('selected');\n }\n\n /** Move every movable available item into the selected list. */\n protected moveAllRight(): void {\n if (this.isDisabled()) return;\n const moving = this.available()\n .filter((it) => !it.disabled)\n .map((it) => it.value);\n if (!moving.length) return;\n this.commit([...this.value(), ...moving]);\n this.checkedAvailable.set(new Set());\n this.announceMove(moving.length, 'available');\n this.focusAfterMove('available');\n }\n\n /** Move every movable selected item back to the available list. */\n protected moveAllLeft(): void {\n if (this.isDisabled()) return;\n const moving = new Set(\n this.selected()\n .filter((it) => !it.disabled)\n .map((it) => it.value),\n );\n if (!moving.size) return;\n this.commit(this.value().filter((v) => !moving.has(v)));\n this.checkedSelected.set(new Set());\n this.announceMove(moving.size, 'selected');\n this.focusAfterMove('selected');\n }\n\n private uncheck(side: MkTransferSide, values: readonly unknown[]): void {\n const sig = this.checkedFor(side);\n const next = new Set(sig());\n for (const v of values) next.delete(v);\n sig.set(next);\n }\n\n private commit(next: unknown[]): void {\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n this.change.emit(next);\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown[] | null): void {\n this.value.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<!-- Available (left) list -->\n<div class=\"mk-transfer-list__panel\">\n <div class=\"mk-transfer-list__heading\" [id]=\"availableLabelId\">\n {{ availableLabel() }}\n <span class=\"mk-transfer-list__count\">{{ available().length }}</span>\n </div>\n\n @if (filterable()) {\n <input\n class=\"mk-transfer-list__search\"\n type=\"text\"\n [value]=\"availableQuery()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"availableLabel() + ' — ' + i18n.filter\"\n [placeholder]=\"i18n.filter\"\n (input)=\"onQueryInput('available', $event)\"\n />\n }\n\n <ul\n #availableList\n class=\"mk-transfer-list__list\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n tabindex=\"-1\"\n [id]=\"availableListId\"\n [attr.aria-labelledby]=\"availableLabelId\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n >\n @for (item of filteredAvailable(); track item.value) {\n <li\n #availableOpt\n class=\"mk-transfer-list__option\"\n [class.mk-transfer-list__option--checked]=\"isChecked('available', item.value)\"\n [class.mk-transfer-list__option--disabled]=\"item.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isChecked('available', item.value)\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.tabindex]=\"$index === activeIdx('available') ? 0 : -1\"\n (focus)=\"setActive('available', $index)\"\n (click)=\"toggleCheck('available', item)\"\n (keydown)=\"onRowKeydown('available', item, $event)\"\n >\n <span class=\"mk-transfer-list__check\" aria-hidden=\"true\"></span>\n <span class=\"mk-transfer-list__label\">{{ item.label }}</span>\n </li>\n } @empty {\n <li class=\"mk-transfer-list__empty\">{{ i18n.noData }}</li>\n }\n </ul>\n</div>\n\n<!-- Middle controls -->\n<div class=\"mk-transfer-list__controls\">\n <button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n [attr.aria-label]=\"i18n.transferSelected(selectedLabel())\"\n [disabled]=\"isDisabled() || !canMoveRight()\"\n (click)=\"moveRight()\"\n >\n <span class=\"mk-transfer-list__arrow\" aria-hidden=\"true\">→</span>\n </button>\n <button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n [attr.aria-label]=\"i18n.transferAll(selectedLabel())\"\n [disabled]=\"isDisabled() || !canMoveAllRight()\"\n (click)=\"moveAllRight()\"\n >\n <span class=\"mk-transfer-list__arrow\" aria-hidden=\"true\">≫</span>\n </button>\n <button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n [attr.aria-label]=\"i18n.transferAll(availableLabel())\"\n [disabled]=\"isDisabled() || !canMoveAllLeft()\"\n (click)=\"moveAllLeft()\"\n >\n <span class=\"mk-transfer-list__arrow\" aria-hidden=\"true\">≪</span>\n </button>\n <button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n [attr.aria-label]=\"i18n.transferSelected(availableLabel())\"\n [disabled]=\"isDisabled() || !canMoveLeft()\"\n (click)=\"moveLeft()\"\n >\n <span class=\"mk-transfer-list__arrow\" aria-hidden=\"true\">←</span>\n </button>\n</div>\n\n<!-- Selected (right) list -->\n<div class=\"mk-transfer-list__panel\">\n <div class=\"mk-transfer-list__heading\" [id]=\"selectedLabelId\">\n {{ selectedLabel() }}\n <span class=\"mk-transfer-list__count\">{{ selected().length }}</span>\n </div>\n\n @if (filterable()) {\n <input\n class=\"mk-transfer-list__search\"\n type=\"text\"\n [value]=\"selectedQuery()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"selectedLabel() + ' — ' + i18n.filter\"\n [placeholder]=\"i18n.filter\"\n (input)=\"onQueryInput('selected', $event)\"\n />\n }\n\n <ul\n #selectedList\n class=\"mk-transfer-list__list\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n tabindex=\"-1\"\n [id]=\"selectedListId\"\n [attr.aria-labelledby]=\"selectedLabelId\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n >\n @for (item of filteredSelected(); track item.value) {\n <li\n #selectedOpt\n class=\"mk-transfer-list__option\"\n [class.mk-transfer-list__option--checked]=\"isChecked('selected', item.value)\"\n [class.mk-transfer-list__option--disabled]=\"item.disabled\"\n role=\"option\"\n [attr.aria-selected]=\"isChecked('selected', item.value)\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.tabindex]=\"$index === activeIdx('selected') ? 0 : -1\"\n (focus)=\"setActive('selected', $index)\"\n (click)=\"toggleCheck('selected', item)\"\n (keydown)=\"onRowKeydown('selected', item, $event)\"\n >\n <span class=\"mk-transfer-list__check\" aria-hidden=\"true\"></span>\n <span class=\"mk-transfer-list__label\">{{ item.label }}</span>\n </li>\n } @empty {\n <li class=\"mk-transfer-list__empty\">{{ i18n.noData }}</li>\n }\n </ul>\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n booleanAttribute,\n computed,\n contentChild,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MK_I18N, MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { MkButton } from '@mk-kit/ui/button';\nimport {\n MkDrag,\n MkDragHandle,\n MkDropList,\n mkMoveItemInArray,\n type MkDropEvent,\n} from '@mk-kit/ui/dnd';\n\n/** Template context for a {@link MkRepeaterRow} row template. */\nexport interface MkRepeaterRowContext<T> {\n /** The row's item — destructure with `let-item`. */\n $implicit: T;\n /** The row's current index — destructure with `let-i=\"index\"`. */\n index: number;\n}\n\n/**\n * Marks an `<ng-template>` as the row template for {@link MkRepeater}. The\n * template receives the item as its implicit context plus its `index`:\n *\n * ```html\n * <ng-template mkRepeaterRow let-item let-i=\"index\">\n * <input mkInput [(ngModel)]=\"item.name\" />\n * </ng-template>\n * ```\n */\n@Directive({\n selector: '[mkRepeaterRow]',\n})\nexport class MkRepeaterRow<T = unknown> {\n /** The projected row template, rendered once per item. */\n readonly template = inject<TemplateRef<MkRepeaterRowContext<T>>>(TemplateRef);\n\n static ngTemplateContextGuard<T>(\n _dir: MkRepeaterRow<T>,\n _ctx: unknown,\n ): _ctx is MkRepeaterRowContext<T> {\n return true;\n }\n}\n\n/**\n * Marks an `<ng-template>` as {@link MkRepeater}'s custom empty state, shown\n * instead of the row list while there are no items.\n */\n@Directive({\n selector: '[mkRepeaterEmpty]',\n})\nexport class MkRepeaterEmpty {\n /** The projected empty-state template. */\n readonly template = inject(TemplateRef);\n}\n\n/**\n * Repeater — the schema-friendly editable list: renders one instance of a\n * consumer-projected row template per item, with add / remove / (optional)\n * drag-and-drop + keyboard reorder built in.\n *\n * `items` is a two-way model and the component also implements\n * `ControlValueAccessor` over `T[]`, so it drops into template-driven and\n * reactive forms alike. **Every mutation produces a new array** — the\n * consumer's array is never mutated in place.\n *\n * Rows are tracked by **item object identity** (stable across the repeater's\n * immutable array copies), so removing a middle row keeps the following rows'\n * DOM — and any in-progress input state — intact. Consequently, arrays of\n * primitives with duplicate values (e.g. `['a', 'a']`) are not supported\n * directly: wrap each value in an object (`{ value: 'a' }`) so every row has\n * a distinct identity.\n *\n * With `reorderable`, each row gets a drag handle wired through the dnd\n * module's touch-safe handle-based configuration (a swipe on the row body\n * still scrolls the page). The handle button is the only control the dnd\n * layer adds — rows stay plain list items, so the inputs and buttons inside\n * them are never nested in an interactive role. Reordering also works by\n * keyboard: focus the handle and press Space/Enter to pick up, arrows to\n * move, Space/Enter to drop, Escape to cancel. Each completed reorder is\n * announced via {@link MkLiveAnnouncer}.\n *\n * ```html\n * <mk-repeater [(items)]=\"rows\" [min]=\"1\" [max]=\"10\" reorderable\n * [factory]=\"newRow\" addLabel=\"Add row\">\n * <ng-template mkRepeaterRow let-item let-i=\"index\">\n * <input mkInput [(ngModel)]=\"item.name\" />\n * </ng-template>\n * <ng-template mkRepeaterEmpty>No rows yet.</ng-template>\n * </mk-repeater>\n * ```\n *\n * @typeParam T item data type.\n */\n@Component({\n selector: 'mk-repeater',\n templateUrl: './repeater.html',\n styleUrl: './repeater.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, MkButton, MkDropList, MkDrag, MkDragHandle],\n host: {\n class: 'mk-repeater',\n '[class.mk-repeater--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkRepeater),\n multi: true,\n },\n ],\n})\nexport class MkRepeater<T = unknown> implements ControlValueAccessor {\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n\n /** The rows (two-way). Every mutation sets a **new** array. */\n readonly items = model<T[]>([]);\n\n /** Creates the item appended by the add button. Default: `{}` cast to `T`. */\n readonly factory = input<() => T>(() => ({}) as T);\n\n /** Minimum number of rows — remove buttons disable at (or below) it. */\n readonly min = input(0, { transform: numberAttribute });\n\n /** Maximum number of rows (0 = unlimited) — the add button disables at it. */\n readonly max = input(0, { transform: numberAttribute });\n\n /** Enable per-row drag handles (pointer + keyboard reorder). */\n readonly reorderable = input(false, { transform: booleanAttribute });\n\n /** Disable the whole control (add, remove and reorder). */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Add-button caption. Defaults to the i18n `repeaterAddRow` string. */\n readonly addLabel = input<string>('');\n\n /** Emitted after the add button appended a factory-made item. */\n readonly added = output<{ item: T; index: number }>();\n /** Emitted after a row was removed. */\n readonly removed = output<{ item: T; index: number }>();\n /** Emitted after a row was reordered (drag or keyboard). */\n readonly moved = output<{ from: number; to: number }>();\n\n /** The projected `[mkRepeaterRow]` row template (required). */\n protected readonly rowTemplate =\n contentChild.required<MkRepeaterRow<T>>(MkRepeaterRow);\n /** The optional `[mkRepeaterEmpty]` empty-state template. */\n protected readonly emptyTemplate = contentChild(MkRepeaterEmpty);\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: T[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** Effective disabled state (input- or form-driven). */\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n /** Whether the row cap has been reached (add disables). */\n protected readonly atMax = computed(\n () => this.max() > 0 && this.items().length >= this.max(),\n );\n\n /** Whether the row floor has been reached (remove disables). */\n protected readonly atMin = computed(\n () => this.items().length <= Math.max(0, this.min()),\n );\n\n /** The add button's caption (input, falling back to i18n). */\n protected readonly effectiveAddLabel = computed(\n () => this.addLabel() || this.i18n.repeaterAddRow,\n );\n\n /** Append a new `factory()` item (no-op when disabled or at `max`). */\n protected add(): void {\n if (this.isDisabled() || this.atMax()) return;\n const item = this.factory()();\n const next = [...this.items(), item];\n this.setItems(next);\n this.onTouched();\n this.added.emit({ item, index: next.length - 1 });\n }\n\n /** Remove the row at `index` (no-op when disabled or at `min`). */\n protected removeAt(index: number): void {\n if (this.isDisabled() || this.atMin()) return;\n const current = this.items();\n if (index < 0 || index >= current.length) return;\n const item = current[index];\n this.setItems(current.filter((_, i) => i !== index));\n this.onTouched();\n this.removed.emit({ item, index });\n }\n\n /** Apply a dnd drop (pointer or keyboard) to a **copy** of the array. */\n protected onDrop(event: MkDropEvent<T>): void {\n const from = event.previousIndex;\n const to = event.currentIndex;\n if (from === to) return;\n const next = [...this.items()];\n mkMoveItemInArray(next, from, to);\n this.setItems(next);\n this.onTouched();\n this.moved.emit({ from, to });\n this.announcer.announce(this.i18n.repeaterRowMoved(from + 1, to + 1));\n }\n\n /**\n * Keep keys typed into the projected row content (and pressed on the remove\n * button) from bubbling to the row's `[mkDrag]` host, where Space/Enter\n * would pick the row up for keyboard dragging. Reordering by keyboard stays\n * available from the drag handle and the row element itself.\n */\n protected onContentKeydown(event: Event): void {\n event.stopPropagation();\n }\n\n private setItems(next: T[]): void {\n this.items.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: T[] | null): void {\n this.items.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: T[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","@if (items().length > 0) {\n @if (reorderable()) {\n <ul\n class=\"mk-repeater__rows\"\n mkDropList\n [mkDropListData]=\"items()\"\n [mkDropListDisabled]=\"isDisabled()\"\n (mkDropListDropped)=\"onDrop($event)\"\n >\n @for (item of items(); track item) {\n <li class=\"mk-repeater__row\" mkDrag [mkDragData]=\"item\">\n <button\n type=\"button\"\n class=\"mk-repeater__handle\"\n mkDragHandle\n [attr.aria-label]=\"i18n.repeaterReorderRow($index + 1)\"\n [disabled]=\"isDisabled()\"\n >\n <span aria-hidden=\"true\">⠿</span>\n </button>\n <ng-container\n [ngTemplateOutlet]=\"rowInner\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: $index }\"\n />\n </li>\n }\n </ul>\n } @else {\n <ul class=\"mk-repeater__rows\">\n @for (item of items(); track item) {\n <li class=\"mk-repeater__row\">\n <ng-container\n [ngTemplateOutlet]=\"rowInner\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: $index }\"\n />\n </li>\n }\n </ul>\n }\n} @else {\n @if (emptyTemplate(); as empty) {\n <div class=\"mk-repeater__empty\">\n <ng-container [ngTemplateOutlet]=\"empty.template\" />\n </div>\n }\n}\n\n<button\n mkButton\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n class=\"mk-repeater__add\"\n [disabled]=\"isDisabled() || atMax()\"\n (click)=\"add()\"\n>\n {{ effectiveAddLabel() }}\n</button>\n\n<!-- Shared row body: projected content + remove button (both branches). -->\n<ng-template #rowInner let-item let-i=\"index\">\n <div class=\"mk-repeater__content\" (keydown)=\"onContentKeydown($event)\">\n <ng-container\n [ngTemplateOutlet]=\"rowTemplate().template\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: i }\"\n />\n </div>\n <button\n mkButton\n variant=\"ghost\"\n tone=\"neutral\"\n size=\"sm\"\n iconOnly\n type=\"button\"\n class=\"mk-repeater__remove\"\n [attr.aria-label]=\"i18n.repeaterRemoveRow(i + 1)\"\n [disabled]=\"isDisabled() || atMin()\"\n (click)=\"removeAt(i)\"\n (keydown)=\"onContentKeydown($event)\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\nimport { MkTree, type MkTreeNode } from '@mk-kit/ui/navigation';\n\n/**\n * TreeSelect — a form field whose popover contains a hierarchical\n * {@link MkTree}. The trigger shows the selected node's label (or a\n * placeholder); opening it reveals a selectable tree rendered in the top layer\n * via {@link MkAnchoredPanel}, so it is never clipped. Choosing a node sets the\n * value to that node's `value` (or the node itself when `value` is unset),\n * closes the panel and restores focus to the trigger. Implements\n * `ControlValueAccessor` and a two-way `value` model.\n *\n * ```html\n * <mk-tree-select [nodes]=\"tree\" [(value)]=\"picked\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-tree-select',\n templateUrl: './tree-select.html',\n styleUrl: './tree-select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkTree, MkAnchoredPanel],\n host: {\n class: 'mk-tree-select',\n '[class.mk-tree-select--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-tree-select--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-tree-select--open]': 'open()',\n '[class.mk-tree-select--invalid]': 'isInvalid()',\n '[class.mk-tree-select--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTreeSelect),\n multi: true,\n },\n ],\n})\nexport class MkTreeSelect implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** The hierarchical data to render in the panel. */\n readonly nodes = input<readonly MkTreeNode[]>([]);\n /** Two-way selected value (a node's `value`, or the node itself if unset). */\n readonly value = model<unknown | null>(null);\n /** Placeholder shown when nothing is selected. */\n readonly placeholder = input(this.i18n.selectPlaceholder);\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a value is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-tree-select');\n readonly panelId = mkUniqueId('mk-tree-select-panel');\n /** Id of the rendered value/placeholder span, appended to `aria-labelledby`. */\n readonly valueId = mkUniqueId('mk-tree-select-value');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Label of the selected node (found by walking `nodes` recursively). */\n protected readonly selectedLabel = computed(() => {\n const v = this.value();\n if (v === null || v === undefined) return '';\n return this.findNode(this.nodes(), v)?.label ?? '';\n });\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n // Move focus into the tree once the panel is in the DOM.\n afterNextRender(() => this.focusTree(), { injector: this.injector });\n }\n\n protected close(restoreFocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (restoreFocus) this.triggerRef()?.nativeElement.focus();\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n }\n }\n\n /**\n * Focus left the teleported panel. The host `(focusout)` never sees this —\n * the panel lives under `document.body` — so Tab-out of the tree is handled\n * here: close unless focus moved back into the field or the panel.\n */\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n // Focus fell to a non-focusable spot (body) — keep open; an outside\n // pointerdown is dismissed by the anchored panel itself.\n if (!related) return;\n if (this.host.nativeElement.contains(related)) return;\n if (this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n /** Handle a selection emitted by the tree (a value) or a node passed directly. */\n protected onPick(selected: unknown): void {\n const value = this.valueOf(selected);\n this.value.set(value);\n this.onChange(value);\n this.close(true);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.onChange(null);\n this.triggerRef()?.nativeElement.focus();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n /** Resolve the bound value for a node (or pass a primitive value through). */\n private valueOf(node: unknown): unknown {\n if (\n node &&\n typeof node === 'object' &&\n 'value' in node &&\n (node as MkTreeNode).value !== undefined\n ) {\n return (node as MkTreeNode).value;\n }\n return node;\n }\n\n private findNode(\n list: readonly MkTreeNode[],\n value: unknown,\n ): MkTreeNode | null {\n for (const node of list) {\n if (this.valueOf(node) === value) return node;\n if (node.children?.length) {\n const hit = this.findNode(node.children, value);\n if (hit) return hit;\n }\n }\n return null;\n }\n\n private focusTree(): void {\n const panel = this.panelRef()?.nativeElement;\n if (!panel) return;\n const active =\n panel.querySelector<HTMLElement>('[role=\"treeitem\"][tabindex=\"0\"]') ??\n panel.querySelector<HTMLElement>('[role=\"treeitem\"]');\n active?.focus();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: unknown | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div #field class=\"mk-tree-select__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-tree-select__trigger\"\n [id]=\"triggerId\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy() ? labelledBy() + ' ' + valueId : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (selectedLabel()) {\n <span class=\"mk-tree-select__value\" [id]=\"valueId\">{{ selectedLabel() }}</span>\n } @else {\n <span\n class=\"mk-tree-select__value mk-tree-select__value--placeholder\"\n [id]=\"valueId\"\n >{{ placeholder() }}</span\n >\n }\n <span class=\"mk-tree-select__icon\" aria-hidden=\"true\"></span>\n </button>\n\n @if (clearable() && value() !== null && value() !== undefined && !isDisabled()) {\n <button\n type=\"button\"\n class=\"mk-tree-select__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear($event)\"\n >\n <span class=\"mk-tree-select__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-tree-select__panel\"\n role=\"dialog\"\n [id]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n [matchWidth]=\"true\"\n (dismiss)=\"close()\"\n (keydown)=\"onPanelKeydown($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n <mk-tree\n class=\"mk-tree-select__tree\"\n selectable\n [nodes]=\"nodes()\"\n [selected]=\"value()\"\n (selectedChange)=\"onPick($event)\"\n />\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n effect,\n forwardRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\n\n/** Upload lifecycle state for a single file. */\nexport type MkUploadStatus = 'pending' | 'uploading' | 'success' | 'error';\n\n/** A file tracked by {@link MkFileUpload}. */\nexport interface MkUploadFile {\n /** Stable id for tracking + removal. */\n id: string;\n /** The underlying browser `File`. */\n file: File;\n /** File name. */\n name: string;\n /** Size in bytes. */\n size: number;\n /** Upload lifecycle state. */\n status: MkUploadStatus;\n /** Upload progress, 0–100. */\n progress: number;\n /** Failure reason (validation or upload error). */\n error?: string;\n /** Object URL for an image preview, when the file is an image. */\n previewUrl?: string;\n}\n\n/** Why a dropped/selected file was rejected. */\nexport interface MkUploadRejection {\n file: File;\n reason: 'type' | 'size' | 'maxFiles';\n message: string;\n}\n\n/**\n * Uploads the given file, reporting progress via `onProgress` (0–100) and\n * resolving on success / rejecting (optionally with an `Error`) on failure.\n */\nexport type MkUploadFn = (\n file: File,\n onProgress: (percent: number) => void,\n) => Promise<void>;\n\n/**\n * What {@link MkFileUpload} publishes as its form value: the raw browser\n * `File`s (the default, and what you would send in a `FormData`), or the full\n * tracked items including upload status and progress.\n */\nexport type MkUploadValueFormat = 'file' | 'item';\n\nlet uploadSeq = 0;\n\n/**\n * FileUpload — an accessible click-or-drag dropzone with multi-file support,\n * type/size/count validation, image thumbnails and per-file progress.\n *\n * Provide an `uploadFn` to stream each accepted file to your backend (it\n * reports progress and resolves/rejects); with `autoUpload` (on by default when\n * an `uploadFn` is set) files upload as soon as they are accepted. Without one,\n * the component just validates + tracks files and emits `filesSelected` for you\n * to handle. The tracked list is a two-way `files` model so you can reset it.\n *\n * Keyboard: the dropzone is a button — Enter/Space opens the native picker.\n * Rejections are announced through a polite live region.\n *\n * Implements `ControlValueAccessor` and `Validator`, so it drops into a\n * reactive form like any other control. The form value is `File[]` by default\n * (`[valueFormat]=\"'item'\"` publishes the tracked `MkUploadFile[]` instead),\n * and `accept` / `maxSize` / `maxFiles` are enforced as validation errors as\n * well as at pick time — a list written in from the model side is checked too.\n *\n * ```html\n * <mk-file-upload accept=\"image/*\" multiple [maxSize]=\"5_000_000\"\n * [uploadFn]=\"upload\" (filesSelected)=\"onFiles($event)\" [(files)]=\"files\" />\n *\n * <mk-file-upload formControlName=\"attachments\" accept=\".pdf\" [maxFiles]=\"3\" />\n * ```\n */\n@Component({\n selector: 'mk-file-upload',\n templateUrl: './file-upload.html',\n styleUrl: './file-upload.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-file-upload',\n '[class.mk-file-upload--disabled]': 'isDisabled()',\n '[class.mk-file-upload--dragging]': 'dragging()',\n '[class.mk-file-upload--invalid]': 'invalid()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkFileUpload),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkFileUpload),\n multi: true,\n },\n ],\n})\nexport class MkFileUpload implements ControlValueAccessor, Validator {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly i18n = inject(MK_I18N);\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n /** Native `accept` filter, e.g. `image/*` or `.pdf,.doc`. */\n readonly accept = input<string>('');\n /** Allow selecting more than one file. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Maximum size per file in bytes (0 = unlimited). */\n readonly maxSize = input(0, { transform: numberAttribute });\n /** Maximum number of files kept (0 = unlimited). */\n readonly maxFiles = input(0, { transform: numberAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Primary dropzone prompt. */\n readonly label = input(this.i18n.dropzoneLabel);\n /** Secondary hint under the prompt (e.g. accepted types / size). */\n readonly hint = input('');\n /** Hide the built-in file list (render your own from `files`). */\n readonly hideList = input(false, { transform: booleanAttribute });\n /** Async upload handler. When set, files upload automatically. */\n readonly uploadFn = input<MkUploadFn | null>(null);\n /** Upload accepted files immediately. Defaults to true when `uploadFn` set. */\n readonly autoUpload = input<boolean | undefined>(undefined);\n /** Shape of the value published to a bound form control. */\n readonly valueFormat = input<MkUploadValueFormat>('file');\n\n /** The tracked files (two-way, so consumers can reset the list). */\n readonly files = model<MkUploadFile[]>([]);\n\n /** Emits the accepted `File`s each time files are added. */\n readonly filesSelected = output<File[]>();\n /** Emits rejected files with a reason. */\n readonly rejected = output<MkUploadRejection[]>();\n /** Emits a file once its upload succeeds. */\n readonly uploaded = output<MkUploadFile>();\n /** Emits a file when it is removed from the list. */\n readonly removed = output<MkUploadFile>();\n\n protected readonly dragging = signal(false);\n /** Latest rejection messages, surfaced in a polite live region. */\n protected readonly announcement = signal('');\n\n readonly inputId = mkUniqueId('mk-file-upload');\n\n /** Set by reactive forms through `setDisabledState`. */\n private readonly cvaDisabled = signal(false);\n /** Disabled either by the `disabled` input or by the bound form control. */\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n private onChange: (value: File[] | MkUploadFile[]) => void = () => {};\n private onTouched: () => void = () => {};\n /** Guards `writeValue` from echoing back through `onChange`. */\n private writing = false;\n\n protected readonly shouldAutoUpload = computed(\n () => this.autoUpload() ?? !!this.uploadFn(),\n );\n\n protected openPicker(): void {\n if (this.isDisabled()) return;\n this.inputRef()?.nativeElement.click();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.openPicker();\n }\n }\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) this.addFiles(input.files);\n // Reset so re-selecting the same file fires `change` again.\n input.value = '';\n }\n\n protected onDragOver(event: DragEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(true);\n }\n\n protected onDragLeave(event: DragEvent): void {\n event.preventDefault();\n this.dragging.set(false);\n }\n\n protected onDrop(event: DragEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(false);\n if (event.dataTransfer?.files) this.addFiles(event.dataTransfer.files);\n }\n\n /** Validate + track a batch of files, uploading them when configured. */\n private addFiles(list: FileList): void {\n const incoming = this.multiple() ? Array.from(list) : list[0] ? [list[0]] : [];\n const accepted: MkUploadFile[] = [];\n const rejections: MkUploadRejection[] = [];\n const max = this.maxFiles();\n let count = this.multiple() ? this.files().length : 0;\n\n for (const file of incoming) {\n if (!this.matchesAccept(file)) {\n rejections.push({ file, reason: 'type', message: this.i18n.fileRejectedType(file.name) });\n continue;\n }\n if (this.maxSize() > 0 && file.size > this.maxSize()) {\n rejections.push({\n file,\n reason: 'size',\n message: this.i18n.fileRejectedSize(file.name, this.formatBytes(this.maxSize())),\n });\n continue;\n }\n if (max > 0 && count >= max) {\n rejections.push({ file, reason: 'maxFiles', message: this.i18n.fileRejectedCount(file.name, max) });\n continue;\n }\n accepted.push(this.toItem(file));\n count++;\n }\n\n if (accepted.length) {\n // In single mode a new file replaces the previous one.\n const base = this.multiple() ? this.files() : [];\n if (!this.multiple()) this.files().forEach((i) => this.revoke(i));\n this.files.set([...base, ...accepted]);\n this.filesSelected.emit(accepted.map((i) => i.file));\n if (this.shouldAutoUpload() && this.uploadFn()) {\n accepted.forEach((i) => this.upload(i));\n }\n }\n if (rejections.length) {\n this.rejected.emit(rejections);\n this.announcement.set(rejections.map((r) => r.message).join('. '));\n }\n }\n\n /** Remove a tracked file. */\n protected remove(item: MkUploadFile): void {\n this.revoke(item);\n this.files.set(this.files().filter((i) => i.id !== item.id));\n this.removed.emit(item);\n }\n\n /** Retry a failed upload. */\n protected retry(item: MkUploadFile): void {\n if (this.uploadFn()) this.upload(item);\n }\n\n private async upload(item: MkUploadFile): Promise<void> {\n const fn = this.uploadFn();\n if (!fn) return;\n this.patch(item.id, { status: 'uploading', progress: 0, error: undefined });\n try {\n await fn(item.file, (pct) =>\n this.patch(item.id, { progress: Math.max(0, Math.min(100, Math.round(pct))) }),\n );\n this.patch(item.id, { status: 'success', progress: 100 });\n const done = this.files().find((i) => i.id === item.id);\n if (done) this.uploaded.emit(done);\n } catch (err) {\n const message =\n err instanceof Error ? err.message : this.i18n.uploadFailed;\n this.patch(item.id, { status: 'error', error: message });\n }\n }\n\n /** Immutably update one tracked file by id. */\n private patch(id: string, partial: Partial<MkUploadFile>): void {\n this.files.set(\n this.files().map((i) => (i.id === id ? { ...i, ...partial } : i)),\n );\n }\n\n private toItem(file: File): MkUploadFile {\n const isImage = file.type.startsWith('image/');\n return {\n id: `mk-upload-${uploadSeq++}`,\n file,\n name: file.name,\n size: file.size,\n status: 'pending',\n progress: 0,\n previewUrl:\n isImage && this.isBrowser\n ? this.document.defaultView?.URL.createObjectURL(file)\n : undefined,\n };\n }\n\n private revoke(item: MkUploadFile): void {\n if (item.previewUrl && this.isBrowser) {\n this.document.defaultView?.URL.revokeObjectURL(item.previewUrl);\n }\n }\n\n private matchesAccept(file: File): boolean {\n const accept = this.accept().trim();\n if (!accept) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return accept.split(',').some((raw) => {\n const token = raw.trim().toLowerCase();\n if (!token) return false;\n if (token.startsWith('.')) return name.endsWith(token);\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, -1));\n return type === token;\n });\n }\n\n protected formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KB', 'MB', 'GB'];\n let value = bytes / 1024;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024;\n unit++;\n }\n return `${value.toFixed(value < 10 ? 1 : 0)} ${units[unit]}`;\n }\n\n /**\n * Revoke preview object-URLs for items that leave the two-way `files` model\n * externally (e.g. a consumer resetting the list), not just via `remove()`.\n */\n private readonly trackedPreviews = new Map<string, string>();\n private readonly trackPreviews = effect(() => {\n const current = this.files();\n const liveIds = new Set(current.map((i) => i.id));\n for (const [id, url] of this.trackedPreviews) {\n if (!liveIds.has(id)) {\n if (this.isBrowser) this.document.defaultView?.URL.revokeObjectURL(url);\n this.trackedPreviews.delete(id);\n }\n }\n for (const item of current) {\n if (item.previewUrl) this.trackedPreviews.set(item.id, item.previewUrl);\n }\n });\n\n ngOnDestroy(): void {\n if (this.isBrowser) {\n for (const url of this.trackedPreviews.values()) {\n this.document.defaultView?.URL.revokeObjectURL(url);\n }\n this.trackedPreviews.clear();\n }\n }\n\n /** Marks the control touched once focus leaves the dropzone and its list. */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor ---------------------------------------------------\n\n /** The value published to a bound form control, in the requested shape. */\n private readonly formValue = computed<File[] | MkUploadFile[]>(() =>\n this.valueFormat() === 'item'\n ? this.files()\n : this.files().map((i) => i.file),\n );\n\n /**\n * Last value handed to `onChange`, for change detection against `formValue`.\n * `null` suppresses the next emission — used for the initial render and for\n * every `writeValue`, so writing from the model side never dirties the\n * control or loops back.\n */\n private lastEmitted: readonly unknown[] | null = null;\n\n private readonly emitOnChange = effect(() => {\n const value = this.formValue();\n const previous = this.lastEmitted;\n this.lastEmitted = value;\n if (previous === null) return;\n // Upload progress replaces item objects without changing the file set, so\n // in `file` format those ticks compare equal and stay off the form value.\n const same =\n previous.length === value.length &&\n previous.every((entry, i) => entry === value[i]);\n if (!same) this.onChange(value);\n });\n\n writeValue(value: unknown): void {\n this.lastEmitted = null;\n const list = Array.isArray(value) ? value : [];\n this.files.set(\n list\n .map((entry) => this.adopt(entry))\n .filter((item): item is MkUploadFile => item !== null),\n );\n }\n registerOnChange(fn: (value: File[] | MkUploadFile[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n /** Accepts either shape of written value; drops anything unrecognisable. */\n private adopt(entry: unknown): MkUploadFile | null {\n if (entry instanceof File) return this.toItem(entry);\n const item = entry as MkUploadFile | null;\n return item?.file instanceof File ? item : null;\n }\n\n // --- Validator --------------------------------------------------------------\n\n private readonly validatorChange = mkValidatorChange(() => {\n this.accept();\n this.maxSize();\n this.maxFiles();\n });\n\n /**\n * Applies the same `accept` / `maxSize` / `maxFiles` rules the dropzone\n * enforces at pick time, so a list written in from the model side — which\n * never goes through that path — is checked too. An empty list passes;\n * compose with `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (!Array.isArray(value) || !value.length) return null;\n const files = value\n .map((entry) => (entry instanceof File ? entry : (entry?.file as File)))\n .filter((f): f is File => f instanceof File);\n\n const max = this.maxFiles();\n if (max > 0 && files.length > max) {\n return { mkMaxItems: { max, actual: files.length } };\n }\n\n const maxSize = this.maxSize();\n if (maxSize > 0) {\n const tooBig = files.find((f) => f.size > maxSize);\n if (tooBig) {\n return {\n mkFileSize: {\n max: maxSize,\n maxLabel: this.formatBytes(maxSize),\n name: tooBig.name,\n },\n };\n }\n }\n\n const wrongType = files.find((f) => !this.matchesAccept(f));\n if (wrongType) {\n return { mkFileType: { accept: this.accept(), name: wrongType.name } };\n }\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div\n class=\"mk-file-upload__dropzone\"\n role=\"button\"\n [attr.tabindex]=\"isDisabled() ? null : 0\"\n [attr.aria-label]=\"label()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (click)=\"openPicker()\"\n (keydown)=\"onKeydown($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <span class=\"mk-file-upload__icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"28\" height=\"28\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M12 15V3M8 7l4-4 4 4\" />\n <path d=\"M4 15v4a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-4\" />\n </svg>\n </span>\n <span class=\"mk-file-upload__prompt\">{{ label() }}</span>\n @if (hint()) {\n <span class=\"mk-file-upload__hint\">{{ hint() }}</span>\n }\n\n</div>\n\n<input\n #fileInput\n type=\"file\"\n class=\"mk-file-upload__input\"\n [id]=\"inputId\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"isDisabled()\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (change)=\"onInputChange($event)\"\n/>\n\n<div class=\"mk-file-upload__sr\" role=\"status\" aria-live=\"polite\">\n {{ announcement() }}\n</div>\n\n@if (!hideList() && files().length) {\n <ul class=\"mk-file-upload__list\">\n @for (item of files(); track item.id) {\n <li\n class=\"mk-file-upload__item\"\n [class.mk-file-upload__item--error]=\"item.status === 'error'\"\n [class.mk-file-upload__item--success]=\"item.status === 'success'\"\n >\n <span class=\"mk-file-upload__thumb\" aria-hidden=\"true\">\n @if (item.previewUrl) {\n <img [src]=\"item.previewUrl\" [alt]=\"item.name\" />\n } @else {\n <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n </svg>\n }\n </span>\n\n <span class=\"mk-file-upload__meta\">\n <span class=\"mk-file-upload__name\">{{ item.name }}</span>\n <span class=\"mk-file-upload__size\">\n @if (item.status === 'error') {\n {{ item.error }}\n } @else {\n {{ formatBytes(item.size) }}\n @if (item.status === 'uploading') {\n · {{ item.progress }}%\n }\n }\n </span>\n @if (item.status === 'uploading') {\n <span\n class=\"mk-file-upload__progress\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"item.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <span class=\"mk-file-upload__bar\" [style.width.%]=\"item.progress\"></span>\n </span>\n }\n </span>\n\n <span class=\"mk-file-upload__status\">\n @if (item.status === 'success') {\n <span class=\"mk-file-upload__check\" aria-hidden=\"true\"></span>\n } @else if (item.status === 'error') {\n <button\n type=\"button\"\n class=\"mk-file-upload__retry\"\n [attr.aria-label]=\"i18n.retryUpload\"\n (click)=\"retry(item)\"\n >\n <span aria-hidden=\"true\">↻</span>\n </button>\n }\n </span>\n\n <button\n type=\"button\"\n class=\"mk-file-upload__remove\"\n [attr.aria-label]=\"i18n.removeItem(item.name)\"\n (click)=\"remove(item)\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { mkHighlight, type MkCodeLanguage } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\n\nexport type { MkCodeLanguage } from '@mk-kit/ui/core';\n\n/** The validity of the editor's current content. */\nexport interface MkCodeValidity {\n valid: boolean;\n /** Parser error message, or `null` when valid / not validated. */\n error: string | null;\n}\n\n/**\n * How long (ms) after the last keystroke the expensive derivations (highlight\n * re-render, JSON validation) wait before recomputing. The textarea text itself\n * is always live — only the overlay/validation lag, invisibly, while typing.\n */\nconst MK_CODE_EDITOR_DEBOUNCE_MS = 180;\n\n/**\n * CodeEditor — a lightweight, dependency-free code field with syntax\n * highlighting, JSON validation and pretty-printing. A `<textarea>` provides\n * editing and a synced highlight layer sits behind it, so it stays fully\n * accessible (real textarea semantics, `aria-invalid`, form-field wiring)\n * without pulling in a heavyweight editor.\n *\n * With `language=\"json\"` it validates on every change (exposing an inline error\n * + `(validate)` output) and offers `format()` to pretty-print. Ideal for a CMS\n * `json` field or plugin/settings JSONB editing.\n *\n * Keyboard: Tab inserts `tabSize` spaces; press Escape then Tab to move focus\n * out (so it is never a keyboard trap). Implements `ControlValueAccessor` over a\n * string value with a two-way `value` model.\n *\n * ```html\n * <mk-code-editor #editor language=\"json\" [(value)]=\"config\" [rows]=\"10\" />\n * <button mkButton (click)=\"editor.format()\">Format</button>\n * ```\n */\n@Component({\n selector: 'mk-code-editor',\n exportAs: 'mkCodeEditor',\n templateUrl: './code-editor.html',\n styleUrl: './code-editor.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-code-editor',\n '[class.mk-code-editor--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-code-editor--md]': \"effectiveSize() === 'md'\",\n '[class.mk-code-editor--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-code-editor--invalid]': 'isInvalid()',\n '[class.mk-code-editor--disabled]': 'isDisabled()',\n '[class.mk-code-editor--wrap]': 'wrap()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkCodeEditor),\n multi: true,\n },\n ],\n})\nexport class MkCodeEditor implements ControlValueAccessor, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n private readonly textareaRef =\n viewChild<ElementRef<HTMLTextAreaElement>>('textarea');\n private readonly highlightRef = viewChild<ElementRef<HTMLElement>>('highlight');\n private readonly gutterRef = viewChild<ElementRef<HTMLElement>>('gutter');\n\n /** Language for highlighting + validation. */\n readonly language = input<MkCodeLanguage>('plaintext');\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('');\n /** Render read-only (still focusable/selectable). */\n readonly readOnly = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Visible rows (minimum height). */\n readonly rows = input(8, { transform: numberAttribute });\n /** Show a line-number gutter. */\n readonly lineNumbers = input(true, { transform: booleanAttribute });\n /** Number of spaces inserted by Tab. */\n readonly tabSize = input(2, { transform: numberAttribute });\n /** Soft-wrap long lines instead of scrolling horizontally. */\n readonly wrap = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Accessible label when used standalone (no form field). */\n readonly ariaLabel = input<string>('');\n\n /** Two-way editor content. */\n readonly value = model<string>('');\n\n /** Emits the content validity whenever it changes (JSON only). */\n readonly validate = output<MkCodeValidity>();\n\n private readonly cvaDisabled = signal(false);\n /**\n * Debounced mirror of `value` that the expensive derivations (highlight,\n * JSON validation) read. Typing schedules a trailing update; programmatic\n * writes (`writeValue`, `format()`, `[(value)]` at rest) flush synchronously\n * so the overlay never lags when the user is not typing.\n */\n private readonly debouncedValue = signal('');\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n /** Set true by Escape so the next Tab moves focus instead of indenting. */\n private escapeArmed = false;\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly editorId = this.field?.controlId ?? mkUniqueId('mk-code-editor');\n readonly errorId = `${this.editorId}-json-error`;\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Parse error for JSON content, or `null` when valid / empty / plaintext. */\n protected readonly jsonError = computed<string | null>(() => {\n if (this.language() !== 'json') return null;\n const text = this.debouncedValue().trim();\n if (!text) return null;\n try {\n JSON.parse(text);\n return null;\n } catch (err) {\n return err instanceof Error ? err.message : 'Invalid JSON';\n }\n });\n\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false) || !!this.jsonError(),\n );\n\n /** `aria-describedby` merging the field's ids with the JSON error id. */\n protected readonly ariaDescribedBy = computed(() => {\n const ids: string[] = [];\n const fieldIds = this.describedBy();\n if (fieldIds) ids.push(fieldIds);\n if (this.jsonError()) ids.push(this.errorId);\n return ids.length ? ids.join(' ') : null;\n });\n\n /**\n * Highlighted HTML for the layer behind the textarea. Reads the debounced\n * value: while typing the (transparent-text) textarea sits above the overlay,\n * so a briefly stale highlight is invisible; at rest both are identical.\n */\n protected readonly highlightedHtml = computed(() =>\n mkHighlight(this.debouncedValue(), this.language()),\n );\n\n /** Cache so `lines()` returns the same array while the count is unchanged. */\n private cachedLines: number[] = [1];\n\n /**\n * Line numbers to render in the gutter. Counts newlines in the LIVE value\n * (cheap single scan, no `split()` allocation) so the gutter never lags the\n * textarea, and returns a cached array while the count is unchanged so the\n * `@for` never re-diffs on same-line edits.\n */\n protected readonly lines = computed(() => {\n const text = this.value();\n let count = 1;\n for (let i = text.indexOf('\\n'); i !== -1; i = text.indexOf('\\n', i + 1)) {\n count++;\n }\n if (count !== this.cachedLines.length) {\n this.cachedLines = Array.from({ length: count }, (_, i) => i + 1);\n }\n return this.cachedLines;\n });\n\n constructor() {\n // Keep the debounced mirror in sync for value changes that do not come\n // from typing (e.g. the `[(value)]` binding written by the parent). Typing\n // schedules its own trailing timer in `onInput`, so while one is pending\n // the timer callback is left to settle on the latest value.\n effect(() => {\n const text = this.value();\n if (this.debounceTimer === null) {\n untracked(() => this.debouncedValue.set(text));\n }\n });\n\n // Surface validity changes for JSON.\n effect(() => {\n const error = this.jsonError();\n // Read language so plaintext still resets validity once.\n this.language();\n this.validate.emit({ valid: !error, error });\n });\n }\n\n ngOnDestroy(): void {\n if (this.debounceTimer !== null) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n }\n\n /** Trailing-edge debounce for the expensive derivations while typing. */\n private scheduleDerivations(): void {\n if (this.debounceTimer !== null) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => {\n this.debounceTimer = null;\n this.debouncedValue.set(this.value());\n }, MK_CODE_EDITOR_DEBOUNCE_MS);\n }\n\n /** Cancels any pending debounce and syncs the derivations immediately. */\n private flushDerivations(): void {\n if (this.debounceTimer !== null) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n this.debouncedValue.set(this.value());\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLTextAreaElement).value;\n this.value.set(text);\n this.onChange(text);\n this.scheduleDerivations();\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n /** Keep the highlight layer + gutter aligned with the textarea scroll. */\n protected onScroll(event: Event): void {\n const ta = event.target as HTMLTextAreaElement;\n const hl = this.highlightRef()?.nativeElement;\n if (hl) {\n hl.scrollTop = ta.scrollTop;\n hl.scrollLeft = ta.scrollLeft;\n }\n const gutter = this.gutterRef()?.nativeElement;\n if (gutter) gutter.scrollTop = ta.scrollTop;\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n // Arm the keyboard-trap escape hatch (do not swallow the event).\n this.escapeArmed = true;\n return;\n }\n if (event.key === 'Tab') {\n if (this.escapeArmed) {\n // Let focus move out of the editor.\n this.escapeArmed = false;\n return;\n }\n if (this.readOnly() || this.isDisabled()) return;\n event.preventDefault();\n this.insertText(' '.repeat(Math.max(1, this.tabSize())));\n return;\n }\n this.escapeArmed = false;\n }\n\n /** Insert text at the caret, preserving undo history where supported. */\n private insertText(text: string): void {\n const ta = this.textareaRef()?.nativeElement;\n if (!ta) return;\n // execCommand keeps the caret + native undo stack and fires `input`.\n ta.focus();\n const inserted =\n typeof document.execCommand === 'function' &&\n document.execCommand('insertText', false, text);\n if (!inserted) {\n const start = ta.selectionStart;\n const end = ta.selectionEnd;\n const next = ta.value.slice(0, start) + text + ta.value.slice(end);\n ta.value = next;\n ta.selectionStart = ta.selectionEnd = start + text.length;\n this.value.set(next);\n this.onChange(next);\n this.scheduleDerivations();\n }\n }\n\n // --- Public API (via exportAs) --------------------------------------------\n\n /** The parsed JSON value, or `undefined` when empty / invalid / plaintext. */\n parsed(): unknown {\n if (this.language() !== 'json') return undefined;\n const text = this.value().trim();\n if (!text) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n }\n\n /** Pretty-print valid JSON with `tabSize` indentation. No-op otherwise. */\n format(): void {\n if (this.language() !== 'json') return;\n const text = this.value().trim();\n if (!text) return;\n try {\n const formatted = JSON.stringify(JSON.parse(text), null, this.tabSize());\n if (formatted !== this.value()) {\n this.value.set(formatted);\n this.onChange(formatted);\n this.flushDerivations();\n }\n } catch {\n // Leave invalid JSON untouched.\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n // Programmatic writes must never show a stale overlay / validation.\n this.flushDerivations();\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div class=\"mk-code-editor__frame\">\n @if (lineNumbers()) {\n <div #gutter class=\"mk-code-editor__gutter\" aria-hidden=\"true\">\n @for (n of lines(); track n) {\n <span class=\"mk-code-editor__lineno\">{{ n }}</span>\n }\n </div>\n }\n\n <div class=\"mk-code-editor__scroll\">\n <pre #highlight class=\"mk-code-editor__highlight\" aria-hidden=\"true\"><code [innerHTML]=\"highlightedHtml()\"></code></pre>\n\n <textarea\n #textarea\n class=\"mk-code-editor__textarea\"\n [id]=\"editorId\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [readOnly]=\"readOnly()\"\n [disabled]=\"isDisabled()\"\n [rows]=\"rows()\"\n [attr.wrap]=\"wrap() ? 'soft' : 'off'\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n [attr.aria-label]=\"labelledBy() ? null : ariaLabel() || 'Code editor'\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (scroll)=\"onScroll($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n ></textarea>\n </div>\n</div>\n\n@if (jsonError(); as error) {\n <p class=\"mk-code-editor__error\" [id]=\"errorId\" role=\"alert\">{{ error }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\n\n/**\n * Rating — a star rating input (and read-only display). Implements the ARIA\n * slider pattern: one focusable control, Arrow keys adjust, Home/End jump.\n * Click or hover a star to set the value. `ControlValueAccessor` + two-way\n * `value` model over a number.\n *\n * ```html\n * <mk-rating [(value)]=\"score\" [max]=\"5\" />\n * <mk-rating [value]=\"4\" readonly />\n * ```\n */\n@Component({\n selector: 'mk-rating',\n templateUrl: './rating.html',\n styleUrl: './rating.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-rating',\n '[class.mk-rating--sm]': \"size() === 'sm'\",\n '[class.mk-rating--lg]': \"size() === 'lg'\",\n '[class.mk-rating--readonly]': 'readonly() || isDisabled()',\n '[attr.role]': \"readonly() || isDisabled() ? 'img' : 'slider'\",\n '[attr.tabindex]': 'readonly() || isDisabled() ? null : 0',\n '[attr.aria-label]': 'effectiveAriaLabel()',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-valuemin]': \"readonly() || isDisabled() ? null : 0\",\n '[attr.aria-valuemax]': \"readonly() || isDisabled() ? null : max()\",\n '[attr.aria-valuenow]': \"readonly() || isDisabled() ? null : value()\",\n '[attr.aria-valuetext]': 'valueText()',\n '[attr.aria-readonly]': 'readonly() || null',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[class.mk-rating--invalid]': 'isInvalid()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '(keydown)': 'onKeydown($event)',\n '(mouseleave)': 'hover.set(-1)',\n '(blur)': 'onBlur()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkRating),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkRating),\n multi: true,\n },\n ],\n})\nexport class MkRating implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n\n /** Number of stars. */\n readonly max = input(5, { transform: numberAttribute });\n /** Two-way rating value (0–max). */\n readonly value = model(0);\n /** Read-only display (no interaction). */\n readonly readonly = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Size scale. */\n readonly size = input<MkSize>('md');\n /** Accessible label. */\n readonly ariaLabel = input(this.i18n.ratingLabel);\n\n protected readonly hover = signal(-1);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n /** The surrounding field's label labels this control (`aria-labelledby`). */\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n /** Hint/error ids from the surrounding field (`aria-describedby`). */\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n /**\n * The `aria-label` actually rendered. When an `mk-form-field` provides a\n * label, `aria-labelledby` wins and the default label is dropped so it\n * cannot override the field's visible label.\n */\n protected readonly effectiveAriaLabel = computed(() =>\n this.labelledBy() ? null : this.ariaLabel(),\n );\n\n /** The stars to render (1-based indices). */\n protected readonly stars = computed(() =>\n Array.from({ length: this.max() }, (_, i) => i + 1),\n );\n\n /** The value shown right now (hover preview wins). */\n protected readonly displayValue = computed(() =>\n this.hover() >= 0 ? this.hover() : this.value(),\n );\n\n protected readonly valueText = computed(\n () => this.i18n.ratingValueText(this.value(), this.max()),\n );\n\n protected setValue(v: number): void {\n if (this.readonly() || this.isDisabled()) return;\n // Clicking the only-filled star clears back to zero.\n const next = v === this.value() ? v - 1 : v;\n this.value.set(next);\n this.onChange(next);\n }\n\n protected onStarEnter(v: number): void {\n if (this.readonly() || this.isDisabled()) return;\n this.hover.set(v);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.readonly() || this.isDisabled()) return;\n let next = this.value();\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = Math.min(this.max(), next + 1);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = Math.max(0, next - 1);\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = this.max();\n break;\n default:\n return;\n }\n event.preventDefault();\n if (next !== this.value()) {\n this.value.set(next);\n this.onChange(next);\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: number | null): void {\n this.value.set(value ?? 0);\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.max();\n });\n\n /**\n * Reports `max` for a rating above `[max]`. Zero means \"unrated\" and is\n * left to `Validators.required` to reject.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'number' || !Number.isFinite(v) || v === 0) return null;\n if (v < 0) return { min: { min: 0, actual: v } };\n const max = this.max();\n if (v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@for (star of stars(); track star) {\n <button\n type=\"button\"\n class=\"mk-rating__star\"\n [class.mk-rating__star--filled]=\"star <= displayValue()\"\n [disabled]=\"readonly() || isDisabled()\"\n tabindex=\"-1\"\n [attr.aria-hidden]=\"true\"\n (click)=\"setValue(star)\"\n (mouseenter)=\"onStarEnter(star)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" aria-hidden=\"true\">\n <path\n d=\"M12 2.5l2.9 6 6.6.9-4.8 4.6 1.2 6.5L12 18.9 6.1 21l1.2-6.5L2.5 9.9l6.6-.9z\"\n />\n </svg>\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * NumberInput — a numeric field with −/+ stepper buttons, clamping and keyboard\n * stepping (Arrow keys / Page keys). Implements the ARIA `spinbutton` pattern\n * and `ControlValueAccessor` over `number | null`, with a two-way `value` model.\n *\n * ```html\n * <mk-number-input [(value)]=\"qty\" [min]=\"0\" [max]=\"99\" [step]=\"1\" />\n * ```\n */\n@Component({\n selector: 'mk-number-input',\n templateUrl: './number-input.html',\n styleUrl: './number-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-number-input',\n '[class.mk-number-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-number-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-number-input--invalid]': 'isInvalid()',\n '[class.mk-number-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkNumberInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkNumberInput),\n multi: true,\n },\n ],\n})\nexport class MkNumberInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Minimum value. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly min = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Maximum value. */\n readonly max = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Step increment for buttons + Arrow keys. */\n readonly step = input(1, { transform: numberAttribute });\n /** Two-way value. */\n readonly value = model<number | null>(null);\n /** Placeholder when empty. */\n readonly placeholder = input('');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly inputId = this.field?.controlId ?? mkUniqueId('mk-number');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Text mirror of the value for the input. */\n protected readonly display = computed(() => {\n const v = this.value();\n return v == null ? '' : String(v);\n });\n\n protected readonly canDecrement = computed(() => {\n if (this.isDisabled()) return false;\n const min = this.min();\n return min == null || (this.value() ?? min) > min;\n });\n protected readonly canIncrement = computed(() => {\n if (this.isDisabled()) return false;\n const max = this.max();\n return max == null || (this.value() ?? max) < max;\n });\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value.trim();\n if (text === '' || text === '-') {\n this.commit(null, false);\n return;\n }\n const parsed = Number(text);\n if (!Number.isNaN(parsed)) this.commit(parsed, false);\n }\n\n protected onBlur(): void {\n // Clamp to bounds on blur and normalise the displayed text.\n const v = this.value();\n if (v != null) this.commit(this.clamp(v), true);\n this.onTouched();\n }\n\n protected step_(delta: number): void {\n if (this.isDisabled()) return;\n const cur = this.value();\n // From empty, the first press lands on the minimum (or 0), not min ± step.\n const next =\n cur == null ? (this.min() ?? 0) : cur + delta * this.step();\n this.commit(this.clamp(next), true);\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.step_(1);\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.step_(-1);\n }\n }\n\n private clamp(v: number): number {\n const min = this.min();\n const max = this.max();\n if (min != null && v < min) return min;\n if (max != null && v > max) return max;\n return v;\n }\n\n private commit(v: number | null, syncInput: boolean): void {\n this.value.set(v);\n this.onChange(v);\n if (syncInput) {\n const input = this.inputRef()?.nativeElement;\n if (input) input.value = v == null ? '' : String(v);\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: number | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `min` / `max` against the `[min]` and `[max]` inputs, using the\n * same error shapes as `Validators.min` / `Validators.max`.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'number' || Number.isNaN(v)) return null;\n const min = this.min();\n if (min != null && v < min) return { min: { min, actual: v } };\n const max = this.max();\n if (max != null && v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<button\n type=\"button\"\n class=\"mk-number-input__btn mk-number-input__btn--dec\"\n [attr.aria-label]=\"i18n.decrease\"\n tabindex=\"-1\"\n [disabled]=\"!canDecrement()\"\n (click)=\"step_(-1)\"\n>\n <span aria-hidden=\"true\">−</span>\n</button>\n\n<input\n #input\n type=\"text\"\n inputmode=\"decimal\"\n class=\"mk-number-input__field\"\n [id]=\"inputId\"\n role=\"spinbutton\"\n [value]=\"display()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || null)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n/>\n\n<button\n type=\"button\"\n class=\"mk-number-input__btn mk-number-input__btn--inc\"\n [attr.aria-label]=\"i18n.increase\"\n tabindex=\"-1\"\n [disabled]=\"!canIncrement()\"\n (click)=\"step_(1)\"\n>\n <span aria-hidden=\"true\">+</span>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { MK_I18N, MkLiveAnnouncer, mkUniqueId, mkValidatorChange } from '@mk-kit/ui/core';\nimport { MkIcon } from '@mk-kit/ui/icon';\n\nexport type MkNumericKeypadMode = 'pin' | 'quantity' | 'amount';\n\n/** A key on the pad: a digit, or one of the three action keys. */\ntype PadKey = { id: string; label: string; action: 'digit' | 'clear' | 'decimal' | 'backspace' };\n\n/**\n * Numeric keypad — a touch-first 3×4 digit pad for PIN entry, quantity entry\n * and money amounts (POS-style). `ControlValueAccessor` + two-way `value`\n * model; the value is a **string** in `pin` mode (leading zeros preserved)\n * and a **number | null** in `quantity`/`amount` mode.\n *\n * - `pin`: masked echo row by default; `(submit)` fires automatically when\n * `length` digits are entered.\n * - `quantity`: integer entry; the bottom-left key clears.\n * - `amount`: decimal entry (value uses `.`; the echo shows\n * `decimalSeparator`); capped at `fractionDigits` fraction digits.\n *\n * A physical keyboard works anywhere inside the pad: digits, Backspace,\n * Delete (clear), Enter (submit) and the decimal separator. Arrow keys move\n * between the on-screen keys (roving tabindex).\n *\n * ```html\n * <mk-numeric-keypad mode=\"pin\" [length]=\"4\" (submit)=\"unlock($event)\" />\n * <mk-numeric-keypad mode=\"quantity\" [min]=\"1\" [(value)]=\"qty\" />\n * ```\n */\n@Component({\n selector: 'mk-numeric-keypad',\n templateUrl: './numeric-keypad.html',\n styleUrl: './numeric-keypad.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkIcon],\n host: {\n class: 'mk-numeric-keypad',\n role: 'group',\n '[attr.aria-label]': 'ariaLabel()',\n '[class.mk-numeric-keypad--disabled]': 'isDisabled()',\n '[class.mk-numeric-keypad--invalid]': 'invalid()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkNumericKeypad),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkNumericKeypad),\n multi: true,\n },\n ],\n})\nexport class MkNumericKeypad implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly announcer = inject(MkLiveAnnouncer);\n private readonly keyEls = viewChildren<ElementRef<HTMLButtonElement>>('key');\n\n /** Entry mode. Decides the value type and the bottom-left key. */\n readonly mode = input<MkNumericKeypadMode>('quantity');\n /** PIN length (`pin` mode only). Reaching it emits `submit`. */\n readonly length = input(4, { transform: numberAttribute });\n /** Lower bound reported through the validator (`quantity`/`amount`). */\n readonly min = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Upper bound reported through the validator (`quantity`/`amount`). */\n readonly max = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Mask the echo row in `pin` mode. Default `true`. */\n readonly mask = input(true, { transform: booleanAttribute });\n /** Show the echo row above the keys. Default `true`. */\n readonly showValue = input(true, { transform: booleanAttribute });\n /** Echo-row separator for `amount` mode. The VALUE always uses `.`. */\n readonly decimalSeparator = input(',');\n /** Max fraction digits accepted in `amount` mode. */\n readonly fractionDigits = input(2, { transform: numberAttribute });\n /** Disable the pad. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Accessible label for the pad. */\n readonly ariaLabel = input(this.i18n.numericKeypadLabel);\n /** Two-way value: `string` in `pin` mode, `number | null` otherwise. */\n readonly value = model<string | number | null>(null);\n\n /** Enter key / full PIN. Emits the current value. */\n readonly submit = output<string | number | null>();\n\n readonly padId = mkUniqueId('mk-numeric-keypad');\n\n /** Raw entry buffer ('' = empty; amount keeps a '.' while typing). */\n private readonly buffer = signal('');\n private readonly cvaDisabled = signal(false);\n /** Roving-tabindex position inside the flattened key list. */\n protected readonly focusIndex = signal(0);\n private onChange: (value: string | number | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly keys = computed<PadKey[]>(() => {\n const digit = (d: string): PadKey => ({ id: d, label: d, action: 'digit' });\n const corner: PadKey =\n this.mode() === 'amount'\n ? { id: 'decimal', label: this.decimalSeparator(), action: 'decimal' }\n : { id: 'clear', label: this.i18n.keypadClear, action: 'clear' };\n return [\n ...['1', '2', '3', '4', '5', '6', '7', '8', '9'].map(digit),\n corner,\n digit('0'),\n { id: 'backspace', label: this.i18n.keypadBackspace, action: 'backspace' },\n ];\n });\n\n /** Echo text: masked dots are rendered separately in `pin` mode. */\n protected readonly echoText = computed(() => {\n const raw = this.buffer();\n if (this.mode() === 'amount') {\n return raw ? raw.replace('.', this.decimalSeparator()) : '0';\n }\n return raw || '0';\n });\n protected readonly isPinMasked = computed(() => this.mode() === 'pin' && this.mask());\n protected readonly pinDots = computed(() =>\n Array.from({ length: this.length() }, (_, i) => i < this.buffer().length),\n );\n\n protected keyAriaLabel(key: PadKey): string | null {\n // Digits read themselves from their text content.\n return key.action === 'digit' ? null : key.label;\n }\n\n protected onKeyClick(key: PadKey): void {\n if (this.isDisabled()) return;\n switch (key.action) {\n case 'digit':\n this.pushDigit(key.id);\n break;\n case 'decimal':\n this.pushDecimal();\n break;\n case 'clear':\n this.commit('');\n break;\n case 'backspace':\n this.commit(this.buffer().slice(0, -1));\n break;\n }\n }\n\n /** Physical-keyboard entry + arrow-key roving over the on-screen keys. */\n protected onGridKeydown(event: KeyboardEvent): void {\n const key = event.key;\n if (/^[0-9]$/.test(key)) {\n event.preventDefault();\n if (!this.isDisabled()) this.pushDigit(key);\n } else if (key === '.' || key === ',' || key === this.decimalSeparator()) {\n event.preventDefault();\n if (!this.isDisabled()) this.pushDecimal();\n } else if (key === 'Backspace') {\n event.preventDefault();\n if (!this.isDisabled()) this.commit(this.buffer().slice(0, -1));\n } else if (key === 'Delete') {\n event.preventDefault();\n if (!this.isDisabled()) this.commit('');\n } else if (key === 'Enter') {\n event.preventDefault();\n this.submit.emit(this.value());\n } else if (key === 'ArrowRight') {\n event.preventDefault();\n this.focusKey(this.focusIndex() + 1);\n } else if (key === 'ArrowLeft') {\n event.preventDefault();\n this.focusKey(this.focusIndex() - 1);\n } else if (key === 'ArrowDown') {\n event.preventDefault();\n this.focusKey(this.focusIndex() + 3);\n } else if (key === 'ArrowUp') {\n event.preventDefault();\n this.focusKey(this.focusIndex() - 3);\n } else if (key === 'Home') {\n event.preventDefault();\n this.focusKey(0);\n } else if (key === 'End') {\n event.preventDefault();\n this.focusKey(this.keys().length - 1);\n }\n }\n\n protected onKeyFocus(index: number): void {\n this.focusIndex.set(index);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private focusKey(index: number): void {\n const clamped = Math.max(0, Math.min(this.keys().length - 1, index));\n this.focusIndex.set(clamped);\n this.keyEls()[clamped]?.nativeElement.focus();\n }\n\n private pushDigit(digit: string): void {\n const raw = this.buffer();\n if (this.mode() === 'pin') {\n if (raw.length >= this.length()) return;\n const next = raw + digit;\n this.commit(next);\n if (this.isPinMasked()) {\n this.announcer.announce(\n this.i18n.keypadDigitsEntered(next.length, this.length()),\n 'polite',\n );\n }\n if (next.length === this.length()) this.submit.emit(next);\n return;\n }\n const frac = raw.split('.')[1];\n if (frac !== undefined && frac.length >= this.fractionDigits()) return;\n // '0' → '05' would silently read as 5; replace the bare zero instead.\n this.commit(raw === '0' ? digit : raw + digit);\n }\n\n private pushDecimal(): void {\n if (this.mode() !== 'amount') return;\n const raw = this.buffer();\n if (raw.includes('.')) return;\n this.commit((raw || '0') + '.');\n }\n\n private commit(raw: string): void {\n this.buffer.set(raw);\n const value =\n this.mode() === 'pin'\n ? raw\n : raw === '' || raw === '.'\n ? null\n : Number(raw);\n this.value.set(value);\n this.onChange(value);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | number | null): void {\n const raw =\n value === null || value === undefined || value === ''\n ? ''\n : String(value);\n this.buffer.set(raw);\n this.value.set(this.mode() === 'pin' ? raw : raw === '' ? null : Number(raw));\n }\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.mode();\n this.length();\n this.min();\n this.max();\n });\n\n /**\n * `pin`: reports `minlength` while the code is incomplete (empty passes —\n * compose with `Validators.required`). `quantity`/`amount`: reports\n * `min`/`max` against the bounds.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (this.mode() === 'pin') {\n if (typeof v !== 'string' || !v) return null;\n const requiredLength = this.length();\n return v.length >= requiredLength\n ? null\n : { minlength: { requiredLength, actualLength: v.length } };\n }\n if (typeof v !== 'number' || Number.isNaN(v)) return null;\n const min = this.min();\n if (min !== null && v < min) return { min: { min, actual: v } };\n const max = this.max();\n if (max !== null && v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@if (showValue()) {\n <div class=\"mk-numeric-keypad__echo\">\n @if (isPinMasked()) {\n <span class=\"mk-numeric-keypad__dots\" aria-hidden=\"true\">\n @for (filled of pinDots(); track $index) {\n <span\n class=\"mk-numeric-keypad__dot\"\n [class.mk-numeric-keypad__dot--filled]=\"filled\"\n ></span>\n }\n </span>\n } @else {\n <span class=\"mk-numeric-keypad__readout\">{{ echoText() }}</span>\n }\n </div>\n}\n\n<div\n class=\"mk-numeric-keypad__grid\"\n (keydown)=\"onGridKeydown($event)\"\n (focusout)=\"onBlur()\"\n>\n @for (key of keys(); track key.id; let i = $index) {\n <button\n #key\n type=\"button\"\n class=\"mk-numeric-keypad__key\"\n [class.mk-numeric-keypad__key--action]=\"key.action !== 'digit'\"\n [id]=\"padId + '-' + key.id\"\n [tabindex]=\"focusIndex() === i ? 0 : -1\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"keyAriaLabel(key)\"\n (focus)=\"onKeyFocus(i)\"\n (click)=\"onKeyClick(key)\"\n >\n @switch (key.action) {\n @case ('backspace') {\n <mk-icon name=\"backspace\" />\n }\n @case ('clear') {\n <span class=\"mk-numeric-keypad__key-text\">C</span>\n }\n @default {\n {{ key.label }}\n }\n }\n </button>\n }\n</div>\n","/**\n * Layout data for {@link MkOnScreenKeyboard}.\n *\n * A layout is a set of rows per layer. String entries are literal character\n * keys (lowercase base form); object entries are action keys. Shifted\n * characters come from `shiftMap` when present, else `toUpperCase()` — which\n * handles Polish diacritics for free (`ą` → `Ą`).\n */\n\n/** Non-character keys. `span` stretches the key across extra grid columns. */\nexport interface MkKeyboardActionKey {\n readonly action: 'shift' | 'backspace' | 'space' | 'enter' | 'layer';\n readonly span?: number;\n}\n\nexport type MkKeyboardKey = string | MkKeyboardActionKey;\n\nexport interface MkKeyboardLayout {\n /** Letter layer. */\n readonly base: ReadonlyArray<ReadonlyArray<MkKeyboardKey>>;\n /** Alternate layer (digits live in the base top row; this holds diacritics + symbols). */\n readonly alt: ReadonlyArray<ReadonlyArray<MkKeyboardKey>>;\n /** Overrides for shifted characters; missing keys fall back to `toUpperCase()`. */\n readonly shiftMap?: Readonly<Record<string, string>>;\n}\n\nconst SHIFT: MkKeyboardActionKey = { action: 'shift' };\nconst BACKSPACE: MkKeyboardActionKey = { action: 'backspace' };\nconst LAYER: MkKeyboardActionKey = { action: 'layer' };\nconst SPACE: MkKeyboardActionKey = { action: 'space', span: 5 };\nconst ENTER: MkKeyboardActionKey = { action: 'enter', span: 2 };\n\n/**\n * QWERTY with a Polish alternate layer (programmer-Polish convention: base\n * letters are plain QWERTY, diacritics sit on the `?ąę` layer along with the\n * common symbols).\n */\nexport const MK_KEYBOARD_LAYOUT_QWERTY_PL: MkKeyboardLayout = {\n base: [\n ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],\n ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'],\n ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'],\n [SHIFT, 'z', 'x', 'c', 'v', 'b', 'n', 'm', BACKSPACE],\n [LAYER, ',', SPACE, '.', ENTER],\n ],\n alt: [\n ['ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż'],\n ['@', '#', '%', '&', '*', '(', ')', '-', '_'],\n ['+', '=', '/', ':', ';', '!', '?', \"'\", '\"'],\n [SHIFT, '€', '$', '~', '„', '”', '…', BACKSPACE],\n [LAYER, ',', SPACE, '.', ENTER],\n ],\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n PLATFORM_ID,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { MkPlacement } from '@mk-kit/ui/core';\nimport { MK_I18N, MkAnchoredPanel, mkUniqueId } from '@mk-kit/ui/core';\nimport { MkIcon } from '@mk-kit/ui/icon';\nimport {\n MK_KEYBOARD_LAYOUT_QWERTY_PL,\n type MkKeyboardActionKey,\n type MkKeyboardKey,\n type MkKeyboardLayout,\n} from './keyboard-layouts';\n\n/** A resolved key ready for the template. */\ninterface RenderKey {\n readonly char?: string;\n readonly action?: MkKeyboardActionKey['action'];\n readonly span: number;\n}\n\nexport type MkOnScreenKeyboardTarget = HTMLInputElement | HTMLTextAreaElement;\n\n/**\n * On-screen keyboard — a touch QWERTY panel for kiosk/till screens where no\n * physical keyboard exists. Anchored below its input in the browser top layer\n * (via {@link MkAnchoredPanel}), it writes caret-aware into the target's\n * native value and dispatches `input` events, so `ngModel`/reactive forms\n * stay in sync with no extra wiring.\n *\n * Pair it with the `mkOnScreenKeyboardFor` directive, which opens the panel\n * on focus and suppresses the OS keyboard (`inputmode=\"none\"`):\n *\n * ```html\n * <input mkInput [mkOnScreenKeyboardFor]=\"kbd\" />\n * <mk-on-screen-keyboard #kbd />\n * ```\n *\n * Layers: base (letters + digit row), shift (auto-resets after one\n * character) and an alternate layer (Polish diacritics + symbols in the\n * default {@link MK_KEYBOARD_LAYOUT_QWERTY_PL}); pass `layout` for other\n * languages. Enter inserts a newline in a `<textarea>` and emits `enter`\n * for single-line inputs. Keys are excluded from the tab order — physical\n * keyboards type into the input directly, the panel is a pointer surface.\n */\n@Component({\n selector: 'mk-on-screen-keyboard',\n exportAs: 'mkOnScreenKeyboard',\n templateUrl: './on-screen-keyboard.html',\n styleUrl: './on-screen-keyboard.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel, MkIcon],\n host: {\n class: 'mk-on-screen-keyboard',\n },\n})\nexport class MkOnScreenKeyboard {\n protected readonly i18n = inject(MK_I18N);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** Stable id for `aria-controls` on the trigger. */\n readonly panelId = mkUniqueId('mk-on-screen-keyboard');\n\n /** Key layout. Defaults to QWERTY with a Polish alternate layer. */\n readonly layout = input<MkKeyboardLayout>(MK_KEYBOARD_LAYOUT_QWERTY_PL);\n /** Preferred placement relative to the input. */\n readonly placement = input<MkPlacement>('bottom-start');\n\n /** Enter pressed on a single-line input (textareas insert a newline instead). */\n readonly enter = output<void>();\n /** Emitted whenever the keyboard closes (any reason). */\n readonly closed = output<void>();\n\n private readonly _open = signal(false);\n /** Whether the panel is open. */\n readonly opened = this._open.asReadonly();\n\n protected readonly anchorEl = signal<HTMLElement | undefined>(undefined);\n protected readonly shift = signal(false);\n protected readonly layer = signal<'base' | 'alt'>('base');\n private target: MkOnScreenKeyboardTarget | null = null;\n\n protected readonly rows = computed<RenderKey[][]>(() => {\n const layout = this.layout();\n const rows = this.layer() === 'alt' ? layout.alt : layout.base;\n const shift = this.shift();\n return rows.map((row) =>\n row.map((key) => this.resolve(key, shift, layout)),\n );\n });\n\n private resolve(\n key: MkKeyboardKey,\n shift: boolean,\n layout: MkKeyboardLayout,\n ): RenderKey {\n if (typeof key !== 'string') {\n return { action: key.action, span: key.span ?? 1 };\n }\n const char = shift ? (layout.shiftMap?.[key] ?? key.toUpperCase()) : key;\n return { char, span: 1 };\n }\n\n /** Open anchored to `anchor`, typing into `target`. */\n open(anchor: HTMLElement, target: MkOnScreenKeyboardTarget): void {\n if (!this.isBrowser) return;\n this.target = target;\n if (this._open()) return;\n this.anchorEl.set(anchor);\n this._open.set(true);\n }\n\n /** Close the panel. */\n close(): void {\n if (!this._open()) return;\n this._open.set(false);\n this.anchorEl.set(undefined);\n this.target = null;\n this.shift.set(false);\n this.layer.set('base');\n this.closed.emit();\n }\n\n /** Keys must never steal focus from the input. */\n protected onPanelPointerdown(event: Event): void {\n event.preventDefault();\n }\n\n protected onKeyClick(key: RenderKey): void {\n if (key.char !== undefined) {\n this.insert(key.char);\n if (this.shift()) this.shift.set(false);\n return;\n }\n switch (key.action) {\n case 'shift':\n this.shift.update((s) => !s);\n break;\n case 'layer':\n this.layer.update((l) => (l === 'base' ? 'alt' : 'base'));\n this.shift.set(false);\n break;\n case 'space':\n this.insert(' ');\n break;\n case 'backspace':\n this.deleteBack();\n break;\n case 'enter':\n if (this.target instanceof HTMLTextAreaElement) this.insert('\\n');\n else this.enter.emit();\n break;\n }\n }\n\n protected keyLabel(key: RenderKey): string {\n switch (key.action) {\n case 'shift':\n return this.i18n.keyboardShift;\n case 'backspace':\n return this.i18n.keypadBackspace;\n case 'space':\n return this.i18n.keyboardSpace;\n case 'enter':\n return this.i18n.keyboardEnter;\n case 'layer':\n return this.layer() === 'base'\n ? this.i18n.keyboardAltLayer\n : this.i18n.keyboardBaseLayer;\n default:\n return key.char ?? '';\n }\n }\n\n /** The visible face of the layer key: `?ąę` on base, `abc` on alt. */\n protected layerFace(): string {\n return this.layer() === 'base' ? '?ąę' : 'abc';\n }\n\n private insert(text: string): void {\n const el = this.target;\n if (!el) return;\n const start = el.selectionStart ?? el.value.length;\n const end = el.selectionEnd ?? start;\n el.setRangeText(text, start, end, 'end');\n this.notify(el);\n }\n\n private deleteBack(): void {\n const el = this.target;\n if (!el) return;\n const start = el.selectionStart ?? el.value.length;\n const end = el.selectionEnd ?? start;\n if (start === end) {\n if (start === 0) return;\n el.setRangeText('', start - 1, start, 'end');\n } else {\n el.setRangeText('', start, end, 'end');\n }\n this.notify(el);\n }\n\n private notify(el: MkOnScreenKeyboardTarget): void {\n el.dispatchEvent(new Event('input', { bubbles: true }));\n }\n}\n","@if (opened()) {\n <div\n #panel\n class=\"mk-on-screen-keyboard__panel\"\n role=\"group\"\n [id]=\"panelId\"\n [attr.aria-label]=\"i18n.onScreenKeyboardLabel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"anchorEl()\"\n [placement]=\"placement()\"\n [gap]=\"8\"\n [clamp]=\"true\"\n (dismiss)=\"close()\"\n (pointerdown)=\"onPanelPointerdown($event)\"\n >\n @for (row of rows(); track $index) {\n <div class=\"mk-on-screen-keyboard__row\">\n @for (key of row; track $index) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"mk-on-screen-keyboard__key\"\n [class.mk-on-screen-keyboard__key--action]=\"key.action !== undefined\"\n [class.mk-on-screen-keyboard__key--active]=\"\n (key.action === 'shift' && shift()) ||\n (key.action === 'layer' && layer() === 'alt')\n \"\n [style.--_span]=\"key.span\"\n [attr.aria-label]=\"key.action !== undefined ? keyLabel(key) : null\"\n [attr.aria-pressed]=\"\n key.action === 'shift'\n ? shift()\n : key.action === 'layer'\n ? layer() === 'alt'\n : null\n \"\n (click)=\"onKeyClick(key)\"\n >\n @switch (key.action) {\n @case ('shift') {\n <mk-icon name=\"arrow-up\" />\n }\n @case ('backspace') {\n <mk-icon name=\"backspace\" />\n }\n @case ('enter') {\n <mk-icon name=\"corner-down-left\" />\n }\n @case ('space') {\n <span class=\"mk-on-screen-keyboard__space-bar\"></span>\n }\n @case ('layer') {\n {{ layerFace() }}\n }\n @default {\n {{ key.char }}\n }\n }\n </button>\n }\n </div>\n }\n </div>\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport type { MkOnScreenKeyboardTarget } from './on-screen-keyboard';\nimport { MkOnScreenKeyboard } from './on-screen-keyboard';\n\n/**\n * Binds an `<input>`/`<textarea>` to an {@link MkOnScreenKeyboard}: opens the\n * panel on focus/click, closes it when focus leaves, and sets\n * `inputmode=\"none\"` so touch devices don't raise the OS keyboard on top of\n * it. Disabled/readonly fields never open the panel.\n *\n * ```html\n * <input mkInput [mkOnScreenKeyboardFor]=\"kbd\" />\n * <mk-on-screen-keyboard #kbd />\n * ```\n */\n@Directive({\n selector: 'input[mkOnScreenKeyboardFor], textarea[mkOnScreenKeyboardFor]',\n exportAs: 'mkOnScreenKeyboardTrigger',\n // No aria-expanded: a plain textbox doesn't permit it (axe aria-allowed-attr)\n // and promoting the role to combobox would misdescribe the field.\n host: {\n inputmode: 'none',\n '[attr.aria-controls]': 'keyboard().opened() ? keyboard().panelId : null',\n 'aria-haspopup': 'true',\n '(focus)': 'open()',\n '(click)': 'open()',\n '(blur)': 'onBlur()',\n '(keydown.escape)': 'keyboard().close()',\n },\n})\nexport class MkOnScreenKeyboardTrigger {\n private readonly host = inject<ElementRef<MkOnScreenKeyboardTarget>>(ElementRef);\n\n /** The keyboard instance to open for this field. */\n readonly keyboard = input.required<MkOnScreenKeyboard>({\n alias: 'mkOnScreenKeyboardFor',\n });\n\n protected open(): void {\n const el = this.host.nativeElement;\n if (el.disabled || el.readOnly) return;\n this.keyboard().open(el, el);\n }\n\n /**\n * Panel keys `preventDefault()` their pointerdown, so the input only blurs\n * when focus genuinely moves elsewhere — close then.\n */\n protected onBlur(): void {\n this.keyboard().close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n untracked,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * OTP — a segmented one-time-code input: N single-character boxes with automatic\n * focus advance, Backspace-to-previous, Arrow navigation and full-code paste.\n * `ControlValueAccessor` + two-way `value` model over the concatenated string.\n *\n * ```html\n * <mk-otp [(value)]=\"code\" [length]=\"6\" />\n * ```\n */\n@Component({\n selector: 'mk-otp',\n templateUrl: './otp.html',\n styleUrl: './otp.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-otp',\n role: 'group',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[class.mk-otp--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-otp--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-otp--invalid]': 'isInvalid()',\n '[class.mk-otp--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkOtp),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkOtp),\n multi: true,\n },\n ],\n})\nexport class MkOtp implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly cells =\n viewChildren<ElementRef<HTMLInputElement>>('cell');\n\n /** Number of character boxes. */\n readonly length = input(6, { transform: numberAttribute });\n /** Restrict input to digits (`number`) or allow any char (`text`). */\n readonly type = input<'number' | 'text'>('number');\n /** Mask entered characters (password style). */\n readonly mask = input(false, { transform: booleanAttribute });\n /** Two-way concatenated value. */\n readonly value = model('');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Accessible label for the group. */\n readonly ariaLabel = input(this.i18n.oneTimeCode);\n\n readonly cellId = mkUniqueId('mk-otp');\n private readonly chars = signal<string[]>([]);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly indexes = computed(() =>\n Array.from({ length: this.length() }, (_, i) => i),\n );\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n /** Required state from the surrounding field (`aria-required` on the cells). */\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n /** Hint/error ids from the surrounding field (`aria-describedby` on the cells). */\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly inputMode = computed(() =>\n this.type() === 'number' ? 'numeric' : 'text',\n );\n\n /**\n * Cell ids. The first cell adopts the surrounding field's `controlId` so the\n * field's `<label for>` resolves to a real element.\n */\n protected cellIdFor(i: number): string {\n if (i === 0 && this.field) return this.field.controlId;\n return `${this.cellId}-${i}`;\n }\n\n constructor() {\n // Keep the boxes in sync with external value / length changes.\n effect(() => {\n const v = this.value();\n const len = this.length();\n if (\n v !== untracked(this.chars).join('') ||\n untracked(this.chars).length !== len\n ) {\n this.chars.set(this.split(v, len));\n }\n });\n }\n\n protected charAt(i: number): string {\n return this.chars()[i] ?? '';\n }\n\n protected onCellInput(i: number, event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = this.sanitize(input.value);\n if (raw.length > 1) {\n this.fillFrom(i, raw);\n return;\n }\n const arr = [...this.chars()];\n arr[i] = raw;\n input.value = raw; // keep the box showing a single char\n this.commit(arr);\n if (raw) this.focusCell(i + 1);\n }\n\n protected onCellKeydown(i: number, event: KeyboardEvent): void {\n const key = event.key;\n if (key === 'Backspace') {\n if (!this.charAt(i)) {\n event.preventDefault();\n const arr = [...this.chars()];\n if (i > 0) arr[i - 1] = '';\n this.commit(arr);\n this.focusCell(i - 1);\n }\n } else if (key === 'ArrowLeft') {\n event.preventDefault();\n this.focusCell(i - 1);\n } else if (key === 'ArrowRight') {\n event.preventDefault();\n this.focusCell(i + 1);\n }\n }\n\n protected onPaste(i: number, event: ClipboardEvent): void {\n event.preventDefault();\n const text = this.sanitize(event.clipboardData?.getData('text') ?? '');\n if (text) this.fillFrom(i, text);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private fillFrom(start: number, text: string): void {\n const arr = [...this.chars()];\n let i = start;\n for (const ch of text) {\n if (i >= this.length()) break;\n arr[i++] = ch;\n }\n this.commit(arr);\n this.focusCell(Math.min(i, this.length() - 1));\n }\n\n private commit(arr: string[]): void {\n this.chars.set(arr);\n const value = arr.join('');\n this.value.set(value);\n this.onChange(value);\n }\n\n private focusCell(i: number): void {\n const cell = this.cells()[Math.max(0, Math.min(this.length() - 1, i))];\n cell?.nativeElement.focus();\n cell?.nativeElement.select();\n }\n\n private sanitize(text: string): string {\n const trimmed = text.trim();\n return this.type() === 'number' ? trimmed.replace(/\\D/g, '') : trimmed;\n }\n\n private split(v: string, len: number): string[] {\n const arr = new Array(len).fill('');\n for (let i = 0; i < Math.min(len, v.length); i++) arr[i] = v[i];\n return arr;\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n const v = value ?? '';\n this.value.set(v);\n // Seed the cells synchronously (don't wait for the sync effect).\n this.chars.set(this.split(v, this.length()));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.length();\n });\n\n /**\n * Reports `minlength` for a partially entered code. An empty value passes;\n * compose with `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'string' || !v) return null;\n const requiredLength = this.length();\n if (v.length >= requiredLength) return null;\n return { minlength: { requiredLength, actualLength: v.length } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@for (i of indexes(); track i) {\n <input\n #cell\n class=\"mk-otp__cell\"\n [id]=\"cellIdFor(i)\"\n [type]=\"mask() ? 'password' : 'text'\"\n [attr.inputmode]=\"inputMode()\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [value]=\"charAt(i)\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"i18n.otpDigit(i + 1)\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onCellInput(i, $event)\"\n (keydown)=\"onCellKeydown(i, $event)\"\n (paste)=\"onPaste(i, $event)\"\n (blur)=\"onBlur()\"\n />\n}\n","/**\n * Per-country dialing metadata for {@link MkPhoneInput}.\n *\n * `mask` is an `mkApplyMask`-style pattern for the **national** number\n * (`0` = digit, everything else is a literal). Masks follow the most common\n * national formatting; countries with several plan lengths use their longest\n * common mobile format. The set covers the countries an admin product is\n * likely to meet — extend or replace it via the `countries` input.\n */\nexport interface MkPhoneCountry {\n /** ISO 3166-1 alpha-2 code, uppercase (drives the flag + display name). */\n code: string;\n /** International dialing code, digits only (no `+`). */\n dialCode: string;\n /** Mask for the national number, `0` = digit. */\n mask: string;\n}\n\n/** The built-in country set (alphabetical by ISO code). */\nexport const MK_PHONE_COUNTRIES: readonly MkPhoneCountry[] = [\n { code: 'AE', dialCode: '971', mask: '00 000 0000' },\n { code: 'AR', dialCode: '54', mask: '00 0000-0000' },\n { code: 'AT', dialCode: '43', mask: '000 000000' },\n { code: 'AU', dialCode: '61', mask: '000 000 000' },\n { code: 'BE', dialCode: '32', mask: '000 00 00 00' },\n { code: 'BG', dialCode: '359', mask: '00 000 0000' },\n { code: 'BR', dialCode: '55', mask: '(00) 00000-0000' },\n { code: 'CA', dialCode: '1', mask: '(000) 000-0000' },\n { code: 'CH', dialCode: '41', mask: '00 000 00 00' },\n { code: 'CL', dialCode: '56', mask: '0 0000 0000' },\n { code: 'CN', dialCode: '86', mask: '000 0000 0000' },\n { code: 'CO', dialCode: '57', mask: '000 000 0000' },\n { code: 'CZ', dialCode: '420', mask: '000 000 000' },\n { code: 'DE', dialCode: '49', mask: '0000 0000000' },\n { code: 'DK', dialCode: '45', mask: '00 00 00 00' },\n { code: 'EE', dialCode: '372', mask: '0000 0000' },\n { code: 'EG', dialCode: '20', mask: '00 0000 0000' },\n { code: 'ES', dialCode: '34', mask: '000 000 000' },\n { code: 'FI', dialCode: '358', mask: '00 000 0000' },\n { code: 'FR', dialCode: '33', mask: '0 00 00 00 00' },\n { code: 'GB', dialCode: '44', mask: '0000 000000' },\n { code: 'GR', dialCode: '30', mask: '000 000 0000' },\n { code: 'HK', dialCode: '852', mask: '0000 0000' },\n { code: 'HR', dialCode: '385', mask: '00 000 0000' },\n { code: 'HU', dialCode: '36', mask: '00 000 0000' },\n { code: 'ID', dialCode: '62', mask: '000-0000-0000' },\n { code: 'IE', dialCode: '353', mask: '00 000 0000' },\n { code: 'IL', dialCode: '972', mask: '00-000-0000' },\n { code: 'IN', dialCode: '91', mask: '00000 00000' },\n { code: 'IT', dialCode: '39', mask: '000 000 0000' },\n { code: 'JP', dialCode: '81', mask: '00-0000-0000' },\n { code: 'KR', dialCode: '82', mask: '00-0000-0000' },\n { code: 'LT', dialCode: '370', mask: '000 00000' },\n { code: 'LU', dialCode: '352', mask: '000 000 000' },\n { code: 'LV', dialCode: '371', mask: '00 000 000' },\n { code: 'MX', dialCode: '52', mask: '00 0000 0000' },\n { code: 'MY', dialCode: '60', mask: '00-000 0000' },\n { code: 'NG', dialCode: '234', mask: '000 000 0000' },\n { code: 'NL', dialCode: '31', mask: '0 00000000' },\n { code: 'NO', dialCode: '47', mask: '000 00 000' },\n { code: 'NZ', dialCode: '64', mask: '00 000 0000' },\n { code: 'PH', dialCode: '63', mask: '000 000 0000' },\n { code: 'PK', dialCode: '92', mask: '000 0000000' },\n { code: 'PL', dialCode: '48', mask: '000 000 000' },\n { code: 'PT', dialCode: '351', mask: '000 000 000' },\n { code: 'RO', dialCode: '40', mask: '000 000 000' },\n { code: 'RS', dialCode: '381', mask: '00 000 0000' },\n { code: 'SA', dialCode: '966', mask: '00 000 0000' },\n { code: 'SE', dialCode: '46', mask: '00-000 00 00' },\n { code: 'SG', dialCode: '65', mask: '0000 0000' },\n { code: 'SI', dialCode: '386', mask: '00 000 000' },\n { code: 'SK', dialCode: '421', mask: '000 000 000' },\n { code: 'TH', dialCode: '66', mask: '00 000 0000' },\n { code: 'TR', dialCode: '90', mask: '000 000 0000' },\n { code: 'TW', dialCode: '886', mask: '000 000 000' },\n { code: 'UA', dialCode: '380', mask: '00 000 0000' },\n { code: 'US', dialCode: '1', mask: '(000) 000-0000' },\n { code: 'VN', dialCode: '84', mask: '000 000 0000' },\n { code: 'ZA', dialCode: '27', mask: '00 000 0000' },\n];\n\n/** Regional-indicator flag emoji for an ISO 3166-1 alpha-2 code. */\nexport function mkCountryFlag(code: string): string {\n if (!/^[A-Za-z]{2}$/.test(code)) return '';\n const A = 0x1f1e6;\n const upper = code.toUpperCase();\n return String.fromCodePoint(\n A + upper.charCodeAt(0) - 65,\n A + upper.charCodeAt(1) - 65,\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, MkAnchoredPanel, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkMask, mkApplyMask } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport {\n MK_PHONE_COUNTRIES,\n MkPhoneCountry,\n mkCountryFlag,\n} from './phone-countries';\n\n/** Structured value emitted by {@link MkPhoneInput} in `parts` mode. */\nexport interface MkPhoneValue {\n /** ISO 3166-1 alpha-2 country code, e.g. `PL`. */\n country: string;\n /** Dialing prefix with the leading `+`, e.g. `+48`. */\n dialCode: string;\n /** National number, digits only. */\n national: string;\n /** The full E.164 number, e.g. `+48601234567`. */\n e164: string;\n}\n\n/** A country row prepared for the dropdown list. */\ninterface CountryOption {\n country: MkPhoneCountry;\n name: string;\n flag: string;\n}\n\n/**\n * PhoneInput — an international telephone field: a searchable country-prefix\n * dropdown (flag + dial code) next to a national-number input that formats\n * itself with the selected country's mask as the user types.\n *\n * The form value is either a single E.164 string (`\"+48601234567\"`, default)\n * or a structured object (`valueFormat=\"parts\"`) carrying the country, dial\n * code and national number separately; both modes read back either shape and\n * `null` when empty. Pasting a full international number (`+44…`) into the\n * number field switches the country automatically.\n *\n * Implements `ControlValueAccessor` and exposes two-way `value` and `country`\n * models, so `[(ngModel)]`, reactive forms, `[(value)]` and `[(country)]` all\n * work.\n *\n * ```html\n * <mk-phone-input [(ngModel)]=\"phone\" country=\"PL\" />\n * <mk-phone-input valueFormat=\"parts\" [preferredCountries]=\"['PL','DE','CZ']\"\n * [(value)]=\"phoneParts\" />\n * ```\n */\n@Component({\n selector: 'mk-phone-input',\n templateUrl: './phone-input.html',\n styleUrl: './phone-input.scss',\n exportAs: 'mkPhoneInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel, MkMask],\n host: {\n class: 'mk-phone-input',\n '[class.mk-phone-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-phone-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-phone-input--invalid]': 'isInvalid()',\n '[class.mk-phone-input--disabled]': 'isDisabled()',\n '[class.mk-phone-input--open]': 'open()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkPhoneInput),\n multi: true,\n },\n ],\n})\nexport class MkPhoneInput implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly searchRef = viewChild<ElementRef<HTMLInputElement>>('search');\n private readonly nationalRef =\n viewChild<ElementRef<HTMLInputElement>>('national');\n\n /** The selectable country set (defaults to the built-in list). */\n readonly countries = input<readonly MkPhoneCountry[]>(MK_PHONE_COUNTRIES);\n /** ISO codes pinned, in order, to the top of the dropdown. */\n readonly preferredCountries = input<readonly string[]>([]);\n /** Shape of the form value: an E.164 string or a structured object. */\n readonly valueFormat = input<'e164' | 'parts'>('e164');\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder for the national-number field. */\n readonly placeholder = input<string>('');\n /** Two-way selected ISO country code. */\n readonly country = model<string>('US');\n /** Two-way form value (`string` in `e164` mode, {@link MkPhoneValue} in `parts`). */\n readonly value = model<string | MkPhoneValue | null>(null);\n\n protected readonly open = signal(false);\n protected readonly query = signal('');\n protected readonly activeIndex = signal(-1);\n private readonly nationalDigits = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string | MkPhoneValue | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** The last value this component itself wrote into the `value` model. */\n private lastDerived: string | MkPhoneValue | null = null;\n private lastCountry = '';\n\n readonly listId = mkUniqueId('mk-phone-list');\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-phone');\n readonly searchId = `${this.inputId}-search`;\n\n private readonly displayNames = (() => {\n try {\n return new Intl.DisplayNames(undefined, { type: 'region' });\n } catch {\n return null;\n }\n })();\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(\n () => this.field?.labelId ?? null,\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The currently selected country (falls back to the first in the set). */\n protected readonly selectedCountry = computed<MkPhoneCountry>(() => {\n const code = this.country().toUpperCase();\n const list = this.countries();\n return list.find((c) => c.code === code) ?? list[0];\n });\n protected readonly selectedFlag = computed(() =>\n mkCountryFlag(this.selectedCountry().code),\n );\n protected readonly selectedName = computed(() =>\n this.countryName(this.selectedCountry().code),\n );\n\n /** Masked national number shown in the field. */\n protected readonly nationalMasked = computed(\n () => mkApplyMask(this.nationalDigits(), this.selectedCountry().mask).masked,\n );\n\n /** Countries sorted preferred-first, then A→Z by localised name. */\n private readonly sortedCountries = computed<CountryOption[]>(() => {\n const preferred = this.preferredCountries().map((c) => c.toUpperCase());\n const rank = (code: string) => {\n const i = preferred.indexOf(code);\n return i === -1 ? preferred.length : i;\n };\n return this.countries()\n .map((country) => ({\n country,\n name: this.countryName(country.code),\n flag: mkCountryFlag(country.code),\n }))\n .sort(\n (a, b) =>\n rank(a.country.code) - rank(b.country.code) ||\n a.name.localeCompare(b.name),\n );\n });\n\n /** Dropdown rows matching the search query. */\n protected readonly filtered = computed<CountryOption[]>(() => {\n const q = this.query().trim().toLowerCase();\n const all = this.sortedCountries();\n if (!q) return all;\n const digits = q.replace(/^\\+/, '');\n return all.filter(\n (o) =>\n o.name.toLowerCase().includes(q) ||\n o.country.code.toLowerCase() === q ||\n (/^\\d+$/.test(digits) && o.country.dialCode.startsWith(digits)),\n );\n });\n\n constructor() {\n // Parse values assigned from outside ([(value)] writes we didn't derive).\n effect(() => {\n const v = this.value();\n if (v === this.lastDerived) return;\n untracked(() => {\n this.applyExternalValue(v);\n this.deriveValue(false);\n });\n });\n // Re-derive when the country is changed from outside ([country]=\"…\").\n effect(() => {\n const c = this.country();\n if (c === this.lastCountry) return;\n untracked(() => {\n this.lastCountry = c;\n this.deriveValue(false);\n });\n });\n }\n\n /** Localised display name for an ISO country code. */\n protected countryName(code: string): string {\n try {\n return this.displayNames?.of(code) ?? code;\n } catch {\n return code;\n }\n }\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n // --- National number field ------------------------------------------------\n\n protected onNationalChange(unmasked: string): void {\n this.nationalDigits.set(unmasked);\n this.deriveValue(true);\n }\n\n /** Pasting a full `+…` number switches country + fills the national part. */\n protected onNationalPaste(event: ClipboardEvent): void {\n const text = event.clipboardData?.getData('text') ?? '';\n if (!text.trim().startsWith('+')) return;\n event.preventDefault();\n this.applyE164(text);\n this.deriveValue(true);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n // --- Country dropdown -----------------------------------------------------\n\n /** Pending focus-the-search-box timeout; cleared on re-open and destroy. */\n private searchFocusTimer?: ReturnType<typeof setTimeout>;\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openList();\n }\n\n private openList(): void {\n this.open.set(true);\n this.query.set('');\n const list = this.filtered();\n const selected = list.findIndex(\n (o) => o.country.code === this.selectedCountry().code,\n );\n this.activeIndex.set(selected >= 0 ? selected : 0);\n // The panel renders on the next change-detection pass.\n clearTimeout(this.searchFocusTimer);\n this.searchFocusTimer = setTimeout(() =>\n this.searchRef()?.nativeElement.focus(),\n );\n }\n\n protected close(refocusTrigger = false): void {\n if (!this.open()) return;\n this.open.set(false);\n this.activeIndex.set(-1);\n this.onTouched();\n if (refocusTrigger) this.triggerRef()?.nativeElement.focus();\n }\n\n protected onTriggerKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(e.key) && !this.open()) {\n e.preventDefault();\n this.openList();\n }\n }\n\n protected onSearch(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n this.activeIndex.set(this.filtered().length ? 0 : -1);\n }\n\n protected onSearchKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n const count = this.filtered().length;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (count) this.activeIndex.set((this.activeIndex() + 1) % count);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (count)\n this.activeIndex.set((this.activeIndex() - 1 + count) % count);\n break;\n case 'Home':\n e.preventDefault();\n if (count) this.activeIndex.set(0);\n break;\n case 'End':\n e.preventDefault();\n if (count) this.activeIndex.set(count - 1);\n break;\n case 'Enter':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.selectCountry(this.activeIndex());\n break;\n case 'Escape':\n e.preventDefault();\n this.close(true);\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected selectCountry(index: number): void {\n const option = this.filtered()[index];\n if (!option) return;\n this.lastCountry = option.country.code;\n this.country.set(option.country.code);\n this.deriveValue(true);\n this.close();\n this.nationalRef()?.nativeElement.focus();\n }\n\n // --- Value plumbing -------------------------------------------------------\n\n /** Compute the outward value and push it to the model (+ form when `emit`). */\n private deriveValue(emit: boolean): void {\n const digits = this.nationalDigits();\n let next: string | MkPhoneValue | null = null;\n if (digits) {\n const c = this.selectedCountry();\n const e164 = `+${c.dialCode}${digits}`;\n next =\n this.valueFormat() === 'parts'\n ? {\n country: c.code,\n dialCode: `+${c.dialCode}`,\n national: digits,\n e164,\n }\n : e164;\n }\n if (this.sameValue(next, this.lastDerived) && this.value() === this.lastDerived) {\n return;\n }\n this.lastDerived = next;\n this.value.set(next);\n if (emit) this.onChange(next);\n }\n\n private sameValue(\n a: string | MkPhoneValue | null,\n b: string | MkPhoneValue | null,\n ): boolean {\n if (a === b) return true;\n if (!a || !b || typeof a === 'string' || typeof b === 'string') return false;\n return a.country === b.country && a.national === b.national;\n }\n\n /** Interpret an externally-assigned value (writeValue or `[value]`). */\n private applyExternalValue(v: string | MkPhoneValue | null): void {\n if (v == null || v === '') {\n this.nationalDigits.set('');\n return;\n }\n if (typeof v === 'string') {\n if (v.trim().startsWith('+')) this.applyE164(v);\n else this.nationalDigits.set(v.replace(/\\D/g, ''));\n return;\n }\n if (v.country) {\n this.lastCountry = v.country.toUpperCase();\n this.country.set(this.lastCountry);\n }\n this.nationalDigits.set((v.national ?? '').replace(/\\D/g, ''));\n }\n\n /** Split an E.164-ish string into a country + national digits. */\n private applyE164(text: string): void {\n const digits = text.replace(/\\D/g, '');\n if (!digits) {\n this.nationalDigits.set('');\n return;\n }\n const matches = this.countries().filter((c) =>\n digits.startsWith(c.dialCode),\n );\n if (matches.length) {\n const longest = Math.max(...matches.map((c) => c.dialCode.length));\n const best =\n matches.find(\n (c) =>\n c.dialCode.length === longest &&\n c.code === this.selectedCountry().code,\n ) ?? matches.find((c) => c.dialCode.length === longest)!;\n this.lastCountry = best.code;\n this.country.set(best.code);\n this.nationalDigits.set(digits.slice(best.dialCode.length));\n } else {\n this.nationalDigits.set(digits);\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | MkPhoneValue | null): void {\n this.applyExternalValue(value);\n this.deriveValue(false);\n }\n registerOnChange(fn: (value: string | MkPhoneValue | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.searchFocusTimer);\n this.searchFocusTimer = undefined;\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"mk-phone-input__country\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? listId : null\"\n [attr.aria-label]=\"i18n.chooseCountry\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span class=\"mk-phone-input__flag\" aria-hidden=\"true\">{{\n selectedFlag()\n }}</span>\n <span class=\"mk-phone-input__dial\">+{{ selectedCountry().dialCode }}</span>\n <span class=\"mk-visually-hidden\">{{ selectedName() }}</span>\n <span class=\"mk-phone-input__arrow\" aria-hidden=\"true\"></span>\n</button>\n\n<input\n #national\n type=\"tel\"\n class=\"mk-phone-input__field\"\n [id]=\"inputId\"\n autocomplete=\"tel-national\"\n [mkMask]=\"selectedCountry().mask\"\n mkMaskInputmode=\"tel\"\n [value]=\"nationalMasked()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.phoneNumber\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (unmaskedChange)=\"onNationalChange($event)\"\n (paste)=\"onNationalPaste($event)\"\n (blur)=\"onBlur()\"\n/>\n\n@if (open()) {\n <div\n class=\"mk-phone-input__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"trigger\"\n (dismiss)=\"close()\"\n >\n <input\n #search\n type=\"text\"\n class=\"mk-phone-input__search\"\n [id]=\"searchId\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"true\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [placeholder]=\"i18n.searchCountries\"\n [value]=\"query()\"\n (input)=\"onSearch($event)\"\n (keydown)=\"onSearchKeydown($event)\"\n />\n <ul\n class=\"mk-phone-input__list\"\n [id]=\"listId\"\n role=\"listbox\"\n [attr.aria-label]=\"i18n.chooseCountry\"\n >\n @for (opt of filtered(); track opt.country.code; let i = $index) {\n <li\n class=\"mk-phone-input__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"opt.country.code === selectedCountry().code\"\n [class.mk-phone-input__option--active]=\"i === activeIndex()\"\n [class.mk-phone-input__option--selected]=\"\n opt.country.code === selectedCountry().code\n \"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"activeIndex.set(i)\"\n (click)=\"selectCountry(i)\"\n >\n <span class=\"mk-phone-input__flag\" aria-hidden=\"true\">{{\n opt.flag\n }}</span>\n <span class=\"mk-phone-input__option-name\">{{ opt.name }}</span>\n <span class=\"mk-phone-input__option-dial\"\n >+{{ opt.country.dialCode }}</span\n >\n </li>\n } @empty {\n <li class=\"mk-phone-input__empty\" role=\"presentation\">\n {{ i18n.noResults }}\n </li>\n }\n </ul>\n </div>\n}\n","/**\n * Per-country postal-code formats for {@link MkPostalCodeInput}.\n *\n * `mask` is an `mkApplyMask`-style pattern (`0` = digit, `A` = letter,\n * `*` = alphanumeric, everything else a literal). `pattern` validates the\n * complete formatted value. Countries whose codes vary too much for a fixed\n * mask (e.g. GB) omit `mask` and rely on `pattern` + uppercasing alone.\n */\nexport interface MkPostalFormat {\n /** ISO 3166-1 alpha-2 code, uppercase. */\n code: string;\n /** Input mask; omitted for free-form (variable-length) codes. */\n mask?: string;\n /** Regex the complete formatted value must match to be valid. */\n pattern: RegExp;\n /** Example of a valid code, used as the default placeholder. */\n example: string;\n}\n\n/** The built-in postal formats (alphabetical by ISO code). */\nexport const MK_POSTAL_FORMATS: readonly MkPostalFormat[] = [\n { code: 'AT', mask: '0000', pattern: /^\\d{4}$/, example: '1010' },\n { code: 'AU', mask: '0000', pattern: /^\\d{4}$/, example: '2000' },\n { code: 'BE', mask: '0000', pattern: /^\\d{4}$/, example: '1000' },\n { code: 'BR', mask: '00000-000', pattern: /^\\d{5}-\\d{3}$/, example: '01310-100' },\n { code: 'CA', mask: 'A0A 0A0', pattern: /^[A-Z]\\d[A-Z] \\d[A-Z]\\d$/, example: 'K1A 0B1' },\n { code: 'CH', mask: '0000', pattern: /^\\d{4}$/, example: '8001' },\n { code: 'CZ', mask: '000 00', pattern: /^\\d{3} \\d{2}$/, example: '110 00' },\n { code: 'DE', mask: '00000', pattern: /^\\d{5}$/, example: '10115' },\n { code: 'DK', mask: '0000', pattern: /^\\d{4}$/, example: '1050' },\n { code: 'EE', mask: '00000', pattern: /^\\d{5}$/, example: '10111' },\n { code: 'ES', mask: '00000', pattern: /^\\d{5}$/, example: '28001' },\n { code: 'FI', mask: '00000', pattern: /^\\d{5}$/, example: '00100' },\n { code: 'FR', mask: '00000', pattern: /^\\d{5}$/, example: '75001' },\n {\n code: 'GB',\n pattern: /^[A-Z]{1,2}\\d[A-Z\\d]? \\d[A-Z]{2}$/,\n example: 'SW1A 1AA',\n },\n { code: 'GR', mask: '000 00', pattern: /^\\d{3} \\d{2}$/, example: '105 57' },\n { code: 'HR', mask: '00000', pattern: /^\\d{5}$/, example: '10000' },\n { code: 'HU', mask: '0000', pattern: /^\\d{4}$/, example: '1051' },\n {\n code: 'IE',\n mask: 'A00 ****',\n pattern: /^[A-Z]\\d{2} [A-Z\\d]{4}$/,\n example: 'D02 X285',\n },\n { code: 'IN', mask: '000000', pattern: /^\\d{6}$/, example: '110001' },\n { code: 'IT', mask: '00000', pattern: /^\\d{5}$/, example: '00184' },\n { code: 'JP', mask: '000-0000', pattern: /^\\d{3}-\\d{4}$/, example: '100-0001' },\n { code: 'LT', mask: '00000', pattern: /^\\d{5}$/, example: '01100' },\n { code: 'LU', mask: '0000', pattern: /^\\d{4}$/, example: '1111' },\n { code: 'LV', mask: '0000', pattern: /^\\d{4}$/, example: '1010' },\n { code: 'MX', mask: '00000', pattern: /^\\d{5}$/, example: '06000' },\n {\n code: 'NL',\n mask: '0000 AA',\n pattern: /^\\d{4} [A-Z]{2}$/,\n example: '1012 AB',\n },\n { code: 'NO', mask: '0000', pattern: /^\\d{4}$/, example: '0150' },\n { code: 'NZ', mask: '0000', pattern: /^\\d{4}$/, example: '6011' },\n { code: 'PL', mask: '00-000', pattern: /^\\d{2}-\\d{3}$/, example: '00-950' },\n {\n code: 'PT',\n mask: '0000-000',\n pattern: /^\\d{4}-\\d{3}$/,\n example: '1100-048',\n },\n { code: 'RO', mask: '000000', pattern: /^\\d{6}$/, example: '010011' },\n { code: 'SE', mask: '000 00', pattern: /^\\d{3} \\d{2}$/, example: '111 29' },\n { code: 'SI', mask: '0000', pattern: /^\\d{4}$/, example: '1000' },\n { code: 'SK', mask: '000 00', pattern: /^\\d{3} \\d{2}$/, example: '811 01' },\n {\n code: 'US',\n mask: '00000-0000',\n pattern: /^\\d{5}(-\\d{4})?$/,\n example: '90210',\n },\n];\n\n/** Look up the built-in format for an ISO country code (case-insensitive). */\nexport function mkPostalFormat(code: string): MkPostalFormat | undefined {\n const upper = code.toUpperCase();\n return MK_POSTAL_FORMATS.find((f) => f.code === upper);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n ValidatorFn,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { mkApplyMask, mkMaskCaret } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport {\n MK_POSTAL_FORMATS,\n MkPostalFormat,\n mkPostalFormat,\n} from './postal-formats';\n\n/**\n * Reactive-forms validator for a postal code in a given country. Empty values\n * pass (compose with `Validators.required`); countries without a built-in\n * format pass everything.\n *\n * ```ts\n * zip: ['', [Validators.required, mkPostalCodeValidator('PL')]]\n * ```\n */\nexport function mkPostalCodeValidator(\n country: string,\n formats: readonly MkPostalFormat[] = MK_POSTAL_FORMATS,\n): ValidatorFn {\n const upper = country.toUpperCase();\n const format = formats.find((f) => f.code === upper);\n return (control: AbstractControl): ValidationErrors | null => {\n const value = typeof control.value === 'string' ? control.value.trim() : '';\n if (!value || !format || format.pattern.test(value)) return null;\n return {\n postalCode: { country: upper, example: format.example },\n };\n };\n}\n\n/**\n * PostalCodeInput — a postal/ZIP code field that masks, uppercases and\n * validates itself for the given `country` (35+ built-in formats: `PL`\n * `00-000`, `US` `00000[-0000]`, `CA` `A0A 0A0`, `NL` `0000 AA`, …).\n * Free-format countries (e.g. `GB`) skip the mask and validate against the\n * national pattern instead, normalising the inward-code space on blur.\n *\n * The placeholder defaults to a valid example for the country. `valid()`\n * (via `exportAs`) reports `true`/`false` for a complete/incomplete code and\n * `null` when empty or the country is unknown; invalid styling engages after\n * the field is touched.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-postal-code-input country=\"PL\" [(ngModel)]=\"zip\" />\n * <mk-postal-code-input [country]=\"form.value.country\" [(value)]=\"zip\" />\n * ```\n */\n@Component({\n selector: 'mk-postal-code-input',\n templateUrl: './postal-code-input.html',\n styleUrl: './postal-code-input.scss',\n exportAs: 'mkPostalCodeInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-postal-code-input',\n '[class.mk-postal-code-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-postal-code-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-postal-code-input--invalid]': 'isInvalid()',\n '[class.mk-postal-code-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkPostalCodeInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkPostalCodeInput),\n multi: true,\n },\n ],\n})\nexport class MkPostalCodeInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** ISO 3166-1 alpha-2 country whose format applies. */\n readonly country = input<string>('US');\n /** The format table (defaults to the built-in set) — extend to add countries. */\n readonly formats = input<readonly MkPostalFormat[]>(MK_POSTAL_FORMATS);\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder; defaults to a valid example for the country. */\n readonly placeholder = input<string>('');\n /** Two-way formatted value (e.g. `00-950`, `K1A 0B1`). */\n readonly value = model<string>('');\n\n private readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-postal');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The active format, or `undefined` for unknown countries (free text). */\n protected readonly format = computed<MkPostalFormat | undefined>(() => {\n const code = this.country().toUpperCase();\n return this.formats().find((f) => f.code === code) ?? mkPostalFormat(code);\n });\n\n /**\n * `true`/`false` for a complete/incomplete code, `null` when empty or the\n * country has no known format.\n */\n readonly valid = computed<boolean | null>(() => {\n const v = this.value().trim();\n const fmt = this.format();\n if (!v || !fmt) return null;\n return fmt.pattern.test(v);\n });\n\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.touched() && this.valid() === false),\n );\n\n protected readonly effectivePlaceholder = computed(\n () => this.placeholder() || (this.format()?.example ?? ''),\n );\n\n /** Numeric keyboard for digit-only masks. */\n protected readonly inputMode = computed(() => {\n const mask = this.format()?.mask;\n return mask && !/[A*]/.test(mask) ? 'numeric' : 'text';\n });\n\n protected readonly maxLength = computed(() => {\n const fmt = this.format();\n if (fmt?.mask) return fmt.mask.length;\n return fmt ? fmt.example.length + 2 : 12;\n });\n\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const rawValue = el.value;\n const caret = el.selectionStart ?? rawValue.length;\n const upper = rawValue.toUpperCase();\n const mask = this.format()?.mask;\n\n let next = upper;\n if (mask) {\n next = mkApplyMask(upper, mask).masked;\n el.value = next;\n const pos = mkMaskCaret(rawValue, caret, next);\n el.setSelectionRange(pos, pos);\n } else if (next !== rawValue) {\n // Uppercasing preserves length, so the caret can stay where it was.\n el.value = next;\n el.setSelectionRange(caret, caret);\n }\n this.commit(next);\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n const fmt = this.format();\n const v = this.value();\n // Free-format codes (GB, …): insert the missing space before the final\n // 3-character inward part, so \"SW1A1AA\" normalises to \"SW1A 1AA\".\n if (fmt && !fmt.mask && v && !v.includes(' ') && v.length >= 5) {\n const spaced = `${v.slice(0, -3)} ${v.slice(-3)}`;\n if (fmt.pattern.test(spaced)) this.commit(spaced);\n }\n this.onTouched();\n }\n\n private commit(next: string): void {\n if (next === this.value()) return;\n this.value.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n const text = (value ?? '').toUpperCase();\n const mask = this.format()?.mask;\n this.value.set(mask ? mkApplyMask(text, mask).masked : text);\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.country();\n this.formats();\n });\n\n /**\n * Reports `postalCode` for a code not matching `[country]`'s format — the\n * same error `mkPostalCodeValidator()` produces. Empty values and countries\n * without a built-in format pass.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const raw = control.value;\n const v = typeof raw === 'string' ? raw.trim() : '';\n const format = this.format();\n if (!v || !format || format.pattern.test(v)) return null;\n return { postalCode: { country: format.code, example: format.example } };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<input\n type=\"text\"\n class=\"mk-postal-code-input__field\"\n [id]=\"inputId\"\n autocomplete=\"postal-code\"\n autocapitalize=\"characters\"\n spellcheck=\"false\"\n [attr.inputmode]=\"inputMode()\"\n [attr.maxlength]=\"maxLength()\"\n [value]=\"value()\"\n [placeholder]=\"effectivePlaceholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.postalCode\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { mkMaskCaret } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\n\n/** Locale-derived formatting facts used while editing. */\ninterface LocaleInfo {\n /** Grouping separator, e.g. `,` / ` ` / `.`. */\n group: string;\n /** Decimal separator, e.g. `.` / `,`. */\n decimal: string;\n /** Currency symbol text (empty in plain-decimal mode). */\n symbol: string;\n /** Whether the symbol renders before the number. */\n symbolPrefix: boolean;\n /** The currency's default fraction digits (2 for USD, 0 for JPY, …). */\n fractionDigits: number;\n}\n\n/**\n * CurrencyInput — a money/amount field that formats itself with\n * `Intl.NumberFormat`: thousands grouping live as the user types, the\n * currency symbol as a fixed prefix/suffix (per locale), fraction digits\n * padded to the currency's convention on blur (`1234,5` → `1 234,50 zł`).\n * The form value is always a plain `number` (or `null` when empty) — the\n * locale formatting never leaks into the data.\n *\n * `currency` takes an ISO 4217 code; omit it for a plain grouped decimal.\n * `locale` defaults to the runtime locale. `decimals` overrides the\n * currency's fraction digits; `min`/`max` clamp on blur.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-currency-input currency=\"PLN\" [(ngModel)]=\"price\" />\n * <mk-currency-input currency=\"USD\" [min]=\"0\" [(value)]=\"budget\" />\n * ```\n */\n@Component({\n selector: 'mk-currency-input',\n templateUrl: './currency-input.html',\n styleUrl: './currency-input.scss',\n exportAs: 'mkCurrencyInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-currency-input',\n '[class.mk-currency-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-currency-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-currency-input--invalid]': 'isInvalid()',\n '[class.mk-currency-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkCurrencyInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkCurrencyInput),\n multi: true,\n },\n ],\n})\nexport class MkCurrencyInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** ISO 4217 currency code (`PLN`, `USD`, …). Empty = plain decimal. */\n /** Accessible name when the control is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n readonly currency = input<string>('');\n /** BCP 47 locale for separators/symbol; defaults to the runtime locale. */\n readonly locale = input<string | undefined>(undefined);\n /** Max fraction digits; defaults to the currency's convention (else 2). */\n readonly decimals = input<number | null>(null);\n /** Clamp the value to at least this on blur. */\n readonly min = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Clamp the value to at most this on blur. */\n readonly max = input<number | null, number | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Allow a leading minus sign. */\n readonly allowNegative = input(true, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('');\n /** Two-way numeric value (`null` when empty). */\n readonly value = model<number | null>(null);\n\n /** The text currently shown in the field. */\n protected readonly display = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: number | null) => void = () => {};\n private onTouched: () => void = () => {};\n /** The last value this component itself pushed into the `value` model. */\n private lastEmitted: number | null = null;\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-currency');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Separators, symbol and fraction convention for the current setup. */\n protected readonly localeInfo = computed<LocaleInfo>(() => {\n const locale = this.locale();\n const currency = this.currency().toUpperCase();\n let group = ',';\n let decimal = '.';\n try {\n for (const part of new Intl.NumberFormat(locale).formatToParts(12345.6)) {\n if (part.type === 'group') group = part.value;\n if (part.type === 'decimal') decimal = part.value;\n }\n } catch {\n /* keep defaults */\n }\n let symbol = '';\n let symbolPrefix = true;\n let fractionDigits = 2;\n if (currency) {\n try {\n const fmt = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n });\n fractionDigits = fmt.resolvedOptions().maximumFractionDigits ?? 2;\n const parts = fmt.formatToParts(1);\n const idx = parts.findIndex((p) => p.type === 'currency');\n symbol = idx >= 0 ? parts[idx].value : currency;\n symbolPrefix =\n idx >= 0 ? !parts.slice(0, idx).some((p) => p.type === 'integer') : true;\n } catch {\n symbol = currency;\n }\n }\n return { group, decimal, symbol, symbolPrefix, fractionDigits };\n });\n\n /** Effective max fraction digits. */\n private readonly maxDecimals = computed(\n () => this.decimals() ?? this.localeInfo().fractionDigits,\n );\n\n constructor() {\n // Re-render when the value is assigned from outside ([(value)] writes we\n // didn't emit). Our own emits leave the display as typed.\n effect(() => {\n const v = this.value();\n untracked(() => {\n if (v === this.lastEmitted) return;\n this.lastEmitted = v;\n this.display.set(this.formatSettled(v));\n });\n });\n // Re-render when the locale/currency/decimals setup changes.\n effect(() => {\n this.localeInfo();\n this.maxDecimals();\n untracked(() => this.display.set(this.formatSettled(this.value())));\n });\n }\n\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const oldValue = el.value;\n const caret = el.selectionStart ?? oldValue.length;\n const canonical = this.parseCanonical(oldValue);\n const next = this.formatEditing(canonical);\n\n el.value = next;\n const pos = mkMaskCaret(oldValue, caret, next);\n el.setSelectionRange(pos, pos);\n this.display.set(next);\n\n const num = this.toNumber(canonical);\n if (num !== this.value()) {\n this.lastEmitted = num;\n this.value.set(num);\n this.onChange(num);\n }\n }\n\n protected onBlur(): void {\n let v = this.value();\n if (v != null) {\n const min = this.min();\n const max = this.max();\n if (min != null && v < min) v = min;\n if (max != null && v > max) v = max;\n const factor = 10 ** this.maxDecimals();\n v = Math.round(v * factor) / factor;\n if (v !== this.value()) {\n this.lastEmitted = v;\n this.value.set(v);\n this.onChange(v);\n }\n }\n this.display.set(this.formatSettled(v));\n this.onTouched();\n }\n\n /**\n * Reduce whatever is in the field to a canonical `-?digits(.digits)?`\n * string. Accepts the locale decimal separator plus `.`/`,` when they are\n * not the grouping separator; drops everything else.\n */\n private parseCanonical(text: string): string {\n const { group, decimal } = this.localeInfo();\n const negative =\n this.allowNegative() && text.trimStart().startsWith('-') ? '-' : '';\n const decimalChars = new Set([decimal]);\n for (const c of ['.', ',']) {\n if (c !== group) decimalChars.add(c);\n }\n let intPart = '';\n let fracPart: string | null = null;\n for (const ch of text) {\n if (/\\d/.test(ch)) {\n if (fracPart === null) intPart += ch;\n else if (fracPart.length < this.maxDecimals()) fracPart += ch;\n } else if (decimalChars.has(ch) && fracPart === null) {\n fracPart = '';\n }\n }\n if (this.maxDecimals() === 0) fracPart = null;\n return `${negative}${intPart}${fracPart !== null ? `.${fracPart}` : ''}`;\n }\n\n /** Canonical string → number (`null` for empty / lone `-`). */\n private toNumber(canonical: string): number | null {\n if (!/\\d/.test(canonical)) return null;\n return Number(canonical);\n }\n\n /** Grouped editing text preserving a partially-typed fraction (`1 234,5`). */\n private formatEditing(canonical: string): string {\n if (!canonical) return '';\n const { group, decimal } = this.localeInfo();\n const negative = canonical.startsWith('-');\n const [intPart, fracPart] = canonical.replace('-', '').split('.');\n const grouped = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, group);\n let out = `${negative ? '-' : ''}${grouped}`;\n if (fracPart !== undefined) out += `${decimal}${fracPart}`;\n return out;\n }\n\n /** Settled (blur / programmatic) text with padded fraction digits. */\n private formatSettled(v: number | null): string {\n if (v == null) return '';\n const digits = this.maxDecimals();\n try {\n return new Intl.NumberFormat(this.locale(), {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n }).format(v);\n } catch {\n return String(v);\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: number | null): void {\n const v = typeof value === 'number' && !Number.isNaN(value) ? value : null;\n this.lastEmitted = v;\n this.value.set(v);\n this.display.set(this.formatSettled(v));\n }\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `min` / `max` against the `[min]` and `[max]` inputs, using the\n * same error shapes as `Validators.min` / `Validators.max`.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'number' || Number.isNaN(v)) return null;\n const min = this.min();\n if (min != null && v < min) return { min: { min, actual: v } };\n const max = this.max();\n if (max != null && v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@if (localeInfo().symbol && localeInfo().symbolPrefix) {\n <span class=\"mk-currency-input__symbol\" aria-hidden=\"true\">{{\n localeInfo().symbol\n }}</span>\n}\n\n<input\n type=\"text\"\n class=\"mk-currency-input__field\"\n [id]=\"inputId\"\n inputmode=\"decimal\"\n autocomplete=\"transaction-amount\"\n spellcheck=\"false\"\n [value]=\"display()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : (ariaLabel() || i18n.amount)\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n\n@if (localeInfo().symbol && !localeInfo().symbolPrefix) {\n <span class=\"mk-currency-input__symbol\" aria-hidden=\"true\">{{\n localeInfo().symbol\n }}</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkMask, mkApplyMask } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport { detectCardBrand, isLuhn } from '@mk-kit/validators';\n\n/** Card networks {@link MkCardNumberInput} recognises. */\nexport type MkCardBrand =\n | 'visa'\n | 'mastercard'\n | 'amex'\n | 'discover'\n | 'diners'\n | 'jcb';\n\n/** Human-readable names for the recognised brands. */\nexport const MK_CARD_BRAND_NAMES: Record<MkCardBrand, string> = {\n visa: 'Visa',\n mastercard: 'Mastercard',\n amex: 'American Express',\n discover: 'Discover',\n diners: 'Diners Club',\n jcb: 'JCB',\n};\n\n/** Detect the card network from the leading digits — `detectCardBrand` from `@mk-kit/validators`. */\nexport function mkDetectCardBrand(digits: string): MkCardBrand | null {\n return detectCardBrand(digits);\n}\n\n/** Luhn (mod 10) checksum over a digit string — `isLuhn` from `@mk-kit/validators`. */\nexport function mkLuhnCheck(digits: string): boolean {\n return /^\\d+$/.test(digits) && isLuhn(digits);\n}\n\n/** Grouping masks per brand (digit counts differ). */\nconst BRAND_MASKS: Partial<Record<MkCardBrand, string>> = {\n amex: '0000 000000 00000',\n diners: '0000 000000 0000',\n};\nconst DEFAULT_MASK = '0000 0000 0000 0000';\n\n/**\n * CardNumberInput — a payment-card number field that groups digits with the\n * detected network's layout (16-digit `0000 0000 0000 0000`, Amex\n * `0000 000000 00000`, Diners `0000 000000 0000`), shows the brand as a\n * badge, and validates the complete number with the Luhn checksum.\n *\n * The form value is the raw digit string (no spaces). `brand()` exposes the\n * detected network (also via `(brandChange)`), and `valid()` reports\n * `true`/`false` for a complete number passing/failing Luhn and `null` while\n * empty or incomplete; invalid styling engages after the field was touched.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-card-number-input [(ngModel)]=\"cardNumber\" />\n * ```\n */\n@Component({\n selector: 'mk-card-number-input',\n templateUrl: './card-number-input.html',\n styleUrl: './card-number-input.scss',\n exportAs: 'mkCardNumberInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkMask],\n host: {\n class: 'mk-card-number-input',\n '[class.mk-card-number-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-card-number-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-card-number-input--invalid]': 'isInvalid()',\n '[class.mk-card-number-input--disabled]': 'isDisabled()',\n '[attr.data-brand]': 'brand()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkCardNumberInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkCardNumberInput),\n multi: true,\n },\n ],\n})\nexport class MkCardNumberInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** Show the detected brand as a badge inside the field. */\n readonly showBrand = input(true, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('0000 0000 0000 0000');\n /** Two-way card number, digits only (no spaces). */\n readonly value = model<string>('');\n /** Emits whenever the detected brand changes. */\n readonly brandChange = output<MkCardBrand | null>();\n\n private readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n private lastBrand: MkCardBrand | null = null;\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-card');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The detected card network, `null` while unrecognised. */\n readonly brand = computed<MkCardBrand | null>(() =>\n mkDetectCardBrand(this.value()),\n );\n /** Human-readable brand name (empty while unrecognised). */\n protected readonly brandName = computed(() => {\n const b = this.brand();\n return b ? MK_CARD_BRAND_NAMES[b] : '';\n });\n\n /** The grouping mask for the current brand. */\n protected readonly mask = computed(() => {\n const b = this.brand();\n return (b && BRAND_MASKS[b]) || DEFAULT_MASK;\n });\n /** Digits the current brand's complete number has. */\n private readonly expectedLength = computed(\n () => (this.mask().match(/0/g) ?? []).length,\n );\n\n /** Formatted (grouped) number shown in the field. */\n protected readonly masked = computed(\n () => mkApplyMask(this.value(), this.mask()).masked,\n );\n\n /**\n * `true` for a complete number passing Luhn, `false` for a complete number\n * failing it, `null` while empty or incomplete.\n */\n readonly valid = computed<boolean | null>(() => {\n const digits = this.value();\n if (!digits) return null;\n if (digits.length < this.expectedLength()) return null;\n return mkLuhnCheck(digits);\n });\n\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.touched() && this.valid() === false),\n );\n\n protected onDigitsChange(unmasked: string): void {\n if (unmasked === this.value()) return;\n this.value.set(unmasked);\n this.onChange(unmasked);\n const brand = this.brand();\n if (brand !== this.lastBrand) {\n this.lastBrand = brand;\n this.brandChange.emit(brand);\n }\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set((value ?? '').replace(/\\D/g, ''));\n this.lastBrand = this.brand();\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n /**\n * Reports `cardNumber` for a number failing the Luhn checksum (which\n * includes a half-typed one). An empty value passes; compose with\n * `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const raw = control.value;\n const digits = typeof raw === 'string' ? raw.replace(/\\D/g, '') : '';\n if (!digits) return null;\n return mkLuhnCheck(digits) ? null : { cardNumber: true };\n }\n}\n","<input\n type=\"text\"\n class=\"mk-card-number-input__field\"\n [id]=\"inputId\"\n autocomplete=\"cc-number\"\n spellcheck=\"false\"\n [mkMask]=\"mask()\"\n [value]=\"masked()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.cardNumber\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (unmaskedChange)=\"onDigitsChange($event)\"\n (blur)=\"onBlur()\"\n/>\n\n@if (showBrand() && brandName()) {\n <span class=\"mk-card-number-input__brand\">\n {{ brandName() }}\n <span class=\"mk-visually-hidden\">{{ i18n.cardBrand(brandName()) }}</span>\n </span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n ValidatorFn,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { mkMaskCaret } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport { IBAN_LENGTHS, ibanMod97, isIban } from '@mk-kit/validators';\n\n/**\n * IBAN lengths per country — re-exported from `@mk-kit/validators`\n * (`IBAN_LENGTHS`, the SWIFT registry).\n */\nexport const MK_IBAN_LENGTHS: Readonly<Record<string, number>> = IBAN_LENGTHS;\n\n/** Longest IBAN in the registry (Malta, 31) rounded up to the ISO 13616 maximum. */\nconst IBAN_MAX = 34;\n\n/** ISO 7064 MOD 97-10 over a compact (uppercase, no separators) IBAN. */\nexport function mkIbanChecksum(compact: string): boolean {\n return /^[A-Z]{2}\\d{2}[A-Z0-9]+$/.test(compact) && ibanMod97(compact) === 1;\n}\n\n/**\n * Shape, the registry length for the country and the checksum — delegates\n * to `isIban` from `@mk-kit/validators`. Unlike that function this one keeps\n * the input kit's stricter rule that the country must be in the table.\n */\nexport function mkIbanIsValid(compact: string): boolean {\n return MK_IBAN_LENGTHS[compact.slice(0, 2)] !== undefined && isIban(compact);\n}\n\n/**\n * Reactive-forms validator for an IBAN (any supported country). Empty values\n * pass (compose with `Validators.required`); the error carries the country\n * and its expected length when known.\n *\n * ```ts\n * account: ['', [Validators.required, mkIbanValidator()]]\n * ```\n */\nexport function mkIbanValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const raw = typeof control.value === 'string' ? control.value : '';\n const compact = raw.replace(/\\s+/g, '').toUpperCase();\n if (!compact || mkIbanIsValid(compact)) return null;\n const country = compact.slice(0, 2);\n return {\n iban: { country, expectedLength: MK_IBAN_LENGTHS[country] ?? null },\n };\n };\n}\n\n/**\n * IbanInput — an international bank account number field: uppercases and\n * groups the number in blocks of four as the user types (`PL61 1090 1014 …`),\n * caps input at the country's exact length (65 countries built in) and\n * validates with the ISO 13616 mod-97 checksum.\n *\n * The form value is the compact electronic format (uppercase, no spaces).\n * `valid()` (via `exportAs`) reports `true`/`false` for a complete number\n * passing/failing validation and `null` while empty or incomplete; invalid\n * styling engages after the field was touched.\n * `mkIbanValidator()` covers reactive forms.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-iban-input [(ngModel)]=\"account\" />\n * ```\n */\n@Component({\n selector: 'mk-iban-input',\n templateUrl: './iban-input.html',\n styleUrl: './iban-input.scss',\n exportAs: 'mkIbanInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-iban-input',\n '[class.mk-iban-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-iban-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-iban-input--invalid]': 'isInvalid()',\n '[class.mk-iban-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkIbanInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkIbanInput),\n multi: true,\n },\n ],\n})\nexport class MkIbanInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('PL61 1090 1014 0000 0712 1981 2874');\n /** Two-way IBAN in compact electronic format (uppercase, no spaces). */\n readonly value = model<string>('');\n\n private readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-iban');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The value grouped in blocks of four for display. */\n protected readonly grouped = computed(\n () => this.value().replace(/(.{4})(?=.)/g, '$1 '),\n );\n\n /** The expected length for the typed country, when known. */\n private readonly expectedLength = computed<number | null>(() => {\n const country = this.value().slice(0, 2);\n return country.length === 2 ? (MK_IBAN_LENGTHS[country] ?? null) : null;\n });\n\n /**\n * `true` for a complete IBAN passing the mod-97 check, `false` for a\n * complete-but-wrong one (or an unknown country once 2+ chars are typed and\n * the field was left), `null` while empty or still incomplete.\n */\n readonly valid = computed<boolean | null>(() => {\n const compact = this.value();\n if (!compact) return null;\n const expected = this.expectedLength();\n if (expected === null) return compact.length >= 2 ? false : null;\n if (compact.length < expected) return null;\n return mkIbanChecksum(compact);\n });\n\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.touched() && this.valid() === false),\n );\n\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const rawValue = el.value;\n const caret = el.selectionStart ?? rawValue.length;\n\n let compact = rawValue.toUpperCase().replace(/[^A-Z0-9]/g, '');\n compact = compact.slice(0, this.expectedLengthFor(compact));\n\n const next = compact.replace(/(.{4})(?=.)/g, '$1 ');\n el.value = next;\n const pos = mkMaskCaret(rawValue, caret, next);\n el.setSelectionRange(pos, pos);\n\n if (compact !== this.value()) {\n this.value.set(compact);\n this.onChange(compact);\n }\n }\n\n private expectedLengthFor(compact: string): number {\n return MK_IBAN_LENGTHS[compact.slice(0, 2)] ?? IBAN_MAX;\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set((value ?? '').toUpperCase().replace(/[^A-Z0-9]/g, ''));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n /**\n * Reports `iban` for a number failing the mod-97 checksum — the same error\n * `mkIbanValidator()` produces, so the two are interchangeable. An empty\n * value passes; compose with `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const raw = control.value;\n const compact = typeof raw === 'string' ? raw.replace(/\\s+/g, '').toUpperCase() : '';\n if (!compact || mkIbanIsValid(compact)) return null;\n const country = compact.slice(0, 2);\n return { iban: { country, expectedLength: MK_IBAN_LENGTHS[country] ?? null } };\n }\n}\n","<input\n type=\"text\"\n class=\"mk-iban-input__field\"\n [id]=\"inputId\"\n autocomplete=\"off\"\n autocapitalize=\"characters\"\n spellcheck=\"false\"\n [value]=\"grouped()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.iban\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n ValidatorFn,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId, mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { mkApplyMask, mkMaskCaret } from '@mk-kit/ui/directives';\nimport { MkFormField } from '../form-field/form-field';\nimport { isNip } from '@mk-kit/validators';\n\n/**\n * Per-country business tax-identifier format for {@link MkTaxIdInput}.\n *\n * `mask` is an `mkApplyMask` pattern (`0` = digit; every built-in format is\n * digits only). `compact` validates the unmasked value — the form value —\n * and `validate` adds the national checksum where one exists and is\n * unambiguous. Formats without a `validate` are pattern-checked only.\n */\nexport interface MkTaxIdFormat {\n /** ISO 3166-1 alpha-2 code, uppercase. */\n country: string;\n /** Local name of the identifier, e.g. `NIP`. */\n label: string;\n /** Input mask; `0` = digit. */\n mask: string;\n /** Regex the complete unmasked (compact) value must match. */\n compact: RegExp;\n /** Example of a valid identifier, used as the default placeholder. */\n example: string;\n /** National checksum over the compact value; omitted when there is none. */\n validate?: (compact: string) => boolean;\n}\n\n/**\n * Polish NIP checksum — delegates to `isNip` from `@mk-kit/validators`\n * (weights 6-5-7-2-3-4-5-6-7 mod 11; a remainder of 10 is invalid).\n */\nexport function mkNipChecksum(compact: string): boolean {\n return /^\\d{10}$/.test(compact) && isNip(compact);\n}\n\n/**\n * The built-in tax-identifier formats (alphabetical by ISO code). Only Poland\n * carries a checksum; the rest are length/shape checks, which is what the\n * national registries publish without ambiguity.\n */\nexport const MK_TAX_ID_FORMATS: readonly MkTaxIdFormat[] = [\n {\n country: 'CZ',\n label: 'DIČ',\n mask: '0000000000',\n compact: /^\\d{8,10}$/,\n example: '25123891',\n },\n {\n country: 'DE',\n label: 'USt-IdNr.',\n mask: '000000000',\n compact: /^\\d{9}$/,\n example: '123456789',\n },\n {\n country: 'IT',\n label: 'Partita IVA',\n mask: '00000000000',\n compact: /^\\d{11}$/,\n example: '00743110157',\n },\n {\n country: 'PL',\n label: 'NIP',\n mask: '000-000-00-00',\n compact: /^\\d{10}$/,\n example: '123-456-32-18',\n validate: mkNipChecksum,\n },\n {\n country: 'SK',\n label: 'IČ DPH',\n mask: '0000000000',\n compact: /^\\d{10}$/,\n example: '2020317068',\n },\n];\n\n/** Look up the built-in format for an ISO country code (case-insensitive). */\nexport function mkTaxIdFormat(country: string): MkTaxIdFormat | undefined {\n const upper = country.toUpperCase();\n return MK_TAX_ID_FORMATS.find((f) => f.country === upper);\n}\n\n/** Strip everything the mask would insert, leaving the compact value. */\nfunction compactOf(value: unknown): string {\n return typeof value === 'string' ? value.replace(/\\D/g, '') : '';\n}\n\n/**\n * Full validity for a country: shape plus the national checksum when the\n * format defines one. Masked and compact input are both accepted; unknown\n * countries have no rule to fail, so they pass.\n */\nexport function mkTaxIdIsValid(value: string, country: string): boolean {\n const format = mkTaxIdFormat(country);\n if (!format) return true;\n const compact = compactOf(value);\n return format.compact.test(compact) && (format.validate?.(compact) ?? true);\n}\n\n/**\n * Reactive-forms validator for a business tax identifier in a given country.\n * Empty values pass (compose with `Validators.required`); countries without a\n * built-in format pass everything.\n *\n * ```ts\n * nip: ['', [Validators.required, mkTaxIdValidator('PL')]]\n * ```\n */\nexport function mkTaxIdValidator(country: string): ValidatorFn {\n const format = mkTaxIdFormat(country);\n return (control: AbstractControl): ValidationErrors | null => {\n const compact = compactOf(control.value);\n if (!compact || !format || mkTaxIdIsValid(compact, format.country)) {\n return null;\n }\n return {\n taxId: {\n country: format.country,\n label: format.label,\n example: format.example,\n },\n };\n };\n}\n\n/**\n * TaxIdInput — a business tax-identifier field that masks and validates itself\n * for the given `country` (`PL` NIP `000-000-00-00`, `DE` USt-IdNr., `CZ` DIČ,\n * `IT` Partita IVA, `SK` IČ DPH). Poland's NIP is checksum-verified; the other\n * built-ins are shape-verified.\n *\n * Like `MkIbanInput`, the form value is the **compact** identifier (digits\n * only, e.g. `1234563218`) while the field *displays* it masked\n * (`123-456-32-18`) — so what is stored is what an API or invoice expects, and\n * `writeValue()` accepts either form. The placeholder defaults to a valid\n * example for the country. `valid()` (via `exportAs`) reports `true`/`false`\n * for a complete identifier passing/failing validation and `null` while empty,\n * still incomplete or the country is unknown; invalid styling engages after\n * the field was touched. `mkTaxIdValidator()` covers reactive forms.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-tax-id-input [(ngModel)]=\"nip\" />\n * <mk-tax-id-input [country]=\"form.value.country\" [(value)]=\"taxId\" />\n * ```\n */\n@Component({\n selector: 'mk-tax-id-input',\n templateUrl: './tax-id-input.html',\n styleUrl: './tax-id-input.scss',\n exportAs: 'mkTaxIdInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-tax-id-input',\n '[class.mk-tax-id-input--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-tax-id-input--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-tax-id-input--invalid]': 'isInvalid()',\n '[class.mk-tax-id-input--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTaxIdInput),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkTaxIdInput),\n multi: true,\n },\n ],\n})\nexport class MkTaxIdInput implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n /** ISO 3166-1 alpha-2 country whose format applies. */\n readonly country = input<string>('PL');\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder; defaults to a valid example for the country. */\n readonly placeholder = input<string>('');\n /** Two-way identifier in compact form (digits only, e.g. `1234563218`). */\n readonly value = model<string>('');\n\n private readonly touched = signal(false);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-tax-id');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.field?.isRequired() ?? false,\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** The active format, or `undefined` for unknown countries (free digits). */\n protected readonly format = computed<MkTaxIdFormat | undefined>(() =>\n mkTaxIdFormat(this.country()),\n );\n\n /** The compact value rendered through the country's mask. */\n protected readonly masked = computed(() => {\n const format = this.format();\n return format ? mkApplyMask(this.value(), format.mask).masked : this.value();\n });\n\n protected readonly effectivePlaceholder = computed(\n () => this.placeholder() || (this.format()?.example ?? ''),\n );\n\n protected readonly maxLength = computed(() => this.format()?.mask.length ?? 20);\n\n /**\n * `true` for a complete identifier passing its format (and checksum),\n * `false` for a complete-but-wrong one, `null` while empty, still shorter\n * than the mask allows, or the country has no known format.\n */\n readonly valid = computed<boolean | null>(() => {\n const compact = this.value();\n const format = this.format();\n if (!compact || !format) return null;\n if (format.compact.test(compact)) return format.validate?.(compact) ?? true;\n const digits = format.mask.replace(/[^0]/g, '').length;\n return compact.length < digits ? null : false;\n });\n\n protected readonly isInvalid = computed(\n () =>\n (this.invalid() && this.fieldTouched()) ||\n (this.field?.hasError() ?? false) ||\n (this.touched() && this.valid() === false),\n );\n\n protected onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const rawValue = el.value;\n const caret = el.selectionStart ?? rawValue.length;\n const format = this.format();\n\n const applied = format\n ? mkApplyMask(rawValue, format.mask)\n : { masked: rawValue.replace(/\\D/g, ''), unmasked: rawValue.replace(/\\D/g, '') };\n\n el.value = applied.masked;\n const pos = mkMaskCaret(rawValue, caret, applied.masked);\n el.setSelectionRange(pos, pos);\n\n if (applied.unmasked !== this.value()) {\n this.value.set(applied.unmasked);\n this.onChange(applied.unmasked);\n }\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n /** Accepts both the masked (`123-456-32-18`) and compact (`1234563218`) form. */\n writeValue(value: string | null): void {\n const digits = compactOf(value ?? '');\n const format = this.format();\n this.value.set(\n format ? mkApplyMask(digits, format.mask).unmasked : digits,\n );\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.country();\n });\n\n /**\n * Reports `taxId` for an identifier not matching `[country]`'s format or\n * failing its checksum — the same error `mkTaxIdValidator()` produces, so\n * the two are interchangeable. Empty values and unknown countries pass;\n * compose with `Validators.required` to reject an empty one.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const compact = compactOf(control.value);\n const format = this.format();\n if (!compact || !format || mkTaxIdIsValid(compact, format.country)) {\n return null;\n }\n return {\n taxId: {\n country: format.country,\n label: format.label,\n example: format.example,\n },\n };\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<input\n type=\"text\"\n class=\"mk-tax-id-input__field\"\n [id]=\"inputId\"\n autocomplete=\"off\"\n inputmode=\"numeric\"\n spellcheck=\"false\"\n [value]=\"masked()\"\n [attr.maxlength]=\"maxLength()\"\n [placeholder]=\"effectivePlaceholder()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.taxId\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n type OnDestroy,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/** One drawn stroke: pointer positions in CSS pixels. */\ntype Stroke = { x: number; y: number }[];\n\n/**\n * SignaturePad — a canvas the user draws a signature on (pointer, touch or\n * pen). Strokes are captured as smoothed polylines, rendered crisp on hi-DPI\n * screens and re-drawn losslessly when the pad resizes. The form value is a\n * PNG data-URL of the drawing (`null` while empty), so it drops straight into\n * an `<img>`, a form post or an upload.\n *\n * A Clear control resets the pad (also available as `clear()`); `isEmpty()`\n * reports whether anything is drawn. Programmatic values (`writeValue`,\n * `[value]`) are painted onto the canvas as an image.\n *\n * Drawing is inherently pointer-based; pair the pad with an alternative flow\n * (e.g. a typed-name checkbox) where WCAG requires a keyboard equivalent.\n *\n * Implements `ControlValueAccessor` and exposes a two-way `value` model, so\n * `[(ngModel)]`, reactive forms and `[(value)]` all work.\n *\n * ```html\n * <mk-signature-pad [(ngModel)]=\"signature\" />\n * <img [src]=\"signature\" alt=\"Captured signature\" />\n * ```\n */\n@Component({\n selector: 'mk-signature-pad',\n templateUrl: './signature-pad.html',\n styleUrl: './signature-pad.scss',\n exportAs: 'mkSignaturePad',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-signature-pad',\n '[class.mk-signature-pad--invalid]': 'isInvalid()',\n '[class.mk-signature-pad--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSignaturePad),\n multi: true,\n },\n ],\n})\nexport class MkSignaturePad implements ControlValueAccessor, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n\n private readonly canvasRef =\n viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n /** Stroke width in CSS pixels. */\n readonly strokeWidth = input(2, { transform: numberAttribute });\n /** Pad height in CSS pixels (width follows the container). */\n readonly height = input(160, { transform: numberAttribute });\n /** Force invalid styling + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Two-way PNG data-URL of the signature (`null` while empty). */\n readonly value = model<string | null>(null);\n /** Emits when the pad is cleared (via the button or `clear()`). */\n readonly cleared = output<void>();\n\n private readonly strokes: Stroke[] = [];\n private current: Stroke | null = null;\n /**\n * Per-gesture cache: canvas rect, devicePixelRatio and stroke color are\n * read once at pointerdown so pointermove does no layout/style reads.\n * Refreshed on a mid-stroke resize, dropped at pointerup/cancel.\n */\n private gesture: { rect: DOMRect; dpr: number; color: string } | null = null;\n /**\n * Highest smoothing segment of `current` already painted incrementally.\n * Segment `i` (1-based) is `quadraticCurveTo(p[i], mid(p[i], p[i+1]))` —\n * exactly the curve `redraw()` produces, so the final full redraw matches.\n */\n private lastSeg = 0;\n /** Pending animation-frame handle for the incremental draw. */\n private rafId: number | null = null;\n private readonly empty = signal(true);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n private resizeObserver?: ResizeObserver;\n /** Set while `value` holds an external image we can't re-derive strokes from. */\n private externalImage: string | null = null;\n\n readonly padId = this.field?.controlId ?? mkUniqueId('mk-signature');\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n /** Whether nothing is drawn yet. */\n readonly isEmpty = this.empty.asReadonly();\n\n constructor() {\n afterNextRender(() => {\n this.resizeCanvas();\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => this.resizeCanvas());\n this.resizeObserver.observe(this.canvasRef().nativeElement);\n }\n // A value assigned before render (writeValue / [value]) paints now.\n if (this.value()) this.paintExternal(this.value()!);\n });\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n this.cancelFlush();\n }\n\n // --- Drawing --------------------------------------------------------------\n\n protected onPointerDown(event: PointerEvent): void {\n if (this.isDisabled()) return;\n const canvas = this.canvasRef().nativeElement;\n try {\n canvas.setPointerCapture(event.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n this.cacheGesture();\n this.lastSeg = 0;\n this.current = [this.toLocal(event)];\n event.preventDefault();\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (!this.current) return;\n // Coalesced events keep full input fidelity while we draw once per frame.\n const coalesced = event.getCoalescedEvents?.();\n const events = coalesced?.length ? coalesced : [event];\n for (const e of events) this.current.push(this.toLocal(e));\n this.scheduleFlush();\n }\n\n protected onPointerUp(): void {\n // All points are already accumulated in `current`; the final redraw()\n // below supersedes any pending incremental frame.\n this.cancelFlush();\n this.gesture = null;\n if (!this.current) return;\n // A tap leaves a dot; keep it.\n this.strokes.push(this.current);\n this.current = null;\n this.lastSeg = 0;\n this.externalImage = null;\n this.empty.set(false);\n this.redraw();\n this.emitValue();\n this.onTouched();\n }\n\n /** Clear the drawing (and the form value). */\n clear(): void {\n this.cancelFlush();\n this.gesture = null;\n this.lastSeg = 0;\n this.strokes.length = 0;\n this.current = null;\n this.externalImage = null;\n this.empty.set(true);\n this.redraw();\n this.value.set(null);\n this.onChange(null);\n this.cleared.emit();\n }\n\n protected onClearClick(): void {\n if (this.isDisabled()) return;\n this.clear();\n this.onTouched();\n }\n\n // --- Canvas plumbing ------------------------------------------------------\n\n private toLocal(event: {\n clientX: number;\n clientY: number;\n }): { x: number; y: number } {\n const rect =\n this.gesture?.rect ??\n this.canvasRef().nativeElement.getBoundingClientRect();\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n }\n\n /** Snapshot the per-gesture environment (rect, dpr, stroke color). */\n private cacheGesture(): void {\n const canvas = this.canvasRef().nativeElement;\n this.gesture = {\n rect: canvas.getBoundingClientRect(),\n dpr: window.devicePixelRatio || 1,\n color: getComputedStyle(canvas).color,\n };\n }\n\n private scheduleFlush(): void {\n if (this.rafId != null) return;\n if (typeof requestAnimationFrame !== 'function') {\n this.drawPending();\n return;\n }\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.drawPending();\n });\n }\n\n private cancelFlush(): void {\n if (this.rafId == null) return;\n if (typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this.rafId);\n }\n this.rafId = null;\n }\n\n /**\n * Paint only the not-yet-drawn part of the in-flight stroke. Produces the\n * same midpoint-smoothed curve as `redraw()` minus the trailing straight\n * cap to the last point, which the final redraw on pointerup adds.\n */\n private drawPending(): void {\n if (!this.isBrowser || !this.current) return;\n const g = this.gesture;\n if (!g) return;\n const ctx = this.context();\n if (!ctx) return;\n const pts = this.current;\n const n = pts.length;\n if (n < 2) return;\n\n ctx.setTransform(g.dpr, 0, 0, g.dpr, 0, 0);\n ctx.lineWidth = this.strokeWidth();\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = g.color;\n\n if (n === 2) {\n // Two points: only the straight segment exists yet (as in redraw()).\n if (this.lastSeg === 0) {\n ctx.beginPath();\n ctx.moveTo(pts[0].x, pts[0].y);\n ctx.lineTo(pts[1].x, pts[1].y);\n ctx.stroke();\n }\n return;\n }\n\n const first = this.lastSeg + 1;\n if (first > n - 2) return;\n ctx.beginPath();\n if (first === 1) {\n ctx.moveTo(pts[0].x, pts[0].y);\n } else {\n // Resume where the previous segment ended: the midpoint.\n ctx.moveTo(\n (pts[first - 1].x + pts[first].x) / 2,\n (pts[first - 1].y + pts[first].y) / 2,\n );\n }\n for (let i = first; i <= n - 2; i++) {\n ctx.quadraticCurveTo(\n pts[i].x,\n pts[i].y,\n (pts[i].x + pts[i + 1].x) / 2,\n (pts[i].y + pts[i + 1].y) / 2,\n );\n }\n ctx.stroke();\n this.lastSeg = n - 2;\n }\n\n /** Match the bitmap to the CSS size × devicePixelRatio, then re-render. */\n private resizeCanvas(): void {\n if (!this.isBrowser) return;\n const canvas = this.canvasRef().nativeElement;\n const dpr = window.devicePixelRatio || 1;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n if (!width || !height) return;\n canvas.width = Math.round(width * dpr);\n canvas.height = Math.round(height * dpr);\n // Geometry changed: refresh the cache mid-stroke, drop it otherwise.\n if (this.current) this.cacheGesture();\n else this.gesture = null;\n if (this.externalImage) this.paintExternal(this.externalImage);\n else this.redraw();\n }\n\n private context(): CanvasRenderingContext2D | null {\n return this.canvasRef().nativeElement.getContext('2d');\n }\n\n private redraw(): void {\n if (!this.isBrowser) return;\n const canvas = this.canvasRef().nativeElement;\n const ctx = this.context();\n if (!ctx) return;\n const dpr = window.devicePixelRatio || 1;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, canvas.clientWidth, canvas.clientHeight);\n ctx.lineWidth = this.strokeWidth();\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = getComputedStyle(canvas).color;\n ctx.fillStyle = ctx.strokeStyle;\n\n for (const stroke of [...this.strokes, ...(this.current ? [this.current] : [])]) {\n if (stroke.length === 1) {\n ctx.beginPath();\n ctx.arc(stroke[0].x, stroke[0].y, this.strokeWidth() / 2, 0, Math.PI * 2);\n ctx.fill();\n continue;\n }\n ctx.beginPath();\n ctx.moveTo(stroke[0].x, stroke[0].y);\n // Quadratic smoothing through midpoints.\n for (let i = 1; i < stroke.length - 1; i++) {\n const midX = (stroke[i].x + stroke[i + 1].x) / 2;\n const midY = (stroke[i].y + stroke[i + 1].y) / 2;\n ctx.quadraticCurveTo(stroke[i].x, stroke[i].y, midX, midY);\n }\n const last = stroke[stroke.length - 1];\n ctx.lineTo(last.x, last.y);\n ctx.stroke();\n }\n // The in-flight stroke (if any) is now fully painted — the incremental\n // path must not repaint it.\n if (this.current) this.lastSeg = Math.max(0, this.current.length - 2);\n }\n\n private emitValue(): void {\n let dataUrl: string | null = null;\n try {\n dataUrl = this.canvasRef().nativeElement.toDataURL('image/png') || null;\n } catch {\n // Environments without canvas rasterisation (e.g. jsdom).\n }\n this.value.set(dataUrl);\n this.onChange(dataUrl);\n }\n\n /** Paint an externally-provided data-URL/image URL onto the pad. */\n private paintExternal(src: string): void {\n if (!this.isBrowser) return;\n this.externalImage = src;\n this.strokes.length = 0;\n const img = new Image();\n img.onload = () => {\n const canvas = this.canvasRef().nativeElement;\n const ctx = this.context();\n if (!ctx) return;\n const dpr = window.devicePixelRatio || 1;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, canvas.clientWidth, canvas.clientHeight);\n ctx.drawImage(img, 0, 0, canvas.clientWidth, canvas.clientHeight);\n this.empty.set(false);\n };\n img.src = src;\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n this.value.set(value || null);\n if (value) {\n // Canvas may not exist yet (before first render) — afterNextRender in\n // the constructor paints the pending value in that case.\n if (this.isBrowser && this.canvasRef !== undefined) {\n try {\n this.paintExternal(value);\n } catch {\n this.externalImage = value;\n }\n }\n } else {\n this.strokes.length = 0;\n this.externalImage = null;\n this.empty.set(true);\n if (this.isBrowser) {\n try {\n this.redraw();\n } catch {\n /* not rendered yet */\n }\n }\n }\n }\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<canvas\n #canvas\n class=\"mk-signature-pad__canvas\"\n [id]=\"padId\"\n role=\"img\"\n [style.height.px]=\"height()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"labelledBy() ? null : i18n.signature\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp()\"\n (pointercancel)=\"onPointerUp()\"\n></canvas>\n\n@if (!isEmpty() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"mk-signature-pad__clear\"\n (click)=\"onClearClick()\"\n >\n {{ i18n.clear }}\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n type Signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\nimport type { MkRadio } from './radio';\n\n/**\n * RadioGroup — an ARIA `radiogroup` that coordinates projected `mk-radio`\n * children. It manages a single selected value with roving tabindex and\n * Arrow-key navigation (Up/Left = previous, Down/Right = next, wrapping and\n * skipping disabled radios).\n *\n * Implements `ControlValueAccessor` with a two-way `value` model.\n *\n * ```html\n * <mk-radio-group [(ngModel)]=\"plan\" aria-label=\"Plan\">\n * <mk-radio [value]=\"'free'\">Free</mk-radio>\n * <mk-radio [value]=\"'pro'\">Pro</mk-radio>\n * </mk-radio-group>\n * ```\n */\n@Component({\n selector: 'mk-radio-group',\n templateUrl: './radio-group.html',\n styleUrl: './radio-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-radio-group',\n role: 'radiogroup',\n '[class.mk-radio-group--horizontal]': \"orientation() === 'horizontal'\",\n '[class.mk-radio-group--disabled]': 'isDisabled()',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '[attr.aria-required]': 'isRequired() || null',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '(keydown)': 'onKeydown($event)',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkRadioGroup),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkRadioGroup),\n multi: true,\n },\n ],\n})\nexport class MkRadioGroup implements ControlValueAccessor, Validator {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n\n /** Two-way selected value. */\n readonly value = model<unknown>(null);\n /** Disable the whole group. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). */\n readonly required = input(false, { transform: booleanAttribute });\n /** Size applied to all child radios. */\n readonly size = input<MkSize>('md');\n /** Semantic color tone applied to all child radios. */\n readonly tone = input<MkTone>('primary');\n /** Shared `name` grouping (defaults to a generated unique name). */\n readonly name = input<string>(mkUniqueId('mk-radio'));\n /** Layout direction; also sets arrow-key mapping expectations. */\n readonly orientation = input<'horizontal' | 'vertical'>('vertical');\n\n private readonly radios = signal<MkRadio[]>([]);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Whether a radio currently matches the selected value. */\n readonly hasChecked = computed(() =>\n this.radios().some((r) => r.value() === this.value()),\n );\n\n /** Register a child radio (called from `mk-radio` on init). */\n register(radio: MkRadio): void {\n this.radios.update((list) => [...list, radio]);\n }\n\n /** Unregister a child radio (called on destroy). */\n unregister(radio: MkRadio): void {\n this.radios.update((list) => list.filter((r) => r !== radio));\n }\n\n /** True when `radio` matches the group's current value. */\n isChecked(radio: MkRadio): boolean {\n return radio.value() === this.value();\n }\n\n /** The radio that should be tabbable when nothing is selected. */\n readonly firstEnabled: Signal<MkRadio | null> = computed(\n () => this.radios().find((r) => !r.isDisabled()) ?? null,\n );\n\n /** Select a radio's value (guarded by disabled state). */\n select(radio: MkRadio): void {\n if (this.isDisabled() || radio.isDisabled()) return;\n this.value.set(radio.value());\n this.onChange(radio.value());\n this.onTouched();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const enabled = this.radios().filter((r) => !r.isDisabled());\n if (!enabled.length) return;\n\n const key = e.key;\n const current = enabled.findIndex((r) => this.isChecked(r));\n let next: number;\n if (key === 'ArrowDown' || key === 'ArrowRight') {\n next = current < 0 ? 0 : (current + 1) % enabled.length;\n } else if (key === 'ArrowUp' || key === 'ArrowLeft') {\n next =\n current < 0\n ? enabled.length - 1\n : (current - 1 + enabled.length) % enabled.length;\n } else if (key === ' ' || key === 'Enter') {\n next = current < 0 ? 0 : current;\n } else {\n return;\n }\n e.preventDefault();\n const radio = enabled[next];\n this.select(radio);\n radio.focus();\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.required();\n });\n\n /**\n * Reports `required` when `[required]` is set and no radio is selected.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n if (!this.required()) return null;\n const v = control.value;\n return v === null || v === undefined || v === '' ? { required: true } : null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n type OnDestroy,\n type OnInit,\n type Signal,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { MkRadioGroup } from './radio-group';\n\n/**\n * Radio — a single option within an `mk-radio-group`. Rendered as\n * `role=\"radio\"` with a roving tabindex managed by the parent group, so the\n * whole group is a single Tab stop and Arrow keys move between options.\n *\n * Must be used as a child of `mk-radio-group`.\n *\n * ```html\n * <mk-radio [value]=\"'pro'\">Pro plan</mk-radio>\n * ```\n */\n@Component({\n selector: 'mk-radio',\n templateUrl: './radio.html',\n styleUrl: './radio.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-radio',\n role: 'radio',\n '[class.mk-radio--checked]': 'checked()',\n '[class.mk-radio--disabled]': 'isDisabled()',\n '[class.mk-radio--sm]': \"size() === 'sm'\",\n '[class.mk-radio--md]': \"size() === 'md'\",\n '[class.mk-radio--lg]': \"size() === 'lg'\",\n '[attr.data-tone]': 'group.tone()',\n '[attr.aria-checked]': 'checked()',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.tabindex]': 'tabindex()',\n '(click)': 'onClick()',\n },\n})\nexport class MkRadio implements OnInit, OnDestroy {\n protected readonly group = inject(MkRadioGroup);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The value contributed to the group when this radio is selected. */\n readonly value = input<unknown>(null);\n /** Disable just this radio. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly size: Signal<MkSize> = computed(() => this.group.size());\n readonly checked: Signal<boolean> = computed(() =>\n this.group.isChecked(this),\n );\n readonly isDisabled: Signal<boolean> = computed(\n () => this.disabled() || this.group.isDisabled(),\n );\n\n /** Roving tabindex: the checked radio (or the first enabled one) is tabbable. */\n protected readonly tabindex: Signal<number> = computed(() => {\n if (this.isDisabled()) return -1;\n if (this.group.hasChecked()) return this.checked() ? 0 : -1;\n return this.group.firstEnabled() === this ? 0 : -1;\n });\n\n ngOnInit(): void {\n this.group.register(this);\n }\n ngOnDestroy(): void {\n this.group.unregister(this);\n }\n\n /** Focus this radio's host element (used by the group's keyboard nav). */\n focus(): void {\n this.host.nativeElement.focus();\n }\n\n protected onClick(): void {\n if (this.isDisabled()) return;\n this.group.select(this);\n this.focus();\n }\n}\n","<span class=\"mk-radio__control\" aria-hidden=\"true\">\n <span class=\"mk-radio__dot\"></span>\n</span>\n<span class=\"mk-radio__label\"><ng-content /></span>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * Switch — a toggle with `role=\"switch\"` and an animated knob. Operable with\n * Space/Enter, projects its label, and supports size + tone.\n *\n * Implements `ControlValueAccessor` with a two-way `checked` model, so it works\n * with `[(ngModel)]`, reactive forms and `[(checked)]`.\n *\n * ```html\n * <mk-switch [(ngModel)]=\"notify\">Email notifications</mk-switch>\n * <mk-switch [(checked)]=\"dark\" tone=\"success\" size=\"lg\">Dark mode</mk-switch>\n * ```\n */\n@Component({\n selector: 'mk-switch',\n templateUrl: './switch.html',\n styleUrl: './switch.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-switch',\n '[class.mk-switch--sm]': \"size() === 'sm'\",\n '[class.mk-switch--md]': \"size() === 'md'\",\n '[class.mk-switch--lg]': \"size() === 'lg'\",\n '[class.mk-switch--checked]': 'checked()',\n '[class.mk-switch--disabled]': 'isDisabled()',\n '[attr.data-tone]': 'tone()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSwitch),\n multi: true,\n },\n ],\n})\nexport class MkSwitch implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n\n /** Two-way checked (on/off) state. */\n readonly checked = model(false);\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Control size. */\n readonly size = input<MkSize>('md');\n /** Semantic color tone for the \"on\" track. */\n readonly tone = input<MkTone>('primary');\n /** Accessible label when no text content is projected. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n readonly labelId = mkUniqueId('mk-switch-label');\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly labelledBy = computed(() => {\n if (this.ariaLabel()) return null;\n return this.field?.labelId ?? this.labelId;\n });\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.checked.update((v) => !v);\n this.onChange(this.checked());\n this.onTouched();\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n this.toggle();\n }\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<button\n type=\"button\"\n class=\"mk-switch__control\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onTouched()\"\n>\n <span class=\"mk-switch__track\">\n <span class=\"mk-switch__thumb\"></span>\n </span>\n</button>\n<span class=\"mk-switch__label\" [id]=\"labelId\" (click)=\"toggle()\">\n <ng-content />\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n type OnDestroy,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '../form-field/form-field';\n\n/**\n * Slider — a single-value range slider with `role=\"slider\"`, a filled track and\n * a draggable thumb (pointer events). Fully keyboard operable: Arrow keys step,\n * Page Up/Down take larger steps, Home/End jump to the bounds.\n *\n * Implements `ControlValueAccessor` with a two-way `value` model, so it works\n * with `[(ngModel)]`, reactive forms and `[(value)]`.\n *\n * ```html\n * <mk-slider [min]=\"0\" [max]=\"100\" [step]=\"5\" [(ngModel)]=\"volume\" />\n * ```\n */\n@Component({\n selector: 'mk-slider',\n templateUrl: './slider.html',\n styleUrl: './slider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-slider',\n '[class.mk-slider--sm]': \"size() === 'sm'\",\n '[class.mk-slider--md]': \"size() === 'md'\",\n '[class.mk-slider--lg]': \"size() === 'lg'\",\n '[class.mk-slider--disabled]': 'isDisabled()',\n '[attr.data-tone]': 'tone()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkSlider),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkSlider),\n multi: true,\n },\n ],\n})\nexport class MkSlider implements ControlValueAccessor, Validator, OnDestroy {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly trackRef = viewChild<ElementRef<HTMLElement>>('track');\n private readonly thumbRef = viewChild<ElementRef<HTMLElement>>('thumb');\n\n /** Minimum value. */\n readonly min = input(0, { transform: numberAttribute });\n /** Maximum value. */\n readonly max = input(100, { transform: numberAttribute });\n /** Step increment (must be > 0). */\n readonly step = input(1, { transform: numberAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Control size (track/thumb thickness). */\n readonly size = input<MkSize>('md');\n /** Semantic color tone for the filled track + thumb. */\n readonly tone = input<MkTone>('primary');\n /** Accessible label for the thumb. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n /** Two-way current value. */\n readonly value = model<number>(0);\n\n private dragging = false;\n /** Element the drag listeners are attached to (only while dragging). */\n private dragTarget: HTMLElement | null = null;\n /** Track geometry cached at pointerdown — no layout reads per move. */\n private dragRect: DOMRect | null = null;\n /** Text direction cached at pointerdown (keyboard keeps live reads). */\n private dragRtl = false;\n private readonly cvaDisabled = signal(false);\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => {\n if (this.ariaLabel()) return null;\n return this.field?.labelId ?? null;\n });\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Fill percentage (0–100) for the track + thumb position. */\n protected readonly percent = computed(() => {\n const span = this.max() - this.min();\n if (span <= 0) return 0;\n const ratio = (this.value() - this.min()) / span;\n return Math.min(100, Math.max(0, ratio * 100));\n });\n\n private get bigStep(): number {\n return Math.max(this.step(), (this.max() - this.min()) / 10);\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n // In RTL the track is mirrored, so Left/Right must follow the visual\n // direction (Right moves the thumb right → towards min). Up/Down,\n // Page and Home/End are direction-agnostic.\n const horizontal = this.isRtl() ? -this.step() : this.step();\n let next = this.value();\n switch (e.key) {\n case 'ArrowRight':\n next += horizontal;\n break;\n case 'ArrowUp':\n next += this.step();\n break;\n case 'ArrowLeft':\n next -= horizontal;\n break;\n case 'ArrowDown':\n next -= this.step();\n break;\n case 'PageUp':\n next += this.bigStep;\n break;\n case 'PageDown':\n next -= this.bigStep;\n break;\n case 'Home':\n next = this.min();\n break;\n case 'End':\n next = this.max();\n break;\n default:\n return;\n }\n e.preventDefault();\n this.setValue(next, true);\n }\n\n protected onPointerDown(event: Event): void {\n if (this.isDisabled()) return;\n const e = event as PointerEvent;\n const track = this.trackRef()?.nativeElement;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n if (rect.width <= 0) return;\n // Cache the geometry + direction for the whole gesture: pointer capture\n // means no scrolling can happen mid-drag, so one layout read suffices.\n this.dragRect = rect;\n this.dragRtl = this.isRtl();\n this.dragging = true;\n const target = (e.currentTarget as HTMLElement | null) ?? track;\n this.dragTarget = target;\n try {\n target.setPointerCapture(e.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n // Capture routes the pointer stream to this element for the drag only —\n // no document-wide listeners outliving the gesture.\n target.addEventListener('pointermove', this.onDragMove);\n target.addEventListener('pointerup', this.onDragEnd);\n target.addEventListener('pointercancel', this.onDragEnd);\n this.thumbRef()?.nativeElement.focus();\n this.updateFromClientX(e.clientX);\n event.preventDefault();\n }\n\n private readonly onDragMove = (event: PointerEvent): void => {\n if (!this.dragging) return;\n this.updateFromClientX(event.clientX);\n };\n\n private readonly onDragEnd = (): void => {\n this.endDrag(true);\n };\n\n /** Blur while dragging releases the drag (template binding). */\n protected onPointerUp(): void {\n this.endDrag(true);\n }\n\n private endDrag(markTouched: boolean): void {\n const target = this.dragTarget;\n if (target) {\n target.removeEventListener('pointermove', this.onDragMove);\n target.removeEventListener('pointerup', this.onDragEnd);\n target.removeEventListener('pointercancel', this.onDragEnd);\n }\n this.dragTarget = null;\n this.dragRect = null;\n if (!this.dragging) return;\n this.dragging = false;\n if (markTouched) this.onTouched();\n }\n\n ngOnDestroy(): void {\n this.endDrag(false);\n }\n\n /** Whether the rendered track is right-to-left. */\n private isRtl(): boolean {\n const track = this.trackRef()?.nativeElement;\n return (\n !!track &&\n typeof getComputedStyle === 'function' &&\n getComputedStyle(track).direction === 'rtl'\n );\n }\n\n /** Pointer-drag path only — uses the geometry cached at pointerdown. */\n private updateFromClientX(clientX: number): void {\n const rect = this.dragRect;\n if (!rect || rect.width <= 0) return;\n const offset = this.dragRtl ? rect.right - clientX : clientX - rect.left;\n const ratio = Math.min(1, Math.max(0, offset / rect.width));\n const raw = this.min() + ratio * (this.max() - this.min());\n this.setValue(raw);\n }\n\n private setValue(raw: number, markTouched = false): void {\n const clamped = this.clampSnap(raw);\n if (clamped !== this.value()) {\n this.value.set(clamped);\n this.onChange(clamped);\n }\n if (markTouched) this.onTouched();\n }\n\n private clampSnap(raw: number): number {\n const step = this.step() > 0 ? this.step() : 1;\n const min = this.min();\n const max = this.max();\n const snapped = Math.round((raw - min) / step) * step + min;\n return Math.min(max, Math.max(min, Number(snapped.toFixed(6))));\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: unknown): void {\n const num = typeof value === 'number' ? value : Number(value);\n this.value.set(this.clampSnap(Number.isFinite(num) ? num : this.min()));\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `min` / `max` for a value outside the track. The slider clamps\n * what the user can produce, so this only fires for a value written in\n * from the model side.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (typeof v !== 'number' || !Number.isFinite(v)) return null;\n const min = this.min();\n if (v < min) return { min: { min, actual: v } };\n const max = this.max();\n if (v > max) return { max: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #track class=\"mk-slider__track\" (pointerdown)=\"onPointerDown($event)\">\n <div class=\"mk-slider__fill\" [style.width.%]=\"percent()\"></div>\n <div\n #thumb\n class=\"mk-slider__thumb\"\n role=\"slider\"\n [style.inset-inline-start.%]=\"percent()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuetext]=\"value()\"\n aria-orientation=\"horizontal\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onPointerUp()\"\n ></div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\n\n/** Whether `value` is a valid `#rgb` / `#rrggbb` hex color. */\nfunction isHex(value: string): boolean {\n return /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(value);\n}\n\n/** Expand `#rgb` to `#rrggbb` (native color inputs need 6 digits). */\nfunction toLongHex(value: string): string {\n if (/^#[0-9a-f]{3}$/i.test(value)) {\n const [, r, g, b] = value;\n return `#${r}${r}${g}${g}${b}${b}`;\n }\n return value;\n}\n\n/**\n * ColorPicker — a compact color control: a live swatch that opens the native OS\n * picker, an editable hex field and an optional row of preset swatches.\n * `ControlValueAccessor` + two-way `value` model over a hex string.\n *\n * ```html\n * <mk-color-picker [(value)]=\"brand\" [swatches]=\"palette\" />\n * ```\n */\n@Component({\n selector: 'mk-color-picker',\n templateUrl: './color-picker.html',\n styleUrl: './color-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-color-picker',\n '[class.mk-color-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-color-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-color-picker--invalid]': 'isInvalid()',\n '[class.mk-color-picker--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkColorPicker),\n multi: true,\n },\n ],\n})\nexport class MkColorPicker implements ControlValueAccessor {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly nativeRef =\n viewChild<ElementRef<HTMLInputElement>>('native');\n\n /** Two-way hex color value. */\n readonly value = model('#000000');\n /** Preset swatches (hex strings). */\n readonly swatches = input<readonly string[]>([]);\n /** Show the editable hex text field. */\n readonly hexInput = input(true, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Accessible label for the swatch trigger. */\n readonly ariaLabel = input(this.i18n.chooseColor);\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-color');\n /** Uncommitted text in the hex field (may be partial while typing). */\n protected readonly hexText = signal('#000000');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n // Mirror the value into the hex field, incl. external / two-way updates.\n effect(() => this.hexText.set(this.value()));\n }\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly nativeValue = computed(() => toLongHex(this.value()));\n\n /** Open the OS color picker (via the hidden native input). */\n protected openNative(): void {\n if (this.isDisabled()) return;\n this.nativeRef()?.nativeElement.click();\n }\n\n protected onNativeInput(event: Event): void {\n this.setValue((event.target as HTMLInputElement).value);\n }\n\n protected onHexInput(event: Event): void {\n this.hexText.set((event.target as HTMLInputElement).value);\n }\n\n protected commitHex(): void {\n let text = this.hexText().trim();\n if (text && !text.startsWith('#')) text = `#${text}`;\n if (isHex(text)) {\n this.setValue(text);\n } else {\n this.hexText.set(this.value()); // revert invalid entry\n }\n this.onTouched();\n }\n\n protected pickSwatch(hex: string): void {\n if (this.isDisabled()) return;\n this.setValue(hex);\n }\n\n private setValue(hex: string): void {\n const next = hex.toLowerCase();\n this.value.set(next);\n this.hexText.set(next);\n this.onChange(next);\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | null): void {\n const v = value ?? '#000000';\n this.value.set(v);\n this.hexText.set(v);\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div class=\"mk-color-picker__field\">\n <button\n type=\"button\"\n class=\"mk-color-picker__swatch\"\n [id]=\"inputId\"\n [style.background-color]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel() + ': ' + value()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (click)=\"openNative()\"\n ></button>\n\n <input\n #native\n type=\"color\"\n class=\"mk-color-picker__native\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"nativeValue()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onNativeInput($event)\"\n />\n\n @if (hexInput()) {\n <input\n type=\"text\"\n class=\"mk-color-picker__hex\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [value]=\"hexText()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"i18n.hexValue\"\n [attr.aria-required]=\"isRequired() || null\"\n (input)=\"onHexInput($event)\"\n (blur)=\"commitHex()\"\n (keydown.enter)=\"commitHex()\"\n />\n }\n</div>\n\n@if (swatches().length) {\n <div class=\"mk-color-picker__swatches\" role=\"group\" [attr.aria-label]=\"i18n.presetColors\">\n @for (s of swatches(); track s) {\n <button\n type=\"button\"\n class=\"mk-color-picker__preset\"\n [class.mk-color-picker__preset--active]=\"s.toLowerCase() === value()\"\n [style.background-color]=\"s\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"s\"\n [attr.aria-pressed]=\"s.toLowerCase() === value()\"\n (click)=\"pickSwatch(s)\"\n ></button>\n }\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n type OnDestroy,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MkFormField } from '../form-field/form-field';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\n\n/** A `[low, high]` value pair. */\nexport type MkRange = [number, number];\n\n/**\n * RangeSlider — a two-thumb slider selecting a `[low, high]` range. Each thumb is\n * a `role=\"slider\"` (Arrow / Page / Home / End keys); the thumbs can't cross.\n * Implements `ControlValueAccessor` over a `[number, number]` tuple with a\n * two-way `value` model.\n *\n * ```html\n * <mk-range-slider [min]=\"0\" [max]=\"1000\" [step]=\"10\" [(value)]=\"priceRange\" />\n * ```\n */\n@Component({\n selector: 'mk-range-slider',\n templateUrl: './range-slider.html',\n styleUrl: './range-slider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-range-slider',\n '[class.mk-range-slider--sm]': \"size() === 'sm'\",\n '[class.mk-range-slider--lg]': \"size() === 'lg'\",\n '[class.mk-range-slider--disabled]': 'isDisabled()',\n '[class.mk-range-slider--invalid]': 'isInvalid()',\n '[attr.data-tone]': 'tone()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkRangeSlider),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkRangeSlider),\n multi: true,\n },\n ],\n})\nexport class MkRangeSlider implements ControlValueAccessor, Validator, OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly trackRef = viewChildren<ElementRef<HTMLElement>>('track');\n private readonly thumbRefs = viewChildren<ElementRef<HTMLElement>>('thumb');\n\n /** Minimum value. */\n readonly min = input(0, { transform: numberAttribute });\n /** Maximum value. */\n readonly max = input(100, { transform: numberAttribute });\n /** Step increment (must be > 0). */\n readonly step = input(1, { transform: numberAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. */\n readonly size = input<MkSize>('md');\n /** Semantic tone for the filled range + thumbs. */\n readonly tone = input<MkTone>('primary');\n /** Accessible label for the low thumb. */\n readonly minLabel = input(this.i18n.minimum);\n /** Accessible label for the high thumb. */\n readonly maxLabel = input(this.i18n.maximum);\n /** Two-way `[low, high]` value. */\n readonly value = model<MkRange>([0, 100]);\n\n private activeThumb: 0 | 1 | null = null;\n /** Element the drag listeners are attached to (only while dragging). */\n private dragTarget: HTMLElement | null = null;\n /** Track geometry cached at pointerdown — no layout reads per move. */\n private dragRect: DOMRect | null = null;\n /** Text direction cached at pointerdown (keyboard keeps live reads). */\n private dragRtl = false;\n private readonly cvaDisabled = signal(false);\n private onChange: (value: MkRange) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly low = computed(() => this.value()[0]);\n protected readonly high = computed(() => this.value()[1]);\n\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n\n private pct(v: number): number {\n const span = this.max() - this.min();\n if (span <= 0) return 0;\n return Math.min(100, Math.max(0, ((v - this.min()) / span) * 100));\n }\n\n protected readonly lowPercent = computed(() => this.pct(this.low()));\n protected readonly highPercent = computed(() => this.pct(this.high()));\n\n private get bigStep(): number {\n return Math.max(this.step(), (this.max() - this.min()) / 10);\n }\n\n protected onKeydown(thumb: 0 | 1, event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n const current = this.value()[thumb];\n // In RTL the track is mirrored, so Left/Right must follow the visual\n // direction (Right moves the thumb right → towards min). Up/Down,\n // Page and Home/End are direction-agnostic.\n const horizontal = this.isRtl() ? -this.step() : this.step();\n let next = current;\n switch (e.key) {\n case 'ArrowRight':\n next += horizontal;\n break;\n case 'ArrowUp':\n next += this.step();\n break;\n case 'ArrowLeft':\n next -= horizontal;\n break;\n case 'ArrowDown':\n next -= this.step();\n break;\n case 'PageUp':\n next += this.bigStep;\n break;\n case 'PageDown':\n next -= this.bigStep;\n break;\n case 'Home':\n next = thumb === 0 ? this.min() : this.low();\n break;\n case 'End':\n next = thumb === 1 ? this.max() : this.high();\n break;\n default:\n return;\n }\n e.preventDefault();\n this.setThumb(thumb, next, true);\n }\n\n protected onPointerDown(event: Event): void {\n if (this.isDisabled()) return;\n const e = event as PointerEvent;\n const track = this.trackRef()[0]?.nativeElement;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n if (rect.width <= 0) return;\n // Cache the geometry + direction for the whole gesture: pointer capture\n // means no scrolling can happen mid-drag, so one layout read suffices.\n this.dragRect = rect;\n this.dragRtl = this.isRtl();\n const raw = this.rawFromClientX(e.clientX);\n if (raw == null) {\n this.dragRect = null;\n return;\n }\n // Grab whichever thumb is closer to the pointer.\n const thumb: 0 | 1 =\n Math.abs(raw - this.low()) <= Math.abs(raw - this.high()) ? 0 : 1;\n this.activeThumb = thumb;\n const target = (e.currentTarget as HTMLElement | null) ?? track;\n this.dragTarget = target;\n try {\n target.setPointerCapture(e.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n // Capture routes the pointer stream to this element for the drag only —\n // no document-wide listeners outliving the gesture.\n target.addEventListener('pointermove', this.onDragMove);\n target.addEventListener('pointerup', this.onDragEnd);\n target.addEventListener('pointercancel', this.onDragEnd);\n this.thumbRefs()[thumb]?.nativeElement.focus();\n this.setThumb(thumb, raw);\n event.preventDefault();\n }\n\n private readonly onDragMove = (event: PointerEvent): void => {\n if (this.activeThumb == null) return;\n const raw = this.rawFromClientX(event.clientX);\n if (raw != null) this.setThumb(this.activeThumb, raw);\n };\n\n private readonly onDragEnd = (): void => {\n this.endDrag(true);\n };\n\n private endDrag(markTouched: boolean): void {\n const target = this.dragTarget;\n if (target) {\n target.removeEventListener('pointermove', this.onDragMove);\n target.removeEventListener('pointerup', this.onDragEnd);\n target.removeEventListener('pointercancel', this.onDragEnd);\n }\n this.dragTarget = null;\n this.dragRect = null;\n if (this.activeThumb == null) return;\n this.activeThumb = null;\n if (markTouched) this.onTouched();\n }\n\n ngOnDestroy(): void {\n this.endDrag(false);\n }\n\n /** Whether the rendered track is right-to-left. */\n private isRtl(): boolean {\n const track = this.trackRef()[0]?.nativeElement;\n return (\n !!track &&\n typeof getComputedStyle === 'function' &&\n getComputedStyle(track).direction === 'rtl'\n );\n }\n\n /** Pointer-drag path only — uses the geometry cached at pointerdown. */\n private rawFromClientX(clientX: number): number | null {\n const rect = this.dragRect;\n if (!rect || rect.width <= 0) return null;\n const offset = this.dragRtl ? rect.right - clientX : clientX - rect.left;\n const ratio = Math.min(1, Math.max(0, offset / rect.width));\n return this.min() + ratio * (this.max() - this.min());\n }\n\n private setThumb(thumb: 0 | 1, raw: number, markTouched = false): void {\n const snapped = this.clampSnap(raw);\n const [lo, hi] = this.value();\n // Keep low ≤ high (no crossing).\n const next: MkRange =\n thumb === 0 ? [Math.min(snapped, hi), hi] : [lo, Math.max(snapped, lo)];\n if (next[0] !== lo || next[1] !== hi) {\n this.value.set(next);\n this.onChange(next);\n }\n if (markTouched) this.onTouched();\n }\n\n private clampSnap(raw: number): number {\n const step = this.step() > 0 ? this.step() : 1;\n const min = this.min();\n const snapped = Math.round((raw - min) / step) * step + min;\n return Math.min(this.max(), Math.max(min, Number(snapped.toFixed(6))));\n }\n\n /**\n * Marks the control touched once focus leaves it entirely, so a form that\n * gates its errors on `touched` behaves the same here as on a native input.\n */\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.host.nativeElement.contains(next)) return;\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: MkRange | null): void {\n if (Array.isArray(value) && value.length === 2) {\n const lo = this.clampSnap(Number(value[0]));\n const hi = this.clampSnap(Number(value[1]));\n this.value.set([Math.min(lo, hi), Math.max(lo, hi)]);\n }\n }\n registerOnChange(fn: (value: MkRange) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `min` / `max` for either endpoint falling outside the track. The\n * slider clamps what the user can produce, so this only fires for a range\n * written in from the model side.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!Array.isArray(v) || v.length !== 2) return null;\n const lo = Number(v[0]);\n const hi = Number(v[1]);\n if (!Number.isFinite(lo) || !Number.isFinite(hi)) return null;\n const min = this.min();\n if (lo < min) return { min: { min, actual: lo } };\n const max = this.max();\n if (hi > max) return { max: { max, actual: hi } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div class=\"mk-range-slider__track-wrap\" (pointerdown)=\"onPointerDown($event)\">\n <div #track class=\"mk-range-slider__track\">\n <div\n class=\"mk-range-slider__fill\"\n [style.inset-inline-start.%]=\"lowPercent()\"\n [style.width.%]=\"highPercent() - lowPercent()\"\n ></div>\n </div>\n\n <div\n #thumb\n class=\"mk-range-slider__thumb\"\n role=\"slider\"\n [attr.tabindex]=\"isDisabled() ? null : 0\"\n [style.inset-inline-start.%]=\"lowPercent()\"\n [attr.aria-label]=\"minLabel()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"high()\"\n [attr.aria-valuenow]=\"low()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (keydown)=\"onKeydown(0, $event)\"\n ></div>\n\n <div\n #thumb\n class=\"mk-range-slider__thumb\"\n role=\"slider\"\n [attr.tabindex]=\"isDisabled() ? null : 0\"\n [style.inset-inline-start.%]=\"highPercent()\"\n [attr.aria-label]=\"maxLabel()\"\n [attr.aria-valuemin]=\"low()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"high()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n (keydown)=\"onKeydown(1, $event)\"\n ></div>\n</div>\n","/**\n * FORM COMPONENTS group barrel for @mk-kit/ui.\n * Re-exports every public component and type in the form group.\n */\nexport * from './form-field';\nexport * from './form-error-summary';\nexport * from './input';\nexport * from './input-group';\nexport * from './submit-input';\nexport * from './i18n-input';\nexport * from './select';\nexport * from './listbox';\nexport * from './cascader';\nexport * from './autocomplete';\nexport * from './mention';\nexport * from './multi-select';\nexport * from './tag-input';\nexport * from './password-input';\nexport * from './transfer-list';\nexport * from './repeater';\nexport * from './tree-select';\nexport * from './file-upload';\nexport * from './code-editor';\nexport * from './rating';\nexport * from './number-input';\nexport * from './numeric-keypad';\nexport * from './on-screen-keyboard';\nexport * from './otp';\nexport * from './phone-input';\nexport * from './postal-code-input';\nexport * from './currency-input';\nexport * from './card-number-input';\nexport * from './iban-input';\nexport * from './tax-id-input';\nexport * from './signature-pad';\nexport * from './button-toggle';\n// Checkbox moved to its own entry (`@mk-kit/ui/checkbox`) so non-forms\n// consumers (mk-table row selection) don't drag the whole forms group;\n// re-exported here for backward compatibility.\nexport * from '@mk-kit/ui/checkbox';\nexport * from './radio';\nexport * from './switch';\nexport * from './slider';\nexport * from './color-picker';\nexport * from './range-slider';\n// Shared JSON/code highlighter — moved to core; re-exported for compat.\nexport { mkHighlight } from '@mk-kit/ui/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA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"}