@rt-tools/ui-kit-v2 0.35.0 → 0.36.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/rt-tools-ui-kit-v2-action-bar.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +4 -2
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +5 -2
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +10 -6
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-popover.mjs +22 -2
- package/fesm2022/rt-tools-ui-kit-v2-popover.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +36 -5
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +4 -2
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +3 -1
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +3 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +53 -5
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +37 -0
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs +4 -3
- package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/components/page-header/rt-page-header-mobile.scss +6 -0
- package/src/lib/components/popover/CONTEXT.md +4 -0
- package/src/lib/components/thread-list/rt-thread-list.component.scss +7 -0
- package/src/lib/components/tooltip/CONTEXT.md +4 -0
- package/src/rich-editor/lib/components/chat/rt-chat.component.scss +31 -1
- package/types/rt-tools-ui-kit-v2-popover.d.ts +11 -0
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +7 -0
- package/types/rt-tools-ui-kit-v2-thread-list.d.ts +7 -1
- package/types/rt-tools-ui-kit-v2-tooltip.d.ts +12 -0
|
@@ -299,6 +299,7 @@ var RtSpeedMenuComponent = class RtSpeedMenuComponent {
|
|
|
299
299
|
"rtPopoverFitViewport",
|
|
300
300
|
"rtPopoverContext",
|
|
301
301
|
"rtPopoverPanelClass",
|
|
302
|
+
"rtPopoverBackdropClass",
|
|
302
303
|
"rtPopoverDisabled",
|
|
303
304
|
"rtPopoverOffsetY",
|
|
304
305
|
"rtPopoverOffsetX",
|
|
@@ -316,7 +317,8 @@ var RtSpeedMenuComponent = class RtSpeedMenuComponent {
|
|
|
316
317
|
"rtTooltipPlacement",
|
|
317
318
|
"rtTooltipShowDelay",
|
|
318
319
|
"rtTooltipWhenTruncated",
|
|
319
|
-
"rtTooltipHideOnClick"
|
|
320
|
+
"rtTooltipHideOnClick",
|
|
321
|
+
"rtTooltipShowOnTap"
|
|
320
322
|
],
|
|
321
323
|
exportAs: ["rtTooltip"]
|
|
322
324
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-speed-menu.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/speed-menu/rt-speed-menu.logic.ts","../../../projects/ui-kit-v2/src/lib/components/speed-menu/rt-speed-menu.component.ts","../../../projects/ui-kit-v2/src/lib/components/speed-menu/rt-speed-menu.component.html"],"sourcesContent":["import { ConnectedPosition } from '@angular/cdk/overlay';\n\nimport { IRtIconButton } from '@rt-tools/ui-kit-v2/icon-button';\nimport { IRtTooltip } from '@rt-tools/ui-kit-v2/tooltip';\nimport { IRtSpeedMenu } from './rt-speed-menu.model';\n\nconst UP: ConnectedPosition = { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' };\nconst DOWN: ConnectedPosition = { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' };\nconst START: ConnectedPosition = { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' };\nconst END: ConnectedPosition = { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' };\n\nconst POSITIONS: Record<IRtSpeedMenu.Direction, readonly ConnectedPosition[]> = {\n up: [UP, DOWN],\n down: [DOWN, UP],\n start: [START, END],\n end: [END, START],\n};\n\nconst ACTION_SIZE: Record<IRtSpeedMenu.Size, IRtIconButton.Size> = {\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n xl: 'lg',\n};\n\n/** Места панели вокруг кнопки: сторона направления, а у края экрана — противоположная. */\nexport function speedMenuPositions(direction: IRtSpeedMenu.Direction): readonly ConnectedPosition[] {\n return POSITIONS[direction];\n}\n\n/** Размер кнопок действий — на шаг меньше кнопки меню. */\nexport function speedMenuActionSize(size: IRtSpeedMenu.Size): IRtIconButton.Size {\n return ACTION_SIZE[size];\n}\n\n/** Подсказка столбца действий встаёт сбоку, подсказка ряда — сверху: иначе она закрывает соседа. */\nexport function speedMenuTooltipSide(direction: IRtSpeedMenu.Direction): IRtTooltip.Placement {\n return direction === 'up' || direction === 'down' ? 'left' : 'top';\n}\n\n/**\n * Куда клавиша переводит фокус среди доступных действий: стрелки идут по кругу, Home и End берут\n * крайние. `null` — клавиша не про переход.\n */\nexport function speedMenuNextIndex(key: string, current: number, count: number): number | null {\n if (count === 0) {\n return null;\n }\n\n switch (key) {\n case 'ArrowDown':\n case 'ArrowRight':\n return (current + 1) % count;\n case 'ArrowUp':\n case 'ArrowLeft':\n return (current - 1 + count) % count;\n case 'Home':\n return 0;\n case 'End':\n return count - 1;\n default:\n return null;\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { IRtIconButton, RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';\nimport { RtPopoverDirective } from '@rt-tools/ui-kit-v2/popover';\nimport { IRtTooltip, RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { speedMenuActionSize, speedMenuNextIndex, speedMenuPositions, speedMenuTooltipSide } from './rt-speed-menu.logic';\nimport { IRtSpeedMenu } from './rt-speed-menu.model';\n\nconst BEM_BLOCK: string = 'rt-speed-menu';\n\n/** Кнопки действий, которые можно нажать: недоступная кнопка кита несёт нативный `disabled`. */\nconst AVAILABLE_ACTION: string = '.rt-speed-menu__action .rt-icon-button:not(:disabled)';\n\n/**\n * Быстрое меню: круглая кнопка, которая раскрывает рядом несколько круглых кнопок действий. Действия\n * лежат в плавающей панели кита (`rtPopover`) на стороне направления, у края экрана — на\n * противоположной; Escape и нажатие снаружи закрывают меню.\n *\n * Выбор отдаётся выходом `actionSelect`, и меню остаётся открытым: приложение нажимает действие\n * несколько раз подряд. Закрытие на выборе — вход `closeOnSelect`.\n */\n@Component({\n selector: 'rt-speed-menu',\n templateUrl: './rt-speed-menu.component.html',\n styleUrl: './rt-speed-menu.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [BlockDirective, ElemDirective, ModDirective, RtIconButtonComponent, RtPopoverDirective, RtTooltipDirective],\n host: {\n class: BEM_BLOCK,\n '[class.rt-speed-menu--open]': 'isOpen()',\n },\n})\nexport class RtSpeedMenuComponent {\n readonly #host: ElementRef<HTMLElement> = inject(ElementRef);\n readonly #injector: Injector = inject(Injector);\n\n readonly #t_uiActions: Signal<string> = rtKitLabel('uiActions');\n\n protected readonly popover: Signal<RtPopoverDirective | undefined> = viewChild(RtPopoverDirective);\n\n protected readonly panel: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('panel');\n\n protected readonly isOpen: Signal<boolean> = computed((): boolean => this.popover()?.isOpen() ?? false);\n\n /** Своё имя кнопки важнее умолчания: приложение знает, что за действия в меню. */\n protected readonly triggerLabel: Signal<string> = computed((): string => this.label() || this.#t_uiActions());\n\n protected readonly positions: Signal<readonly ConnectedPosition[]> = computed((): readonly ConnectedPosition[] =>\n speedMenuPositions(this.direction())\n );\n\n protected readonly actionSize: Signal<IRtIconButton.Size> = computed((): IRtIconButton.Size => speedMenuActionSize(this.size()));\n\n protected readonly tooltipSide: Signal<IRtTooltip.Placement> = computed((): IRtTooltip.Placement =>\n speedMenuTooltipSide(this.direction())\n );\n\n /** Действия меню в порядке чтения: сверху вниз в столбце, от начала к концу в ряду. */\n public readonly actions: InputSignal<readonly IRtSpeedMenu.Action[]> = input.required<readonly IRtSpeedMenu.Action[]>();\n\n /** Значок кнопки меню: имя кита или Material. Открытая кнопка показывает крест. */\n public readonly icon: InputSignal<string> = input<string>('menu');\n\n /** Доступное имя кнопки меню. Пусто — подпись кита «Действия». */\n public readonly label: InputSignal<string> = input<string>('');\n\n /** Сторона, на которую раскрываются действия. */\n public readonly direction: InputSignal<IRtSpeedMenu.Direction> = input<IRtSpeedMenu.Direction>('up');\n\n /** Размер кнопки меню; действия на шаг меньше. */\n public readonly size: InputSignal<IRtSpeedMenu.Size> = input<IRtSpeedMenu.Size>('lg');\n\n /** Палитра кнопки меню. */\n public readonly variant: InputSignal<IRtSpeedMenu.Variant> = input<IRtSpeedMenu.Variant>('primary');\n\n /** Закрывать меню после выбора действия; фокус возвращается на кнопку меню. */\n public readonly closeOnSelect: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Недоступное меню не открывается, а открытое закрывается. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Выбор действия — его `value`. */\n public readonly actionSelect: OutputEmitterRef<string> = output<string>();\n\n /** Меню открылось (`true`) или закрылось (`false`). */\n public readonly openChange: OutputEmitterRef<boolean> = output<boolean>();\n\n constructor() {\n effect((): void => {\n if (this.disabled()) {\n this.popover()?.close();\n }\n });\n }\n\n protected onTrigger(event: MouseEvent): void {\n if (this.isOpen()) {\n this.popover()?.close();\n return;\n }\n if (this.actions().length === 0) {\n return;\n }\n this.popover()?.open();\n // Нажатие с клавиатуры приходит без счёта щелчков: такого человека панель встречает фокусом\n // на первом действии — она лежит в конце страницы, и Tab до неё не дошёл бы.\n if (event.detail === 0) {\n afterNextRender((): void => this.#focusAction(0), { injector: this.#injector });\n }\n }\n\n protected onAction(action: IRtSpeedMenu.Action): void {\n if (action.disabled) {\n return;\n }\n this.actionSelect.emit(action.value);\n if (this.closeOnSelect()) {\n this.#closeToTrigger();\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' || event.key === 'Tab') {\n event.preventDefault();\n this.#closeToTrigger();\n return;\n }\n const buttons: HTMLElement[] = this.#availableActions();\n // Клавишу ловит кнопка в фокусе, и место в ряду меряется по ней\n const current: number = buttons.findIndex((button: HTMLElement): boolean => button === event.target);\n const next: number | null = speedMenuNextIndex(event.key, current, buttons.length);\n if (next === null) {\n return;\n }\n event.preventDefault();\n buttons[next]?.focus();\n }\n\n protected onOpened(): void {\n this.openChange.emit(true);\n }\n\n protected onClosed(): void {\n this.openChange.emit(false);\n }\n\n #closeToTrigger(): void {\n this.popover()?.close();\n this.#host.nativeElement.querySelector<HTMLElement>('.rt-speed-menu__trigger .rt-icon-button')?.focus();\n }\n\n #focusAction(index: number): void {\n this.#availableActions()[index]?.focus();\n }\n\n #availableActions(): HTMLElement[] {\n const panel: HTMLElement | undefined = this.panel()?.nativeElement;\n return panel ? Array.from(panel.querySelectorAll<HTMLElement>(AVAILABLE_ACTION)) : [];\n }\n}\n","<ng-container rtBlock=\"rt-speed-menu\">\n <!-- Панель висит на кнопке меню: по ней она встаёт и её нажатие не считает нажатием снаружи.\n Открывает и закрывает её сама кнопка — триггер панели ручной. -->\n <rt-icon-button\n rtElem=\"trigger\"\n qa-dataid=\"speed-menu-trigger\"\n radius=\"full\"\n rtPopoverTrigger=\"manual\"\n rtPopoverPanelClass=\"rt-speed-menu-pane\"\n [rtPopover]=\"panelTpl\"\n [rtPopoverPositions]=\"positions()\"\n [glyph]=\"isOpen() ? 'close' : icon()\"\n [ariaLabel]=\"triggerLabel()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [expanded]=\"isOpen()\"\n (rtPopoverOpened)=\"onOpened()\"\n (rtPopoverClosed)=\"onClosed()\"\n (clicked)=\"onTrigger($event)\" />\n\n <ng-template #panelTpl>\n <div\n #panel\n rtElem=\"panel\"\n role=\"group\"\n qa-dataid=\"speed-menu-panel\"\n [rtMod]=\"direction()\"\n [attr.aria-label]=\"triggerLabel()\"\n (keydown)=\"onPanelKeydown($event)\">\n @for (action of actions(); track action.value) {\n <rt-icon-button\n rtElem=\"action\"\n qa-dataid=\"speed-menu-action\"\n radius=\"full\"\n variant=\"secondary\"\n [rtTooltip]=\"action.label\"\n [rtTooltipPlacement]=\"tooltipSide()\"\n [glyph]=\"action.icon\"\n [ariaLabel]=\"action.label\"\n [size]=\"actionSize()\"\n [disabled]=\"action.disabled ?? false\"\n [attr.data-value]=\"action.value\"\n (clicked)=\"onAction(action)\" />\n }\n </div>\n </ng-template>\n</ng-container>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-speed-menu.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/speed-menu/rt-speed-menu.logic.ts","../../../projects/ui-kit-v2/src/lib/components/speed-menu/rt-speed-menu.component.ts","../../../projects/ui-kit-v2/src/lib/components/speed-menu/rt-speed-menu.component.html"],"sourcesContent":["import { ConnectedPosition } from '@angular/cdk/overlay';\n\nimport { IRtIconButton } from '@rt-tools/ui-kit-v2/icon-button';\nimport { IRtTooltip } from '@rt-tools/ui-kit-v2/tooltip';\nimport { IRtSpeedMenu } from './rt-speed-menu.model';\n\nconst UP: ConnectedPosition = { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' };\nconst DOWN: ConnectedPosition = { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' };\nconst START: ConnectedPosition = { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' };\nconst END: ConnectedPosition = { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' };\n\nconst POSITIONS: Record<IRtSpeedMenu.Direction, readonly ConnectedPosition[]> = {\n up: [UP, DOWN],\n down: [DOWN, UP],\n start: [START, END],\n end: [END, START],\n};\n\nconst ACTION_SIZE: Record<IRtSpeedMenu.Size, IRtIconButton.Size> = {\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n xl: 'lg',\n};\n\n/** Места панели вокруг кнопки: сторона направления, а у края экрана — противоположная. */\nexport function speedMenuPositions(direction: IRtSpeedMenu.Direction): readonly ConnectedPosition[] {\n return POSITIONS[direction];\n}\n\n/** Размер кнопок действий — на шаг меньше кнопки меню. */\nexport function speedMenuActionSize(size: IRtSpeedMenu.Size): IRtIconButton.Size {\n return ACTION_SIZE[size];\n}\n\n/** Подсказка столбца действий встаёт сбоку, подсказка ряда — сверху: иначе она закрывает соседа. */\nexport function speedMenuTooltipSide(direction: IRtSpeedMenu.Direction): IRtTooltip.Placement {\n return direction === 'up' || direction === 'down' ? 'left' : 'top';\n}\n\n/**\n * Куда клавиша переводит фокус среди доступных действий: стрелки идут по кругу, Home и End берут\n * крайние. `null` — клавиша не про переход.\n */\nexport function speedMenuNextIndex(key: string, current: number, count: number): number | null {\n if (count === 0) {\n return null;\n }\n\n switch (key) {\n case 'ArrowDown':\n case 'ArrowRight':\n return (current + 1) % count;\n case 'ArrowUp':\n case 'ArrowLeft':\n return (current - 1 + count) % count;\n case 'Home':\n return 0;\n case 'End':\n return count - 1;\n default:\n return null;\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { IRtIconButton, RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';\nimport { RtPopoverDirective } from '@rt-tools/ui-kit-v2/popover';\nimport { IRtTooltip, RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { speedMenuActionSize, speedMenuNextIndex, speedMenuPositions, speedMenuTooltipSide } from './rt-speed-menu.logic';\nimport { IRtSpeedMenu } from './rt-speed-menu.model';\n\nconst BEM_BLOCK: string = 'rt-speed-menu';\n\n/** Кнопки действий, которые можно нажать: недоступная кнопка кита несёт нативный `disabled`. */\nconst AVAILABLE_ACTION: string = '.rt-speed-menu__action .rt-icon-button:not(:disabled)';\n\n/**\n * Быстрое меню: круглая кнопка, которая раскрывает рядом несколько круглых кнопок действий. Действия\n * лежат в плавающей панели кита (`rtPopover`) на стороне направления, у края экрана — на\n * противоположной; Escape и нажатие снаружи закрывают меню.\n *\n * Выбор отдаётся выходом `actionSelect`, и меню остаётся открытым: приложение нажимает действие\n * несколько раз подряд. Закрытие на выборе — вход `closeOnSelect`.\n */\n@Component({\n selector: 'rt-speed-menu',\n templateUrl: './rt-speed-menu.component.html',\n styleUrl: './rt-speed-menu.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [BlockDirective, ElemDirective, ModDirective, RtIconButtonComponent, RtPopoverDirective, RtTooltipDirective],\n host: {\n class: BEM_BLOCK,\n '[class.rt-speed-menu--open]': 'isOpen()',\n },\n})\nexport class RtSpeedMenuComponent {\n readonly #host: ElementRef<HTMLElement> = inject(ElementRef);\n readonly #injector: Injector = inject(Injector);\n\n readonly #t_uiActions: Signal<string> = rtKitLabel('uiActions');\n\n protected readonly popover: Signal<RtPopoverDirective | undefined> = viewChild(RtPopoverDirective);\n\n protected readonly panel: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('panel');\n\n protected readonly isOpen: Signal<boolean> = computed((): boolean => this.popover()?.isOpen() ?? false);\n\n /** Своё имя кнопки важнее умолчания: приложение знает, что за действия в меню. */\n protected readonly triggerLabel: Signal<string> = computed((): string => this.label() || this.#t_uiActions());\n\n protected readonly positions: Signal<readonly ConnectedPosition[]> = computed((): readonly ConnectedPosition[] =>\n speedMenuPositions(this.direction())\n );\n\n protected readonly actionSize: Signal<IRtIconButton.Size> = computed((): IRtIconButton.Size => speedMenuActionSize(this.size()));\n\n protected readonly tooltipSide: Signal<IRtTooltip.Placement> = computed((): IRtTooltip.Placement =>\n speedMenuTooltipSide(this.direction())\n );\n\n /** Действия меню в порядке чтения: сверху вниз в столбце, от начала к концу в ряду. */\n public readonly actions: InputSignal<readonly IRtSpeedMenu.Action[]> = input.required<readonly IRtSpeedMenu.Action[]>();\n\n /** Значок кнопки меню: имя кита или Material. Открытая кнопка показывает крест. */\n public readonly icon: InputSignal<string> = input<string>('menu');\n\n /** Доступное имя кнопки меню. Пусто — подпись кита «Действия». */\n public readonly label: InputSignal<string> = input<string>('');\n\n /** Сторона, на которую раскрываются действия. */\n public readonly direction: InputSignal<IRtSpeedMenu.Direction> = input<IRtSpeedMenu.Direction>('up');\n\n /** Размер кнопки меню; действия на шаг меньше. */\n public readonly size: InputSignal<IRtSpeedMenu.Size> = input<IRtSpeedMenu.Size>('lg');\n\n /** Палитра кнопки меню. */\n public readonly variant: InputSignal<IRtSpeedMenu.Variant> = input<IRtSpeedMenu.Variant>('primary');\n\n /** Закрывать меню после выбора действия; фокус возвращается на кнопку меню. */\n public readonly closeOnSelect: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Недоступное меню не открывается, а открытое закрывается. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Выбор действия — его `value`. */\n public readonly actionSelect: OutputEmitterRef<string> = output<string>();\n\n /** Меню открылось (`true`) или закрылось (`false`). */\n public readonly openChange: OutputEmitterRef<boolean> = output<boolean>();\n\n constructor() {\n effect((): void => {\n if (this.disabled()) {\n this.popover()?.close();\n }\n });\n }\n\n protected onTrigger(event: MouseEvent): void {\n if (this.isOpen()) {\n this.popover()?.close();\n return;\n }\n if (this.actions().length === 0) {\n return;\n }\n this.popover()?.open();\n // Нажатие с клавиатуры приходит без счёта щелчков: такого человека панель встречает фокусом\n // на первом действии — она лежит в конце страницы, и Tab до неё не дошёл бы.\n if (event.detail === 0) {\n afterNextRender((): void => this.#focusAction(0), { injector: this.#injector });\n }\n }\n\n protected onAction(action: IRtSpeedMenu.Action): void {\n if (action.disabled) {\n return;\n }\n this.actionSelect.emit(action.value);\n if (this.closeOnSelect()) {\n this.#closeToTrigger();\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' || event.key === 'Tab') {\n event.preventDefault();\n this.#closeToTrigger();\n return;\n }\n const buttons: HTMLElement[] = this.#availableActions();\n // Клавишу ловит кнопка в фокусе, и место в ряду меряется по ней\n const current: number = buttons.findIndex((button: HTMLElement): boolean => button === event.target);\n const next: number | null = speedMenuNextIndex(event.key, current, buttons.length);\n if (next === null) {\n return;\n }\n event.preventDefault();\n buttons[next]?.focus();\n }\n\n protected onOpened(): void {\n this.openChange.emit(true);\n }\n\n protected onClosed(): void {\n this.openChange.emit(false);\n }\n\n #closeToTrigger(): void {\n this.popover()?.close();\n this.#host.nativeElement.querySelector<HTMLElement>('.rt-speed-menu__trigger .rt-icon-button')?.focus();\n }\n\n #focusAction(index: number): void {\n this.#availableActions()[index]?.focus();\n }\n\n #availableActions(): HTMLElement[] {\n const panel: HTMLElement | undefined = this.panel()?.nativeElement;\n return panel ? Array.from(panel.querySelectorAll<HTMLElement>(AVAILABLE_ACTION)) : [];\n }\n}\n","<ng-container rtBlock=\"rt-speed-menu\">\n <!-- Панель висит на кнопке меню: по ней она встаёт и её нажатие не считает нажатием снаружи.\n Открывает и закрывает её сама кнопка — триггер панели ручной. -->\n <rt-icon-button\n rtElem=\"trigger\"\n qa-dataid=\"speed-menu-trigger\"\n radius=\"full\"\n rtPopoverTrigger=\"manual\"\n rtPopoverPanelClass=\"rt-speed-menu-pane\"\n [rtPopover]=\"panelTpl\"\n [rtPopoverPositions]=\"positions()\"\n [glyph]=\"isOpen() ? 'close' : icon()\"\n [ariaLabel]=\"triggerLabel()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [expanded]=\"isOpen()\"\n (rtPopoverOpened)=\"onOpened()\"\n (rtPopoverClosed)=\"onClosed()\"\n (clicked)=\"onTrigger($event)\" />\n\n <ng-template #panelTpl>\n <div\n #panel\n rtElem=\"panel\"\n role=\"group\"\n qa-dataid=\"speed-menu-panel\"\n [rtMod]=\"direction()\"\n [attr.aria-label]=\"triggerLabel()\"\n (keydown)=\"onPanelKeydown($event)\">\n @for (action of actions(); track action.value) {\n <rt-icon-button\n rtElem=\"action\"\n qa-dataid=\"speed-menu-action\"\n radius=\"full\"\n variant=\"secondary\"\n [rtTooltip]=\"action.label\"\n [rtTooltipPlacement]=\"tooltipSide()\"\n [glyph]=\"action.icon\"\n [ariaLabel]=\"action.label\"\n [size]=\"actionSize()\"\n [disabled]=\"action.disabled ?? false\"\n [attr.data-value]=\"action.value\"\n (clicked)=\"onAction(action)\" />\n }\n </div>\n </ng-template>\n</ng-container>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-split-button.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/split-button/rt-split-button.component.ts","../../../projects/ui-kit-v2/src/lib/components/split-button/rt-split-button.component.html"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtPopoverDirective } from '@rt-tools/ui-kit-v2/popover';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { IRtSplitButton } from './rt-split-button.model';\n\nconst BEM_BLOCK: string = 'rt-split-button';\n\n/**\n * Кнопка с раздельным действием: основной CTA («лицо») + каретка, по клику на\n * которую раскрывается меню второстепенных действий. Применяется, когда у\n * сценария ДВА позитивных действия и нужно явно выделить главное, не пряча\n * второстепенное (например, футер формы: лицо «Сохранить», в меню\n * «Сохранить черновик»).\n *\n * Меню — поверх `[rtPopover]` (CDK Overlay): авто-flip у края, outside-click и\n * Escape закрывают, не режется `overflow: hidden` предками (футер aside'а).\n * Лицо и каретка — две `[rtButton]`, визуально сшитые в один контрол.\n *\n * `ViewEncapsulation.None` — стили префиксованы `.rt-split-button`.\n */\n@Component({\n selector: 'rt-split-button',\n templateUrl: './rt-split-button.component.html',\n styleUrl: './rt-split-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [RtButtonDirective, RtPopoverDirective, BlockDirective, ElemDirective],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n '[class.rt-split-button--open]': 'menu()?.isOpen()',\n },\n})\nexport class RtSplitButtonComponent {\n readonly #t_uiMoreActions: Signal<string> = rtKitLabel('uiMoreActions');\n\n protected readonly menu: Signal<RtPopoverDirective | undefined> = viewChild(RtPopoverDirective);\n\n /** Своё имя каретки важнее умолчания: экран знает, что за действия в меню */\n protected readonly menuAriaText: Signal<string> = computed((): string => this.menuAriaLabel() || this.#t_uiMoreActions());\n\n /** Подпись основного действия («лицо»). */\n public readonly label: InputSignal<string> = input.required<string>();\n\n /** Пункты выпадающего меню второстепенных действий. */\n public readonly menuItems: InputSignal<readonly IRtSplitButton.MenuItem[]> = input.required<readonly IRtSplitButton.MenuItem[]>();\n\n /** Семантическая палитра лица и каретки. */\n public readonly theme: InputSignal<IRtSplitButton.Theme> = input<IRtSplitButton.Theme>('primary');\n\n /** Размер контрола. */\n public readonly size: InputSignal<IRtSplitButton.Size> = input<IRtSplitButton.Size>('md');\n\n /** Доступное имя для каретки (icon-only кнопка открытия меню). */\n public readonly menuAriaLabel: InputSignal<string> = input<string>('');\n\n /** Загрузка: спиннер на лице + блокировка обеих кнопок. */\n public readonly loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Нативное отключение обеих кнопок. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Клик по лицу (основное действие). */\n public readonly faceClick: OutputEmitterRef<void> = output<void>();\n\n /** Выбор пункта меню — эмитит `value` выбранного пункта. */\n public readonly itemSelect: OutputEmitterRef<string> = output<string>();\n\n protected onFace(): void {\n if (this.disabled() || this.loading()) {\n return;\n }\n this.faceClick.emit();\n }\n\n protected onToggle(): void {\n if (this.disabled() || this.loading()) {\n return;\n }\n this.menu()?.toggle();\n }\n\n protected onItem(item: IRtSplitButton.MenuItem): void {\n if (item.disabled) {\n return;\n }\n this.menu()?.close();\n this.itemSelect.emit(item.value);\n }\n}\n","<ng-container rtBlock=\"rt-split-button\">\n <!-- Popover висит на всём контроле (а не на узкой каретке): width=\"trigger\"\n делает меню по ширине кнопки, originX:start — ровно под её левым краем,\n без горизонтального вылета за экран. Триггер manual — открывает каретка. -->\n <div\n rtElem=\"control\"\n rtPopoverTrigger=\"manual\"\n rtPopoverWidth=\"trigger\"\n rtPopoverPanelClass=\"rt-split-button-menu-panel\"\n [rtPopover]=\"menuTpl\"\n [rtPopoverOffsetY]=\"6\"\n [rtPopoverDisabled]=\"disabled() || loading()\">\n <button\n rtButton\n rtElem=\"face\"\n qa-dataid=\"split-button-face\"\n type=\"button\"\n [label]=\"label()\"\n [theme]=\"theme()\"\n [size]=\"size()\"\n [attr.aria-label]=\"label()\"\n [loading]=\"loading()\"\n [disabled]=\"disabled()\"\n (click)=\"onFace()\"></button>\n\n <button\n rtButton\n rtElem=\"toggle\"\n qa-dataid=\"split-button-toggle\"\n type=\"button\"\n icon=\"chevron-down\"\n [theme]=\"theme()\"\n [size]=\"size()\"\n [attr.aria-label]=\"menuAriaText()\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onToggle()\"></button>\n </div>\n\n <ng-template #menuTpl>\n <ul rtElem=\"menu\" qa-dataid=\"split-button-menu\" role=\"menu\">\n @for (item of menuItems(); track item.value) {\n <li role=\"none\">\n <button\n rtButton\n rtElem=\"menu-item\"\n qa-dataid=\"split-button-menu-item\"\n type=\"button\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n role=\"menuitem\"\n [attr.data-value]=\"item.value\"\n [label]=\"item.label\"\n [icon]=\"item.icon ?? null\"\n [attr.aria-label]=\"item.label\"\n [disabled]=\"item.disabled ?? false\"\n (click)=\"onItem(item)\"></button>\n </li>\n }\n </ul>\n </ng-template>\n</ng-container>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-split-button.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/split-button/rt-split-button.component.ts","../../../projects/ui-kit-v2/src/lib/components/split-button/rt-split-button.component.html"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtPopoverDirective } from '@rt-tools/ui-kit-v2/popover';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { IRtSplitButton } from './rt-split-button.model';\n\nconst BEM_BLOCK: string = 'rt-split-button';\n\n/**\n * Кнопка с раздельным действием: основной CTA («лицо») + каретка, по клику на\n * которую раскрывается меню второстепенных действий. Применяется, когда у\n * сценария ДВА позитивных действия и нужно явно выделить главное, не пряча\n * второстепенное (например, футер формы: лицо «Сохранить», в меню\n * «Сохранить черновик»).\n *\n * Меню — поверх `[rtPopover]` (CDK Overlay): авто-flip у края, outside-click и\n * Escape закрывают, не режется `overflow: hidden` предками (футер aside'а).\n * Лицо и каретка — две `[rtButton]`, визуально сшитые в один контрол.\n *\n * `ViewEncapsulation.None` — стили префиксованы `.rt-split-button`.\n */\n@Component({\n selector: 'rt-split-button',\n templateUrl: './rt-split-button.component.html',\n styleUrl: './rt-split-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [RtButtonDirective, RtPopoverDirective, BlockDirective, ElemDirective],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n '[class.rt-split-button--open]': 'menu()?.isOpen()',\n },\n})\nexport class RtSplitButtonComponent {\n readonly #t_uiMoreActions: Signal<string> = rtKitLabel('uiMoreActions');\n\n protected readonly menu: Signal<RtPopoverDirective | undefined> = viewChild(RtPopoverDirective);\n\n /** Своё имя каретки важнее умолчания: экран знает, что за действия в меню */\n protected readonly menuAriaText: Signal<string> = computed((): string => this.menuAriaLabel() || this.#t_uiMoreActions());\n\n /** Подпись основного действия («лицо»). */\n public readonly label: InputSignal<string> = input.required<string>();\n\n /** Пункты выпадающего меню второстепенных действий. */\n public readonly menuItems: InputSignal<readonly IRtSplitButton.MenuItem[]> = input.required<readonly IRtSplitButton.MenuItem[]>();\n\n /** Семантическая палитра лица и каретки. */\n public readonly theme: InputSignal<IRtSplitButton.Theme> = input<IRtSplitButton.Theme>('primary');\n\n /** Размер контрола. */\n public readonly size: InputSignal<IRtSplitButton.Size> = input<IRtSplitButton.Size>('md');\n\n /** Доступное имя для каретки (icon-only кнопка открытия меню). */\n public readonly menuAriaLabel: InputSignal<string> = input<string>('');\n\n /** Загрузка: спиннер на лице + блокировка обеих кнопок. */\n public readonly loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Нативное отключение обеих кнопок. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Клик по лицу (основное действие). */\n public readonly faceClick: OutputEmitterRef<void> = output<void>();\n\n /** Выбор пункта меню — эмитит `value` выбранного пункта. */\n public readonly itemSelect: OutputEmitterRef<string> = output<string>();\n\n protected onFace(): void {\n if (this.disabled() || this.loading()) {\n return;\n }\n this.faceClick.emit();\n }\n\n protected onToggle(): void {\n if (this.disabled() || this.loading()) {\n return;\n }\n this.menu()?.toggle();\n }\n\n protected onItem(item: IRtSplitButton.MenuItem): void {\n if (item.disabled) {\n return;\n }\n this.menu()?.close();\n this.itemSelect.emit(item.value);\n }\n}\n","<ng-container rtBlock=\"rt-split-button\">\n <!-- Popover висит на всём контроле (а не на узкой каретке): width=\"trigger\"\n делает меню по ширине кнопки, originX:start — ровно под её левым краем,\n без горизонтального вылета за экран. Триггер manual — открывает каретка. -->\n <div\n rtElem=\"control\"\n rtPopoverTrigger=\"manual\"\n rtPopoverWidth=\"trigger\"\n rtPopoverPanelClass=\"rt-split-button-menu-panel\"\n [rtPopover]=\"menuTpl\"\n [rtPopoverOffsetY]=\"6\"\n [rtPopoverDisabled]=\"disabled() || loading()\">\n <button\n rtButton\n rtElem=\"face\"\n qa-dataid=\"split-button-face\"\n type=\"button\"\n [label]=\"label()\"\n [theme]=\"theme()\"\n [size]=\"size()\"\n [attr.aria-label]=\"label()\"\n [loading]=\"loading()\"\n [disabled]=\"disabled()\"\n (click)=\"onFace()\"></button>\n\n <button\n rtButton\n rtElem=\"toggle\"\n qa-dataid=\"split-button-toggle\"\n type=\"button\"\n icon=\"chevron-down\"\n [theme]=\"theme()\"\n [size]=\"size()\"\n [attr.aria-label]=\"menuAriaText()\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"onToggle()\"></button>\n </div>\n\n <ng-template #menuTpl>\n <ul rtElem=\"menu\" qa-dataid=\"split-button-menu\" role=\"menu\">\n @for (item of menuItems(); track item.value) {\n <li role=\"none\">\n <button\n rtButton\n rtElem=\"menu-item\"\n qa-dataid=\"split-button-menu-item\"\n type=\"button\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n role=\"menuitem\"\n [attr.data-value]=\"item.value\"\n [label]=\"item.label\"\n [icon]=\"item.icon ?? null\"\n [attr.aria-label]=\"item.label\"\n [disabled]=\"item.disabled ?? false\"\n (click)=\"onItem(item)\"></button>\n </li>\n }\n </ul>\n </ng-template>\n</ng-container>\n"],"mappings":"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"}
|
|
@@ -187,7 +187,8 @@ var RtCopyCellComponent = class RtCopyCellComponent {
|
|
|
187
187
|
"rtTooltipPlacement",
|
|
188
188
|
"rtTooltipShowDelay",
|
|
189
189
|
"rtTooltipWhenTruncated",
|
|
190
|
-
"rtTooltipHideOnClick"
|
|
190
|
+
"rtTooltipHideOnClick",
|
|
191
|
+
"rtTooltipShowOnTap"
|
|
191
192
|
],
|
|
192
193
|
exportAs: ["rtTooltip"]
|
|
193
194
|
}
|
|
@@ -657,6 +658,7 @@ var RtTableFilterHeaderComponent = class RtTableFilterHeaderComponent {
|
|
|
657
658
|
"rtPopoverFitViewport",
|
|
658
659
|
"rtPopoverContext",
|
|
659
660
|
"rtPopoverPanelClass",
|
|
661
|
+
"rtPopoverBackdropClass",
|
|
660
662
|
"rtPopoverDisabled",
|
|
661
663
|
"rtPopoverOffsetY",
|
|
662
664
|
"rtPopoverOffsetX",
|