@filip.mazev/blocks 1.4.7 → 1.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"filip.mazev-blocks-forms.mjs","names":[],"sources":["../../../projects/blocks/forms/components/button/button.ts","../../../projects/blocks/forms/components/button/button.html","../../../projects/blocks/forms/directives/bx-error.directive.ts","../../../projects/blocks/forms/components/form-field/form-field.ts","../../../projects/blocks/forms/components/form-field/form-field.html","../../../projects/blocks/forms/components/checkbox/checkbox.ts","../../../projects/blocks/forms/components/checkbox/checkbox.html","../../../projects/blocks/forms/components/input-field/input-field.ts","../../../projects/blocks/forms/components/input-field/input-field.html","../../../projects/blocks/forms/components/radio-button/radio-button.ts","../../../projects/blocks/forms/components/radio-button/radio-button.html","../../../projects/blocks/forms/components/search-input/search-input.ts","../../../projects/blocks/forms/components/search-input/search-input.html","../../../projects/blocks/forms/components/select/select.ts","../../../projects/blocks/forms/components/select/select.html","../../../projects/blocks/forms/components/slide-toggle/slide-toggle.ts","../../../projects/blocks/forms/components/slide-toggle/slide-toggle.html","../../../projects/blocks/forms/directives/slider.directive.ts"],"sourcesContent":["import { injectComponentSurface } from '@filip.mazev/blocks/effects';\nimport { Component, input, booleanAttribute, HostListener, inject, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\nimport { ButtonColor, ButtonVariant } from '../../types/form.types';\n\n@Component({\n selector: 'bx-button, button[bx-button], a[bx-button]',\n standalone: true,\n templateUrl: './button.html',\n styleUrl: './button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '\"bx-btn bx-btn-\" + variant() + \" bx-btn-color-\" + color()',\n '[class.bx-btn-is-outlined]': 'outlined()',\n '[class.bx-btn-is-elevated]': 'elevated()',\n '[class.bx-btn-animated]': 'isAnimated()',\n '[class.bx-btn-non-interactive]': '!interactive()',\n '[attr.disabled]': 'disabled() ? true : null',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.tabindex]': 'disabled() ? \"-1\" : null'\n }\n})\nexport class Button {\n private readonly appearance = injectComponentSurface(() => ({\n interactive: this.variant() === 'text' || !this.interactive() || this.disabled() ? false : undefined,\n emission:\n this.variant() !== 'text' && this.interactive() && !this.disabled()\n ? this.color() === 'primary' || this.color() === 'grayscale'\n ? 'var(--bx-primary)'\n : `var(--bx-text-${this.color()})`\n : undefined\n }));\n\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n\n public readonly variant = input<ButtonVariant>('text');\n public readonly color = input<ButtonColor>('primary');\n public readonly outlined = input<boolean>(false);\n public readonly elevated = input<boolean>(false);\n public readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n public readonly interactive = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n @HostListener('click', ['$event'])\n protected onClick(event: Event) {\n if (this.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\n","<span class=\"bx-btn-content-wrapper\">\n <ng-content></ng-content>\n</span>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'bx-error',\n standalone: true,\n template: '<ng-content />'\n})\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- The component provides the projection selector and has no behavior.\nexport class BxError {}\n","import { afterRenderEffect, Component, computed, contentChild, ElementRef, inject, input, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, isTextWithKey, ResolvableText, BxA11yService } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { BxGlassLightingService } from '@filip.mazev/blocks/effects';\nimport { BxError } from '../../directives/bx-error.directive';\nimport { TooltipDirective } from '@filip.mazev/blocks/primitives';\n\n@Component({\n selector: 'bx-form-field',\n standalone: true,\n imports: [CommonModule, Icon, TooltipDirective],\n templateUrl: './form-field.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './form-field.scss'\n})\nexport class FormField {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly lighting = inject(BxGlassLightingService);\n protected readonly projectedError = contentChild(BxError, { read: ElementRef<HTMLElement> });\n private readonly errorElement = viewChild<ElementRef<HTMLElement>>('errorText');\n\n protected readonly resolvedLabel = computed(() => this.resolveText(this.label()));\n protected readonly resolvedError = computed(() => this.resolveText(this.error()));\n public readonly inline = input(false);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly tooltip = input<ResolvableText | undefined>(undefined);\n public readonly error = input<ResolvableText | undefined>(undefined);\n public readonly required = input<boolean>(false);\n public readonly loading = input<boolean>(false);\n public readonly forId = input<string>('');\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n constructor() {\n afterRenderEffect((onCleanup) => {\n const projected = this.projectedError()?.nativeElement;\n const error = this.resolvedError() ? this.errorElement()?.nativeElement : projected;\n if (!error) return;\n const parent = this.element.parentElement;\n const root = this.element.closest<HTMLElement>('form, fieldset') ?? (parent?.tagName.startsWith('BX-') ? parent.parentElement : parent);\n if (!root) return;\n const control = this.element.querySelector<HTMLElement>('.bx-field-control > [data-bx-surface]');\n const light = this.lighting.register(root, {\n // Anchor the lower-edge glow to the control, independently of floating\n // labels, error icons and the length of the validation message.\n element: control ?? error,\n edge: control ? 'bottom' : undefined,\n offsetX: 0.5,\n offsetY: control ? 1 : 0,\n z: 32,\n color: 'var(--bx-text-danger)',\n intensity: 0.9,\n radius: 240\n });\n onCleanup(() => light.destroy());\n });\n }\n\n private resolveText(textObj: ResolvableText | undefined): string | undefined {\n this.i18n?.version?.();\n if (!textObj) return undefined;\n if (isTextWithKey(textObj)) {\n return this.i18n?.translate(textObj.key) ?? textObj.key;\n }\n return textObj;\n }\n}\n","<div class=\"bx-field-wrapper\" [class.is-invalid]=\"!!resolvedError() || !!projectedError()\" [attr.data-bx-field-invalid]=\"!!resolvedError() || !!projectedError()\">\n\n @if (resolvedLabel() || (tooltip() && !inline())) {\n <div class=\"bx-field-header\">\n <label class=\"bx-field-label\" [attr.for]=\"forId()\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-field-required\">*</span> }\n </label>\n\n @if (tooltip()) {\n <button type=\"button\" class=\"bx-field-tooltip-trigger\" [bxTooltip]=\"tooltip()!\" placement=\"top\" aria-label=\"More information\">\n <bx-icon name=\"help-circle\" size=\"16\"></bx-icon>\n </button>\n }\n\n @if (loading()) {\n <bx-icon name=\"loader\" class=\"bx-spin\" size=\"16\"></bx-icon>\n }\n </div>\n }\n\n <div class=\"bx-field-control\" [class.bx-field-control-inline]=\"inline()\">\n <ng-content></ng-content>\n @if (inline() && tooltip()) {\n <button type=\"button\" class=\"bx-field-tooltip-trigger\" [bxTooltip]=\"tooltip()!\" placement=\"top\" [attr.aria-label]=\"'More information'\">\n <bx-icon name=\"help-circle\" size=\"16\"></bx-icon>\n </button>\n }\n </div>\n\n <div class=\"bx-field-error-projected\">\n <ng-content select=\"bx-error\"></ng-content>\n </div>\n\n @if (resolvedError()) {\n <div class=\"bx-field-error\" [class.bx-animated]=\"isAnimated()\">\n <bx-icon name=\"alert-circle\" size=\"16\"></bx-icon>\n <span #errorText class=\"bx-field-error-text\">{{ resolvedError() }}</span>\n </div>\n }\n</div>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-checkbox',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './checkbox.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './checkbox.scss'\n})\nexport class Checkbox extends BxBaseControl<boolean> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-checkbox-${uuidv4()}`);\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected showTooltip = false;\n\n protected onToggle(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.checked);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"checkbox\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\" [checked]=\"internalValue() === true\"\n (change)=\"onToggle($event)\" (blur)=\"onBlur()\">\n\n <div class=\"bx-checkbox-box\" bxSurface [class.is-checked]=\"internalValue() === true\" [class.is-invalid]=\"!!errorMessage\">\n @if (internalValue() === true) {\n <bx-icon name=\"check\" size=\"16\"></bx-icon>\n }\n </div>\n\n @if (resolvedLabel()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n </label>\n</bx-form-field>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, DestroyRef, inject, input, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\nimport { InputFieldTypes } from '../../types/form.types';\nimport { Icon } from '@filip.mazev/blocks/icons';\n\n@Component({\n selector: 'bx-input-field',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './input-field.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './input-field.scss'\n})\nexport class InputField extends BxBaseControl<string | number | null> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly inputId = computed(() => `bx-input-${uuidv4()}`);\n protected readonly isFocused = signal<boolean>(false);\n protected readonly isSpinDownDisabled = computed(() => {\n const min = this.min();\n return this.isDisabled() || (min !== undefined && (Number(this.internalValue()) || 0) <= min);\n });\n\n protected readonly isSpinUpDisabled = computed(() => {\n const max = this.max();\n return this.isDisabled() || (max !== undefined && (Number(this.internalValue()) || 0) >= max);\n });\n\n protected readonly isFloating = computed(() => {\n const val = this.internalValue();\n const hasValue = val !== null && val !== undefined && val !== '';\n const isDateType = ['date', 'time', 'datetime-local'].includes(this.type());\n\n return this.isFocused() || hasValue || isDateType;\n });\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return '';\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n public readonly type = input<InputFieldTypes>('text');\n public readonly min = input<number | undefined>(undefined);\n public readonly max = input<number | undefined>(undefined);\n public readonly step = input<number>(1);\n private spinTimeout?: ReturnType<typeof setTimeout>;\n private spinInterval?: ReturnType<typeof setInterval>;\n\n constructor() {\n super();\n inject(DestroyRef).onDestroy(() => this.stopSpin());\n }\n\n public startSpin(direction: number, event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n if (this.isDisabled()) return;\n\n this.applyStep(direction);\n\n this.spinTimeout = setTimeout(() => {\n this.spinInterval = setInterval(() => {\n this.applyStep(direction);\n }, 50);\n }, 400);\n }\n\n public stopSpin(): void {\n clearTimeout(this.spinTimeout);\n clearInterval(this.spinInterval);\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n\n const value = this.type() === 'number' ? (target.value === '' ? null : Number(target.value)) : target.value;\n\n this.updateValue(value);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.markAsTouched();\n }\n\n private applyStep(direction: number): void {\n const current = Number(this.internalValue()) || 0;\n let next = current + direction * this.step();\n const min = this.min();\n const max = this.max();\n\n if (min !== undefined && next < min) next = min;\n if (max !== undefined && next > max) next = max;\n\n this.updateValue(next);\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <div class=\"bx-input-wrapper\" bxSurface [class.is-invalid]=\"!!errorMessage\" [class.is-disabled]=\"isDisabled()\"\n [class.has-spinners]=\"type() === 'number'\" [class.is-floating]=\"isFloating()\">\n\n <div class=\"bx-input-container\">\n @if (label()) {\n <label class=\"bx-floating-label\" [attr.for]=\"inputId()\">\n {{ resolvedLabel() }}\n @if (isFieldRequired()) { <span class=\"bx-field-required\">*</span> }\n </label>\n }\n\n <input class=\"bx-native-input\" [attr.id]=\"inputId()\" [attr.type]=\"type()\"\n [attr.placeholder]=\"isFloating() ? resolvedPlaceholder() : ''\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [attr.min]=\"min()\" [attr.max]=\"max()\" [attr.step]=\"step()\"\n [disabled]=\"isDisabled()\" [value]=\"internalValue() ?? ''\" (input)=\"onInput($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\">\n </div>\n\n @if (type() === 'number') {\n <div class=\"bx-spinners-group\">\n <button type=\"button\" class=\"bx-spin-btn\" tabindex=\"-1\"\n [disabled]=\"isSpinDownDisabled()\"\n (mousedown)=\"startSpin(-1, $event)\" (touchstart)=\"startSpin(-1, $event)\" (mouseup)=\"stopSpin()\"\n (mouseleave)=\"stopSpin()\" (touchend)=\"stopSpin()\">\n <bx-icon name=\"minus\" size=\"16\"></bx-icon>\n </button>\n\n <button type=\"button\" class=\"bx-spin-btn\" tabindex=\"-1\"\n [disabled]=\"isSpinUpDisabled()\"\n (mousedown)=\"startSpin(1, $event)\" (touchstart)=\"startSpin(1, $event)\" (mouseup)=\"stopSpin()\"\n (mouseleave)=\"stopSpin()\" (touchend)=\"stopSpin()\">\n <bx-icon name=\"plus\" size=\"16\"></bx-icon>\n </button>\n </div>\n }\n\n </div>\n</bx-form-field>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, DestroyRef, ElementRef, inject, Injectable, input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\n\n@Injectable({ providedIn: 'root' })\nclass RadioRegistry {\n public readonly radios = new Set<Radio>();\n public select(radio: Radio): void {\n for (const peer of this.radios) {\n if (peer !== radio && peer.sharesGroup(radio)) peer.writeValue(radio.value());\n }\n }\n}\n\n@Component({\n selector: 'bx-radio',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField],\n templateUrl: './radio-button.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './radio-button.scss'\n})\nexport class Radio extends BxBaseControl<unknown> {\n private readonly registry = inject(RadioRegistry);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly inputId = computed(() => `bx-radio-${uuidv4()}`);\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n public readonly value = input.required<unknown>();\n public readonly name = input<string>('');\n protected showTooltip = false;\n constructor() {\n super();\n this.registry.radios.add(this);\n inject(DestroyRef).onDestroy(() => this.registry.radios.delete(this));\n }\n\n /** Match native form/name groups and radios bound to one reactive control. */\n public sharesGroup(other: Radio): boolean {\n const control = this.ngControl?.control;\n if (control && control === other.ngControl?.control) return true;\n return (\n !!this.name() &&\n this.name() === other.name() &&\n this.element.closest('form') === other.element.closest('form') &&\n control?.parent === other.ngControl?.control?.parent\n );\n }\n\n protected onSelect(): void {\n if (!this.isDisabled()) {\n this.updateValue(this.value());\n this.registry.select(this);\n }\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"radio\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.name]=\"name() || null\"\n [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\"\n [checked]=\"internalValue() === value()\" (change)=\"onSelect()\" (blur)=\"onBlur()\">\n\n <div class=\"bx-radio-circle\" bxSurface [class.is-checked]=\"internalValue() === value()\"\n [class.is-invalid]=\"!!errorMessage\">\n <div class=\"bx-radio-inner\"></div>\n </div>\n\n @if (resolvedLabel()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n </label>\n</bx-form-field>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, output, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-search-input',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './search-input.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './search-input.scss'\n})\nexport class SearchInput extends BxBaseControl<string> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-search-${Math.random().toString(36).substr(2, 9)}`);\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n // eslint-disable-next-line @angular-eslint/no-output-native -- Keep the established public search event.\n public readonly search = output<string>();\n\n @ViewChild('inputElement') private inputElement?: ElementRef<HTMLInputElement>;\n\n public clear(): void {\n if (this.isDisabled()) return;\n this.updateValue('');\n this.search.emit('');\n this.focus();\n }\n\n public focus(): void {\n this.inputElement?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.value);\n this.search.emit(target.value);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [label]=\"label()\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\"\n [required]=\"required()\" [forId]=\"inputId()\">\n\n <div class=\"bx-search-input-wrapper\" bxSurface [class.is-invalid]=\"!!errorMessage\" [class.is-disabled]=\"isDisabled()\">\n <bx-icon class=\"bx-search-icon-left\" name=\"search\" size=\"16\"></bx-icon>\n\n <input #inputElement class=\"bx-native-search-input\" type=\"text\" [attr.id]=\"inputId()\"\n [attr.placeholder]=\"resolvedPlaceholder()\" [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel()\"\n [disabled]=\"isDisabled()\" [value]=\"internalValue() || ''\" (input)=\"onInput($event)\" (blur)=\"onBlur()\">\n\n @if (internalValue()) {\n <button type=\"button\" class=\"bx-search-clear-btn\" aria-label=\"Clear search\" [disabled]=\"isDisabled()\" (click)=\"clear()\">\n <bx-icon name=\"x\" size=\"16\"></bx-icon>\n </button>\n }\n </div>\n\n</bx-form-field>","import { createGlassTransition } from '@filip.mazev/blocks/effects/runtime';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, input, output, signal, ViewChild, OnInit, OnDestroy, ElementRef, NgZone, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OverlayModule, ConnectionPositionPair, CdkConnectedOverlay } from '@angular/cdk/overlay';\nimport {\n BX_I18N,\n BxBaseControl,\n BxA11yService,\n inheritOverlayTheme,\n DEFAULT_DEBOUNCE_TIME,\n isTextWithKey,\n ResolvableText,\n uuidv4\n} from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { MenuItem } from '@filip.mazev/blocks/primitives';\nimport { BxSelectOption } from '../../interfaces/ibx-select-option.interface';\nimport { SearchInput } from '../search-input/search-input';\n\n@Component({\n selector: 'bx-select',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, OverlayModule, FormField, Icon, MenuItem, SearchInput],\n templateUrl: './select.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './select.scss'\n})\nexport class Select<T> extends BxBaseControl<T> implements OnInit, OnDestroy {\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n protected readonly isPanelAttached = signal(false);\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly searchTerm = signal<string>('');\n protected readonly inputId = computed(() => `bx-select-${uuidv4()}`);\n protected readonly overlayPositions: ConnectionPositionPair[] = [\n new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, 0, 4),\n new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }, 0, -4)\n ];\n\n protected readonly isFloating = computed(() => {\n const val = this.internalValue();\n const hasValue = val !== null && val !== undefined && val !== '';\n return this.isOpen() || hasValue;\n });\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return '';\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n protected readonly resolvedOptions = computed(() => {\n this.i18n?.version?.();\n return this.options().map((opt) => ({\n ...opt,\n resolvedStr: this.resolveText(opt.label)\n }));\n });\n\n protected readonly filteredOptions = computed(() => {\n const term = this.searchTerm().trim();\n const opts = this.resolvedOptions();\n\n if (this.externalFiltering() || !term) return opts;\n\n // Literal subsequence matching accepts punctuation and never constructs user regex.\n const query = term.toLocaleLowerCase();\n return opts.filter((opt) => {\n let index = 0;\n for (const character of opt.resolvedStr.toLocaleLowerCase()) {\n if (character === query[index]) index++;\n if (index === query.length) return true;\n }\n return false;\n });\n });\n\n protected readonly selectedOptionLabel = computed(() => {\n const currentVal = this.internalValue();\n const selected = this.resolvedOptions().find((o) => o.value === currentVal);\n return selected ? selected.resolvedStr : '';\n });\n\n protected readonly resolvedSearchPlaceholder = computed(() => this.resolveText(this.searchPlaceholder()));\n protected readonly resolvedEmptyMessage = computed(() => this.resolveText(this.emptyMessage()));\n public readonly options = input.required<BxSelectOption<T>[]>();\n\n public readonly isSearchable = input<boolean>(false);\n\n public readonly externalFiltering = input<boolean>(false);\n public readonly searchPlaceholder = input<ResolvableText>('Search...');\n public readonly emptyMessage = input<ResolvableText>('No results found.');\n // eslint-disable-next-line @angular-eslint/no-output-native -- Keep the established public search event.\n public readonly search = output<string>();\n public readonly isOpen = signal<boolean>(false);\n private transition?: ReturnType<typeof createGlassTransition>;\n\n private disconnectTheme?: () => void;\n\n private transitionRevision = 0;\n\n private focusOnOpen: 'first' | 'last' | null = null;\n\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n\n @ViewChild('searchInput') private searchInputRef?: SearchInput;\n\n @ViewChild('origin', { read: ElementRef }) private originRef?: ElementRef<HTMLElement>;\n\n private searchSubject = new Subject<string>();\n\n private sub?: Subscription;\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.sub = this.searchSubject.pipe(debounceTime(DEFAULT_DEBOUNCE_TIME), distinctUntilChanged()).subscribe((term) => {\n this.searchTerm.set(term);\n if (this.externalFiltering()) {\n this.search.emit(term);\n }\n });\n }\n\n public ngOnDestroy(): void {\n ++this.transitionRevision;\n this.onPanelDetach();\n this.sub?.unsubscribe();\n }\n\n public toggleOpen(): void {\n if (this.isDisabled() || this.loading()) return;\n if (this.isOpen()) this.close();\n else this.open();\n }\n\n public open(): void {\n if (this.isDisabled() || this.loading()) return;\n ++this.transitionRevision;\n this.isOpen.set(true);\n this.isPanelAttached.set(true);\n const pane = this.connectedOverlay?.overlayRef?.overlayElement;\n if (pane) pane.inert = false;\n const transition = this.transition;\n if (transition) void this.zone.runOutsideAngular(() => transition.enter());\n }\n\n public close(): void {\n this.isOpen.set(false);\n this.markAsTouched();\n const revision = ++this.transitionRevision;\n const pane = this.connectedOverlay?.overlayRef?.overlayElement;\n if (pane?.contains(pane.ownerDocument.activeElement)) this.originRef?.nativeElement.focus({ preventScroll: true });\n if (pane) pane.inert = true;\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.transitionRevision && !this.isOpen()) this.isPanelAttached.set(false);\n })\n .catch(() => {\n if (revision === this.transitionRevision) this.isPanelAttached.set(false);\n });\n } else this.isPanelAttached.set(false);\n }\n\n protected onPanelAttach(): void {\n const revision = this.transitionRevision;\n // Wait for the attached view's synchronous surface directives to finish mounting.\n queueMicrotask(() => {\n const overlay = this.connectedOverlay?.overlayRef;\n const origin = this.originRef?.nativeElement;\n if (!overlay?.hasAttached() || !origin || !this.isOpen() || revision !== this.transitionRevision) return;\n this.disconnectTheme?.();\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(origin, overlay.overlayElement));\n overlay.updatePosition();\n if (!this.a11y.isReducedMotion()) {\n this.transition?.destroy();\n this.transition = this.zone.runOutsideAngular(() => createGlassTransition(origin, overlay.overlayElement));\n const transition = this.transition;\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .catch(() => {\n if (revision === this.transitionRevision) {\n this.transition?.destroy();\n this.transition = undefined;\n }\n });\n }\n if (this.isSearchable()) this.searchInputRef?.focus();\n else if (this.focusOnOpen) {\n const items = this.panelItems();\n (this.focusOnOpen === 'last' ? items[items.length - 1] : items[0])?.focus();\n }\n this.focusOnOpen = null;\n });\n }\n\n protected onPanelDetach(): void {\n this.transition?.destroy();\n this.transition = undefined;\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n }\n\n protected refreshPanel(): void {\n this.transition?.refresh();\n }\n\n protected onTriggerKey(event: KeyboardEvent): void {\n if (!['ArrowDown', 'ArrowUp', 'Escape'].includes(event.key)) return;\n event.preventDefault();\n if (event.key === 'Escape') {\n this.close();\n return;\n }\n this.focusOnOpen = event.key === 'ArrowUp' ? 'last' : 'first';\n if (this.isOpen()) {\n const items = this.panelItems();\n (this.focusOnOpen === 'last' ? items[items.length - 1] : items[0])?.focus();\n this.focusOnOpen = null;\n } else this.open();\n }\n\n protected onPanelKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n return;\n }\n if (event.key === 'Tab') {\n this.close();\n return;\n }\n if ((event.target as HTMLElement)?.matches('input,textarea')) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.panelItems();\n if (!items.length) return;\n const current = items.indexOf(items[0].ownerDocument.activeElement as HTMLElement);\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : event.key === 'ArrowDown'\n ? (current + 1) % items.length\n : current < 0\n ? items.length - 1\n : (current - 1 + items.length) % items.length;\n event.preventDefault();\n items[next].focus();\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n const clickTarget = event.target as Node;\n if (this.originRef?.nativeElement.contains(clickTarget)) {\n return;\n }\n this.close();\n }\n\n protected selectOption(option: BxSelectOption<T>): void {\n if (option.disabled) return;\n this.updateValue(option.value);\n this.close();\n }\n\n protected onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n private panelItems(): HTMLElement[] {\n return Array.from(this.connectedOverlay?.overlayRef?.overlayElement.querySelectorAll<HTMLElement>('.bx-select-menu-container button:not(:disabled)') ?? []);\n }\n\n private resolveText(textObj: ResolvableText | undefined): string {\n if (!textObj) return '';\n return isTextWithKey(textObj) ? (this.i18n?.translate(textObj.key) ?? textObj.key) : textObj;\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <button type=\"button\" role=\"combobox\" aria-haspopup=\"listbox\" cdkOverlayOrigin bxSurface #origin=\"cdkOverlayOrigin\" class=\"bx-select-trigger\"\n [class.is-invalid]=\"!!errorMessage\" [class.is-open]=\"isOpen()\" [class.is-floating]=\"isFloating()\"\n [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel() || resolvedLabel()\"\n [disabled]=\"isDisabled() || loading()\" (click)=\"toggleOpen()\" (keydown)=\"onTriggerKey($event)\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-controls]=\"isPanelAttached() ? inputId() + '-options' : null\">\n\n <div class=\"bx-select-container\">\n @if (label()) {\n <span class=\"bx-floating-label\">\n {{ resolvedLabel() }}\n @if (isFieldRequired()) { <span class=\"bx-field-required\">*</span> }\n </span>\n }\n\n <span class=\"bx-select-value\" [attr.title]=\"selectedOptionLabel() || resolvedPlaceholder()\" [class.is-placeholder]=\"internalValue() === null\">\n @if (internalValue() === null && isFloating()) {\n {{ resolvedPlaceholder() }}\n } @else {\n {{ selectedOptionLabel() }}\n }\n </span>\n </div>\n\n <bx-icon class=\"bx-select-caret\" name=\"chevron-down\" size=\"16\"></bx-icon>\n </button>\n\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"origin\" [cdkConnectedOverlayOpen]=\"isPanelAttached()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\" [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayWidth]=\"origin.elementRef.nativeElement.offsetWidth\"\n (overlayOutsideClick)=\"onOutsideClick($event)\" (attach)=\"onPanelAttach()\" (detach)=\"onPanelDetach()\" (positionChange)=\"refreshPanel()\">\n\n <div class=\"bx-select-panel\" bxSurface role=\"listbox\" tabindex=\"0\" [attr.aria-label]=\"resolvedLabel()\" [id]=\"inputId() + '-options'\" (keydown)=\"onPanelKey($event)\">\n\n @if (isSearchable()) {\n <div class=\"bx-select-search-container\">\n <bx-search-input #searchInput [placeholder]=\"resolvedSearchPlaceholder()\"\n (search)=\"onSearchChange($event)\" (keydown.enter)=\"$event.preventDefault()\">\n </bx-search-input>\n </div>\n }\n\n <div class=\"bx-select-menu-container\">\n @for (option of filteredOptions(); track option.value) {\n\n <bx-menu-item role=\"option\" [attr.aria-selected]=\"internalValue() === option.value\" [disabled]=\"option.disabled ?? false\" [wrapLabel]=\"true\" (action)=\"selectOption(option)\">\n <div class=\"bx-select-item-inner\">\n <div class=\"bx-select-check-placeholder\">\n @if (internalValue() === option.value) {\n <bx-icon name=\"check\" size=\"16\"></bx-icon>\n }\n </div>\n <span [title]=\"option.resolvedStr\">{{ option.resolvedStr }}</span>\n </div>\n </bx-menu-item>\n\n } @empty {\n <div class=\"bx-select-empty\">\n <span class=\"bx-empty-text\">{{ resolvedEmptyMessage() }}</span>\n </div>\n }\n </div>\n\n </div>\n </ng-template>\n\n</bx-form-field>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-slide-toggle',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField],\n templateUrl: './slide-toggle.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './slide-toggle.scss'\n})\nexport class SlideToggle extends BxBaseControl<boolean> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-slide-toggle-${uuidv4()}`);\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected onToggle(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.checked);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"checkbox\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\" [checked]=\"internalValue() === true\"\n (change)=\"onToggle($event)\" (blur)=\"onBlur()\">\n\n <div class=\"bx-slide-toggle-track\" bxSurface [class.is-checked]=\"internalValue() === true\" [class.is-invalid]=\"!!errorMessage\">\n <div class=\"bx-slide-toggle-thumb\"></div>\n </div>\n\n @if (resolvedLabel() || tooltip()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n\n\n </label>\n\n</bx-form-field>","import { afterEveryRender, afterNextRender, DestroyRef, Directive, ElementRef, HostListener, inject, NgZone } from '@angular/core';\nimport { observeGlassLighting, refreshGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { ThemingService } from '@filip.mazev/blocks/core';\n\n/** Glass styling for a native range, including reactive forms and programmatic values. */\n@Directive({ selector: 'input[type=range][bxSlider]', host: { class: 'bx-slider' } })\nexport class SliderDirective {\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly theme = inject(ThemingService);\n private shell?: HTMLSpanElement;\n private thumb?: HTMLSpanElement;\n\n constructor() {\n afterEveryRender(() => this.sync());\n const zone = inject(NgZone);\n const destroy = inject(DestroyRef);\n afterNextRender(() => {\n const input = this.element.nativeElement;\n const shell = input.ownerDocument.createElement('span');\n shell.className = 'bx-slider-shell';\n const thumb = input.ownerDocument.createElement('span');\n thumb.className = 'bx-slider-thumb';\n thumb.setAttribute('aria-hidden', 'true');\n input.before(shell);\n shell.append(input, thumb);\n this.shell = shell;\n this.thumb = thumb;\n this.sync();\n const place = () => {\n shell.style.setProperty('--bx-slider-center-y', `${input.offsetTop + input.offsetHeight / 2}px`);\n shell.style.setProperty('--bx-slider-track-start', `${input.offsetLeft}px`);\n shell.style.setProperty('--bx-slider-track-width', `${input.offsetWidth}px`);\n refreshGlassLighting(thumb);\n };\n const resize = new ResizeObserver(place);\n zone.runOutsideAngular(() => {\n resize.observe(input);\n resize.observe(shell);\n place();\n });\n const stop = zone.runOutsideAngular(() =>\n observeGlassLighting(\n thumb,\n (light) => {\n const reflected = light.reflectionStrength > light.strength;\n const strength = reflected ? light.reflectionStrength : light.strength;\n if (strength <= 0.04) {\n thumb.style.removeProperty('--bx-slider-light-color');\n thumb.style.removeProperty('--bx-slider-light-strength');\n } else {\n thumb.style.setProperty('--bx-slider-light-color', reflected ? light.reflection : light.color);\n thumb.style.setProperty('--bx-slider-light-strength', String(strength));\n }\n thumb.style.setProperty('--bx-slider-light-x', `${reflected ? light.reflectionX : light.x}%`);\n thumb.style.setProperty('--bx-slider-light-y', `${reflected ? light.reflectionY : light.y}%`);\n },\n input\n )\n );\n destroy.onDestroy(() => {\n resize.disconnect();\n stop();\n shell.replaceWith(input);\n this.shell = this.thumb = undefined;\n });\n });\n }\n\n @HostListener('input')\n protected sync(): void {\n const input = this.element.nativeElement;\n const min = input.min === '' ? 0 : Number(input.min);\n const max = input.max === '' ? 100 : Number(input.max);\n const progress = max > min ? Math.max(0, Math.min(100, ((input.valueAsNumber - min) / (max - min)) * 100)) : 0;\n const value = `${Number.isFinite(progress) ? progress : 0}%`;\n if (input.style.getPropertyValue('--bx-slider-progress') !== value) input.style.setProperty('--bx-slider-progress', value);\n if (this.shell) {\n const position = String((input.matches(':dir(rtl)') ? 100 - (Number.isFinite(progress) ? progress : 0) : Number.isFinite(progress) ? progress : 0) / 100);\n if (this.shell.style.getPropertyValue('--bx-slider-position') !== position) {\n this.shell.style.setProperty('--bx-slider-position', position);\n if (this.thumb) refreshGlassLighting(this.thumb);\n }\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"filip.mazev-blocks-forms.mjs","names":[],"sources":["../../../projects/blocks/forms/components/button/button.ts","../../../projects/blocks/forms/components/button/button.html","../../../projects/blocks/forms/directives/bx-error.directive.ts","../../../projects/blocks/forms/components/form-field/form-field.ts","../../../projects/blocks/forms/components/form-field/form-field.html","../../../projects/blocks/forms/components/checkbox/checkbox.ts","../../../projects/blocks/forms/components/checkbox/checkbox.html","../../../projects/blocks/forms/components/input-field/input-field.ts","../../../projects/blocks/forms/components/input-field/input-field.html","../../../projects/blocks/forms/components/radio-button/radio-button.ts","../../../projects/blocks/forms/components/radio-button/radio-button.html","../../../projects/blocks/forms/components/search-input/search-input.ts","../../../projects/blocks/forms/components/search-input/search-input.html","../../../projects/blocks/forms/components/select/select.ts","../../../projects/blocks/forms/components/select/select.html","../../../projects/blocks/forms/components/slide-toggle/slide-toggle.ts","../../../projects/blocks/forms/components/slide-toggle/slide-toggle.html","../../../projects/blocks/forms/directives/slider.directive.ts"],"sourcesContent":["import { injectComponentSurface } from '@filip.mazev/blocks/effects';\nimport { Component, input, booleanAttribute, HostListener, inject, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\nimport { ButtonColor, ButtonVariant } from '../../types/form.types';\n\n@Component({\n selector: 'bx-button, button[bx-button], a[bx-button]',\n standalone: true,\n templateUrl: './button.html',\n styleUrl: './button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '\"bx-btn bx-btn-\" + variant() + \" bx-btn-color-\" + color()',\n '[class.bx-btn-is-outlined]': 'outlined()',\n '[class.bx-btn-is-elevated]': 'elevated()',\n '[class.bx-btn-animated]': 'isAnimated()',\n '[class.bx-btn-non-interactive]': '!interactive()',\n '[attr.disabled]': 'disabled() ? true : null',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.tabindex]': 'disabled() ? \"-1\" : null'\n }\n})\nexport class Button {\n private readonly appearance = injectComponentSurface(() => ({\n interactive: this.variant() === 'text' || !this.interactive() || this.disabled() ? false : undefined,\n emission:\n this.variant() !== 'text' && this.interactive() && !this.disabled()\n ? this.color() === 'primary' || this.color() === 'grayscale'\n ? 'var(--bx-primary)'\n : `var(--bx-text-${this.color()})`\n : undefined\n }));\n\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n\n public readonly variant = input<ButtonVariant>('text');\n public readonly color = input<ButtonColor>('primary');\n public readonly outlined = input<boolean>(false);\n public readonly elevated = input<boolean>(false);\n public readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n public readonly interactive = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n @HostListener('click', ['$event'])\n protected onClick(event: Event) {\n if (this.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\n","<span class=\"bx-btn-content-wrapper\">\n <ng-content></ng-content>\n</span>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'bx-error',\n standalone: true,\n template: '<ng-content />'\n})\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- The component provides the projection selector and has no behavior.\nexport class BxError {}\n","import { afterRenderEffect, Component, computed, contentChild, ElementRef, inject, input, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, isTextWithKey, ResolvableText, BxA11yService } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { BxGlassLightingService } from '@filip.mazev/blocks/effects';\nimport { BxError } from '../../directives/bx-error.directive';\nimport { TooltipDirective } from '@filip.mazev/blocks/primitives';\n\n@Component({\n selector: 'bx-form-field',\n standalone: true,\n imports: [CommonModule, Icon, TooltipDirective],\n templateUrl: './form-field.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './form-field.scss'\n})\nexport class FormField {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly lighting = inject(BxGlassLightingService);\n protected readonly projectedError = contentChild(BxError, { read: ElementRef<HTMLElement> });\n private readonly errorElement = viewChild<ElementRef<HTMLElement>>('errorText');\n\n protected readonly resolvedLabel = computed(() => this.resolveText(this.label()));\n protected readonly resolvedError = computed(() => this.resolveText(this.error()));\n public readonly inline = input(false);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly tooltip = input<ResolvableText | undefined>(undefined);\n public readonly error = input<ResolvableText | undefined>(undefined);\n public readonly required = input<boolean>(false);\n public readonly loading = input<boolean>(false);\n public readonly forId = input<string>('');\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n constructor() {\n afterRenderEffect((onCleanup) => {\n const projected = this.projectedError()?.nativeElement;\n const error = this.resolvedError() ? this.errorElement()?.nativeElement : projected;\n if (!error) return;\n const parent = this.element.parentElement;\n const root = this.element.closest<HTMLElement>('form, fieldset') ?? (parent?.tagName.startsWith('BX-') ? parent.parentElement : parent);\n if (!root) return;\n const control = this.element.querySelector<HTMLElement>('.bx-field-control > [data-bx-surface]');\n const light = this.lighting.register(root, {\n // Anchor the lower-edge glow to the control, independently of floating\n // labels, error icons and the length of the validation message.\n element: control ?? error,\n edge: control ? 'bottom' : undefined,\n offsetX: 0.5,\n offsetY: control ? 1 : 0,\n z: 32,\n color: 'var(--bx-text-danger)',\n intensity: 0.9,\n radius: 240\n });\n onCleanup(() => light.destroy());\n });\n }\n\n private resolveText(textObj: ResolvableText | undefined): string | undefined {\n this.i18n?.version?.();\n if (!textObj) return undefined;\n if (isTextWithKey(textObj)) {\n return this.i18n?.translate(textObj.key) ?? textObj.key;\n }\n return textObj;\n }\n}\n","<div class=\"bx-field-wrapper\" [class.is-invalid]=\"!!resolvedError() || !!projectedError()\" [attr.data-bx-field-invalid]=\"!!resolvedError() || !!projectedError()\">\n\n @if (resolvedLabel() || (tooltip() && !inline())) {\n <div class=\"bx-field-header\">\n <label class=\"bx-field-label\" [attr.for]=\"forId()\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-field-required\">*</span> }\n </label>\n\n @if (tooltip()) {\n <button type=\"button\" class=\"bx-field-tooltip-trigger\" [bxTooltip]=\"tooltip()!\" placement=\"top\" aria-label=\"More information\">\n <bx-icon name=\"help-circle\" size=\"16\"></bx-icon>\n </button>\n }\n\n @if (loading()) {\n <bx-icon name=\"loader\" class=\"bx-spin\" size=\"16\"></bx-icon>\n }\n </div>\n }\n\n <div class=\"bx-field-control\" [class.bx-field-control-inline]=\"inline()\">\n <ng-content></ng-content>\n @if (inline() && tooltip()) {\n <button type=\"button\" class=\"bx-field-tooltip-trigger\" [bxTooltip]=\"tooltip()!\" placement=\"top\" [attr.aria-label]=\"'More information'\">\n <bx-icon name=\"help-circle\" size=\"16\"></bx-icon>\n </button>\n }\n </div>\n\n <div class=\"bx-field-error-projected\">\n <ng-content select=\"bx-error\"></ng-content>\n </div>\n\n @if (resolvedError()) {\n <div class=\"bx-field-error\" [class.bx-animated]=\"isAnimated()\">\n <bx-icon name=\"alert-circle\" size=\"16\"></bx-icon>\n <span #errorText class=\"bx-field-error-text\">{{ resolvedError() }}</span>\n </div>\n }\n</div>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-checkbox',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './checkbox.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './checkbox.scss'\n})\nexport class Checkbox extends BxBaseControl<boolean> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-checkbox-${uuidv4()}`);\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected showTooltip = false;\n\n protected onToggle(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.checked);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"checkbox\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\" [checked]=\"internalValue() === true\"\n (change)=\"onToggle($event)\" (blur)=\"onBlur()\">\n\n <div class=\"bx-checkbox-box\" bxSurface [class.is-checked]=\"internalValue() === true\" [class.is-invalid]=\"!!errorMessage\">\n @if (internalValue() === true) {\n <bx-icon name=\"check\" size=\"16\"></bx-icon>\n }\n </div>\n\n @if (resolvedLabel()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n </label>\n</bx-form-field>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, DestroyRef, inject, input, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\nimport { InputFieldTypes } from '../../types/form.types';\nimport { Icon } from '@filip.mazev/blocks/icons';\n\n@Component({\n selector: 'bx-input-field',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './input-field.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './input-field.scss'\n})\nexport class InputField extends BxBaseControl<string | number | null> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly inputId = computed(() => `bx-input-${uuidv4()}`);\n protected readonly isFocused = signal<boolean>(false);\n protected readonly isSpinDownDisabled = computed(() => {\n const min = this.min();\n return this.isDisabled() || (min !== undefined && (Number(this.internalValue()) || 0) <= min);\n });\n\n protected readonly isSpinUpDisabled = computed(() => {\n const max = this.max();\n return this.isDisabled() || (max !== undefined && (Number(this.internalValue()) || 0) >= max);\n });\n\n protected readonly isFloating = computed(() => {\n const val = this.internalValue();\n const hasValue = val !== null && val !== undefined && val !== '';\n const isDateType = ['date', 'time', 'datetime-local'].includes(this.type());\n\n return this.isFocused() || hasValue || isDateType;\n });\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return '';\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n public readonly type = input<InputFieldTypes>('text');\n public readonly min = input<number | undefined>(undefined);\n public readonly max = input<number | undefined>(undefined);\n public readonly step = input<number>(1);\n private spinTimeout?: ReturnType<typeof setTimeout>;\n private spinInterval?: ReturnType<typeof setInterval>;\n\n constructor() {\n super();\n inject(DestroyRef).onDestroy(() => this.stopSpin());\n }\n\n public startSpin(direction: number, event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n if (this.isDisabled()) return;\n\n this.applyStep(direction);\n\n this.spinTimeout = setTimeout(() => {\n this.spinInterval = setInterval(() => {\n this.applyStep(direction);\n }, 50);\n }, 400);\n }\n\n public stopSpin(): void {\n clearTimeout(this.spinTimeout);\n clearInterval(this.spinInterval);\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n\n const value = this.type() === 'number' ? (target.value === '' ? null : Number(target.value)) : target.value;\n\n this.updateValue(value);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.markAsTouched();\n }\n\n private applyStep(direction: number): void {\n const current = Number(this.internalValue()) || 0;\n let next = current + direction * this.step();\n const min = this.min();\n const max = this.max();\n\n if (min !== undefined && next < min) next = min;\n if (max !== undefined && next > max) next = max;\n\n this.updateValue(next);\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <div class=\"bx-input-wrapper\" bxSurface [class.is-invalid]=\"!!errorMessage\" [class.is-disabled]=\"isDisabled()\"\n [class.has-spinners]=\"type() === 'number'\" [class.is-floating]=\"isFloating()\">\n\n <div class=\"bx-input-container\">\n @if (label()) {\n <label class=\"bx-floating-label\" [attr.for]=\"inputId()\">\n {{ resolvedLabel() }}\n @if (isFieldRequired()) { <span class=\"bx-field-required\">*</span> }\n </label>\n }\n\n <input class=\"bx-native-input\" [attr.id]=\"inputId()\" [attr.type]=\"type()\"\n [attr.placeholder]=\"isFloating() ? resolvedPlaceholder() : ''\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [attr.min]=\"min()\" [attr.max]=\"max()\" [attr.step]=\"step()\"\n [disabled]=\"isDisabled()\" [value]=\"internalValue() ?? ''\" (input)=\"onInput($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\">\n </div>\n\n @if (type() === 'number') {\n <div class=\"bx-spinners-group\">\n <button type=\"button\" class=\"bx-spin-btn\" tabindex=\"-1\"\n [disabled]=\"isSpinDownDisabled()\"\n (mousedown)=\"startSpin(-1, $event)\" (touchstart)=\"startSpin(-1, $event)\" (mouseup)=\"stopSpin()\"\n (mouseleave)=\"stopSpin()\" (touchend)=\"stopSpin()\">\n <bx-icon name=\"minus\" size=\"16\"></bx-icon>\n </button>\n\n <button type=\"button\" class=\"bx-spin-btn\" tabindex=\"-1\"\n [disabled]=\"isSpinUpDisabled()\"\n (mousedown)=\"startSpin(1, $event)\" (touchstart)=\"startSpin(1, $event)\" (mouseup)=\"stopSpin()\"\n (mouseleave)=\"stopSpin()\" (touchend)=\"stopSpin()\">\n <bx-icon name=\"plus\" size=\"16\"></bx-icon>\n </button>\n </div>\n }\n\n </div>\n</bx-form-field>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, DestroyRef, ElementRef, inject, Injectable, input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\n\n@Injectable({ providedIn: 'root' })\nclass RadioRegistry {\n public readonly radios = new Set<Radio>();\n public select(radio: Radio): void {\n for (const peer of this.radios) {\n if (peer !== radio && peer.sharesGroup(radio)) peer.writeValue(radio.value());\n }\n }\n}\n\n@Component({\n selector: 'bx-radio',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField],\n templateUrl: './radio-button.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './radio-button.scss'\n})\nexport class Radio extends BxBaseControl<unknown> {\n private readonly registry = inject(RadioRegistry);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly inputId = computed(() => `bx-radio-${uuidv4()}`);\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n public readonly value = input.required<unknown>();\n public readonly name = input<string>('');\n protected showTooltip = false;\n constructor() {\n super();\n this.registry.radios.add(this);\n inject(DestroyRef).onDestroy(() => this.registry.radios.delete(this));\n }\n\n /** Match native form/name groups and radios bound to one reactive control. */\n public sharesGroup(other: Radio): boolean {\n const control = this.ngControl?.control;\n if (control && control === other.ngControl?.control) return true;\n return (\n !!this.name() &&\n this.name() === other.name() &&\n this.element.closest('form') === other.element.closest('form') &&\n control?.parent === other.ngControl?.control?.parent\n );\n }\n\n protected onSelect(): void {\n if (!this.isDisabled()) {\n this.updateValue(this.value());\n this.registry.select(this);\n }\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"radio\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.name]=\"name() || null\"\n [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\"\n [checked]=\"internalValue() === value()\" (change)=\"onSelect()\" (blur)=\"onBlur()\">\n\n <div class=\"bx-radio-circle\" bxSurface [class.is-checked]=\"internalValue() === value()\"\n [class.is-invalid]=\"!!errorMessage\">\n <div class=\"bx-radio-inner\"></div>\n </div>\n\n @if (resolvedLabel()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n </label>\n</bx-form-field>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, output, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-search-input',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './search-input.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './search-input.scss'\n})\nexport class SearchInput extends BxBaseControl<string> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-search-${Math.random().toString(36).substr(2, 9)}`);\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n // eslint-disable-next-line @angular-eslint/no-output-native -- Keep the established public search event.\n public readonly search = output<string>();\n\n @ViewChild('inputElement') private inputElement?: ElementRef<HTMLInputElement>;\n\n public clear(): void {\n if (this.isDisabled()) return;\n this.updateValue('');\n this.search.emit('');\n this.focus();\n }\n\n public focus(): void {\n this.inputElement?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.value);\n this.search.emit(target.value);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [label]=\"label()\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\"\n [required]=\"required()\" [forId]=\"inputId()\">\n\n <div class=\"bx-search-input-wrapper\" bxSurface [class.is-invalid]=\"!!errorMessage\" [class.is-disabled]=\"isDisabled()\">\n <bx-icon class=\"bx-search-icon-left\" name=\"search\" size=\"16\"></bx-icon>\n\n <input #inputElement class=\"bx-native-search-input\" type=\"text\" [attr.id]=\"inputId()\"\n [attr.placeholder]=\"resolvedPlaceholder()\" [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel()\"\n [disabled]=\"isDisabled()\" [value]=\"internalValue() || ''\" (input)=\"onInput($event)\" (blur)=\"onBlur()\">\n\n @if (internalValue()) {\n <button type=\"button\" class=\"bx-search-clear-btn\" aria-label=\"Clear search\" [disabled]=\"isDisabled()\" (click)=\"clear()\">\n <bx-icon name=\"x\" size=\"16\"></bx-icon>\n </button>\n }\n </div>\n\n</bx-form-field>","import { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, input, output, signal, ViewChild, OnInit, OnDestroy, ElementRef, NgZone, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Overlay, OverlayModule, ConnectionPositionPair, CdkConnectedOverlay, FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport {\n BX_I18N,\n BxBaseControl,\n BxA11yService,\n inheritOverlayTheme,\n DEFAULT_DEBOUNCE_TIME,\n isTextWithKey,\n ResolvableText,\n uuidv4\n} from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { BX_OVERLAY_CONTEXT, MenuItem } from '@filip.mazev/blocks/primitives';\nimport { BxSelectOption } from '../../interfaces/ibx-select-option.interface';\nimport { SearchInput } from '../search-input/search-input';\n\n@Component({\n selector: 'bx-select',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, OverlayModule, FormField, Icon, MenuItem, SearchInput],\n templateUrl: './select.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './select.scss'\n})\nexport class Select<T> extends BxBaseControl<T> implements OnInit, OnDestroy {\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly overlay = inject(Overlay);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n protected readonly panelScrollStrategy = this.overlay.scrollStrategies.noop();\n protected readonly isPanelAttached = signal(false);\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly searchTerm = signal<string>('');\n protected readonly inputId = computed(() => `bx-select-${uuidv4()}`);\n protected readonly overlayPositions: ConnectionPositionPair[] = [\n new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, 0, 4),\n new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }, 0, -4)\n ];\n\n protected readonly isFloating = computed(() => {\n const val = this.internalValue();\n const hasValue = val !== null && val !== undefined && val !== '';\n return this.isOpen() || hasValue;\n });\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return '';\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n protected readonly resolvedOptions = computed(() => {\n this.i18n?.version?.();\n return this.options().map((opt) => ({\n ...opt,\n resolvedStr: this.resolveText(opt.label)\n }));\n });\n\n protected readonly filteredOptions = computed(() => {\n const term = this.searchTerm().trim();\n const opts = this.resolvedOptions();\n\n if (this.externalFiltering() || !term) return opts;\n\n // Literal subsequence matching accepts punctuation and never constructs user regex.\n const query = term.toLocaleLowerCase();\n return opts.filter((opt) => {\n let index = 0;\n for (const character of opt.resolvedStr.toLocaleLowerCase()) {\n if (character === query[index]) index++;\n if (index === query.length) return true;\n }\n return false;\n });\n });\n\n protected readonly selectedOptionLabel = computed(() => {\n const currentVal = this.internalValue();\n const selected = this.resolvedOptions().find((o) => o.value === currentVal);\n return selected ? selected.resolvedStr : '';\n });\n\n protected readonly resolvedSearchPlaceholder = computed(() => this.resolveText(this.searchPlaceholder()));\n protected readonly resolvedEmptyMessage = computed(() => this.resolveText(this.emptyMessage()));\n public readonly options = input.required<BxSelectOption<T>[]>();\n\n public readonly isSearchable = input<boolean>(false);\n\n public readonly externalFiltering = input<boolean>(false);\n public readonly searchPlaceholder = input<ResolvableText>('Search...');\n public readonly emptyMessage = input<ResolvableText>('No results found.');\n // eslint-disable-next-line @angular-eslint/no-output-native -- Keep the established public search event.\n public readonly search = output<string>();\n public readonly isOpen = signal<boolean>(false);\n private transition?: ReturnType<typeof createGlassTransition>;\n\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private disconnectScroll?: () => void;\n\n private transitionRevision = 0;\n\n private focusOnOpen: 'first' | 'last' | null = null;\n\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n\n @ViewChild('searchInput') private searchInputRef?: SearchInput;\n\n @ViewChild('origin', { read: ElementRef }) private originRef?: ElementRef<HTMLElement>;\n\n private searchSubject = new Subject<string>();\n\n private sub?: Subscription;\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.sub = this.searchSubject.pipe(debounceTime(DEFAULT_DEBOUNCE_TIME), distinctUntilChanged()).subscribe((term) => {\n this.searchTerm.set(term);\n if (this.externalFiltering()) {\n this.search.emit(term);\n }\n });\n }\n\n public ngOnDestroy(): void {\n ++this.transitionRevision;\n this.onPanelDetach();\n this.sub?.unsubscribe();\n }\n\n public toggleOpen(): void {\n if (this.isDisabled() || this.loading()) return;\n if (this.isOpen()) this.close();\n else this.open();\n }\n\n public open(): void {\n if (this.isDisabled() || this.loading()) return;\n ++this.transitionRevision;\n this.isOpen.set(true);\n this.isPanelAttached.set(true);\n const pane = this.connectedOverlay?.overlayRef?.overlayElement;\n if (pane) pane.inert = false;\n const transition = this.transition;\n if (transition) void this.zone.runOutsideAngular(() => transition.enter());\n }\n\n public close(): void {\n this.isOpen.set(false);\n this.markAsTouched();\n const revision = ++this.transitionRevision;\n const pane = this.connectedOverlay?.overlayRef?.overlayElement;\n if (pane?.contains(pane.ownerDocument.activeElement)) this.originRef?.nativeElement.focus({ preventScroll: true });\n if (pane) pane.inert = true;\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.transitionRevision && !this.isOpen()) this.isPanelAttached.set(false);\n })\n .catch(() => {\n if (revision === this.transitionRevision) this.isPanelAttached.set(false);\n });\n } else this.isPanelAttached.set(false);\n }\n\n protected onPanelAttach(): void {\n const revision = this.transitionRevision;\n const origin = this.originRef?.nativeElement;\n const overlay = this.connectedOverlay?.overlayRef;\n if (origin && overlay?.hasAttached()) {\n this.disconnectLighting?.();\n this.disconnectLighting = inheritGlassLighting(overlay.overlayElement, origin);\n this.trackPanelScroll(overlay, origin);\n }\n // Wait for the attached view's synchronous surface directives to finish mounting.\n queueMicrotask(() => {\n const attachedOverlay = this.connectedOverlay?.overlayRef;\n const attachedOrigin = this.originRef?.nativeElement;\n if (!attachedOverlay?.hasAttached() || !attachedOrigin || !this.isOpen() || revision !== this.transitionRevision) return;\n this.disconnectTheme?.();\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(attachedOrigin, attachedOverlay.overlayElement));\n attachedOverlay.updatePosition();\n if (!this.a11y.isReducedMotion()) {\n this.transition?.destroy();\n this.transition = this.zone.runOutsideAngular(() => createGlassTransition(attachedOrigin, attachedOverlay.overlayElement));\n const transition = this.transition;\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .catch(() => {\n if (revision === this.transitionRevision) {\n this.transition?.destroy();\n this.transition = undefined;\n }\n });\n }\n if (this.isSearchable()) this.searchInputRef?.focus();\n else if (this.focusOnOpen) {\n const items = this.panelItems();\n (this.focusOnOpen === 'last' ? items[items.length - 1] : items[0])?.focus();\n }\n this.focusOnOpen = null;\n });\n }\n\n protected onPanelDetach(): void {\n this.transition?.destroy();\n this.transition = undefined;\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n this.disconnectScroll?.();\n this.disconnectScroll = undefined;\n }\n\n protected overlayPopoverLocation(origin: HTMLElement): CdkConnectedOverlay['usePopover'] {\n const useTopLayer =\n !!this.overlayContext?.useTopLayer || !!origin.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]');\n // A null location disables the CDK popover; explicit contexts and native\n // top-layer containers opt back into the global popover.\n return useTopLayer ? 'global' : null;\n }\n\n protected refreshPanel(): void {\n this.transition?.refresh();\n }\n\n protected onTriggerKey(event: KeyboardEvent): void {\n if (!['ArrowDown', 'ArrowUp', 'Escape'].includes(event.key)) return;\n event.preventDefault();\n if (event.key === 'Escape') {\n this.close();\n return;\n }\n this.focusOnOpen = event.key === 'ArrowUp' ? 'last' : 'first';\n if (this.isOpen()) {\n const items = this.panelItems();\n (this.focusOnOpen === 'last' ? items[items.length - 1] : items[0])?.focus();\n this.focusOnOpen = null;\n } else this.open();\n }\n\n protected onPanelKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n return;\n }\n if (event.key === 'Tab') {\n this.close();\n return;\n }\n if ((event.target as HTMLElement)?.matches('input,textarea')) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.panelItems();\n if (!items.length) return;\n const current = items.indexOf(items[0].ownerDocument.activeElement as HTMLElement);\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : event.key === 'ArrowDown'\n ? (current + 1) % items.length\n : current < 0\n ? items.length - 1\n : (current - 1 + items.length) % items.length;\n event.preventDefault();\n items[next].focus();\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n const clickTarget = event.target as Node;\n if (this.originRef?.nativeElement.contains(clickTarget)) {\n return;\n }\n this.close();\n }\n\n protected selectOption(option: BxSelectOption<T>): void {\n if (option.disabled) return;\n this.updateValue(option.value);\n this.close();\n }\n\n protected onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n private trackPanelScroll(overlay: NonNullable<CdkConnectedOverlay['overlayRef']>, origin: HTMLElement): void {\n const view = origin.ownerDocument.defaultView;\n if (!view) return;\n this.disconnectScroll?.();\n this.zone.runOutsideAngular(() => {\n const reposition = (event: Event) => {\n const target = event.target;\n if (!overlay.hasAttached() || !(target === view || (target instanceof Node && target.contains(origin)))) return;\n const positionStrategy = overlay.getConfig().positionStrategy;\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) positionStrategy.reapplyLastPosition();\n else overlay.updatePosition();\n };\n view.addEventListener('scroll', reposition, { capture: true, passive: true });\n this.disconnectScroll = () => view.removeEventListener('scroll', reposition, true);\n });\n }\n\n private panelItems(): HTMLElement[] {\n return Array.from(this.connectedOverlay?.overlayRef?.overlayElement.querySelectorAll<HTMLElement>('.bx-select-menu-container button:not(:disabled)') ?? []);\n }\n\n private resolveText(textObj: ResolvableText | undefined): string {\n if (!textObj) return '';\n return isTextWithKey(textObj) ? (this.i18n?.translate(textObj.key) ?? textObj.key) : textObj;\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <button type=\"button\" role=\"combobox\" aria-haspopup=\"listbox\" cdkOverlayOrigin bxSurface #origin=\"cdkOverlayOrigin\" class=\"bx-select-trigger\"\n [class.is-invalid]=\"!!errorMessage\" [class.is-open]=\"isOpen()\" [class.is-floating]=\"isFloating()\"\n [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel() || resolvedLabel()\"\n [disabled]=\"isDisabled() || loading()\" (click)=\"toggleOpen()\" (keydown)=\"onTriggerKey($event)\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-controls]=\"isPanelAttached() ? inputId() + '-options' : null\">\n\n <div class=\"bx-select-container\">\n @if (label()) {\n <span class=\"bx-floating-label\">\n {{ resolvedLabel() }}\n @if (isFieldRequired()) { <span class=\"bx-field-required\">*</span> }\n </span>\n }\n\n <span class=\"bx-select-value\" [attr.title]=\"selectedOptionLabel() || resolvedPlaceholder()\" [class.is-placeholder]=\"internalValue() === null\">\n @if (internalValue() === null && isFloating()) {\n {{ resolvedPlaceholder() }}\n } @else {\n {{ selectedOptionLabel() }}\n }\n </span>\n </div>\n\n <bx-icon class=\"bx-select-caret\" name=\"chevron-down\" size=\"16\"></bx-icon>\n </button>\n\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"origin\" [cdkConnectedOverlayOpen]=\"isPanelAttached()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\" [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayScrollStrategy]=\"panelScrollStrategy\"\n [cdkConnectedOverlayUsePopover]=\"overlayPopoverLocation(origin.elementRef.nativeElement)\"\n [cdkConnectedOverlayWidth]=\"origin.elementRef.nativeElement.offsetWidth\"\n (overlayOutsideClick)=\"onOutsideClick($event)\" (attach)=\"onPanelAttach()\" (detach)=\"onPanelDetach()\" (positionChange)=\"refreshPanel()\">\n\n <div class=\"bx-select-panel\" bxSurface role=\"listbox\" tabindex=\"0\" [attr.aria-label]=\"resolvedLabel()\" [id]=\"inputId() + '-options'\" (keydown)=\"onPanelKey($event)\">\n\n @if (isSearchable()) {\n <div class=\"bx-select-search-container\">\n <bx-search-input #searchInput [placeholder]=\"resolvedSearchPlaceholder()\"\n (search)=\"onSearchChange($event)\" (keydown.enter)=\"$event.preventDefault()\">\n </bx-search-input>\n </div>\n }\n\n <div class=\"bx-select-menu-container\">\n @for (option of filteredOptions(); track option.value) {\n\n <bx-menu-item role=\"option\" [attr.aria-selected]=\"internalValue() === option.value\" [disabled]=\"option.disabled ?? false\" [wrapLabel]=\"true\" (action)=\"selectOption(option)\">\n <div class=\"bx-select-item-inner\">\n <div class=\"bx-select-check-placeholder\">\n @if (internalValue() === option.value) {\n <bx-icon name=\"check\" size=\"16\"></bx-icon>\n }\n </div>\n <span [title]=\"option.resolvedStr\">{{ option.resolvedStr }}</span>\n </div>\n </bx-menu-item>\n\n } @empty {\n <div class=\"bx-select-empty\">\n <span class=\"bx-empty-text\">{{ resolvedEmptyMessage() }}</span>\n </div>\n }\n </div>\n\n </div>\n </ng-template>\n\n</bx-form-field>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-slide-toggle',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField],\n templateUrl: './slide-toggle.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './slide-toggle.scss'\n})\nexport class SlideToggle extends BxBaseControl<boolean> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-slide-toggle-${uuidv4()}`);\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected onToggle(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.checked);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"checkbox\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\" [checked]=\"internalValue() === true\"\n (change)=\"onToggle($event)\" (blur)=\"onBlur()\">\n\n <div class=\"bx-slide-toggle-track\" bxSurface [class.is-checked]=\"internalValue() === true\" [class.is-invalid]=\"!!errorMessage\">\n <div class=\"bx-slide-toggle-thumb\"></div>\n </div>\n\n @if (resolvedLabel() || tooltip()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n\n\n </label>\n\n</bx-form-field>","import { afterEveryRender, afterNextRender, DestroyRef, Directive, ElementRef, HostListener, inject, NgZone } from '@angular/core';\nimport { observeGlassLighting, refreshGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { ThemingService } from '@filip.mazev/blocks/core';\n\n/** Glass styling for a native range, including reactive forms and programmatic values. */\n@Directive({ selector: 'input[type=range][bxSlider]', host: { class: 'bx-slider' } })\nexport class SliderDirective {\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly theme = inject(ThemingService);\n private shell?: HTMLSpanElement;\n private thumb?: HTMLSpanElement;\n\n constructor() {\n afterEveryRender(() => this.sync());\n const zone = inject(NgZone);\n const destroy = inject(DestroyRef);\n afterNextRender(() => {\n const input = this.element.nativeElement;\n const shell = input.ownerDocument.createElement('span');\n shell.className = 'bx-slider-shell';\n const thumb = input.ownerDocument.createElement('span');\n thumb.className = 'bx-slider-thumb';\n thumb.setAttribute('aria-hidden', 'true');\n input.before(shell);\n shell.append(input, thumb);\n this.shell = shell;\n this.thumb = thumb;\n this.sync();\n const place = () => {\n shell.style.setProperty('--bx-slider-center-y', `${input.offsetTop + input.offsetHeight / 2}px`);\n shell.style.setProperty('--bx-slider-track-start', `${input.offsetLeft}px`);\n shell.style.setProperty('--bx-slider-track-width', `${input.offsetWidth}px`);\n refreshGlassLighting(thumb);\n };\n const resize = new ResizeObserver(place);\n zone.runOutsideAngular(() => {\n resize.observe(input);\n resize.observe(shell);\n place();\n });\n const stop = zone.runOutsideAngular(() =>\n observeGlassLighting(\n thumb,\n (light) => {\n const reflected = light.reflectionStrength > light.strength;\n const strength = reflected ? light.reflectionStrength : light.strength;\n if (strength <= 0.04) {\n thumb.style.removeProperty('--bx-slider-light-color');\n thumb.style.removeProperty('--bx-slider-light-strength');\n } else {\n thumb.style.setProperty('--bx-slider-light-color', reflected ? light.reflection : light.color);\n thumb.style.setProperty('--bx-slider-light-strength', String(strength));\n }\n thumb.style.setProperty('--bx-slider-light-x', `${reflected ? light.reflectionX : light.x}%`);\n thumb.style.setProperty('--bx-slider-light-y', `${reflected ? light.reflectionY : light.y}%`);\n },\n input\n )\n );\n destroy.onDestroy(() => {\n resize.disconnect();\n stop();\n shell.replaceWith(input);\n this.shell = this.thumb = undefined;\n });\n });\n }\n\n @HostListener('input')\n protected sync(): void {\n const input = this.element.nativeElement;\n const min = input.min === '' ? 0 : Number(input.min);\n const max = input.max === '' ? 100 : Number(input.max);\n const progress = max > min ? Math.max(0, Math.min(100, ((input.valueAsNumber - min) / (max - min)) * 100)) : 0;\n const value = `${Number.isFinite(progress) ? progress : 0}%`;\n if (input.style.getPropertyValue('--bx-slider-progress') !== value) input.style.setProperty('--bx-slider-progress', value);\n if (this.shell) {\n const position = String((input.matches(':dir(rtl)') ? 100 - (Number.isFinite(progress) ? progress : 0) : Number.isFinite(progress) ? progress : 0) / 100);\n if (this.shell.style.getPropertyValue('--bx-slider-position') !== position) {\n this.shell.style.setProperty('--bx-slider-position', position);\n if (this.thumb) refreshGlassLighting(this.thumb);\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { BxSurfaceDirective } from "@filip.mazev/blocks/effects";
2
2
  import * as i0 from "@angular/core";
3
- import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, HostListener, InjectionToken, NgZone, PLATFORM_ID, ViewContainerRef, computed, effect, forwardRef, inject, input, output, signal } from "@angular/core";
3
+ import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, HostListener, InjectionToken, NgZone, PLATFORM_ID, ViewContainerRef, booleanAttribute, computed, effect, forwardRef, inject, input, output, signal } from "@angular/core";
4
4
  import { BX_I18N, BxA11yService, BxOverlayPositionService, BxShortcutService, inheritOverlayTheme, isTextWithKey, uuidv4 } from "@filip.mazev/blocks/core";
