@rt-tools/ui-kit-v2 0.35.0 → 0.35.1

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.
Files changed (57) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +2 -1
  2. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +2 -1
  4. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +4 -2
  6. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +2 -1
  8. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +4 -2
  10. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +2 -1
  12. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +2 -1
  14. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +2 -1
  16. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +2 -1
  18. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
  19. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +2 -1
  20. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +2 -1
  22. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
  23. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +4 -2
  24. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
  25. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +20 -4
  26. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  27. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +2 -1
  28. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
  29. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +4 -2
  30. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
  31. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +2 -1
  32. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
  33. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2 -1
  34. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  35. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +2 -1
  36. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  37. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +2 -1
  38. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
  39. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +52 -5
  40. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  41. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +2 -1
  42. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
  43. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +37 -0
  44. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
  45. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +2 -1
  46. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
  47. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +2 -1
  48. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
  49. package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs +4 -3
  50. package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs.map +1 -1
  51. package/package.json +1 -1
  52. package/src/lib/components/thread-list/rt-thread-list.component.scss +7 -0
  53. package/src/lib/components/tooltip/CONTEXT.md +4 -0
  54. package/src/rich-editor/lib/components/chat/rt-chat.component.scss +25 -0
  55. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +7 -0
  56. package/types/rt-tools-ui-kit-v2-thread-list.d.ts +7 -1
  57. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +12 -0
@@ -180,7 +180,8 @@ var RtAiRunStatusComponent = class RtAiRunStatusComponent {
180
180
  "rtTooltipPlacement",
181
181
  "rtTooltipShowDelay",
182
182
  "rtTooltipWhenTruncated",
183
- "rtTooltipHideOnClick"
183
+ "rtTooltipHideOnClick",
184
+ "rtTooltipShowOnTap"
184
185
  ],
185
186
  exportAs: ["rtTooltip"]
