@rt-tools/ui-kit-v2 0.23.3 → 0.24.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-accordion.mjs +142 -71
- package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs +467 -231
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +260 -91
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs +80 -46
- package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +984 -697
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +452 -210
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs +143 -52
- package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs +158 -83
- package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +335 -0
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs +437 -363
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +430 -149
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-card.mjs +155 -71
- package/fesm2022/rt-tools-ui-kit-v2-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-carousel.mjs +155 -0
- package/fesm2022/rt-tools-ui-kit-v2-carousel.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +215 -110
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs +158 -75
- package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +769 -0
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs +462 -253
- package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs +1276 -1316
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +185 -80
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +2321 -2619
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs +100 -44
- package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-counter.mjs +290 -155
- package/fesm2022/rt-tools-ui-kit-v2-counter.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +2097 -858
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +2247 -1176
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +1043 -705
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +810 -525
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs +158 -138
- package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs +177 -67
- package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs +550 -477
- package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs +185 -168
- package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs +116 -43
- package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +585 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +755 -259
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +3266 -1115
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs +190 -55
- package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +283 -103
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +393 -177
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +399 -207
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs +288 -212
- package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs +262 -116
- package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs +57 -31
- package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +258 -90
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +249 -215
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-header.mjs +199 -71
- package/fesm2022/rt-tools-ui-kit-v2-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +231 -0
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +336 -0
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +451 -162
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +931 -686
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs +664 -491
- package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +574 -222
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs +150 -36
- package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +606 -0
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +461 -355
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +338 -143
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs +135 -48
- package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-logo.mjs +166 -92
- package/fesm2022/rt-tools-ui-kit-v2-logo.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs +118 -56
- package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1054 -527
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs +230 -104
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs +210 -70
- package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +532 -311
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs +125 -50
- package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-note.mjs +73 -43
- package/fesm2022/rt-tools-ui-kit-v2-note.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs +161 -53
- package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +491 -310
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +374 -174
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs +202 -159
- package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-popover.mjs +438 -309
- package/fesm2022/rt-tools-ui-kit-v2-popover.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs +295 -0
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs +135 -45
- package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +293 -171
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-radius.mjs +62 -55
- package/fesm2022/rt-tools-ui-kit-v2-radius.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +3379 -1466
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs +114 -116
- package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +406 -299
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs +137 -36
- package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +687 -468
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +2195 -1569
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs +187 -48
- package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs +242 -122
- package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +439 -0
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs +218 -69
- package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs +292 -91
- package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +225 -138
- package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +150 -116
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2462 -1583
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +647 -346
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +335 -121
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +217 -84
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +151 -72
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +697 -226
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs +92 -38
- package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +752 -338
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +310 -129
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs +286 -158
- package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +270 -134
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +322 -202
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +908 -0
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +785 -0
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs +118 -63
- package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +783 -262
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +633 -294
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +100 -103
- package/package.json +45 -1
- package/src/assets/icons/collapse-all.svg +9 -0
- package/src/assets/icons/expand-all.svg +9 -0
- package/src/assets/icons-material/collapse-all.fill.svg +5 -0
- package/src/assets/icons-material/collapse-all.svg +5 -0
- package/src/assets/icons-material/expand-all.fill.svg +5 -0
- package/src/assets/icons-material/expand-all.svg +5 -0
- package/src/assets/icons-material/undo.fill.svg +5 -0
- package/src/assets/icons-material/undo.svg +5 -0
- package/src/lib/components/bottom-sheet/CONTEXT.md +20 -2
- package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +36 -1
- package/src/lib/components/breadcrumbs/CONTEXT.md +37 -0
- package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +205 -0
- package/src/lib/components/carousel/CONTEXT.md +42 -0
- package/src/lib/components/carousel/rt-carousel.component.scss +117 -0
- package/src/lib/components/checkbox/CONTEXT.md +3 -0
- package/src/lib/components/checkbox/rt-checkbox.component.scss +9 -3
- package/src/lib/components/color-palette/CONTEXT.md +49 -0
- package/src/lib/components/color-palette/picker/rt-color-picker.component.scss +161 -0
- package/src/lib/components/color-palette/rt-color-palette.component.scss +132 -0
- package/src/lib/components/draggable-tree/CONTEXT.md +54 -0
- package/src/lib/components/draggable-tree/rt-draggable-tree.component.scss +219 -0
- package/src/lib/components/hybrid-tree/CONTEXT.md +31 -0
- package/src/lib/components/hybrid-tree-selector/CONTEXT.md +25 -0
- package/src/lib/components/icon-button/CONTEXT.md +3 -0
- package/src/lib/components/inline-edit/CONTEXT.md +41 -0
- package/src/lib/components/inline-edit/rt-inline-edit.component.scss +274 -0
- package/src/lib/components/popover/CONTEXT.md +3 -0
- package/src/lib/components/profile-menu/CONTEXT.md +32 -0
- package/src/lib/components/profile-menu/rt-profile-menu.component.scss +104 -0
- package/src/lib/components/speed-menu/CONTEXT.md +34 -0
- package/src/lib/components/speed-menu/rt-speed-menu.component.scss +118 -0
- package/src/lib/components/tag/rt-tag.component.scss +12 -0
- package/src/lib/components/thread-list/CONTEXT.md +1 -0
- package/src/lib/components/thread-list/rt-thread-list.component.scss +2 -1
- package/src/lib/components/toolbar/CONTEXT.md +9 -4
- package/src/lib/components/toolbar/rt-toolbar.component.scss +10 -2
- package/src/lib/components/tooltip/CONTEXT.md +8 -1
- package/src/lib/components/tree/CONTEXT.md +66 -0
- package/src/lib/components/tree/rt-tree.component.scss +313 -0
- package/src/lib/components/tree-selector/CONTEXT.md +47 -0
- package/src/lib/components/tree-selector/rt-tree-selector.component.scss +121 -0
- package/src/styles/_primitives.scss +4 -0
- package/src/styles/_semantic.scss +5 -0
- package/styles/tokens.css +43 -0
- package/types/rt-tools-ui-kit-v2-accordion.d.ts +31 -24
- package/types/rt-tools-ui-kit-v2-action-bar.d.ts +112 -91
- package/types/rt-tools-ui-kit-v2-ai-run-status.d.ts +64 -40
- package/types/rt-tools-ui-kit-v2-aside-section.d.ts +13 -10
- package/types/rt-tools-ui-kit-v2-aside.d.ts +268 -206
- package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +102 -61
- package/types/rt-tools-ui-kit-v2-bar-list.d.ts +39 -27
- package/types/rt-tools-ui-kit-v2-bottom-sheet.d.ts +31 -20
- package/types/rt-tools-ui-kit-v2-breadcrumbs.d.ts +89 -0
- package/types/rt-tools-ui-kit-v2-button.d.ts +119 -59
- package/types/rt-tools-ui-kit-v2-calendar.d.ts +151 -86
- package/types/rt-tools-ui-kit-v2-card.d.ts +42 -21
- package/types/rt-tools-ui-kit-v2-carousel.d.ts +76 -0
- package/types/rt-tools-ui-kit-v2-checkbox.d.ts +48 -24
- package/types/rt-tools-ui-kit-v2-collapsible-text.d.ts +28 -20
- package/types/rt-tools-ui-kit-v2-color-palette.d.ts +208 -0
- package/types/rt-tools-ui-kit-v2-confirm-popover.d.ts +104 -47
- package/types/rt-tools-ui-kit-v2-container.d.ts +278 -221
- package/types/rt-tools-ui-kit-v2-copy-value.d.ts +39 -24
- package/types/rt-tools-ui-kit-v2-core.d.ts +862 -865
- package/types/rt-tools-ui-kit-v2-counter-row.d.ts +20 -12
- package/types/rt-tools-ui-kit-v2-counter.d.ts +70 -38
- package/types/rt-tools-ui-kit-v2-data-list.d.ts +429 -264
- package/types/rt-tools-ui-kit-v2-data-table.d.ts +500 -351
- package/types/rt-tools-ui-kit-v2-date-picker.d.ts +164 -138
- package/types/rt-tools-ui-kit-v2-date-range.d.ts +102 -84
- package/types/rt-tools-ui-kit-v2-delta-view.d.ts +16 -13
- package/types/rt-tools-ui-kit-v2-detail-list.d.ts +23 -16
- package/types/rt-tools-ui-kit-v2-dialog.d.ts +130 -101
- package/types/rt-tools-ui-kit-v2-dot-field.d.ts +10 -13
- package/types/rt-tools-ui-kit-v2-download-link.d.ts +22 -17
- package/types/rt-tools-ui-kit-v2-draggable-tree.d.ts +132 -0
- package/types/rt-tools-ui-kit-v2-dynamic-list.d.ts +185 -96
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +904 -404
- package/types/rt-tools-ui-kit-v2-empty-state.d.ts +48 -19
- package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +67 -39
- package/types/rt-tools-ui-kit-v2-field.d.ts +90 -49
- package/types/rt-tools-ui-kit-v2-file-card.d.ts +115 -75
- package/types/rt-tools-ui-kit-v2-file-drop.d.ts +75 -48
- package/types/rt-tools-ui-kit-v2-file-input.d.ts +53 -36
- package/types/rt-tools-ui-kit-v2-file-list.d.ts +5 -8
- package/types/rt-tools-ui-kit-v2-filter-control.d.ts +83 -49
- package/types/rt-tools-ui-kit-v2-form-control.d.ts +102 -74
- package/types/rt-tools-ui-kit-v2-header.d.ts +40 -22
- package/types/rt-tools-ui-kit-v2-hybrid-tree-selector.d.ts +14 -0
- package/types/rt-tools-ui-kit-v2-hybrid-tree.d.ts +72 -0
- package/types/rt-tools-ui-kit-v2-icon-button.d.ts +190 -90
- package/types/rt-tools-ui-kit-v2-icon.d.ts +160 -129
- package/types/rt-tools-ui-kit-v2-image-cropper.d.ts +151 -111
- package/types/rt-tools-ui-kit-v2-image-upload.d.ts +159 -85
- package/types/rt-tools-ui-kit-v2-info-item.d.ts +26 -13
- package/types/rt-tools-ui-kit-v2-inline-edit.d.ts +194 -0
- package/types/rt-tools-ui-kit-v2-input-number.d.ts +102 -53
- package/types/rt-tools-ui-kit-v2-input.d.ts +82 -43
- package/types/rt-tools-ui-kit-v2-live-badge.d.ts +30 -17
- package/types/rt-tools-ui-kit-v2-logo.d.ts +49 -32
- package/types/rt-tools-ui-kit-v2-markdown-text.d.ts +26 -17
- package/types/rt-tools-ui-kit-v2-menu.d.ts +272 -155
- package/types/rt-tools-ui-kit-v2-message.d.ts +59 -33
- package/types/rt-tools-ui-kit-v2-money-list.d.ts +36 -18
- package/types/rt-tools-ui-kit-v2-multiselect.d.ts +114 -80
- package/types/rt-tools-ui-kit-v2-night-grid.d.ts +34 -25
- package/types/rt-tools-ui-kit-v2-note.d.ts +12 -9
- package/types/rt-tools-ui-kit-v2-notifications-bell.d.ts +37 -16
- package/types/rt-tools-ui-kit-v2-page-header.d.ts +218 -150
- package/types/rt-tools-ui-kit-v2-pagination.d.ts +99 -63
- package/types/rt-tools-ui-kit-v2-photo-viewer.d.ts +61 -66
- package/types/rt-tools-ui-kit-v2-popover.d.ts +116 -55
- package/types/rt-tools-ui-kit-v2-profile-menu.d.ts +103 -0
- package/types/rt-tools-ui-kit-v2-prompt-suggestion.d.ts +26 -16
- package/types/rt-tools-ui-kit-v2-radio-button.d.ts +85 -43
- package/types/rt-tools-ui-kit-v2-radius.d.ts +18 -15
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +931 -590
- package/types/rt-tools-ui-kit-v2-ripple.d.ts +28 -25
- package/types/rt-tools-ui-kit-v2-scroll-area.d.ts +60 -58
- package/types/rt-tools-ui-kit-v2-section-nav.d.ts +32 -22
- package/types/rt-tools-ui-kit-v2-select.d.ts +182 -139
- package/types/rt-tools-ui-kit-v2-side-menu.d.ts +452 -349
- package/types/rt-tools-ui-kit-v2-skeleton-wrapper.d.ts +53 -20
- package/types/rt-tools-ui-kit-v2-skeleton.d.ts +55 -26
- package/types/rt-tools-ui-kit-v2-speed-menu.d.ts +131 -0
- package/types/rt-tools-ui-kit-v2-spinner.d.ts +56 -28
- package/types/rt-tools-ui-kit-v2-split-button.d.ts +96 -55
- package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +88 -60
- package/types/rt-tools-ui-kit-v2-stepper.d.ts +50 -37
- package/types/rt-tools-ui-kit-v2-table.d.ts +631 -480
- package/types/rt-tools-ui-kit-v2-tabs.d.ts +198 -113
- package/types/rt-tools-ui-kit-v2-tag.d.ts +106 -53
- package/types/rt-tools-ui-kit-v2-textarea.d.ts +48 -25
- package/types/rt-tools-ui-kit-v2-theme-toggle.d.ts +28 -26
- package/types/rt-tools-ui-kit-v2-thread-list.d.ts +154 -94
- package/types/rt-tools-ui-kit-v2-timeline.d.ts +30 -28
- package/types/rt-tools-ui-kit-v2-toast.d.ts +174 -98
- package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +132 -86
- package/types/rt-tools-ui-kit-v2-toggle-switch.d.ts +88 -50
- package/types/rt-tools-ui-kit-v2-toolbar.d.ts +30 -27
- package/types/rt-tools-ui-kit-v2-tooltip.d.ts +65 -41
- package/types/rt-tools-ui-kit-v2-tree-selector.d.ts +257 -0
- package/types/rt-tools-ui-kit-v2-tree.d.ts +282 -0
- package/types/rt-tools-ui-kit-v2-welcome-dialog.d.ts +21 -24
- package/types/rt-tools-ui-kit-v2-workspace-details.d.ts +195 -124
- package/types/rt-tools-ui-kit-v2-workspace.d.ts +122 -79
- package/types/rt-tools-ui-kit-v2.d.ts +100 -90
- package/fesm2022/rt-tools-ui-kit-v2.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-tabs.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tab.directive.ts","../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tabs-control.directive.ts","../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tabs.component.ts","../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tabs.component.html","../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tools-ui-kit-v2-tabs.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n TemplateRef,\n} from '@angular/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { IRtTabs } from './rt-tabs.model';\n\n/**\n * Декларирует одну вкладку `<rt-tabs>`. Ставится на `<ng-template>`: контент\n * шаблона становится телом панели и рендерится только когда вкладка активна.\n *\n * Метаданные (label, icon, disabled, badge, invalid) — signal-inputs, поэтому\n * шапка вкладки реагирует на их изменение без ручной перерегистрации. Сам\n * список вкладок `rt-tabs` собирает через `contentChildren`.\n */\n@Directive({\n selector: '[rtTab]',\n})\nexport class RtTabDirective {\n readonly #t_uiTabInvalid: Signal<string> = rtKitLabel('uiTabInvalid');\n\n /** Шаблон тела панели — рендерится в области контента при активной вкладке. */\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n\n /** Стабильный идентификатор вкладки (значение атрибута `rtTab`). */\n public readonly id: InputSignal<IRtTabs.Id> = input<IRtTabs.Id>('', { alias: 'rtTab' });\n\n /** Текстовый заголовок. Игнорируется, если задан `titleTemplate`. */\n public readonly label: InputSignal<string> = input<string>('');\n\n /** Кастомный шаблон заголовка — замещает `label`. */\n public readonly titleTemplate: InputSignal<TemplateRef<unknown> | null> = input<TemplateRef<unknown> | null>(null);\n\n /** Иконка слева от заголовка. */\n public readonly icon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Семантический цвет иконки заголовка. */\n public readonly iconColor: InputSignal<IRtTabs.TitleColor> = input<IRtTabs.TitleColor>('current');\n\n /** Значение бейджа справа от заголовка (число/строка). `null` — без бейджа. */\n public readonly badge: InputSignal<string | number | null> = input<string | number | null>(null);\n\n /**\n * Подсказка при наведении на бейдж. Подсказка самой кнопки занята неверной вкладкой,\n * поэтому у бейджа своя. Пусто — подсказки нет.\n */\n public readonly badgeTitle: InputSignal<string> = input<string>('');\n\n /**\n * Подпись бейджа для чтения с экрана: точка или число сами по себе не говорят, что значат.\n * Пусто — атрибут не ставится, и озвучивается значение бейджа как есть.\n */\n public readonly badgeAriaLabel: InputSignal<string> = input<string>('');\n\n /** Заблокированная вкладка: не выбирается и не получает фокус. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Скрытая вкладка: не рендерится ни в шапке, ни в контенте. */\n public readonly hidden: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Вкладка с ошибками: подсвечивается danger-цветом. */\n public readonly invalid: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Подсказка для невалидной вкладки. Пусто — берётся переведённое умолчание. */\n public readonly invalidMessage: InputSignal<string> = input<string>('');\n\n /** Готовый текст подсказки: своя формулировка важнее умолчания. */\n public readonly invalidTitle: Signal<string> = computed((): string => this.invalidMessage() || this.#t_uiTabInvalid());\n}\n","import { Directive, inject, input, InputSignalWithTransform, TemplateRef } from '@angular/core';\n\nimport { IRtTabs } from './rt-tabs.model';\n\n/**\n * Декларирует header-контрол `<rt-tabs>` — произвольный шаблон (кнопка, фильтр),\n * который рендерится слева или справа от полосы вкладок. Ставится на\n * `<ng-template>`; `rt-tabs` собирает контролы через `contentChildren` и\n * раскладывает по сторонам согласно `side`.\n */\n@Directive({\n selector: '[rtTabsControl]',\n})\nexport class RtTabsControlDirective {\n /** Шаблон контрола, выводимый в header-слоте. */\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n\n /**\n * Сторона размещения относительно полосы вкладок.\n *\n * Пустое значение приводится к правой стороне: `<ng-template rtTabsControl>` без значения\n * задаёт входу пустую строку, а не умолчание, и такой контрол не попадал ни в левый слот,\n * ни в правый — он пропадал из шапки вовсе.\n */\n public readonly side: InputSignalWithTransform<IRtTabs.ControlSide, IRtTabs.ControlSide | ''> = input<\n IRtTabs.ControlSide,\n IRtTabs.ControlSide | ''\n >('right', {\n alias: 'rtTabsControl',\n transform: (value: IRtTabs.ControlSide | ''): IRtTabs.ControlSide => (value === '' ? 'right' : value),\n });\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { debounceTime, fromEvent } from 'rxjs';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { RtTabDirective } from './rt-tab.directive';\nimport { RtTabsControlDirective } from './rt-tabs-control.directive';\nimport { IRtTabs } from './rt-tabs.model';\n\n/** Шаг ручной прокрутки полосы вкладок за один тик удержания стрелки (px). */\nconst SCROLL_STEP: number = 12;\n\n/** Интервал тика прокрутки при зажатой стрелке (мс). */\nconst SCROLL_TICK_MS: number = 15;\n\n/** Дебаунс пересчёта видимости стрелок прокрутки на resize/scroll (мс). */\nconst REST_DEBOUNCE_MS: number = 50;\n\nconst BEM_BLOCK: string = 'rt-tabs';\n\ntype TScrollDirection = 'before' | 'after';\n\n/**\n * Полоса вкладок с проекцией контента. Вкладки декларируются через\n * `<ng-template rtTab=\"id\" label=\"…\">…</ng-template>` (см. {@link RtTabDirective}),\n * собираются `contentChildren` и рендерятся как header-кнопки + активная панель.\n * Опциональные header-контролы — через `[rtTabsControl]`.\n *\n * Компонент \"controlled-ish\": активная вкладка берётся из `activeId` (если\n * задан), иначе — из внутреннего выбора, иначе — первая доступная. Клик/клавиша\n * эмиттят `activeIdChange`; синхронизацию `activeId` оставляем потребителю.\n *\n * Горизонтальная полоса при переполнении прячет вкладки под скролл и показывает\n * стрелки-«хвосты» (`__rest`) с прокруткой по удержанию. Вертикальная ориентация\n * раскладывает вкладки в колонку без стрелок.\n *\n * Доступность: `role=\"tablist\"`/`role=\"tab\"`/`role=\"tabpanel\"`, `aria-selected`,\n * roving `tabindex`, навигация стрелками + Home/End.\n */\n@Component({\n selector: 'rt-tabs',\n templateUrl: './rt-tabs.component.html',\n styleUrl: './rt-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // angular\n NgTemplateOutlet,\n\n // standalone components / directives\n RtIconComponent,\n RtTooltipDirective,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n host: {\n class: BEM_BLOCK,\n '[class.rt-tabs--direction--horizontal]': \"direction() === 'horizontal'\",\n '[class.rt-tabs--direction--vertical]': \"direction() === 'vertical'\",\n },\n})\nexport class RtTabsComponent {\n /** `Window` через `DOCUMENT` (SSR-safe: `defaultView` может быть `null`). */\n readonly #win: Window | null = inject(DOCUMENT).defaultView;\n\n /** Все задекларированные вкладки (включая скрытые). */\n protected readonly tabs: Signal<readonly RtTabDirective[]> = contentChildren(RtTabDirective);\n\n /** Все header-контролы. */\n protected readonly controls: Signal<readonly RtTabsControlDirective[]> = contentChildren(RtTabsControlDirective);\n\n /** Видимые вкладки (без `hidden`). */\n protected readonly visibleTabs: Signal<readonly RtTabDirective[]> = computed((): readonly RtTabDirective[] =>\n this.tabs().filter((tab: RtTabDirective): boolean => !tab.hidden())\n );\n\n protected readonly leftControls: Signal<readonly RtTabsControlDirective[]> = computed((): readonly RtTabsControlDirective[] =>\n this.controls().filter((c: RtTabsControlDirective): boolean => c.side() === 'left')\n );\n\n protected readonly rightControls: Signal<readonly RtTabsControlDirective[]> = computed((): readonly RtTabsControlDirective[] =>\n this.controls().filter((c: RtTabsControlDirective): boolean => c.side() === 'right')\n );\n\n /**\n * Эффективный id активной вкладки. Приоритет: контролируемый `activeId` →\n * внутренний выбор → первая доступная. Кандидат валидируется по множеству\n * видимых незаблокированных вкладок, поэтому корректно реагирует на\n * асинхронную загрузку/смену набора вкладок.\n */\n protected readonly selectedId: Signal<IRtTabs.Id | null> = computed((): IRtTabs.Id | null => {\n const enabled: readonly RtTabDirective[] = this.visibleTabs().filter((tab: RtTabDirective): boolean => !tab.disabled());\n const candidate: IRtTabs.Id | null = this.activeId() ?? this.#internalId();\n const candidateValid: boolean = candidate !== null && enabled.some((tab: RtTabDirective): boolean => tab.id() === candidate);\n\n let result: IRtTabs.Id | null;\n if (candidateValid) {\n result = candidate;\n } else if (enabled.length) {\n result = enabled[0].id();\n } else {\n result = null;\n }\n\n return result;\n });\n\n /** Активная вкладка целиком (для рендера панели). */\n protected readonly activeTab: Signal<RtTabDirective | null> = computed(\n (): RtTabDirective | null => this.visibleTabs().find((tab: RtTabDirective): boolean => tab.id() === this.selectedId()) ?? null\n );\n\n /** Видны ли стрелки прокрутки слева/справа (только горизонтальная полоса). */\n protected readonly restBeforeVisible: WritableSignal<boolean> = signal(false);\n protected readonly restAfterVisible: WritableSignal<boolean> = signal(false);\n\n protected readonly tabListRef: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('tabList');\n\n /** Контролируемый активный id. `null` — компонент сам выбирает первую вкладку. */\n public readonly activeId: InputSignal<IRtTabs.Id | null> = input<IRtTabs.Id | null>(null);\n\n /** Ориентация полосы. */\n public readonly direction: InputSignal<IRtTabs.Direction> = input<IRtTabs.Direction>('horizontal');\n\n /** Растягивать вкладки на всю ширину полосы. */\n public readonly stretch: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Скроллить область контента при переполнении. */\n public readonly contentScrollable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n\n /** Эмиттит id вкладки при её выборе (клик/клавиатура). */\n public readonly activeIdChange: OutputEmitterRef<IRtTabs.Id> = output<IRtTabs.Id>();\n\n /** Внутренний выбор (uncontrolled-ветка). */\n readonly #internalId: WritableSignal<IRtTabs.Id | null> = signal<IRtTabs.Id | null>(null);\n\n /** Хэндл интервала прокрутки по удержанию стрелки. */\n #scrollIntervalId: number | null = null;\n\n constructor() {\n if (this.#win) {\n fromEvent(this.#win, 'resize')\n .pipe(debounceTime(REST_DEBOUNCE_MS), takeUntilDestroyed())\n .subscribe((): void => this.#updateRestVisibility());\n }\n\n afterNextRender((): void => this.#updateRestVisibility());\n\n // Снимаем hold-scroll интервал при уничтожении: если компонент разрушить\n // с зажатой стрелкой (pointerdown без pointerup), интервал остался бы жив.\n inject(DestroyRef).onDestroy((): void => this.#clearScrollInterval());\n }\n\n protected selectTab(id: IRtTabs.Id): void {\n const target: RtTabDirective | undefined = this.visibleTabs().find((tab: RtTabDirective): boolean => tab.id() === id);\n\n if (!target || target.disabled()) {\n return;\n }\n\n this.#internalId.set(id);\n this.activeIdChange.emit(id);\n this.#scrollTabIntoView(id);\n }\n\n /** Навигация по вкладкам с клавиатуры (automatic activation). */\n protected onTabKeydown(event: KeyboardEvent): void {\n const enabled: readonly RtTabDirective[] = this.visibleTabs().filter((tab: RtTabDirective): boolean => !tab.disabled());\n\n if (!enabled.length) {\n return;\n }\n\n const isVertical: boolean = this.direction() === 'vertical';\n const nextKey: string = isVertical ? 'ArrowDown' : 'ArrowRight';\n const prevKey: string = isVertical ? 'ArrowUp' : 'ArrowLeft';\n const currentIndex: number = enabled.findIndex((tab: RtTabDirective): boolean => tab.id() === this.selectedId());\n\n // Карта клавиша → целевой индекс (без if/else-if цепочки).\n const moveByKey: ReadonlyMap<string, number> = new Map<string, number>([\n [nextKey, (currentIndex + 1) % enabled.length],\n [prevKey, (currentIndex - 1 + enabled.length) % enabled.length],\n ['Home', 0],\n ['End', enabled.length - 1],\n ]);\n\n const targetIndex: number | undefined = moveByKey.get(event.key);\n\n if (targetIndex === undefined) {\n return;\n }\n\n event.preventDefault();\n const targetId: IRtTabs.Id = enabled[targetIndex].id();\n this.selectTab(targetId);\n this.#focusTab(targetId);\n }\n\n /** Старт прокрутки полосы по удержанию ЛКМ на стрелке. */\n protected onRestPointerDown(direction: TScrollDirection, event: MouseEvent): void {\n if (event.button !== 0 || this.#scrollIntervalId !== null || !this.#win) {\n return;\n }\n\n this.#scrollIntervalId = this.#win.setInterval((): void => {\n this.#scrollStep(direction);\n this.#updateRestVisibility();\n }, SCROLL_TICK_MS);\n }\n\n protected onRestPointerUp(): void {\n this.#clearScrollInterval();\n }\n\n protected onTabListScroll(): void {\n this.#updateRestVisibility();\n }\n\n #clearScrollInterval(): void {\n if (this.#win && this.#scrollIntervalId !== null) {\n this.#win.clearInterval(this.#scrollIntervalId);\n this.#scrollIntervalId = null;\n }\n }\n\n #scrollStep(direction: TScrollDirection): void {\n const list: HTMLElement | undefined = this.tabListRef()?.nativeElement;\n if (!list) {\n return;\n }\n\n const scrolledLeft: number = list.scrollLeft;\n const scrolledRight: number = list.scrollWidth - list.scrollLeft - list.clientWidth;\n const remaining: number = direction === 'before' ? scrolledLeft : scrolledRight;\n\n if (remaining > 0) {\n list.scrollBy(direction === 'before' ? -SCROLL_STEP : SCROLL_STEP, 0);\n }\n\n if (remaining - SCROLL_STEP <= 0) {\n this.#clearScrollInterval();\n }\n }\n\n #updateRestVisibility(): void {\n const list: HTMLElement | undefined = this.tabListRef()?.nativeElement;\n\n if (!list || this.direction() !== 'horizontal') {\n this.restBeforeVisible.set(false);\n this.restAfterVisible.set(false);\n return;\n }\n\n const scrolledRight: number = list.scrollWidth - list.scrollLeft - list.clientWidth;\n\n this.restBeforeVisible.set(list.scrollLeft > 0);\n // 1px — погрешность субпиксельного scrollWidth\n this.restAfterVisible.set(scrolledRight > 1);\n }\n\n #scrollTabIntoView(id: IRtTabs.Id): void {\n const list: HTMLElement | undefined = this.tabListRef()?.nativeElement;\n const tab: HTMLElement | null | undefined = list?.querySelector<HTMLElement>(`[data-tabid=\"${id}\"]`);\n\n if (!list || !tab) {\n return;\n }\n\n const viewLeft: number = list.scrollLeft;\n const viewRight: number = list.scrollLeft + list.clientWidth;\n\n if (tab.offsetLeft < viewLeft) {\n list.scrollTo({ left: tab.offsetLeft });\n } else if (tab.offsetLeft + tab.offsetWidth > viewRight) {\n list.scrollTo({ left: tab.offsetLeft + tab.offsetWidth - list.clientWidth });\n } else {\n // вкладка целиком в зоне видимости — прокрутка не нужна\n }\n }\n\n #focusTab(id: IRtTabs.Id): void {\n const list: HTMLElement | undefined = this.tabListRef()?.nativeElement;\n list?.querySelector<HTMLElement>(`[data-tabid=\"${id}\"]`)?.focus();\n }\n}\n","<ng-container rtBlock=\"rt-tabs\">\n <div rtElem=\"header\">\n @if (leftControls().length) {\n <div rtElem=\"controls\" [rtMod]=\"{ before: true }\">\n @for (control of leftControls(); track $index) {\n <ng-container [ngTemplateOutlet]=\"control.templateRef\" />\n }\n </div>\n }\n\n <div rtElem=\"tab-list-wrapper\">\n <div\n rtElem=\"rest\"\n qa-dataid=\"tabs-scroll-prev\"\n [rtMod]=\"{ before: true, visible: restBeforeVisible() }\"\n (mousedown)=\"onRestPointerDown('before', $event)\"\n (mouseup)=\"onRestPointerUp()\"\n (mouseleave)=\"onRestPointerUp()\">\n <rt-icon name=\"chevron-left\" color=\"current\" size=\"sm\" />\n </div>\n\n <div\n #tabList\n rtElem=\"tab-list\"\n qa-dataid=\"tabs-tab-list\"\n role=\"tablist\"\n [rtMod]=\"{ stretch: stretch(), direction: direction() }\"\n [attr.aria-orientation]=\"direction()\"\n (scroll)=\"onTabListScroll()\">\n @for (tab of visibleTabs(); track tab.id()) {\n <button\n rtBlock=\"rt-tab-item\"\n qa-dataid=\"tabs-tab\"\n type=\"button\"\n role=\"tab\"\n [rtMod]=\"{\n selected: tab.id() === selectedId(),\n disabled: tab.disabled(),\n invalid: tab.invalid(),\n stretch: stretch(),\n }\"\n [id]=\"'rt-tab-' + tab.id()\"\n [disabled]=\"tab.disabled()\"\n [attr.data-tabid]=\"tab.id()\"\n [attr.aria-selected]=\"tab.id() === selectedId()\"\n [attr.aria-controls]=\"'rt-tabpanel-' + tab.id()\"\n [attr.tabindex]=\"tab.id() === selectedId() ? 0 : -1\"\n [rtTooltip]=\"tab.invalid() ? tab.invalidTitle() : ''\"\n (click)=\"selectTab(tab.id())\"\n (keydown)=\"onTabKeydown($event)\">\n @if (tab.icon(); as icon) {\n <rt-icon rtElem=\"icon\" size=\"sm\" [name]=\"icon\" [color]=\"tab.iconColor()\" />\n }\n\n @if (tab.titleTemplate(); as titleTpl) {\n <ng-container [ngTemplateOutlet]=\"titleTpl\" />\n } @else {\n <span rtElem=\"title\">{{ tab.label() }}</span>\n }\n\n @if (tab.badge() !== null) {\n <!-- В одну строку: перенос внутри добавил бы пробел в текст кнопки. -->\n <!-- prettier-ignore -->\n <span rtElem=\"badge\" [rtTooltip]=\"tab.badgeTitle()\" [attr.aria-label]=\"tab.badgeAriaLabel() || null\">{{ tab.badge() }}</span>\n }\n </button>\n }\n </div>\n\n <div\n rtElem=\"rest\"\n qa-dataid=\"tabs-scroll-next\"\n [rtMod]=\"{ after: true, visible: restAfterVisible() }\"\n (mousedown)=\"onRestPointerDown('after', $event)\"\n (mouseup)=\"onRestPointerUp()\"\n (mouseleave)=\"onRestPointerUp()\">\n <rt-icon name=\"chevron-right\" color=\"current\" size=\"sm\" />\n </div>\n </div>\n\n @if (rightControls().length) {\n <div rtElem=\"controls\" [rtMod]=\"{ after: true }\">\n @for (control of rightControls(); track $index) {\n <ng-container [ngTemplateOutlet]=\"control.templateRef\" />\n }\n </div>\n }\n </div>\n\n @if (activeTab(); as tab) {\n <div\n rtElem=\"content\"\n qa-dataid=\"tabs-panel\"\n role=\"tabpanel\"\n tabindex=\"0\"\n [rtMod]=\"{ scrollable: contentScrollable() }\"\n [id]=\"'rt-tabpanel-' + tab.id()\"\n [attr.aria-labelledby]=\"'rt-tab-' + tab.id()\">\n <ng-container [ngTemplateOutlet]=\"tab.templateRef\" />\n </div>\n }\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAiBA;;;;;;;AAOG;MAIU,cAAc,CAAA;AAH3B,IAAA,WAAA,GAAA;AAIa,QAAA,IAAA,CAAA,eAAe,GAAmB,UAAU,CAAC,cAAc,CAAC;;AAGrD,QAAA,IAAA,CAAA,WAAW,GAAyB,MAAM,CAAuB,WAAW,CAAC;;QAG7E,IAAA,CAAA,EAAE,GAA4B,KAAK,CAAa,EAAE,0EAAI,KAAK,EAAE,OAAO,EAAA,CAAG;;QAGvE,IAAA,CAAA,KAAK,GAAwB,KAAK,CAAS,EAAE;kFAAC;;QAG9C,IAAA,CAAA,aAAa,GAA6C,KAAK,CAA8B,IAAI;0FAAC;;QAGlG,IAAA,CAAA,IAAI,GAAqC,KAAK,CAAsB,IAAI;iFAAC;;QAGzE,IAAA,CAAA,SAAS,GAAoC,KAAK,CAAqB,SAAS;sFAAC;;QAGjF,IAAA,CAAA,KAAK,GAAwC,KAAK,CAAyB,IAAI;kFAAC;AAEhG;;;AAGG;QACa,IAAA,CAAA,UAAU,GAAwB,KAAK,CAAS,EAAE;uFAAC;AAEnE;;;AAGG;QACa,IAAA,CAAA,cAAc,GAAwB,KAAK,CAAS,EAAE;2FAAC;;QAGvD,IAAA,CAAA,QAAQ,GAAoD,KAAK,CAAwB,KAAK,gFAC1G,SAAS,EAAE,gBAAgB,EAAA,CAC7B;;QAGc,IAAA,CAAA,MAAM,GAAoD,KAAK,CAAwB,KAAK,8EACxG,SAAS,EAAE,gBAAgB,EAAA,CAC7B;;QAGc,IAAA,CAAA,OAAO,GAAoD,KAAK,CAAwB,KAAK,+EACzG,SAAS,EAAE,gBAAgB,EAAA,CAC7B;;QAGc,IAAA,CAAA,cAAc,GAAwB,KAAK,CAAS,EAAE;2FAAC;;AAGvD,QAAA,IAAA,CAAA,YAAY,GAAmB,QAAQ,CAAC,MAAc,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;yFAAC;AACzH,IAAA;AAvDY,IAAA,eAAe;8GADf,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,SAAS;AACtB,iBAAA;;;ACvBD;;;;;AAKG;MAIU,sBAAsB,CAAA;AAHnC,IAAA,WAAA,GAAA;;AAKoB,QAAA,IAAA,CAAA,WAAW,GAAyB,MAAM,CAAuB,WAAW,CAAC;AAE7F;;;;;;AAMG;AACa,QAAA,IAAA,CAAA,IAAI,GAA4E,KAAK,CAGnG,OAAO,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EACL,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,CAAC,KAA+B,MAA2B,KAAK,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,GACvG;AACL,IAAA;8GAlBY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC9B,iBAAA;;;ACuBD;AACA,MAAM,WAAW,GAAW,EAAE;AAE9B;AACA,MAAM,cAAc,GAAW,EAAE;AAEjC;AACA,MAAM,gBAAgB,GAAW,EAAE;AAEnC,MAAM,SAAS,GAAW,SAAS;AAInC;;;;;;;;;;;;;;;;AAgBG;MAwBU,eAAe,CAAA;;AAEf,IAAA,IAAI;;AA2EJ,IAAA,WAAW;;AAGpB,IAAA,iBAAiB;AAEjB,IAAA,WAAA,GAAA;;AAhFS,QAAA,IAAA,CAAA,IAAI,GAAkB,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW;;QAGxC,IAAA,CAAA,IAAI,GAAsC,eAAe,CAAC,cAAc;iFAAC;;QAGzE,IAAA,CAAA,QAAQ,GAA8C,eAAe,CAAC,sBAAsB;qFAAC;;QAG7F,IAAA,CAAA,WAAW,GAAsC,QAAQ,CAAC,MACzE,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAmB,KAAc,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wFACtE;QAEkB,IAAA,CAAA,YAAY,GAA8C,QAAQ,CAAC,MAClF,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAyB,KAAc,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;yFACtF;QAEkB,IAAA,CAAA,aAAa,GAA8C,QAAQ,CAAC,MACnF,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAyB,KAAc,CAAC,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC;0FACvF;AAED;;;;;AAKG;AACgB,QAAA,IAAA,CAAA,UAAU,GAA8B,QAAQ,CAAC,MAAwB;YACxF,MAAM,OAAO,GAA8B,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,GAAmB,KAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACvH,MAAM,SAAS,GAAsB,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;YAC1E,MAAM,cAAc,GAAY,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAmB,KAAc,GAAG,CAAC,EAAE,EAAE,KAAK,SAAS,CAAC;AAE5H,YAAA,IAAI,MAAyB;YAC7B,IAAI,cAAc,EAAE;gBAChB,MAAM,GAAG,SAAS;YACtB;AAAO,iBAAA,IAAI,OAAO,CAAC,MAAM,EAAE;gBACvB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B;iBAAO;gBACH,MAAM,GAAG,IAAI;YACjB;AAEA,YAAA,OAAO,MAAM;QACjB,CAAC;uFAAC;;AAGiB,QAAA,IAAA,CAAA,SAAS,GAAkC,QAAQ,CAClE,MAA6B,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,GAAmB,KAAc,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,IAAI;sFACjI;;QAGkB,IAAA,CAAA,iBAAiB,GAA4B,MAAM,CAAC,KAAK;8FAAC;QAC1D,IAAA,CAAA,gBAAgB,GAA4B,MAAM,CAAC,KAAK;6FAAC;QAEzD,IAAA,CAAA,UAAU,GAAgD,SAAS,CAA0B,SAAS;uFAAC;;QAG1G,IAAA,CAAA,QAAQ,GAAmC,KAAK,CAAoB,IAAI;qFAAC;;QAGzE,IAAA,CAAA,SAAS,GAAmC,KAAK,CAAoB,YAAY;sFAAC;;QAGlF,IAAA,CAAA,OAAO,GAAoD,KAAK,CAAwB,KAAK,+EACzG,SAAS,EAAE,gBAAgB,EAAA,CAC7B;;QAGc,IAAA,CAAA,iBAAiB,GAAoD,KAAK,CAAwB,IAAI,yFAClH,SAAS,EAAE,gBAAgB,EAAA,CAC7B;;QAGc,IAAA,CAAA,cAAc,GAAiC,MAAM,EAAc;;QAG1E,IAAA,CAAA,WAAW,GAAsC,MAAM,CAAoB,IAAI;wFAAC;;QAGzF,IAAA,CAAA,iBAAiB,GAAkB,IAAI;AAGnC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ;iBACxB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,kBAAkB,EAAE;iBACzD,SAAS,CAAC,MAAY,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5D;QAEA,eAAe,CAAC,MAAY,IAAI,CAAC,qBAAqB,EAAE,CAAC;;;AAIzD,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAY,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACzE;AAEU,IAAA,SAAS,CAAC,EAAc,EAAA;QAC9B,MAAM,MAAM,GAA+B,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,GAAmB,KAAc,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAErH,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE;YAC9B;QACJ;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/B;;AAGU,IAAA,YAAY,CAAC,KAAoB,EAAA;QACvC,MAAM,OAAO,GAA8B,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,GAAmB,KAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAEvH,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACjB;QACJ;QAEA,MAAM,UAAU,GAAY,IAAI,CAAC,SAAS,EAAE,KAAK,UAAU;QAC3D,MAAM,OAAO,GAAW,UAAU,GAAG,WAAW,GAAG,YAAY;QAC/D,MAAM,OAAO,GAAW,UAAU,GAAG,SAAS,GAAG,WAAW;QAC5D,MAAM,YAAY,GAAW,OAAO,CAAC,SAAS,CAAC,CAAC,GAAmB,KAAc,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;;AAGhH,QAAA,MAAM,SAAS,GAAgC,IAAI,GAAG,CAAiB;YACnE,CAAC,OAAO,EAAE,CAAC,YAAY,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC;AAC9C,YAAA,CAAC,OAAO,EAAE,CAAC,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;YAC/D,CAAC,MAAM,EAAE,CAAC,CAAC;AACX,YAAA,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,SAAA,CAAC;QAEF,MAAM,WAAW,GAAuB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAEhE,QAAA,IAAI,WAAW,KAAK,SAAS,EAAE;YAC3B;QACJ;QAEA,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,QAAQ,GAAe,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE;AACtD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;IAC5B;;IAGU,iBAAiB,CAAC,SAA2B,EAAE,KAAiB,EAAA;AACtE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACrE;QACJ;QAEA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAW;AACtD,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;YAC3B,IAAI,CAAC,qBAAqB,EAAE;QAChC,CAAC,EAAE,cAAc,CAAC;IACtB;IAEU,eAAe,GAAA;QACrB,IAAI,CAAC,oBAAoB,EAAE;IAC/B;IAEU,eAAe,GAAA;QACrB,IAAI,CAAC,qBAAqB,EAAE;IAChC;IAEA,oBAAoB,GAAA;QAChB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC/C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QACjC;IACJ;AAEA,IAAA,WAAW,CAAC,SAA2B,EAAA;QACnC,MAAM,IAAI,GAA4B,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QACtE,IAAI,CAAC,IAAI,EAAE;YACP;QACJ;AAEA,QAAA,MAAM,YAAY,GAAW,IAAI,CAAC,UAAU;AAC5C,QAAA,MAAM,aAAa,GAAW,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;AACnF,QAAA,MAAM,SAAS,GAAW,SAAS,KAAK,QAAQ,GAAG,YAAY,GAAG,aAAa;AAE/E,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ,GAAG,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,CAAC;QACzE;AAEA,QAAA,IAAI,SAAS,GAAG,WAAW,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,oBAAoB,EAAE;QAC/B;IACJ;IAEA,qBAAqB,GAAA;QACjB,MAAM,IAAI,GAA4B,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QAEtE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,YAAY,EAAE;AAC5C,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YAChC;QACJ;AAEA,QAAA,MAAM,aAAa,GAAW,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;QAEnF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;;QAE/C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC;IAChD;AAEA,IAAA,kBAAkB,CAAC,EAAc,EAAA;QAC7B,MAAM,IAAI,GAA4B,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QACtE,MAAM,GAAG,GAAmC,IAAI,EAAE,aAAa,CAAc,CAAA,aAAA,EAAgB,EAAE,CAAA,EAAA,CAAI,CAAC;AAEpG,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;YACf;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAW,IAAI,CAAC,UAAU;QACxC,MAAM,SAAS,GAAW,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;AAE5D,QAAA,IAAI,GAAG,CAAC,UAAU,GAAG,QAAQ,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3C;aAAO,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,GAAG,SAAS,EAAE;AACrD,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChF;aAAO;;QAEP;IACJ;AAEA,IAAA,SAAS,CAAC,EAAc,EAAA;QACpB,MAAM,IAAI,GAA4B,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QACtE,IAAI,EAAE,aAAa,CAAc,CAAA,aAAA,EAAgB,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE;IACrE;8GAlOS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sCAAA,EAAA,8BAAA,EAAA,oCAAA,EAAA,4BAAA,EAAA,EAAA,cAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAKqD,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAGF,sBAAsB,oKChGnH,osJAsGA,EAAA,MAAA,EAAA,CAAA,glIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBD7BQ,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAGhB,gBAAA,eAAe,2IACf,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,wEACb,YAAY,EAAA,QAAA,EAAA,SAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAQP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAvB3B,SAAS;+BACI,SAAS,EAAA,eAAA,EAGF,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;;wBAEL,gBAAgB;;wBAGhB,eAAe;wBACf,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,YAAY;qBACf,EAAA,IAAA,EACK;AACF,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,wCAAwC,EAAE,8BAA8B;AACxE,wBAAA,sCAAsC,EAAE,4BAA4B;AACvE,qBAAA,EAAA,QAAA,EAAA,osJAAA,EAAA,MAAA,EAAA,CAAA,glIAAA,CAAA,EAAA;sHAO4E,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGF,sBAAsB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CA+CC,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE/I7H;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-tabs.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tab.directive.ts","../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tabs-control.directive.ts","../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tabs.component.ts","../../../projects/ui-kit-v2/src/lib/components/tabs/rt-tabs.component.html"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n TemplateRef,\n} from '@angular/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { IRtTabs } from './rt-tabs.model';\n\n/**\n * Декларирует одну вкладку `<rt-tabs>`. Ставится на `<ng-template>`: контент\n * шаблона становится телом панели и рендерится только когда вкладка активна.\n *\n * Метаданные (label, icon, disabled, badge, invalid) — signal-inputs, поэтому\n * шапка вкладки реагирует на их изменение без ручной перерегистрации. Сам\n * список вкладок `rt-tabs` собирает через `contentChildren`.\n */\n@Directive({\n selector: '[rtTab]',\n})\nexport class RtTabDirective {\n readonly #t_uiTabInvalid: Signal<string> = rtKitLabel('uiTabInvalid');\n\n /** Шаблон тела панели — рендерится в области контента при активной вкладке. */\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n\n /** Стабильный идентификатор вкладки (значение атрибута `rtTab`). */\n public readonly id: InputSignal<IRtTabs.Id> = input<IRtTabs.Id>('', { alias: 'rtTab' });\n\n /** Текстовый заголовок. Игнорируется, если задан `titleTemplate`. */\n public readonly label: InputSignal<string> = input<string>('');\n\n /** Кастомный шаблон заголовка — замещает `label`. */\n public readonly titleTemplate: InputSignal<TemplateRef<unknown> | null> = input<TemplateRef<unknown> | null>(null);\n\n /** Иконка слева от заголовка. */\n public readonly icon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Семантический цвет иконки заголовка. */\n public readonly iconColor: InputSignal<IRtTabs.TitleColor> = input<IRtTabs.TitleColor>('current');\n\n /** Значение бейджа справа от заголовка (число/строка). `null` — без бейджа. */\n public readonly badge: InputSignal<string | number | null> = input<string | number | null>(null);\n\n /**\n * Подсказка при наведении на бейдж. Подсказка самой кнопки занята неверной вкладкой,\n * поэтому у бейджа своя. Пусто — подсказки нет.\n */\n public readonly badgeTitle: InputSignal<string> = input<string>('');\n\n /**\n * Подпись бейджа для чтения с экрана: точка или число сами по себе не говорят, что значат.\n * Пусто — атрибут не ставится, и озвучивается значение бейджа как есть.\n */\n public readonly badgeAriaLabel: InputSignal<string> = input<string>('');\n\n /** Заблокированная вкладка: не выбирается и не получает фокус. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Скрытая вкладка: не рендерится ни в шапке, ни в контенте. */\n public readonly hidden: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Вкладка с ошибками: подсвечивается danger-цветом. */\n public readonly invalid: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Подсказка для невалидной вкладки. Пусто — берётся переведённое умолчание. */\n public readonly invalidMessage: InputSignal<string> = input<string>('');\n\n /** Готовый текст подсказки: своя формулировка важнее умолчания. */\n public readonly invalidTitle: Signal<string> = computed((): string => this.invalidMessage() || this.#t_uiTabInvalid());\n}\n","import { Directive, inject, input, InputSignalWithTransform, TemplateRef } from '@angular/core';\n\nimport { IRtTabs } from './rt-tabs.model';\n\n/**\n * Декларирует header-контрол `<rt-tabs>` — произвольный шаблон (кнопка, фильтр),\n * который рендерится слева или справа от полосы вкладок. Ставится на\n * `<ng-template>`; `rt-tabs` собирает контролы через `contentChildren` и\n * раскладывает по сторонам согласно `side`.\n */\n@Directive({\n selector: '[rtTabsControl]',\n})\nexport class RtTabsControlDirective {\n /** Шаблон контрола, выводимый в header-слоте. */\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n\n /**\n * Сторона размещения относительно полосы вкладок.\n *\n * Пустое значение приводится к правой стороне: `<ng-template rtTabsControl>` без значения\n * задаёт входу пустую строку, а не умолчание, и такой контрол не попадал ни в левый слот,\n * ни в правый — он пропадал из шапки вовсе.\n */\n public readonly side: InputSignalWithTransform<IRtTabs.ControlSide, IRtTabs.ControlSide | ''> = input<\n IRtTabs.ControlSide,\n IRtTabs.ControlSide | ''\n >('right', {\n alias: 'rtTabsControl',\n transform: (value: IRtTabs.ControlSide | ''): IRtTabs.ControlSide => (value === '' ? 'right' : value),\n });\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { debounceTime, fromEvent } from 'rxjs';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { RtTabDirective } from './rt-tab.directive';\nimport { RtTabsControlDirective } from './rt-tabs-control.directive';\nimport { IRtTabs } from './rt-tabs.model';\n\n/** Шаг ручной прокрутки полосы вкладок за один тик удержания стрелки (px). */\nconst SCROLL_STEP: number = 12;\n\n/** Интервал тика прокрутки при зажатой стрелке (мс). */\nconst SCROLL_TICK_MS: number = 15;\n\n/** Дебаунс пересчёта видимости стрелок прокрутки на resize/scroll (мс). */\nconst REST_DEBOUNCE_MS: number = 50;\n\nconst BEM_BLOCK: string = 'rt-tabs';\n\ntype TScrollDirection = 'before' | 'after';\n\n/**\n * Полоса вкладок с проекцией контента. Вкладки декларируются через\n * `<ng-template rtTab=\"id\" label=\"…\">…</ng-template>` (см. {@link RtTabDirective}),\n * собираются `contentChildren` и рендерятся как header-кнопки + активная панель.\n * Опциональные header-контролы — через `[rtTabsControl]`.\n *\n * Компонент \"controlled-ish\": активная вкладка берётся из `activeId` (если\n * задан), иначе — из внутреннего выбора, иначе — первая доступная. Клик/клавиша\n * эмиттят `activeIdChange`; синхронизацию `activeId` оставляем потребителю.\n *\n * Горизонтальная полоса при переполнении прячет вкладки под скролл и показывает\n * стрелки-«хвосты» (`__rest`) с прокруткой по удержанию. Вертикальная ориентация\n * раскладывает вкладки в колонку без стрелок.\n *\n * Доступность: `role=\"tablist\"`/`role=\"tab\"`/`role=\"tabpanel\"`, `aria-selected`,\n * roving `tabindex`, навигация стрелками + Home/End.\n */\n@Component({\n selector: 'rt-tabs',\n templateUrl: './rt-tabs.component.html',\n styleUrl: './rt-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // angular\n NgTemplateOutlet,\n\n // standalone components / directives\n RtIconComponent,\n RtTooltipDirective,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n host: {\n class: BEM_BLOCK,\n '[class.rt-tabs--direction--horizontal]': \"direction() === 'horizontal'\",\n '[class.rt-tabs--direction--vertical]': \"direction() === 'vertical'\",\n },\n})\nexport class RtTabsComponent {\n /** `Window` через `DOCUMENT` (SSR-safe: `defaultView` может быть `null`). */\n readonly #win: Window | null = inject(DOCUMENT).defaultView;\n\n /** Все задекларированные вкладки (включая скрытые). */\n protected readonly tabs: Signal<readonly RtTabDirective[]> = contentChildren(RtTabDirective);\n\n /** Все header-контролы. */\n protected readonly controls: Signal<readonly RtTabsControlDirective[]> = contentChildren(RtTabsControlDirective);\n\n /** Видимые вкладки (без `hidden`). */\n protected readonly visibleTabs: Signal<readonly RtTabDirective[]> = computed((): readonly RtTabDirective[] =>\n this.tabs().filter((tab: RtTabDirective): boolean => !tab.hidden())\n );\n\n protected readonly leftControls: Signal<readonly RtTabsControlDirective[]> = computed((): readonly RtTabsControlDirective[] =>\n this.controls().filter((c: RtTabsControlDirective): boolean => c.side() === 'left')\n );\n\n protected readonly rightControls: Signal<readonly RtTabsControlDirective[]> = computed((): readonly RtTabsControlDirective[] =>\n this.controls().filter((c: RtTabsControlDirective): boolean => c.side() === 'right')\n );\n\n /**\n * Эффективный id активной вкладки. Приоритет: контролируемый `activeId` →\n * внутренний выбор → первая доступная. Кандидат валидируется по множеству\n * видимых незаблокированных вкладок, поэтому корректно реагирует на\n * асинхронную загрузку/смену набора вкладок.\n */\n protected readonly selectedId: Signal<IRtTabs.Id | null> = computed((): IRtTabs.Id | null => {\n const enabled: readonly RtTabDirective[] = this.visibleTabs().filter((tab: RtTabDirective): boolean => !tab.disabled());\n const candidate: IRtTabs.Id | null = this.activeId() ?? this.#internalId();\n const candidateValid: boolean = candidate !== null && enabled.some((tab: RtTabDirective): boolean => tab.id() === candidate);\n\n let result: IRtTabs.Id | null;\n if (candidateValid) {\n result = candidate;\n } else if (enabled.length) {\n result = enabled[0].id();\n } else {\n result = null;\n }\n\n return result;\n });\n\n /** Активная вкладка целиком (для рендера панели). */\n protected readonly activeTab: Signal<RtTabDirective | null> = computed(\n (): RtTabDirective | null => this.visibleTabs().find((tab: RtTabDirective): boolean => tab.id() === this.selectedId()) ?? null\n );\n\n /** Видны ли стрелки прокрутки слева/справа (только горизонтальная полоса). */\n protected readonly restBeforeVisible: WritableSignal<boolean> = signal(false);\n protected readonly restAfterVisible: WritableSignal<boolean> = signal(false);\n\n protected readonly tabListRef: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('tabList');\n\n /** Контролируемый активный id. `null` — компонент сам выбирает первую вкладку. */\n public readonly activeId: InputSignal<IRtTabs.Id | null> = input<IRtTabs.Id | null>(null);\n\n /** Ориентация полосы. */\n public readonly direction: InputSignal<IRtTabs.Direction> = input<IRtTabs.Direction>('horizontal');\n\n /** Растягивать вкладки на всю ширину полосы. */\n public readonly stretch: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Скроллить область контента при переполнении. */\n public readonly contentScrollable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n\n /** Эмиттит id вкладки при её выборе (клик/клавиатура). */\n public readonly activeIdChange: OutputEmitterRef<IRtTabs.Id> = output<IRtTabs.Id>();\n\n /** Внутренний выбор (uncontrolled-ветка). */\n readonly #internalId: WritableSignal<IRtTabs.Id | null> = signal<IRtTabs.Id | null>(null);\n\n /** Хэндл интервала прокрутки по удержанию стрелки. */\n #scrollIntervalId: number | null = null;\n\n constructor() {\n if (this.#win) {\n fromEvent(this.#win, 'resize')\n .pipe(debounceTime(REST_DEBOUNCE_MS), takeUntilDestroyed())\n .subscribe((): void => this.#updateRestVisibility());\n }\n\n afterNextRender((): void => this.#updateRestVisibility());\n\n // Снимаем hold-scroll интервал при уничтожении: если компонент разрушить\n // с зажатой стрелкой (pointerdown без pointerup), интервал остался бы жив.\n inject(DestroyRef).onDestroy((): void => this.#clearScrollInterval());\n }\n\n protected selectTab(id: IRtTabs.Id): void {\n const target: RtTabDirective | undefined = this.visibleTabs().find((tab: RtTabDirective): boolean => tab.id() === id);\n\n if (!target || target.disabled()) {\n return;\n }\n\n this.#internalId.set(id);\n this.activeIdChange.emit(id);\n this.#scrollTabIntoView(id);\n }\n\n /** Навигация по вкладкам с клавиатуры (automatic activation). */\n protected onTabKeydown(event: KeyboardEvent): void {\n const enabled: readonly RtTabDirective[] = this.visibleTabs().filter((tab: RtTabDirective): boolean => !tab.disabled());\n\n if (!enabled.length) {\n return;\n }\n\n const isVertical: boolean = this.direction() === 'vertical';\n const nextKey: string = isVertical ? 'ArrowDown' : 'ArrowRight';\n const prevKey: string = isVertical ? 'ArrowUp' : 'ArrowLeft';\n const currentIndex: number = enabled.findIndex((tab: RtTabDirective): boolean => tab.id() === this.selectedId());\n\n // Карта клавиша → целевой индекс (без if/else-if цепочки).\n const moveByKey: ReadonlyMap<string, number> = new Map<string, number>([\n [nextKey, (currentIndex + 1) % enabled.length],\n [prevKey, (currentIndex - 1 + enabled.length) % enabled.length],\n ['Home', 0],\n ['End', enabled.length - 1],\n ]);\n\n const targetIndex: number | undefined = moveByKey.get(event.key);\n\n if (targetIndex === undefined) {\n return;\n }\n\n event.preventDefault();\n const targetId: IRtTabs.Id = enabled[targetIndex].id();\n this.selectTab(targetId);\n this.#focusTab(targetId);\n }\n\n /** Старт прокрутки полосы по удержанию ЛКМ на стрелке. */\n protected onRestPointerDown(direction: TScrollDirection, event: MouseEvent): void {\n if (event.button !== 0 || this.#scrollIntervalId !== null || !this.#win) {\n return;\n }\n\n this.#scrollIntervalId = this.#win.setInterval((): void => {\n this.#scrollStep(direction);\n this.#updateRestVisibility();\n }, SCROLL_TICK_MS);\n }\n\n protected onRestPointerUp(): void {\n this.#clearScrollInterval();\n }\n\n protected onTabListScroll(): void {\n this.#updateRestVisibility();\n }\n\n #clearScrollInterval(): void {\n if (this.#win && this.#scrollIntervalId !== null) {\n this.#win.clearInterval(this.#scrollIntervalId);\n this.#scrollIntervalId = null;\n }\n }\n\n #scrollStep(direction: TScrollDirection): void {\n const list: HTMLElement | undefined = this.tabListRef()?.nativeElement;\n if (!list) {\n return;\n }\n\n const scrolledLeft: number = list.scrollLeft;\n const scrolledRight: number = list.scrollWidth - list.scrollLeft - list.clientWidth;\n const remaining: number = direction === 'before' ? scrolledLeft : scrolledRight;\n\n if (remaining > 0) {\n list.scrollBy(direction === 'before' ? -SCROLL_STEP : SCROLL_STEP, 0);\n }\n\n if (remaining - SCROLL_STEP <= 0) {\n this.#clearScrollInterval();\n }\n }\n\n #updateRestVisibility(): void {\n const list: HTMLElement | undefined = this.tabListRef()?.nativeElement;\n\n if (!list || this.direction() !== 'horizontal') {\n this.restBeforeVisible.set(false);\n this.restAfterVisible.set(false);\n return;\n }\n\n const scrolledRight: number = list.scrollWidth - list.scrollLeft - list.clientWidth;\n\n this.restBeforeVisible.set(list.scrollLeft > 0);\n // 1px — погрешность субпиксельного scrollWidth\n this.restAfterVisible.set(scrolledRight > 1);\n }\n\n #scrollTabIntoView(id: IRtTabs.Id): void {\n const list: HTMLElement | undefined = this.tabListRef()?.nativeElement;\n const tab: HTMLElement | null | undefined = list?.querySelector<HTMLElement>(`[data-tabid=\"${id}\"]`);\n\n if (!list || !tab) {\n return;\n }\n\n const viewLeft: number = list.scrollLeft;\n const viewRight: number = list.scrollLeft + list.clientWidth;\n\n if (tab.offsetLeft < viewLeft) {\n list.scrollTo({ left: tab.offsetLeft });\n } else if (tab.offsetLeft + tab.offsetWidth > viewRight) {\n list.scrollTo({ left: tab.offsetLeft + tab.offsetWidth - list.clientWidth });\n } else {\n // вкладка целиком в зоне видимости — прокрутка не нужна\n }\n }\n\n #focusTab(id: IRtTabs.Id): void {\n const list: HTMLElement | undefined = this.tabListRef()?.nativeElement;\n list?.querySelector<HTMLElement>(`[data-tabid=\"${id}\"]`)?.focus();\n }\n}\n","<ng-container rtBlock=\"rt-tabs\">\n <div rtElem=\"header\">\n @if (leftControls().length) {\n <div rtElem=\"controls\" [rtMod]=\"{ before: true }\">\n @for (control of leftControls(); track $index) {\n <ng-container [ngTemplateOutlet]=\"control.templateRef\" />\n }\n </div>\n }\n\n <div rtElem=\"tab-list-wrapper\">\n <div\n rtElem=\"rest\"\n qa-dataid=\"tabs-scroll-prev\"\n [rtMod]=\"{ before: true, visible: restBeforeVisible() }\"\n (mousedown)=\"onRestPointerDown('before', $event)\"\n (mouseup)=\"onRestPointerUp()\"\n (mouseleave)=\"onRestPointerUp()\">\n <rt-icon name=\"chevron-left\" color=\"current\" size=\"sm\" />\n </div>\n\n <div\n #tabList\n rtElem=\"tab-list\"\n qa-dataid=\"tabs-tab-list\"\n role=\"tablist\"\n [rtMod]=\"{ stretch: stretch(), direction: direction() }\"\n [attr.aria-orientation]=\"direction()\"\n (scroll)=\"onTabListScroll()\">\n @for (tab of visibleTabs(); track tab.id()) {\n <button\n rtBlock=\"rt-tab-item\"\n qa-dataid=\"tabs-tab\"\n type=\"button\"\n role=\"tab\"\n [rtMod]=\"{\n selected: tab.id() === selectedId(),\n disabled: tab.disabled(),\n invalid: tab.invalid(),\n stretch: stretch(),\n }\"\n [id]=\"'rt-tab-' + tab.id()\"\n [disabled]=\"tab.disabled()\"\n [attr.data-tabid]=\"tab.id()\"\n [attr.aria-selected]=\"tab.id() === selectedId()\"\n [attr.aria-controls]=\"'rt-tabpanel-' + tab.id()\"\n [attr.tabindex]=\"tab.id() === selectedId() ? 0 : -1\"\n [rtTooltip]=\"tab.invalid() ? tab.invalidTitle() : ''\"\n (click)=\"selectTab(tab.id())\"\n (keydown)=\"onTabKeydown($event)\">\n @if (tab.icon(); as icon) {\n <rt-icon rtElem=\"icon\" size=\"sm\" [name]=\"icon\" [color]=\"tab.iconColor()\" />\n }\n\n @if (tab.titleTemplate(); as titleTpl) {\n <ng-container [ngTemplateOutlet]=\"titleTpl\" />\n } @else {\n <span rtElem=\"title\">{{ tab.label() }}</span>\n }\n\n @if (tab.badge() !== null) {\n <!-- В одну строку: перенос внутри добавил бы пробел в текст кнопки. -->\n <!-- prettier-ignore -->\n <span rtElem=\"badge\" [rtTooltip]=\"tab.badgeTitle()\" [attr.aria-label]=\"tab.badgeAriaLabel() || null\">{{ tab.badge() }}</span>\n }\n </button>\n }\n </div>\n\n <div\n rtElem=\"rest\"\n qa-dataid=\"tabs-scroll-next\"\n [rtMod]=\"{ after: true, visible: restAfterVisible() }\"\n (mousedown)=\"onRestPointerDown('after', $event)\"\n (mouseup)=\"onRestPointerUp()\"\n (mouseleave)=\"onRestPointerUp()\">\n <rt-icon name=\"chevron-right\" color=\"current\" size=\"sm\" />\n </div>\n </div>\n\n @if (rightControls().length) {\n <div rtElem=\"controls\" [rtMod]=\"{ after: true }\">\n @for (control of rightControls(); track $index) {\n <ng-container [ngTemplateOutlet]=\"control.templateRef\" />\n }\n </div>\n }\n </div>\n\n @if (activeTab(); as tab) {\n <div\n rtElem=\"content\"\n qa-dataid=\"tabs-panel\"\n role=\"tabpanel\"\n tabindex=\"0\"\n [rtMod]=\"{ scrollable: contentScrollable() }\"\n [id]=\"'rt-tabpanel-' + tab.id()\"\n [attr.aria-labelledby]=\"'rt-tab-' + tab.id()\">\n <ng-container [ngTemplateOutlet]=\"tab.templateRef\" />\n </div>\n }\n</ng-container>\n"],"mappings":"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"}
|