@raintonic/formaui 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs +8 -1
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-checkbox.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-date-picker.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-form-field.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-menu.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-menu.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-paginator.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-popover.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-radio.mjs +6 -5
- package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-select.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-time-picker.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tooltip.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
- package/fesm2022/raintonic-formaui.mjs +1 -1
- package/fesm2022/raintonic-formaui.mjs.map +1 -1
- package/llms-full.txt +1 -0
- package/package.json +1 -1
- package/types/raintonic-formaui-cdk-overlay.d.ts.map +1 -1
- package/types/raintonic-formaui-components-radio.d.ts +2 -1
- package/types/raintonic-formaui-components-radio.d.ts.map +1 -1
- package/types/raintonic-formaui.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-time-picker.mjs","sources":["../../../lib/components/time-picker/time-picker.utils.ts","../../../lib/components/time-picker/time-picker.intl.ts","../../../lib/components/time-picker/time-list.component.ts","../../../lib/components/time-picker/time-list.component.html","../../../lib/components/time-picker/time-picker.component.ts","../../../lib/components/time-picker/time-picker.component.html","../../../lib/components/time-picker/raintonic-formaui-components-time-picker.ts"],"sourcesContent":["import { TimeFormat, TimeOption, TimeValue } from './time-picker.types';\r\n\r\n/**\r\n * Convert a TimeValue to total minutes for comparison purposes.\r\n */\r\nexport function timeToMinutes(time: TimeValue): number {\r\n return time.hours * 60 + time.minutes + (time.seconds ? time.seconds / 60 : 0);\r\n}\r\n\r\n/**\r\n * Compare two TimeValue objects.\r\n * Returns -1 if a < b, 0 if equal, 1 if a > b.\r\n */\r\nexport function compareTime(a: TimeValue, b: TimeValue): number {\r\n const aMin = timeToMinutes(a);\r\n const bMin = timeToMinutes(b);\r\n if (aMin < bMin) return -1;\r\n if (aMin > bMin) return 1;\r\n return 0;\r\n}\r\n\r\n/**\r\n * Check if a time is within an optional min/max range (inclusive).\r\n */\r\nexport function isTimeInRange(time: TimeValue, min?: TimeValue, max?: TimeValue): boolean {\r\n if (min && compareTime(time, min) < 0) return false;\r\n if (max && compareTime(time, max) > 0) return false;\r\n return true;\r\n}\r\n\r\n/**\r\n * Format a TimeValue for display.\r\n * - 24h: \"14:30\" or \"14:30:00\"\r\n * - 12h: \"2:30 PM\" or \"2:30:00 PM\"\r\n */\r\nexport function formatTime(value: TimeValue | null, format: TimeFormat, showSeconds: boolean): string {\r\n if (!value) return '';\r\n\r\n const h = value.hours;\r\n const m = value.minutes;\r\n const s = value.seconds ?? 0;\r\n\r\n const pad = (n: number): string => n.toString().padStart(2, '0');\r\n\r\n if (format === '24h') {\r\n const base = `${pad(h)}:${pad(m)}`;\r\n return showSeconds ? `${base}:${pad(s)}` : base;\r\n }\r\n\r\n // 12h format\r\n const period = h >= 12 ? 'PM' : 'AM';\r\n let displayHour = h;\r\n if (h === 0) displayHour = 12;\r\n else if (h > 12) displayHour = h - 12;\r\n const base = `${displayHour}:${pad(m)}`;\r\n return showSeconds ? `${base}:${pad(s)} ${period}` : `${base} ${period}`;\r\n}\r\n\r\n/**\r\n * Parse a time string into a TimeValue.\r\n * Supports formats: \"HH:mm\", \"HH:mm:ss\", \"h:mm AM/PM\", \"h:mm:ss AM/PM\"\r\n * Returns null if the string cannot be parsed.\r\n */\r\nexport function parseTimeString(str: string, format: TimeFormat): TimeValue | null {\r\n if (!str?.trim()) return null;\r\n\r\n const trimmed = str.trim();\r\n\r\n if (format === '12h') {\r\n // Match patterns like \"2:30 PM\", \"12:30:45 AM\"\r\n const match12 = /^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM)$/i.exec(trimmed);\r\n if (!match12) return null;\r\n\r\n let hours = parseInt(match12[1], 10);\r\n const minutes = parseInt(match12[2], 10);\r\n const seconds = match12[3] ? parseInt(match12[3], 10) : undefined;\r\n const period = match12[4].toUpperCase();\r\n\r\n if (hours < 1 || hours > 12 || minutes < 0 || minutes > 59) return null;\r\n if (seconds !== undefined && (seconds < 0 || seconds > 59)) return null;\r\n\r\n if (period === 'AM' && hours === 12) hours = 0;\r\n else if (period === 'PM' && hours !== 12) hours += 12;\r\n\r\n return { hours, minutes, ...(seconds !== undefined ? { seconds } : {}) };\r\n }\r\n\r\n // 24h format: \"HH:mm\" or \"HH:mm:ss\"\r\n const match24 = /^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/.exec(trimmed);\r\n if (!match24) return null;\r\n\r\n const hours = parseInt(match24[1], 10);\r\n const minutes = parseInt(match24[2], 10);\r\n const seconds = match24[3] ? parseInt(match24[3], 10) : undefined;\r\n\r\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return null;\r\n if (seconds !== undefined && (seconds < 0 || seconds > 59)) return null;\r\n\r\n return { hours, minutes, ...(seconds !== undefined ? { seconds } : {}) };\r\n}\r\n\r\n/**\r\n * Generate time options for the dropdown list.\r\n */\r\nexport function generateTimeOptions(\r\n format: TimeFormat,\r\n minuteStep: number,\r\n showSeconds: boolean,\r\n min?: TimeValue,\r\n max?: TimeValue,\r\n): TimeOption[] {\r\n const options: TimeOption[] = [];\r\n const step = Math.max(1, Math.min(60, minuteStep));\r\n\r\n for (let h = 0; h < 24; h++) {\r\n for (let m = 0; m < 60; m += step) {\r\n const value: TimeValue = { hours: h, minutes: m, ...(showSeconds ? { seconds: 0 } : {}) };\r\n const label = formatTime(value, format, showSeconds);\r\n const disabled = !isTimeInRange(value, min, max);\r\n options.push({ label, value, disabled });\r\n }\r\n }\r\n\r\n return options;\r\n}\r\n\r\n/**\r\n * Convert a TimeValue to an ISO-like string \"HH:mm\" or \"HH:mm:ss\".\r\n */\r\nexport function timeValueToString(value: TimeValue | null, showSeconds: boolean): string {\r\n if (!value) return '';\r\n const pad = (n: number): string => n.toString().padStart(2, '0');\r\n const base = `${pad(value.hours)}:${pad(value.minutes)}`;\r\n return showSeconds ? `${base}:${pad(value.seconds ?? 0)}` : base;\r\n}\r\n\r\n/**\r\n * Parse an ISO-like time string \"HH:mm\" or \"HH:mm:ss\" into a TimeValue.\r\n * This always parses in 24h format regardless of display format.\r\n */\r\nexport function parseISOTimeString(str: string): TimeValue | null {\r\n if (!str?.trim()) return null;\r\n return parseTimeString(str.trim(), '24h');\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiTimePickerIntl extends FuiIntlBase {\r\n toggleAriaLabel = 'Toggle time picker';\r\n dialogAriaLabel = 'Time selection';\r\n availableTimesAriaLabel = 'Available times';\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n ViewChild,\r\n ViewEncapsulation,\r\n AfterViewInit,\r\n effect,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TimeFormat, TimeOption, TimeValue } from './time-picker.types';\r\nimport { compareTime } from './time-picker.utils';\r\nimport { FuiTimePickerIntl } from './time-picker.intl';\r\n\r\n@Component({\r\n selector: 'fui-time-list',\r\n standalone: true,\r\n templateUrl: './time-list.component.html',\r\n styleUrls: ['./time-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-time-list',\r\n },\r\n})\r\nexport class FuiTimeListComponent implements AfterViewInit {\r\n /** The list of time options to display. */\r\n readonly options = input.required<TimeOption[]>();\r\n\r\n /** Currently selected time value. */\r\n readonly selectedValue = input<TimeValue | null>(null);\r\n\r\n /** Time format for display. */\r\n readonly format = input<TimeFormat>('24h');\r\n\r\n /** Emitted when an option is selected. */\r\n readonly optionSelected = output<TimeValue>();\r\n\r\n /** Index of the currently focused option for keyboard navigation. */\r\n readonly _focusedIndex = signal(-1);\r\n\r\n @ViewChild('listContainer', { static: false }) listContainer?: ElementRef<HTMLDivElement>;\r\n\r\n readonly intl = inject(FuiTimePickerIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => { this._cdr.markForCheck(); });\r\n\r\n // Scroll to selected option when options change\r\n effect(() => {\r\n this.selectedValue();\r\n this.options();\r\n // Defer to next microtask so DOM is rendered\r\n void Promise.resolve().then(() => {\r\n this._scrollToSelected();\r\n });\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this._scrollToSelected();\r\n }\r\n\r\n /** Check if an option matches the selected value. */\r\n _isSelected(option: TimeOption): boolean {\r\n const selected = this.selectedValue();\r\n if (!selected) return false;\r\n return compareTime(option.value, selected) === 0;\r\n }\r\n\r\n /** Handle option click. */\r\n _selectOption(option: TimeOption): void {\r\n if (option.disabled) return;\r\n this.optionSelected.emit(option.value);\r\n }\r\n\r\n /** Handle keyboard navigation. */\r\n onKeydown(event: KeyboardEvent): void {\r\n const opts = this.options();\r\n if (!opts.length) return;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this._moveFocus(1);\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this._moveFocus(-1);\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n this._selectFocused();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this._setFocusedIndex(0);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this._setFocusedIndex(opts.length - 1);\r\n break;\r\n }\r\n }\r\n\r\n /** Move focus by delta, skipping disabled options. */\r\n private _moveFocus(delta: number): void {\r\n const opts = this.options();\r\n if (!opts.length) return;\r\n\r\n let current = this._focusedIndex();\r\n const len = opts.length;\r\n let attempts = 0;\r\n\r\n do {\r\n current = (current + delta + len) % len;\r\n attempts++;\r\n } while (opts[current].disabled && attempts < len);\r\n\r\n if (!opts[current].disabled) {\r\n this._setFocusedIndex(current);\r\n }\r\n }\r\n\r\n /** Set focused index and scroll into view. */\r\n private _setFocusedIndex(index: number): void {\r\n this._focusedIndex.set(index);\r\n this._scrollToIndex(index);\r\n }\r\n\r\n /** Select the currently focused option. */\r\n private _selectFocused(): void {\r\n const idx = this._focusedIndex();\r\n const opts = this.options();\r\n if (idx >= 0 && idx < opts.length && !opts[idx].disabled) {\r\n this.optionSelected.emit(opts[idx].value);\r\n }\r\n }\r\n\r\n /** Scroll to a specific index in the list. */\r\n private _scrollToIndex(index: number): void {\r\n const container = this.listContainer?.nativeElement;\r\n if (!container) return;\r\n\r\n const items = container.querySelectorAll('.fui-time-list__option');\r\n const item = items[index] as HTMLElement;\r\n if (!item) return;\r\n\r\n const itemTop = item.offsetTop;\r\n const itemBottom = itemTop + item.offsetHeight;\r\n const scrollTop = container.scrollTop;\r\n const scrollBottom = scrollTop + container.clientHeight;\r\n\r\n if (itemTop < scrollTop) {\r\n container.scrollTop = itemTop;\r\n } else if (itemBottom > scrollBottom) {\r\n container.scrollTop = itemBottom - container.clientHeight;\r\n }\r\n }\r\n\r\n /** Scroll to the selected option. */\r\n private _scrollToSelected(): void {\r\n const selected = this.selectedValue();\r\n if (!selected) return;\r\n\r\n const opts = this.options();\r\n const index = opts.findIndex((o) => compareTime(o.value, selected) === 0);\r\n if (index >= 0) {\r\n this._focusedIndex.set(index);\r\n // Defer scroll to ensure DOM is rendered\r\n requestAnimationFrame(() => {\r\n this._scrollToIndex(index);\r\n });\r\n }\r\n }\r\n}\r\n","<div\r\n #listContainer\r\n class=\"fui-time-list__container\"\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"intl.availableTimesAriaLabel\"\r\n (keydown)=\"onKeydown($event)\"\r\n>\r\n @for (option of options(); track option.label) {\r\n <div\r\n class=\"fui-time-list__option\"\r\n [class.fui-time-list__option--selected]=\"_isSelected(option)\"\r\n [class.fui-time-list__option--disabled]=\"option.disabled\"\r\n [class.fui-time-list__option--focused]=\"_focusedIndex() === $index\"\r\n [attr.id]=\"'fui-time-option-' + $index\"\r\n [attr.aria-selected]=\"_isSelected(option)\"\r\n [attr.aria-disabled]=\"option.disabled\"\r\n role=\"option\"\r\n (click)=\"_selectOption(option)\"\r\n >\r\n {{ option.label }}\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n DoCheck,\r\n effect,\r\n ElementRef,\r\n inject,\r\n NgZone,\r\n input,\r\n InputSignal,\r\n InputSignalWithTransform,\r\n OnDestroy,\r\n output,\r\n OutputEmitterRef,\r\n signal,\r\n ViewChild,\r\n ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, FormGroupDirective, NG_VALUE_ACCESSOR, NgControl, NgForm } from '@angular/forms';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { injectNgControl, updateErrorState, syncRequiredState, syncNgControlDisabled } from '@raintonic/formaui/cdk/form-field';\r\nimport { FUI_FORM_FIELD_CONTROL, FuiFormFieldControl } from '@raintonic/formaui/core';\r\nimport { DefaultErrorStateMatcher, ErrorStateMatcher } from '@raintonic/formaui/core';\r\nimport { FuiConnectedPosition, FuiOverlayRef, FuiOverlayService } from '@raintonic/formaui/cdk/overlay';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { FuiTimeListComponent } from './time-list.component';\r\nimport { FuiTimePickerIntl } from './time-picker.intl';\r\nimport { TimeFormat, TimeOption, TimeValue } from './time-picker.types';\r\nimport {\r\n formatTime,\r\n generateTimeOptions,\r\n parseISOTimeString,\r\n parseTimeString,\r\n timeValueToString,\r\n} from './time-picker.utils';\r\n\r\n@Component({\r\n selector: 'fui-time-picker',\r\n standalone: true,\r\n imports: [FuiIconComponent, FuiTimeListComponent],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-time-picker',\r\n '[attr.id]': 'id',\r\n '[class.fui-time-picker--open]': '_panelOpen()',\r\n '[class.fui-time-picker--disabled]': 'disabled()',\r\n '[class.fui-time-picker--focused]': 'focused()',\r\n '[class.fui-time-picker--error]': 'errorState()',\r\n '[class.fui-time-picker--readonly]': '_readOnly()',\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: FuiTimePickerComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: FUI_FORM_FIELD_CONTROL,\r\n useExisting: FuiTimePickerComponent,\r\n },\r\n ],\r\n})\r\nexport class FuiTimePickerComponent implements ControlValueAccessor, FuiFormFieldControl<string>, DoCheck, OnDestroy {\r\n static nextId = 0;\r\n readonly controlType = 'fui-time-picker';\r\n\r\n // --- Inputs ---\r\n readonly formatInput: InputSignal<TimeFormat> = input<TimeFormat>('24h', { alias: 'format' });\r\n readonly showSeconds: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n readonly minuteStep: InputSignal<number> = input(15);\r\n readonly min: InputSignal<string> = input('');\r\n readonly max: InputSignal<string> = input('');\r\n readonly placeholderInput: InputSignal<string> = input('', { alias: 'placeholder' });\r\n readonly disabledInput: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\r\n alias: 'disabled',\r\n transform: booleanAttribute,\r\n });\r\n readonly readonly: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | null> = input<ErrorStateMatcher | null>(null);\r\n\r\n // --- Outputs ---\r\n readonly timeChange: OutputEmitterRef<string> = output<string>();\r\n\r\n // --- Internal state ---\r\n /** @internal */ readonly _value: WritableSignal<TimeValue | null> = signal(null);\r\n private readonly _focused: WritableSignal<boolean> = signal(false);\r\n private readonly _disabled: WritableSignal<boolean> = signal(false);\r\n private readonly _ngControlDisabled: WritableSignal<boolean> = signal(false);\r\n private readonly _required: WritableSignal<boolean> = signal(false);\r\n private readonly _errorState: WritableSignal<boolean> = signal(false);\r\n readonly _readOnly: WritableSignal<boolean> = signal(false);\r\n readonly _panelOpen = signal(false);\r\n\r\n // --- FuiFormFieldControl ---\r\n readonly stateChanges = new Subject<void>();\r\n private _uid = `fui-time-picker-${FuiTimePickerComponent.nextId++}`;\r\n _ariaDescribedby: string | null = null;\r\n\r\n // Form references\r\n private _parentForm = inject(NgForm, { optional: true });\r\n private _parentFormGroup = inject(FormGroupDirective, { optional: true });\r\n private _defaultErrorStateMatcher = inject(DefaultErrorStateMatcher);\r\n private readonly _ngControlRef = injectNgControl();\r\n get ngControl(): NgControl | null {\r\n return this._ngControlRef.ngControl;\r\n }\r\n\r\n // Interface signals\r\n readonly placeholder = computed(() => this.placeholderInput());\r\n readonly required = this._required;\r\n readonly value = computed(() => {\r\n const tv = this._value();\r\n return tv ? timeValueToString(tv, this.showSeconds()) : null;\r\n });\r\n readonly focused = this._focused;\r\n readonly disabled = computed(() => this._disabled() || this.disabledInput() || this._ngControlDisabled());\r\n readonly errorState = this._errorState;\r\n readonly id = this._uid;\r\n\r\n readonly empty = computed(() => {\r\n return this._value() === null;\r\n });\r\n\r\n // Display value formatted for current format\r\n readonly _displayValue = computed(() => {\r\n return formatTime(this._value(), this.formatInput(), this.showSeconds());\r\n });\r\n\r\n // Display value for form-field readOnly mode\r\n readonly displayValue = this._displayValue;\r\n\r\n // Computed time options for dropdown\r\n readonly _timeOptions = computed<TimeOption[]>(() => {\r\n const minVal = this.min() ? parseISOTimeString(this.min()) : undefined;\r\n const maxVal = this.max() ? parseISOTimeString(this.max()) : undefined;\r\n return generateTimeOptions(\r\n this.formatInput(),\r\n this.minuteStep(),\r\n this.showSeconds(),\r\n minVal ?? undefined,\r\n maxVal ?? undefined,\r\n );\r\n });\r\n\r\n // ViewChild\r\n @ViewChild('inputElement', { static: false }) inputElement?: ElementRef<HTMLInputElement>;\r\n @ViewChild('timeListPanel', { static: false }) timeListPanel?: ElementRef<HTMLDivElement>;\r\n\r\n // Overlay\r\n private _overlayRef: FuiOverlayRef | null = null;\r\n private _overlaySubscriptions = new Subscription();\r\n private readonly _overlayService = inject(FuiOverlayService);\r\n private readonly _elementRef = inject(ElementRef);\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _ngZone = inject(NgZone);\r\n readonly intl = inject(FuiTimePickerIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n private _outsideClickSub?: Subscription;\r\n\r\n // CVA callbacks\r\n private _onChange: (value: string | null) => void = () => {\r\n /* noop */\r\n };\r\n private _onTouched: () => void = () => {\r\n /* noop */\r\n };\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => { this._cdr.markForCheck(); });\r\n\r\n void Promise.resolve().then(() => {\r\n if (this._ngControlRef.ngControl) {\r\n this._ngControlRef.ngControl.valueAccessor = this;\r\n }\r\n });\r\n\r\n // Effect to emit state changes\r\n effect(() => {\r\n this.placeholderInput();\r\n this.readonly();\r\n this.disabledInput();\r\n this.formatInput();\r\n this.showSeconds();\r\n this.minuteStep();\r\n this.min();\r\n this.max();\r\n this.errorStateMatcher();\r\n this._focused();\r\n this._disabled();\r\n this._value();\r\n this._ngControlDisabled();\r\n this._required();\r\n this._errorState();\r\n\r\n this.stateChanges.next();\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (this.ngControl) {\r\n updateErrorState(\r\n this.ngControl,\r\n this._errorState,\r\n this.errorStateMatcher(),\r\n this._defaultErrorStateMatcher,\r\n this._parentForm,\r\n this._parentFormGroup,\r\n this.stateChanges,\r\n );\r\n syncRequiredState(this.ngControl, this._required, this.stateChanges);\r\n syncNgControlDisabled(this.ngControl, this._ngControlDisabled, this.stateChanges);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n this._outsideClickSub?.unsubscribe();\r\n this._disposeOverlay();\r\n }\r\n\r\n // --- CVA ---\r\n\r\n writeValue(value: string | null): void {\r\n if (value) {\r\n const parsed = parseISOTimeString(value);\r\n this._value.set(parsed);\r\n } else {\r\n this._value.set(null);\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled.set(isDisabled);\r\n this.stateChanges.next();\r\n }\r\n\r\n // --- FuiFormFieldControl ---\r\n\r\n onContainerClick(_event: MouseEvent): void {\r\n if (!this.disabled()) {\r\n this.inputElement?.nativeElement.focus();\r\n if (!this._panelOpen()) {\r\n this.open();\r\n }\r\n }\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n this._ariaDescribedby = ids.length ? ids.join(' ') : null;\r\n }\r\n\r\n setReadOnly(readOnly: boolean): void {\r\n this._readOnly.set(readOnly);\r\n }\r\n\r\n // --- Panel open/close ---\r\n\r\n open(): void {\r\n if (this.disabled() || this.readonly() || this._panelOpen()) return;\r\n\r\n requestAnimationFrame(() => {\r\n this._panelOpen.set(true);\r\n this._focused.set(true);\r\n\r\n setTimeout(() => {\r\n this._createOverlay();\r\n this._listenForOutsideClicks();\r\n });\r\n });\r\n }\r\n\r\n close(): void {\r\n if (!this._panelOpen()) return;\r\n this._outsideClickSub?.unsubscribe();\r\n\r\n this._panelOpen.set(false);\r\n this._focused.set(false);\r\n this._disposeOverlay();\r\n this._onTouched();\r\n\r\n setTimeout(() => {\r\n this.inputElement?.nativeElement.focus();\r\n }, 0);\r\n }\r\n\r\n _togglePanel(): void {\r\n if (this.disabled() || this.readonly()) return;\r\n if (this._panelOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n // --- Event handlers ---\r\n\r\n _onManualInput(_event: Event): void {\r\n // We handle parsing on blur, not on every keystroke\r\n }\r\n\r\n _onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this._panelOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n } else if (event.key === 'ArrowDown' && !this._panelOpen()) {\r\n event.preventDefault();\r\n this.open();\r\n } else if (event.key === 'Enter' && !this._panelOpen()) {\r\n event.preventDefault();\r\n this.open();\r\n }\r\n }\r\n\r\n _onFocus(): void {\r\n this._focused.set(true);\r\n }\r\n\r\n _onBlur(): void {\r\n const input = this.inputElement?.nativeElement;\r\n if (!input) return;\r\n\r\n const text = input.value;\r\n if (!text) {\r\n this._setValue(null);\r\n return;\r\n }\r\n\r\n const parsed = parseTimeString(text, this.formatInput());\r\n if (parsed) {\r\n this._setValue(parsed);\r\n } else {\r\n // Invalid input — revert to previous formatted value\r\n input.value = this._displayValue();\r\n }\r\n\r\n if (!this._panelOpen()) {\r\n this._onTouched();\r\n }\r\n }\r\n\r\n /** Called when user selects an option from the time list dropdown. */\r\n _onOptionSelected(value: TimeValue): void {\r\n this._setValue(value);\r\n this.close();\r\n }\r\n\r\n // Start listening for outside clicks when panel opens\r\n private _listenForOutsideClicks(): void {\r\n this._outsideClickSub?.unsubscribe();\r\n\r\n this._ngZone.runOutsideAngular(() => {\r\n setTimeout(() => {\r\n this._outsideClickSub = fromEvent<MouseEvent>(this._document, 'click')\r\n .pipe(\r\n filter(() => this._panelOpen()),\r\n filter((event) => {\r\n const target = event.target as HTMLElement;\r\n const hostElement = this._elementRef.nativeElement;\r\n const overlayElement = this._overlayRef?.overlayElement;\r\n return !hostElement.contains(target) && !overlayElement?.contains(target);\r\n }),\r\n )\r\n .subscribe(() => {\r\n this._ngZone.run(() => {\r\n this.close();\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n // --- Private helpers ---\r\n\r\n private _setValue(value: TimeValue | null): void {\r\n this._value.set(value);\r\n const stringVal = value ? timeValueToString(value, this.showSeconds()) : null;\r\n this._onChange(stringVal);\r\n this.timeChange.emit(stringVal ?? '');\r\n this.stateChanges.next();\r\n }\r\n\r\n private _createOverlay(): void {\r\n if (this._overlayRef || !this.timeListPanel) return;\r\n\r\n const triggerElement = this._elementRef.nativeElement;\r\n const triggerWidth = triggerElement.getBoundingClientRect().width;\r\n\r\n const positions: FuiConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\r\n ];\r\n\r\n const positionStrategy = this._overlayService\r\n .position()\r\n .connectedTo(triggerElement, positions)\r\n .withPush(true)\r\n .withViewportMargin(8);\r\n\r\n this._overlayRef = this._overlayService.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlayService.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'fui-time-picker-backdrop',\r\n backdropClickBehavior: 'close',\r\n panelClass: ['fui-time-picker-overlay-panel'],\r\n minWidth: Math.max(triggerWidth, 160),\r\n });\r\n\r\n // Track overlay subscriptions for proper cleanup\r\n this._overlaySubscriptions.unsubscribe();\r\n this._overlaySubscriptions = new Subscription();\r\n\r\n this._overlaySubscriptions.add(\r\n this._overlayRef.backdropClick.subscribe(() => {\r\n this.close();\r\n }),\r\n );\r\n\r\n this._overlaySubscriptions.add(\r\n this._overlayRef.keydownEvents.subscribe((event) => {\r\n if (event.key === 'Escape') {\r\n this.close();\r\n }\r\n }),\r\n );\r\n\r\n const panelElement = this.timeListPanel.nativeElement;\r\n this._overlayRef.attach(panelElement);\r\n }\r\n\r\n private _disposeOverlay(): void {\r\n this._overlaySubscriptions.unsubscribe();\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._overlayRef = null;\r\n }\r\n }\r\n}\r\n","<div class=\"fui-time-picker__wrapper\">\r\n <input\r\n #inputElement\r\n class=\"fui-time-picker__input\"\r\n type=\"text\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.disabled]=\"disabled() ? '' : null\"\r\n [attr.readonly]=\"readonly() ? '' : null\"\r\n [value]=\"_displayValue()\"\r\n [attr.aria-expanded]=\"_panelOpen()\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-describedby]=\"_ariaDescribedby\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"errorState()\"\r\n role=\"combobox\"\r\n autocomplete=\"off\"\r\n (input)=\"_onManualInput($event)\"\r\n (keydown)=\"_onKeydown($event)\"\r\n (focus)=\"_onFocus()\"\r\n (blur)=\"_onBlur()\"\r\n />\r\n @if (!_readOnly()) {\r\n <button\r\n type=\"button\"\r\n class=\"fui-time-picker__toggle\"\r\n (click)=\"_togglePanel()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"intl.toggleAriaLabel\"\r\n >\r\n <fui-icon name=\"clock\" size=\"sm\"></fui-icon>\r\n </button>\r\n }\r\n</div>\r\n\r\n@if (_panelOpen()) {\r\n <div #timeListPanel class=\"fui-time-picker__panel\" role=\"dialog\" [attr.aria-label]=\"intl.dialogAriaLabel\">\r\n <fui-time-list\r\n [options]=\"_timeOptions()\"\r\n [selectedValue]=\"_value()\"\r\n [format]=\"formatInput()\"\r\n (optionSelected)=\"_onOptionSelected($event)\"\r\n />\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-components-time-picker.mjs","sources":["../../../lib/components/time-picker/time-picker.utils.ts","../../../lib/components/time-picker/time-picker.intl.ts","../../../lib/components/time-picker/time-list.component.ts","../../../lib/components/time-picker/time-list.component.html","../../../lib/components/time-picker/time-picker.component.ts","../../../lib/components/time-picker/time-picker.component.html","../../../lib/components/time-picker/raintonic-formaui-components-time-picker.ts"],"sourcesContent":["import { TimeFormat, TimeOption, TimeValue } from './time-picker.types';\r\n\r\n/**\r\n * Convert a TimeValue to total minutes for comparison purposes.\r\n */\r\nexport function timeToMinutes(time: TimeValue): number {\r\n return time.hours * 60 + time.minutes + (time.seconds ? time.seconds / 60 : 0);\r\n}\r\n\r\n/**\r\n * Compare two TimeValue objects.\r\n * Returns -1 if a < b, 0 if equal, 1 if a > b.\r\n */\r\nexport function compareTime(a: TimeValue, b: TimeValue): number {\r\n const aMin = timeToMinutes(a);\r\n const bMin = timeToMinutes(b);\r\n if (aMin < bMin) return -1;\r\n if (aMin > bMin) return 1;\r\n return 0;\r\n}\r\n\r\n/**\r\n * Check if a time is within an optional min/max range (inclusive).\r\n */\r\nexport function isTimeInRange(time: TimeValue, min?: TimeValue, max?: TimeValue): boolean {\r\n if (min && compareTime(time, min) < 0) return false;\r\n if (max && compareTime(time, max) > 0) return false;\r\n return true;\r\n}\r\n\r\n/**\r\n * Format a TimeValue for display.\r\n * - 24h: \"14:30\" or \"14:30:00\"\r\n * - 12h: \"2:30 PM\" or \"2:30:00 PM\"\r\n */\r\nexport function formatTime(value: TimeValue | null, format: TimeFormat, showSeconds: boolean): string {\r\n if (!value) return '';\r\n\r\n const h = value.hours;\r\n const m = value.minutes;\r\n const s = value.seconds ?? 0;\r\n\r\n const pad = (n: number): string => n.toString().padStart(2, '0');\r\n\r\n if (format === '24h') {\r\n const base = `${pad(h)}:${pad(m)}`;\r\n return showSeconds ? `${base}:${pad(s)}` : base;\r\n }\r\n\r\n // 12h format\r\n const period = h >= 12 ? 'PM' : 'AM';\r\n let displayHour = h;\r\n if (h === 0) displayHour = 12;\r\n else if (h > 12) displayHour = h - 12;\r\n const base = `${displayHour}:${pad(m)}`;\r\n return showSeconds ? `${base}:${pad(s)} ${period}` : `${base} ${period}`;\r\n}\r\n\r\n/**\r\n * Parse a time string into a TimeValue.\r\n * Supports formats: \"HH:mm\", \"HH:mm:ss\", \"h:mm AM/PM\", \"h:mm:ss AM/PM\"\r\n * Returns null if the string cannot be parsed.\r\n */\r\nexport function parseTimeString(str: string, format: TimeFormat): TimeValue | null {\r\n if (!str?.trim()) return null;\r\n\r\n const trimmed = str.trim();\r\n\r\n if (format === '12h') {\r\n // Match patterns like \"2:30 PM\", \"12:30:45 AM\"\r\n const match12 = /^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM)$/i.exec(trimmed);\r\n if (!match12) return null;\r\n\r\n let hours = parseInt(match12[1], 10);\r\n const minutes = parseInt(match12[2], 10);\r\n const seconds = match12[3] ? parseInt(match12[3], 10) : undefined;\r\n const period = match12[4].toUpperCase();\r\n\r\n if (hours < 1 || hours > 12 || minutes < 0 || minutes > 59) return null;\r\n if (seconds !== undefined && (seconds < 0 || seconds > 59)) return null;\r\n\r\n if (period === 'AM' && hours === 12) hours = 0;\r\n else if (period === 'PM' && hours !== 12) hours += 12;\r\n\r\n return { hours, minutes, ...(seconds !== undefined ? { seconds } : {}) };\r\n }\r\n\r\n // 24h format: \"HH:mm\" or \"HH:mm:ss\"\r\n const match24 = /^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/.exec(trimmed);\r\n if (!match24) return null;\r\n\r\n const hours = parseInt(match24[1], 10);\r\n const minutes = parseInt(match24[2], 10);\r\n const seconds = match24[3] ? parseInt(match24[3], 10) : undefined;\r\n\r\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return null;\r\n if (seconds !== undefined && (seconds < 0 || seconds > 59)) return null;\r\n\r\n return { hours, minutes, ...(seconds !== undefined ? { seconds } : {}) };\r\n}\r\n\r\n/**\r\n * Generate time options for the dropdown list.\r\n */\r\nexport function generateTimeOptions(\r\n format: TimeFormat,\r\n minuteStep: number,\r\n showSeconds: boolean,\r\n min?: TimeValue,\r\n max?: TimeValue,\r\n): TimeOption[] {\r\n const options: TimeOption[] = [];\r\n const step = Math.max(1, Math.min(60, minuteStep));\r\n\r\n for (let h = 0; h < 24; h++) {\r\n for (let m = 0; m < 60; m += step) {\r\n const value: TimeValue = { hours: h, minutes: m, ...(showSeconds ? { seconds: 0 } : {}) };\r\n const label = formatTime(value, format, showSeconds);\r\n const disabled = !isTimeInRange(value, min, max);\r\n options.push({ label, value, disabled });\r\n }\r\n }\r\n\r\n return options;\r\n}\r\n\r\n/**\r\n * Convert a TimeValue to an ISO-like string \"HH:mm\" or \"HH:mm:ss\".\r\n */\r\nexport function timeValueToString(value: TimeValue | null, showSeconds: boolean): string {\r\n if (!value) return '';\r\n const pad = (n: number): string => n.toString().padStart(2, '0');\r\n const base = `${pad(value.hours)}:${pad(value.minutes)}`;\r\n return showSeconds ? `${base}:${pad(value.seconds ?? 0)}` : base;\r\n}\r\n\r\n/**\r\n * Parse an ISO-like time string \"HH:mm\" or \"HH:mm:ss\" into a TimeValue.\r\n * This always parses in 24h format regardless of display format.\r\n */\r\nexport function parseISOTimeString(str: string): TimeValue | null {\r\n if (!str?.trim()) return null;\r\n return parseTimeString(str.trim(), '24h');\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiTimePickerIntl extends FuiIntlBase {\r\n toggleAriaLabel = 'Toggle time picker';\r\n dialogAriaLabel = 'Time selection';\r\n availableTimesAriaLabel = 'Available times';\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n ViewChild,\r\n ViewEncapsulation,\r\n AfterViewInit,\r\n effect,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { TimeFormat, TimeOption, TimeValue } from './time-picker.types';\r\nimport { compareTime } from './time-picker.utils';\r\nimport { FuiTimePickerIntl } from './time-picker.intl';\r\n\r\n@Component({\r\n selector: 'fui-time-list',\r\n standalone: true,\r\n templateUrl: './time-list.component.html',\r\n styleUrls: ['./time-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-time-list',\r\n },\r\n})\r\nexport class FuiTimeListComponent implements AfterViewInit {\r\n /** The list of time options to display. */\r\n readonly options = input.required<TimeOption[]>();\r\n\r\n /** Currently selected time value. */\r\n readonly selectedValue = input<TimeValue | null>(null);\r\n\r\n /** Time format for display. */\r\n readonly format = input<TimeFormat>('24h');\r\n\r\n /** Emitted when an option is selected. */\r\n readonly optionSelected = output<TimeValue>();\r\n\r\n /** Index of the currently focused option for keyboard navigation. */\r\n readonly _focusedIndex = signal(-1);\r\n\r\n @ViewChild('listContainer', { static: false }) listContainer?: ElementRef<HTMLDivElement>;\r\n\r\n readonly intl = inject(FuiTimePickerIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => { this._cdr.markForCheck(); });\r\n\r\n // Scroll to selected option when options change\r\n effect(() => {\r\n this.selectedValue();\r\n this.options();\r\n // Defer to next microtask so DOM is rendered\r\n void Promise.resolve().then(() => {\r\n this._scrollToSelected();\r\n });\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this._scrollToSelected();\r\n }\r\n\r\n /** Check if an option matches the selected value. */\r\n _isSelected(option: TimeOption): boolean {\r\n const selected = this.selectedValue();\r\n if (!selected) return false;\r\n return compareTime(option.value, selected) === 0;\r\n }\r\n\r\n /** Handle option click. */\r\n _selectOption(option: TimeOption): void {\r\n if (option.disabled) return;\r\n this.optionSelected.emit(option.value);\r\n }\r\n\r\n /** Handle keyboard navigation. */\r\n onKeydown(event: KeyboardEvent): void {\r\n const opts = this.options();\r\n if (!opts.length) return;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this._moveFocus(1);\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this._moveFocus(-1);\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n this._selectFocused();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this._setFocusedIndex(0);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this._setFocusedIndex(opts.length - 1);\r\n break;\r\n }\r\n }\r\n\r\n /** Move focus by delta, skipping disabled options. */\r\n private _moveFocus(delta: number): void {\r\n const opts = this.options();\r\n if (!opts.length) return;\r\n\r\n let current = this._focusedIndex();\r\n const len = opts.length;\r\n let attempts = 0;\r\n\r\n do {\r\n current = (current + delta + len) % len;\r\n attempts++;\r\n } while (opts[current].disabled && attempts < len);\r\n\r\n if (!opts[current].disabled) {\r\n this._setFocusedIndex(current);\r\n }\r\n }\r\n\r\n /** Set focused index and scroll into view. */\r\n private _setFocusedIndex(index: number): void {\r\n this._focusedIndex.set(index);\r\n this._scrollToIndex(index);\r\n }\r\n\r\n /** Select the currently focused option. */\r\n private _selectFocused(): void {\r\n const idx = this._focusedIndex();\r\n const opts = this.options();\r\n if (idx >= 0 && idx < opts.length && !opts[idx].disabled) {\r\n this.optionSelected.emit(opts[idx].value);\r\n }\r\n }\r\n\r\n /** Scroll to a specific index in the list. */\r\n private _scrollToIndex(index: number): void {\r\n const container = this.listContainer?.nativeElement;\r\n if (!container) return;\r\n\r\n const items = container.querySelectorAll('.fui-time-list__option');\r\n const item = items[index] as HTMLElement;\r\n if (!item) return;\r\n\r\n const itemTop = item.offsetTop;\r\n const itemBottom = itemTop + item.offsetHeight;\r\n const scrollTop = container.scrollTop;\r\n const scrollBottom = scrollTop + container.clientHeight;\r\n\r\n if (itemTop < scrollTop) {\r\n container.scrollTop = itemTop;\r\n } else if (itemBottom > scrollBottom) {\r\n container.scrollTop = itemBottom - container.clientHeight;\r\n }\r\n }\r\n\r\n /** Scroll to the selected option. */\r\n private _scrollToSelected(): void {\r\n const selected = this.selectedValue();\r\n if (!selected) return;\r\n\r\n const opts = this.options();\r\n const index = opts.findIndex((o) => compareTime(o.value, selected) === 0);\r\n if (index >= 0) {\r\n this._focusedIndex.set(index);\r\n // Defer scroll to ensure DOM is rendered\r\n requestAnimationFrame(() => {\r\n this._scrollToIndex(index);\r\n });\r\n }\r\n }\r\n}\r\n","<div\r\n #listContainer\r\n class=\"fui-time-list__container\"\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"intl.availableTimesAriaLabel\"\r\n (keydown)=\"onKeydown($event)\"\r\n>\r\n @for (option of options(); track option.label) {\r\n <div\r\n class=\"fui-time-list__option\"\r\n [class.fui-time-list__option--selected]=\"_isSelected(option)\"\r\n [class.fui-time-list__option--disabled]=\"option.disabled\"\r\n [class.fui-time-list__option--focused]=\"_focusedIndex() === $index\"\r\n [attr.id]=\"'fui-time-option-' + $index\"\r\n [attr.aria-selected]=\"_isSelected(option)\"\r\n [attr.aria-disabled]=\"option.disabled\"\r\n role=\"option\"\r\n (click)=\"_selectOption(option)\"\r\n >\r\n {{ option.label }}\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n DoCheck,\r\n effect,\r\n ElementRef,\r\n inject,\r\n NgZone,\r\n input,\r\n InputSignal,\r\n InputSignalWithTransform,\r\n OnDestroy,\r\n output,\r\n OutputEmitterRef,\r\n signal,\r\n ViewChild,\r\n ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, FormGroupDirective, NG_VALUE_ACCESSOR, NgControl, NgForm } from '@angular/forms';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { injectNgControl, updateErrorState, syncRequiredState, syncNgControlDisabled } from '@raintonic/formaui/cdk/form-field';\r\nimport { FUI_FORM_FIELD_CONTROL, FuiFormFieldControl } from '@raintonic/formaui/core';\r\nimport { DefaultErrorStateMatcher, ErrorStateMatcher } from '@raintonic/formaui/core';\r\nimport { FuiConnectedPosition, FuiOverlayRef, FuiOverlayService } from '@raintonic/formaui/cdk/overlay';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { FuiTimeListComponent } from './time-list.component';\r\nimport { FuiTimePickerIntl } from './time-picker.intl';\r\nimport { TimeFormat, TimeOption, TimeValue } from './time-picker.types';\r\nimport {\r\n formatTime,\r\n generateTimeOptions,\r\n parseISOTimeString,\r\n parseTimeString,\r\n timeValueToString,\r\n} from './time-picker.utils';\r\n\r\n@Component({\r\n selector: 'fui-time-picker',\r\n standalone: true,\r\n imports: [FuiIconComponent, FuiTimeListComponent],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-time-picker',\r\n '[attr.id]': 'id',\r\n '[class.fui-time-picker--open]': '_panelOpen()',\r\n '[class.fui-time-picker--disabled]': 'disabled()',\r\n '[class.fui-time-picker--focused]': 'focused()',\r\n '[class.fui-time-picker--error]': 'errorState()',\r\n '[class.fui-time-picker--readonly]': '_readOnly()',\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: FuiTimePickerComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: FUI_FORM_FIELD_CONTROL,\r\n useExisting: FuiTimePickerComponent,\r\n },\r\n ],\r\n})\r\nexport class FuiTimePickerComponent implements ControlValueAccessor, FuiFormFieldControl<string>, DoCheck, OnDestroy {\r\n static nextId = 0;\r\n readonly controlType = 'fui-time-picker';\r\n\r\n // --- Inputs ---\r\n readonly formatInput: InputSignal<TimeFormat> = input<TimeFormat>('24h', { alias: 'format' });\r\n readonly showSeconds: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n readonly minuteStep: InputSignal<number> = input(15);\r\n readonly min: InputSignal<string> = input('');\r\n readonly max: InputSignal<string> = input('');\r\n readonly placeholderInput: InputSignal<string> = input('', { alias: 'placeholder' });\r\n readonly disabledInput: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\r\n alias: 'disabled',\r\n transform: booleanAttribute,\r\n });\r\n readonly readonly: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | null> = input<ErrorStateMatcher | null>(null);\r\n\r\n // --- Outputs ---\r\n readonly timeChange: OutputEmitterRef<string> = output<string>();\r\n\r\n // --- Internal state ---\r\n /** @internal */ readonly _value: WritableSignal<TimeValue | null> = signal(null);\r\n private readonly _focused: WritableSignal<boolean> = signal(false);\r\n private readonly _disabled: WritableSignal<boolean> = signal(false);\r\n private readonly _ngControlDisabled: WritableSignal<boolean> = signal(false);\r\n private readonly _required: WritableSignal<boolean> = signal(false);\r\n private readonly _errorState: WritableSignal<boolean> = signal(false);\r\n readonly _readOnly: WritableSignal<boolean> = signal(false);\r\n readonly _panelOpen = signal(false);\r\n\r\n // --- FuiFormFieldControl ---\r\n readonly stateChanges = new Subject<void>();\r\n private _uid = `fui-time-picker-${FuiTimePickerComponent.nextId++}`;\r\n _ariaDescribedby: string | null = null;\r\n\r\n // Form references\r\n private _parentForm = inject(NgForm, { optional: true });\r\n private _parentFormGroup = inject(FormGroupDirective, { optional: true });\r\n private _defaultErrorStateMatcher = inject(DefaultErrorStateMatcher);\r\n private readonly _ngControlRef = injectNgControl();\r\n get ngControl(): NgControl | null {\r\n return this._ngControlRef.ngControl;\r\n }\r\n\r\n // Interface signals\r\n readonly placeholder = computed(() => this.placeholderInput());\r\n readonly required = this._required;\r\n readonly value = computed(() => {\r\n const tv = this._value();\r\n return tv ? timeValueToString(tv, this.showSeconds()) : null;\r\n });\r\n readonly focused = this._focused;\r\n readonly disabled = computed(() => this._disabled() || this.disabledInput() || this._ngControlDisabled());\r\n readonly errorState = this._errorState;\r\n readonly id = this._uid;\r\n\r\n readonly empty = computed(() => {\r\n return this._value() === null;\r\n });\r\n\r\n // Display value formatted for current format\r\n readonly _displayValue = computed(() => {\r\n return formatTime(this._value(), this.formatInput(), this.showSeconds());\r\n });\r\n\r\n // Display value for form-field readOnly mode\r\n readonly displayValue = this._displayValue;\r\n\r\n // Computed time options for dropdown\r\n readonly _timeOptions = computed<TimeOption[]>(() => {\r\n const minVal = this.min() ? parseISOTimeString(this.min()) : undefined;\r\n const maxVal = this.max() ? parseISOTimeString(this.max()) : undefined;\r\n return generateTimeOptions(\r\n this.formatInput(),\r\n this.minuteStep(),\r\n this.showSeconds(),\r\n minVal ?? undefined,\r\n maxVal ?? undefined,\r\n );\r\n });\r\n\r\n // ViewChild\r\n @ViewChild('inputElement', { static: false }) inputElement?: ElementRef<HTMLInputElement>;\r\n @ViewChild('timeListPanel', { static: false }) timeListPanel?: ElementRef<HTMLDivElement>;\r\n\r\n // Overlay\r\n private _overlayRef: FuiOverlayRef | null = null;\r\n private _overlaySubscriptions = new Subscription();\r\n private readonly _overlayService = inject(FuiOverlayService);\r\n private readonly _elementRef = inject(ElementRef);\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _ngZone = inject(NgZone);\r\n readonly intl = inject(FuiTimePickerIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n private _outsideClickSub?: Subscription;\r\n\r\n // CVA callbacks\r\n private _onChange: (value: string | null) => void = () => {\r\n /* noop */\r\n };\r\n private _onTouched: () => void = () => {\r\n /* noop */\r\n };\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => { this._cdr.markForCheck(); });\r\n\r\n void Promise.resolve().then(() => {\r\n if (this._ngControlRef.ngControl) {\r\n this._ngControlRef.ngControl.valueAccessor = this;\r\n }\r\n });\r\n\r\n // Effect to emit state changes\r\n effect(() => {\r\n this.placeholderInput();\r\n this.readonly();\r\n this.disabledInput();\r\n this.formatInput();\r\n this.showSeconds();\r\n this.minuteStep();\r\n this.min();\r\n this.max();\r\n this.errorStateMatcher();\r\n this._focused();\r\n this._disabled();\r\n this._value();\r\n this._ngControlDisabled();\r\n this._required();\r\n this._errorState();\r\n\r\n this.stateChanges.next();\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (this.ngControl) {\r\n updateErrorState(\r\n this.ngControl,\r\n this._errorState,\r\n this.errorStateMatcher(),\r\n this._defaultErrorStateMatcher,\r\n this._parentForm,\r\n this._parentFormGroup,\r\n this.stateChanges,\r\n );\r\n syncRequiredState(this.ngControl, this._required, this.stateChanges);\r\n syncNgControlDisabled(this.ngControl, this._ngControlDisabled, this.stateChanges);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n this._outsideClickSub?.unsubscribe();\r\n this._disposeOverlay();\r\n }\r\n\r\n // --- CVA ---\r\n\r\n writeValue(value: string | null): void {\r\n if (value) {\r\n const parsed = parseISOTimeString(value);\r\n this._value.set(parsed);\r\n } else {\r\n this._value.set(null);\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled.set(isDisabled);\r\n this.stateChanges.next();\r\n }\r\n\r\n // --- FuiFormFieldControl ---\r\n\r\n onContainerClick(_event: MouseEvent): void {\r\n if (!this.disabled()) {\r\n this.inputElement?.nativeElement.focus();\r\n if (!this._panelOpen()) {\r\n this.open();\r\n }\r\n }\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n this._ariaDescribedby = ids.length ? ids.join(' ') : null;\r\n }\r\n\r\n setReadOnly(readOnly: boolean): void {\r\n this._readOnly.set(readOnly);\r\n }\r\n\r\n // --- Panel open/close ---\r\n\r\n open(): void {\r\n if (this.disabled() || this.readonly() || this._panelOpen()) return;\r\n\r\n requestAnimationFrame(() => {\r\n this._panelOpen.set(true);\r\n this._focused.set(true);\r\n\r\n setTimeout(() => {\r\n this._createOverlay();\r\n this._listenForOutsideClicks();\r\n });\r\n });\r\n }\r\n\r\n close(): void {\r\n if (!this._panelOpen()) return;\r\n this._outsideClickSub?.unsubscribe();\r\n\r\n this._panelOpen.set(false);\r\n this._focused.set(false);\r\n this._disposeOverlay();\r\n this._onTouched();\r\n\r\n setTimeout(() => {\r\n this.inputElement?.nativeElement.focus();\r\n }, 0);\r\n }\r\n\r\n _togglePanel(): void {\r\n if (this.disabled() || this.readonly()) return;\r\n if (this._panelOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n // --- Event handlers ---\r\n\r\n _onManualInput(_event: Event): void {\r\n // We handle parsing on blur, not on every keystroke\r\n }\r\n\r\n _onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this._panelOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n } else if (event.key === 'ArrowDown' && !this._panelOpen()) {\r\n event.preventDefault();\r\n this.open();\r\n } else if (event.key === 'Enter' && !this._panelOpen()) {\r\n event.preventDefault();\r\n this.open();\r\n }\r\n }\r\n\r\n _onFocus(): void {\r\n this._focused.set(true);\r\n }\r\n\r\n _onBlur(): void {\r\n const input = this.inputElement?.nativeElement;\r\n if (!input) return;\r\n\r\n const text = input.value;\r\n if (!text) {\r\n this._setValue(null);\r\n return;\r\n }\r\n\r\n const parsed = parseTimeString(text, this.formatInput());\r\n if (parsed) {\r\n this._setValue(parsed);\r\n } else {\r\n // Invalid input — revert to previous formatted value\r\n input.value = this._displayValue();\r\n }\r\n\r\n if (!this._panelOpen()) {\r\n this._onTouched();\r\n }\r\n }\r\n\r\n /** Called when user selects an option from the time list dropdown. */\r\n _onOptionSelected(value: TimeValue): void {\r\n this._setValue(value);\r\n this.close();\r\n }\r\n\r\n // Start listening for outside clicks when panel opens\r\n private _listenForOutsideClicks(): void {\r\n this._outsideClickSub?.unsubscribe();\r\n\r\n this._ngZone.runOutsideAngular(() => {\r\n setTimeout(() => {\r\n this._outsideClickSub = fromEvent<MouseEvent>(this._document, 'click')\r\n .pipe(\r\n filter(() => this._panelOpen()),\r\n filter((event) => {\r\n const target = event.target as HTMLElement;\r\n const hostElement = this._elementRef.nativeElement;\r\n const overlayElement = this._overlayRef?.overlayElement;\r\n return !hostElement.contains(target) && !overlayElement?.contains(target);\r\n }),\r\n )\r\n .subscribe(() => {\r\n this._ngZone.run(() => {\r\n this.close();\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n // --- Private helpers ---\r\n\r\n private _setValue(value: TimeValue | null): void {\r\n this._value.set(value);\r\n const stringVal = value ? timeValueToString(value, this.showSeconds()) : null;\r\n this._onChange(stringVal);\r\n this.timeChange.emit(stringVal ?? '');\r\n this.stateChanges.next();\r\n }\r\n\r\n private _createOverlay(): void {\r\n if (this._overlayRef || !this.timeListPanel) return;\r\n\r\n const triggerElement = this._elementRef.nativeElement;\r\n const triggerWidth = triggerElement.getBoundingClientRect().width;\r\n\r\n const positions: FuiConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\r\n ];\r\n\r\n const positionStrategy = this._overlayService\r\n .position()\r\n .connectedTo(triggerElement, positions)\r\n .withPush(true)\r\n .withViewportMargin(8);\r\n\r\n this._overlayRef = this._overlayService.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlayService.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'fui-time-picker-backdrop',\r\n backdropClickBehavior: 'close',\r\n panelClass: ['fui-time-picker-overlay-panel'],\r\n minWidth: Math.max(triggerWidth, 160),\r\n });\r\n\r\n // Track overlay subscriptions for proper cleanup\r\n this._overlaySubscriptions.unsubscribe();\r\n this._overlaySubscriptions = new Subscription();\r\n\r\n this._overlaySubscriptions.add(\r\n this._overlayRef.backdropClick.subscribe(() => {\r\n this.close();\r\n }),\r\n );\r\n\r\n this._overlaySubscriptions.add(\r\n this._overlayRef.keydownEvents.subscribe((event) => {\r\n if (event.key === 'Escape') {\r\n this.close();\r\n }\r\n }),\r\n );\r\n\r\n const panelElement = this.timeListPanel.nativeElement;\r\n this._overlayRef.attach(panelElement);\r\n }\r\n\r\n private _disposeOverlay(): void {\r\n this._overlaySubscriptions.unsubscribe();\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._overlayRef = null;\r\n }\r\n }\r\n}\r\n","<div class=\"fui-time-picker__wrapper\">\r\n <input\r\n #inputElement\r\n class=\"fui-time-picker__input\"\r\n type=\"text\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.disabled]=\"disabled() ? '' : null\"\r\n [attr.readonly]=\"readonly() ? '' : null\"\r\n [value]=\"_displayValue()\"\r\n [attr.aria-expanded]=\"_panelOpen()\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-describedby]=\"_ariaDescribedby\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"errorState()\"\r\n role=\"combobox\"\r\n autocomplete=\"off\"\r\n (input)=\"_onManualInput($event)\"\r\n (keydown)=\"_onKeydown($event)\"\r\n (focus)=\"_onFocus()\"\r\n (blur)=\"_onBlur()\"\r\n />\r\n @if (!_readOnly()) {\r\n <button\r\n type=\"button\"\r\n class=\"fui-time-picker__toggle\"\r\n (click)=\"_togglePanel()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"intl.toggleAriaLabel\"\r\n >\r\n <fui-icon name=\"clock\" size=\"sm\"></fui-icon>\r\n </button>\r\n }\r\n</div>\r\n\r\n@if (_panelOpen()) {\r\n <div #timeListPanel class=\"fui-time-picker__panel\" role=\"dialog\" [attr.aria-label]=\"intl.dialogAriaLabel\">\r\n <fui-time-list\r\n [options]=\"_timeOptions()\"\r\n [selectedValue]=\"_value()\"\r\n [format]=\"formatInput()\"\r\n (optionSelected)=\"_onOptionSelected($event)\"\r\n />\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;AAEA;;AAEG;AACG,SAAU,aAAa,CAAC,IAAe,EAAA;IAC3C,OAAO,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;AAChF;AAEA;;;AAGG;AACG,SAAU,WAAW,CAAC,CAAY,EAAE,CAAY,EAAA;AACpD,IAAA,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;AAC7B,IAAA,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;IAC7B,IAAI,IAAI,GAAG,IAAI;QAAE,OAAO,CAAC,CAAC;IAC1B,IAAI,IAAI,GAAG,IAAI;AAAE,QAAA,OAAO,CAAC;AACzB,IAAA,OAAO,CAAC;AACV;AAEA;;AAEG;SACa,aAAa,CAAC,IAAe,EAAE,GAAe,EAAE,GAAe,EAAA;IAC7E,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK;IACnD,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK;AACnD,IAAA,OAAO,IAAI;AACb;AAEA;;;;AAIG;SACa,UAAU,CAAC,KAAuB,EAAE,MAAkB,EAAE,WAAoB,EAAA;AAC1F,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE;AAErB,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK;AACrB,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO;AACvB,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC;AAE5B,IAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAEhE,IAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,EAAE;AAClC,QAAA,OAAO,WAAW,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,CAAA,CAAE,GAAG,IAAI;IACjD;;AAGA,IAAA,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;IACpC,IAAI,WAAW,GAAG,CAAC;IACnB,IAAI,CAAC,KAAK,CAAC;QAAE,WAAW,GAAG,EAAE;SACxB,IAAI,CAAC,GAAG,EAAE;AAAE,QAAA,WAAW,GAAG,CAAC,GAAG,EAAE;IACrC,MAAM,IAAI,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,CAAA,CAAE;IACvC,OAAO,WAAW,GAAG,GAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAA,CAAE,GAAG,GAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;AAC1E;AAEA;;;;AAIG;AACG,SAAU,eAAe,CAAC,GAAW,EAAE,MAAkB,EAAA;AAC7D,IAAA,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;AAAE,QAAA,OAAO,IAAI;AAE7B,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE;AAE1B,IAAA,IAAI,MAAM,KAAK,KAAK,EAAE;;QAEpB,MAAM,OAAO,GAAG,6CAA6C,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3E,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAEzB,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAEvC,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE;AAAE,YAAA,OAAO,IAAI;AACvE,QAAA,IAAI,OAAO,KAAK,SAAS,KAAK,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC;AAAE,YAAA,OAAO,IAAI;AAEvE,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;YAAE,KAAK,GAAG,CAAC;AACzC,aAAA,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;YAAE,KAAK,IAAI,EAAE;QAErD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,OAAO,KAAK,SAAS,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;IAC1E;;IAGA,MAAM,OAAO,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC;AAChE,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;IAEzB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS;AAEjE,IAAA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE;AAAE,QAAA,OAAO,IAAI;AACvE,IAAA,IAAI,OAAO,KAAK,SAAS,KAAK,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC;AAAE,QAAA,OAAO,IAAI;IAEvE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,OAAO,KAAK,SAAS,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;AAC1E;AAEA;;AAEG;AACG,SAAU,mBAAmB,CACjC,MAAkB,EAClB,UAAkB,EAClB,WAAoB,EACpB,GAAe,EACf,GAAe,EAAA;IAEf,MAAM,OAAO,GAAiB,EAAE;AAChC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAElD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;AACjC,YAAA,MAAM,KAAK,GAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,WAAW,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YACzF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;YACpD,MAAM,QAAQ,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC1C;IACF;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,KAAuB,EAAE,WAAoB,EAAA;AAC7E,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE;AACrB,IAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAChE,IAAA,MAAM,IAAI,GAAG,CAAA,EAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;IACxD,OAAO,WAAW,GAAG,GAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA,CAAE,GAAG,IAAI;AAClE;AAEA;;;AAGG;AACG,SAAU,kBAAkB,CAAC,GAAW,EAAA;AAC5C,IAAA,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;AAAE,QAAA,OAAO,IAAI;IAC7B,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;AAC3C;;AC3IM,MAAO,iBAAkB,SAAQ,WAAW,CAAA;IAChD,eAAe,GAAG,oBAAoB;IACtC,eAAe,GAAG,gBAAgB;IAClC,uBAAuB,GAAG,iBAAiB;uGAHhC,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC2BrB,oBAAoB,CAAA;;AAEtB,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAgB;;AAGxC,IAAA,aAAa,GAAG,KAAK,CAAmB,IAAI,oFAAC;;AAG7C,IAAA,MAAM,GAAG,KAAK,CAAa,KAAK,6EAAC;;IAGjC,cAAc,GAAG,MAAM,EAAa;;AAGpC,IAAA,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,oFAAC;AAEY,IAAA,aAAa;AAEnD,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxB,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEjD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK,EAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;;QAG3F,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,OAAO,EAAE;;YAEd,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;gBAC/B,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,iBAAiB,EAAE;IAC1B;;AAGA,IAAA,WAAW,CAAC,MAAkB,EAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;QAC3B,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;IAClD;;AAGA,IAAA,aAAa,CAAC,MAAkB,EAAA;QAC9B,IAAI,MAAM,CAAC,QAAQ;YAAE;QACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACxC;;AAGA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAElB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClB;AACF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACnB;AACF,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACxB;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC;;IAEN;;AAGQ,IAAA,UAAU,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAElB,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;QACvB,IAAI,QAAQ,GAAG,CAAC;AAEhB,QAAA,GAAG;YACD,OAAO,GAAG,CAAC,OAAO,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG;AACvC,YAAA,QAAQ,EAAE;QACZ,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,IAAI,QAAQ,GAAG,GAAG;QAEjD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAChC;IACF;;AAGQ,IAAA,gBAAgB,CAAC,KAAa,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAC5B;;IAGQ,cAAc,GAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;AACxD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QAC3C;IACF;;AAGQ,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa;AACnD,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,MAAM,KAAK,GAAG,SAAS,CAAC,gBAAgB,CAAC,wBAAwB,CAAC;AAClE,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAgB;AACxC,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS;AAC9B,QAAA,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,YAAY;AAC9C,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS;AACrC,QAAA,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC,YAAY;AAEvD,QAAA,IAAI,OAAO,GAAG,SAAS,EAAE;AACvB,YAAA,SAAS,CAAC,SAAS,GAAG,OAAO;QAC/B;AAAO,aAAA,IAAI,UAAU,GAAG,YAAY,EAAE;YACpC,SAAS,CAAC,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,YAAY;QAC3D;IACF;;IAGQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzE,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;;YAE7B,qBAAqB,CAAC,MAAK;AACzB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC5B,YAAA,CAAC,CAAC;QACJ;IACF;uGAtJW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,uqBC9BjC,6zBAwBA,EAAA,MAAA,EAAA,CAAA,0qGAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FDMa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,eAAA,EAGC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,eAAe;AACvB,qBAAA,EAAA,QAAA,EAAA,6zBAAA,EAAA,MAAA,EAAA,CAAA,0qGAAA,CAAA,EAAA;;sBAkBA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;ME0BlC,sBAAsB,CAAA;AACjC,IAAA,OAAO,MAAM,GAAG,CAAC;IACR,WAAW,GAAG,iBAAiB;;IAG/B,WAAW,GAA4B,KAAK,CAAa,KAAK,mFAAI,KAAK,EAAE,QAAQ,EAAA,CAAG;IACpF,WAAW,GAA+C,KAAK,CAAmB,KAAK,mFAC9F,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACO,IAAA,UAAU,GAAwB,KAAK,CAAC,EAAE,iFAAC;AAC3C,IAAA,GAAG,GAAwB,KAAK,CAAC,EAAE,0EAAC;AACpC,IAAA,GAAG,GAAwB,KAAK,CAAC,EAAE,0EAAC;IACpC,gBAAgB,GAAwB,KAAK,CAAC,EAAE,wFAAI,KAAK,EAAE,aAAa,EAAA,CAAG;AAC3E,IAAA,aAAa,GAA+C,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EAChG,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IACO,QAAQ,GAA+C,KAAK,CAAmB,KAAK,gFAC3F,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACO,IAAA,iBAAiB,GAA0C,KAAK,CAA2B,IAAI,wFAAC;;IAGhG,UAAU,GAA6B,MAAM,EAAU;;AAGhE,qBAA0B,MAAM,GAAqC,MAAM,CAAC,IAAI,6EAAC;AAChE,IAAA,QAAQ,GAA4B,MAAM,CAAC,KAAK,+EAAC;AACjD,IAAA,SAAS,GAA4B,MAAM,CAAC,KAAK,gFAAC;AAClD,IAAA,kBAAkB,GAA4B,MAAM,CAAC,KAAK,yFAAC;AAC3D,IAAA,SAAS,GAA4B,MAAM,CAAC,KAAK,gFAAC;AAClD,IAAA,WAAW,GAA4B,MAAM,CAAC,KAAK,kFAAC;AAC5D,IAAA,SAAS,GAA4B,MAAM,CAAC,KAAK,gFAAC;AAClD,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;;AAG1B,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AACnC,IAAA,IAAI,GAAG,CAAA,gBAAA,EAAmB,sBAAsB,CAAC,MAAM,EAAE,EAAE;IACnE,gBAAgB,GAAkB,IAAI;;IAG9B,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChD,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjE,IAAA,yBAAyB,GAAG,MAAM,CAAC,wBAAwB,CAAC;IACnD,aAAa,GAAG,eAAe,EAAE;AAClD,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS;IACrC;;IAGS,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACrD,IAAA,QAAQ,GAAG,IAAI,CAAC,SAAS;AACzB,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACxB,QAAA,OAAO,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI;AAC9D,IAAA,CAAC,4EAAC;AACO,IAAA,OAAO,GAAG,IAAI,CAAC,QAAQ;IACvB,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAChG,IAAA,UAAU,GAAG,IAAI,CAAC,WAAW;AAC7B,IAAA,EAAE,GAAG,IAAI,CAAC,IAAI;AAEd,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI;AAC/B,IAAA,CAAC,4EAAC;;AAGO,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1E,IAAA,CAAC,oFAAC;;AAGO,IAAA,YAAY,GAAG,IAAI,CAAC,aAAa;;AAGjC,IAAA,YAAY,GAAG,QAAQ,CAAe,MAAK;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS;QACtE,OAAO,mBAAmB,CACxB,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,WAAW,EAAE,EAClB,MAAM,IAAI,SAAS,EACnB,MAAM,IAAI,SAAS,CACpB;AACH,IAAA,CAAC,mFAAC;;AAG4C,IAAA,YAAY;AACX,IAAA,aAAa;;IAGpD,WAAW,GAAyB,IAAI;AACxC,IAAA,qBAAqB,GAAG,IAAI,YAAY,EAAE;AACjC,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AAChC,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxB,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACzC,IAAA,gBAAgB;;IAGhB,SAAS,GAAmC,MAAK;;AAEzD,IAAA,CAAC;IACO,UAAU,GAAe,MAAK;;AAEtC,IAAA,CAAC;AAED,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK,EAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QAE3F,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC/B,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;gBAChC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;YACnD;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,WAAW,EAAE;AAElB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,gBAAgB,CACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,iBAAiB,EAAE,EACxB,IAAI,CAAC,yBAAyB,EAC9B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,YAAY,CAClB;AACD,YAAA,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;AACpE,YAAA,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC;QACnF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE;QACpC,IAAI,CAAC,eAAe,EAAE;IACxB;;AAIA,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QACzB;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAAkC,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;;AAIA,IAAA,gBAAgB,CAAC,MAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,KAAK,EAAE;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;gBACtB,IAAI,CAAC,IAAI,EAAE;YACb;QACF;IACF;AAEA,IAAA,iBAAiB,CAAC,GAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IAC3D;AAEA,IAAA,WAAW,CAAC,QAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9B;;IAIA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QAE7D,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAEvB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;AACxB,QAAA,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE;AAEpC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,UAAU,EAAE;QAEjB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,KAAK,EAAE;QAC1C,CAAC,EAAE,CAAC,CAAC;IACP;IAEA,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACxC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,KAAK,EAAE;QACd;aAAO;YACL,IAAI,CAAC,IAAI,EAAE;QACb;IACF;;AAIA,IAAA,cAAc,CAAC,MAAa,EAAA;;IAE5B;AAEA,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YAC/C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YAC1D,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,IAAI,EAAE;QACb;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,IAAI,EAAE;QACb;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa;AAC9C,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;QACxB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACpB;QACF;QAEA,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACxD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACxB;aAAO;;AAEL,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;QACpC;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;;AAGA,IAAA,iBAAiB,CAAC,KAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,KAAK,EAAE;IACd;;IAGQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE;AAEpC,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAClC,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAa,IAAI,CAAC,SAAS,EAAE,OAAO;AAClE,qBAAA,IAAI,CACH,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EAC/B,MAAM,CAAC,CAAC,KAAK,KAAI;AACf,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AAClD,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc;AACvD,oBAAA,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC3E,gBAAA,CAAC,CAAC;qBAEH,SAAS,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;wBACpB,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAIQ,IAAA,SAAS,CAAC,KAAuB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,MAAM,SAAS,GAAG,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI;AAC7E,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;AAE7C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;QACrD,MAAM,YAAY,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAEjE,QAAA,MAAM,SAAS,GAA2B;AACxC,YAAA,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;YACvF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;SACzF;AAED,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,WAAW,CAAC,cAAc,EAAE,SAAS;aACrC,QAAQ,CAAC,IAAI;aACb,kBAAkB,CAAC,CAAC,CAAC;QAExB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAC7C,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAClE,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,0BAA0B;AACzC,YAAA,qBAAqB,EAAE,OAAO;YAC9B,UAAU,EAAE,CAAC,+BAA+B,CAAC;YAC7C,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;AACtC,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,YAAY,EAAE;AAE/C,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;YAC5C,IAAI,CAAC,KAAK,EAAE;QACd,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACjD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;gBAC1B,IAAI,CAAC,KAAK,EAAE;YACd;QACF,CAAC,CAAC,CACH;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC;IACvC;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;AACxC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;uGAnYW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAAA,EAAA,cAAA,EAAA,iCAAA,EAAA,YAAA,EAAA,gCAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,cAAA,EAAA,iCAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAZtB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,sBAAsB;AACnC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,WAAW,EAAE,sBAAsB;AACpC,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtEH,y8CA6CA,EAAA,MAAA,EAAA,CAAA,mzIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCY,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA0BrC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA7BlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,EAAA,eAAA,EAGhC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,+BAA+B,EAAE,cAAc;AAC/C,wBAAA,mCAAmC,EAAE,YAAY;AACjD,wBAAA,kCAAkC,EAAE,WAAW;AAC/C,wBAAA,gCAAgC,EAAE,cAAc;AAChD,wBAAA,mCAAmC,EAAE,aAAa;qBACnD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,sBAAwB;AACnC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,sBAAsB;AAC/B,4BAAA,WAAW,EAAA,sBAAwB;AACpC,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,y8CAAA,EAAA,MAAA,EAAA,CAAA,mzIAAA,CAAA,EAAA;;sBAyFA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAC3C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AEhK/C;;AAEG;;;;"}
|
|
@@ -97,7 +97,7 @@ class FuiTooltipComponent {
|
|
|
97
97
|
return baseClass;
|
|
98
98
|
}, ...(ngDevMode ? [{ debugName: "arrowClasses" }] : /* istanbul ignore next */ []));
|
|
99
99
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
100
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: FuiTooltipComponent, isStandalone: true, selector: "fui-tooltip", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: true, transformFunction: null }, arrow: { classPropertyName: "arrow", publicName: "arrow", isSignal: true, isRequired: true, transformFunction: null }, tooltipId: { classPropertyName: "tooltipId", publicName: "tooltipId", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class": "computedClasses()", "id": "tooltipId()", "attr.role": "\"tooltip\"", "style.max-width": "maxWidth()" }, classAttribute: "fui-tooltip" }, ngImport: i0, template: "<div class=\"fui-tooltip__content\">\r\n {{ content() }}\r\n</div>\r\n@if (arrow()) {\r\n <div [class]=\"arrowClasses()\"></div>\r\n}\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}
|
|
100
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: FuiTooltipComponent, isStandalone: true, selector: "fui-tooltip", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: true, transformFunction: null }, arrow: { classPropertyName: "arrow", publicName: "arrow", isSignal: true, isRequired: true, transformFunction: null }, tooltipId: { classPropertyName: "tooltipId", publicName: "tooltipId", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class": "computedClasses()", "id": "tooltipId()", "attr.role": "\"tooltip\"", "style.max-width": "maxWidth()" }, classAttribute: "fui-tooltip" }, ngImport: i0, template: "<div class=\"fui-tooltip__content\">\r\n {{ content() }}\r\n</div>\r\n@if (arrow()) {\r\n <div [class]=\"arrowClasses()\"></div>\r\n}\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}.fui-tooltip{--fui-tooltip-border-radius: var(--fui-border-radius-sm);--fui-tooltip-shadow: var(--fui-shadow-03);--fui-tooltip-font-size: var(--fui-font-size-02);--fui-tooltip-padding-x: var(--fui-spacing-04);--fui-tooltip-padding-y: var(--fui-spacing-03);z-index:var(--fui-z-tooltip, 1000);display:block;font-family:var(--fui-font-family-sans);font-weight:var(--fui-font-weight-regular);line-height:var(--fui-line-height-body);border-radius:var(--fui-tooltip-border-radius);background-color:var(--fui-tooltip-background);color:var(--fui-tooltip-text);box-shadow:var(--fui-tooltip-shadow);transition:opacity var(--fui-duration-fast-01) var(--fui-ease-standard) 0ms;opacity:0;animation:fui-tooltip-fade-in var(--fui-duration-fast-02) ease-out forwards}.fui-tooltip__content{padding:var(--fui-tooltip-padding-y) var(--fui-tooltip-padding-x);word-wrap:break-word;hyphens:auto;font-size:var(--fui-font-size-01);line-height:var(--fui-line-height-01)}.fui-tooltip__arrow{position:absolute;width:0;height:0;border-style:solid;border-color:transparent;--arrow-size: 6px}.fui-tooltip__arrow--top{bottom:100%;left:50%;transform:translate(-50%);border-width:0 var(--arrow-size) var(--arrow-size) var(--arrow-size);border-bottom-color:var(--fui-tooltip-background)}.fui-tooltip__arrow--bottom{top:100%;left:50%;transform:translate(-50%);border-width:var(--arrow-size) var(--arrow-size) 0 var(--arrow-size);border-top-color:var(--fui-tooltip-background)}.fui-tooltip__arrow--left{right:100%;top:50%;transform:translateY(-50%);border-width:var(--arrow-size) var(--arrow-size) var(--arrow-size) 0;border-right-color:var(--fui-tooltip-background)}.fui-tooltip__arrow--right{left:100%;top:50%;transform:translateY(-50%);border-width:var(--arrow-size) 0 var(--arrow-size) var(--arrow-size);border-left-color:var(--fui-tooltip-background)}.fui-tooltip--right{transform:translate(-50%)}.fui-tooltip--top-start .fui-tooltip__arrow,.fui-tooltip--bottom-start .fui-tooltip__arrow{left:var(--fui-spacing-04);transform:none}.fui-tooltip--top-end .fui-tooltip__arrow,.fui-tooltip--bottom-end .fui-tooltip__arrow{right:var(--fui-spacing-04);left:auto;transform:none}.fui-tooltip--left-start .fui-tooltip__arrow,.fui-tooltip--right-start .fui-tooltip__arrow{top:var(--fui-spacing-04);transform:none}.fui-tooltip--left-end .fui-tooltip__arrow,.fui-tooltip--right-end .fui-tooltip__arrow{bottom:var(--fui-spacing-04);top:auto;transform:none}.fui-tooltip--sm{font-size:var(--fui-font-size-01)}.fui-tooltip--sm .fui-tooltip__content{padding:var(--fui-spacing-02) var(--fui-spacing-03)}.fui-tooltip--sm .fui-tooltip__arrow{--arrow-size: 4px}.fui-tooltip--md{font-size:var(--fui-font-size-02)}.fui-tooltip--md .fui-tooltip__content{padding:var(--fui-spacing-03) var(--fui-spacing-04)}.fui-tooltip--md .fui-tooltip__arrow{--arrow-size: 6px}.fui-tooltip--lg{font-size:var(--fui-font-size-03)}.fui-tooltip--lg .fui-tooltip__content{padding:var(--fui-spacing-04) var(--fui-spacing-05)}.fui-tooltip--lg .fui-tooltip__arrow{--arrow-size: 8px}@media(prefers-contrast:more){.fui-tooltip{border:2px solid var(--fui-text-primary);box-shadow:var(--fui-shadow-04)}}@media(prefers-reduced-motion:reduce){.fui-tooltip{animation:none;opacity:1}}@media print{.fui-tooltip{display:none!important}}@keyframes fui-tooltip-fade-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
101
101
|
}
|
|
102
102
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiTooltipComponent, decorators: [{
|
|
103
103
|
type: Component,
|
|
@@ -107,7 +107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
|
|
|
107
107
|
'[id]': 'tooltipId()',
|
|
108
108
|
'[attr.role]': '"tooltip"',
|
|
109
109
|
'[style.max-width]': 'maxWidth()',
|
|
110
|
-
}, template: "<div class=\"fui-tooltip__content\">\r\n {{ content() }}\r\n</div>\r\n@if (arrow()) {\r\n <div [class]=\"arrowClasses()\"></div>\r\n}\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}
|
|
110
|
+
}, template: "<div class=\"fui-tooltip__content\">\r\n {{ content() }}\r\n</div>\r\n@if (arrow()) {\r\n <div [class]=\"arrowClasses()\"></div>\r\n}\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}.fui-tooltip{--fui-tooltip-border-radius: var(--fui-border-radius-sm);--fui-tooltip-shadow: var(--fui-shadow-03);--fui-tooltip-font-size: var(--fui-font-size-02);--fui-tooltip-padding-x: var(--fui-spacing-04);--fui-tooltip-padding-y: var(--fui-spacing-03);z-index:var(--fui-z-tooltip, 1000);display:block;font-family:var(--fui-font-family-sans);font-weight:var(--fui-font-weight-regular);line-height:var(--fui-line-height-body);border-radius:var(--fui-tooltip-border-radius);background-color:var(--fui-tooltip-background);color:var(--fui-tooltip-text);box-shadow:var(--fui-tooltip-shadow);transition:opacity var(--fui-duration-fast-01) var(--fui-ease-standard) 0ms;opacity:0;animation:fui-tooltip-fade-in var(--fui-duration-fast-02) ease-out forwards}.fui-tooltip__content{padding:var(--fui-tooltip-padding-y) var(--fui-tooltip-padding-x);word-wrap:break-word;hyphens:auto;font-size:var(--fui-font-size-01);line-height:var(--fui-line-height-01)}.fui-tooltip__arrow{position:absolute;width:0;height:0;border-style:solid;border-color:transparent;--arrow-size: 6px}.fui-tooltip__arrow--top{bottom:100%;left:50%;transform:translate(-50%);border-width:0 var(--arrow-size) var(--arrow-size) var(--arrow-size);border-bottom-color:var(--fui-tooltip-background)}.fui-tooltip__arrow--bottom{top:100%;left:50%;transform:translate(-50%);border-width:var(--arrow-size) var(--arrow-size) 0 var(--arrow-size);border-top-color:var(--fui-tooltip-background)}.fui-tooltip__arrow--left{right:100%;top:50%;transform:translateY(-50%);border-width:var(--arrow-size) var(--arrow-size) var(--arrow-size) 0;border-right-color:var(--fui-tooltip-background)}.fui-tooltip__arrow--right{left:100%;top:50%;transform:translateY(-50%);border-width:var(--arrow-size) 0 var(--arrow-size) var(--arrow-size);border-left-color:var(--fui-tooltip-background)}.fui-tooltip--right{transform:translate(-50%)}.fui-tooltip--top-start .fui-tooltip__arrow,.fui-tooltip--bottom-start .fui-tooltip__arrow{left:var(--fui-spacing-04);transform:none}.fui-tooltip--top-end .fui-tooltip__arrow,.fui-tooltip--bottom-end .fui-tooltip__arrow{right:var(--fui-spacing-04);left:auto;transform:none}.fui-tooltip--left-start .fui-tooltip__arrow,.fui-tooltip--right-start .fui-tooltip__arrow{top:var(--fui-spacing-04);transform:none}.fui-tooltip--left-end .fui-tooltip__arrow,.fui-tooltip--right-end .fui-tooltip__arrow{bottom:var(--fui-spacing-04);top:auto;transform:none}.fui-tooltip--sm{font-size:var(--fui-font-size-01)}.fui-tooltip--sm .fui-tooltip__content{padding:var(--fui-spacing-02) var(--fui-spacing-03)}.fui-tooltip--sm .fui-tooltip__arrow{--arrow-size: 4px}.fui-tooltip--md{font-size:var(--fui-font-size-02)}.fui-tooltip--md .fui-tooltip__content{padding:var(--fui-spacing-03) var(--fui-spacing-04)}.fui-tooltip--md .fui-tooltip__arrow{--arrow-size: 6px}.fui-tooltip--lg{font-size:var(--fui-font-size-03)}.fui-tooltip--lg .fui-tooltip__content{padding:var(--fui-spacing-04) var(--fui-spacing-05)}.fui-tooltip--lg .fui-tooltip__arrow{--arrow-size: 8px}@media(prefers-contrast:more){.fui-tooltip{border:2px solid var(--fui-text-primary);box-shadow:var(--fui-shadow-04)}}@media(prefers-reduced-motion:reduce){.fui-tooltip{animation:none;opacity:1}}@media print{.fui-tooltip{display:none!important}}@keyframes fui-tooltip-fade-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}\n"] }]
|
|
111
111
|
}], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: true }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: true }] }], arrow: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrow", required: true }] }], tooltipId: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipId", required: true }] }] } });
|
|
112
112
|
|
|
113
113
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-tooltip.mjs","sources":["../../../lib/components/tooltip/tooltip.types.ts","../../../lib/components/tooltip/tooltip.component.ts","../../../lib/components/tooltip/tooltip.component.html","../../../lib/components/tooltip/tooltip.directive.ts","../../../lib/components/tooltip/index.ts","../../../lib/components/tooltip/raintonic-formaui-components-tooltip.ts"],"sourcesContent":["/**\r\n * Available tooltip positions relative to the trigger element\r\n */\r\nexport type TooltipPosition =\r\n | 'top'\r\n | 'top-start'\r\n | 'top-end'\r\n | 'bottom'\r\n | 'bottom-start'\r\n | 'bottom-end'\r\n | 'left'\r\n | 'left-start'\r\n | 'left-end'\r\n | 'right'\r\n | 'right-start'\r\n | 'right-end';\r\n\r\n/**\r\n * Available tooltip sizes\r\n */\r\nexport type TooltipSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * Tooltip trigger events\r\n */\r\nexport type TooltipTrigger = 'hover' | 'focus' | 'click' | 'manual';\r\n\r\n/**\r\n * Constants for validation\r\n */\r\nexport const TOOLTIP_POSITIONS = [\r\n 'top',\r\n 'top-start',\r\n 'top-end',\r\n 'bottom',\r\n 'bottom-start',\r\n 'bottom-end',\r\n 'left',\r\n 'left-start',\r\n 'left-end',\r\n 'right',\r\n 'right-start',\r\n 'right-end',\r\n] as const;\r\n\r\nexport const TOOLTIP_SIZES = ['sm', 'md', 'lg'] as const;\r\nexport const TOOLTIP_TRIGGERS = ['hover', 'focus', 'click', 'manual'] as const;\r\n\r\n/**\r\n * Tooltip configuration interface\r\n */\r\nexport interface TooltipConfig {\r\n position?: TooltipPosition;\r\n size?: TooltipSize;\r\n trigger?: TooltipTrigger;\r\n showDelay?: number;\r\n hideDelay?: number;\r\n disabled?: boolean;\r\n maxWidth?: string;\r\n offset?: number;\r\n arrow?: boolean;\r\n}\r\n","import { Component, input, computed, Signal, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\r\n\r\nimport { TooltipPosition, TooltipSize } from './tooltip.types';\r\n\r\n/**\r\n * @component FuiTooltipComponent\r\n * @selector fui-tooltip\r\n * @description Internal tooltip component rendered by FuiTooltipDirective via the overlay system.\r\n * Not intended for direct use; created programmatically by the directive.\r\n *\r\n * @input content - (required) Tooltip text content.\r\n * @input position - (required) Tooltip position relative to the trigger element.\r\n * @input size - (required) Tooltip size variant.\r\n * @input maxWidth - (required) Maximum CSS width of the tooltip.\r\n * @input arrow - (required) Whether to render an arrow indicator.\r\n * @input tooltipId - (required) Unique ID for ARIA accessibility linking.\r\n *\r\n * @example\r\n * <!-- Used internally by FuiTooltipDirective -->\r\n * <button fuiTooltip=\"Save your changes\">Save</button>\r\n *\r\n * @internal\r\n */\r\n@Component({\r\n selector: 'fui-tooltip',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './tooltip.component.html',\r\n styleUrl: './tooltip.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-tooltip',\r\n '[class]': 'computedClasses()',\r\n '[id]': 'tooltipId()',\r\n '[attr.role]': '\"tooltip\"',\r\n '[style.max-width]': 'maxWidth()',\r\n },\r\n})\r\nexport class FuiTooltipComponent {\r\n /**\r\n * Tooltip content text\r\n */\r\n readonly content = input.required<string>();\r\n\r\n /**\r\n * Tooltip position\r\n */\r\n readonly position = input.required<TooltipPosition>();\r\n\r\n /**\r\n * Tooltip size\r\n */\r\n readonly size = input.required<TooltipSize>();\r\n\r\n /**\r\n * Maximum width of the tooltip\r\n */\r\n readonly maxWidth = input.required<string>();\r\n\r\n /**\r\n * Whether to show arrow\r\n */\r\n readonly arrow = input.required<boolean>();\r\n\r\n /**\r\n * Tooltip ID for accessibility\r\n */\r\n readonly tooltipId = input.required<string>();\r\n\r\n /**\r\n * Computed CSS classes for the tooltip\r\n */\r\n readonly computedClasses: Signal<string> = computed(() => {\r\n const classes: string[] = ['fui-tooltip', `fui-tooltip--${this.size()}`, `fui-tooltip--${this.position()}`];\r\n\r\n if (this.arrow()) {\r\n classes.push('fui-tooltip--with-arrow');\r\n }\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /**\r\n * Computed arrow classes based on position\r\n */\r\n readonly arrowClasses: Signal<string> = computed(() => {\r\n const position = this.position();\r\n const baseClass = 'fui-tooltip__arrow';\r\n\r\n if (position.startsWith('top')) {\r\n return `${baseClass} ${baseClass}--bottom`;\r\n } else if (position.startsWith('bottom')) {\r\n return `${baseClass} ${baseClass}--top`;\r\n } else if (position.startsWith('left')) {\r\n return `${baseClass} ${baseClass}--right`;\r\n } else if (position.startsWith('right')) {\r\n return `${baseClass} ${baseClass}--left`;\r\n }\r\n\r\n return baseClass;\r\n });\r\n}\r\n","<div class=\"fui-tooltip__content\">\r\n {{ content() }}\r\n</div>\r\n@if (arrow()) {\r\n <div [class]=\"arrowClasses()\"></div>\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n input,\r\n computed,\r\n effect,\r\n HostListener,\r\n inject,\r\n Signal,\r\n OnDestroy,\r\n booleanAttribute,\r\n numberAttribute,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n signal,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport {\r\n TooltipPosition,\r\n TooltipSize,\r\n TooltipTrigger,\r\n TOOLTIP_POSITIONS,\r\n TOOLTIP_SIZES,\r\n TOOLTIP_TRIGGERS,\r\n} from './tooltip.types';\r\nimport { FuiTooltipComponent } from './tooltip.component';\r\nimport { FuiOverlayService, FuiOverlayRef, FuiConnectedPosition } from '@raintonic/formaui/cdk/overlay';\r\n\r\n/**\r\n * # Tooltip Directive\r\n *\r\n * A professional tooltip directive that provides contextual information on hover, focus, or click.\r\n * Follows Material Design patterns with full accessibility support and advanced positioning.\r\n *\r\n * ## Features\r\n * - Multiple positioning options (12 positions)\r\n * - Configurable trigger events (hover, focus, click, manual)\r\n * - Multiple variants for different semantic meanings\r\n * - Flexible sizing options\r\n * - Smart positioning with collision detection\r\n * - Customizable delays and animations\r\n * - Full accessibility support (ARIA attributes, keyboard navigation)\r\n * - Arrow indicator support\r\n * - Responsive design with max-width control\r\n * - Theme support (light/dark)\r\n *\r\n * ## Usage\r\n *\r\n * ### Basic Tooltip\r\n * ```html\r\n * <button fuiTooltip=\"Save your changes\">Save</button>\r\n * ```\r\n *\r\n * ### Advanced Configuration\r\n * ```html\r\n * <button fuiTooltip=\"Delete this item permanently\"\r\n * fuiTooltipPosition=\"top\"\r\n * fuiTooltipVariant=\"error\"\r\n * fuiTooltipSize=\"lg\"\r\n * [fuiTooltipShowDelay]=\"500\">\r\n * Delete\r\n * </button>\r\n * ```\r\n *\r\n * ### Click Trigger\r\n * ```html\r\n * <span fuiTooltip=\"Click to copy\"\r\n * fuiTooltipTrigger=\"click\"\r\n * fuiTooltipPosition=\"bottom\">\r\n * 📋 Copy to clipboard\r\n * </span>\r\n * ```\r\n *\r\n * ### Manual Control\r\n * ```html\r\n * <div fuiTooltip=\"Manual tooltip\"\r\n * fuiTooltipTrigger=\"manual\"\r\n * [fuiTooltipShow]=\"showTooltip\">\r\n * Hover me\r\n * </div>\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * import { FuiTooltipDirective } from '@raintonic/formaui/components/tooltip';\r\n *\r\n * @Component({\r\n * standalone: true,\r\n * imports: [FuiTooltipDirective],\r\n * template: `\r\n * <button fuiTooltip=\"This will save your work\"\r\n * fuiTooltipPosition=\"top\"\r\n * fuiTooltipVariant=\"info\">\r\n * Save Document\r\n * </button>\r\n * `\r\n * })\r\n * export class MyComponent { }\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[fuiTooltip]',\r\n standalone: true,\r\n host: {\r\n '[attr.aria-describedby]': 'isVisible() ? tooltipId() : null',\r\n },\r\n})\r\nexport class FuiTooltipDirective implements OnDestroy {\r\n private static _nextId = 0;\r\n /**\r\n * Tooltip content text\r\n */\r\n readonly fuiTooltip = input.required<string>();\r\n\r\n /**\r\n * Tooltip position relative to the trigger element\r\n * @default 'top'\r\n */\r\n readonly fuiTooltipPosition = input<TooltipPosition, TooltipPosition | string>('top', {\r\n transform: (v) => ((TOOLTIP_POSITIONS as readonly string[]).includes(v) ? (v as TooltipPosition) : 'top'),\r\n });\r\n\r\n /**\r\n * Tooltip size\r\n * @default 'md'\r\n */\r\n readonly fuiTooltipSize = input<TooltipSize, TooltipSize | string>('md', {\r\n transform: (v) => ((TOOLTIP_SIZES as readonly string[]).includes(v) ? (v as TooltipSize) : 'md'),\r\n });\r\n\r\n /**\r\n * Tooltip trigger event\r\n * @default 'hover'\r\n */\r\n readonly fuiTooltipTrigger = input<TooltipTrigger, TooltipTrigger | string>('hover', {\r\n transform: (v) => ((TOOLTIP_TRIGGERS as readonly string[]).includes(v) ? (v as TooltipTrigger) : 'hover'),\r\n });\r\n\r\n /**\r\n * Delay before showing tooltip (in milliseconds)\r\n * @default 500\r\n */\r\n readonly fuiTooltipShowDelay = input<number, unknown>(500, { transform: numberAttribute });\r\n\r\n /**\r\n * Delay before hiding tooltip (in milliseconds)\r\n * @default 0\r\n */\r\n readonly fuiTooltipHideDelay = input<number, unknown>(0, { transform: numberAttribute });\r\n\r\n /**\r\n * Whether the tooltip is disabled\r\n * @default false\r\n */\r\n readonly fuiTooltipDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Maximum width of the tooltip\r\n * @default '200px'\r\n */\r\n readonly fuiTooltipMaxWidth = input('200px');\r\n\r\n /**\r\n * Offset distance from the trigger element (in pixels)\r\n * @default 8\r\n */\r\n readonly fuiTooltipOffset = input<number, unknown>(8, { transform: numberAttribute });\r\n\r\n /**\r\n * Whether to show an arrow pointing to the trigger element\r\n * @default true\r\n */\r\n readonly fuiTooltipArrow = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * Manual control for showing/hiding tooltip (only works with trigger=\"manual\")\r\n * @default false\r\n */\r\n readonly fuiTooltipShow = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n // Internal state\r\n private readonly _isVisible: WritableSignal<boolean> = signal(false);\r\n private readonly _tooltipId: WritableSignal<string> = signal('');\r\n private _overlayRef: FuiOverlayRef | null = null;\r\n private _tooltipComponent: ComponentRef<FuiTooltipComponent> | null = null;\r\n private _showTimeout: number | null = null;\r\n private _hideTimeout: number | null = null;\r\n private _isHoveringTooltip = false;\r\n\r\n // Computed properties\r\n readonly isVisible: Signal<boolean> = computed(() => this._isVisible());\r\n readonly tooltipId: Signal<string> = computed(() => this._tooltipId());\r\n\r\n // Injected dependencies\r\n private readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n private readonly _overlayService: FuiOverlayService = inject(FuiOverlayService);\r\n private readonly _environmentInjector: EnvironmentInjector = inject(EnvironmentInjector);\r\n\r\n constructor() {\r\n // Generate unique tooltip ID\r\n this._tooltipId.set(`fui-tooltip-${FuiTooltipDirective._nextId++}`);\r\n\r\n // Handle manual control\r\n effect(() => {\r\n if (this.fuiTooltipTrigger() === 'manual') {\r\n if (this.fuiTooltipShow()) {\r\n this._showTooltip();\r\n } else {\r\n this._hideTooltip();\r\n }\r\n }\r\n });\r\n\r\n // Handle disabled state\r\n effect(() => {\r\n if (this.fuiTooltipDisabled() && this._isVisible()) {\r\n this._hideTooltip();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._clearTimeouts();\r\n this._destroyTooltip();\r\n }\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter(): void {\r\n if (this.fuiTooltipTrigger() === 'hover' && !this.fuiTooltipDisabled()) {\r\n this._scheduleShow();\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave(): void {\r\n if (this.fuiTooltipTrigger() === 'hover' && !this.fuiTooltipDisabled()) {\r\n this._scheduleHide();\r\n }\r\n }\r\n\r\n @HostListener('focus')\r\n onFocus(): void {\r\n if ((this.fuiTooltipTrigger() === 'focus' || this.fuiTooltipTrigger() === 'hover') && !this.fuiTooltipDisabled()) {\r\n this._scheduleShow();\r\n }\r\n }\r\n\r\n @HostListener('blur')\r\n onBlur(): void {\r\n if ((this.fuiTooltipTrigger() === 'focus' || this.fuiTooltipTrigger() === 'hover') && !this.fuiTooltipDisabled()) {\r\n this._scheduleHide();\r\n }\r\n }\r\n\r\n @HostListener('click')\r\n onClick(): void {\r\n if (this.fuiTooltipTrigger() === 'click' && !this.fuiTooltipDisabled()) {\r\n if (this._isVisible()) {\r\n this._hideTooltip();\r\n } else {\r\n this._showTooltip();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this._isVisible()) {\r\n this._hideTooltip();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /**\r\n * Programmatically show the tooltip\r\n */\r\n show(): void {\r\n if (!this.fuiTooltipDisabled()) {\r\n this._showTooltip();\r\n }\r\n }\r\n\r\n /**\r\n * Programmatically hide the tooltip\r\n */\r\n hide(): void {\r\n this._hideTooltip();\r\n }\r\n\r\n /**\r\n * Toggle tooltip visibility\r\n */\r\n toggle(): void {\r\n if (this._isVisible()) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n private _scheduleShow(): void {\r\n this._clearTimeouts();\r\n\r\n if (this.fuiTooltipShowDelay() > 0) {\r\n this._showTimeout = window.setTimeout(() => {\r\n this._showTooltip();\r\n }, this.fuiTooltipShowDelay());\r\n } else {\r\n this._showTooltip();\r\n }\r\n }\r\n\r\n private _scheduleHide(): void {\r\n this._clearTimeouts();\r\n\r\n if (this.fuiTooltipHideDelay() > 0) {\r\n this._hideTimeout = window.setTimeout(() => {\r\n if (!this._isHoveringTooltip) {\r\n this._hideTooltip();\r\n }\r\n }, this.fuiTooltipHideDelay());\r\n } else {\r\n if (!this._isHoveringTooltip) {\r\n this._hideTooltip();\r\n }\r\n }\r\n }\r\n\r\n private _showTooltip(): void {\r\n if (this._isVisible() || this.fuiTooltipDisabled() || !this.fuiTooltip().trim()) {\r\n return;\r\n }\r\n\r\n this._createTooltip();\r\n this._isVisible.set(true);\r\n\r\n // Add click outside listener for click trigger\r\n if (this.fuiTooltipTrigger() === 'click') {\r\n setTimeout(() => {\r\n document.addEventListener('click', this._onDocumentClick, true);\r\n });\r\n }\r\n }\r\n\r\n private _hideTooltip(): void {\r\n if (!this._isVisible()) {\r\n return;\r\n }\r\n\r\n this._isVisible.set(false);\r\n this._destroyTooltip();\r\n document.removeEventListener('click', this._onDocumentClick, true);\r\n }\r\n\r\n private _createTooltip(): void {\r\n if (this._overlayRef) {\r\n return;\r\n }\r\n\r\n // Create tooltip component first\r\n this._tooltipComponent = createComponent(FuiTooltipComponent, {\r\n environmentInjector: this._environmentInjector,\r\n });\r\n\r\n // Set tooltip properties immediately\r\n this._tooltipComponent.setInput('content', this.fuiTooltip());\r\n this._tooltipComponent.setInput('position', this.fuiTooltipPosition());\r\n this._tooltipComponent.setInput('size', this.fuiTooltipSize());\r\n this._tooltipComponent.setInput('maxWidth', this.fuiTooltipMaxWidth());\r\n this._tooltipComponent.setInput('arrow', this.fuiTooltipArrow());\r\n this._tooltipComponent.setInput('tooltipId', this.tooltipId());\r\n\r\n // Trigger change detection to ensure component is rendered with correct props\r\n this._tooltipComponent.changeDetectorRef.detectChanges();\r\n\r\n // Now create overlay with positioning strategy\r\n const positions = this._getPositionsForTooltipPosition(this.fuiTooltipPosition());\r\n const positionStrategy = this._overlayService\r\n .position()\r\n .connectedTo(this._elementRef, positions)\r\n .withPush(true)\r\n .withViewportMargin(8);\r\n\r\n // Create overlay\r\n this._overlayRef = this._overlayService.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlayService.scrollStrategies.reposition(20),\r\n panelClass: 'fui-tooltip-panel',\r\n });\r\n\r\n // Attach component to overlay\r\n this._overlayRef.attach(this._tooltipComponent);\r\n\r\n // Set up hover events for tooltip persistence\r\n const tooltipElement = this._tooltipComponent.location.nativeElement;\r\n\r\n tooltipElement.addEventListener('mouseenter', () => {\r\n this._isHoveringTooltip = true;\r\n this._clearTimeouts();\r\n });\r\n\r\n tooltipElement.addEventListener('mouseleave', () => {\r\n this._isHoveringTooltip = false;\r\n if (this.fuiTooltipTrigger() === 'hover') {\r\n this._scheduleHide();\r\n }\r\n });\r\n }\r\n\r\n private _getPositionsForTooltipPosition(position: TooltipPosition): FuiConnectedPosition[] {\r\n const offset = this.fuiTooltipOffset();\r\n const positionMap: Record<TooltipPosition, FuiConnectedPosition[]> = {\r\n top: [\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\r\n ],\r\n 'top-start': [\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },\r\n ],\r\n 'top-end': [\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\r\n ],\r\n bottom: [\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\r\n ],\r\n 'bottom-start': [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },\r\n ],\r\n 'bottom-end': [\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\r\n ],\r\n left: [\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\r\n ],\r\n 'left-start': [\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -offset },\r\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: offset },\r\n ],\r\n 'left-end': [\r\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -offset },\r\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: offset },\r\n ],\r\n right: [\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\r\n ],\r\n 'right-start': [\r\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: offset },\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -offset },\r\n ],\r\n 'right-end': [\r\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: offset },\r\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -offset },\r\n ],\r\n };\r\n\r\n return positionMap[position] || positionMap.top;\r\n }\r\n\r\n private _destroyTooltip(): void {\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._overlayRef = null;\r\n }\r\n\r\n if (this._tooltipComponent) {\r\n this._tooltipComponent.destroy();\r\n this._tooltipComponent = null;\r\n }\r\n }\r\n\r\n private _clearTimeouts(): void {\r\n if (this._showTimeout) {\r\n clearTimeout(this._showTimeout);\r\n this._showTimeout = null;\r\n }\r\n if (this._hideTimeout) {\r\n clearTimeout(this._hideTimeout);\r\n this._hideTimeout = null;\r\n }\r\n }\r\n\r\n private readonly _onDocumentClick = (event: Event): void => {\r\n const target = event.target as HTMLElement;\r\n const triggerElement = this._elementRef.nativeElement;\r\n const tooltipElement = this._tooltipComponent?.location.nativeElement;\r\n\r\n if (target && !triggerElement.contains(target) && !tooltipElement?.contains(target)) {\r\n this._hideTooltip();\r\n }\r\n };\r\n}\r\n","// Public API for tooltip component\r\nexport * from './tooltip.directive';\r\nexport * from './tooltip.component';\r\nexport * from './tooltip.types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-components-tooltip.mjs","sources":["../../../lib/components/tooltip/tooltip.types.ts","../../../lib/components/tooltip/tooltip.component.ts","../../../lib/components/tooltip/tooltip.component.html","../../../lib/components/tooltip/tooltip.directive.ts","../../../lib/components/tooltip/index.ts","../../../lib/components/tooltip/raintonic-formaui-components-tooltip.ts"],"sourcesContent":["/**\r\n * Available tooltip positions relative to the trigger element\r\n */\r\nexport type TooltipPosition =\r\n | 'top'\r\n | 'top-start'\r\n | 'top-end'\r\n | 'bottom'\r\n | 'bottom-start'\r\n | 'bottom-end'\r\n | 'left'\r\n | 'left-start'\r\n | 'left-end'\r\n | 'right'\r\n | 'right-start'\r\n | 'right-end';\r\n\r\n/**\r\n * Available tooltip sizes\r\n */\r\nexport type TooltipSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * Tooltip trigger events\r\n */\r\nexport type TooltipTrigger = 'hover' | 'focus' | 'click' | 'manual';\r\n\r\n/**\r\n * Constants for validation\r\n */\r\nexport const TOOLTIP_POSITIONS = [\r\n 'top',\r\n 'top-start',\r\n 'top-end',\r\n 'bottom',\r\n 'bottom-start',\r\n 'bottom-end',\r\n 'left',\r\n 'left-start',\r\n 'left-end',\r\n 'right',\r\n 'right-start',\r\n 'right-end',\r\n] as const;\r\n\r\nexport const TOOLTIP_SIZES = ['sm', 'md', 'lg'] as const;\r\nexport const TOOLTIP_TRIGGERS = ['hover', 'focus', 'click', 'manual'] as const;\r\n\r\n/**\r\n * Tooltip configuration interface\r\n */\r\nexport interface TooltipConfig {\r\n position?: TooltipPosition;\r\n size?: TooltipSize;\r\n trigger?: TooltipTrigger;\r\n showDelay?: number;\r\n hideDelay?: number;\r\n disabled?: boolean;\r\n maxWidth?: string;\r\n offset?: number;\r\n arrow?: boolean;\r\n}\r\n","import { Component, input, computed, Signal, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\r\n\r\nimport { TooltipPosition, TooltipSize } from './tooltip.types';\r\n\r\n/**\r\n * @component FuiTooltipComponent\r\n * @selector fui-tooltip\r\n * @description Internal tooltip component rendered by FuiTooltipDirective via the overlay system.\r\n * Not intended for direct use; created programmatically by the directive.\r\n *\r\n * @input content - (required) Tooltip text content.\r\n * @input position - (required) Tooltip position relative to the trigger element.\r\n * @input size - (required) Tooltip size variant.\r\n * @input maxWidth - (required) Maximum CSS width of the tooltip.\r\n * @input arrow - (required) Whether to render an arrow indicator.\r\n * @input tooltipId - (required) Unique ID for ARIA accessibility linking.\r\n *\r\n * @example\r\n * <!-- Used internally by FuiTooltipDirective -->\r\n * <button fuiTooltip=\"Save your changes\">Save</button>\r\n *\r\n * @internal\r\n */\r\n@Component({\r\n selector: 'fui-tooltip',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './tooltip.component.html',\r\n styleUrl: './tooltip.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-tooltip',\r\n '[class]': 'computedClasses()',\r\n '[id]': 'tooltipId()',\r\n '[attr.role]': '\"tooltip\"',\r\n '[style.max-width]': 'maxWidth()',\r\n },\r\n})\r\nexport class FuiTooltipComponent {\r\n /**\r\n * Tooltip content text\r\n */\r\n readonly content = input.required<string>();\r\n\r\n /**\r\n * Tooltip position\r\n */\r\n readonly position = input.required<TooltipPosition>();\r\n\r\n /**\r\n * Tooltip size\r\n */\r\n readonly size = input.required<TooltipSize>();\r\n\r\n /**\r\n * Maximum width of the tooltip\r\n */\r\n readonly maxWidth = input.required<string>();\r\n\r\n /**\r\n * Whether to show arrow\r\n */\r\n readonly arrow = input.required<boolean>();\r\n\r\n /**\r\n * Tooltip ID for accessibility\r\n */\r\n readonly tooltipId = input.required<string>();\r\n\r\n /**\r\n * Computed CSS classes for the tooltip\r\n */\r\n readonly computedClasses: Signal<string> = computed(() => {\r\n const classes: string[] = ['fui-tooltip', `fui-tooltip--${this.size()}`, `fui-tooltip--${this.position()}`];\r\n\r\n if (this.arrow()) {\r\n classes.push('fui-tooltip--with-arrow');\r\n }\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /**\r\n * Computed arrow classes based on position\r\n */\r\n readonly arrowClasses: Signal<string> = computed(() => {\r\n const position = this.position();\r\n const baseClass = 'fui-tooltip__arrow';\r\n\r\n if (position.startsWith('top')) {\r\n return `${baseClass} ${baseClass}--bottom`;\r\n } else if (position.startsWith('bottom')) {\r\n return `${baseClass} ${baseClass}--top`;\r\n } else if (position.startsWith('left')) {\r\n return `${baseClass} ${baseClass}--right`;\r\n } else if (position.startsWith('right')) {\r\n return `${baseClass} ${baseClass}--left`;\r\n }\r\n\r\n return baseClass;\r\n });\r\n}\r\n","<div class=\"fui-tooltip__content\">\r\n {{ content() }}\r\n</div>\r\n@if (arrow()) {\r\n <div [class]=\"arrowClasses()\"></div>\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n input,\r\n computed,\r\n effect,\r\n HostListener,\r\n inject,\r\n Signal,\r\n OnDestroy,\r\n booleanAttribute,\r\n numberAttribute,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n signal,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport {\r\n TooltipPosition,\r\n TooltipSize,\r\n TooltipTrigger,\r\n TOOLTIP_POSITIONS,\r\n TOOLTIP_SIZES,\r\n TOOLTIP_TRIGGERS,\r\n} from './tooltip.types';\r\nimport { FuiTooltipComponent } from './tooltip.component';\r\nimport { FuiOverlayService, FuiOverlayRef, FuiConnectedPosition } from '@raintonic/formaui/cdk/overlay';\r\n\r\n/**\r\n * # Tooltip Directive\r\n *\r\n * A professional tooltip directive that provides contextual information on hover, focus, or click.\r\n * Follows Material Design patterns with full accessibility support and advanced positioning.\r\n *\r\n * ## Features\r\n * - Multiple positioning options (12 positions)\r\n * - Configurable trigger events (hover, focus, click, manual)\r\n * - Multiple variants for different semantic meanings\r\n * - Flexible sizing options\r\n * - Smart positioning with collision detection\r\n * - Customizable delays and animations\r\n * - Full accessibility support (ARIA attributes, keyboard navigation)\r\n * - Arrow indicator support\r\n * - Responsive design with max-width control\r\n * - Theme support (light/dark)\r\n *\r\n * ## Usage\r\n *\r\n * ### Basic Tooltip\r\n * ```html\r\n * <button fuiTooltip=\"Save your changes\">Save</button>\r\n * ```\r\n *\r\n * ### Advanced Configuration\r\n * ```html\r\n * <button fuiTooltip=\"Delete this item permanently\"\r\n * fuiTooltipPosition=\"top\"\r\n * fuiTooltipVariant=\"error\"\r\n * fuiTooltipSize=\"lg\"\r\n * [fuiTooltipShowDelay]=\"500\">\r\n * Delete\r\n * </button>\r\n * ```\r\n *\r\n * ### Click Trigger\r\n * ```html\r\n * <span fuiTooltip=\"Click to copy\"\r\n * fuiTooltipTrigger=\"click\"\r\n * fuiTooltipPosition=\"bottom\">\r\n * 📋 Copy to clipboard\r\n * </span>\r\n * ```\r\n *\r\n * ### Manual Control\r\n * ```html\r\n * <div fuiTooltip=\"Manual tooltip\"\r\n * fuiTooltipTrigger=\"manual\"\r\n * [fuiTooltipShow]=\"showTooltip\">\r\n * Hover me\r\n * </div>\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * import { FuiTooltipDirective } from '@raintonic/formaui/components/tooltip';\r\n *\r\n * @Component({\r\n * standalone: true,\r\n * imports: [FuiTooltipDirective],\r\n * template: `\r\n * <button fuiTooltip=\"This will save your work\"\r\n * fuiTooltipPosition=\"top\"\r\n * fuiTooltipVariant=\"info\">\r\n * Save Document\r\n * </button>\r\n * `\r\n * })\r\n * export class MyComponent { }\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[fuiTooltip]',\r\n standalone: true,\r\n host: {\r\n '[attr.aria-describedby]': 'isVisible() ? tooltipId() : null',\r\n },\r\n})\r\nexport class FuiTooltipDirective implements OnDestroy {\r\n private static _nextId = 0;\r\n /**\r\n * Tooltip content text\r\n */\r\n readonly fuiTooltip = input.required<string>();\r\n\r\n /**\r\n * Tooltip position relative to the trigger element\r\n * @default 'top'\r\n */\r\n readonly fuiTooltipPosition = input<TooltipPosition, TooltipPosition | string>('top', {\r\n transform: (v) => ((TOOLTIP_POSITIONS as readonly string[]).includes(v) ? (v as TooltipPosition) : 'top'),\r\n });\r\n\r\n /**\r\n * Tooltip size\r\n * @default 'md'\r\n */\r\n readonly fuiTooltipSize = input<TooltipSize, TooltipSize | string>('md', {\r\n transform: (v) => ((TOOLTIP_SIZES as readonly string[]).includes(v) ? (v as TooltipSize) : 'md'),\r\n });\r\n\r\n /**\r\n * Tooltip trigger event\r\n * @default 'hover'\r\n */\r\n readonly fuiTooltipTrigger = input<TooltipTrigger, TooltipTrigger | string>('hover', {\r\n transform: (v) => ((TOOLTIP_TRIGGERS as readonly string[]).includes(v) ? (v as TooltipTrigger) : 'hover'),\r\n });\r\n\r\n /**\r\n * Delay before showing tooltip (in milliseconds)\r\n * @default 500\r\n */\r\n readonly fuiTooltipShowDelay = input<number, unknown>(500, { transform: numberAttribute });\r\n\r\n /**\r\n * Delay before hiding tooltip (in milliseconds)\r\n * @default 0\r\n */\r\n readonly fuiTooltipHideDelay = input<number, unknown>(0, { transform: numberAttribute });\r\n\r\n /**\r\n * Whether the tooltip is disabled\r\n * @default false\r\n */\r\n readonly fuiTooltipDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Maximum width of the tooltip\r\n * @default '200px'\r\n */\r\n readonly fuiTooltipMaxWidth = input('200px');\r\n\r\n /**\r\n * Offset distance from the trigger element (in pixels)\r\n * @default 8\r\n */\r\n readonly fuiTooltipOffset = input<number, unknown>(8, { transform: numberAttribute });\r\n\r\n /**\r\n * Whether to show an arrow pointing to the trigger element\r\n * @default true\r\n */\r\n readonly fuiTooltipArrow = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * Manual control for showing/hiding tooltip (only works with trigger=\"manual\")\r\n * @default false\r\n */\r\n readonly fuiTooltipShow = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n // Internal state\r\n private readonly _isVisible: WritableSignal<boolean> = signal(false);\r\n private readonly _tooltipId: WritableSignal<string> = signal('');\r\n private _overlayRef: FuiOverlayRef | null = null;\r\n private _tooltipComponent: ComponentRef<FuiTooltipComponent> | null = null;\r\n private _showTimeout: number | null = null;\r\n private _hideTimeout: number | null = null;\r\n private _isHoveringTooltip = false;\r\n\r\n // Computed properties\r\n readonly isVisible: Signal<boolean> = computed(() => this._isVisible());\r\n readonly tooltipId: Signal<string> = computed(() => this._tooltipId());\r\n\r\n // Injected dependencies\r\n private readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n private readonly _overlayService: FuiOverlayService = inject(FuiOverlayService);\r\n private readonly _environmentInjector: EnvironmentInjector = inject(EnvironmentInjector);\r\n\r\n constructor() {\r\n // Generate unique tooltip ID\r\n this._tooltipId.set(`fui-tooltip-${FuiTooltipDirective._nextId++}`);\r\n\r\n // Handle manual control\r\n effect(() => {\r\n if (this.fuiTooltipTrigger() === 'manual') {\r\n if (this.fuiTooltipShow()) {\r\n this._showTooltip();\r\n } else {\r\n this._hideTooltip();\r\n }\r\n }\r\n });\r\n\r\n // Handle disabled state\r\n effect(() => {\r\n if (this.fuiTooltipDisabled() && this._isVisible()) {\r\n this._hideTooltip();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._clearTimeouts();\r\n this._destroyTooltip();\r\n }\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter(): void {\r\n if (this.fuiTooltipTrigger() === 'hover' && !this.fuiTooltipDisabled()) {\r\n this._scheduleShow();\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave(): void {\r\n if (this.fuiTooltipTrigger() === 'hover' && !this.fuiTooltipDisabled()) {\r\n this._scheduleHide();\r\n }\r\n }\r\n\r\n @HostListener('focus')\r\n onFocus(): void {\r\n if ((this.fuiTooltipTrigger() === 'focus' || this.fuiTooltipTrigger() === 'hover') && !this.fuiTooltipDisabled()) {\r\n this._scheduleShow();\r\n }\r\n }\r\n\r\n @HostListener('blur')\r\n onBlur(): void {\r\n if ((this.fuiTooltipTrigger() === 'focus' || this.fuiTooltipTrigger() === 'hover') && !this.fuiTooltipDisabled()) {\r\n this._scheduleHide();\r\n }\r\n }\r\n\r\n @HostListener('click')\r\n onClick(): void {\r\n if (this.fuiTooltipTrigger() === 'click' && !this.fuiTooltipDisabled()) {\r\n if (this._isVisible()) {\r\n this._hideTooltip();\r\n } else {\r\n this._showTooltip();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this._isVisible()) {\r\n this._hideTooltip();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /**\r\n * Programmatically show the tooltip\r\n */\r\n show(): void {\r\n if (!this.fuiTooltipDisabled()) {\r\n this._showTooltip();\r\n }\r\n }\r\n\r\n /**\r\n * Programmatically hide the tooltip\r\n */\r\n hide(): void {\r\n this._hideTooltip();\r\n }\r\n\r\n /**\r\n * Toggle tooltip visibility\r\n */\r\n toggle(): void {\r\n if (this._isVisible()) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n private _scheduleShow(): void {\r\n this._clearTimeouts();\r\n\r\n if (this.fuiTooltipShowDelay() > 0) {\r\n this._showTimeout = window.setTimeout(() => {\r\n this._showTooltip();\r\n }, this.fuiTooltipShowDelay());\r\n } else {\r\n this._showTooltip();\r\n }\r\n }\r\n\r\n private _scheduleHide(): void {\r\n this._clearTimeouts();\r\n\r\n if (this.fuiTooltipHideDelay() > 0) {\r\n this._hideTimeout = window.setTimeout(() => {\r\n if (!this._isHoveringTooltip) {\r\n this._hideTooltip();\r\n }\r\n }, this.fuiTooltipHideDelay());\r\n } else {\r\n if (!this._isHoveringTooltip) {\r\n this._hideTooltip();\r\n }\r\n }\r\n }\r\n\r\n private _showTooltip(): void {\r\n if (this._isVisible() || this.fuiTooltipDisabled() || !this.fuiTooltip().trim()) {\r\n return;\r\n }\r\n\r\n this._createTooltip();\r\n this._isVisible.set(true);\r\n\r\n // Add click outside listener for click trigger\r\n if (this.fuiTooltipTrigger() === 'click') {\r\n setTimeout(() => {\r\n document.addEventListener('click', this._onDocumentClick, true);\r\n });\r\n }\r\n }\r\n\r\n private _hideTooltip(): void {\r\n if (!this._isVisible()) {\r\n return;\r\n }\r\n\r\n this._isVisible.set(false);\r\n this._destroyTooltip();\r\n document.removeEventListener('click', this._onDocumentClick, true);\r\n }\r\n\r\n private _createTooltip(): void {\r\n if (this._overlayRef) {\r\n return;\r\n }\r\n\r\n // Create tooltip component first\r\n this._tooltipComponent = createComponent(FuiTooltipComponent, {\r\n environmentInjector: this._environmentInjector,\r\n });\r\n\r\n // Set tooltip properties immediately\r\n this._tooltipComponent.setInput('content', this.fuiTooltip());\r\n this._tooltipComponent.setInput('position', this.fuiTooltipPosition());\r\n this._tooltipComponent.setInput('size', this.fuiTooltipSize());\r\n this._tooltipComponent.setInput('maxWidth', this.fuiTooltipMaxWidth());\r\n this._tooltipComponent.setInput('arrow', this.fuiTooltipArrow());\r\n this._tooltipComponent.setInput('tooltipId', this.tooltipId());\r\n\r\n // Trigger change detection to ensure component is rendered with correct props\r\n this._tooltipComponent.changeDetectorRef.detectChanges();\r\n\r\n // Now create overlay with positioning strategy\r\n const positions = this._getPositionsForTooltipPosition(this.fuiTooltipPosition());\r\n const positionStrategy = this._overlayService\r\n .position()\r\n .connectedTo(this._elementRef, positions)\r\n .withPush(true)\r\n .withViewportMargin(8);\r\n\r\n // Create overlay\r\n this._overlayRef = this._overlayService.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlayService.scrollStrategies.reposition(20),\r\n panelClass: 'fui-tooltip-panel',\r\n });\r\n\r\n // Attach component to overlay\r\n this._overlayRef.attach(this._tooltipComponent);\r\n\r\n // Set up hover events for tooltip persistence\r\n const tooltipElement = this._tooltipComponent.location.nativeElement;\r\n\r\n tooltipElement.addEventListener('mouseenter', () => {\r\n this._isHoveringTooltip = true;\r\n this._clearTimeouts();\r\n });\r\n\r\n tooltipElement.addEventListener('mouseleave', () => {\r\n this._isHoveringTooltip = false;\r\n if (this.fuiTooltipTrigger() === 'hover') {\r\n this._scheduleHide();\r\n }\r\n });\r\n }\r\n\r\n private _getPositionsForTooltipPosition(position: TooltipPosition): FuiConnectedPosition[] {\r\n const offset = this.fuiTooltipOffset();\r\n const positionMap: Record<TooltipPosition, FuiConnectedPosition[]> = {\r\n top: [\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\r\n ],\r\n 'top-start': [\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },\r\n ],\r\n 'top-end': [\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\r\n ],\r\n bottom: [\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\r\n ],\r\n 'bottom-start': [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },\r\n ],\r\n 'bottom-end': [\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\r\n ],\r\n left: [\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\r\n ],\r\n 'left-start': [\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -offset },\r\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: offset },\r\n ],\r\n 'left-end': [\r\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -offset },\r\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: offset },\r\n ],\r\n right: [\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\r\n ],\r\n 'right-start': [\r\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: offset },\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -offset },\r\n ],\r\n 'right-end': [\r\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: offset },\r\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -offset },\r\n ],\r\n };\r\n\r\n return positionMap[position] || positionMap.top;\r\n }\r\n\r\n private _destroyTooltip(): void {\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._overlayRef = null;\r\n }\r\n\r\n if (this._tooltipComponent) {\r\n this._tooltipComponent.destroy();\r\n this._tooltipComponent = null;\r\n }\r\n }\r\n\r\n private _clearTimeouts(): void {\r\n if (this._showTimeout) {\r\n clearTimeout(this._showTimeout);\r\n this._showTimeout = null;\r\n }\r\n if (this._hideTimeout) {\r\n clearTimeout(this._hideTimeout);\r\n this._hideTimeout = null;\r\n }\r\n }\r\n\r\n private readonly _onDocumentClick = (event: Event): void => {\r\n const target = event.target as HTMLElement;\r\n const triggerElement = this._elementRef.nativeElement;\r\n const tooltipElement = this._tooltipComponent?.location.nativeElement;\r\n\r\n if (target && !triggerElement.contains(target) && !tooltipElement?.contains(target)) {\r\n this._hideTooltip();\r\n }\r\n };\r\n}\r\n","// Public API for tooltip component\r\nexport * from './tooltip.directive';\r\nexport * from './tooltip.component';\r\nexport * from './tooltip.types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui.mjs","sources":["../../../lib/src/public-api.ts","../../../lib/src/raintonic-formaui.ts"],"sourcesContent":["export const FORMAUI_VERSION = '0.
|
|
1
|
+
{"version":3,"file":"raintonic-formaui.mjs","sources":["../../../lib/src/public-api.ts","../../../lib/src/raintonic-formaui.ts"],"sourcesContent":["export const FORMAUI_VERSION = '0.4.0';\r\n\r\n// FormaUI - Primary entry point\r\n// Secondary entry points are imported directly, e.g.:\r\n// import { FuiButtonDirective } from '@raintonic/formaui/components/button';\r\n// import { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\n// import { ThemeService } from '@raintonic/formaui/services/theme';\r\n// import { FuiOverlayService } from '@raintonic/formaui/cdk/overlay';\r\n// import { FuiCoreModule } from '@raintonic/formaui/core';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAO,MAAM,eAAe,GAAG;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;;AAEG;;;;"}
|
package/llms-full.txt
CHANGED
|
@@ -751,6 +751,7 @@ A progress bar component compatible with Angular Material's mat-progress-bar int
|
|
|
751
751
|
| Name | Type | Default | Required |
|
|
752
752
|
|------|------|---------|----------|
|
|
753
753
|
| disabled | boolean | false | no |
|
|
754
|
+
| disableRipple | boolean | false | no |
|
|
754
755
|
| aria-label | string | null | null | no |
|
|
755
756
|
| aria-labelledby | string | null | null | no |
|
|
756
757
|
| value | unknown | - | yes |
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-cdk-overlay.d.ts","sources":["../../../lib/cdk/overlay/overlay.types.ts","../../../lib/cdk/overlay/position/global-position-strategy.ts","../../../lib/cdk/overlay/position/connected-position-strategy.ts","../../../lib/cdk/overlay/scroll/scroll-strategies.ts","../../../lib/cdk/overlay/overlay.service.ts","../../../lib/cdk/overlay/overlay-ref.ts","../../../lib/cdk/overlay/overlay-container.component.ts","../../../lib/cdk/overlay/portal.service.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-cdk-overlay.d.ts","sources":["../../../lib/cdk/overlay/overlay.types.ts","../../../lib/cdk/overlay/position/global-position-strategy.ts","../../../lib/cdk/overlay/position/connected-position-strategy.ts","../../../lib/cdk/overlay/scroll/scroll-strategies.ts","../../../lib/cdk/overlay/overlay.service.ts","../../../lib/cdk/overlay/overlay-ref.ts","../../../lib/cdk/overlay/overlay-container.component.ts","../../../lib/cdk/overlay/portal.service.ts"],"mappings":"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","names":[]}
|