5
5
  import { Icon } from "@filip.mazev/blocks/icons";
6
6
  import { Overlay } from "@angular/cdk/overlay";
@@ -709,10 +709,11 @@ var DropdownDirective = class DropdownDirective {
709
709
  const pane = this.overlayRef?.overlayElement;
710
710
  if (!pane) return [];
711
711
  return Array.from(pane.querySelectorAll("button, a[href], [role=\"menuitem\"]")).filter((item) => {
712
- if (item.matches(":disabled, [disabled], [aria-disabled=\"true\"], .is-disabled")) return false;
712
+ if (item.matches(":disabled, [disabled], [aria-disabled=\"true\"]") || item.closest("[aria-disabled=\"true\"]")) return false;
713
713
  if (item.closest("[hidden], [inert], [aria-hidden=\"true\"]")) return false;
714
+ if (item.tabIndex < 0 && !item.hasAttribute("tabindex")) return false;
714
715
  const style = item.ownerDocument.defaultView?.getComputedStyle(item);
715
- return style?.display !== "none" && style?.visibility !== "hidden" && item.getClientRects().length > 0;
716
+ return !!style && style.display !== "none" && style.visibility !== "hidden" && item.getClientRects().length > 0;
716
717
  });
717
718
  }
718
719
  navigateMenu(event) {
@@ -872,6 +873,49 @@ var ContextMenuDirective = class ContextMenuDirective {
872
873
  zone = inject(NgZone);
873
874
  vcr = inject(ViewContainerRef);
874
875
  bxContextMenu = input.required(...ngDevMode ? [{ debugName: "bxContextMenu" }] : /* istanbul ignore next */ []);
876
+ bxContextMenuLongPress = input(true, {
877
+ ...ngDevMode ? { debugName: "bxContextMenuLongPress" } : /* istanbul ignore next */ {},
878
+ transform: booleanAttribute
879
+ });
880
+ onPointerDown = (event) => {
881
+ this.lastPointerType = event.pointerType;
882
+ this.cancelTouchPress();
883
+ if (event.isPrimary) this.clearTouchGuard();
884
+ if (event.pointerType !== "touch" || !event.isPrimary || event.button !== 0 || !this.bxContextMenuLongPress() || this.hasNativeTouchAction(event)) return;
885
+ const doc = this.elementRef.nativeElement.ownerDocument;
886
+ const win = doc.defaultView;
887
+ if (!win || this.hasTextSelection()) return;
888
+ const press = {
889
+ pointerId: event.pointerId,
890
+ x: event.clientX,
891
+ y: event.clientY,
892
+ timer: 0,
893
+ opened: false,
894
+ events: new AbortController()
895
+ };
896
+ this.touchPress = press;
897
+ const options = {
898
+ capture: true,
899
+ passive: true,
900
+ signal: press.events.signal
901
+ };
902
+ const finish = () => this.cancelTouchPress();
903
+ doc.addEventListener("pointermove", (move) => {
904
+ if (move.pointerId === press.pointerId && !press.opened && Math.hypot(move.clientX - press.x, move.clientY - press.y) > 10) finish();
905
+ }, options);
906
+ for (const type of ["pointerup", "pointercancel"]) doc.addEventListener(type, (end) => {
907
+ if (end.pointerId === press.pointerId) finish();
908
+ }, options);
909
+ doc.addEventListener("pointerdown", (next) => {
910
+ if (next.pointerId !== press.pointerId) finish();
911
+ }, options);
912
+ doc.addEventListener("scroll", finish, options);
913
+ doc.addEventListener("visibilitychange", () => {
914
+ if (doc.hidden) finish();
915
+ }, options);
916
+ win.addEventListener("blur", finish, { signal: press.events.signal });
917
+ press.timer = win.setTimeout(() => this.zone.run(() => this.openTouchMenu(press)), 500);
918
+ };
875
919
  overlayRef = null;
876
920
  transition;
877
921
  point;
@@ -879,14 +923,36 @@ var ContextMenuDirective = class ContextMenuDirective {
879
923
  disconnectLighting;
880
924
  subscriptions = new Subscription();
881
925
  revision = 0;
926
+ touchPress;
927
+ touchGuard;
928
+ touchGuardTimer;
929
+ lastPointerType = "";
882
930
  constructor() {
931
+ const source = this.elementRef.nativeElement;
932
+ if (source.ownerDocument.defaultView) this.zone.runOutsideAngular(() => source.addEventListener("pointerdown", this.onPointerDown, { passive: true }));
883
933
  inject(DestroyRef).onDestroy(() => {
884
934
  ++this.revision;
935
+ source.removeEventListener("pointerdown", this.onPointerDown);
936
+ this.cancelTouchPress();
937
+ this.clearTouchGuard();
885
938
  this.dispose();
886
939
  });
887
940
  }
888
941
  open(event) {
942
+ if (event.type === "contextmenu" && this.lastPointerType === "touch") {
943
+ const press = this.touchPress;
944
+ if (!press) return;
945
+ if (!this.bxContextMenuLongPress() || this.hasNativeTouchAction(event) || this.hasTextSelection()) {
946
+ this.cancelTouchPress();
947
+ return;
948
+ }
949
+ event.preventDefault();
950
+ this.openTouchMenu(press);
951
+ return;
952
+ }
889
953
  event.preventDefault();
954
+ this.cancelTouchPress();
955
+ this.clearTouchGuard();
890
956
  this.openAt(event.clientX, event.clientY);
891
957
  }
892
958
  close(restoreFocus = false) {
@@ -905,6 +971,9 @@ var ContextMenuDirective = class ContextMenuDirective {
905
971
  onKey(event) {
906
972
  if (event.key !== "ContextMenu" && !(event.shiftKey && event.key === "F10")) return;
907
973
  event.preventDefault();
974
+ this.lastPointerType = "";
975
+ this.cancelTouchPress();
976
+ this.clearTouchGuard();
908
977
  const rect = this.elementRef.nativeElement.getBoundingClientRect();
909
978
  this.openAt(rect.left + Math.min(24, rect.width / 2), rect.bottom);
910
979
  this.items()[0]?.focus();
@@ -913,6 +982,73 @@ var ContextMenuDirective = class ContextMenuDirective {
913
982
  const target = event.target;
914
983
  if (target && this.overlayRef?.overlayElement.contains(target) && target.closest("button, a, [role=\"menuitem\"]")) this.close();
915
984
  }
985
+ hasNativeTouchAction(event) {
986
+ const source = this.elementRef.nativeElement;
987
+ for (const node of event.composedPath()) if (node instanceof HTMLElement) {
988
+ if (node.isContentEditable || node.matches("input, textarea, select, :disabled, [aria-disabled=\"true\"], [inert]")) return true;
989
+ if (node === source) break;
990
+ }
991
+ return !!source.closest(":disabled, [aria-disabled=\"true\"], [inert]");
992
+ }
993
+ hasTextSelection() {
994
+ const source = this.elementRef.nativeElement;
995
+ const selection = source.ownerDocument.getSelection();
996
+ return !!selection && !selection.isCollapsed && (source.contains(selection.anchorNode) || source.contains(selection.focusNode));
997
+ }
998
+ openTouchMenu(press) {
999
+ if (this.touchPress !== press || press.opened) return;
1000
+ const source = this.elementRef.nativeElement;
1001
+ if (!this.bxContextMenuLongPress() || !source.isConnected || source.isContentEditable || source.closest(":disabled, [aria-disabled=\"true\"], [inert]") || this.hasTextSelection()) {
1002
+ this.cancelTouchPress();
1003
+ return;
1004
+ }
1005
+ press.opened = true;
1006
+ this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(press.timer);
1007
+ this.guardTouchRelease();
1008
+ this.openAt(press.x, press.y + 12);
1009
+ }
1010
+ cancelTouchPress() {
1011
+ const press = this.touchPress;
1012
+ if (!press) return;
1013
+ this.touchPress = void 0;
1014
+ const win = this.elementRef.nativeElement.ownerDocument.defaultView;
1015
+ win?.clearTimeout(press.timer);
1016
+ press.events.abort();
1017
+ if (press.opened && win) this.touchGuardTimer = win.setTimeout(() => this.clearTouchGuard(), 800);
1018
+ }
1019
+ guardTouchRelease() {
1020
+ this.clearTouchGuard();
1021
+ const doc = this.elementRef.nativeElement.ownerDocument;
1022
+ const guard = new AbortController();
1023
+ this.touchGuard = guard;
1024
+ const options = {
1025
+ capture: true,
1026
+ signal: guard.signal
1027
+ };
1028
+ doc.addEventListener("click", (event) => {
1029
+ if (event.detail === 0) return;
1030
+ event.preventDefault();
1031
+ event.stopImmediatePropagation();
1032
+ this.clearTouchGuard();
1033
+ }, options);
1034
+ doc.addEventListener("contextmenu", (event) => {
1035
+ event.preventDefault();
1036
+ event.stopImmediatePropagation();
1037
+ }, options);
1038
+ doc.addEventListener("pointerdown", (event) => {
1039
+ if (event.isPrimary) this.clearTouchGuard();
1040
+ }, {
1041
+ ...options,
1042
+ passive: true
1043
+ });
1044
+ doc.addEventListener("keydown", () => this.clearTouchGuard(), options);
1045
+ }
1046
+ clearTouchGuard() {
1047
+ this.touchGuard?.abort();
1048
+ this.touchGuard = void 0;
1049
+ this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(this.touchGuardTimer);
1050
+ this.touchGuardTimer = void 0;
1051
+ }
916
1052
  openAt(x, y) {
917
1053
  this.dispose();
918
1054
  ++this.revision;
@@ -1018,13 +1154,22 @@ var ContextMenuDirective = class ContextMenuDirective {
1018
1154
  type: ContextMenuDirective,
1019
1155
  isStandalone: true,
1020
1156
  selector: "[bxContextMenu]",
1021
- inputs: { bxContextMenu: {
1022
- classPropertyName: "bxContextMenu",
1023
- publicName: "bxContextMenu",
1024
- isSignal: true,
1025
- isRequired: true,
1026
- transformFunction: null
1027
- } },
1157
+ inputs: {
1158
+ bxContextMenu: {
1159
+ classPropertyName: "bxContextMenu",
1160
+ publicName: "bxContextMenu",
1161
+ isSignal: true,
1162
+ isRequired: true,
1163
+ transformFunction: null
1164
+ },
1165
+ bxContextMenuLongPress: {
1166
+ classPropertyName: "bxContextMenuLongPress",
1167
+ publicName: "bxContextMenuLongPress",
1168
+ isSignal: true,
1169
+ isRequired: false,
1170
+ transformFunction: null
1171
+ }
1172
+ },
1028
1173
  host: { listeners: {
1029
1174
  "contextmenu": "open($event)",
1030
1175
  "keydown": "onKey($event)",
@@ -1052,6 +1197,14 @@ i0.ɵɵngDeclareClassMetadata({
1052
1197
  required: true
1053
1198
  }]
1054
1199
  }],
1200
+ bxContextMenuLongPress: [{
1201
+ type: i0.Input,
1202
+ args: [{
1203
+ isSignal: true,
1204
+ alias: "bxContextMenuLongPress",
1205
+ required: false
1206
+ }]
1207
+ }],
1055
1208
  open: [{
1056
1209
  type: HostListener,
1057
1210
  args: ["contextmenu", ["$event"]]