@rt-tools/ui-kit-v2 0.16.0 → 0.18.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/README.md +25 -0
- package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs +79 -0
- package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs +227 -0
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs +47 -0
- package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +702 -0
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +214 -0
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs +53 -0
- package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs +88 -0
- package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs +365 -0
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +152 -0
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-card.mjs +72 -0
- package/fesm2022/rt-tools-ui-kit-v2-card.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +111 -0
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs +76 -0
- package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs +255 -0
- package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs +1326 -0
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +2590 -0
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs +45 -0
- package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-counter.mjs +158 -0
- package/fesm2022/rt-tools-ui-kit-v2-counter.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +894 -0
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +1217 -0
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +779 -0
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +573 -0
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs +141 -0
- package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs +68 -0
- package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs +478 -0
- package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs +183 -0
- package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs +44 -0
- package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +260 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +937 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs +56 -0
- package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +107 -0
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +183 -0
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +219 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs +214 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs +117 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs +32 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +91 -0
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +220 -0
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-header.mjs +72 -0
- package/fesm2022/rt-tools-ui-kit-v2-header.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +163 -0
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +674 -0
- package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs +540 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +227 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs +37 -0
- package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +361 -0
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +143 -0
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs +49 -0
- package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-logo.mjs +97 -0
- package/fesm2022/rt-tools-ui-kit-v2-logo.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs +57 -0
- package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +537 -0
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs +105 -0
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs +71 -0
- package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +315 -0
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs +51 -0
- package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-note.mjs +44 -0
- package/fesm2022/rt-tools-ui-kit-v2-note.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs +54 -0
- package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +339 -0
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +187 -0
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs +170 -0
- package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-popover.mjs +312 -0
- package/fesm2022/rt-tools-ui-kit-v2-popover.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +174 -0
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-radius.mjs +56 -0
- package/fesm2022/rt-tools-ui-kit-v2-radius.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +96 -41
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs +118 -0
- package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +290 -0
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs +37 -0
- package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +495 -0
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +1493 -0
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs +49 -0
- package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs +123 -0
- package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs +70 -0
- package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs +92 -0
- package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +147 -0
- package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +117 -0
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +1636 -0
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +350 -0
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +122 -0
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +85 -0
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +73 -0
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +196 -0
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs +39 -0
- package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +338 -0
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +132 -0
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs +162 -0
- package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +135 -0
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +214 -0
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs +64 -0
- package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +263 -0
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +296 -0
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2.mjs +91 -23164
- package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
- package/package.json +349 -1
- package/rt-tools-ui-kit-v2-0.18.0.tgz +0 -0
- package/src/lib/components/action-bar/CONTEXT.md +5 -0
- package/src/lib/components/action-bar/rt-action-bar.component.scss +30 -16
- package/src/lib/components/aside/CONTEXT.md +9 -1
- package/src/lib/components/aside/footer/rt-aside-footer.component.scss +7 -8
- package/src/lib/components/aside/header/rt-aside-header.component.scss +16 -1
- package/src/lib/components/aside/rt-aside.component.scss +17 -1
- package/src/lib/components/button/CONTEXT.md +12 -11
- package/src/lib/components/button/rt-button.directive.scss +36 -0
- package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +2 -2
- package/src/lib/components/data-table/cell/rt-data-table-cell.component.scss +1 -1
- package/src/lib/components/data-table/filter-cell/rt-data-table-filter-cell.component.scss +1 -1
- package/src/lib/components/data-table/rt-data-table.component.scss +1 -1
- package/src/lib/components/dialog/CONTEXT.md +9 -0
- package/src/lib/components/dialog/content/rt-dialog-content.component.scss +20 -0
- package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +18 -2
- package/src/lib/components/dialog/header/rt-dialog-header.component.scss +21 -3
- package/src/lib/components/dialog/rt-dialog.component.scss +9 -3
- package/src/lib/components/dot-field/CONTEXT.md +31 -0
- package/src/lib/components/dot-field/rt-dot-field.component.scss +20 -0
- package/src/lib/components/dot-field/stories/component/CONTEXT.md +14 -0
- package/src/lib/components/dot-field/stories/component/test-dot-field.component.scss +31 -0
- package/src/lib/components/dynamic-selector/CONTEXT.md +6 -0
- package/src/lib/components/field/CONTEXT.md +18 -2
- package/src/lib/components/header/CONTEXT.md +2 -2
- package/src/lib/components/icon/CONTEXT.md +11 -7
- package/src/lib/components/icon/rt-icon.component.scss +47 -0
- package/src/lib/components/icon-button/CONTEXT.md +27 -20
- package/src/lib/components/icon-button/rt-icon-button.component.scss +51 -25
- package/src/lib/components/image-upload/CONTEXT.md +20 -15
- package/src/lib/components/image-upload/rt-image-upload.component.scss +14 -2
- package/src/lib/components/pagination/rt-pagination.component.scss +1 -1
- package/src/lib/components/scroll-area/CONTEXT.md +2 -0
- package/src/lib/components/scroll-area/rt-scroll-area.component.scss +20 -3
- package/src/lib/components/select/rt-select.component.scss +4 -0
- package/src/lib/components/side-menu/CONTEXT.md +7 -2
- package/src/lib/components/spinner/CONTEXT.md +15 -8
- package/src/lib/components/spinner/rt-spinner.component.scss +108 -9
- package/src/lib/components/tag/rt-tag.component.scss +43 -23
- package/src/lib/components/toast/CONTEXT.md +8 -0
- package/src/lib/components/toast/rt-toast.component.scss +74 -15
- package/src/lib/components/toast/rt-toaster.component.scss +5 -1
- package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +35 -37
- package/src/lib/components/toggle-switch/CONTEXT.md +11 -3
- package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +53 -14
- package/src/lib/components/toolbar/rt-toolbar.component.scss +15 -4
- package/src/lib/components/tooltip/CONTEXT.md +5 -5
- package/src/rich-editor/lib/components/chat/CONTEXT.md +7 -2
- package/src/rich-editor/lib/components/chat/rt-chat.component.scss +25 -0
- package/src/styles/_semantic.scss +1 -1
- package/styles/tokens.css +43 -8
- package/types/rt-tools-ui-kit-v2-accordion.d.ts +30 -0
- package/types/rt-tools-ui-kit-v2-action-bar.d.ts +140 -0
- package/types/rt-tools-ui-kit-v2-aside-section.d.ts +25 -0
- package/types/rt-tools-ui-kit-v2-aside.d.ts +436 -0
- package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +78 -0
- package/types/rt-tools-ui-kit-v2-bar-list.d.ts +41 -0
- package/types/rt-tools-ui-kit-v2-bottom-sheet.d.ts +20 -0
- package/types/rt-tools-ui-kit-v2-button.d.ts +76 -0
- package/types/rt-tools-ui-kit-v2-calendar.d.ts +96 -0
- package/types/rt-tools-ui-kit-v2-card.d.ts +38 -0
- package/types/rt-tools-ui-kit-v2-checkbox.d.ts +46 -0
- package/types/rt-tools-ui-kit-v2-collapsible-text.d.ts +20 -0
- package/types/rt-tools-ui-kit-v2-confirm-popover.d.ts +85 -0
- package/types/rt-tools-ui-kit-v2-container.d.ts +425 -0
- package/types/rt-tools-ui-kit-v2-core.d.ts +1222 -0
- package/types/rt-tools-ui-kit-v2-counter-row.d.ts +22 -0
- package/types/rt-tools-ui-kit-v2-counter.d.ts +70 -0
- package/types/rt-tools-ui-kit-v2-data-list.d.ts +334 -0
- package/types/rt-tools-ui-kit-v2-data-table.d.ts +494 -0
- package/types/rt-tools-ui-kit-v2-date-picker.d.ts +181 -0
- package/types/rt-tools-ui-kit-v2-date-range.d.ts +98 -0
- package/types/rt-tools-ui-kit-v2-delta-view.d.ts +20 -0
- package/types/rt-tools-ui-kit-v2-detail-list.d.ts +33 -0
- package/types/rt-tools-ui-kit-v2-dialog.d.ts +287 -0
- package/types/rt-tools-ui-kit-v2-dot-field.d.ts +17 -0
- package/types/rt-tools-ui-kit-v2-download-link.d.ts +17 -0
- package/types/rt-tools-ui-kit-v2-dynamic-list.d.ts +139 -0
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +384 -0
- package/types/rt-tools-ui-kit-v2-empty-state.d.ts +29 -0
- package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +57 -0
- package/types/rt-tools-ui-kit-v2-field.d.ts +82 -0
- package/types/rt-tools-ui-kit-v2-file-card.d.ts +114 -0
- package/types/rt-tools-ui-kit-v2-file-drop.d.ts +75 -0
- package/types/rt-tools-ui-kit-v2-file-input.d.ts +48 -0
- package/types/rt-tools-ui-kit-v2-file-list.d.ts +13 -0
- package/types/rt-tools-ui-kit-v2-filter-control.d.ts +72 -0
- package/types/rt-tools-ui-kit-v2-form-control.d.ts +74 -0
- package/types/rt-tools-ui-kit-v2-header.d.ts +40 -0
- package/types/rt-tools-ui-kit-v2-icon-button.d.ts +113 -0
- package/types/rt-tools-ui-kit-v2-icon.d.ts +238 -0
- package/types/rt-tools-ui-kit-v2-image-cropper.d.ts +168 -0
- package/types/rt-tools-ui-kit-v2-image-upload.d.ts +102 -0
- package/types/rt-tools-ui-kit-v2-info-item.d.ts +13 -0
- package/types/rt-tools-ui-kit-v2-input-number.d.ts +67 -0
- package/types/rt-tools-ui-kit-v2-input.d.ts +54 -0
- package/types/rt-tools-ui-kit-v2-live-badge.d.ts +23 -0
- package/types/rt-tools-ui-kit-v2-logo.d.ts +58 -0
- package/types/rt-tools-ui-kit-v2-markdown-text.d.ts +30 -0
- package/types/rt-tools-ui-kit-v2-menu.d.ts +217 -0
- package/types/rt-tools-ui-kit-v2-message.d.ts +56 -0
- package/types/rt-tools-ui-kit-v2-money-list.d.ts +34 -0
- package/types/rt-tools-ui-kit-v2-multiselect.d.ts +93 -0
- package/types/rt-tools-ui-kit-v2-night-grid.d.ts +39 -0
- package/types/rt-tools-ui-kit-v2-note.d.ts +21 -0
- package/types/rt-tools-ui-kit-v2-notifications-bell.d.ts +23 -0
- package/types/rt-tools-ui-kit-v2-page-header.d.ts +173 -0
- package/types/rt-tools-ui-kit-v2-pagination.d.ts +64 -0
- package/types/rt-tools-ui-kit-v2-photo-viewer.d.ts +98 -0
- package/types/rt-tools-ui-kit-v2-popover.d.ts +79 -0
- package/types/rt-tools-ui-kit-v2-radio-button.d.ts +61 -0
- package/types/rt-tools-ui-kit-v2-radius.d.ts +37 -0
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +16 -20
- package/types/rt-tools-ui-kit-v2-ripple.d.ts +39 -0
- package/types/rt-tools-ui-kit-v2-scroll-area.d.ts +91 -0
- package/types/rt-tools-ui-kit-v2-section-nav.d.ts +23 -0
- package/types/rt-tools-ui-kit-v2-select.d.ts +215 -0
- package/types/rt-tools-ui-kit-v2-side-menu.d.ts +483 -0
- package/types/rt-tools-ui-kit-v2-skeleton-wrapper.d.ts +32 -0
- package/types/rt-tools-ui-kit-v2-skeleton.d.ts +41 -0
- package/types/rt-tools-ui-kit-v2-spinner.d.ts +56 -0
- package/types/rt-tools-ui-kit-v2-split-button.d.ts +72 -0
- package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +81 -0
- package/types/rt-tools-ui-kit-v2-stepper.d.ts +51 -0
- package/types/rt-tools-ui-kit-v2-table.d.ts +739 -0
- package/types/rt-tools-ui-kit-v2-tabs.d.ts +153 -0
- package/types/rt-tools-ui-kit-v2-tag.d.ts +70 -0
- package/types/rt-tools-ui-kit-v2-textarea.d.ts +36 -0
- package/types/rt-tools-ui-kit-v2-theme-toggle.d.ts +43 -0
- package/types/rt-tools-ui-kit-v2-thread-list.d.ts +111 -0
- package/types/rt-tools-ui-kit-v2-timeline.d.ts +35 -0
- package/types/rt-tools-ui-kit-v2-toast.d.ts +103 -0
- package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +109 -0
- package/types/rt-tools-ui-kit-v2-toggle-switch.d.ts +85 -0
- package/types/rt-tools-ui-kit-v2-toolbar.d.ts +66 -0
- package/types/rt-tools-ui-kit-v2-tooltip.d.ts +74 -0
- package/types/rt-tools-ui-kit-v2-welcome-dialog.d.ts +33 -0
- package/types/rt-tools-ui-kit-v2-workspace-details.d.ts +128 -0
- package/types/rt-tools-ui-kit-v2-workspace.d.ts +84 -0
- package/types/rt-tools-ui-kit-v2.d.ts +87 -9290
- package/rt-tools-ui-kit-v2-0.16.0.tgz +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, ViewEncapsulation, ChangeDetectionStrategy, Component, inject, ElementRef, input, booleanAttribute, Directive } from '@angular/core';
|
|
3
|
+
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
4
|
+
import { Overlay, ScrollStrategyOptions, OverlayConfig } from '@angular/cdk/overlay';
|
|
5
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
6
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
|
+
import { carryThemeScope, materialPresetClassesOf } from '@rt-tools/ui-kit-v2/core';
|
|
8
|
+
|
|
9
|
+
const BEM_BLOCK = 'rt-tooltip';
|
|
10
|
+
/**
|
|
11
|
+
* Презентационная панель tooltip'а. Рендерится директивой `[rtTooltip]` через
|
|
12
|
+
* CDK `ComponentPortal` в overlay; текст выставляется императивно
|
|
13
|
+
* (`ref.instance.text.set(...)`) — отдельного `input()` нет, т.к. компонент
|
|
14
|
+
* создаётся вручную, а не в шаблоне.
|
|
15
|
+
*
|
|
16
|
+
* `ViewEncapsulation.None` — стили префиксованы `.rt-tooltip` (единообразно с
|
|
17
|
+
* остальным common/ui). `role="tooltip"` — вспомогательный ярлык для AT.
|
|
18
|
+
*/
|
|
19
|
+
class RtTooltipComponent {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.text = signal('', /* @ts-ignore */
|
|
22
|
+
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: RtTooltipComponent, isStandalone: true, selector: "rt-tooltip", host: { attributes: { "role": "tooltip" }, classAttribute: "rt-tooltip" }, ngImport: i0, template: '{{ text() }}', isInline: true, styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tooltip{--rt-tooltip-radius: var(--rt-overlay-tooltip-radius);--rt-tooltip-shadow: var(--rt-overlay-tooltip-shadow);display:block;max-width:240px;padding:var(--rt-space-xs) var(--rt-space-sm);border-radius:var(--rt-tooltip-radius);background:var(--rt-color-bg-inverse);box-shadow:var(--rt-tooltip-shadow);color:var(--rt-color-text-inverse);font-size:var(--rt-text-xs);line-height:var(--rt-leading-snug);overflow-wrap:anywhere;pointer-events:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtTooltipComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'rt-tooltip', template: '{{ text() }}', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
30
|
+
class: BEM_BLOCK,
|
|
31
|
+
role: 'tooltip',
|
|
32
|
+
}, styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tooltip{--rt-tooltip-radius: var(--rt-overlay-tooltip-radius);--rt-tooltip-shadow: var(--rt-overlay-tooltip-shadow);display:block;max-width:240px;padding:var(--rt-space-xs) var(--rt-space-sm);border-radius:var(--rt-tooltip-radius);background:var(--rt-color-bg-inverse);box-shadow:var(--rt-tooltip-shadow);color:var(--rt-color-text-inverse);font-size:var(--rt-text-xs);line-height:var(--rt-leading-snug);overflow-wrap:anywhere;pointer-events:none}}\n"] }]
|
|
33
|
+
}] });
|
|
34
|
+
|
|
35
|
+
/** Зазор между подсказкой и host'ом. */
|
|
36
|
+
const TOOLTIP_GAP_PX = 6;
|
|
37
|
+
const POSITION_BY_PLACEMENT = {
|
|
38
|
+
top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_GAP_PX },
|
|
39
|
+
bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_GAP_PX },
|
|
40
|
+
left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_GAP_PX },
|
|
41
|
+
right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_GAP_PX },
|
|
42
|
+
};
|
|
43
|
+
const FALLBACKS = {
|
|
44
|
+
top: ['top', 'bottom'],
|
|
45
|
+
bottom: ['bottom', 'top'],
|
|
46
|
+
left: ['left', 'right', 'top', 'bottom'],
|
|
47
|
+
right: ['right', 'left', 'top', 'bottom'],
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Позиции подсказки по порядку попыток: заданная сторона, противоположная, а у боковой ещё
|
|
51
|
+
* верх и низ — на узком экране сбоку не помещается ни одна сторона, и подсказка, придвинутая
|
|
52
|
+
* к краю, легла бы на сам host. Бока заданы логическими `start`/`end`: в письме справа налево
|
|
53
|
+
* `left` встаёт справа — как и вся раскладка кита.
|
|
54
|
+
*/
|
|
55
|
+
function tooltipPositions(placement) {
|
|
56
|
+
return FALLBACKS[placement].map((side) => ({ ...POSITION_BY_PLACEMENT[side] }));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Текст узла обрезан: содержимое шире видимой коробки. Высота не судится — узел с видимым
|
|
60
|
+
* переполнением по высоте показывает всё, и его подсказка только повторяла бы текст.
|
|
61
|
+
*/
|
|
62
|
+
function isTooltipTextCut(box) {
|
|
63
|
+
return box.scrollWidth > box.clientWidth;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const SHOW_DELAY_MS = 300;
|
|
67
|
+
const VIEWPORT_MARGIN = 8;
|
|
68
|
+
/**
|
|
69
|
+
* Tooltip-директива поверх CDK Overlay. Показывает короткую подсказку
|
|
70
|
+
* (`rtTooltip` = строка) на hover/focus host'а. Движок — CDK `flexibleConnectedTo`
|
|
71
|
+
* (авто-flip у края viewport, reposition при скролле), так что подсказка не
|
|
72
|
+
* режется `overflow: hidden` предками (таблицы, aside, карточки).
|
|
73
|
+
*
|
|
74
|
+
* Триггеры: `mouseenter` и фокус с клавиатуры показывают (с задержкой `SHOW_DELAY_MS`),
|
|
75
|
+
* `mouseleave`/`focusout`/`click` прячут. Фокус, поставленный мышью или кодом, подсказку не
|
|
76
|
+
* показывает, как у Material: меню возвращает фокус кнопке после выбора пункта мышью, и
|
|
77
|
+
* подсказка кнопки всплывала поверх того, что пункт открыл. Пустой текст → no-op (директива
|
|
78
|
+
* выключена), поэтому её можно безусловно вешать на icon-кнопки и включать
|
|
79
|
+
* выставлением строки.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```html
|
|
83
|
+
* <rt-icon-button icon="ico-trash" ariaLabel="Удалить" tooltip="Удалить" />
|
|
84
|
+
* <button rtButton [rtTooltip]="'Подсказка'">…</button>
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
class RtTooltipDirective {
|
|
88
|
+
#overlay;
|
|
89
|
+
#elementRef;
|
|
90
|
+
#scrollStrategies;
|
|
91
|
+
#focusMonitor;
|
|
92
|
+
#overlayRef;
|
|
93
|
+
#tooltipRef;
|
|
94
|
+
#showTimer;
|
|
95
|
+
constructor() {
|
|
96
|
+
this.#overlay = inject(Overlay);
|
|
97
|
+
this.#elementRef = inject(ElementRef);
|
|
98
|
+
this.#scrollStrategies = inject(ScrollStrategyOptions);
|
|
99
|
+
this.#focusMonitor = inject(FocusMonitor);
|
|
100
|
+
this.#overlayRef = null;
|
|
101
|
+
this.#tooltipRef = null;
|
|
102
|
+
this.#showTimer = null;
|
|
103
|
+
/**
|
|
104
|
+
* Текст подсказки. Принимает `null`/`undefined` (частый результат date-пайпа
|
|
105
|
+
* или nullable-полей модели) и нормализует их в пустую строку — иначе
|
|
106
|
+
* биндинги вида `value | date` ломали бы строгую типизацию шаблона. Пустая
|
|
107
|
+
* строка → no-op (директива выключена).
|
|
108
|
+
*/
|
|
109
|
+
this.text = input('', { ...(ngDevMode ? { debugName: "text" } : /* istanbul ignore next */ {}), alias: 'rtTooltip',
|
|
110
|
+
transform: (value) => value ?? '' });
|
|
111
|
+
/** Сторона подсказки. Не задана — сверху, а под материальным набором снизу, как у первого кита. */
|
|
112
|
+
this.placement = input(null, { ...(ngDevMode ? { debugName: "placement" } : /* istanbul ignore next */ {}), alias: 'rtTooltipPlacement' });
|
|
113
|
+
/**
|
|
114
|
+
* Подсказка только у обрезанного текста: хост меряется в момент показа, и подсказка не
|
|
115
|
+
* появляется, пока его содержимое помещается целиком. Мерить заранее не нужно — показ идёт
|
|
116
|
+
* только отсюда, и признак в эту минуту всегда свежий.
|
|
117
|
+
*/
|
|
118
|
+
this.whenTruncated = input(false, { ...(ngDevMode ? { debugName: "whenTruncated" } : /* istanbul ignore next */ {}), alias: 'rtTooltipWhenTruncated',
|
|
119
|
+
transform: booleanAttribute });
|
|
120
|
+
this.#focusMonitor
|
|
121
|
+
.monitor(this.#elementRef, true)
|
|
122
|
+
.pipe(takeUntilDestroyed())
|
|
123
|
+
.subscribe((origin) => {
|
|
124
|
+
if (origin === 'keyboard') {
|
|
125
|
+
this.show();
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
ngOnDestroy() {
|
|
130
|
+
this.#focusMonitor.stopMonitoring(this.#elementRef);
|
|
131
|
+
this.#clearTimer();
|
|
132
|
+
this.#disposeOverlay();
|
|
133
|
+
}
|
|
134
|
+
show() {
|
|
135
|
+
if (this.text().trim() === '' || this.#tooltipRef !== null) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
this.#clearTimer();
|
|
139
|
+
this.#showTimer = setTimeout(() => this.#attach(), SHOW_DELAY_MS);
|
|
140
|
+
}
|
|
141
|
+
hide() {
|
|
142
|
+
this.#clearTimer();
|
|
143
|
+
this.#overlayRef?.detach();
|
|
144
|
+
this.#tooltipRef = null;
|
|
145
|
+
}
|
|
146
|
+
#attach() {
|
|
147
|
+
if (this.text().trim() === '' || (this.whenTruncated() && !isTooltipTextCut(this.#elementRef.nativeElement))) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const overlayRef = this.#ensureOverlay();
|
|
151
|
+
// Коробка переживает закрытие, а кусок темы вокруг host'а мог смениться — переносим на каждом показе.
|
|
152
|
+
carryThemeScope(overlayRef.overlayElement, this.#elementRef.nativeElement);
|
|
153
|
+
const portal = new ComponentPortal(RtTooltipComponent);
|
|
154
|
+
this.#tooltipRef = overlayRef.attach(portal);
|
|
155
|
+
this.#tooltipRef.instance.text.set(this.text());
|
|
156
|
+
this.#tooltipRef.changeDetectorRef.markForCheck();
|
|
157
|
+
}
|
|
158
|
+
#ensureOverlay() {
|
|
159
|
+
if (this.#overlayRef !== null) {
|
|
160
|
+
return this.#overlayRef;
|
|
161
|
+
}
|
|
162
|
+
const presetClasses = materialPresetClassesOf(this.#elementRef.nativeElement);
|
|
163
|
+
const placement = this.placement() ?? (presetClasses.length > 0 ? 'bottom' : 'top');
|
|
164
|
+
const positions = tooltipPositions(placement);
|
|
165
|
+
const positionStrategy = this.#overlay
|
|
166
|
+
.position()
|
|
167
|
+
.flexibleConnectedTo(this.#elementRef)
|
|
168
|
+
.withPush(true)
|
|
169
|
+
.withViewportMargin(VIEWPORT_MARGIN)
|
|
170
|
+
.withFlexibleDimensions(false)
|
|
171
|
+
.withPositions(positions);
|
|
172
|
+
const config = new OverlayConfig({
|
|
173
|
+
positionStrategy,
|
|
174
|
+
scrollStrategy: this.#scrollStrategies.reposition(),
|
|
175
|
+
hasBackdrop: false,
|
|
176
|
+
panelClass: ['rt-tooltip-panel', ...presetClasses],
|
|
177
|
+
});
|
|
178
|
+
this.#overlayRef = this.#overlay.create(config);
|
|
179
|
+
return this.#overlayRef;
|
|
180
|
+
}
|
|
181
|
+
#clearTimer() {
|
|
182
|
+
if (this.#showTimer !== null) {
|
|
183
|
+
clearTimeout(this.#showTimer);
|
|
184
|
+
this.#showTimer = null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
#disposeOverlay() {
|
|
188
|
+
this.#overlayRef?.dispose();
|
|
189
|
+
this.#overlayRef = null;
|
|
190
|
+
this.#tooltipRef = null;
|
|
191
|
+
}
|
|
192
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
193
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: RtTooltipDirective, isStandalone: true, selector: "[rtTooltip]", inputs: { text: { classPropertyName: "text", publicName: "rtTooltip", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "rtTooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, whenTruncated: { classPropertyName: "whenTruncated", publicName: "rtTooltipWhenTruncated", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "show()", "mouseleave": "hide()", "focusout": "hide()", "click": "hide()" } }, exportAs: ["rtTooltip"], ngImport: i0 }); }
|
|
194
|
+
}
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtTooltipDirective, decorators: [{
|
|
196
|
+
type: Directive,
|
|
197
|
+
args: [{
|
|
198
|
+
selector: '[rtTooltip]',
|
|
199
|
+
exportAs: 'rtTooltip',
|
|
200
|
+
host: {
|
|
201
|
+
'(mouseenter)': 'show()',
|
|
202
|
+
'(mouseleave)': 'hide()',
|
|
203
|
+
'(focusout)': 'hide()',
|
|
204
|
+
'(click)': 'hide()',
|
|
205
|
+
},
|
|
206
|
+
}]
|
|
207
|
+
}], ctorParameters: () => [], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "rtTooltip", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "rtTooltipPlacement", required: false }] }], whenTruncated: [{ type: i0.Input, args: [{ isSignal: true, alias: "rtTooltipWhenTruncated", required: false }] }] } });
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Generated bundle index. Do not edit.
|
|
211
|
+
*/
|
|
212
|
+
|
|
213
|
+
export { RtTooltipComponent, RtTooltipDirective };
|
|
214
|
+
//# sourceMappingURL=rt-tools-ui-kit-v2-tooltip.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-tooltip.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.component.ts","../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.logic.ts","../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.directive.ts","../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tools-ui-kit-v2-tooltip.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, signal, ViewEncapsulation, WritableSignal } from '@angular/core';\n\nconst BEM_BLOCK: string = 'rt-tooltip';\n\n/**\n * Презентационная панель tooltip'а. Рендерится директивой `[rtTooltip]` через\n * CDK `ComponentPortal` в overlay; текст выставляется императивно\n * (`ref.instance.text.set(...)`) — отдельного `input()` нет, т.к. компонент\n * создаётся вручную, а не в шаблоне.\n *\n * `ViewEncapsulation.None` — стили префиксованы `.rt-tooltip` (единообразно с\n * остальным common/ui). `role=\"tooltip\"` — вспомогательный ярлык для AT.\n */\n@Component({\n selector: 'rt-tooltip',\n template: '{{ text() }}',\n styleUrl: './rt-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: BEM_BLOCK,\n role: 'tooltip',\n },\n})\nexport class RtTooltipComponent {\n public readonly text: WritableSignal<string> = signal<string>('');\n}\n","import { ConnectedPosition } from '@angular/cdk/overlay';\n\nimport { IRtTooltip } from './rt-tooltip.model';\n\n/** Зазор между подсказкой и host'ом. */\nconst TOOLTIP_GAP_PX: number = 6;\n\nconst POSITION_BY_PLACEMENT: Readonly<Record<IRtTooltip.Placement, ConnectedPosition>> = {\n top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_GAP_PX },\n bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_GAP_PX },\n left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_GAP_PX },\n right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_GAP_PX },\n};\n\nconst FALLBACKS: Readonly<Record<IRtTooltip.Placement, readonly IRtTooltip.Placement[]>> = {\n top: ['top', 'bottom'],\n bottom: ['bottom', 'top'],\n left: ['left', 'right', 'top', 'bottom'],\n right: ['right', 'left', 'top', 'bottom'],\n};\n\n/**\n * Позиции подсказки по порядку попыток: заданная сторона, противоположная, а у боковой ещё\n * верх и низ — на узком экране сбоку не помещается ни одна сторона, и подсказка, придвинутая\n * к краю, легла бы на сам host. Бока заданы логическими `start`/`end`: в письме справа налево\n * `left` встаёт справа — как и вся раскладка кита.\n */\nexport function tooltipPositions(placement: IRtTooltip.Placement): ConnectedPosition[] {\n return FALLBACKS[placement].map((side: IRtTooltip.Placement): ConnectedPosition => ({ ...POSITION_BY_PLACEMENT[side] }));\n}\n\n/** Размеры узла, по которым судят об обрезке: видимая ширина и ширина содержимого. */\nexport interface IRtTooltipBox {\n readonly clientWidth: number;\n readonly scrollWidth: number;\n}\n\n/**\n * Текст узла обрезан: содержимое шире видимой коробки. Высота не судится — узел с видимым\n * переполнением по высоте показывает всё, и его подсказка только повторяла бы текст.\n */\nexport function isTooltipTextCut(box: IRtTooltipBox): boolean {\n return box.scrollWidth > box.clientWidth;\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ComponentRef,\n Directive,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnDestroy,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { carryThemeScope, materialPresetClassesOf } from '@rt-tools/ui-kit-v2/core';\nimport { RtTooltipComponent } from './rt-tooltip.component';\nimport { isTooltipTextCut, tooltipPositions } from './rt-tooltip.logic';\nimport { IRtTooltip } from './rt-tooltip.model';\n\nconst SHOW_DELAY_MS: number = 300;\nconst VIEWPORT_MARGIN: number = 8;\n\n/**\n * Tooltip-директива поверх CDK Overlay. Показывает короткую подсказку\n * (`rtTooltip` = строка) на hover/focus host'а. Движок — CDK `flexibleConnectedTo`\n * (авто-flip у края viewport, reposition при скролле), так что подсказка не\n * режется `overflow: hidden` предками (таблицы, aside, карточки).\n *\n * Триггеры: `mouseenter` и фокус с клавиатуры показывают (с задержкой `SHOW_DELAY_MS`),\n * `mouseleave`/`focusout`/`click` прячут. Фокус, поставленный мышью или кодом, подсказку не\n * показывает, как у Material: меню возвращает фокус кнопке после выбора пункта мышью, и\n * подсказка кнопки всплывала поверх того, что пункт открыл. Пустой текст → no-op (директива\n * выключена), поэтому её можно безусловно вешать на icon-кнопки и включать\n * выставлением строки.\n *\n * @example\n * ```html\n * <rt-icon-button icon=\"ico-trash\" ariaLabel=\"Удалить\" tooltip=\"Удалить\" />\n * <button rtButton [rtTooltip]=\"'Подсказка'\">…</button>\n * ```\n */\n@Directive({\n selector: '[rtTooltip]',\n exportAs: 'rtTooltip',\n host: {\n '(mouseenter)': 'show()',\n '(mouseleave)': 'hide()',\n '(focusout)': 'hide()',\n '(click)': 'hide()',\n },\n})\nexport class RtTooltipDirective implements OnDestroy {\n readonly #overlay: Overlay = inject(Overlay);\n readonly #elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #scrollStrategies: ScrollStrategyOptions = inject(ScrollStrategyOptions);\n readonly #focusMonitor: FocusMonitor = inject(FocusMonitor);\n\n #overlayRef: OverlayRef | null = null;\n #tooltipRef: ComponentRef<RtTooltipComponent> | null = null;\n #showTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Текст подсказки. Принимает `null`/`undefined` (частый результат date-пайпа\n * или nullable-полей модели) и нормализует их в пустую строку — иначе\n * биндинги вида `value | date` ломали бы строгую типизацию шаблона. Пустая\n * строка → no-op (директива выключена).\n */\n public readonly text: InputSignalWithTransform<string, string | null | undefined> = input<string, string | null | undefined>('', {\n alias: 'rtTooltip',\n transform: (value: string | null | undefined): string => value ?? '',\n });\n\n /** Сторона подсказки. Не задана — сверху, а под материальным набором снизу, как у первого кита. */\n public readonly placement: InputSignal<IRtTooltip.Placement | null> = input<IRtTooltip.Placement | null>(null, {\n alias: 'rtTooltipPlacement',\n });\n\n /**\n * Подсказка только у обрезанного текста: хост меряется в момент показа, и подсказка не\n * появляется, пока его содержимое помещается целиком. Мерить заранее не нужно — показ идёт\n * только отсюда, и признак в эту минуту всегда свежий.\n */\n public readonly whenTruncated: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n alias: 'rtTooltipWhenTruncated',\n transform: booleanAttribute,\n });\n\n constructor() {\n this.#focusMonitor\n .monitor(this.#elementRef, true)\n .pipe(takeUntilDestroyed())\n .subscribe((origin: FocusOrigin): void => {\n if (origin === 'keyboard') {\n this.show();\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.#focusMonitor.stopMonitoring(this.#elementRef);\n this.#clearTimer();\n this.#disposeOverlay();\n }\n\n protected show(): void {\n if (this.text().trim() === '' || this.#tooltipRef !== null) {\n return;\n }\n this.#clearTimer();\n this.#showTimer = setTimeout((): void => this.#attach(), SHOW_DELAY_MS);\n }\n\n protected hide(): void {\n this.#clearTimer();\n this.#overlayRef?.detach();\n this.#tooltipRef = null;\n }\n\n #attach(): void {\n if (this.text().trim() === '' || (this.whenTruncated() && !isTooltipTextCut(this.#elementRef.nativeElement))) {\n return;\n }\n const overlayRef: OverlayRef = this.#ensureOverlay();\n // Коробка переживает закрытие, а кусок темы вокруг host'а мог смениться — переносим на каждом показе.\n carryThemeScope(overlayRef.overlayElement, this.#elementRef.nativeElement);\n const portal: ComponentPortal<RtTooltipComponent> = new ComponentPortal(RtTooltipComponent);\n this.#tooltipRef = overlayRef.attach(portal);\n this.#tooltipRef.instance.text.set(this.text());\n this.#tooltipRef.changeDetectorRef.markForCheck();\n }\n\n #ensureOverlay(): OverlayRef {\n if (this.#overlayRef !== null) {\n return this.#overlayRef;\n }\n const presetClasses: string[] = materialPresetClassesOf(this.#elementRef.nativeElement);\n const placement: IRtTooltip.Placement = this.placement() ?? (presetClasses.length > 0 ? 'bottom' : 'top');\n const positions: ConnectedPosition[] = tooltipPositions(placement);\n\n const positionStrategy: FlexibleConnectedPositionStrategy = this.#overlay\n .position()\n .flexibleConnectedTo(this.#elementRef)\n .withPush(true)\n .withViewportMargin(VIEWPORT_MARGIN)\n .withFlexibleDimensions(false)\n .withPositions(positions);\n\n const config: OverlayConfig = new OverlayConfig({\n positionStrategy,\n scrollStrategy: this.#scrollStrategies.reposition(),\n hasBackdrop: false,\n panelClass: ['rt-tooltip-panel', ...presetClasses],\n });\n this.#overlayRef = this.#overlay.create(config);\n return this.#overlayRef;\n }\n\n #clearTimer(): void {\n if (this.#showTimer !== null) {\n clearTimeout(this.#showTimer);\n this.#showTimer = null;\n }\n }\n\n #disposeOverlay(): void {\n this.#overlayRef?.dispose();\n this.#overlayRef = null;\n this.#tooltipRef = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { BlockDirective, ElemDirective } from '@rt-tools/core';
|
|
4
|
+
import { rtKitLabel, RT_KIT_LABELS } from '@rt-tools/ui-kit-v2/core';
|
|
5
|
+
import { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';
|
|
6
|
+
import { RtDialogRef, RT_DIALOG_DATA, RtDialogComponent } from '@rt-tools/ui-kit-v2/dialog';
|
|
7
|
+
|
|
8
|
+
const BEM_BLOCK = 'rt-welcome-dialog';
|
|
9
|
+
/** Ключ подписи CTA по умолчанию: язык известен только после старта приложения */
|
|
10
|
+
const DEFAULT_CTA_KEY = 'uiContinue';
|
|
11
|
+
/**
|
|
12
|
+
* Welcome-модалка первого входа: показывает настраиваемый текст приветствия роли.
|
|
13
|
+
* Открывается программно через `RtDialogService.open(RtWelcomeDialogComponent, { data })`.
|
|
14
|
+
*
|
|
15
|
+
* Текст приходит многострочным: первый абзац (до пустой строки) рендерится
|
|
16
|
+
* заголовком, остальные — параграфами описания. Без `rt-dialog-header` —
|
|
17
|
+
* единственное действие закрытия — CTA-кнопка.
|
|
18
|
+
*/
|
|
19
|
+
class RtWelcomeDialogComponent {
|
|
20
|
+
#dialogRef;
|
|
21
|
+
#data;
|
|
22
|
+
#defaultCtaLabel;
|
|
23
|
+
constructor() {
|
|
24
|
+
this.#dialogRef = inject(RtDialogRef);
|
|
25
|
+
this.#data = inject(RT_DIALOG_DATA, { optional: true });
|
|
26
|
+
this.#defaultCtaLabel = rtKitLabel(DEFAULT_CTA_KEY);
|
|
27
|
+
this.t = inject(RT_KIT_LABELS);
|
|
28
|
+
/** Своя подпись важнее умолчания: роль знает, куда ведёт кнопка */
|
|
29
|
+
this.ctaLabel = computed(() => this.#data?.ctaLabel || this.#defaultCtaLabel(), /* @ts-ignore */
|
|
30
|
+
...(ngDevMode ? [{ debugName: "ctaLabel" }] : /* istanbul ignore next */ []));
|
|
31
|
+
const parts = (this.#data?.message ?? '')
|
|
32
|
+
.split(/\n{2,}/)
|
|
33
|
+
.map((part) => part.trim())
|
|
34
|
+
.filter((part) => part.length > 0);
|
|
35
|
+
this.title = parts[0] ?? '';
|
|
36
|
+
this.paragraphs = parts.slice(1);
|
|
37
|
+
}
|
|
38
|
+
onClose() {
|
|
39
|
+
this.#dialogRef.close();
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtWelcomeDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtWelcomeDialogComponent, isStandalone: true, selector: "rt-welcome-dialog", host: { classAttribute: "rt-welcome-dialog" }, ngImport: i0, template: "<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-\u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0430 \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 label \u0447\u0435\u0440\u0435\u0437 Renderer2 \u0432 afterNextRender \u2014\n \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E child-\u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0430 \u0432 template \u043D\u0435\u0442 \u043D\u0430\u043C\u0435\u0440\u0435\u043D\u043D\u043E. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-welcome-dialog{display:contents}rt-welcome-dialog .rt-welcome-dialog{display:flex;flex-direction:column;padding:var(--rt-space-16) var(--rt-space-5);gap:var(--rt-space-5)}rt-welcome-dialog .rt-welcome-dialog__text{display:flex;flex-direction:column;gap:var(--rt-space-2);text-align:center}rt-welcome-dialog .rt-welcome-dialog__title{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-md);font-weight:var(--rt-font-weight-bold);line-height:var(--rt-leading-snug)}rt-welcome-dialog .rt-welcome-dialog__description{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-xs);font-weight:var(--rt-font-weight-regular);line-height:var(--rt-leading-snug);white-space:pre-line}rt-welcome-dialog .rt-welcome-dialog__cta{--rt-btn-font-size: 14px;width:100%;letter-spacing:0}}\n"], dependencies: [{ kind: "directive", type:
|
|
43
|
+
// standalone components / directives
|
|
44
|
+
RtButtonDirective, selector: "button[rtButton], a[rtButton]", inputs: ["label", "icon", "iconPos", "theme", "appearance", "size", "loading", "loadingIcon", "loadingLabel", "pressed"] }, { kind: "component", type: RtDialogComponent, selector: "rt-dialog", inputs: ["size", "width", "ariaLabel"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
45
|
+
}
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtWelcomeDialogComponent, decorators: [{
|
|
47
|
+
type: Component,
|
|
48
|
+
args: [{ selector: 'rt-welcome-dialog', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
|
49
|
+
// standalone components / directives
|
|
50
|
+
RtButtonDirective,
|
|
51
|
+
RtDialogComponent,
|
|
52
|
+
BlockDirective,
|
|
53
|
+
ElemDirective,
|
|
54
|
+
], host: {
|
|
55
|
+
class: BEM_BLOCK,
|
|
56
|
+
}, template: "<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-\u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0430 \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 label \u0447\u0435\u0440\u0435\u0437 Renderer2 \u0432 afterNextRender \u2014\n \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E child-\u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0430 \u0432 template \u043D\u0435\u0442 \u043D\u0430\u043C\u0435\u0440\u0435\u043D\u043D\u043E. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-welcome-dialog{display:contents}rt-welcome-dialog .rt-welcome-dialog{display:flex;flex-direction:column;padding:var(--rt-space-16) var(--rt-space-5);gap:var(--rt-space-5)}rt-welcome-dialog .rt-welcome-dialog__text{display:flex;flex-direction:column;gap:var(--rt-space-2);text-align:center}rt-welcome-dialog .rt-welcome-dialog__title{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-md);font-weight:var(--rt-font-weight-bold);line-height:var(--rt-leading-snug)}rt-welcome-dialog .rt-welcome-dialog__description{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-xs);font-weight:var(--rt-font-weight-regular);line-height:var(--rt-leading-snug);white-space:pre-line}rt-welcome-dialog .rt-welcome-dialog__cta{--rt-btn-font-size: 14px;width:100%;letter-spacing:0}}\n"] }]
|
|
57
|
+
}], ctorParameters: () => [] });
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Generated bundle index. Do not edit.
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
export { RtWelcomeDialogComponent };
|
|
64
|
+
//# sourceMappingURL=rt-tools-ui-kit-v2-welcome-dialog.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-welcome-dialog.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/welcome-dialog/rt-welcome-dialog.component.ts","../../../projects/ui-kit-v2/src/lib/components/welcome-dialog/rt-welcome-dialog.component.html","../../../projects/ui-kit-v2/src/lib/components/welcome-dialog/rt-tools-ui-kit-v2-welcome-dialog.ts"],"sourcesContent":["import { computed, inject, ChangeDetectionStrategy, Component, Signal, ViewEncapsulation } from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { RT_KIT_LABELS, TRtKitLabelKey, TRtKitLabelMap, rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtDialogRef } from '@rt-tools/ui-kit-v2/dialog';\nimport { RtDialogComponent } from '@rt-tools/ui-kit-v2/dialog';\nimport { RT_DIALOG_DATA } from '@rt-tools/ui-kit-v2/dialog';\n\nconst BEM_BLOCK: string = 'rt-welcome-dialog';\n\n/** Ключ подписи CTA по умолчанию: язык известен только после старта приложения */\nconst DEFAULT_CTA_KEY: TRtKitLabelKey = 'uiContinue';\n\nexport namespace IRtWelcomeDialog {\n /** Payload модалки: настраиваемый текст приветствия + подпись CTA-кнопки. */\n export interface Data {\n message: string;\n ctaLabel?: string;\n }\n}\n\n/**\n * Welcome-модалка первого входа: показывает настраиваемый текст приветствия роли.\n * Открывается программно через `RtDialogService.open(RtWelcomeDialogComponent, { data })`.\n *\n * Текст приходит многострочным: первый абзац (до пустой строки) рендерится\n * заголовком, остальные — параграфами описания. Без `rt-dialog-header` —\n * единственное действие закрытия — CTA-кнопка.\n */\n@Component({\n selector: 'rt-welcome-dialog',\n templateUrl: './rt-welcome-dialog.component.html',\n styleUrl: './rt-welcome-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtButtonDirective,\n RtDialogComponent,\n BlockDirective,\n ElemDirective,\n ],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtWelcomeDialogComponent {\n readonly #dialogRef: RtDialogRef = inject(RtDialogRef);\n readonly #data: IRtWelcomeDialog.Data | null = inject<IRtWelcomeDialog.Data | null>(RT_DIALOG_DATA, { optional: true });\n\n readonly #defaultCtaLabel: Signal<string> = rtKitLabel(DEFAULT_CTA_KEY);\n\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n protected readonly title: string;\n\n protected readonly paragraphs: string[];\n\n /** Своя подпись важнее умолчания: роль знает, куда ведёт кнопка */\n protected readonly ctaLabel: Signal<string> = computed((): string => this.#data?.ctaLabel || this.#defaultCtaLabel());\n\n constructor() {\n const parts: string[] = (this.#data?.message ?? '')\n .split(/\\n{2,}/)\n .map((part: string): string => part.trim())\n .filter((part: string): boolean => part.length > 0);\n this.title = parts[0] ?? '';\n this.paragraphs = parts.slice(1);\n }\n\n protected onClose(): void {\n this.#dialogRef.close();\n }\n}\n","<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-директива рендерит label через Renderer2 в afterNextRender —\n статического child-контента в template нет намеренно. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|