@rt-tools/ui-kit-v2 0.34.5 → 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 (76) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-ai-prompt-input.mjs +574 -0
  2. package/fesm2022/rt-tools-ui-kit-v2-ai-prompt-input.mjs.map +1 -0
  3. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +2 -1
  4. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +2 -1
  6. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +62 -3
  8. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +4 -2
  10. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +2 -1
  12. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +4 -2
  14. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +2 -1
  16. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +2 -1
  18. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
  19. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +2 -1
  20. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +2 -1
  22. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
  23. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +2 -1
  24. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
  25. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +2 -1
  26. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
  27. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs +2 -2
  28. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs.map +1 -1
  29. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +4 -2
  30. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
  31. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +148 -24
  32. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  33. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +2 -1
  34. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
  35. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +4 -2
  36. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
  37. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +2 -1
  38. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
  39. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2 -1
  40. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  41. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +2 -1
  42. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  43. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +2 -1
  44. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
  45. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +52 -5
  46. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  47. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +2 -1
  48. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
  49. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +37 -0
  50. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
  51. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +2 -1
  52. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
  53. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +2 -1
  54. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
  55. package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs +164 -0
  56. package/fesm2022/rt-tools-ui-kit-v2-usage-ring.mjs.map +1 -0
  57. package/fesm2022/rt-tools-ui-kit-v2.mjs +2 -0
  58. package/package.json +9 -1
  59. package/src/lib/components/ai-prompt-input/CONTEXT.md +60 -0
  60. package/src/lib/components/ai-prompt-input/rt-ai-prompt-input.component.scss +113 -0
  61. package/src/lib/components/markdown-text/rt-markdown-text.component.scss +3 -0
  62. package/src/lib/components/thread-list/rt-thread-list.component.scss +26 -11
  63. package/src/lib/components/tooltip/CONTEXT.md +4 -0
  64. package/src/lib/components/usage-ring/CONTEXT.md +33 -0
  65. package/src/lib/components/usage-ring/rt-usage-ring.component.scss +64 -0
  66. package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +1 -1
  67. package/src/rich-editor/lib/components/ai-chat/answer/rt-ai-chat-answer.component.scss +1 -0
  68. package/src/rich-editor/lib/components/ai-chat/rt-ai-chat.component.scss +6 -0
  69. package/src/rich-editor/lib/components/chat/rt-chat.component.scss +25 -0
  70. package/types/rt-tools-ui-kit-v2-ai-prompt-input.d.ts +193 -0
  71. package/types/rt-tools-ui-kit-v2-core.d.ts +4 -0
  72. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +56 -3
  73. package/types/rt-tools-ui-kit-v2-thread-list.d.ts +7 -1
  74. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +12 -0
  75. package/types/rt-tools-ui-kit-v2-usage-ring.d.ts +47 -0
  76. package/types/rt-tools-ui-kit-v2.d.ts +2 -0
@@ -455,7 +455,8 @@ var RtDraggableTreeComponent = class RtDraggableTreeComponent {
455
455
  "rtTooltipPlacement",
456
456
  "rtTooltipShowDelay",
457
457
  "rtTooltipWhenTruncated",
458
- "rtTooltipHideOnClick"
458
+ "rtTooltipHideOnClick",
459
+ "rtTooltipShowOnTap"
459
460
  ],
460
461
  exportAs: ["rtTooltip"]