186
187
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-ai-run-status.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-ai-run-status.component.ts","../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-ai-run-status.component.html"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n InputSignal,\n model,\n ModelSignal,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { IRtIcon, rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtSpinnerComponent } from '@rt-tools/ui-kit-v2/spinner';\nimport { IRtTimeline, RtTimelineComponent } from '@rt-tools/ui-kit-v2/timeline';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\n\nimport { IRtAiRunStatus } from './rt-ai-run-status.model';\n\nconst BEM_BLOCK: string = 'rt-ai-run-status';\n\n/** Значок и его цвет по состоянию; у `running` значка нет — на его месте крутилка. */\nconst MARKS: Readonly<Record<Exclude<IRtAiRunStatus.State, 'running'>, { name: IRtIcon.Name; color: IRtIcon.Color }>> = {\n done: { name: 'check-circle', color: 'success' },\n stopped: { name: 'times-circle', color: 'muted' },\n failed: { name: 'exclamation-circle', color: 'danger' },\n};\n\nlet runStatusIdSeed: number = 0;\n\nfunction nextRunStatusId(): number {\n runStatusIdSeed += 1;\n return runStatusIdSeed;\n}\n\n/**\n * Строка хода работы ИИ-ассистента: значок состояния, подпись текущего шага или итога, мета\n * (время, число шагов) и раскрытие списка пройденных шагов. Пока модель работает, по подписи\n * бежит блик; при `prefers-reduced-motion` подпись стоит ровным цветом.\n *\n * Компонент презентационный: состояние, подпись и шаги приходят готовыми, разбор потока\n * событий модели остаётся в приложении.\n */\n@Component({\n selector: 'rt-ai-run-status',\n templateUrl: './rt-ai-run-status.component.html',\n styleUrl: './rt-ai-run-status.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // angular\n NgTemplateOutlet,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtIconComponent,\n RtSpinnerComponent,\n RtTimelineComponent,\n RtTooltipDirective,\n ],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtAiRunStatusComponent {\n readonly #t_aiShowSteps: Signal<string> = rtKitLabel('aiShowSteps');\n readonly #t_aiHideSteps: Signal<string> = rtKitLabel('aiHideSteps');\n\n protected readonly stepsId: string = `rt-ai-run-status-steps-${nextRunStatusId()}`;\n\n protected readonly hasSteps: Signal<boolean> = computed((): boolean => this.steps().length > 0);\n\n protected readonly isOpen: Signal<boolean> = computed((): boolean => this.hasSteps() && this.expanded());\n\n protected readonly mark: Signal<{ name: IRtIcon.Name; color: IRtIcon.Color } | null> = computed(\n (): { name: IRtIcon.Name; color: IRtIcon.Color } | null => {\n const state: IRtAiRunStatus.State = this.state();\n return state === 'running' ? null : MARKS[state];\n }\n );\n\n protected readonly toggleLabel: Signal<string> = computed((): string =>\n this.isOpen() ? this.#t_aiHideSteps() : this.#t_aiShowSteps()\n );\n\n public readonly state: InputSignal<IRtAiRunStatus.State> = input.required<IRtAiRunStatus.State>();\n\n /** Подпись: текущий шаг, пока модель работает, или итог — «Worked for 31s». */\n public readonly label: InputSignal<string> = input.required<string>();\n\n /** Вторичная строка справа от подписи: время шага или число шагов. Пусто — не рисуется. */\n public readonly meta: InputSignal<string> = input<string>('');\n\n /** Пройденные шаги. Пустой список — строку нельзя раскрыть. */\n public readonly steps: InputSignal<readonly IRtTimeline.Step[]> = input<readonly IRtTimeline.Step[]>([]);\n\n /** Раскрыт ли список шагов. */\n public readonly expanded: ModelSignal<boolean> = model<boolean>(false);\n\n protected onToggle(): void {\n this.expanded.set(!this.expanded());\n }\n}\n","<div rtBlock=\"rt-ai-run-status\" qa-dataid=\"ai-run-status\" [attr.data-state]=\"state()\" [rtMod]=\"{ state: state(), open: isOpen() }\">\n <ng-template #head>\n <span rtElem=\"mark\" aria-hidden=\"true\">\n @if (mark(); as m) {\n <rt-icon size=\"sm\" [name]=\"m.name\" [color]=\"m.color\" />\n } @else {\n <rt-spinner appearance=\"arc\" [diameter]=\"16\" />\n }\n </span>\n <span rtElem=\"label\" qa-dataid=\"ai-run-status-label\" [rtMod]=\"{ state: state() }\">{{ label() }}</span>\n @if (meta()) {\n <span rtElem=\"meta\" qa-dataid=\"ai-run-status-meta\">{{ meta() }}</span>\n }\n </ng-template>\n\n @if (hasSteps()) {\n <button\n rtElem=\"row\"\n type=\"button\"\n qa-dataid=\"ai-run-status-toggle\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"stepsId\"\n [rtTooltip]=\"toggleLabel()\"\n (click)=\"onToggle()\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n <rt-icon rtElem=\"chevron\" size=\"sm\" color=\"muted\" [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </button>\n } @else {\n <div rtElem=\"row\" role=\"status\" qa-dataid=\"ai-run-status-row\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n </div>\n }\n\n @if (isOpen()) {\n <rt-timeline rtElem=\"steps\" qa-dataid=\"ai-run-status-steps\" [id]=\"stepsId\" [steps]=\"steps()\" />\n }\n</div>\n"],"mappings":"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"}
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-ai-run-status.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-ai-run-status.component.ts","../../../projects/ui-kit-v2/src/lib/components/ai-run-status/rt-ai-run-status.component.html"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n InputSignal,\n model,\n ModelSignal,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { IRtIcon, rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtSpinnerComponent } from '@rt-tools/ui-kit-v2/spinner';\nimport { IRtTimeline, RtTimelineComponent } from '@rt-tools/ui-kit-v2/timeline';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\n\nimport { IRtAiRunStatus } from './rt-ai-run-status.model';\n\nconst BEM_BLOCK: string = 'rt-ai-run-status';\n\n/** Значок и его цвет по состоянию; у `running` значка нет — на его месте крутилка. */\nconst MARKS: Readonly<Record<Exclude<IRtAiRunStatus.State, 'running'>, { name: IRtIcon.Name; color: IRtIcon.Color }>> = {\n done: { name: 'check-circle', color: 'success' },\n stopped: { name: 'times-circle', color: 'muted' },\n failed: { name: 'exclamation-circle', color: 'danger' },\n};\n\nlet runStatusIdSeed: number = 0;\n\nfunction nextRunStatusId(): number {\n runStatusIdSeed += 1;\n return runStatusIdSeed;\n}\n\n/**\n * Строка хода работы ИИ-ассистента: значок состояния, подпись текущего шага или итога, мета\n * (время, число шагов) и раскрытие списка пройденных шагов. Пока модель работает, по подписи\n * бежит блик; при `prefers-reduced-motion` подпись стоит ровным цветом.\n *\n * Компонент презентационный: состояние, подпись и шаги приходят готовыми, разбор потока\n * событий модели остаётся в приложении.\n */\n@Component({\n selector: 'rt-ai-run-status',\n templateUrl: './rt-ai-run-status.component.html',\n styleUrl: './rt-ai-run-status.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // angular\n NgTemplateOutlet,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtIconComponent,\n RtSpinnerComponent,\n RtTimelineComponent,\n RtTooltipDirective,\n ],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtAiRunStatusComponent {\n readonly #t_aiShowSteps: Signal<string> = rtKitLabel('aiShowSteps');\n readonly #t_aiHideSteps: Signal<string> = rtKitLabel('aiHideSteps');\n\n protected readonly stepsId: string = `rt-ai-run-status-steps-${nextRunStatusId()}`;\n\n protected readonly hasSteps: Signal<boolean> = computed((): boolean => this.steps().length > 0);\n\n protected readonly isOpen: Signal<boolean> = computed((): boolean => this.hasSteps() && this.expanded());\n\n protected readonly mark: Signal<{ name: IRtIcon.Name; color: IRtIcon.Color } | null> = computed(\n (): { name: IRtIcon.Name; color: IRtIcon.Color } | null => {\n const state: IRtAiRunStatus.State = this.state();\n return state === 'running' ? null : MARKS[state];\n }\n );\n\n protected readonly toggleLabel: Signal<string> = computed((): string =>\n this.isOpen() ? this.#t_aiHideSteps() : this.#t_aiShowSteps()\n );\n\n public readonly state: InputSignal<IRtAiRunStatus.State> = input.required<IRtAiRunStatus.State>();\n\n /** Подпись: текущий шаг, пока модель работает, или итог — «Worked for 31s». */\n public readonly label: InputSignal<string> = input.required<string>();\n\n /** Вторичная строка справа от подписи: время шага или число шагов. Пусто — не рисуется. */\n public readonly meta: InputSignal<string> = input<string>('');\n\n /** Пройденные шаги. Пустой список — строку нельзя раскрыть. */\n public readonly steps: InputSignal<readonly IRtTimeline.Step[]> = input<readonly IRtTimeline.Step[]>([]);\n\n /** Раскрыт ли список шагов. */\n public readonly expanded: ModelSignal<boolean> = model<boolean>(false);\n\n protected onToggle(): void {\n this.expanded.set(!this.expanded());\n }\n}\n","<div rtBlock=\"rt-ai-run-status\" qa-dataid=\"ai-run-status\" [attr.data-state]=\"state()\" [rtMod]=\"{ state: state(), open: isOpen() }\">\n <ng-template #head>\n <span rtElem=\"mark\" aria-hidden=\"true\">\n @if (mark(); as m) {\n <rt-icon size=\"sm\" [name]=\"m.name\" [color]=\"m.color\" />\n } @else {\n <rt-spinner appearance=\"arc\" [diameter]=\"16\" />\n }\n </span>\n <span rtElem=\"label\" qa-dataid=\"ai-run-status-label\" [rtMod]=\"{ state: state() }\">{{ label() }}</span>\n @if (meta()) {\n <span rtElem=\"meta\" qa-dataid=\"ai-run-status-meta\">{{ meta() }}</span>\n }\n </ng-template>\n\n @if (hasSteps()) {\n <button\n rtElem=\"row\"\n type=\"button\"\n qa-dataid=\"ai-run-status-toggle\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"stepsId\"\n [rtTooltip]=\"toggleLabel()\"\n (click)=\"onToggle()\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n <rt-icon rtElem=\"chevron\" size=\"sm\" color=\"muted\" [name]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </button>\n } @else {\n <div rtElem=\"row\" role=\"status\" qa-dataid=\"ai-run-status-row\">\n <ng-container [ngTemplateOutlet]=\"head\" />\n </div>\n }\n\n @if (isOpen()) {\n <rt-timeline rtElem=\"steps\" qa-dataid=\"ai-run-status-steps\" [id]=\"stepsId\" [steps]=\"steps()\" />\n }\n</div>\n"],"mappings":"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"}
@@ -250,7 +250,8 @@ var RtBreadcrumbsComponent = class RtBreadcrumbsComponent {
250
250
  "rtTooltipPlacement",
251
251
  "rtTooltipShowDelay",
252
252
  "rtTooltipWhenTruncated",
253
- "rtTooltipHideOnClick"
253
+ "rtTooltipHideOnClick",
254
+ "rtTooltipShowOnTap"
254
255
  ],
