@alyle/ui
Version:
Minimal Design, a set of components for Angular
1 lines • 80.6 kB
Source Map (JSON)
{"version":3,"file":"alyle-ui-select.mjs","sources":["../../../lib/select/select-errors.ts","../../../lib/select/select.ts","../../../lib/select/select.html","../../../lib/select/option.html","../../../lib/select/select.module.ts","../../../lib/select/alyle-ui-select.ts"],"sourcesContent":["/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nexport function getLySelectNonArrayValueError(): Error {\n return Error('Value must be an array in multiple-selection mode.');\n}\n\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nexport function getLySelectNonFunctionValueError(): Error {\n return Error('`compareWith` must be a function.');\n}\n","import {\n animate,\n keyframes,\n style,\n transition,\n trigger\n } from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n forwardRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n TemplateRef,\n ViewChild,\n NgZone,\n OnChanges,\n QueryList,\n ContentChildren,\n AfterContentInit,\n Directive,\n ContentChild,\n Output,\n EventEmitter,\n isDevMode,\n } from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n NgForm\n } from '@angular/forms';\nimport { LyField, LyFieldControlBase, STYLES as FIELD_STYLES } from '@alyle/ui/field';\nimport {\n LyOverlay,\n LyTheme2,\n OverlayFactory,\n shadowBuilder,\n ThemeVariables,\n CanDisableCtor,\n mixinDisableRipple,\n mixinTabIndex,\n LyRippleService,\n XPosition,\n YPosition,\n Dir,\n st2c,\n StyleCollection,\n LyClasses,\n StyleTemplate,\n ThemeRef,\n StyleRenderer,\n Style,\n WithStyles,\n LyOverlayPosition } from '@alyle/ui';\nimport { Subject, Observable, defer, merge } from 'rxjs';\nimport { take, takeUntil, startWith, switchMap, filter, mapTo, distinctUntilChanged } from 'rxjs/operators';\nimport { Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { FocusableOption, FocusOrigin, ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { ENTER, SPACE, hasModifierKey, DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, A, ESCAPE } from '@angular/cdk/keycodes';\nimport { coerceNumberProperty, coerceBooleanProperty, BooleanInput } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { getLySelectNonFunctionValueError, getLySelectNonArrayValueError } from './select-errors';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\n\n\nexport interface LySelectTheme {\n /** Styles for Select Component */\n root?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)>\n | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);\n}\n\nexport interface LySelectVariables {\n select?: LySelectTheme;\n}\n\nconst DEFAULT_DISABLE_RIPPLE = false;\nconst STYLE_PRIORITY = -2;\n\nexport const STYLES = (theme: ThemeVariables & LySelectVariables, ref: ThemeRef) => {\n ref.renderStyleSheet(FIELD_STYLES);\n const field = ref.selectorsOf(FIELD_STYLES);\n const select = ref.selectorsOf(STYLES);\n const { after } = theme;\n return {\n $priority: STYLE_PRIORITY,\n $name: LySelect.и,\n root: () => (_className: string) => `${_className}{display:block;position:relative;padding-${after}:1em;min-height:1em;-webkit-tap-highlight-color:transparent;}${st2c((\n (theme.select\n && theme.select.root\n && (theme.select.root instanceof StyleCollection\n ? theme.select.root.setTransformer(fn => fn(select))\n : theme.select.root(select))\n )), `${_className}`)}`,\n container: (_className: string) => `${_className}{background:${theme.background.primary.default};border-radius:2px;box-shadow:${shadowBuilder(4)};display:block;transform-origin:inherit;pointer-events:all;overflow:auto;max-height:256px;}`,\n valueText: (_className: string) => `${_className}{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}`,\n option: (_className: string) => `${_className}{display:flex;font-family:${theme.typography.fontFamily};color:${theme.text.default};-webkit-tap-highlight-color:transparent;background-color:rgba(0,0,0,0);border:0;padding:0 1em;margin:0;outline:none;box-sizing:border-box;position:relative;justify-content:flex-start;align-items:center;align-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:1.125;height:3em;cursor:pointer;}`,\n optionActive: (_className: string) => `${_className}{background:${theme.hover};}`,\n optionText: (_className: string) => `ly-checkbox ~ ${_className}{display:flex;align-items:inherit;align-content:inherit;}`,\n content: (_className: string) => `${_className}{padding:0;display:flex;justify-content:inherit;align-items:inherit;align-content:inherit;width:100%;height:100%;box-sizing:border-box;}`,\n /** Style for field */\n _cursorPointer: () => (_className: string) => `${_className}:not(${field.disabled}) ${field.container}{cursor:pointer;}`,\n };\n};\n\n/** Change event object that is emitted when the select value has changed. */\nexport class LySelectChange {\n constructor(\n /** Reference to the select that emitted the change event. */\n public source: LySelect,\n /** Current value of the select that emitted the event. */\n public value: any) { }\n}\n\n/** @docs-private */\nconst ANIMATIONS = [\n trigger('selectEnter', [\n transition('void => in', [\n animate('125ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n style({\n opacity: 0,\n transform: 'scaleY(0.9)'\n }),\n style({\n opacity: 1,\n transform: 'scaleY(1)'\n })\n ]))\n ]),\n transition('* => void', animate('100ms 25ms linear', style({ opacity: 0 })))\n ]),\n];\n\n/** @docs-private */\nexport class LySelectBase { }\n/** @docs-private */\nexport const LySelectMixinBase = mixinTabIndex(LySelectBase as CanDisableCtor);\n\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\n@Directive({\n selector: 'ly-select-trigger',\n standalone: false\n})\nexport class LySelectTrigger { }\n\n\n@Component({\n selector: 'ly-select',\n templateUrl: 'select.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'lySelect',\n host: {\n '[attr.tabindex]': 'tabIndex',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n },\n animations: [...ANIMATIONS],\n inputs: ['tabIndex'],\n providers: [\n StyleRenderer,\n { provide: LyFieldControlBase, useExisting: LySelect }\n ],\n standalone: false\n})\nexport class LySelect\n extends LySelectMixinBase\n implements ControlValueAccessor, LyFieldControlBase, OnInit, DoCheck, AfterContentInit, OnDestroy {\n /** @docs-private */\n static readonly и = 'LySelect';\n /** @docs-private */\n readonly classes = this.sRenderer.renderSheet(STYLES);\n /** @internal */\n _selectionModel: SelectionModel<LyOption>;\n /** @internal */\n _value: any;\n\n /** The cached font-size of the trigger element. */\n _triggerFontSize = 0;\n\n private _overlayRef: OverlayFactory | null;\n protected _disabled = false;\n protected _required = false;\n protected _placeholder: string;\n readonly stateChanges: Subject<void> = new Subject<void>();\n private _hasDisabledClass?: boolean;\n private _errorClass?: string;\n private _form: NgForm | FormGroupDirective | null = this._parentForm || this._parentFormGroup;\n private _multiple: boolean;\n private _opened: boolean;\n private _valueKey: (opt: unknown) => unknown = same;\n private _previousOffsetY = 0;\n _focused: boolean = false;\n errorState: boolean = false;\n\n /**\n * Keeps track of the previous form control assigned to the select.\n * Used to detect if it has changed.\n */\n private _previousControl: AbstractControl | null | undefined;\n\n /** Manages keyboard events for options in the panel. */\n _keyManager: ActiveDescendantKeyManager<LyOption>;\n\n /** Emits when the panel element is finished transforming in. */\n _panelDoneAnimatingStream = new Subject<{state: string, overlay: OverlayFactory }>();\n\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n /** Emits whenever the component is destroyed. */\n private readonly _destroy = new Subject<void>();\n\n /** Combined stream of all of the child options' change events. */\n readonly optionSelectionChanges: Observable<LyOptionSelectionChange> = defer(() => {\n const options = this.options;\n\n if (options) {\n return options.changes.pipe(\n startWith(options),\n switchMap(() => merge(...options.map(option => option.onSelectionChange)))\n );\n }\n\n return this._ngZone.onStable\n .pipe(take(1), switchMap(() => this.optionSelectionChanges));\n }) as Observable<LyOptionSelectionChange>;\n\n @ViewChild('templateRef') templateRef: TemplateRef<any>;\n @ViewChild('valueText') valueTextDivRef: ElementRef<HTMLDivElement>;\n /** @internal */\n @ViewChild(forwardRef(() => LyOption)) _options: QueryList<LyOption>;\n @ContentChildren(forwardRef(() => LyOption), { descendants: true }) options: QueryList<LyOption>;\n @ContentChild(LySelectTrigger) customTrigger: LySelectTrigger;\n\n /** Event emitted when the select panel has been toggled. */\n @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the select has been opened. */\n @Output('opened') readonly _openedStream: Observable<void> =\n this.openedChange.pipe(filter(o => o), mapTo(null!));\n\n /** Event emitted when the select has been closed. */\n @Output('closed') readonly _closedStream: Observable<void> =\n this.openedChange.pipe(filter(o => !o), mapTo(null!));\n\n /** Event emitted when the selected value has been changed by the user. */\n @Output() readonly selectionChange: EventEmitter<LySelectChange> = new EventEmitter<LySelectChange>();\n\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * The registered callback function called when a change event occurs on the input element.\n */\n onChange = (_: any) => {};\n\n /**\n * The registered callback function called when a blur event occurs on the input element.\n */\n onTouched = () => {};\n\n _onFocus() {\n if (!this.disabled) {\n this._focused = true;\n this.stateChanges.next();\n }\n }\n _onBlur() {\n this._focused = false;\n if (!this.disabled && !this._opened) {\n this.onTouched();\n this._cd.markForCheck();\n this.stateChanges.next();\n }\n }\n\n /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\n @Input()\n get typeaheadDebounceInterval(): number { return this._typeaheadDebounceInterval; }\n set typeaheadDebounceInterval(value: number) {\n const newVal = coerceNumberProperty(value);\n if (this._typeaheadDebounceInterval !== newVal && this._keyManager) {\n this._typeaheadDebounceInterval = newVal;\n this._keyManager.withTypeAhead(newVal);\n }\n }\n private _typeaheadDebounceInterval: number;\n\n /** Value of the select control. */\n @Input()\n get value(): any { return this._value; }\n set value(newValue: any) {\n if (newValue !== this._value) {\n if (this.options) {\n this._setSelectionByValue(newValue);\n }\n\n this._value = newValue;\n }\n }\n\n /** Whether the input is disabled. */\n @Input()\n set disabled(val: BooleanInput) {\n if (val !== this._disabled) {\n this._disabled = coerceBooleanProperty(val);\n if (this._field) {\n if (!val && this._hasDisabledClass) {\n this._renderer.removeClass(this._field._getHostElement(), this._field.classes.disabled);\n this._field.sRenderer.addClass(this.classes._cursorPointer);\n this._hasDisabledClass = undefined;\n } else if (val) {\n this._renderer.addClass(this._field._getHostElement(), this._field.classes.disabled);\n this._field.sRenderer.removeClass(this.classes._cursorPointer);\n this._hasDisabledClass = true;\n }\n }\n this.stateChanges.next();\n }\n }\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n\n @Input()\n set required(value: BooleanInput) {\n this._required = coerceBooleanProperty(value);\n }\n get required(): boolean { return this._required; }\n\n @Input()\n set multiple(value: BooleanInput) {\n this._multiple = coerceBooleanProperty(value);\n }\n get multiple(): boolean { return this._multiple; }\n\n /**\n * @deprecated has been deprecated in favor of `compareWith`\n */\n @Input()\n set valueKey(fn: (opt: unknown) => unknown) {\n this._valueKey = fn;\n console.warn('LySelect: `[valueKey]` has been deprecated in favor of `[compareWith]`');\n }\n get valueKey(): (opt: unknown) => unknown { return this._valueKey; }\n\n @Input()\n set placeholder(val: string) {\n this._placeholder = val;\n }\n get placeholder(): string { return this._placeholder; }\n\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n @Input()\n get compareWith() { return this._compareWith; }\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof (fn as any) !== 'function' && isDevMode()) {\n throw getLySelectNonFunctionValueError();\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n\n /**\n * Function used to sort the values in a select in multiple mode.\n * Follows the same logic as `Array.prototype.sort`.\n */\n @Input() sortComparator: (a: LyOption, b: LyOption, options: LyOption[]) => number;\n\n get focused() {\n return this._focused;\n }\n\n get empty() {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n\n get floatingLabel() {\n return this._opened ? true : !this.empty;\n }\n\n /** The value displayed in the trigger. */\n get triggerValue(): string {\n if (this._multiple) {\n const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n\n if (this._theme.variables.direction === Dir.rtl) {\n selectedOptions.reverse();\n }\n\n return selectedOptions.join(', ');\n }\n\n return this._selectionModel.selected[0].viewValue;\n }\n\n /** Current selecteds */\n get selected(): LyOption | LyOption[] {\n const selected = this._selectionModel?.selected;\n return this.multiple ? (selected || []) : selected[0];\n }\n\n constructor(private _theme: LyTheme2,\n readonly sRenderer: StyleRenderer,\n private _renderer: Renderer2,\n private _el: ElementRef,\n private _overlay: LyOverlay,\n /** @internal */\n @Optional() public _field: LyField,\n /** @internal */\n public _cd: ChangeDetectorRef,\n private _ngZone: NgZone,\n private _viewportRuler: ViewportRuler,\n /** @docs-private */\n @Optional() @Self() public ngControl: NgControl,\n @Optional() private _parentForm: NgForm,\n @Optional() private _parentFormGroup: FormGroupDirective) {\n super();\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n this._field?.sRenderer.addClass(this.classes._cursorPointer);\n\n }\n\n ngOnInit() {\n this._selectionModel = new SelectionModel<LyOption>(this.multiple);\n this.stateChanges.next();\n\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this._panelDoneAnimatingStream\n .pipe(\n distinctUntilChanged((prev, curr) => prev.state === curr.state),\n takeUntil(this._destroy)\n )\n .subscribe((re) => {\n if (this._opened) {\n this.openedChange.emit(true);\n }\n if (re.state === 'void') {\n if (!re.overlay.isDestroyed) {\n re.overlay.destroy();\n this.openedChange.emit(false);\n this.stateChanges.next();\n this._cd.markForCheck();\n }\n }\n });\n\n const ngControl = this.ngControl;\n\n // update styles on disabled\n if (ngControl && ngControl.statusChanges) {\n ngControl.statusChanges.pipe(takeUntil(this._destroy)).subscribe(() => {\n this.disabled = !!ngControl.disabled;\n });\n }\n\n // apply class {selectArrow} to `<select>`\n this._renderer.addClass(this._field._getHostElement(), this._field.classes.selectArrow);\n\n // apply default styles\n this._renderer.addClass(this._el.nativeElement, this._field.classes.inputNative);\n this._renderer.addClass(this._el.nativeElement, this.classes.root);\n }\n\n ngDoCheck() {\n const ngControl = this.ngControl;\n if (ngControl) {\n // The disabled state might go out of sync if the form group is swapped out. See #17860.\n if (this._previousControl !== ngControl.control) {\n if (\n this._previousControl !== undefined &&\n ngControl.disabled !== null &&\n ngControl.disabled !== this.disabled\n ) {\n this.disabled = ngControl.disabled;\n }\n\n this._previousControl = ngControl.control;\n }\n\n const oldVal = this.errorState;\n const newVal = !!(this.ngControl && this.ngControl.invalid && (this.ngControl.touched || (this._form && this._form.submitted)));\n if (newVal !== oldVal) {\n this.errorState = newVal;\n if (this._field) {\n const errorClass = this._field.classes.errorState;\n if (newVal) {\n this._renderer.addClass(this._field._getHostElement(), errorClass);\n this._errorClass = errorClass;\n } else if (this._errorClass) {\n this._renderer.removeClass(this._field._getHostElement(), errorClass);\n this._errorClass = undefined;\n }\n this.stateChanges.next();\n }\n }\n }\n }\n\n ngAfterContentInit() {\n this._initKeyManager();\n\n this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n\n this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n event.added.forEach(option => option.select());\n event.removed.forEach(option => option.deselect());\n });\n\n Promise.resolve().then(() => {\n this.value = this.ngControl ? this.ngControl.value : this._value;\n this.stateChanges.next();\n this._cd.markForCheck();\n });\n this._keyManager.change.pipe(takeUntil(this._destroy)).subscribe(() => {\n if (!this._opened && !this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n\n ngOnDestroy() {\n this._destroy.next();\n this._destroy.complete();\n this.stateChanges.complete();\n this._panelDoneAnimatingStream.complete();\n if (this._overlayRef) {\n this._overlayRef.destroy();\n this._overlayRef = null;\n }\n }\n\n open() {\n if (this.disabled || !this.options || !this.options.length || this._opened) {\n return;\n }\n if (this._overlayRef) {\n this._overlayRef.destroy();\n }\n this._opened = true;\n const overlayRef = this._overlay.create(this.templateRef, {\n $implicit: () => overlayRef\n }, {\n styles: {\n top: 0,\n left: 0,\n pointerEvents: null\n },\n fnDestroy: () => {\n this._closeOverlay(overlayRef);\n keydownEventsSuscription.unsubscribe();\n this.focus();\n },\n onResizeScroll: this._updatePlacement.bind(this)\n });\n this._overlayRef = overlayRef;\n\n const keydownEvents = overlayRef.keydownEvents();\n const keydownEventsSuscription = keydownEvents.subscribe((event) => {\n if (event.keyCode === ESCAPE) {\n this._closeOverlay(overlayRef);\n keydownEventsSuscription.unsubscribe();\n }\n });\n\n this._keyManager.withHorizontalOrientation(null);\n this._triggerFontSize = parseInt(getComputedStyle(this._getHostElement()).fontSize || '0');\n this._highlightCorrectOption();\n this._cd.markForCheck();\n this.stateChanges.next();\n this._ngZone.onStable.pipe(\n take(1)\n ).subscribe(() => this._updatePlacement(true));\n }\n\n close() {\n const overlayRef = this._overlayRef;\n if (overlayRef) {\n this._overlayRef = null;\n this._closeOverlay(overlayRef);\n }\n }\n\n private _closeOverlay(overlay?: OverlayFactory | null) {\n const overlayRef = overlay;\n if (overlayRef && !overlay.isDestroyed) {\n this._opened = false;\n this._keyManager.withHorizontalOrientation(this._theme.variables.direction);\n overlayRef.detach();\n this._cd.markForCheck();\n this.onTouched();\n // Make sure to destroy the overlayRef\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n overlayRef.destroy();\n }, 250);\n });\n }\n }\n\n /** @docs-private */\n onContainerClick() {\n this.focus();\n this.open();\n }\n\n /** Focuses the select element. */\n focus(options?: FocusOptions): void {\n this._getHostElement().focus(options);\n }\n\n _getHostElement() {\n return this._el.nativeElement;\n }\n\n /**\n * Sets the \"value\" property on the input element.\n *\n * @param value The checked value\n */\n writeValue(value: any): void {\n this.value = value;\n }\n\n /**\n * Registers a function called when the control value changes.\n *\n * @param fn The callback function\n */\n registerOnChange(fn: (value: any) => any): void {\n this.onChange = (_valueString: string) => {\n fn(this.value);\n };\n }\n\n /**\n * Registers a function called when the control is touched.\n *\n * @param fn The callback function\n */\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._cd.markForCheck();\n this.stateChanges.next();\n }\n\n /** Handles all keydown events on the select. */\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n this._opened ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n\n /** Handles keyboard events while the select is closed. */\n private _handleClosedKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW ||\n keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n\n // Open the select on ALT + arrow key to match the native <select>\n if (!manager.isTyping() && (isOpenKey && !hasModifierKey(event)) ||\n ((this.multiple || event.altKey) && isArrowKey)) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n } else if (!this.multiple) {\n manager.onKeydown(event);\n }\n }\n\n /** Handles keyboard events when the selected is open. */\n private _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n const isTyping = manager.isTyping();\n\n if (isArrowKey && event.altKey) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.close();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (!isTyping && (keyCode === ENTER || keyCode === SPACE) && manager.activeItem &&\n !hasModifierKey(event)) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n } else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n\n this.options.forEach(option => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n } else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n\n manager.onKeydown(event);\n\n if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem &&\n manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n\n private _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl) {\n this._value = this.ngControl.value;\n }\n\n this._setSelectionByValue(this._value);\n this.stateChanges.next();\n });\n }\n\n /**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n */\n private _setSelectionByValue(value: any | any[]): void {\n if (this.multiple && value) {\n if (!Array.isArray(value) && isDevMode()) {\n throw getLySelectNonArrayValueError();\n }\n\n this._selectionModel.clear();\n value.forEach((currentValue: any) => this._selectValue(currentValue));\n this._sortValues();\n } else {\n this._selectionModel.clear();\n const correspondingOption = this._selectValue(value);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManager.updateActiveItem(correspondingOption);\n } else if (!this._opened) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManager.updateActiveItem(-1);\n }\n }\n\n this._cd.markForCheck();\n }\n\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n private _selectValue(value: any): LyOption | undefined {\n const correspondingOption = this.options.find((option: LyOption) => {\n if (this._valueKey !== same) {\n return this.valueKey(option.value) === this.valueKey(value);\n }\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n } catch (error) {\n if (isDevMode()) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n\n return correspondingOption;\n }\n\n private _updatePlacement(needAutoscroll: boolean) {\n const hostOverlay = this._overlayRef!.containerElement;\n const container = hostOverlay.querySelector('div')!;\n const triggerFontSize = this._triggerFontSize;\n const { nativeElement } = this.valueTextDivRef;\n let panelWidth: number;\n\n if (this.multiple) {\n panelWidth = nativeElement.offsetWidth + triggerFontSize * 4;\n } else {\n panelWidth = nativeElement.offsetWidth + triggerFontSize * 2;\n }\n\n\n // reset height & width\n this._renderer.setStyle(container, 'height', 'initial');\n this._renderer.setStyle(container, 'width', `${panelWidth}px`);\n\n\n let selectedElement: HTMLElement | null = this._selectionModel.isEmpty()\n ? hostOverlay.querySelector('ly-option')\n : this._selectionModel.selected[0]._getHostElement() as HTMLElement;\n\n if (!selectedElement) {\n selectedElement = (hostOverlay.firstElementChild!.firstElementChild! || hostOverlay.firstElementChild!) as HTMLElement;\n }\n\n const offset = {\n y: -(-(nativeElement.offsetHeight / 2) + selectedElement.offsetTop + (selectedElement.offsetHeight / 2)),\n x: -triggerFontSize\n };\n\n // scroll to selected option\n if (container.scrollHeight !== container.offsetHeight) {\n if (needAutoscroll) {\n container.scrollTop = container.scrollTop\n - (container.offsetHeight / 2 - (selectedElement.offsetTop - container.scrollTop)) + selectedElement.offsetHeight / 2;\n offset.y = container.scrollTop + offset.y;\n } else {\n offset.y = this._previousOffsetY;\n }\n }\n if (this.multiple) {\n offset.x -= 24;\n }\n\n this._previousOffsetY = offset.y;\n const position = new LyOverlayPosition(this._theme, this._viewportRuler, nativeElement, hostOverlay)\n .setYAnchor(YPosition.above)\n .setXAnchor(XPosition.before)\n .setXAxis(XPosition.after)\n .setYAxis(YPosition.below)\n .setXOffset(offset.x)\n .setYOffset(offset.y)\n .build();\n if (needAutoscroll) {\n const triggerRect = position.triggerRect;\n const newScrollTop = Math.round((\n selectedElement.offsetTop\n + (selectedElement.offsetHeight / 2))\n - (triggerRect.top + (triggerRect.height / 2) - position.rawY));\n const scrollTopForOptionAtEnd = (selectedElement.offsetTop + selectedElement.offsetHeight) - container.offsetHeight;\n if (newScrollTop > selectedElement.offsetTop) {\n container.scrollTop = selectedElement.offsetTop;\n } else if (scrollTopForOptionAtEnd > newScrollTop) {\n container.scrollTop = scrollTopForOptionAtEnd;\n } else {\n container.scrollTop = newScrollTop;\n }\n }\n\n this._renderer.setStyle(hostOverlay, 'left', `${position.x}px`);\n this._renderer.setStyle(hostOverlay, 'top', `${position.y}px`);\n this._renderer.setStyle(container, 'width', position.width ? `${position.width}px` : `${panelWidth}px`);\n this._renderer.setStyle(container, 'height', position.height ? `${position.height}px` : `100%`);\n this._renderer.setStyle(hostOverlay, 'transform-origin', `${position.xo}px ${position.yo}px 0`);\n\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<LyOption>(this.options)\n .withTypeAhead(this._typeaheadDebounceInterval)\n .withVerticalOrientation()\n .withHorizontalOrientation(this._theme.variables.direction)\n .withHomeAndEnd()\n .withAllowedModifierKeys(['shiftKey']);\n\n this._keyManager.tabOut.pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this._opened) {\n // Select the active item when tabbing away. This is consistent with how the native\n // select behaves. Note that we only want to do this in single selection mode.\n if (!this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.close();\n }\n });\n\n this._keyManager.change.pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this._opened) {\n this._scrollActiveOptionIntoView();\n } else if (!this._opened && !this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n\n /** Sorts the selected values in the selected based on their order in the panel. */\n private _sortValues() {\n if (this.multiple) {\n const options = this.options.toArray();\n\n this._selectionModel.sort((a, b) => {\n return this.sortComparator ? this.sortComparator(a, b, options) :\n options.indexOf(a) - options.indexOf(b);\n });\n this.stateChanges.next();\n }\n }\n\n private _resetOptions(): void {\n const changedOrDestroyed = merge(this.options.changes, this._destroy);\n\n this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n this._onSelect(event.source, event.isUserInput);\n\n if (event.isUserInput && !this.multiple && this._opened) {\n this.close();\n this.focus();\n }\n });\n }\n\n /** Invoked when an option is clicked. */\n private _onSelect(option: LyOption, isUserInput: boolean): void {\n const wasSelected = this._selectionModel.isSelected(option);\n\n if (option.value == null && !this._multiple) {\n option.deselect();\n this._selectionModel.clear();\n\n if (this.value != null) {\n this._propagateChanges(option.value);\n }\n } else {\n if (wasSelected !== option.selected) {\n option.selected ? this._selectionModel.select(option) :\n this._selectionModel.deselect(option);\n }\n\n if (isUserInput) {\n this._keyManager.setActiveItem(option);\n }\n\n if (this.multiple) {\n this._sortValues();\n if (isUserInput) {\n // In case the user selected the option with their mouse, we\n // want to restore focus back to the trigger, in order to\n // prevent the select keyboard controls from clashing with\n // the ones from `ly-option`.\n this.focus();\n }\n }\n }\n\n if (wasSelected !== this._selectionModel.isSelected(option)) {\n this._propagateChanges();\n }\n\n this.stateChanges.next();\n }\n\n /** Emits change event to set the model value. */\n private _propagateChanges(fallbackValue?: any): void {\n let valueToEmit: any = null;\n\n if (this.multiple) {\n valueToEmit = (this.selected as LyOption[]).map(option => option.value);\n } else {\n valueToEmit = this.selected ? (this.selected as LyOption).value : fallbackValue;\n }\n\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this.onChange(valueToEmit);\n this.selectionChange.emit(new LySelectChange(this, valueToEmit));\n this._cd.markForCheck();\n }\n\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first item instead.\n */\n private _highlightCorrectOption(): void {\n if (this._keyManager) {\n if (this.empty) {\n this._keyManager.setFirstItemActive();\n } else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n }\n\n /** Scrolls the active option into view. */\n private _scrollActiveOptionIntoView(): void {\n const el = this._overlayRef!.containerElement as HTMLElement;\n const container = el.querySelector('div')!;\n const activeOption = this._keyManager.activeItem!._getHostElement();\n // const containerRect = container.getBoundingClientRect();\n // const activeOptionRect = ;\n if (typeof activeOption.scrollIntoView === 'function') {\n if (container.scrollTop > activeOption.offsetTop) {\n container.scrollTop = activeOption.offsetTop;\n } else if (\n container.scrollTop + container.offsetHeight < activeOption.offsetTop + activeOption.offsetHeight\n ) {\n container.scrollTop = activeOption.offsetTop - container.offsetHeight + activeOption.offsetHeight;\n }\n }\n }\n\n}\n\n/** Event object emitted by LyOption when selected or deselected. */\nexport class LyOptionSelectionChange {\n constructor(\n /** Reference to the option that emitted the event. */\n public source: LyOption,\n /** Whether the change in the option's value was a result of a user action. */\n public isUserInput = false) { }\n}\n\n/** @docs-private */\nexport class LyOptionBase {\n constructor(\n public _theme: LyTheme2,\n public _ngZone: NgZone,\n public _platform: Platform\n ) { }\n}\n\n/** @docs-private */\nexport const LyOptionMixinBase = mixinDisableRipple(LyOptionBase);\n\n/**\n * @dynamic\n */\n@Component({\n selector: 'ly-option',\n templateUrl: './option.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'option',\n '(keydown)': '_handleKeydown($event)',\n '[attr.tabindex]': '_getTabIndex()',\n },\n inputs: [\n 'disableRipple'\n ],\n providers: [\n StyleRenderer\n ],\n standalone: false\n})\nexport class LyOption extends LyOptionMixinBase implements WithStyles, FocusableOption, OnInit, OnChanges {\n /** @docs-private */\n readonly classes = this._theme.addStyleSheet(STYLES, STYLE_PRIORITY);\n private _value: any;\n private _selected = false;\n private _disabled = false;\n\n @ViewChild('rippleContainer') _rippleContainer: ElementRef;\n\n /** Event emitted when the option is selected or deselected. */\n // tslint:disable-next-line: no-output-on-prefix\n @Output() readonly onSelectionChange = new EventEmitter<LyOptionSelectionChange>();\n\n @HostListener('click') _onClick() {\n this._selectViaInteraction();\n }\n\n /** Whether or not the option is currently selected. */\n get selected(): boolean { return this._selected; }\n\n /** Whether the wrapping component is in multiple selection mode. */\n get multiple() { return this._select && this._select.multiple; }\n\n /**\n * Tracks simple string values bound to the option element.\n */\n @Input('value')\n set value(value: any) {\n this._value = value;\n }\n get value() {\n return this._value;\n }\n\n /** Whether the option is disabled. */\n @Input()\n set disabled(value: any) {\n this._disabled = coerceBooleanProperty(value);\n }\n get disabled() {\n return this._disabled;\n }\n\n @Style<string | null>(\n value => (theme: ThemeVariables) => (_className: string) => `${_className}{color:${theme.colorOf(value)};}`\n )\n _selectedColor: string | null;\n\n /** The displayed value of the option. */\n get viewValue(): string {\n return ((this._getHostElement() as Element).textContent || '').trim();\n }\n\n /** The color of Select option */\n get _color() {\n return this._selected ? this._select._field.color : null;\n }\n\n /**\n * @deprecated use instead `selected`\n */\n get isSelected(): boolean {\n return this._selected;\n }\n\n constructor(readonly sRenderer: StyleRenderer,\n /** @internal */\n readonly _select: LySelect,\n private _el: ElementRef,\n /** @internal */\n public _rippleService: LyRippleService,\n _renderer: Renderer2,\n _theme: LyTheme2,\n /** @internal */\n public _cd: ChangeDetectorRef,\n _ngZone: NgZone,\n platform: Platform\n ) {\n super(_theme, _ngZone, platform);\n _renderer.addClass(_el.nativeElement, this.classes.option);\n this._triggerElement = _el;\n }\n\n ngOnInit() {\n if (this.disableRipple == null) {\n this.disableRipple = DEFAULT_DISABLE_RIPPLE;\n }\n }\n\n ngOnChanges() { }\n\n /** Applies the styles for an active item to this item. */\n setActiveStyles(): void {\n this.sRenderer.addClass(this.classes.optionActive);\n }\n\n /** Applies the styles for an inactive item to this item. */\n setInactiveStyles(): void {\n this.sRenderer.removeClass(this.classes.optionActive);\n }\n\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel(): string {\n return this.viewValue;\n }\n\n /** Selects the option. */\n select(): void {\n if (!this._selected) {\n this._selected = true;\n this._selectedColor = this._color;\n this._cd.markForCheck();\n this._emitSelectionChangeEvent();\n }\n }\n\n /** Deselects the option. */\n deselect(): void {\n if (this._selected) {\n this._selected = false;\n this._selectedColor = null;\n this._cd.markForCheck();\n this._emitSelectionChangeEvent();\n }\n }\n\n /** Sets focus onto this option. */\n focus(_origin?: FocusOrigin, options?: FocusOptions) {\n const element = this._getHostElement();\n\n if (typeof element.focus === 'function') {\n element.focus(options);\n }\n }\n\n /** Ensures the option is selected when activated from the keyboard. */\n _handleKeydown(event: KeyboardEvent): void {\n // tslint:disable-next-line: deprecation\n if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n this._selectViaInteraction();\n\n // Prevent the page from scrolling down and form submits.\n event.preventDefault();\n }\n }\n\n /**\n * `Selects the option while indicating the selection came from the user. Used to\n * determine if the select's view -> model callback should be invoked.`\n */\n _selectViaInteraction(): void {\n if (!this.disabled) {\n this._selected = this.multiple ? !this._selected : true;\n this._selectedColor = this._color;\n this._cd.markForCheck();\n this._emitSelectionChangeEvent(true);\n }\n }\n\n /** @internal */\n _getHostElement(): HTMLElement {\n return this._el.nativeElement;\n }\n\n /** Returns the correct tabindex for the option depending on disabled state. */\n _getTabIndex(): string {\n return this.disabled ? '-1' : '0';\n }\n\n /** Emits the selection change event. */\n private _emitSelectionChangeEvent(isUserInput = false): void {\n this.onSelectionChange.emit(new LyOptionSelectionChange(this, isUserInput));\n }\n\n}\n\nfunction same(o: unknown): unknown {\n return o;\n}\n","<div #valueText [ngSwitch]=\"empty\">\n <div [className]=\"classes.valueText\" *ngSwitchCase=\"true\">{{ '\\u00A0' }}</div>\n <div [className]=\"classes.valueText\" *ngSwitchDefault [ngSwitch]=\"!!customTrigger\">\n <span *ngSwitchDefault>{{ triggerValue || '\\u00A0' }}</span>\n <ng-content select=\"ly-select-trigger\" *ngSwitchCase=\"true\"></ng-content>\n </div>\n</div>\n\n<ng-template #templateRef let-getOverlay>\n <div\n #container\n tabindex=\"-1\"\n role=\"listbox\"\n [className]=\"classes.container\"\n [@selectEnter]=\"'in'\"\n (@selectEnter.done)=\"_panelDoneAnimatingStream.next({state: $event.toState, overlay: getOverlay()})\"\n (keydown)=\"_handleKeydown($event)\"\n [style.font-size.px]=\"_triggerFontSize\"\n >\n <ng-content></ng-content>\n </div>\n</ng-template>","<span [className]=\"classes.content\">\n <ly-checkbox [disabled]=\"disabled\"\n [color]=\"_color\"\n [checked]=\"isSelected\"\n *ngIf=\"_select.multiple\"\n (click)=\"$event.preventDefault()\"\n ></ly-checkbox>\n <span [className]=\"classes.optionText\"><ng-content></ng-content></span>\n</span>\n<div #rippleContainer [className]=\"_rippleService.classes.container\"></div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LyCommonModule, LyOverlayModule } from '@alyle/ui';\nimport { LyCheckboxModule } from '@alyle/ui/checkbox';\n\nimport { LySelect, LyOption, LySelectTrigger } from './select';\n\n@NgModule({\n declarations: [LySelect, LyOption, LySelectTrigger],\n imports: [\n CommonModule,\n LyCommonModule,\n LyCheckboxModule,\n LyOverlayModule\n ],\n exports: [LySelect, LyOption, LySelectTrigger, LyCommonModule]\n})\nexport class LySelectModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["FIELD_STYLES"],"mappings":"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"}