461
462
  },
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-draggable-tree.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/draggable-tree/rt-draggable-tree.directives.ts","../../../projects/ui-kit-v2/src/lib/components/draggable-tree/rt-draggable-tree.logic.ts","../../../projects/ui-kit-v2/src/lib/components/draggable-tree/rt-draggable-tree.component.ts","../../../projects/ui-kit-v2/src/lib/components/draggable-tree/rt-draggable-tree.component.html"],"sourcesContent":["import { inject, Directive, TemplateRef } from '@angular/core';\n\nimport { IRtTree } from '@rt-tools/ui-kit-v2/tree';\n\n/**\n * Разметка приложения вместо подписи строки `rt-draggable-tree`. Узел строки приходит в контексте\n * как `$implicit`.\n */\n@Directive({ selector: 'ng-template[rtDraggableTreeNode]' })\nexport class RtDraggableTreeNodeDirective<TValue> {\n public readonly templateRef: TemplateRef<IRtTree.NodeContext<TValue>> = inject<TemplateRef<IRtTree.NodeContext<TValue>>>(TemplateRef);\n}\n","import { IRtTree } from '@rt-tools/ui-kit-v2/tree';\nimport { IRtDraggableTree } from './rt-draggable-tree.model';\n\ntype TNode<TValue> = IRtTree.Node<TValue>;\ntype TNodes<TValue> = ReadonlyArray<TNode<TValue>>;\n\n/** Где узел лежит: его соседи, место среди них и значение родителя. */\ninterface ILocation<TValue> {\n readonly node: TNode<TValue>;\n readonly siblings: TNodes<TValue>;\n readonly index: number;\n readonly parent: TValue | null;\n}\n\n/** Контейнер — узел с массивом детей, даже пустым: он принимает узлы внутрь. */\nfunction isContainer<TValue>(node: TNode<TValue>): boolean {\n return Array.isArray(node.children);\n}\n\nfunction locate<TValue>(nodes: TNodes<TValue>, value: TValue, parent: TValue | null = null): ILocation<TValue> | null {\n for (let index: number = 0; index < nodes.length; index++) {\n const node: TNode<TValue> = nodes[index];\n if (node.value === value) {\n return { siblings: nodes, node, index, parent };\n }\n const found: ILocation<TValue> | null = locate(node.children ?? [], value, node.value);\n if (found) {\n return found;\n }\n }\n return null;\n}\n\nfunction holds<TValue>(node: TNode<TValue>, value: TValue): boolean {\n return (node.children ?? []).some((child: TNode<TValue>): boolean => child.value === value || holds(child, value));\n}\n\nfunction without<TValue>(nodes: TNodes<TValue>, value: TValue): TNodes<TValue> {\n return nodes\n .filter((node: TNode<TValue>): boolean => node.value !== value)\n .map((node: TNode<TValue>): TNode<TValue> =>\n node.children && holds(node, value) ? { ...node, children: without(node.children, value) } : node\n );\n}\n\nfunction inserted<TValue>(nodes: TNodes<TValue>, moving: TNode<TValue>, drop: IRtDraggableTree.Drop<TValue>): TNodes<TValue> {\n const at: number = nodes.findIndex((node: TNode<TValue>): boolean => node.value === drop.target);\n if (at >= 0 && drop.place !== 'inside') {\n const index: number = drop.place === 'before' ? at : at + 1;\n return [...nodes.slice(0, index), moving, ...nodes.slice(index)];\n }\n return nodes.map((node: TNode<TValue>): TNode<TValue> => {\n if (node.value === drop.target && drop.place === 'inside') {\n return { ...node, children: [...(node.children ?? []), moving] };\n }\n if (node.children && holds(node, drop.target)) {\n return { ...node, children: inserted(node.children, moving, drop) };\n }\n return node;\n });\n}\n\nfunction siblingPlace<TValue>(here: ILocation<TValue>, step: number): IRtDraggableTree.Drop<TValue> | null {\n const next: TNode<TValue> | undefined = here.siblings[here.index + step];\n return next ? { target: next.value, place: step < 0 ? 'before' : 'after' } : null;\n}\n\nfunction levelPlace<TValue>(here: ILocation<TValue>, out: boolean): IRtDraggableTree.Drop<TValue> | null {\n if (out) {\n return here.parent === null ? null : { target: here.parent, place: 'after' };\n }\n const above: TNode<TValue> | undefined = here.siblings[here.index - 1];\n return above && isContainer(above) ? { target: above.value, place: 'inside' } : null;\n}\n\n/**\n * Место сброса по третям высоты строки: верхняя — перед целью, нижняя — после, средняя — внутрь.\n * Средняя треть листа места не даёт: внутрь принимает только контейнер.\n */\nexport function rtDragPlace<TValue>(target: TNode<TValue>, top: number, height: number, pointer: number): IRtDraggableTree.Place | null {\n const third: number = height / 3;\n const offset: number = pointer - top;\n if (offset < third) {\n return 'before';\n }\n if (offset > 2 * third) {\n return 'after';\n }\n return isContainer(target) ? 'inside' : null;\n}\n\n/**\n * Можно ли поставить узел на место: не на себя, не в своё поддерево, внутрь — только в контейнер, и\n * если приложение не запретило.\n */\nexport function rtDragAllowed<TValue>(\n nodes: TNodes<TValue>,\n value: TValue,\n drop: IRtDraggableTree.Drop<TValue>,\n canDrop: IRtDraggableTree.CanDrop<TValue> | null = null\n): boolean {\n const moving: ILocation<TValue> | null = locate(nodes, value);\n const target: ILocation<TValue> | null = locate(nodes, drop.target);\n if (!moving || !target || drop.target === value || holds(moving.node, drop.target)) {\n return false;\n }\n if (drop.place === 'inside' && !isContainer(target.node)) {\n return false;\n }\n return canDrop ? canDrop(moving.node, target.node, drop.place) : true;\n}\n\n/** Переносит узел вместе с поддеревом. Узлы на входе не меняются: ветки на пути строятся заново. */\nexport function rtDragMove<TValue>(\n nodes: TNodes<TValue>,\n value: TValue,\n drop: IRtDraggableTree.Drop<TValue>\n): IRtDraggableTree.MoveResult<TValue> | null {\n const moving: ILocation<TValue> | null = locate(nodes, value);\n if (!moving || !rtDragAllowed(nodes, value, drop)) {\n return null;\n }\n const next: TNodes<TValue> = inserted(without(nodes, value), moving.node, drop);\n const landed: ILocation<TValue> | null = locate(next, value);\n if (!landed) {\n return null;\n }\n return { nodes: next, moved: { node: moving.node, parent: landed.parent, index: landed.index } };\n}\n\n/**\n * Место для переноса клавишей с Alt. Вверх и вниз — среди соседей, влево — сразу после своей ветки,\n * вправо — последним в контейнер, стоящий прямо над узлом. Двигаться некуда — `null`.\n */\nexport function rtDragKeyPlace<TValue>(nodes: TNodes<TValue>, value: TValue, key: string): IRtDraggableTree.Drop<TValue> | null {\n const here: ILocation<TValue> | null = locate(nodes, value);\n if (!here) {\n return null;\n }\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n return siblingPlace(here, key === 'ArrowUp' ? -1 : 1);\n }\n if (key === 'ArrowLeft' || key === 'ArrowRight') {\n return levelPlace(here, key === 'ArrowLeft');\n }\n return null;\n}\n","import { CdkDrag, CdkDragHandle, CdkDragMove, CdkDropList } from '@angular/cdk/drag-drop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n computed,\n contentChild,\n inject,\n input,\n model,\n output,\n signal,\n viewChildren,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n InputSignal,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { IRtIcon, RT_KIT_LABELS, TRtKitLabelMap } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtOptionTree, rtTreeRows, rtTreeSideKey, rtTreeToggle } from '@rt-tools/ui-kit-v2/core';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { IRtTree } from '@rt-tools/ui-kit-v2/tree';\nimport { RtDraggableTreeNodeDirective } from './rt-draggable-tree.directives';\nimport { rtDragAllowed, rtDragKeyPlace, rtDragMove, rtDragPlace } from './rt-draggable-tree.logic';\nimport { IRtDraggableTree } from './rt-draggable-tree.model';\n\nconst BEM_BLOCK: string = 'rt-draggable-tree';\nconst MOVE_KEYS: ReadonlyArray<string> = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];\n\n/**\n * Дерево, узлы которого человек переставляет: перетаскиванием строки до, после или внутрь другой,\n * или клавишами с Alt.\n *\n * Строки, уровни и раскрытие считает тот же модуль, что у `rt-tree`. Узлы на входе не меняются:\n * перенос пишет в `nodes` новый массив и сообщает `moved`. Место сброса — чистая функция от рамки\n * строки под указателем; документ дерево не читает.\n */\n@Component({\n selector: 'rt-draggable-tree',\n templateUrl: './rt-draggable-tree.component.html',\n styleUrl: './rt-draggable-tree.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n CdkDrag,\n CdkDragHandle,\n CdkDropList,\n RtIconComponent,\n RtTooltipDirective,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n host: {\n class: BEM_BLOCK,\n role: 'tree',\n tabindex: '0',\n '[attr.aria-label]': 'ariaLabel()',\n '(keydown)': 'handleKeydown($event)',\n },\n})\nexport class RtDraggableTreeComponent<TValue> {\n readonly #highlighted: WritableSignal<TValue | null> = signal<TValue | null>(null);\n readonly #dragged: WritableSignal<TValue | null> = signal<TValue | null>(null);\n\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n protected readonly nodeTemplate: Signal<RtDraggableTreeNodeDirective<TValue> | undefined> = contentChild(RtDraggableTreeNodeDirective);\n\n protected readonly rowElements: Signal<ReadonlyArray<ElementRef<HTMLElement>>> = viewChildren<ElementRef<HTMLElement>>('row');\n\n /** Место, куда встанет перетаскиваемый узел; `null` — сейчас места нет. */\n protected readonly drop: WritableSignal<IRtDraggableTree.Drop<TValue> | null> = signal<IRtDraggableTree.Drop<TValue> | null>(null);\n\n /**\n * Раскрытые ветки. Пока приложение их не задало и человек ничего не сворачивал, раскрыты все:\n * порядок виден целиком с первого взгляда.\n */\n protected readonly openBranches: Signal<ReadonlySet<TValue>> = computed((): ReadonlySet<TValue> => {\n const open: ReadonlyArray<TValue> | null = this.open();\n if (open !== null) {\n return new Set<TValue>(open);\n }\n const all: Set<TValue> = new Set<TValue>();\n this.#collectBranches(this.nodes(), all);\n return all;\n });\n\n protected readonly rows: Signal<ReadonlyArray<IRtTree.Row<TValue>>> = computed((): ReadonlyArray<IRtTree.Row<TValue>> =>\n rtTreeRows(this.nodes(), this.openBranches(), '')\n );\n\n protected readonly highlighted: Signal<TValue | null> = this.#highlighted.asReadonly();\n\n public readonly nodes: ModelSignal<ReadonlyArray<IRtTree.Node<TValue>>> = model.required<ReadonlyArray<IRtTree.Node<TValue>>>();\n /** Значения раскрытых веток; `null` — раскрыты все. Пара `openChange` приходит на каждое раскрытие. */\n public readonly open: ModelSignal<ReadonlyArray<TValue> | null> = model<ReadonlyArray<TValue> | null>(null);\n public readonly canDrop: InputSignal<IRtDraggableTree.CanDrop<TValue> | null> = input<IRtDraggableTree.CanDrop<TValue> | null>(null);\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n /** Значок кита над подписью пустого дерева. Без него пустое дерево — одна подпись. */\n public readonly emptyIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n public readonly moved: OutputEmitterRef<IRtDraggableTree.Moved<TValue>> = output<IRtDraggableTree.Moved<TValue>>();\n public readonly picked: OutputEmitterRef<IRtTree.Node<TValue>> = output<IRtTree.Node<TValue>>();\n\n /** Клавиша для дерева. Отвечает, взята ли она: не взятая идёт дальше нетронутой. */\n public handleKeydown(event: KeyboardEvent): boolean {\n const taken: boolean = event.altKey ? this.#moveByKey(event.key) : this.#walkByKey(event.key);\n if (taken) {\n event.preventDefault();\n event.stopPropagation();\n }\n return taken;\n }\n\n protected onRowClick(row: IRtTree.Row<TValue>): void {\n this.#highlighted.set(row.option.value);\n this.picked.emit(row.option);\n }\n\n protected onToggleClick(event: Event, value: TValue): void {\n event.stopPropagation();\n this.#toggle(value);\n }\n\n protected onDragStarted(value: TValue): void {\n this.#dragged.set(value);\n }\n\n protected onDragMoved(event: CdkDragMove<TValue>): void {\n this.drop.set(this.#dropAt(event.pointerPosition.y));\n }\n\n protected onDropped(): void {\n const dragged: TValue | null = this.#dragged();\n const drop: IRtDraggableTree.Drop<TValue> | null = this.drop();\n this.#dragged.set(null);\n this.drop.set(null);\n if (dragged !== null && drop) {\n this.#apply(dragged, drop);\n }\n }\n\n #dropAt(pointer: number): IRtDraggableTree.Drop<TValue> | null {\n const dragged: TValue | null = this.#dragged();\n const rows: ReadonlyArray<IRtTree.Row<TValue>> = this.rows();\n const elements: ReadonlyArray<ElementRef<HTMLElement>> = this.rowElements();\n if (dragged === null) {\n return null;\n }\n const index: number = elements.findIndex((element: ElementRef<HTMLElement>, at: number): boolean => {\n const box: DOMRect = element.nativeElement.getBoundingClientRect();\n return rows[at]?.option.value !== dragged && pointer >= box.top && pointer < box.bottom;\n });\n if (index < 0) {\n return null;\n }\n const box: DOMRect = elements[index].nativeElement.getBoundingClientRect();\n const target: IRtTree.Node<TValue> = rows[index].option;\n const place: IRtDraggableTree.Place | null = rtDragPlace(target, box.top, box.height, pointer);\n const drop: IRtDraggableTree.Drop<TValue> | null = place ? { target: target.value, place } : null;\n return drop && rtDragAllowed(this.nodes(), dragged, drop, this.canDrop()) ? drop : null;\n }\n\n #moveByKey(key: string): boolean {\n const value: TValue | null = this.#highlighted();\n if (!MOVE_KEYS.includes(key)) {\n return false;\n }\n const node: IRtTree.Node<TValue> | undefined = this.rows().find(\n (row: IRtTree.Row<TValue>): boolean => row.option.value === value\n )?.option;\n const drop: IRtDraggableTree.Drop<TValue> | null = node && !node.disabled ? rtDragKeyPlace(this.nodes(), node.value, key) : null;\n if (node && drop && rtDragAllowed(this.nodes(), node.value, drop, this.canDrop())) {\n this.#apply(node.value, drop);\n }\n return true;\n }\n\n #walkByKey(key: string): boolean {\n const rows: ReadonlyArray<IRtTree.Row<TValue>> = this.rows();\n const index: number = rows.findIndex((row: IRtTree.Row<TValue>): boolean => row.option.value === this.#highlighted());\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n return this.#step(rows, index, key === 'ArrowDown' ? 1 : -1);\n }\n if (index < 0) {\n return false;\n }\n if (key === 'ArrowRight' || key === 'ArrowLeft') {\n const answer: IRtOptionTree.SideKeyAnswer<TValue> = rtTreeSideKey(rows, index, key);\n if (answer.toggle !== null) {\n this.#toggle(answer.toggle);\n }\n this.#highlighted.set(rows[answer.index].option.value);\n return true;\n }\n if (key === 'Enter') {\n this.picked.emit(rows[index].option);\n return true;\n }\n return false;\n }\n\n #step(rows: ReadonlyArray<IRtTree.Row<TValue>>, index: number, step: number): boolean {\n if (rows.length === 0) {\n return false;\n }\n const next: number = index < 0 ? 0 : Math.min(rows.length - 1, Math.max(0, index + step));\n this.#highlighted.set(rows[next].option.value);\n return true;\n }\n\n #apply(value: TValue, drop: IRtDraggableTree.Drop<TValue>): void {\n const result: IRtDraggableTree.MoveResult<TValue> | null = rtDragMove(this.nodes(), value, drop);\n if (!result) {\n return;\n }\n this.nodes.set(result.nodes);\n if (drop.place === 'inside' && !this.openBranches().has(drop.target)) {\n this.open.set([...this.openBranches(), drop.target]);\n }\n this.moved.emit(result.moved);\n }\n\n #toggle(value: TValue): void {\n this.open.set([...rtTreeToggle(this.openBranches(), value)]);\n }\n\n #collectBranches(list: ReadonlyArray<IRtTree.Node<TValue>>, into: Set<TValue>): void {\n list.forEach((node: IRtTree.Node<TValue>): void => {\n if ((node.children ?? []).length > 0) {\n into.add(node.value);\n this.#collectBranches(node.children ?? [], into);\n }\n });\n }\n}\n","<ng-container rtBlock=\"rt-draggable-tree\">\n <!--\n Строки берут мышь через (click), клавиатура — на самом дереве (handleKeydown): строки фокус не\n берут, подсвеченная строка — состояние рядом с фокусом. Строку тянут за ручку; список один на\n всё дерево, и место сброса считает компонент по рамке строки под указателем.\n -->\n <!-- eslint-disable @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div rtElem=\"list\" cdkDropList [cdkDropListSortingDisabled]=\"true\" (cdkDropListDropped)=\"onDropped()\">\n @for (row of rows(); track row.option.value) {\n <div\n #row\n rtElem=\"row\"\n qa-dataid=\"draggable-tree-row\"\n role=\"treeitem\"\n cdkDrag\n [cdkDragData]=\"row.option.value\"\n [cdkDragDisabled]=\"!!row.option.disabled\"\n [attr.data-value]=\"row.option.value\"\n [attr.aria-level]=\"row.level + 1\"\n [attr.aria-expanded]=\"row.branch ? row.open : null\"\n [attr.aria-selected]=\"row.option.value === highlighted()\"\n [attr.aria-disabled]=\"!!row.option.disabled\"\n [style.--rt-draggable-tree-level]=\"row.level\"\n [rtMod]=\"{\n highlighted: row.option.value === highlighted(),\n disabled: !!row.option.disabled,\n 'drop-before': drop()?.target === row.option.value && drop()?.place === 'before',\n 'drop-after': drop()?.target === row.option.value && drop()?.place === 'after',\n 'drop-inside': drop()?.target === row.option.value && drop()?.place === 'inside',\n }\"\n (cdkDragStarted)=\"onDragStarted(row.option.value)\"\n (cdkDragMoved)=\"onDragMoved($event)\"\n (click)=\"onRowClick(row)\">\n @if (row.option.disabled) {\n <span rtElem=\"handle-space\"></span>\n } @else {\n <span rtElem=\"handle\" qa-dataid=\"draggable-tree-handle\" cdkDragHandle aria-hidden=\"true\">\n <rt-icon name=\"bars\" size=\"sm\" color=\"muted\" />\n </span>\n }\n\n @if (row.branch) {\n <button\n rtElem=\"toggle\"\n qa-dataid=\"draggable-tree-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"row.open ? t().uiCollapse : t().uiExpand\"\n (click)=\"onToggleClick($event, row.option.value)\">\n <rt-icon size=\"sm\" color=\"muted\" [name]=\"row.open ? 'chevron-down' : 'chevron-right'\" />\n </button>\n } @else {\n <span rtElem=\"toggle-space\"></span>\n }\n\n <span rtElem=\"content\" qa-dataid=\"draggable-tree-content\">\n @if (nodeTemplate(); as template) {\n <ng-container [ngTemplateOutlet]=\"template.templateRef\" [ngTemplateOutletContext]=\"{ $implicit: row.option }\" />\n } @else {\n <span rtElem=\"label\" qa-dataid=\"draggable-tree-label\" rtTooltipWhenTruncated [rtTooltip]=\"row.option.label\">\n {{ row.option.label }}\n </span>\n }\n </span>\n </div>\n } @empty {\n <div rtElem=\"empty\" qa-dataid=\"draggable-tree-empty\" [rtMod]=\"{ 'with-icon': !!emptyIcon() }\">\n @if (emptyIcon(); as icon) {\n <rt-icon rtElem=\"empty-icon\" qa-dataid=\"draggable-tree-empty-icon\" size=\"lg\" [name]=\"icon\" />\n }\n {{ t().uiNoOptions }}\n </div>\n }\n </div>\n</ng-container>\n"],"mappings":"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"}
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-draggable-tree.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/draggable-tree/rt-draggable-tree.directives.ts","../../../projects/ui-kit-v2/src/lib/components/draggable-tree/rt-draggable-tree.logic.ts","../../../projects/ui-kit-v2/src/lib/components/draggable-tree/rt-draggable-tree.component.ts","../../../projects/ui-kit-v2/src/lib/components/draggable-tree/rt-draggable-tree.component.html"],"sourcesContent":["import { inject, Directive, TemplateRef } from '@angular/core';\n\nimport { IRtTree } from '@rt-tools/ui-kit-v2/tree';\n\n/**\n * Разметка приложения вместо подписи строки `rt-draggable-tree`. Узел строки приходит в контексте\n * как `$implicit`.\n */\n@Directive({ selector: 'ng-template[rtDraggableTreeNode]' })\nexport class RtDraggableTreeNodeDirective<TValue> {\n public readonly templateRef: TemplateRef<IRtTree.NodeContext<TValue>> = inject<TemplateRef<IRtTree.NodeContext<TValue>>>(TemplateRef);\n}\n","import { IRtTree } from '@rt-tools/ui-kit-v2/tree';\nimport { IRtDraggableTree } from './rt-draggable-tree.model';\n\ntype TNode<TValue> = IRtTree.Node<TValue>;\ntype TNodes<TValue> = ReadonlyArray<TNode<TValue>>;\n\n/** Где узел лежит: его соседи, место среди них и значение родителя. */\ninterface ILocation<TValue> {\n readonly node: TNode<TValue>;\n readonly siblings: TNodes<TValue>;\n readonly index: number;\n readonly parent: TValue | null;\n}\n\n/** Контейнер — узел с массивом детей, даже пустым: он принимает узлы внутрь. */\nfunction isContainer<TValue>(node: TNode<TValue>): boolean {\n return Array.isArray(node.children);\n}\n\nfunction locate<TValue>(nodes: TNodes<TValue>, value: TValue, parent: TValue | null = null): ILocation<TValue> | null {\n for (let index: number = 0; index < nodes.length; index++) {\n const node: TNode<TValue> = nodes[index];\n if (node.value === value) {\n return { siblings: nodes, node, index, parent };\n }\n const found: ILocation<TValue> | null = locate(node.children ?? [], value, node.value);\n if (found) {\n return found;\n }\n }\n return null;\n}\n\nfunction holds<TValue>(node: TNode<TValue>, value: TValue): boolean {\n return (node.children ?? []).some((child: TNode<TValue>): boolean => child.value === value || holds(child, value));\n}\n\nfunction without<TValue>(nodes: TNodes<TValue>, value: TValue): TNodes<TValue> {\n return nodes\n .filter((node: TNode<TValue>): boolean => node.value !== value)\n .map((node: TNode<TValue>): TNode<TValue> =>\n node.children && holds(node, value) ? { ...node, children: without(node.children, value) } : node\n );\n}\n\nfunction inserted<TValue>(nodes: TNodes<TValue>, moving: TNode<TValue>, drop: IRtDraggableTree.Drop<TValue>): TNodes<TValue> {\n const at: number = nodes.findIndex((node: TNode<TValue>): boolean => node.value === drop.target);\n if (at >= 0 && drop.place !== 'inside') {\n const index: number = drop.place === 'before' ? at : at + 1;\n return [...nodes.slice(0, index), moving, ...nodes.slice(index)];\n }\n return nodes.map((node: TNode<TValue>): TNode<TValue> => {\n if (node.value === drop.target && drop.place === 'inside') {\n return { ...node, children: [...(node.children ?? []), moving] };\n }\n if (node.children && holds(node, drop.target)) {\n return { ...node, children: inserted(node.children, moving, drop) };\n }\n return node;\n });\n}\n\nfunction siblingPlace<TValue>(here: ILocation<TValue>, step: number): IRtDraggableTree.Drop<TValue> | null {\n const next: TNode<TValue> | undefined = here.siblings[here.index + step];\n return next ? { target: next.value, place: step < 0 ? 'before' : 'after' } : null;\n}\n\nfunction levelPlace<TValue>(here: ILocation<TValue>, out: boolean): IRtDraggableTree.Drop<TValue> | null {\n if (out) {\n return here.parent === null ? null : { target: here.parent, place: 'after' };\n }\n const above: TNode<TValue> | undefined = here.siblings[here.index - 1];\n return above && isContainer(above) ? { target: above.value, place: 'inside' } : null;\n}\n\n/**\n * Место сброса по третям высоты строки: верхняя — перед целью, нижняя — после, средняя — внутрь.\n * Средняя треть листа места не даёт: внутрь принимает только контейнер.\n */\nexport function rtDragPlace<TValue>(target: TNode<TValue>, top: number, height: number, pointer: number): IRtDraggableTree.Place | null {\n const third: number = height / 3;\n const offset: number = pointer - top;\n if (offset < third) {\n return 'before';\n }\n if (offset > 2 * third) {\n return 'after';\n }\n return isContainer(target) ? 'inside' : null;\n}\n\n/**\n * Можно ли поставить узел на место: не на себя, не в своё поддерево, внутрь — только в контейнер, и\n * если приложение не запретило.\n */\nexport function rtDragAllowed<TValue>(\n nodes: TNodes<TValue>,\n value: TValue,\n drop: IRtDraggableTree.Drop<TValue>,\n canDrop: IRtDraggableTree.CanDrop<TValue> | null = null\n): boolean {\n const moving: ILocation<TValue> | null = locate(nodes, value);\n const target: ILocation<TValue> | null = locate(nodes, drop.target);\n if (!moving || !target || drop.target === value || holds(moving.node, drop.target)) {\n return false;\n }\n if (drop.place === 'inside' && !isContainer(target.node)) {\n return false;\n }\n return canDrop ? canDrop(moving.node, target.node, drop.place) : true;\n}\n\n/** Переносит узел вместе с поддеревом. Узлы на входе не меняются: ветки на пути строятся заново. */\nexport function rtDragMove<TValue>(\n nodes: TNodes<TValue>,\n value: TValue,\n drop: IRtDraggableTree.Drop<TValue>\n): IRtDraggableTree.MoveResult<TValue> | null {\n const moving: ILocation<TValue> | null = locate(nodes, value);\n if (!moving || !rtDragAllowed(nodes, value, drop)) {\n return null;\n }\n const next: TNodes<TValue> = inserted(without(nodes, value), moving.node, drop);\n const landed: ILocation<TValue> | null = locate(next, value);\n if (!landed) {\n return null;\n }\n return { nodes: next, moved: { node: moving.node, parent: landed.parent, index: landed.index } };\n}\n\n/**\n * Место для переноса клавишей с Alt. Вверх и вниз — среди соседей, влево — сразу после своей ветки,\n * вправо — последним в контейнер, стоящий прямо над узлом. Двигаться некуда — `null`.\n */\nexport function rtDragKeyPlace<TValue>(nodes: TNodes<TValue>, value: TValue, key: string): IRtDraggableTree.Drop<TValue> | null {\n const here: ILocation<TValue> | null = locate(nodes, value);\n if (!here) {\n return null;\n }\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n return siblingPlace(here, key === 'ArrowUp' ? -1 : 1);\n }\n if (key === 'ArrowLeft' || key === 'ArrowRight') {\n return levelPlace(here, key === 'ArrowLeft');\n }\n return null;\n}\n","import { CdkDrag, CdkDragHandle, CdkDragMove, CdkDropList } from '@angular/cdk/drag-drop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n computed,\n contentChild,\n inject,\n input,\n model,\n output,\n signal,\n viewChildren,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n InputSignal,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { IRtIcon, RT_KIT_LABELS, TRtKitLabelMap } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtOptionTree, rtTreeRows, rtTreeSideKey, rtTreeToggle } from '@rt-tools/ui-kit-v2/core';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { IRtTree } from '@rt-tools/ui-kit-v2/tree';\nimport { RtDraggableTreeNodeDirective } from './rt-draggable-tree.directives';\nimport { rtDragAllowed, rtDragKeyPlace, rtDragMove, rtDragPlace } from './rt-draggable-tree.logic';\nimport { IRtDraggableTree } from './rt-draggable-tree.model';\n\nconst BEM_BLOCK: string = 'rt-draggable-tree';\nconst MOVE_KEYS: ReadonlyArray<string> = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];\n\n/**\n * Дерево, узлы которого человек переставляет: перетаскиванием строки до, после или внутрь другой,\n * или клавишами с Alt.\n *\n * Строки, уровни и раскрытие считает тот же модуль, что у `rt-tree`. Узлы на входе не меняются:\n * перенос пишет в `nodes` новый массив и сообщает `moved`. Место сброса — чистая функция от рамки\n * строки под указателем; документ дерево не читает.\n */\n@Component({\n selector: 'rt-draggable-tree',\n templateUrl: './rt-draggable-tree.component.html',\n styleUrl: './rt-draggable-tree.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n CdkDrag,\n CdkDragHandle,\n CdkDropList,\n RtIconComponent,\n RtTooltipDirective,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n host: {\n class: BEM_BLOCK,\n role: 'tree',\n tabindex: '0',\n '[attr.aria-label]': 'ariaLabel()',\n '(keydown)': 'handleKeydown($event)',\n },\n})\nexport class RtDraggableTreeComponent<TValue> {\n readonly #highlighted: WritableSignal<TValue | null> = signal<TValue | null>(null);\n readonly #dragged: WritableSignal<TValue | null> = signal<TValue | null>(null);\n\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n protected readonly nodeTemplate: Signal<RtDraggableTreeNodeDirective<TValue> | undefined> = contentChild(RtDraggableTreeNodeDirective);\n\n protected readonly rowElements: Signal<ReadonlyArray<ElementRef<HTMLElement>>> = viewChildren<ElementRef<HTMLElement>>('row');\n\n /** Место, куда встанет перетаскиваемый узел; `null` — сейчас места нет. */\n protected readonly drop: WritableSignal<IRtDraggableTree.Drop<TValue> | null> = signal<IRtDraggableTree.Drop<TValue> | null>(null);\n\n /**\n * Раскрытые ветки. Пока приложение их не задало и человек ничего не сворачивал, раскрыты все:\n * порядок виден целиком с первого взгляда.\n */\n protected readonly openBranches: Signal<ReadonlySet<TValue>> = computed((): ReadonlySet<TValue> => {\n const open: ReadonlyArray<TValue> | null = this.open();\n if (open !== null) {\n return new Set<TValue>(open);\n }\n const all: Set<TValue> = new Set<TValue>();\n this.#collectBranches(this.nodes(), all);\n return all;\n });\n\n protected readonly rows: Signal<ReadonlyArray<IRtTree.Row<TValue>>> = computed((): ReadonlyArray<IRtTree.Row<TValue>> =>\n rtTreeRows(this.nodes(), this.openBranches(), '')\n );\n\n protected readonly highlighted: Signal<TValue | null> = this.#highlighted.asReadonly();\n\n public readonly nodes: ModelSignal<ReadonlyArray<IRtTree.Node<TValue>>> = model.required<ReadonlyArray<IRtTree.Node<TValue>>>();\n /** Значения раскрытых веток; `null` — раскрыты все. Пара `openChange` приходит на каждое раскрытие. */\n public readonly open: ModelSignal<ReadonlyArray<TValue> | null> = model<ReadonlyArray<TValue> | null>(null);\n public readonly canDrop: InputSignal<IRtDraggableTree.CanDrop<TValue> | null> = input<IRtDraggableTree.CanDrop<TValue> | null>(null);\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n /** Значок кита над подписью пустого дерева. Без него пустое дерево — одна подпись. */\n public readonly emptyIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n public readonly moved: OutputEmitterRef<IRtDraggableTree.Moved<TValue>> = output<IRtDraggableTree.Moved<TValue>>();\n public readonly picked: OutputEmitterRef<IRtTree.Node<TValue>> = output<IRtTree.Node<TValue>>();\n\n /** Клавиша для дерева. Отвечает, взята ли она: не взятая идёт дальше нетронутой. */\n public handleKeydown(event: KeyboardEvent): boolean {\n const taken: boolean = event.altKey ? this.#moveByKey(event.key) : this.#walkByKey(event.key);\n if (taken) {\n event.preventDefault();\n event.stopPropagation();\n }\n return taken;\n }\n\n protected onRowClick(row: IRtTree.Row<TValue>): void {\n this.#highlighted.set(row.option.value);\n this.picked.emit(row.option);\n }\n\n protected onToggleClick(event: Event, value: TValue): void {\n event.stopPropagation();\n this.#toggle(value);\n }\n\n protected onDragStarted(value: TValue): void {\n this.#dragged.set(value);\n }\n\n protected onDragMoved(event: CdkDragMove<TValue>): void {\n this.drop.set(this.#dropAt(event.pointerPosition.y));\n }\n\n protected onDropped(): void {\n const dragged: TValue | null = this.#dragged();\n const drop: IRtDraggableTree.Drop<TValue> | null = this.drop();\n this.#dragged.set(null);\n this.drop.set(null);\n if (dragged !== null && drop) {\n this.#apply(dragged, drop);\n }\n }\n\n #dropAt(pointer: number): IRtDraggableTree.Drop<TValue> | null {\n const dragged: TValue | null = this.#dragged();\n const rows: ReadonlyArray<IRtTree.Row<TValue>> = this.rows();\n const elements: ReadonlyArray<ElementRef<HTMLElement>> = this.rowElements();\n if (dragged === null) {\n return null;\n }\n const index: number = elements.findIndex((element: ElementRef<HTMLElement>, at: number): boolean => {\n const box: DOMRect = element.nativeElement.getBoundingClientRect();\n return rows[at]?.option.value !== dragged && pointer >= box.top && pointer < box.bottom;\n });\n if (index < 0) {\n return null;\n }\n const box: DOMRect = elements[index].nativeElement.getBoundingClientRect();\n const target: IRtTree.Node<TValue> = rows[index].option;\n const place: IRtDraggableTree.Place | null = rtDragPlace(target, box.top, box.height, pointer);\n const drop: IRtDraggableTree.Drop<TValue> | null = place ? { target: target.value, place } : null;\n return drop && rtDragAllowed(this.nodes(), dragged, drop, this.canDrop()) ? drop : null;\n }\n\n #moveByKey(key: string): boolean {\n const value: TValue | null = this.#highlighted();\n if (!MOVE_KEYS.includes(key)) {\n return false;\n }\n const node: IRtTree.Node<TValue> | undefined = this.rows().find(\n (row: IRtTree.Row<TValue>): boolean => row.option.value === value\n )?.option;\n const drop: IRtDraggableTree.Drop<TValue> | null = node && !node.disabled ? rtDragKeyPlace(this.nodes(), node.value, key) : null;\n if (node && drop && rtDragAllowed(this.nodes(), node.value, drop, this.canDrop())) {\n this.#apply(node.value, drop);\n }\n return true;\n }\n\n #walkByKey(key: string): boolean {\n const rows: ReadonlyArray<IRtTree.Row<TValue>> = this.rows();\n const index: number = rows.findIndex((row: IRtTree.Row<TValue>): boolean => row.option.value === this.#highlighted());\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n return this.#step(rows, index, key === 'ArrowDown' ? 1 : -1);\n }\n if (index < 0) {\n return false;\n }\n if (key === 'ArrowRight' || key === 'ArrowLeft') {\n const answer: IRtOptionTree.SideKeyAnswer<TValue> = rtTreeSideKey(rows, index, key);\n if (answer.toggle !== null) {\n this.#toggle(answer.toggle);\n }\n this.#highlighted.set(rows[answer.index].option.value);\n return true;\n }\n if (key === 'Enter') {\n this.picked.emit(rows[index].option);\n return true;\n }\n return false;\n }\n\n #step(rows: ReadonlyArray<IRtTree.Row<TValue>>, index: number, step: number): boolean {\n if (rows.length === 0) {\n return false;\n }\n const next: number = index < 0 ? 0 : Math.min(rows.length - 1, Math.max(0, index + step));\n this.#highlighted.set(rows[next].option.value);\n return true;\n }\n\n #apply(value: TValue, drop: IRtDraggableTree.Drop<TValue>): void {\n const result: IRtDraggableTree.MoveResult<TValue> | null = rtDragMove(this.nodes(), value, drop);\n if (!result) {\n return;\n }\n this.nodes.set(result.nodes);\n if (drop.place === 'inside' && !this.openBranches().has(drop.target)) {\n this.open.set([...this.openBranches(), drop.target]);\n }\n this.moved.emit(result.moved);\n }\n\n #toggle(value: TValue): void {\n this.open.set([...rtTreeToggle(this.openBranches(), value)]);\n }\n\n #collectBranches(list: ReadonlyArray<IRtTree.Node<TValue>>, into: Set<TValue>): void {\n list.forEach((node: IRtTree.Node<TValue>): void => {\n if ((node.children ?? []).length > 0) {\n into.add(node.value);\n this.#collectBranches(node.children ?? [], into);\n }\n });\n }\n}\n","<ng-container rtBlock=\"rt-draggable-tree\">\n <!--\n Строки берут мышь через (click), клавиатура — на самом дереве (handleKeydown): строки фокус не\n берут, подсвеченная строка — состояние рядом с фокусом. Строку тянут за ручку; список один на\n всё дерево, и место сброса считает компонент по рамке строки под указателем.\n -->\n <!-- eslint-disable @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div rtElem=\"list\" cdkDropList [cdkDropListSortingDisabled]=\"true\" (cdkDropListDropped)=\"onDropped()\">\n @for (row of rows(); track row.option.value) {\n <div\n #row\n rtElem=\"row\"\n qa-dataid=\"draggable-tree-row\"\n role=\"treeitem\"\n cdkDrag\n [cdkDragData]=\"row.option.value\"\n [cdkDragDisabled]=\"!!row.option.disabled\"\n [attr.data-value]=\"row.option.value\"\n [attr.aria-level]=\"row.level + 1\"\n [attr.aria-expanded]=\"row.branch ? row.open : null\"\n [attr.aria-selected]=\"row.option.value === highlighted()\"\n [attr.aria-disabled]=\"!!row.option.disabled\"\n [style.--rt-draggable-tree-level]=\"row.level\"\n [rtMod]=\"{\n highlighted: row.option.value === highlighted(),\n disabled: !!row.option.disabled,\n 'drop-before': drop()?.target === row.option.value && drop()?.place === 'before',\n 'drop-after': drop()?.target === row.option.value && drop()?.place === 'after',\n 'drop-inside': drop()?.target === row.option.value && drop()?.place === 'inside',\n }\"\n (cdkDragStarted)=\"onDragStarted(row.option.value)\"\n (cdkDragMoved)=\"onDragMoved($event)\"\n (click)=\"onRowClick(row)\">\n @if (row.option.disabled) {\n <span rtElem=\"handle-space\"></span>\n } @else {\n <span rtElem=\"handle\" qa-dataid=\"draggable-tree-handle\" cdkDragHandle aria-hidden=\"true\">\n <rt-icon name=\"bars\" size=\"sm\" color=\"muted\" />\n </span>\n }\n\n @if (row.branch) {\n <button\n rtElem=\"toggle\"\n qa-dataid=\"draggable-tree-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"row.open ? t().uiCollapse : t().uiExpand\"\n (click)=\"onToggleClick($event, row.option.value)\">\n <rt-icon size=\"sm\" color=\"muted\" [name]=\"row.open ? 'chevron-down' : 'chevron-right'\" />\n </button>\n } @else {\n <span rtElem=\"toggle-space\"></span>\n }\n\n <span rtElem=\"content\" qa-dataid=\"draggable-tree-content\">\n @if (nodeTemplate(); as template) {\n <ng-container [ngTemplateOutlet]=\"template.templateRef\" [ngTemplateOutletContext]=\"{ $implicit: row.option }\" />\n } @else {\n <span rtElem=\"label\" qa-dataid=\"draggable-tree-label\" rtTooltipWhenTruncated [rtTooltip]=\"row.option.label\">\n {{ row.option.label }}\n </span>\n }\n </span>\n </div>\n } @empty {\n <div rtElem=\"empty\" qa-dataid=\"draggable-tree-empty\" [rtMod]=\"{ 'with-icon': !!emptyIcon() }\">\n @if (emptyIcon(); as icon) {\n <rt-icon rtElem=\"empty-icon\" qa-dataid=\"draggable-tree-empty-icon\" size=\"lg\" [name]=\"icon\" />\n }\n {{ t().uiNoOptions }}\n </div>\n }\n </div>\n</ng-container>\n"],"mappings":"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"}
@@ -321,7 +321,8 @@ var RtDynamicSelectorListComponent = class RtDynamicSelectorListComponent {
321
321
  "rtTooltipPlacement",
322
322
  "rtTooltipShowDelay",
323
323
  "rtTooltipWhenTruncated",
324
- "rtTooltipHideOnClick"
324
+ "rtTooltipHideOnClick",
325
+ "rtTooltipShowOnTap"
325
326
  ],
326
327
  exportAs: ["rtTooltip"]
327
328
  }
@@ -1826,7 +1827,8 @@ var RtDynamicSelectorPopupComponent = class RtDynamicSelectorPopupComponent {
1826
1827
  "rtTooltipPlacement",
1827
1828
  "rtTooltipShowDelay",
1828
1829
  "rtTooltipWhenTruncated",
1829
- "rtTooltipHideOnClick"
1830
+ "rtTooltipHideOnClick",
1831
+ "rtTooltipShowOnTap"
1830
1832
  ],
1831
1833
  exportAs: ["rtTooltip"]
1832
1834
  }