255
256
  exportAs: ["rtTooltip"]
256
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-breadcrumbs.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/breadcrumbs/rt-breadcrumbs.logic.ts","../../../projects/ui-kit-v2/src/lib/components/breadcrumbs/rt-breadcrumbs.component.ts","../../../projects/ui-kit-v2/src/lib/components/breadcrumbs/rt-breadcrumbs.component.html"],"sourcesContent":["import { IRtBreadcrumbs } from './rt-breadcrumbs.model';\n\n/** С какого числа предков середина пути сворачивается на узком экране. */\nexport const RT_BREADCRUMBS_FOLD_FROM: number = 3;\n\n/**\n * Помещаются ли предки рядом с текущим звеном, урезанным до порога или до своей полной подписи,\n * если она короче. Тогда звено сжимается с многоточием и строка не едет; иначе строка встаёт в\n * конец, и предки уезжают влево.\n */\nexport function rtBreadcrumbsFits(room: number, ancestors: number, current: number, floor: number): boolean {\n return room - ancestors >= Math.min(current, floor);\n}\n\n/**\n * Раскладка предков. На узком экране длинный путь оставляет первого и последнего предка ссылками,\n * а середину отдаёт в меню; на широком и при коротком пути свёртки нет.\n */\nexport function rtBreadcrumbsFold(ancestors: readonly IRtBreadcrumbs.Crumb[], narrow: boolean): IRtBreadcrumbs.Fold {\n if (!narrow || ancestors.length < RT_BREADCRUMBS_FOLD_FROM) {\n return { head: ancestors, hidden: [], tail: [] };\n }\n\n return {\n head: ancestors.slice(0, 1),\n hidden: ancestors.slice(1, -1),\n tail: ancestors.slice(-1),\n };\n}\n","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n signal,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { BreakpointsService, rtKitLabel, TRtKitLabelParams } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtMenuComponent, RtMenuItemComponent } from '@rt-tools/ui-kit-v2/menu';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\n\nimport { rtBreadcrumbsFits, rtBreadcrumbsFold } from './rt-breadcrumbs.logic';\nimport { IRtBreadcrumbs } from './rt-breadcrumbs.model';\n\nconst BEM_BLOCK: string = 'rt-breadcrumbs';\n\n/**\n * Путь до открытой страницы: предки ссылками, текущее звено текстом.\n *\n * Цепочку отдаёт приложение: имя открытой записи приходит с ответом сервера, и знает его только\n * страница. Текущее звено рисуется в строке пути или заголовком строкой ниже — тогда рядом с ним\n * встаёт то, что страница спроецировала. На узком экране середина длинного пути уходит в меню.\n */\n@Component({\n selector: 'rt-breadcrumbs',\n templateUrl: './rt-breadcrumbs.component.html',\n styleUrl: './rt-breadcrumbs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // angular\n RouterLink,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtIconComponent,\n RtMenuComponent,\n RtMenuItemComponent,\n RtTooltipDirective,\n ],\n host: {\n class: BEM_BLOCK,\n role: 'navigation',\n '[attr.aria-label]': 'landmarkLabel()',\n '[class.rt-breadcrumbs--heading]': \"look() === 'heading'\",\n },\n})\nexport class RtBreadcrumbsComponent {\n #itemsWatch: ResizeObserver | null = null;\n\n readonly #narrow: Signal<boolean> = inject(BreakpointsService).narrow;\n\n readonly #ancestors: Signal<readonly IRtBreadcrumbs.Crumb[]> = computed((): readonly IRtBreadcrumbs.Crumb[] =>\n this.crumbs().slice(0, -1)\n );\n\n readonly #backParams: Signal<TRtKitLabelParams> = computed((): TRtKitLabelParams => ({ name: this.backCrumb()?.label ?? '' }));\n\n /** Строка звеньев: её прокрутку ставит в конец эффект после отрисовки. `#`-поле `viewChild` не принимает. */\n protected readonly list: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('list');\n\n /** Начало пути уехало влево за край строки. */\n protected readonly clipped: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Предки помещаются рядом с урезанным текущим звеном: звено сжимается, строка не едет. */\n protected readonly fitted: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly landmarkLabel: Signal<string> = rtKitLabel('breadcrumbsLabel');\n protected readonly foldLabel: Signal<string> = rtKitLabel('breadcrumbsHidden');\n protected readonly backLabel: Signal<string> = rtKitLabel('breadcrumbsBack', this.#backParams);\n\n protected readonly fold: Signal<IRtBreadcrumbs.Fold> = computed((): IRtBreadcrumbs.Fold =>\n rtBreadcrumbsFold(this.#ancestors(), this.#narrow())\n );\n\n protected readonly current: Signal<IRtBreadcrumbs.Crumb | null> = computed(\n (): IRtBreadcrumbs.Crumb | null => this.crumbs().at(-1) ?? null\n );\n\n /** Строка пути нужна, пока в ней есть что рисовать: у одного заголовка её нет. */\n protected readonly rowShown: Signal<boolean> = computed((): boolean => this.look() === 'inline' || this.#ancestors().length > 0);\n\n /** Куда ведёт кнопка «назад»: к последнему предку, а без предков кнопки нет. */\n protected readonly backCrumb: Signal<IRtBreadcrumbs.Crumb | null> = computed((): IRtBreadcrumbs.Crumb | null =>\n this.back() ? (this.#ancestors().at(-1) ?? null) : null\n );\n\n /** Путь от верха до открытой страницы; последнее звено — сама страница. */\n public readonly crumbs: InputSignal<readonly IRtBreadcrumbs.Crumb[]> = input.required<readonly IRtBreadcrumbs.Crumb[]>();\n\n /** Как рисуется текущее звено: в строке пути или заголовком строкой ниже. */\n public readonly look: InputSignal<IRtBreadcrumbs.Look> = input<IRtBreadcrumbs.Look>('inline');\n\n /** Кнопка «назад» перед путём; ведёт к последнему предку. */\n public readonly back: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Знак между звеньями. */\n public readonly separator: InputSignal<string> = input<string>('/');\n\n constructor() {\n // Длинный путь едет внутри своей строки, и видна должна быть открытая страница, а не верх\n // пути. Строка встаёт в конец при смене цепочки и при смене ширины звеньев: шрифт страницы\n // приходит позже первой отрисовки и раздвигает звенья уже после неё.\n afterRenderEffect((): void => {\n this.crumbs();\n this.fold();\n this.#watchItems();\n this.#scrollToEnd();\n });\n\n inject(DestroyRef).onDestroy((): void => this.#itemsWatch?.disconnect());\n }\n\n protected onListScroll(): void {\n const list: HTMLElement | undefined = this.list()?.nativeElement;\n this.clipped.set(list !== undefined && list.scrollLeft > 0);\n }\n\n #watchItems(): void {\n const list: HTMLElement | undefined = this.list()?.nativeElement;\n if (list === undefined || typeof ResizeObserver === 'undefined') {\n return;\n }\n this.#itemsWatch?.disconnect();\n this.#itemsWatch = new ResizeObserver((): void => this.#scrollToEnd());\n Array.from(list.children).forEach((item: Element): void => this.#itemsWatch?.observe(item));\n }\n\n #scrollToEnd(): void {\n const list: HTMLElement | undefined = this.list()?.nativeElement;\n if (list !== undefined) {\n this.fitted.set(this.#measureFit(list));\n list.scrollLeft = list.scrollWidth;\n this.clipped.set(list.scrollLeft > 0);\n }\n }\n\n /**\n * Ширина строки без внутренних полей, предки целиком и полная подпись текущего звена против\n * порога из свойства блока. Без текущего звена в строке сжимать нечего.\n */\n #measureFit(list: HTMLElement): boolean {\n const items: readonly Element[] = Array.from(list.children);\n const current: Element | null = items.at(-1)?.querySelector('.rt-breadcrumbs__current') ?? null;\n if (current === null) {\n return false;\n }\n const listStyle: CSSStyleDeclaration = getComputedStyle(list);\n const room: number = list.clientWidth - parseFloat(listStyle.paddingInlineStart) - parseFloat(listStyle.paddingInlineEnd);\n const ancestors: number = items\n .slice(0, -1)\n .reduce((sum: number, item: Element): number => sum + item.getBoundingClientRect().width, 0);\n const floor: number = parseFloat(listStyle.getPropertyValue('--rt-breadcrumbs-current-min')) || 0;\n\n return rtBreadcrumbsFits(room, ancestors, current.scrollWidth, floor);\n }\n}\n","<ng-container rtBlock=\"rt-breadcrumbs\">\n @if (rowShown()) {\n <div rtElem=\"row\">\n @if (backCrumb(); as backTo) {\n <a rtElem=\"back\" qa-dataid=\"breadcrumbs-back\" [routerLink]=\"backTo.link\" [attr.aria-label]=\"backLabel()\">\n <rt-icon name=\"arrow-left\" size=\"md\" />\n </a>\n }\n\n <ol\n #list\n rtElem=\"list\"\n qa-dataid=\"breadcrumbs-list\"\n [rtMod]=\"{ clipped: clipped(), fitted: fitted() }\"\n (scroll)=\"onListScroll()\">\n @for (crumb of fold().head; track $index) {\n <li rtElem=\"item\">\n <a rtElem=\"link\" qa-dataid=\"breadcrumbs-link\" [routerLink]=\"crumb.link\">{{ crumb.label }}</a>\n <span rtElem=\"separator\" aria-hidden=\"true\">{{ separator() }}</span>\n </li>\n }\n\n @if (fold().hidden.length) {\n <li rtElem=\"item\" qa-dataid=\"breadcrumbs-fold\">\n <span rtElem=\"fold\">\n <rt-menu size=\"sm\" align=\"start\" [ariaLabel]=\"foldLabel()\">\n @for (crumb of fold().hidden; track $index) {\n <rt-menu-item qa-dataid=\"breadcrumbs-fold-item\" [label]=\"crumb.label\" [link]=\"crumb.link ?? null\" />\n }\n </rt-menu>\n </span>\n <span rtElem=\"separator\" aria-hidden=\"true\">{{ separator() }}</span>\n </li>\n }\n\n @for (crumb of fold().tail; track $index) {\n <li rtElem=\"item\">\n <a rtElem=\"link\" qa-dataid=\"breadcrumbs-link\" [routerLink]=\"crumb.link\">{{ crumb.label }}</a>\n <span rtElem=\"separator\" aria-hidden=\"true\">{{ separator() }}</span>\n </li>\n }\n\n @if (look() === 'inline' && current(); as page) {\n <li rtElem=\"item\">\n <span\n rtElem=\"current\"\n qa-dataid=\"breadcrumbs-current\"\n aria-current=\"page\"\n rtTooltipWhenTruncated\n [rtTooltip]=\"page.label\">\n {{ page.label }}\n </span>\n </li>\n }\n </ol>\n </div>\n }\n\n @if (look() === 'heading' && current(); as page) {\n <div rtElem=\"heading\">\n <h1 rtElem=\"title\" qa-dataid=\"breadcrumbs-current\" aria-current=\"page\" rtTooltipWhenTruncated [rtTooltip]=\"page.label\">\n {{ page.label }}\n </h1>\n <ng-content />\n </div>\n }\n</ng-container>\n"],"mappings":";;;;;;;;AAGA,MAAa,2BAAmC;AAOhD,SAAgB,kBAAkB,MAAc,WAAmB,SAAiB,OAAa;CAC7F,OAAO,OAAO,aAAa,KAAK,IAAI,SAAS,KAAK;AACtD;AAMA,SAAgB,kBAAkB,WAA4C,QAAe;CACzF,IAAI,CAAC,UAAU,UAAU,SAAA,GACrB,OAAO;EAAE,MAAM;EAAW,QAAQ,CAAA;EAAI,MAAM,CAAA;CAAE;CAGlD,OAAO;EACH,MAAM,UAAU,MAAM,GAAG,CAAC;EAC1B,QAAQ,UAAU,MAAM,GAAG,EAAE;EAC7B,MAAM,UAAU,MAAM,EAAE;CAC3B;AACL;ACEA,MAAM,YAAoB;AAmC1B,IAAa,yBAAb,MAAa,uBAAsB;CAC/B;CAES;CAEA;CAIA;CA6CT,cAAA;EArDA,KAAA,cAAqC;EAE5B,KAAA,UAA2B,OAAO,kBAAkB,CAAC,CAAC;EAEtD,KAAA,aAAsD,eAC3D,KAAK,OAAM,CAAE,CAAC,MAAM,GAAG,EAAE,GAC5B,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAEQ,KAAA,cAAyC,gBAAmC,EAAE,MAAM,KAAK,UAAS,CAAE,EAAE,SAAS,GAAE,IAAI,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAG3G,KAAA,OAAoD,UAAmC,QAAO,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAG9F,KAAA,UAAmC,OAAgB,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAGzD,KAAA,SAAkC,OAAgB,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAExD,KAAA,gBAAgC,WAAW,kBAAkB;EAC7D,KAAA,YAA4B,WAAW,mBAAmB;EAC1D,KAAA,YAA4B,WAAW,mBAAmB,KAAK,WAAW;EAE1E,KAAA,OAAoC,eACnD,kBAAkB,KAAK,WAAU,GAAI,KAAK,QAAO,CAAE,GACtD,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAEkB,KAAA,UAA+C,eAC3B,KAAK,OAAM,CAAE,CAAC,GAAG,EAAE,KAAK,MAC9D,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAGkB,KAAA,WAA4B,eAAwB,KAAK,KAAI,MAAO,YAAY,KAAK,WAAU,CAAE,CAAC,SAAS,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAG7G,KAAA,YAAiD,eAChE,KAAK,KAAI,IAAM,KAAK,WAAU,CAAE,CAAC,GAAG,EAAE,KAAK,OAAQ,MACtD,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAGe,KAAA,SAAuD,MAAM,SAA2C,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAGxG,KAAA,OAAyC,MAA2B,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAG7E,KAAA,OAAmD,MAAwB,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,OAAA,+BAAA,CAAA;GAC5F,WAAW;EAAgB,CAAA;EAIf,KAAA,YAAiC,MAAc,KAAI,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAM/D,wBAA6B;GACzB,KAAK,OAAM;GACX,KAAK,KAAI;GACT,KAAK,YAAW;GAChB,KAAK,aAAY;EACrB,CAAC;EAED,OAAO,UAAU,CAAC,CAAC,gBAAsB,KAAK,aAAa,WAAU,CAAE;CAC3E;CAEU,eAAY;EAClB,MAAM,OAAgC,KAAK,KAAI,CAAE,EAAE;EACnD,KAAK,QAAQ,IAAI,SAAS,UAAa,KAAK,aAAa,CAAC;CAC9D;CAEA,cAAW;EACP,MAAM,OAAgC,KAAK,KAAI,CAAE,EAAE;EACnD,IAAI,SAAS,UAAa,OAAO,mBAAmB,aAChD;EAEJ,KAAK,aAAa,WAAU;EAC5B,KAAK,cAAc,IAAI,qBAA2B,KAAK,aAAY,CAAE;EACrE,MAAM,KAAK,KAAK,QAAQ,CAAC,CAAC,SAAS,SAAwB,KAAK,aAAa,QAAQ,IAAI,CAAC;CAC9F;CAEA,eAAY;EACR,MAAM,OAAgC,KAAK,KAAI,CAAE,EAAE;EACnD,IAAI,SAAS,QAAW;GACpB,KAAK,OAAO,IAAI,KAAK,YAAY,IAAI,CAAC;GACtC,KAAK,aAAa,KAAK;GACvB,KAAK,QAAQ,IAAI,KAAK,aAAa,CAAC;EACxC;CACJ;CAMA,YAAY,MAAiB;EACzB,MAAM,QAA4B,MAAM,KAAK,KAAK,QAAQ;EAC1D,MAAM,UAA0B,MAAM,GAAG,EAAE,CAAC,EAAE,cAAc,0BAA0B,KAAK;EAC3F,IAAI,YAAY,MACZ,OAAO;EAEX,MAAM,YAAiC,iBAAiB,IAAI;EAC5D,MAAM,OAAe,KAAK,cAAc,WAAW,UAAU,kBAAkB,IAAI,WAAW,UAAU,gBAAgB;EACxH,MAAM,YAAoB,MACrB,MAAM,GAAG,EAAE,CAAC,CACZ,QAAQ,KAAa,SAA0B,MAAM,KAAK,sBAAqB,CAAE,CAAC,OAAO,CAAC;EAC/F,MAAM,QAAgB,WAAW,UAAU,iBAAiB,8BAA8B,CAAC,KAAK;EAEhG,OAAO,kBAAkB,MAAM,WAAW,QAAQ,aAAa,KAAK;CACxE;CA9GS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAsB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAtB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAsB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,QAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;GAAA;GAAA,MAAA;IAAA,YAAA,EAAA,QAAA,aAAA;IAAA,YAAA;KAAA,mBAAA;KAAA,iCAAA;IAAA;IAAA,gBAAA;GAAA;GAAA,aAAA,CAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAAA,CAAA,MAAA;IAAA,aAAA;IAAA,UAAA;GAAA,CAAA;GAAA,UAAA;GAAA,UCjEnC;GAmEA,QAAA,CAAA,ixJAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDpBQ;KAAU,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAGV;KAAc,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;KAAa,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;KAAY,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACZ;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,cAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;KAAmB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACnB;KAAkB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,WAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AASb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAsB,YAAA,CAAA;EA1BlC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAgB,iBAGT,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IAEL;IAGA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GAAA,MACK;IACF,OAAO;IACP,MAAM;IACN,qBAAqB;IACrB,mCAAmC;GACtC;GAAA,UAAA;GAAA,QAAA,CAAA,ixJAAA;EAAA,CAAA;CAcyG,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,QAAM,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-breadcrumbs.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/breadcrumbs/rt-breadcrumbs.logic.ts","../../../projects/ui-kit-v2/src/lib/components/breadcrumbs/rt-breadcrumbs.component.ts","../../../projects/ui-kit-v2/src/lib/components/breadcrumbs/rt-breadcrumbs.component.html"],"sourcesContent":["import { IRtBreadcrumbs } from './rt-breadcrumbs.model';\n\n/** С какого числа предков середина пути сворачивается на узком экране. */\nexport const RT_BREADCRUMBS_FOLD_FROM: number = 3;\n\n/**\n * Помещаются ли предки рядом с текущим звеном, урезанным до порога или до своей полной подписи,\n * если она короче. Тогда звено сжимается с многоточием и строка не едет; иначе строка встаёт в\n * конец, и предки уезжают влево.\n */\nexport function rtBreadcrumbsFits(room: number, ancestors: number, current: number, floor: number): boolean {\n return room - ancestors >= Math.min(current, floor);\n}\n\n/**\n * Раскладка предков. На узком экране длинный путь оставляет первого и последнего предка ссылками,\n * а середину отдаёт в меню; на широком и при коротком пути свёртки нет.\n */\nexport function rtBreadcrumbsFold(ancestors: readonly IRtBreadcrumbs.Crumb[], narrow: boolean): IRtBreadcrumbs.Fold {\n if (!narrow || ancestors.length < RT_BREADCRUMBS_FOLD_FROM) {\n return { head: ancestors, hidden: [], tail: [] };\n }\n\n return {\n head: ancestors.slice(0, 1),\n hidden: ancestors.slice(1, -1),\n tail: ancestors.slice(-1),\n };\n}\n","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n signal,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { BreakpointsService, rtKitLabel, TRtKitLabelParams } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtMenuComponent, RtMenuItemComponent } from '@rt-tools/ui-kit-v2/menu';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\n\nimport { rtBreadcrumbsFits, rtBreadcrumbsFold } from './rt-breadcrumbs.logic';\nimport { IRtBreadcrumbs } from './rt-breadcrumbs.model';\n\nconst BEM_BLOCK: string = 'rt-breadcrumbs';\n\n/**\n * Путь до открытой страницы: предки ссылками, текущее звено текстом.\n *\n * Цепочку отдаёт приложение: имя открытой записи приходит с ответом сервера, и знает его только\n * страница. Текущее звено рисуется в строке пути или заголовком строкой ниже — тогда рядом с ним\n * встаёт то, что страница спроецировала. На узком экране середина длинного пути уходит в меню.\n */\n@Component({\n selector: 'rt-breadcrumbs',\n templateUrl: './rt-breadcrumbs.component.html',\n styleUrl: './rt-breadcrumbs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // angular\n RouterLink,\n\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtIconComponent,\n RtMenuComponent,\n RtMenuItemComponent,\n RtTooltipDirective,\n ],\n host: {\n class: BEM_BLOCK,\n role: 'navigation',\n '[attr.aria-label]': 'landmarkLabel()',\n '[class.rt-breadcrumbs--heading]': \"look() === 'heading'\",\n },\n})\nexport class RtBreadcrumbsComponent {\n #itemsWatch: ResizeObserver | null = null;\n\n readonly #narrow: Signal<boolean> = inject(BreakpointsService).narrow;\n\n readonly #ancestors: Signal<readonly IRtBreadcrumbs.Crumb[]> = computed((): readonly IRtBreadcrumbs.Crumb[] =>\n this.crumbs().slice(0, -1)\n );\n\n readonly #backParams: Signal<TRtKitLabelParams> = computed((): TRtKitLabelParams => ({ name: this.backCrumb()?.label ?? '' }));\n\n /** Строка звеньев: её прокрутку ставит в конец эффект после отрисовки. `#`-поле `viewChild` не принимает. */\n protected readonly list: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('list');\n\n /** Начало пути уехало влево за край строки. */\n protected readonly clipped: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Предки помещаются рядом с урезанным текущим звеном: звено сжимается, строка не едет. */\n protected readonly fitted: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly landmarkLabel: Signal<string> = rtKitLabel('breadcrumbsLabel');\n protected readonly foldLabel: Signal<string> = rtKitLabel('breadcrumbsHidden');\n protected readonly backLabel: Signal<string> = rtKitLabel('breadcrumbsBack', this.#backParams);\n\n protected readonly fold: Signal<IRtBreadcrumbs.Fold> = computed((): IRtBreadcrumbs.Fold =>\n rtBreadcrumbsFold(this.#ancestors(), this.#narrow())\n );\n\n protected readonly current: Signal<IRtBreadcrumbs.Crumb | null> = computed(\n (): IRtBreadcrumbs.Crumb | null => this.crumbs().at(-1) ?? null\n );\n\n /** Строка пути нужна, пока в ней есть что рисовать: у одного заголовка её нет. */\n protected readonly rowShown: Signal<boolean> = computed((): boolean => this.look() === 'inline' || this.#ancestors().length > 0);\n\n /** Куда ведёт кнопка «назад»: к последнему предку, а без предков кнопки нет. */\n protected readonly backCrumb: Signal<IRtBreadcrumbs.Crumb | null> = computed((): IRtBreadcrumbs.Crumb | null =>\n this.back() ? (this.#ancestors().at(-1) ?? null) : null\n );\n\n /** Путь от верха до открытой страницы; последнее звено — сама страница. */\n public readonly crumbs: InputSignal<readonly IRtBreadcrumbs.Crumb[]> = input.required<readonly IRtBreadcrumbs.Crumb[]>();\n\n /** Как рисуется текущее звено: в строке пути или заголовком строкой ниже. */\n public readonly look: InputSignal<IRtBreadcrumbs.Look> = input<IRtBreadcrumbs.Look>('inline');\n\n /** Кнопка «назад» перед путём; ведёт к последнему предку. */\n public readonly back: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Знак между звеньями. */\n public readonly separator: InputSignal<string> = input<string>('/');\n\n constructor() {\n // Длинный путь едет внутри своей строки, и видна должна быть открытая страница, а не верх\n // пути. Строка встаёт в конец при смене цепочки и при смене ширины звеньев: шрифт страницы\n // приходит позже первой отрисовки и раздвигает звенья уже после неё.\n afterRenderEffect((): void => {\n this.crumbs();\n this.fold();\n this.#watchItems();\n this.#scrollToEnd();\n });\n\n inject(DestroyRef).onDestroy((): void => this.#itemsWatch?.disconnect());\n }\n\n protected onListScroll(): void {\n const list: HTMLElement | undefined = this.list()?.nativeElement;\n this.clipped.set(list !== undefined && list.scrollLeft > 0);\n }\n\n #watchItems(): void {\n const list: HTMLElement | undefined = this.list()?.nativeElement;\n if (list === undefined || typeof ResizeObserver === 'undefined') {\n return;\n }\n this.#itemsWatch?.disconnect();\n this.#itemsWatch = new ResizeObserver((): void => this.#scrollToEnd());\n Array.from(list.children).forEach((item: Element): void => this.#itemsWatch?.observe(item));\n }\n\n #scrollToEnd(): void {\n const list: HTMLElement | undefined = this.list()?.nativeElement;\n if (list !== undefined) {\n this.fitted.set(this.#measureFit(list));\n list.scrollLeft = list.scrollWidth;\n this.clipped.set(list.scrollLeft > 0);\n }\n }\n\n /**\n * Ширина строки без внутренних полей, предки целиком и полная подпись текущего звена против\n * порога из свойства блока. Без текущего звена в строке сжимать нечего.\n */\n #measureFit(list: HTMLElement): boolean {\n const items: readonly Element[] = Array.from(list.children);\n const current: Element | null = items.at(-1)?.querySelector('.rt-breadcrumbs__current') ?? null;\n if (current === null) {\n return false;\n }\n const listStyle: CSSStyleDeclaration = getComputedStyle(list);\n const room: number = list.clientWidth - parseFloat(listStyle.paddingInlineStart) - parseFloat(listStyle.paddingInlineEnd);\n const ancestors: number = items\n .slice(0, -1)\n .reduce((sum: number, item: Element): number => sum + item.getBoundingClientRect().width, 0);\n const floor: number = parseFloat(listStyle.getPropertyValue('--rt-breadcrumbs-current-min')) || 0;\n\n return rtBreadcrumbsFits(room, ancestors, current.scrollWidth, floor);\n }\n}\n","<ng-container rtBlock=\"rt-breadcrumbs\">\n @if (rowShown()) {\n <div rtElem=\"row\">\n @if (backCrumb(); as backTo) {\n <a rtElem=\"back\" qa-dataid=\"breadcrumbs-back\" [routerLink]=\"backTo.link\" [attr.aria-label]=\"backLabel()\">\n <rt-icon name=\"arrow-left\" size=\"md\" />\n </a>\n }\n\n <ol\n #list\n rtElem=\"list\"\n qa-dataid=\"breadcrumbs-list\"\n [rtMod]=\"{ clipped: clipped(), fitted: fitted() }\"\n (scroll)=\"onListScroll()\">\n @for (crumb of fold().head; track $index) {\n <li rtElem=\"item\">\n <a rtElem=\"link\" qa-dataid=\"breadcrumbs-link\" [routerLink]=\"crumb.link\">{{ crumb.label }}</a>\n <span rtElem=\"separator\" aria-hidden=\"true\">{{ separator() }}</span>\n </li>\n }\n\n @if (fold().hidden.length) {\n <li rtElem=\"item\" qa-dataid=\"breadcrumbs-fold\">\n <span rtElem=\"fold\">\n <rt-menu size=\"sm\" align=\"start\" [ariaLabel]=\"foldLabel()\">\n @for (crumb of fold().hidden; track $index) {\n <rt-menu-item qa-dataid=\"breadcrumbs-fold-item\" [label]=\"crumb.label\" [link]=\"crumb.link ?? null\" />\n }\n </rt-menu>\n </span>\n <span rtElem=\"separator\" aria-hidden=\"true\">{{ separator() }}</span>\n </li>\n }\n\n @for (crumb of fold().tail; track $index) {\n <li rtElem=\"item\">\n <a rtElem=\"link\" qa-dataid=\"breadcrumbs-link\" [routerLink]=\"crumb.link\">{{ crumb.label }}</a>\n <span rtElem=\"separator\" aria-hidden=\"true\">{{ separator() }}</span>\n </li>\n }\n\n @if (look() === 'inline' && current(); as page) {\n <li rtElem=\"item\">\n <span\n rtElem=\"current\"\n qa-dataid=\"breadcrumbs-current\"\n aria-current=\"page\"\n rtTooltipWhenTruncated\n [rtTooltip]=\"page.label\">\n {{ page.label }}\n </span>\n </li>\n }\n </ol>\n </div>\n }\n\n @if (look() === 'heading' && current(); as page) {\n <div rtElem=\"heading\">\n <h1 rtElem=\"title\" qa-dataid=\"breadcrumbs-current\" aria-current=\"page\" rtTooltipWhenTruncated [rtTooltip]=\"page.label\">\n {{ page.label }}\n </h1>\n <ng-content />\n </div>\n }\n</ng-container>\n"],"mappings":"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"}
@@ -560,7 +560,8 @@ var RtDataTableCellComponent = class RtDataTableCellComponent {
560
560
  "rtTooltipPlacement",
561
561
  "rtTooltipShowDelay",
562
562
  "rtTooltipWhenTruncated",
563
- "rtTooltipHideOnClick"
563
+ "rtTooltipHideOnClick",
564
+ "rtTooltipShowOnTap"
564
565
  ],
565
566
  exportAs: ["rtTooltip"]
566
567
  },
@@ -826,7 +827,8 @@ var RtDataTableHeaderCellComponent = class RtDataTableHeaderCellComponent {
826
827
  "rtTooltipPlacement",
827
828
  "rtTooltipShowDelay",
828
829
  "rtTooltipWhenTruncated",
829
- "rtTooltipHideOnClick"
830
+ "rtTooltipHideOnClick",
831
+ "rtTooltipShowOnTap"
830
832
  ],
831
833
  exportAs: ["rtTooltip"]
832
834
  },