ngx-tethys 19.1.0-next.6 → 19.1.0-next.7
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/CHANGELOG.md +10 -0
- package/color-picker/coordinates.directive.d.ts +1 -2
- package/date-picker/abstract-picker.component.d.ts +1 -1
- package/date-picker/base-picker.component.d.ts +1 -0
- package/date-picker/picker.component.d.ts +4 -5
- package/dropdown/dropdown-menu.component.d.ts +1 -1
- package/dropdown/dropdown.directive.d.ts +2 -2
- package/fesm2022/ngx-tethys-color-picker.mjs +4 -6
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +2 -2
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +32 -32
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +7 -10
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +4 -5
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +5 -7
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +140 -160
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-message.mjs +1 -2
- package/fesm2022/ngx-tethys-message.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +25 -56
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +1 -2
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +1 -2
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +109 -93
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/image/preview/image-preview.component.d.ts +2 -2
- package/list/selection/selection-list.d.ts +33 -46
- package/package.json +54 -54
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/shared/directives/thy-contextmenu.directive.d.ts +2 -2
- package/shared/directives/thy-ctrl-enter.directive.d.ts +2 -2
- package/shared/directives/thy-enter.directive.d.ts +2 -2
- package/shared/directives/thy-show.d.ts +2 -2
- package/shared/option/list-option/list-option.component.d.ts +5 -5
- package/shared/option/option.token.d.ts +4 -3
- package/table/table-column.component.d.ts +15 -5
- package/tooltip/tooltip.directive.d.ts +20 -22
|
@@ -2,7 +2,7 @@ import { Overlay, ScrollDispatcher, OverlayModule } from '@angular/cdk/overlay';
|
|
|
2
2
|
import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';
|
|
3
3
|
import { NgTemplateOutlet, CommonModule } from '@angular/common';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { inject, ChangeDetectorRef, TemplateRef, HostBinding, ChangeDetectionStrategy, ViewEncapsulation, Component, InjectionToken, NgZone, Injectable, ElementRef, ViewContainerRef, numberAttribute,
|
|
5
|
+
import { inject, ChangeDetectorRef, TemplateRef, HostBinding, ChangeDetectionStrategy, ViewEncapsulation, Component, InjectionToken, NgZone, Injectable, ElementRef, ViewContainerRef, input, linkedSignal, numberAttribute, effect, Directive, NgModule } from '@angular/core';
|
|
6
6
|
import { Platform } from '@angular/cdk/platform';
|
|
7
7
|
import { AnimationDuration, AnimationCurves, getFlexiblePositions, ThyOverlayDirectiveBase } from 'ngx-tethys/core';
|
|
8
8
|
import { coerceArray, isNumber, isString, coerceBooleanProperty } from 'ngx-tethys/util';
|
|
@@ -313,58 +313,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
313
313
|
* @name thyTooltip
|
|
314
314
|
*/
|
|
315
315
|
class ThyTooltipDirective extends ThyOverlayDirectiveBase {
|
|
316
|
-
|
|
317
|
-
return this._content;
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* 提示消息,可以是文本,也可以是一个模板
|
|
321
|
-
* @type string | TemplateRef<T>
|
|
322
|
-
*/
|
|
323
|
-
set content(value) {
|
|
316
|
+
getValidContent(value) {
|
|
324
317
|
// If the content is not a string (e.g. number), convert it to a string and trim it.
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
this.tooltipRef.hide(0);
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
this.tooltipRef?.updateTooltipContent(value, this.data);
|
|
331
|
-
}
|
|
318
|
+
const validValue = value && isString(value) ? `${value}`.trim() : value;
|
|
319
|
+
return validValue;
|
|
332
320
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
*/
|
|
336
|
-
set thyTooltipClass(value) {
|
|
337
|
-
this.tooltipClass = value;
|
|
338
|
-
this.tooltipRef?.setTooltipClass(this.tooltipClass);
|
|
321
|
+
setDisabled(disabled) {
|
|
322
|
+
this.toolTipDisabled.set(disabled);
|
|
339
323
|
}
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
* <br/>`focus` 元素获取焦点,显示提示;元素失去焦点,隐藏提示;显示元素时,滚动页面,提示会跟随聚焦源一起移动。
|
|
344
|
-
* <br/>`click` 点击元素,显示提示;点击backdrop,隐藏提示;显示提示时,页面的滚动行为会被阻止。
|
|
345
|
-
*
|
|
346
|
-
* @type hover | focus | click
|
|
347
|
-
*/
|
|
348
|
-
set thyTooltipTrigger(value) {
|
|
349
|
-
this.trigger = value;
|
|
324
|
+
setContent(content) {
|
|
325
|
+
const validValue = this.getValidContent(content);
|
|
326
|
+
this.content.set(validValue);
|
|
350
327
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
* @default false
|
|
354
|
-
*/
|
|
355
|
-
set thyTooltipDisabled(value) {
|
|
356
|
-
this.disabled = value;
|
|
357
|
-
// If tooltip is disabled, hide immediately.
|
|
358
|
-
if (this.disabled) {
|
|
359
|
-
this.hide(0);
|
|
360
|
-
}
|
|
328
|
+
setOffset(offset) {
|
|
329
|
+
this.tooltipOffset.set(offset);
|
|
361
330
|
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
* @default false
|
|
365
|
-
*/
|
|
366
|
-
set tooltipPin(value) {
|
|
367
|
-
this.overlayPin = value;
|
|
331
|
+
setPlacement(placement) {
|
|
332
|
+
this.placement.set(placement);
|
|
368
333
|
}
|
|
369
334
|
constructor() {
|
|
370
335
|
const elementRef = inject(ElementRef);
|
|
@@ -376,80 +341,131 @@ class ThyTooltipDirective extends ThyOverlayDirectiveBase {
|
|
|
376
341
|
this.thyTooltipService = inject(ThyTooltipService);
|
|
377
342
|
this.touchendHideDelay = 1500;
|
|
378
343
|
this.isAutoCloseOnMobileTouch = true;
|
|
344
|
+
/**
|
|
345
|
+
* 提示消息,可以是文本,也可以是一个模板
|
|
346
|
+
* @type string | TemplateRef<T>
|
|
347
|
+
*/
|
|
348
|
+
this.thyTooltipContent = input(undefined, { alias: 'thyTooltip' });
|
|
349
|
+
this.content = linkedSignal(() => {
|
|
350
|
+
const value = this.thyTooltipContent();
|
|
351
|
+
return this.getValidContent(value);
|
|
352
|
+
});
|
|
379
353
|
/**
|
|
380
354
|
* 指定提示的位置
|
|
381
355
|
* @type ThyPlacement
|
|
382
356
|
*/
|
|
383
|
-
this.
|
|
384
|
-
this.
|
|
357
|
+
this.thyPlacement = input('top', { alias: 'thyTooltipPlacement' });
|
|
358
|
+
this.placement = linkedSignal(() => {
|
|
359
|
+
return this.thyPlacement();
|
|
360
|
+
});
|
|
361
|
+
/**
|
|
362
|
+
* 提示内容自定义样式
|
|
363
|
+
*/
|
|
364
|
+
this.thyTooltipClass = input();
|
|
365
|
+
/**
|
|
366
|
+
* 显示提示内容延迟毫秒
|
|
367
|
+
*/
|
|
368
|
+
this.thyTooltipShowDelay = input(undefined, { transform: numberAttribute });
|
|
369
|
+
/**
|
|
370
|
+
* 隐藏提示内容延迟毫秒
|
|
371
|
+
*/
|
|
372
|
+
this.thyTooltipHideDelay = input(undefined, { transform: numberAttribute });
|
|
373
|
+
/**
|
|
374
|
+
* 触发提示方式
|
|
375
|
+
* <br/>`hover` 鼠标移入,显示提示;鼠标移出,隐藏提示;显示提示时,滚动页面,会隐藏提示。
|
|
376
|
+
* <br/>`focus` 元素获取焦点,显示提示;元素失去焦点,隐藏提示;显示元素时,滚动页面,提示会跟随聚焦源一起移动。
|
|
377
|
+
* <br/>`click` 点击元素,显示提示;点击backdrop,隐藏提示;显示提示时,页面的滚动行为会被阻止。
|
|
378
|
+
*
|
|
379
|
+
* @type hover | focus | click
|
|
380
|
+
*/
|
|
381
|
+
this.thyTooltipTrigger = input('hover');
|
|
382
|
+
/**
|
|
383
|
+
* 设置是否禁用提示
|
|
384
|
+
* @default false
|
|
385
|
+
*/
|
|
386
|
+
this.thyTooltipDisabled = input(undefined, { transform: coerceBooleanProperty });
|
|
387
|
+
this.toolTipDisabled = linkedSignal(() => {
|
|
388
|
+
return this.thyTooltipDisabled();
|
|
389
|
+
});
|
|
390
|
+
/**
|
|
391
|
+
* 传入 template 时,需要注入给 template 的上下文数据
|
|
392
|
+
*/
|
|
393
|
+
this.data = input(undefined, { alias: 'thyTooltipTemplateContext' });
|
|
394
|
+
/**
|
|
395
|
+
* 偏移量
|
|
396
|
+
*/
|
|
397
|
+
this.thyTooltipOffset = input(undefined, { alias: 'thyTooltipOffset', transform: numberAttribute });
|
|
398
|
+
this.tooltipOffset = linkedSignal(() => {
|
|
399
|
+
return this.thyTooltipOffset();
|
|
400
|
+
});
|
|
401
|
+
/**
|
|
402
|
+
* hover 触发方式下 鼠标移入Tooltip是否固定 Tooltip
|
|
403
|
+
* @default false
|
|
404
|
+
*/
|
|
405
|
+
this.tooltipPin = input(undefined, { alias: 'thyTooltipPin', transform: coerceBooleanProperty });
|
|
406
|
+
effect(() => {
|
|
407
|
+
const value = this.content();
|
|
408
|
+
if (!value && this.tooltipRef?.isTooltipVisible()) {
|
|
409
|
+
this.tooltipRef.hide(0);
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
this.tooltipRef?.updateTooltipContent(value, this.data());
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
effect(() => {
|
|
416
|
+
const tooltipClass = this.thyTooltipClass();
|
|
417
|
+
this.tooltipRef?.setTooltipClass(tooltipClass);
|
|
418
|
+
});
|
|
419
|
+
effect(() => {
|
|
420
|
+
const trigger = this.thyTooltipTrigger();
|
|
421
|
+
this.trigger = trigger;
|
|
422
|
+
});
|
|
423
|
+
effect(() => {
|
|
424
|
+
const disabled = this.toolTipDisabled();
|
|
425
|
+
this.disabled = disabled;
|
|
426
|
+
if (disabled) {
|
|
427
|
+
this.hide(0);
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
effect(() => {
|
|
431
|
+
const overlayPin = this.tooltipPin();
|
|
432
|
+
this.overlayPin = overlayPin;
|
|
433
|
+
});
|
|
385
434
|
}
|
|
386
435
|
ngOnInit() {
|
|
387
436
|
this.initialize();
|
|
388
437
|
}
|
|
389
438
|
/** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show 200ms */
|
|
390
|
-
show(delay = this.
|
|
439
|
+
show(delay = this.thyTooltipShowDelay()) {
|
|
391
440
|
if (this.disabled) {
|
|
392
441
|
return;
|
|
393
442
|
}
|
|
394
443
|
if (!this.tooltipRef) {
|
|
395
444
|
this.tooltipRef = this.thyTooltipService.create(this.elementRef, {
|
|
396
445
|
viewContainerRef: this.viewContainerRef,
|
|
397
|
-
placement: this.placement,
|
|
398
|
-
contentClass: this.
|
|
399
|
-
offset: this.tooltipOffset,
|
|
400
|
-
tooltipPin: this.tooltipPin,
|
|
446
|
+
placement: this.placement(),
|
|
447
|
+
contentClass: this.thyTooltipClass(),
|
|
448
|
+
offset: this.tooltipOffset(),
|
|
449
|
+
tooltipPin: this.tooltipPin(),
|
|
401
450
|
hasBackdrop: this.trigger === 'click'
|
|
402
451
|
});
|
|
403
452
|
}
|
|
404
|
-
this.tooltipRef.show(this.content, this.data, delay);
|
|
453
|
+
this.tooltipRef.show(this.content(), this.data(), delay);
|
|
405
454
|
}
|
|
406
455
|
/** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide 100ms */
|
|
407
|
-
hide(delay = this.
|
|
456
|
+
hide(delay = this.thyTooltipHideDelay()) {
|
|
408
457
|
this.tooltipRef?.hide(delay);
|
|
409
458
|
}
|
|
410
459
|
ngOnDestroy() {
|
|
411
460
|
this.tooltipRef?.dispose();
|
|
412
461
|
}
|
|
413
462
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
414
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
463
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: ThyTooltipDirective, isStandalone: true, selector: "[thyTooltip],[thy-tooltip]", inputs: { thyTooltipContent: { classPropertyName: "thyTooltipContent", publicName: "thyTooltip", isSignal: true, isRequired: false, transformFunction: null }, thyPlacement: { classPropertyName: "thyPlacement", publicName: "thyTooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, thyTooltipClass: { classPropertyName: "thyTooltipClass", publicName: "thyTooltipClass", isSignal: true, isRequired: false, transformFunction: null }, thyTooltipShowDelay: { classPropertyName: "thyTooltipShowDelay", publicName: "thyTooltipShowDelay", isSignal: true, isRequired: false, transformFunction: null }, thyTooltipHideDelay: { classPropertyName: "thyTooltipHideDelay", publicName: "thyTooltipHideDelay", isSignal: true, isRequired: false, transformFunction: null }, thyTooltipTrigger: { classPropertyName: "thyTooltipTrigger", publicName: "thyTooltipTrigger", isSignal: true, isRequired: false, transformFunction: null }, thyTooltipDisabled: { classPropertyName: "thyTooltipDisabled", publicName: "thyTooltipDisabled", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "thyTooltipTemplateContext", isSignal: true, isRequired: false, transformFunction: null }, thyTooltipOffset: { classPropertyName: "thyTooltipOffset", publicName: "thyTooltipOffset", isSignal: true, isRequired: false, transformFunction: null }, tooltipPin: { classPropertyName: "tooltipPin", publicName: "thyTooltipPin", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["thyTooltip"], usesInheritance: true, ngImport: i0 }); }
|
|
415
464
|
}
|
|
416
465
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyTooltipDirective, decorators: [{
|
|
417
466
|
type: Directive,
|
|
418
|
-
args: [{
|
|
419
|
-
|
|
420
|
-
exportAs: 'thyTooltip'
|
|
421
|
-
}]
|
|
422
|
-
}], ctorParameters: () => [], propDecorators: { content: [{
|
|
423
|
-
type: Input,
|
|
424
|
-
args: ['thyTooltip']
|
|
425
|
-
}], placement: [{
|
|
426
|
-
type: Input,
|
|
427
|
-
args: ['thyTooltipPlacement']
|
|
428
|
-
}], thyTooltipClass: [{
|
|
429
|
-
type: Input,
|
|
430
|
-
args: ['thyTooltipClass']
|
|
431
|
-
}], showDelay: [{
|
|
432
|
-
type: Input,
|
|
433
|
-
args: [{ alias: 'thyTooltipShowDelay', transform: numberAttribute }]
|
|
434
|
-
}], hideDelay: [{
|
|
435
|
-
type: Input,
|
|
436
|
-
args: [{ alias: 'thyTooltipHideDelay', transform: numberAttribute }]
|
|
437
|
-
}], thyTooltipTrigger: [{
|
|
438
|
-
type: Input,
|
|
439
|
-
args: ['thyTooltipTrigger']
|
|
440
|
-
}], thyTooltipDisabled: [{
|
|
441
|
-
type: Input,
|
|
442
|
-
args: [{ alias: 'thyTooltipDisabled', transform: coerceBooleanProperty }]
|
|
443
|
-
}], data: [{
|
|
444
|
-
type: Input,
|
|
445
|
-
args: ['thyTooltipTemplateContext']
|
|
446
|
-
}], tooltipOffset: [{
|
|
447
|
-
type: Input,
|
|
448
|
-
args: [{ alias: 'thyTooltipOffset', transform: numberAttribute }]
|
|
449
|
-
}], tooltipPin: [{
|
|
450
|
-
type: Input,
|
|
451
|
-
args: [{ alias: 'thyTooltipPin', transform: coerceBooleanProperty }]
|
|
452
|
-
}] } });
|
|
467
|
+
args: [{ selector: '[thyTooltip],[thy-tooltip]', exportAs: 'thyTooltip' }]
|
|
468
|
+
}], ctorParameters: () => [] });
|
|
453
469
|
|
|
454
470
|
class ThyTooltipModule {
|
|
455
471
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-tooltip.mjs","sources":["../../../src/tooltip/tooltip-animations.ts","../../../src/tooltip/tooltip.component.ts","../../../src/tooltip/tooltip.component.html","../../../src/tooltip/tooltip-ref.ts","../../../src/tooltip/tooltip.config.ts","../../../src/tooltip/tooltip.service.ts","../../../src/tooltip/tooltip.directive.ts","../../../src/tooltip/tooltip.module.ts","../../../src/tooltip/ngx-tethys-tooltip.ts"],"sourcesContent":["import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\nimport { AnimationCurves, AnimationDuration } from 'ngx-tethys/core';\n\nexport const thyTooltipAnimations: {\n readonly tooltipState: AnimationTriggerMetadata;\n} = {\n tooltipState: trigger('state', [\n state('initial, void, hidden', style({ opacity: 0, transform: 'scale(0)' })),\n state('visible', style({ transform: 'scale(1)' })),\n\n transition('* => visible', [\n style({ opacity: 0, transform: 'scale(0.9, 0.9)' }),\n animate(\n `${AnimationDuration.BASE} ${AnimationCurves.EASE_IN_OUT_STANDARD}`,\n style({\n opacity: 1,\n transform: 'scale(1, 1)'\n })\n )\n ]),\n transition('visible => *', [\n style({ opacity: 1, transform: 'scale(1, 1)' }),\n animate(\n `${AnimationDuration.BASE} ${AnimationCurves.EASE_IN_OUT_STANDARD}`,\n style({\n opacity: 0,\n transform: 'scale(0.9, 0.9)'\n })\n )\n ])\n ])\n};\n","import {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n HostBinding,\n TemplateRef,\n OnInit,\n inject\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { AnimationEvent } from '@angular/animations';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyTooltipVisibility } from './interface';\nimport { thyTooltipAnimations } from './tooltip-animations';\nimport { coerceArray } from 'ngx-tethys/util';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * @internal\n */\n@Component({\n selector: 'thy-tooltip',\n templateUrl: './tooltip.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [thyTooltipAnimations.tooltipState],\n host: {\n '[@state]': 'visibility',\n '(@state.start)': 'animationStart()',\n '(@state.done)': 'animationDone($event)'\n },\n imports: [NgTemplateOutlet]\n})\nexport class ThyTooltip implements OnInit {\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n @HostBinding(`class.thy-tooltip`) addTooltipContainerClass = true;\n\n _content: string | TemplateRef<HTMLElement>;\n\n data: any;\n\n private readonly onHide: Subject<void> = new Subject();\n\n private closeOnInteraction = false;\n\n private hostRenderer = useHostRenderer();\n\n visibility: ThyTooltipVisibility = 'initial';\n\n showTimeoutId: number | null | any;\n\n hideTimeoutId: number | null | any;\n\n tooltipClasses: string[] = [];\n\n isTemplateRef = false;\n\n get content() {\n return this._content;\n }\n\n set content(value: string | TemplateRef<HTMLElement>) {\n this._content = value;\n this.isTemplateRef = value instanceof TemplateRef;\n }\n\n private updateClasses() {\n let classes: string[] = [];\n\n if (this.tooltipClasses) {\n classes = classes.concat(this.tooltipClasses);\n }\n\n this.hostRenderer.updateClass(classes);\n }\n\n ngOnInit() {}\n\n markForCheck(): void {\n this.changeDetectorRef.markForCheck();\n }\n\n isVisible() {\n return this.visibility === 'visible';\n }\n\n show(delay: number): void {\n // Cancel the delayed hide if it is scheduled\n if (this.hideTimeoutId) {\n clearTimeout(this.hideTimeoutId);\n this.hideTimeoutId = null;\n }\n\n // Body interactions should cancel the tooltip if there is a delay in showing.\n this.closeOnInteraction = true;\n this.showTimeoutId = setTimeout(() => {\n this.visibility = 'visible';\n this.showTimeoutId = null;\n this.markForCheck();\n }, delay);\n }\n\n hide(delay: number): void {\n // Cancel the delayed show if it is scheduled\n if (this.showTimeoutId) {\n clearTimeout(this.showTimeoutId);\n this.showTimeoutId = null;\n }\n\n this.hideTimeoutId = setTimeout(() => {\n this.visibility = 'hidden';\n this.hideTimeoutId = null;\n this.markForCheck();\n }, delay);\n }\n\n animationStart() {\n this.closeOnInteraction = false;\n }\n\n animationDone(event: AnimationEvent): void {\n const toState = event.toState as ThyTooltipVisibility;\n if (toState === 'hidden' && !this.isVisible()) {\n this.onHide.next();\n }\n if (toState === 'visible' || toState === 'hidden') {\n this.closeOnInteraction = true;\n }\n }\n\n afterHidden(): Observable<void> {\n return this.onHide.asObservable();\n }\n\n setTooltipClass(classes: string | string[]) {\n this.tooltipClasses = coerceArray(classes);\n this.updateClasses();\n // this.markForCheck();\n }\n}\n","<div class=\"thy-tooltip-arrow\"></div>\n<div class=\"thy-tooltip-content\">\n @if (isTemplateRef) {\n <ng-container *ngTemplateOutlet=\"content; context: { $implicit: data }\"></ng-container>\n } @else {\n {{ content }}\n }\n</div>\n","import { FlexibleConnectedPositionStrategy, Overlay, OverlayRef, ScrollDispatcher, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ElementRef, NgZone, TemplateRef } from '@angular/core';\nimport { isUndefinedOrNull } from '@tethys/cdk/is';\nimport { getFlexiblePositions } from 'ngx-tethys/core';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { isNumber } from 'ngx-tethys/util';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { ThyTooltipContent } from './interface';\nimport { ThyTooltip } from './tooltip.component';\nimport { ThyTooltipConfig } from './tooltip.config';\n\nexport class ThyTooltipRef {\n private overlayRef: OverlayRef;\n\n private tooltipInstance: ThyTooltip;\n\n private scrollStrategy: ScrollStrategy;\n\n private portal: ComponentPortal<ThyTooltip>;\n\n private readonly dispose$ = new Subject<void>();\n\n constructor(\n private host: ElementRef<HTMLElement> | HTMLElement,\n private config: ThyTooltipConfig,\n private overlay: Overlay,\n private scrollDispatcher: ScrollDispatcher,\n private ngZone: NgZone\n ) {\n this.scrollStrategy = overlay.scrollStrategies.reposition({\n scrollThrottle: this.config.scrollThrottleSeconds\n });\n }\n\n /** Create the overlay config and position strategy */\n private createOverlay(): OverlayRef {\n if (this.overlayRef) {\n return this.overlayRef;\n }\n const scrollableAncestors = this.scrollDispatcher.getAncestorScrollContainers(this.host);\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this.overlay\n .position()\n .flexibleConnectedTo(this.host)\n .withTransformOriginOn('.thy-tooltip-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8);\n\n strategy.withScrollableContainers(scrollableAncestors);\n strategy.positionChanges.pipe(takeUntil(this.dispose$)).subscribe(change => {\n if (this.tooltipInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this.tooltipInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this.ngZone.run(() => this.hide(0));\n }\n }\n });\n this.overlayRef = this.overlay.create({\n positionStrategy: strategy,\n panelClass: this.config.panelClass,\n scrollStrategy: this.scrollStrategy,\n hasBackdrop: this.config.hasBackdrop,\n backdropClass: 'thy-tooltip-backdrop'\n });\n\n this.updatePosition();\n\n this.overlayRef\n .detachments()\n .pipe(takeUntil(this.dispose$))\n .subscribe(() => this.detach());\n\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.dispose$))\n .subscribe(() => {\n this.overlayRef.detachBackdrop();\n this.hide(0);\n });\n\n return this.overlayRef;\n }\n\n /** Updates the position of the current tooltip. */\n private updatePosition() {\n const position = this.overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n const connectionPositions = getFlexiblePositions(this.config.placement, this.config.offset, 'thy-tooltip');\n position.withPositions(connectionPositions);\n }\n\n private detach() {\n if (this.overlayRef && this.overlayRef.hasAttached()) {\n this.overlayRef.detach();\n }\n this.tooltipInstance = null;\n }\n\n show(content: ThyTooltipContent, delay?: number): void;\n show<T extends Record<SafeAny, SafeAny>>(content: ThyTooltipContent, data: T, delay?: number): void;\n show<T extends Record<SafeAny, SafeAny>>(content: ThyTooltipContent, dataOrDelay: T | number, delay?: number) {\n if (!content || (this.isTooltipVisible() && !this.tooltipInstance.showTimeoutId && !this.tooltipInstance.hideTimeoutId)) {\n return;\n }\n let showDelay = null;\n let initialState = null;\n if (isNumber(dataOrDelay)) {\n showDelay = dataOrDelay as number;\n } else {\n initialState = dataOrDelay;\n showDelay = delay;\n }\n const overlayRef = this.createOverlay();\n this.detach();\n this.portal = this.portal || new ComponentPortal(ThyTooltip, this.config.viewContainerRef);\n this.tooltipInstance = overlayRef.attach(this.portal).instance;\n this.tooltipInstance\n .afterHidden()\n .pipe(takeUntil(this.dispose$))\n .subscribe(() => this.detach());\n this.updateTooltipContent(content, initialState);\n this.setTooltipClass(this.config.contentClass);\n this.tooltipInstance.show(!isUndefinedOrNull(showDelay) ? showDelay : this.config.showDelay);\n }\n\n hide(delay: number = 0): void {\n if (this.overlayRef && this.overlayRef['_scrollStrategy']) {\n this.overlayRef['_scrollStrategy'].disable();\n }\n if (this.tooltipInstance) {\n this.tooltipInstance.hide(!isUndefinedOrNull(delay) ? delay : this.config.hideDelay);\n }\n }\n\n getOverlayRef() {\n return this.overlayRef;\n }\n\n setTooltipClass(tooltipClass: string | string[]) {\n if (this.tooltipInstance) {\n this.tooltipInstance.setTooltipClass(tooltipClass);\n }\n }\n\n updateTooltipContent(content: string | TemplateRef<any>, data?: any) {\n // Must wait for the message to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the text.\n if (this.tooltipInstance) {\n this.tooltipInstance.content = content;\n this.tooltipInstance.data = data;\n this.tooltipInstance.markForCheck();\n\n this.ngZone.onMicrotaskEmpty\n .asObservable()\n .pipe(take(1), takeUntil(this.dispose$))\n .subscribe(() => {\n if (this.tooltipInstance) {\n this.overlayRef.updatePosition();\n }\n });\n }\n }\n\n isTooltipVisible(): boolean {\n return !!this.tooltipInstance && this.tooltipInstance.isVisible();\n }\n\n dispose(): void {\n this.dispose$.next();\n this.dispose$.complete();\n this.hide(0);\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.tooltipInstance = null;\n }\n }\n}\n","import { InjectionToken, ViewContainerRef } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\n\nexport interface ThyTooltipConfig {\n placement?: ThyPlacement;\n viewContainerRef?: ViewContainerRef;\n showDelay?: number;\n hideDelay?: number;\n touchendHideDelay?: number;\n offset?: number;\n contentClass?: string | string[];\n panelClass?: string | string[];\n hasBackdrop?: boolean;\n tooltipPin?: boolean;\n scrollThrottleSeconds?: number;\n}\n\nexport type ThyGlobalTooltipConfig = Pick<\n ThyTooltipConfig,\n 'placement' | 'offset' | 'scrollThrottleSeconds' | 'tooltipPin' | 'panelClass' | 'showDelay' | 'hideDelay' | 'touchendHideDelay'\n>;\n\nexport const THY_TOOLTIP_DEFAULT_CONFIG_TOKEN = new InjectionToken<ThyGlobalTooltipConfig>('thy-tooltip-default-config');\n\nexport const thyTooltipDefaultConfig: ThyGlobalTooltipConfig = {\n placement: 'top',\n showDelay: 200,\n hideDelay: 100,\n touchendHideDelay: 1500,\n offset: 4,\n panelClass: 'thy-tooltip-panel',\n tooltipPin: false,\n scrollThrottleSeconds: 20\n};\n\nexport const THY_TOOLTIP_DEFAULT_CONFIG_PROVIDER = {\n provide: THY_TOOLTIP_DEFAULT_CONFIG_TOKEN,\n useValue: thyTooltipDefaultConfig\n};\n","import { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { Injectable, NgZone, ElementRef, inject } from '@angular/core';\nimport { ThyTooltipRef } from './tooltip-ref';\nimport { ThyGlobalTooltipConfig, ThyTooltipConfig, THY_TOOLTIP_DEFAULT_CONFIG_TOKEN } from './tooltip.config';\n\n@Injectable({ providedIn: 'root' })\nexport class ThyTooltipService {\n private overlay = inject(Overlay);\n private scrollDispatcher = inject(ScrollDispatcher);\n private ngZone = inject(NgZone);\n private defaultTooltipConfig = inject(THY_TOOLTIP_DEFAULT_CONFIG_TOKEN);\n\n /**\n * 创建一个 Tooltip\n */\n create(host: ElementRef<HTMLElement> | HTMLElement, config: ThyTooltipConfig = {}) {\n config = Object.assign({}, this.defaultTooltipConfig, config);\n const tooltipRef = new ThyTooltipRef(host, config, this.overlay, this.scrollDispatcher, this.ngZone);\n return tooltipRef;\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Platform } from '@angular/cdk/platform';\nimport { Directive, ElementRef, Input, NgZone, OnDestroy, OnInit, ViewContainerRef, numberAttribute, inject } from '@angular/core';\nimport { ThyOverlayDirectiveBase, ThyOverlayTrigger, ThyPlacement } from 'ngx-tethys/core';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { coerceBooleanProperty, isString } from 'ngx-tethys/util';\nimport { ThyTooltipContent } from './interface';\nimport { ThyTooltipRef } from './tooltip-ref';\nimport { ThyTooltipService } from './tooltip.service';\n\n/**\n * @name thyTooltip\n */\n@Directive({\n selector: '[thyTooltip],[thy-tooltip]',\n exportAs: 'thyTooltip'\n})\nexport class ThyTooltipDirective extends ThyOverlayDirectiveBase implements OnInit, OnDestroy {\n private viewContainerRef = inject(ViewContainerRef);\n private thyTooltipService = inject(ThyTooltipService);\n\n touchendHideDelay = 1500;\n\n protected isAutoCloseOnMobileTouch: boolean = true;\n\n private tooltipClass: string | string[];\n\n private tooltipRef: ThyTooltipRef;\n\n private _content: ThyTooltipContent;\n\n get content() {\n return this._content;\n }\n\n /**\n * 提示消息,可以是文本,也可以是一个模板\n * @type string | TemplateRef<T>\n */\n @Input('thyTooltip') set content(value: ThyTooltipContent) {\n // If the content is not a string (e.g. number), convert it to a string and trim it.\n this._content = value && isString(value) ? `${value}`.trim() : value;\n if (!this._content && this.tooltipRef?.isTooltipVisible()) {\n this.tooltipRef.hide(0);\n } else {\n this.tooltipRef?.updateTooltipContent(value, this.data);\n }\n }\n\n /**\n * 指定提示的位置\n * @type ThyPlacement\n */\n @Input('thyTooltipPlacement') placement: ThyPlacement = 'top';\n\n /**\n * 提示内容自定义样式\n */\n @Input('thyTooltipClass')\n set thyTooltipClass(value: string | string[]) {\n this.tooltipClass = value;\n this.tooltipRef?.setTooltipClass(this.tooltipClass);\n }\n\n /**\n * 显示提示内容延迟毫秒\n */\n @Input({ alias: 'thyTooltipShowDelay', transform: numberAttribute }) showDelay: number;\n\n /**\n * 隐藏提示内容延迟毫秒\n */\n @Input({ alias: 'thyTooltipHideDelay', transform: numberAttribute }) hideDelay: number;\n\n _trigger: ThyOverlayTrigger = 'hover';\n\n /**\n * 触发提示方式\n * <br/>`hover` 鼠标移入,显示提示;鼠标移出,隐藏提示;显示提示时,滚动页面,会隐藏提示。\n * <br/>`focus` 元素获取焦点,显示提示;元素失去焦点,隐藏提示;显示元素时,滚动页面,提示会跟随聚焦源一起移动。\n * <br/>`click` 点击元素,显示提示;点击backdrop,隐藏提示;显示提示时,页面的滚动行为会被阻止。\n *\n * @type hover | focus | click\n */\n @Input('thyTooltipTrigger') set thyTooltipTrigger(value: ThyOverlayTrigger) {\n this.trigger = value;\n }\n\n /**\n * 设置是否禁用提示\n * @default false\n */\n @Input({ alias: 'thyTooltipDisabled', transform: coerceBooleanProperty })\n set thyTooltipDisabled(value: boolean) {\n this.disabled = value;\n // If tooltip is disabled, hide immediately.\n if (this.disabled) {\n this.hide(0);\n }\n }\n\n /**\n * 传入 template 时,需要注入给 template 的上下文数据\n */\n @Input('thyTooltipTemplateContext') data: SafeAny;\n\n /**\n * 偏移量\n */\n @Input({ alias: 'thyTooltipOffset', transform: numberAttribute }) tooltipOffset: number;\n\n /**\n * hover 触发方式下 鼠标移入Tooltip是否固定 Tooltip\n * @default false\n */\n @Input({ alias: 'thyTooltipPin', transform: coerceBooleanProperty })\n set tooltipPin(value: boolean) {\n this.overlayPin = value;\n }\n\n constructor() {\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n const ngZone = inject(NgZone);\n const platform = inject(Platform);\n const focusMonitor = inject(FocusMonitor);\n\n super(elementRef, platform, focusMonitor, ngZone);\n }\n\n ngOnInit() {\n this.initialize();\n }\n\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show 200ms */\n show(delay: number = this.showDelay): void {\n if (this.disabled) {\n return;\n }\n if (!this.tooltipRef) {\n this.tooltipRef = this.thyTooltipService.create(this.elementRef, {\n viewContainerRef: this.viewContainerRef,\n placement: this.placement,\n contentClass: this.tooltipClass,\n offset: this.tooltipOffset,\n tooltipPin: this.tooltipPin,\n hasBackdrop: this.trigger === 'click'\n });\n }\n this.tooltipRef.show(this.content, this.data, delay);\n }\n\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide 100ms */\n hide(delay: number = this.hideDelay): void {\n this.tooltipRef?.hide(delay);\n }\n\n ngOnDestroy() {\n this.tooltipRef?.dispose();\n }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThyTooltipDirective } from './tooltip.directive';\nimport { ThyTooltip } from './tooltip.component';\nimport { THY_TOOLTIP_DEFAULT_CONFIG_PROVIDER } from './tooltip.config';\n\n@NgModule({\n imports: [A11yModule, CommonModule, OverlayModule, ThyTooltipDirective, ThyTooltip],\n exports: [ThyTooltipDirective],\n providers: [THY_TOOLTIP_DEFAULT_CONFIG_PROVIDER]\n})\nexport class ThyTooltipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGa,MAAA,oBAAoB,GAE7B;AACA,IAAA,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE;AAC3B,QAAA,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5E,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAElD,UAAU,CAAC,cAAc,EAAE;YACvB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AACnD,YAAA,OAAO,CACH,CAAA,EAAG,iBAAiB,CAAC,IAAI,CAAA,CAAA,EAAI,eAAe,CAAC,oBAAoB,CAAA,CAAE,EACnE,KAAK,CAAC;AACF,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,SAAS,EAAE;AACd,aAAA,CAAC;SAET,CAAC;QACF,UAAU,CAAC,cAAc,EAAE;YACvB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAC/C,YAAA,OAAO,CACH,CAAA,EAAG,iBAAiB,CAAC,IAAI,CAAA,CAAA,EAAI,eAAe,CAAC,oBAAoB,CAAA,CAAE,EACnE,KAAK,CAAC;AACF,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,SAAS,EAAE;AACd,aAAA,CAAC;SAET;KACJ;;;ACZL;;AAEG;MAcU,UAAU,CAAA;AAbvB,IAAA,WAAA,GAAA;AAcY,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEnB,IAAwB,CAAA,wBAAA,GAAG,IAAI;AAMhD,QAAA,IAAA,CAAA,MAAM,GAAkB,IAAI,OAAO,EAAE;QAE9C,IAAkB,CAAA,kBAAA,GAAG,KAAK;QAE1B,IAAY,CAAA,YAAA,GAAG,eAAe,EAAE;QAExC,IAAU,CAAA,UAAA,GAAyB,SAAS;QAM5C,IAAc,CAAA,cAAA,GAAa,EAAE;QAE7B,IAAa,CAAA,aAAA,GAAG,KAAK;AAoFxB;AAlFG,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ;;IAGxB,IAAI,OAAO,CAAC,KAAwC,EAAA;AAChD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,YAAY,WAAW;;IAG7C,aAAa,GAAA;QACjB,IAAI,OAAO,GAAa,EAAE;AAE1B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;;AAGjD,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;;AAG1C,IAAA,QAAQ;IAER,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;IAGzC,SAAS,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS;;AAGxC,IAAA,IAAI,CAAC,KAAa,EAAA;;AAEd,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;;AAI7B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YACzB,IAAI,CAAC,YAAY,EAAE;SACtB,EAAE,KAAK,CAAC;;AAGb,IAAA,IAAI,CAAC,KAAa,EAAA;;AAEd,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAG7B,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YACzB,IAAI,CAAC,YAAY,EAAE;SACtB,EAAE,KAAK,CAAC;;IAGb,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;;AAGnC,IAAA,aAAa,CAAC,KAAqB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAA+B;QACrD,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;QAEtB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ,EAAE;AAC/C,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;;IAItC,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;;AAGrC,IAAA,eAAe,CAAC,OAA0B,EAAA;AACtC,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,aAAa,EAAE;;;8GAxGf,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClCvB,qPAQA,EDwBc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,sIANd,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAQtC,UAAU,EAAA,UAAA,EAAA,CAAA;kBAbtB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAER,aAAA,EAAA,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,CAAC,oBAAoB,CAAC,YAAY,CAAC,EACzC,IAAA,EAAA;AACF,wBAAA,UAAU,EAAE,YAAY;AACxB,wBAAA,gBAAgB,EAAE,kBAAkB;AACpC,wBAAA,eAAe,EAAE;qBACpB,EACQ,OAAA,EAAA,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,qPAAA,EAAA;8BAKO,wBAAwB,EAAA,CAAA;sBAAzD,WAAW;uBAAC,CAAmB,iBAAA,CAAA;;;MExBvB,aAAa,CAAA;IAWtB,WACY,CAAA,IAA2C,EAC3C,MAAwB,EACxB,OAAgB,EAChB,gBAAkC,EAClC,MAAc,EAAA;QAJd,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAM,CAAA,MAAA,GAAN,MAAM;AAPD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;QAS3C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACtD,YAAA,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/B,SAAA,CAAC;;;IAIE,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,IAAI,CAAC,UAAU;;AAE1B,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;;AAExF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACjB,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,IAAI,CAAC,IAAI;aAC7B,qBAAqB,CAAC,sBAAsB;aAC5C,sBAAsB,CAAC,KAAK;aAC5B,kBAAkB,CAAC,CAAC,CAAC;AAE1B,QAAA,QAAQ,CAAC,wBAAwB,CAAC,mBAAmB,CAAC;AACtD,QAAA,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AACvE,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,MAAM,CAAC,wBAAwB,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE;;;AAGtF,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;AAG/C,SAAC,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAClC,YAAA,gBAAgB,EAAE,QAAQ;AAC1B,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,cAAc,EAAE,IAAI,CAAC,cAAc;AACnC,YAAA,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;AACpC,YAAA,aAAa,EAAE;AAClB,SAAA,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,IAAI,CAAC;AACA,aAAA,WAAW;AACX,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC7B,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AAEnC,QAAA,IAAI,CAAC;AACA,aAAA,aAAa;AACb,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC7B,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,SAAC,CAAC;QAEN,OAAO,IAAI,CAAC,UAAU;;;IAIlB,cAAc,GAAA;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,gBAAqD;AAClG,QAAA,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;AAC1G,QAAA,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;;IAGvC,MAAM,GAAA;QACV,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE;AAClD,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;;AAE5B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;AAK/B,IAAA,IAAI,CAAqC,OAA0B,EAAE,WAAuB,EAAE,KAAc,EAAA;QACxG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;YACrH;;QAEJ,IAAI,SAAS,GAAG,IAAI;QACpB,IAAI,YAAY,GAAG,IAAI;AACvB,QAAA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE;YACvB,SAAS,GAAG,WAAqB;;aAC9B;YACH,YAAY,GAAG,WAAW;YAC1B,SAAS,GAAG,KAAK;;AAErB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAC1F,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ;AAC9D,QAAA,IAAI,CAAC;AACA,aAAA,WAAW;AACX,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC7B,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;IAGhG,IAAI,CAAC,QAAgB,CAAC,EAAA;QAClB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;YACvD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE;;AAEhD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;;IAI5F,aAAa,GAAA;QACT,OAAO,IAAI,CAAC,UAAU;;AAG1B,IAAA,eAAe,CAAC,YAA+B,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC;;;IAI1D,oBAAoB,CAAC,OAAkC,EAAE,IAAU,EAAA;;;AAG/D,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,OAAO;AACtC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YAEnC,IAAI,CAAC,MAAM,CAAC;AACP,iBAAA,YAAY;AACZ,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACtC,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;;AAExC,aAAC,CAAC;;;IAId,gBAAgB,GAAA;AACZ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;;IAGrE,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;;AAGtC;;MC5JY,gCAAgC,GAAG,IAAI,cAAc,CAAyB,4BAA4B;AAE1G,MAAA,uBAAuB,GAA2B;AAC3D,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,UAAU,EAAE,mBAAmB;AAC/B,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,qBAAqB,EAAE;;AAGd,MAAA,mCAAmC,GAAG;AAC/C,IAAA,OAAO,EAAE,gCAAgC;AACzC,IAAA,QAAQ,EAAE;;;MC/BD,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AAU1E;AARG;;AAEG;AACH,IAAA,MAAM,CAAC,IAA2C,EAAE,MAAA,GAA2B,EAAE,EAAA;AAC7E,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;AACpG,QAAA,OAAO,UAAU;;8GAZZ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,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,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACKlC;;AAEG;AAKG,MAAO,mBAAoB,SAAQ,uBAAuB,CAAA;AAc5D,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ;;AAGxB;;;AAGG;IACH,IAAyB,OAAO,CAAC,KAAwB,EAAA;;QAErD,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAG,EAAA,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK;AACpE,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE;AACvD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;;aACpB;YACH,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;;;AAU/D;;AAEG;IACH,IACI,eAAe,CAAC,KAAwB,EAAA;AACxC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;;AAevD;;;;;;;AAOG;IACH,IAAgC,iBAAiB,CAAC,KAAwB,EAAA;AACtE,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;AAGxB;;;AAGG;IACH,IACI,kBAAkB,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;;AAcpB;;;AAGG;IACH,IACI,UAAU,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAG3B,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AAC9D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAEzC,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC;AA5G7C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAErD,IAAiB,CAAA,iBAAA,GAAG,IAAI;QAEd,IAAwB,CAAA,wBAAA,GAAY,IAAI;AA0BlD;;;AAGG;QAC2B,IAAS,CAAA,SAAA,GAAiB,KAAK;QAqB7D,IAAQ,CAAA,QAAA,GAAsB,OAAO;;IAuDrC,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;;;AAIrB,IAAA,IAAI,CAAC,KAAA,GAAgB,IAAI,CAAC,SAAS,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;;AAEJ,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC7D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,MAAM,EAAE,IAAI,CAAC,aAAa;gBAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,gBAAA,WAAW,EAAE,IAAI,CAAC,OAAO,KAAK;AACjC,aAAA,CAAC;;AAEN,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;;;AAIxD,IAAA,IAAI,CAAC,KAAA,GAAgB,IAAI,CAAC,SAAS,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;;IAGhC,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;;8GA5IrB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,SAAA,CAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,EAAA,WAAA,CAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,EAAA,WAAA,EAkDsB,eAAe,CAKf,EAAA,SAAA,EAAA,CAAA,qBAAA,EAAA,WAAA,EAAA,eAAe,4GAoBhB,qBAAqB,CAAA,EAAA,IAAA,EAAA,CAAA,2BAAA,EAAA,MAAA,CAAA,EAAA,aAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,EAiBvB,eAAe,CAAA,EAAA,UAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAMlB,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAlGxD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE;AACb,iBAAA;wDAuB4B,OAAO,EAAA,CAAA;sBAA/B,KAAK;uBAAC,YAAY;gBAcW,SAAS,EAAA,CAAA;sBAAtC,KAAK;uBAAC,qBAAqB;gBAMxB,eAAe,EAAA,CAAA;sBADlB,KAAK;uBAAC,iBAAiB;gBAS6C,SAAS,EAAA,CAAA;sBAA7E,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,eAAe,EAAE;gBAKE,SAAS,EAAA,CAAA;sBAA7E,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,eAAe,EAAE;gBAYnC,iBAAiB,EAAA,CAAA;sBAAhD,KAAK;uBAAC,mBAAmB;gBAStB,kBAAkB,EAAA,CAAA;sBADrB,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,qBAAqB,EAAE;gBAYpC,IAAI,EAAA,CAAA;sBAAvC,KAAK;uBAAC,2BAA2B;gBAKgC,aAAa,EAAA,CAAA;sBAA9E,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe,EAAE;gBAO5D,UAAU,EAAA,CAAA;sBADb,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,qBAAqB,EAAE;;;MCtG1D,gBAAgB,CAAA;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAhB,gBAAgB,EAAA,OAAA,EAAA,CAJf,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,CAAA,EAAA,OAAA,EAAA,CACxE,mBAAmB,CAAA,EAAA,CAAA,CAAA;+GAGpB,gBAAgB,EAAA,SAAA,EAFd,CAAC,mCAAmC,CAAC,YAFtC,UAAU,EAAE,YAAY,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA;;2FAIxC,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,CAAC;oBACnF,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,SAAS,EAAE,CAAC,mCAAmC;AAClD,iBAAA;;;ACZD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-tooltip.mjs","sources":["../../../src/tooltip/tooltip-animations.ts","../../../src/tooltip/tooltip.component.ts","../../../src/tooltip/tooltip.component.html","../../../src/tooltip/tooltip-ref.ts","../../../src/tooltip/tooltip.config.ts","../../../src/tooltip/tooltip.service.ts","../../../src/tooltip/tooltip.directive.ts","../../../src/tooltip/tooltip.module.ts","../../../src/tooltip/ngx-tethys-tooltip.ts"],"sourcesContent":["import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\nimport { AnimationCurves, AnimationDuration } from 'ngx-tethys/core';\n\nexport const thyTooltipAnimations: {\n readonly tooltipState: AnimationTriggerMetadata;\n} = {\n tooltipState: trigger('state', [\n state('initial, void, hidden', style({ opacity: 0, transform: 'scale(0)' })),\n state('visible', style({ transform: 'scale(1)' })),\n\n transition('* => visible', [\n style({ opacity: 0, transform: 'scale(0.9, 0.9)' }),\n animate(\n `${AnimationDuration.BASE} ${AnimationCurves.EASE_IN_OUT_STANDARD}`,\n style({\n opacity: 1,\n transform: 'scale(1, 1)'\n })\n )\n ]),\n transition('visible => *', [\n style({ opacity: 1, transform: 'scale(1, 1)' }),\n animate(\n `${AnimationDuration.BASE} ${AnimationCurves.EASE_IN_OUT_STANDARD}`,\n style({\n opacity: 0,\n transform: 'scale(0.9, 0.9)'\n })\n )\n ])\n ])\n};\n","import {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n HostBinding,\n TemplateRef,\n OnInit,\n inject\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { AnimationEvent } from '@angular/animations';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyTooltipVisibility } from './interface';\nimport { thyTooltipAnimations } from './tooltip-animations';\nimport { coerceArray } from 'ngx-tethys/util';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * @internal\n */\n@Component({\n selector: 'thy-tooltip',\n templateUrl: './tooltip.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [thyTooltipAnimations.tooltipState],\n host: {\n '[@state]': 'visibility',\n '(@state.start)': 'animationStart()',\n '(@state.done)': 'animationDone($event)'\n },\n imports: [NgTemplateOutlet]\n})\nexport class ThyTooltip implements OnInit {\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n @HostBinding(`class.thy-tooltip`) addTooltipContainerClass = true;\n\n _content: string | TemplateRef<HTMLElement>;\n\n data: any;\n\n private readonly onHide: Subject<void> = new Subject();\n\n private closeOnInteraction = false;\n\n private hostRenderer = useHostRenderer();\n\n visibility: ThyTooltipVisibility = 'initial';\n\n showTimeoutId: number | null | any;\n\n hideTimeoutId: number | null | any;\n\n tooltipClasses: string[] = [];\n\n isTemplateRef = false;\n\n get content() {\n return this._content;\n }\n\n set content(value: string | TemplateRef<HTMLElement>) {\n this._content = value;\n this.isTemplateRef = value instanceof TemplateRef;\n }\n\n private updateClasses() {\n let classes: string[] = [];\n\n if (this.tooltipClasses) {\n classes = classes.concat(this.tooltipClasses);\n }\n\n this.hostRenderer.updateClass(classes);\n }\n\n ngOnInit() {}\n\n markForCheck(): void {\n this.changeDetectorRef.markForCheck();\n }\n\n isVisible() {\n return this.visibility === 'visible';\n }\n\n show(delay: number): void {\n // Cancel the delayed hide if it is scheduled\n if (this.hideTimeoutId) {\n clearTimeout(this.hideTimeoutId);\n this.hideTimeoutId = null;\n }\n\n // Body interactions should cancel the tooltip if there is a delay in showing.\n this.closeOnInteraction = true;\n this.showTimeoutId = setTimeout(() => {\n this.visibility = 'visible';\n this.showTimeoutId = null;\n this.markForCheck();\n }, delay);\n }\n\n hide(delay: number): void {\n // Cancel the delayed show if it is scheduled\n if (this.showTimeoutId) {\n clearTimeout(this.showTimeoutId);\n this.showTimeoutId = null;\n }\n\n this.hideTimeoutId = setTimeout(() => {\n this.visibility = 'hidden';\n this.hideTimeoutId = null;\n this.markForCheck();\n }, delay);\n }\n\n animationStart() {\n this.closeOnInteraction = false;\n }\n\n animationDone(event: AnimationEvent): void {\n const toState = event.toState as ThyTooltipVisibility;\n if (toState === 'hidden' && !this.isVisible()) {\n this.onHide.next();\n }\n if (toState === 'visible' || toState === 'hidden') {\n this.closeOnInteraction = true;\n }\n }\n\n afterHidden(): Observable<void> {\n return this.onHide.asObservable();\n }\n\n setTooltipClass(classes: string | string[]) {\n this.tooltipClasses = coerceArray(classes);\n this.updateClasses();\n // this.markForCheck();\n }\n}\n","<div class=\"thy-tooltip-arrow\"></div>\n<div class=\"thy-tooltip-content\">\n @if (isTemplateRef) {\n <ng-container *ngTemplateOutlet=\"content; context: { $implicit: data }\"></ng-container>\n } @else {\n {{ content }}\n }\n</div>\n","import { FlexibleConnectedPositionStrategy, Overlay, OverlayRef, ScrollDispatcher, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ElementRef, NgZone, TemplateRef } from '@angular/core';\nimport { isUndefinedOrNull } from '@tethys/cdk/is';\nimport { getFlexiblePositions } from 'ngx-tethys/core';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { isNumber } from 'ngx-tethys/util';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { ThyTooltipContent } from './interface';\nimport { ThyTooltip } from './tooltip.component';\nimport { ThyTooltipConfig } from './tooltip.config';\n\nexport class ThyTooltipRef {\n private overlayRef: OverlayRef;\n\n private tooltipInstance: ThyTooltip;\n\n private scrollStrategy: ScrollStrategy;\n\n private portal: ComponentPortal<ThyTooltip>;\n\n private readonly dispose$ = new Subject<void>();\n\n constructor(\n private host: ElementRef<HTMLElement> | HTMLElement,\n private config: ThyTooltipConfig,\n private overlay: Overlay,\n private scrollDispatcher: ScrollDispatcher,\n private ngZone: NgZone\n ) {\n this.scrollStrategy = overlay.scrollStrategies.reposition({\n scrollThrottle: this.config.scrollThrottleSeconds\n });\n }\n\n /** Create the overlay config and position strategy */\n private createOverlay(): OverlayRef {\n if (this.overlayRef) {\n return this.overlayRef;\n }\n const scrollableAncestors = this.scrollDispatcher.getAncestorScrollContainers(this.host);\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this.overlay\n .position()\n .flexibleConnectedTo(this.host)\n .withTransformOriginOn('.thy-tooltip-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8);\n\n strategy.withScrollableContainers(scrollableAncestors);\n strategy.positionChanges.pipe(takeUntil(this.dispose$)).subscribe(change => {\n if (this.tooltipInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this.tooltipInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this.ngZone.run(() => this.hide(0));\n }\n }\n });\n this.overlayRef = this.overlay.create({\n positionStrategy: strategy,\n panelClass: this.config.panelClass,\n scrollStrategy: this.scrollStrategy,\n hasBackdrop: this.config.hasBackdrop,\n backdropClass: 'thy-tooltip-backdrop'\n });\n\n this.updatePosition();\n\n this.overlayRef\n .detachments()\n .pipe(takeUntil(this.dispose$))\n .subscribe(() => this.detach());\n\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.dispose$))\n .subscribe(() => {\n this.overlayRef.detachBackdrop();\n this.hide(0);\n });\n\n return this.overlayRef;\n }\n\n /** Updates the position of the current tooltip. */\n private updatePosition() {\n const position = this.overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n const connectionPositions = getFlexiblePositions(this.config.placement, this.config.offset, 'thy-tooltip');\n position.withPositions(connectionPositions);\n }\n\n private detach() {\n if (this.overlayRef && this.overlayRef.hasAttached()) {\n this.overlayRef.detach();\n }\n this.tooltipInstance = null;\n }\n\n show(content: ThyTooltipContent, delay?: number): void;\n show<T extends Record<SafeAny, SafeAny>>(content: ThyTooltipContent, data: T, delay?: number): void;\n show<T extends Record<SafeAny, SafeAny>>(content: ThyTooltipContent, dataOrDelay: T | number, delay?: number) {\n if (!content || (this.isTooltipVisible() && !this.tooltipInstance.showTimeoutId && !this.tooltipInstance.hideTimeoutId)) {\n return;\n }\n let showDelay = null;\n let initialState = null;\n if (isNumber(dataOrDelay)) {\n showDelay = dataOrDelay as number;\n } else {\n initialState = dataOrDelay;\n showDelay = delay;\n }\n const overlayRef = this.createOverlay();\n this.detach();\n this.portal = this.portal || new ComponentPortal(ThyTooltip, this.config.viewContainerRef);\n this.tooltipInstance = overlayRef.attach(this.portal).instance;\n this.tooltipInstance\n .afterHidden()\n .pipe(takeUntil(this.dispose$))\n .subscribe(() => this.detach());\n this.updateTooltipContent(content, initialState);\n this.setTooltipClass(this.config.contentClass);\n this.tooltipInstance.show(!isUndefinedOrNull(showDelay) ? showDelay : this.config.showDelay);\n }\n\n hide(delay: number = 0): void {\n if (this.overlayRef && this.overlayRef['_scrollStrategy']) {\n this.overlayRef['_scrollStrategy'].disable();\n }\n if (this.tooltipInstance) {\n this.tooltipInstance.hide(!isUndefinedOrNull(delay) ? delay : this.config.hideDelay);\n }\n }\n\n getOverlayRef() {\n return this.overlayRef;\n }\n\n setTooltipClass(tooltipClass: string | string[]) {\n if (this.tooltipInstance) {\n this.tooltipInstance.setTooltipClass(tooltipClass);\n }\n }\n\n updateTooltipContent(content: string | TemplateRef<any>, data?: any) {\n // Must wait for the message to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the text.\n if (this.tooltipInstance) {\n this.tooltipInstance.content = content;\n this.tooltipInstance.data = data;\n this.tooltipInstance.markForCheck();\n\n this.ngZone.onMicrotaskEmpty\n .asObservable()\n .pipe(take(1), takeUntil(this.dispose$))\n .subscribe(() => {\n if (this.tooltipInstance) {\n this.overlayRef.updatePosition();\n }\n });\n }\n }\n\n isTooltipVisible(): boolean {\n return !!this.tooltipInstance && this.tooltipInstance.isVisible();\n }\n\n dispose(): void {\n this.dispose$.next();\n this.dispose$.complete();\n this.hide(0);\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.tooltipInstance = null;\n }\n }\n}\n","import { InjectionToken, ViewContainerRef } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\n\nexport interface ThyTooltipConfig {\n placement?: ThyPlacement;\n viewContainerRef?: ViewContainerRef;\n showDelay?: number;\n hideDelay?: number;\n touchendHideDelay?: number;\n offset?: number;\n contentClass?: string | string[];\n panelClass?: string | string[];\n hasBackdrop?: boolean;\n tooltipPin?: boolean;\n scrollThrottleSeconds?: number;\n}\n\nexport type ThyGlobalTooltipConfig = Pick<\n ThyTooltipConfig,\n 'placement' | 'offset' | 'scrollThrottleSeconds' | 'tooltipPin' | 'panelClass' | 'showDelay' | 'hideDelay' | 'touchendHideDelay'\n>;\n\nexport const THY_TOOLTIP_DEFAULT_CONFIG_TOKEN = new InjectionToken<ThyGlobalTooltipConfig>('thy-tooltip-default-config');\n\nexport const thyTooltipDefaultConfig: ThyGlobalTooltipConfig = {\n placement: 'top',\n showDelay: 200,\n hideDelay: 100,\n touchendHideDelay: 1500,\n offset: 4,\n panelClass: 'thy-tooltip-panel',\n tooltipPin: false,\n scrollThrottleSeconds: 20\n};\n\nexport const THY_TOOLTIP_DEFAULT_CONFIG_PROVIDER = {\n provide: THY_TOOLTIP_DEFAULT_CONFIG_TOKEN,\n useValue: thyTooltipDefaultConfig\n};\n","import { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { Injectable, NgZone, ElementRef, inject } from '@angular/core';\nimport { ThyTooltipRef } from './tooltip-ref';\nimport { ThyGlobalTooltipConfig, ThyTooltipConfig, THY_TOOLTIP_DEFAULT_CONFIG_TOKEN } from './tooltip.config';\n\n@Injectable({ providedIn: 'root' })\nexport class ThyTooltipService {\n private overlay = inject(Overlay);\n private scrollDispatcher = inject(ScrollDispatcher);\n private ngZone = inject(NgZone);\n private defaultTooltipConfig = inject(THY_TOOLTIP_DEFAULT_CONFIG_TOKEN);\n\n /**\n * 创建一个 Tooltip\n */\n create(host: ElementRef<HTMLElement> | HTMLElement, config: ThyTooltipConfig = {}) {\n config = Object.assign({}, this.defaultTooltipConfig, config);\n const tooltipRef = new ThyTooltipRef(host, config, this.overlay, this.scrollDispatcher, this.ngZone);\n return tooltipRef;\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Platform } from '@angular/cdk/platform';\nimport {\n Directive,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n ViewContainerRef,\n numberAttribute,\n inject,\n input,\n effect,\n linkedSignal\n} from '@angular/core';\nimport { ThyOverlayDirectiveBase, ThyOverlayTrigger, ThyPlacement } from 'ngx-tethys/core';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { coerceBooleanProperty, isString } from 'ngx-tethys/util';\nimport { ThyTooltipContent } from './interface';\nimport { ThyTooltipRef } from './tooltip-ref';\nimport { ThyTooltipService } from './tooltip.service';\n\n/**\n * @name thyTooltip\n */\n@Directive({ selector: '[thyTooltip],[thy-tooltip]', exportAs: 'thyTooltip' })\nexport class ThyTooltipDirective extends ThyOverlayDirectiveBase implements OnInit, OnDestroy {\n private viewContainerRef = inject(ViewContainerRef);\n private thyTooltipService = inject(ThyTooltipService);\n\n touchendHideDelay = 1500;\n\n protected isAutoCloseOnMobileTouch: boolean = true;\n\n private tooltipRef: ThyTooltipRef;\n\n /**\n * 提示消息,可以是文本,也可以是一个模板\n * @type string | TemplateRef<T>\n */\n readonly thyTooltipContent = input<ThyTooltipContent>(undefined, { alias: 'thyTooltip' });\n\n getValidContent(value: ThyTooltipContent) {\n // If the content is not a string (e.g. number), convert it to a string and trim it.\n const validValue = value && isString(value) ? `${value}`.trim() : value;\n return validValue;\n }\n\n content = linkedSignal(() => {\n const value = this.thyTooltipContent();\n return this.getValidContent(value);\n });\n\n /**\n * 指定提示的位置\n * @type ThyPlacement\n */\n readonly thyPlacement = input<ThyPlacement>('top', { alias: 'thyTooltipPlacement' });\n\n placement = linkedSignal(() => {\n return this.thyPlacement();\n });\n\n /**\n * 提示内容自定义样式\n */\n readonly thyTooltipClass = input<string | string[]>();\n\n /**\n * 显示提示内容延迟毫秒\n */\n readonly thyTooltipShowDelay = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 隐藏提示内容延迟毫秒\n */\n readonly thyTooltipHideDelay = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 触发提示方式\n * <br/>`hover` 鼠标移入,显示提示;鼠标移出,隐藏提示;显示提示时,滚动页面,会隐藏提示。\n * <br/>`focus` 元素获取焦点,显示提示;元素失去焦点,隐藏提示;显示元素时,滚动页面,提示会跟随聚焦源一起移动。\n * <br/>`click` 点击元素,显示提示;点击backdrop,隐藏提示;显示提示时,页面的滚动行为会被阻止。\n *\n * @type hover | focus | click\n */\n readonly thyTooltipTrigger = input<ThyOverlayTrigger>('hover');\n\n /**\n * 设置是否禁用提示\n * @default false\n */\n readonly thyTooltipDisabled = input<boolean, unknown>(undefined, { transform: coerceBooleanProperty });\n\n toolTipDisabled = linkedSignal(() => {\n return this.thyTooltipDisabled();\n });\n\n /**\n * 传入 template 时,需要注入给 template 的上下文数据\n */\n readonly data = input<SafeAny>(undefined, { alias: 'thyTooltipTemplateContext' });\n\n /**\n * 偏移量\n */\n readonly thyTooltipOffset = input<number, unknown>(undefined, { alias: 'thyTooltipOffset', transform: numberAttribute });\n\n tooltipOffset = linkedSignal(() => {\n return this.thyTooltipOffset();\n });\n\n /**\n * hover 触发方式下 鼠标移入Tooltip是否固定 Tooltip\n * @default false\n */\n readonly tooltipPin = input<boolean, unknown>(undefined, { alias: 'thyTooltipPin', transform: coerceBooleanProperty });\n\n setDisabled(disabled: boolean) {\n this.toolTipDisabled.set(disabled);\n }\n\n setContent(content: ThyTooltipContent) {\n const validValue = this.getValidContent(content);\n this.content.set(validValue);\n }\n\n setOffset(offset: number) {\n this.tooltipOffset.set(offset);\n }\n\n setPlacement(placement: ThyPlacement) {\n this.placement.set(placement);\n }\n\n constructor() {\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n const ngZone = inject(NgZone);\n const platform = inject(Platform);\n const focusMonitor = inject(FocusMonitor);\n super(elementRef, platform, focusMonitor, ngZone);\n\n effect(() => {\n const value = this.content();\n if (!value && this.tooltipRef?.isTooltipVisible()) {\n this.tooltipRef.hide(0);\n } else {\n this.tooltipRef?.updateTooltipContent(value, this.data());\n }\n });\n\n effect(() => {\n const tooltipClass = this.thyTooltipClass();\n this.tooltipRef?.setTooltipClass(tooltipClass);\n });\n\n effect(() => {\n const trigger = this.thyTooltipTrigger();\n this.trigger = trigger;\n });\n\n effect(() => {\n const disabled = this.toolTipDisabled();\n this.disabled = disabled;\n if (disabled) {\n this.hide(0);\n }\n });\n\n effect(() => {\n const overlayPin = this.tooltipPin();\n this.overlayPin = overlayPin;\n });\n }\n\n ngOnInit() {\n this.initialize();\n }\n\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show 200ms */\n show(delay: number = this.thyTooltipShowDelay()): void {\n if (this.disabled) {\n return;\n }\n if (!this.tooltipRef) {\n this.tooltipRef = this.thyTooltipService.create(this.elementRef, {\n viewContainerRef: this.viewContainerRef,\n placement: this.placement(),\n contentClass: this.thyTooltipClass(),\n offset: this.tooltipOffset(),\n tooltipPin: this.tooltipPin(),\n hasBackdrop: this.trigger === 'click'\n });\n }\n this.tooltipRef.show(this.content(), this.data(), delay);\n }\n\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide 100ms */\n hide(delay: number = this.thyTooltipHideDelay()): void {\n this.tooltipRef?.hide(delay);\n }\n\n ngOnDestroy() {\n this.tooltipRef?.dispose();\n }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThyTooltipDirective } from './tooltip.directive';\nimport { ThyTooltip } from './tooltip.component';\nimport { THY_TOOLTIP_DEFAULT_CONFIG_PROVIDER } from './tooltip.config';\n\n@NgModule({\n imports: [A11yModule, CommonModule, OverlayModule, ThyTooltipDirective, ThyTooltip],\n exports: [ThyTooltipDirective],\n providers: [THY_TOOLTIP_DEFAULT_CONFIG_PROVIDER]\n})\nexport class ThyTooltipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('19.1.0-next.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('19.1.0-next.7');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,eAAe;;ACFlD;;AAEG;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementRef,
|
|
1
|
+
import { ElementRef, OnInit, Signal } from '@angular/core';
|
|
2
2
|
import { ThyCopyEvent } from 'ngx-tethys/copy';
|
|
3
3
|
import { ThyDialog } from 'ngx-tethys/dialog';
|
|
4
4
|
import { ThyFullscreen } from 'ngx-tethys/fullscreen';
|
|
@@ -20,7 +20,7 @@ export declare class ThyImagePreview implements OnInit {
|
|
|
20
20
|
private host;
|
|
21
21
|
private sanitizer;
|
|
22
22
|
locale: Signal<ThyImageLocale>;
|
|
23
|
-
downloadClicked:
|
|
23
|
+
readonly downloadClicked: import("@angular/core").OutputEmitterRef<ThyImageInfo>;
|
|
24
24
|
private readonly destroyRef;
|
|
25
25
|
images: InternalImageInfo[];
|
|
26
26
|
previewIndex: number;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { IThyListOptionParentComponent, ThyListOption } from 'ngx-tethys/shared';
|
|
2
2
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
3
|
-
import { AfterContentInit, ElementRef,
|
|
3
|
+
import { AfterContentInit, ElementRef, OnDestroy, OnInit, QueryList } from '@angular/core';
|
|
4
4
|
import { ControlValueAccessor } from '@angular/forms';
|
|
5
5
|
import { ThyListLayout } from 'ngx-tethys/shared';
|
|
6
6
|
import { ThySelectionListChange } from './selection.interface';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "ngx-tethys/util";
|
|
9
8
|
export type ThyListSize = 'sm' | 'md' | 'lg';
|
|
10
9
|
/**
|
|
11
10
|
* @name thy-selection-list,[thy-selection-list]
|
|
@@ -16,93 +15,84 @@ export declare class ThySelectionList implements OnInit, OnDestroy, AfterContent
|
|
|
16
15
|
private elementRef;
|
|
17
16
|
private ngZone;
|
|
18
17
|
private changeDetectorRef;
|
|
19
|
-
private
|
|
20
|
-
private
|
|
21
|
-
private
|
|
22
|
-
private _modelValues;
|
|
18
|
+
private keyManager;
|
|
19
|
+
private bindKeyEventUnsubscribe;
|
|
20
|
+
private modelValues;
|
|
23
21
|
private hostRenderer;
|
|
24
22
|
/** The currently selected options. */
|
|
25
23
|
selectionModel: SelectionModel<any>;
|
|
26
24
|
disabled: boolean;
|
|
27
|
-
layout: ThyListLayout;
|
|
28
|
-
_isList: boolean;
|
|
29
|
-
_isSelectionList: boolean;
|
|
30
|
-
multiple: boolean;
|
|
31
|
-
isLayoutGrid: boolean;
|
|
32
25
|
/**
|
|
33
26
|
* @internal
|
|
34
27
|
*/
|
|
35
28
|
options: QueryList<ThyListOption>;
|
|
36
29
|
/**
|
|
37
30
|
* 改变 grid item 的选择模式,使其支持多选
|
|
38
|
-
* @default true
|
|
39
31
|
*/
|
|
40
|
-
|
|
32
|
+
readonly multiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
41
33
|
/**
|
|
42
34
|
* 绑定键盘事件的容器
|
|
43
35
|
* @type HTMLElement | ElementRef | string
|
|
44
36
|
* @default thy-selection-list 组件绑定的元素
|
|
45
37
|
*/
|
|
46
|
-
thyBindKeyEventContainer:
|
|
38
|
+
readonly thyBindKeyEventContainer: import("@angular/core").InputSignal<string | HTMLElement | ElementRef<any>>;
|
|
47
39
|
/**
|
|
48
40
|
* 出现滚动条的容器
|
|
49
41
|
* @type HTMLElement | ElementRef | string
|
|
50
42
|
* @default thy-selection-list 组件绑定的元素
|
|
51
43
|
*/
|
|
52
|
-
thyScrollContainer:
|
|
44
|
+
readonly thyScrollContainer: import("@angular/core").InputSignal<string | HTMLElement | ElementRef<any>>;
|
|
53
45
|
/**
|
|
54
46
|
* 键盘事件触发 Before 调用,如果返回 false 则停止继续执行
|
|
55
47
|
*/
|
|
56
|
-
thyBeforeKeydown: (event?: KeyboardEvent) => boolean
|
|
48
|
+
readonly thyBeforeKeydown: import("@angular/core").InputSignal<(event?: KeyboardEvent) => boolean>;
|
|
57
49
|
/**
|
|
58
50
|
* Option Value 唯一的 Key,用于存储哪些选择被选中的唯一值,只有 Option 的 thyValue 是对象的时才可以传入该选项
|
|
59
51
|
*/
|
|
60
|
-
thyUniqueKey: string
|
|
52
|
+
readonly thyUniqueKey: import("@angular/core").InputSignal<string>;
|
|
61
53
|
/**
|
|
62
54
|
* 比较2个选项的 Value 是否相同
|
|
63
55
|
*/
|
|
64
|
-
thyCompareWith: (o1: any, o2: any) => boolean
|
|
56
|
+
readonly thyCompareWith: import("@angular/core").InputSignal<(o1: any, o2: any) => boolean>;
|
|
65
57
|
/**
|
|
66
58
|
* grid item 的展示样式
|
|
67
59
|
* @type list | grid
|
|
68
|
-
* @default list
|
|
69
60
|
*/
|
|
70
|
-
|
|
61
|
+
readonly layout: import("@angular/core").InputSignal<ThyListLayout>;
|
|
62
|
+
readonly isLayoutGrid: import("@angular/core").Signal<boolean>;
|
|
71
63
|
/**
|
|
72
64
|
* 是否自动激活第一项
|
|
73
65
|
*/
|
|
74
|
-
|
|
66
|
+
readonly thyAutoActiveFirstItem: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
75
67
|
/**
|
|
76
68
|
* 改变 grid item 的大小,支持默认以及 sm 两种大小
|
|
77
69
|
* @type sm | md | lg
|
|
78
70
|
*/
|
|
79
|
-
|
|
80
|
-
private spaceEnabled;
|
|
71
|
+
readonly thySize: import("@angular/core").InputSignal<ThyListSize>;
|
|
81
72
|
/**
|
|
82
73
|
* 是否按下空格切换聚焦选项
|
|
83
74
|
*/
|
|
84
|
-
|
|
75
|
+
readonly thySpaceKeyEnabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
85
76
|
/**
|
|
86
77
|
* 每当选项的选定状态发生更改时,都会触发更改事件
|
|
87
|
-
* @type EventEmitter<ThySelectionListChange>
|
|
88
78
|
*/
|
|
89
|
-
readonly thySelectionChange:
|
|
90
|
-
private
|
|
91
|
-
private
|
|
92
|
-
|
|
93
|
-
private
|
|
94
|
-
private
|
|
95
|
-
private
|
|
96
|
-
private
|
|
97
|
-
private
|
|
98
|
-
private
|
|
99
|
-
private
|
|
100
|
-
private
|
|
101
|
-
private
|
|
102
|
-
private
|
|
103
|
-
private
|
|
104
|
-
private
|
|
105
|
-
private
|
|
79
|
+
readonly thySelectionChange: import("@angular/core").OutputEmitterRef<ThySelectionListChange<any>>;
|
|
80
|
+
private onTouched;
|
|
81
|
+
private onChange;
|
|
82
|
+
constructor();
|
|
83
|
+
private emitChangeEvent;
|
|
84
|
+
private emitModelValueChange;
|
|
85
|
+
private toggleFocusedOption;
|
|
86
|
+
private initializeFocusKeyManager;
|
|
87
|
+
private instanceSelectionModel;
|
|
88
|
+
private getElementBySelector;
|
|
89
|
+
private compareValue;
|
|
90
|
+
private getOptionSelectionValue;
|
|
91
|
+
private setSelectionByValues;
|
|
92
|
+
private setAllOptionsSelected;
|
|
93
|
+
private getOptionByValue;
|
|
94
|
+
private getActiveOption;
|
|
95
|
+
private setListSize;
|
|
106
96
|
ngOnInit(): void;
|
|
107
97
|
writeValue(value: any[] | any): void;
|
|
108
98
|
registerOnChange(fn: any): void;
|
|
@@ -122,8 +112,5 @@ export declare class ThySelectionList implements OnInit, OnDestroy, AfterContent
|
|
|
122
112
|
ngAfterContentInit(): void;
|
|
123
113
|
ngOnDestroy(): void;
|
|
124
114
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThySelectionList, never>;
|
|
125
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ThySelectionList, "thy-selection-list,[thy-selection-list]", never, { "
|
|
126
|
-
static ngAcceptInputType_thyMultiple: i1.ThyBooleanInput;
|
|
127
|
-
static ngAcceptInputType_thyAutoActiveFirstItem: i1.ThyBooleanInput;
|
|
128
|
-
static ngAcceptInputType_thySpaceKeyEnabled: i1.ThyBooleanInput;
|
|
115
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ThySelectionList, "thy-selection-list,[thy-selection-list]", never, { "multiple": { "alias": "thyMultiple"; "required": false; "isSignal": true; }; "thyBindKeyEventContainer": { "alias": "thyBindKeyEventContainer"; "required": false; "isSignal": true; }; "thyScrollContainer": { "alias": "thyScrollContainer"; "required": false; "isSignal": true; }; "thyBeforeKeydown": { "alias": "thyBeforeKeydown"; "required": false; "isSignal": true; }; "thyUniqueKey": { "alias": "thyUniqueKey"; "required": false; "isSignal": true; }; "thyCompareWith": { "alias": "thyCompareWith"; "required": false; "isSignal": true; }; "layout": { "alias": "thyLayout"; "required": false; "isSignal": true; }; "thyAutoActiveFirstItem": { "alias": "thyAutoActiveFirstItem"; "required": false; "isSignal": true; }; "thySize": { "alias": "thySize"; "required": false; "isSignal": true; }; "thySpaceKeyEnabled": { "alias": "thySpaceKeyEnabled"; "required": false; "isSignal": true; }; }, { "thySelectionChange": "thySelectionChange"; }, ["options"], ["*"], true, never>;
|
|
129
116
|
}
|