@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,729 +1,974 @@
|
|
|
1
|
-
import { DOCUMENT } from
|
|
2
|
-
import * as i0 from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { iconsName } from
|
|
6
|
-
import { HttpClient } from
|
|
7
|
-
import { takeUntilDestroyed } from
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Категории иконок rt-icon. 11 buckets: 8 prefix-based + Social (префикс `social-`) + Custom
|
|
12
|
-
* (префикс `ico-`) + Misc (fallback).
|
|
13
|
-
* Порядок фиксирован — соответствует порядку отображения в Catalog story (rt-icon.stories.ts).
|
|
14
|
-
*
|
|
15
|
-
* Аннотация типа намеренно не указывается: явный `readonly string[]` потерял бы узкий
|
|
16
|
-
* литеральный тип, нужный для {@link TIconCategory}. `as const` сохраняет литеральные ключи.
|
|
17
|
-
*/
|
|
18
|
-
// eslint-disable-next-line @typescript-eslint/typedef -- аннотация стёрла бы литеральный тип, на котором стоит TIconCategory
|
|
1
|
+
import { DOCUMENT } from "@angular/common";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Injectable, InjectionToken, ViewEncapsulation, afterNextRender, booleanAttribute, computed, effect, inject, input, makeEnvironmentProviders, numberAttribute, signal } from "@angular/core";
|
|
4
|
+
import { BlockDirective, ElemDirective, ModDirective, PlatformService } from "@rt-tools/core";
|
|
5
|
+
import { iconsName } from "@rt-tools/ui-kit-v2/core";
|
|
6
|
+
import { HttpClient } from "@angular/common/http";
|
|
7
|
+
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
8
|
+
import { EMPTY, Subject, catchError, map, mergeMap, tap } from "rxjs";
|
|
19
9
|
const CATEGORY_ORDER = [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
10
|
+
"Navigation",
|
|
11
|
+
"Alignment & Sorting",
|
|
12
|
+
"Status",
|
|
13
|
+
"Time & Calendar",
|
|
14
|
+
"Communication",
|
|
15
|
+
"Documents",
|
|
16
|
+
"People",
|
|
17
|
+
"Commerce",
|
|
18
|
+
"Social",
|
|
19
|
+
"Custom",
|
|
20
|
+
"Misc"
|
|
31
21
|
];
|
|
32
22
|
function startsWithAny(name, prefixes) {
|
|
33
|
-
|
|
23
|
+
return prefixes.some((p) => name.startsWith(p));
|
|
34
24
|
}
|
|
35
25
|
function isOneOf(name, names) {
|
|
36
|
-
|
|
26
|
+
return names.includes(name);
|
|
37
27
|
}
|
|
38
28
|
function matchPrefixOrExact(prefixes, exact) {
|
|
39
|
-
|
|
29
|
+
return (name) => startsWithAny(name, prefixes) || isOneOf(name, exact);
|
|
40
30
|
}
|
|
41
|
-
/**
|
|
42
|
-
* Упорядоченный список правил категоризации.
|
|
43
|
-
* `Custom` — единственная категория по строгому префиксу `ico-` и проверяется первой,
|
|
44
|
-
* чтобы исключить конфликты с другими prefix-based категориями.
|
|
45
|
-
* `Misc` — fallback в {@link categoryOf}, отдельным правилом не описывается.
|
|
46
|
-
*/
|
|
47
31
|
const ICON_CATEGORY_RULES = [
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
32
|
+
{
|
|
33
|
+
category: "Social",
|
|
34
|
+
match: (n) => n.startsWith("social-")
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
category: "Custom",
|
|
38
|
+
match: (n) => n.startsWith("ico-")
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
category: "Navigation",
|
|
42
|
+
match: matchPrefixOrExact([
|
|
43
|
+
"arrow",
|
|
44
|
+
"arrows",
|
|
45
|
+
"angle",
|
|
46
|
+
"chevron",
|
|
47
|
+
"directions"
|
|
48
|
+
], [])
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
category: "Alignment & Sorting",
|
|
52
|
+
match: matchPrefixOrExact([
|
|
53
|
+
"align",
|
|
54
|
+
"sort",
|
|
55
|
+
"bars",
|
|
56
|
+
"ellipsis",
|
|
57
|
+
"sliders",
|
|
58
|
+
"filter",
|
|
59
|
+
"th"
|
|
60
|
+
], [])
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
category: "Status",
|
|
64
|
+
match: matchPrefixOrExact([
|
|
65
|
+
"check",
|
|
66
|
+
"times",
|
|
67
|
+
"ban",
|
|
68
|
+
"exclamation",
|
|
69
|
+
"info",
|
|
70
|
+
"eye",
|
|
71
|
+
"lock",
|
|
72
|
+
"unlock",
|
|
73
|
+
"shield"
|
|
74
|
+
], ["spinner", "stop"])
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
category: "Time & Calendar",
|
|
78
|
+
match: matchPrefixOrExact(["alarm", "calendar"], ["clock"])
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
category: "Communication",
|
|
82
|
+
match: matchPrefixOrExact(["comment", "share"], [
|
|
83
|
+
"bell",
|
|
84
|
+
"bot",
|
|
85
|
+
"telegram",
|
|
86
|
+
"at",
|
|
87
|
+
"email",
|
|
88
|
+
"send",
|
|
89
|
+
"phone",
|
|
90
|
+
"mobile"
|
|
91
|
+
])
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
category: "Documents",
|
|
95
|
+
match: matchPrefixOrExact([
|
|
96
|
+
"attach",
|
|
97
|
+
"file",
|
|
98
|
+
"folder",
|
|
99
|
+
"bookmark"
|
|
100
|
+
], [
|
|
101
|
+
"book",
|
|
102
|
+
"copy",
|
|
103
|
+
"clone",
|
|
104
|
+
"tag",
|
|
105
|
+
"tags"
|
|
106
|
+
])
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
category: "People",
|
|
110
|
+
match: matchPrefixOrExact(["user"], ["users", "id-card"])
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
category: "Commerce",
|
|
114
|
+
match: (n) => isOneOf(n, [
|
|
115
|
+
"wallet",
|
|
116
|
+
"money-bill",
|
|
117
|
+
"ticket",
|
|
118
|
+
"credit-card"
|
|
119
|
+
])
|
|
120
|
+
}
|
|
84
121
|
];
|
|
85
|
-
/**
|
|
86
|
-
* Возвращает категорию для имени иконки.
|
|
87
|
-
* Первое совпавшее правило в {@link ICON_CATEGORY_RULES} выигрывает; иначе — `Misc`.
|
|
88
|
-
*/
|
|
89
122
|
function categoryOf(name) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return rule.category;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return 'Misc';
|
|
123
|
+
for (const rule of ICON_CATEGORY_RULES) if (rule.match(name)) return rule.category;
|
|
124
|
+
return "Misc";
|
|
96
125
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
* по умолчанию `map-first` — пара из перечня кита, а без пары шрифт.
|
|
101
|
-
*/
|
|
102
|
-
const RT_ICON_GLYPH_STRATEGY = new InjectionToken('RT_ICON_GLYPH_STRATEGY', {
|
|
103
|
-
providedIn: 'root',
|
|
104
|
-
factory: () => 'map-first',
|
|
126
|
+
const RT_ICON_GLYPH_STRATEGY = new InjectionToken("RT_ICON_GLYPH_STRATEGY", {
|
|
127
|
+
providedIn: "root",
|
|
128
|
+
factory: () => "map-first"
|
|
105
129
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
* таких пар помечены доводом — их можно переложить на свои одним местом.
|
|
159
|
-
*
|
|
160
|
-
* Имя без пары стоит здесь же, с причиной: молчание об имени неотличимо от того, что о нём
|
|
161
|
-
* забыли. Дорисовка недостающего — работа рисующего, и она вынесена за границу задачи.
|
|
162
|
-
*
|
|
163
|
-
* Держит перечень `tools/check-icon-map.mjs`: каждая пара ведёт на имя союза и на существующий
|
|
164
|
-
* файл, имена не повторяются, причина у имени без пары не пуста.
|
|
165
|
-
*/
|
|
166
|
-
/** Довод самой частой пары: имя первого кита и имя набора совпали после замены подчёркиваний. */
|
|
167
|
-
const SAME_NAME = 'совпадает именем';
|
|
130
|
+
var RtIconFontService = class RtIconFontService {
|
|
131
|
+
#ready;
|
|
132
|
+
#isBrowser;
|
|
133
|
+
#document;
|
|
134
|
+
constructor() {
|
|
135
|
+
this.#ready = signal(false, ...ngDevMode ? [{ debugName: "#ready" }] : /* istanbul ignore next */ []);
|
|
136
|
+
this.#isBrowser = inject(PlatformService).isPlatformBrowser;
|
|
137
|
+
this.#document = inject(DOCUMENT);
|
|
138
|
+
this.ready = this.#ready.asReadonly();
|
|
139
|
+
this.#watchFonts();
|
|
140
|
+
}
|
|
141
|
+
#watchFonts() {
|
|
142
|
+
if (!this.#isBrowser) return;
|
|
143
|
+
const fonts = this.#document.fonts;
|
|
144
|
+
if (!fonts) {
|
|
145
|
+
this.#ready.set(true);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
fonts.ready.then(() => this.#ready.set(true));
|
|
149
|
+
}
|
|
150
|
+
static {
|
|
151
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
152
|
+
minVersion: "12.0.0",
|
|
153
|
+
version: "22.2.2",
|
|
154
|
+
ngImport: i0,
|
|
155
|
+
type: RtIconFontService,
|
|
156
|
+
deps: [],
|
|
157
|
+
target: i0.ɵɵFactoryTarget.Injectable
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
static {
|
|
161
|
+
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
162
|
+
minVersion: "12.0.0",
|
|
163
|
+
version: "22.2.2",
|
|
164
|
+
ngImport: i0,
|
|
165
|
+
type: RtIconFontService,
|
|
166
|
+
providedIn: "root"
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
171
|
+
minVersion: "12.0.0",
|
|
172
|
+
version: "22.2.2",
|
|
173
|
+
ngImport: i0,
|
|
174
|
+
type: RtIconFontService,
|
|
175
|
+
decorators: [{
|
|
176
|
+
type: Injectable,
|
|
177
|
+
args: [{ providedIn: "root" }]
|
|
178
|
+
}],
|
|
179
|
+
ctorParameters: () => []
|
|
180
|
+
});
|
|
181
|
+
const SAME_NAME = "совпадает именем";
|
|
168
182
|
const iconMaterialMap = [
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
183
|
+
{
|
|
184
|
+
from: "account_circle",
|
|
185
|
+
to: "ico-user",
|
|
186
|
+
why: "силуэт человека; у user уже стоит рисунок person, поэтому пара на двойнике ico-user"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
from: "add",
|
|
190
|
+
to: "ico-plus",
|
|
191
|
+
why: "простой плюс есть только в своей рисовке — во фрейме плюс лишь в круге и в составных"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
from: "arrow_back",
|
|
195
|
+
to: "arrow-left",
|
|
196
|
+
why: "стрелка влево, один в один"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
from: "arrow_forward",
|
|
200
|
+
to: "arrow-right",
|
|
201
|
+
why: "стрелка вправо, один в один"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
from: "auto_awesome",
|
|
205
|
+
to: "sparkle",
|
|
206
|
+
why: "знак ИИ: большая и малая четырёхлучевые искры"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
from: "backup",
|
|
210
|
+
to: "cloud-upload",
|
|
211
|
+
why: "у Material backup — облако со стрелкой вверх, это оно и есть"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
from: "block",
|
|
215
|
+
to: "ban",
|
|
216
|
+
why: "круг с перечёркиванием, один в один"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
from: "chat",
|
|
220
|
+
to: "comment",
|
|
221
|
+
why: "облачко реплики, ближний: у Material оно квадратное, здесь круглое"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
from: "chat_error",
|
|
225
|
+
to: "chat-error",
|
|
226
|
+
why: SAME_NAME
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
from: "chevron_left",
|
|
230
|
+
to: "chevron-left",
|
|
231
|
+
why: SAME_NAME
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
from: "chevron_right",
|
|
235
|
+
to: "chevron-right",
|
|
236
|
+
why: SAME_NAME
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
from: "close",
|
|
240
|
+
to: "close",
|
|
241
|
+
why: `${SAME_NAME}; есть двойник ico-close`
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
from: "collapse_all",
|
|
245
|
+
to: "collapse-all",
|
|
246
|
+
why: `${SAME_NAME}; в первом ките не встречается — его зовёт приложение у выбора деревом`
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
from: "content_copy",
|
|
250
|
+
to: "copy",
|
|
251
|
+
why: "два листа, один в один; есть двойник ico-copy"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
from: "dashboard",
|
|
255
|
+
to: "th-large",
|
|
256
|
+
why: "ближний: у Material четыре разных плитки, здесь четыре равных"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
from: "delete",
|
|
260
|
+
to: "trash",
|
|
261
|
+
why: "корзина, один в один; есть двойник ico-trash"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
from: "delete_forever",
|
|
265
|
+
to: "trash-x",
|
|
266
|
+
why: "корзина с крестом, дорисована в своём наборе для кнопки очистки списка"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
from: "done",
|
|
270
|
+
to: "check",
|
|
271
|
+
why: "галочка, один в один; есть двойник ico-check"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
from: "email",
|
|
275
|
+
to: "email",
|
|
276
|
+
why: "конверт, один в один"
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
from: "download",
|
|
280
|
+
to: "ico-download",
|
|
281
|
+
why: "простая стрелка вниз есть только в своей рисовке — во фрейме лишь облако"
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
from: "drag_handle",
|
|
285
|
+
to: "equals",
|
|
286
|
+
why: "две горизонтальные полосы; рисунок дорисован по слову владельца — им таблица первого кита показывает сравнение «равно»"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
from: "edit",
|
|
290
|
+
to: "pencil",
|
|
291
|
+
why: "карандаш, один в один"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
from: "expand_all",
|
|
295
|
+
to: "expand-all",
|
|
296
|
+
why: `${SAME_NAME}; в первом ките не встречается — его зовёт приложение у выбора деревом`
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
from: "folder",
|
|
300
|
+
to: "folder",
|
|
301
|
+
why: SAME_NAME
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
from: "fork_spoon",
|
|
305
|
+
to: "fork-spoon",
|
|
306
|
+
why: SAME_NAME
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
from: "fullscreen",
|
|
310
|
+
to: "fullscreen",
|
|
311
|
+
why: SAME_NAME
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
from: "fullscreen_exit",
|
|
315
|
+
to: "window-minimize",
|
|
316
|
+
why: "уголки внутрь — пара к fullscreen, выход из полного экрана в шапке чата"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
from: "history",
|
|
320
|
+
to: "history",
|
|
321
|
+
why: SAME_NAME
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
from: "home",
|
|
325
|
+
to: "home",
|
|
326
|
+
why: SAME_NAME
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
from: "info",
|
|
330
|
+
to: "info-circle",
|
|
331
|
+
why: "круг с буквой i — так рисует Material; голое info в наборе другое"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
from: "insert_chart",
|
|
335
|
+
to: "chart-bar",
|
|
336
|
+
why: "столбики диаграммы, ближний: у Material они в рамке"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
from: "keyboard_arrow_down",
|
|
340
|
+
to: "chevron-down",
|
|
341
|
+
why: "шеврон вниз, один в один; есть двойник ico-chevron-down"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
from: "layers",
|
|
345
|
+
to: "layers",
|
|
346
|
+
why: SAME_NAME
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
from: "light_mode",
|
|
350
|
+
to: "ico-sun",
|
|
351
|
+
why: "солнце, один в один; простого солнца во фрейме нет"
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
from: "local_offer",
|
|
355
|
+
to: "tag",
|
|
356
|
+
why: "ярлык, один в один"
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
from: "logout",
|
|
360
|
+
to: "ico-exit",
|
|
361
|
+
why: "дверь со стрелкой наружу, один в один"
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
from: "menu",
|
|
365
|
+
to: "bars",
|
|
366
|
+
why: "три полосы, один в один"
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
from: "monitoring",
|
|
370
|
+
to: "chart-line",
|
|
371
|
+
why: "ближний: у Material ломаная над осями, здесь ломаная"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
from: "moon_stars",
|
|
375
|
+
to: "moon",
|
|
376
|
+
why: "ближний: месяц без звёзд"
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
from: "more_horiz",
|
|
380
|
+
to: "ellipsis-h",
|
|
381
|
+
why: "три точки по горизонтали"
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
from: "more_vert",
|
|
385
|
+
to: "ellipsis-v",
|
|
386
|
+
why: "три точки по вертикали"
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
from: "open_in_new",
|
|
390
|
+
to: "external-link",
|
|
391
|
+
why: "квадрат со стрелкой наружу"
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
from: "open_with",
|
|
395
|
+
to: "arrows",
|
|
396
|
+
why: "четыре стрелки из центра; рисунок дорисован — им панель колонок первого кита показывает ручку перетаскивания"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
from: "person",
|
|
400
|
+
to: "user",
|
|
401
|
+
why: "силуэт человека, один в один; есть двойник ico-user"
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
from: "person_off",
|
|
405
|
+
to: "user-off",
|
|
406
|
+
why: "силуэт человека, перечёркнутый наискось; рисунок дорисован по слову владельца"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
from: "push_pin",
|
|
410
|
+
to: "pin",
|
|
411
|
+
why: "канцелярская булавка; рисунок дорисован — ею первый кит закрепляет подменю"
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
from: "refresh",
|
|
415
|
+
to: "refresh",
|
|
416
|
+
why: SAME_NAME
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
from: "remove",
|
|
420
|
+
to: "minus",
|
|
421
|
+
why: "горизонтальная черта, один в один"
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
from: "search",
|
|
425
|
+
to: "search",
|
|
426
|
+
why: `${SAME_NAME}; есть двойник ico-search`
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
from: "settings",
|
|
430
|
+
to: "cog",
|
|
431
|
+
why: "шестерёнка, один в один"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
from: "star",
|
|
435
|
+
to: "star",
|
|
436
|
+
why: SAME_NAME
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
from: "sync",
|
|
440
|
+
to: "sync",
|
|
441
|
+
why: SAME_NAME
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
from: "thumb_down",
|
|
445
|
+
to: "thumb-down",
|
|
446
|
+
why: "палец вниз, один в один"
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
from: "thumb_up",
|
|
450
|
+
to: "thumb-up",
|
|
451
|
+
why: "палец вверх, один в один"
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
from: "troubleshoot",
|
|
455
|
+
to: "troubleshoot",
|
|
456
|
+
why: SAME_NAME
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
from: "undo",
|
|
460
|
+
to: "undo",
|
|
461
|
+
why: `${SAME_NAME}; в первом ките не встречается — его зовёт откат выбора деревом`
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
from: "view_column",
|
|
465
|
+
to: "table",
|
|
466
|
+
why: "ближний: у Material это колонки, здесь таблица — решение владельца"
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
from: "visibility",
|
|
470
|
+
to: "eye",
|
|
471
|
+
why: "глаз, один в один; есть двойник ico-eye"
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
from: "visibility_off",
|
|
475
|
+
to: "eye-slash",
|
|
476
|
+
why: "перечёркнутый глаз, один в один"
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
from: "zoom_in",
|
|
480
|
+
to: "search-plus",
|
|
481
|
+
why: "лупа с плюсом, один в один"
|
|
482
|
+
}
|
|
234
483
|
];
|
|
235
|
-
|
|
236
|
-
* Имена кита, у которых в материальном наборе лежит свой рисунок.
|
|
237
|
-
*
|
|
238
|
-
* Считается из перечня, а не пишется списком: свой список разошёлся бы с перечнем молча — реестр
|
|
239
|
-
* ходил бы за файлом, которого нет, или не ходил бы за лежащим.
|
|
240
|
-
*/
|
|
241
|
-
const iconMaterialDrawn = new Set(iconMaterialMap
|
|
242
|
-
.map((entry) => entry.to)
|
|
243
|
-
.filter((name) => name !== null));
|
|
244
|
-
|
|
484
|
+
const iconMaterialDrawn = new Set(iconMaterialMap.map((entry) => entry.to).filter((name) => name !== null));
|
|
245
485
|
const KIT_NAMES = new Set(iconsName);
|
|
246
|
-
/** Имя лигатуры Material Symbols: строчные латинские буквы, цифры и подчёркивание. */
|
|
247
486
|
const LIGATURE_NAME = /^[a-z0-9_]+$/;
|
|
248
|
-
/** Имя значка кита — то, что рисует спрайт; остальное кит своим рисунком не закрывает. */
|
|
249
487
|
function isKitIconName(name) {
|
|
250
|
-
|
|
488
|
+
return KIT_NAMES.has(name);
|
|
251
489
|
}
|
|
252
|
-
/** Пара имени Material из перечня кита; `null` — пары нет или имени нет. */
|
|
253
490
|
function materialPairOf(glyph) {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
}
|
|
257
|
-
return iconMaterialMap.find((entry) => entry.from === glyph)?.to ?? null;
|
|
491
|
+
if (!glyph) return null;
|
|
492
|
+
return iconMaterialMap.find((entry) => entry.from === glyph)?.to ?? null;
|
|
258
493
|
}
|
|
259
494
|
function kitOrPairOf(glyph) {
|
|
260
|
-
|
|
495
|
+
return isKitIconName(glyph) ? glyph : materialPairOf(glyph);
|
|
261
496
|
}
|
|
262
|
-
/** Имя кита, которое шрифт нарисовать не может: дефис или заглавная буква. Лигатура — `null`. */
|
|
263
497
|
function unlettered(glyph) {
|
|
264
|
-
|
|
498
|
+
return isKitIconName(glyph) && !LIGATURE_NAME.test(glyph) ? glyph : null;
|
|
265
499
|
}
|
|
266
|
-
/**
|
|
267
|
-
* Чем рисуется значок: своим рисунком кита или лигатурой шрифта Material.
|
|
268
|
-
*
|
|
269
|
-
* Имя кита выигрывает у имени Material, если названы оба. Имя Material по способу `map-first`
|
|
270
|
-
* берёт пару из перечня, а без пары — шрифт; по способу `font` — шрифт сразу. Имя кита, которое шрифт
|
|
271
|
-
* нарисовать не может (`ico-plus`, `docBox`), и по способу `font` рисуется рисунком кита: иначе в
|
|
272
|
-
* значке стоит текст имени. Имя кита, совпавшее с лигатурой (`search`), по `font` — шрифт. Материальный рисунок
|
|
273
|
-
* для пары выбирает уже сам значок по признаку набора над собой: это не дело разбора.
|
|
274
|
-
*
|
|
275
|
-
* `null` — значку нечего рисовать.
|
|
276
|
-
*/
|
|
277
500
|
function resolveIconGlyph(name, glyph, strategy) {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
501
|
+
if (name) return {
|
|
502
|
+
kind: "kit",
|
|
503
|
+
name
|
|
504
|
+
};
|
|
505
|
+
if (!glyph) return null;
|
|
506
|
+
const pair = strategy === "map-first" ? kitOrPairOf(glyph) : unlettered(glyph);
|
|
507
|
+
return pair === null ? {
|
|
508
|
+
kind: "font",
|
|
509
|
+
glyph
|
|
510
|
+
} : {
|
|
511
|
+
kind: "kit",
|
|
512
|
+
name: pair
|
|
513
|
+
};
|
|
286
514
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
* под Playwright и ни одного объявления Angular поднять не может. Своя копия там уже стояла —
|
|
293
|
-
* второе объявление того же значения расходится с первым молча: ожидание набора ищет один узел,
|
|
294
|
-
* а реестр создаёт другой, и кадр выходит без значков.
|
|
295
|
-
*/
|
|
296
|
-
/** Селектор inline-sprite, создаваемого один раз при первом обращении. */
|
|
297
|
-
const RT_ICON_SPRITE_ID = 'rt-icon-sprite';
|
|
298
|
-
/** Префикс `id` для inline-sprite символов. Изолирует от внешних `id` на странице. */
|
|
299
|
-
const RT_ICON_SYMBOL_ID_PREFIX = 'rt-icon-';
|
|
300
|
-
/**
|
|
301
|
-
* Префикс `id` символов материального набора. Свой, а не общий: наборов на странице бывает два —
|
|
302
|
-
* признак набора стоит и на корне, и на контейнере, — а один `id` держит один рисунок. С общим
|
|
303
|
-
* префиксом второй набор молча забирал бы символ первого.
|
|
304
|
-
*/
|
|
305
|
-
const RT_ICON_MATERIAL_SYMBOL_ID_PREFIX = 'rt-icon-material-';
|
|
306
|
-
/** Префикс `id` залитых рисунков материального набора: у имени их два, и `id` у каждого свой. */
|
|
307
|
-
const RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX = 'rt-icon-material-fill-';
|
|
308
|
-
/**
|
|
309
|
-
* Атрибут, который переключает только набор рисунков значков: токенов набора оформления он не
|
|
310
|
-
* несёт. Ставится на контейнер со значением `'material'` там, где значки нужны материальные, а
|
|
311
|
-
* остальной вид — свой.
|
|
312
|
-
*/
|
|
313
|
-
const RT_ICON_PRESET_ATTRIBUTE = 'data-rt-icon-preset';
|
|
314
|
-
/**
|
|
315
|
-
* Селекторы, которыми страница объявляет материальный набор значков: признак набора оформления
|
|
316
|
-
* и признак одних значков. Стили читают только первые два — токены под третьим не меняются.
|
|
317
|
-
*/
|
|
515
|
+
const RT_ICON_SPRITE_ID = "rt-icon-sprite";
|
|
516
|
+
const RT_ICON_SYMBOL_ID_PREFIX = "rt-icon-";
|
|
517
|
+
const RT_ICON_MATERIAL_SYMBOL_ID_PREFIX = "rt-icon-material-";
|
|
518
|
+
const RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX = "rt-icon-material-fill-";
|
|
519
|
+
const RT_ICON_PRESET_ATTRIBUTE = "data-rt-icon-preset";
|
|
318
520
|
const RT_ICON_MATERIAL_PRESET_SELECTOR = `[data-preset='material'],.rt-preset-material,[${RT_ICON_PRESET_ATTRIBUTE}='material']`;
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
* Умолчание годится, когда сборка кладёт набор в корень статики; свой адрес
|
|
323
|
-
* задаётся аргументом `provideRtIcons()`.
|
|
324
|
-
*/
|
|
325
|
-
const RT_ICONS_BASE_URL = new InjectionToken('RT_ICONS_BASE_URL', {
|
|
326
|
-
providedIn: 'root',
|
|
327
|
-
factory: () => '/icons',
|
|
521
|
+
const RT_ICONS_BASE_URL = new InjectionToken("RT_ICONS_BASE_URL", {
|
|
522
|
+
providedIn: "root",
|
|
523
|
+
factory: () => "/icons"
|
|
328
524
|
});
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
525
|
+
const RT_ICONS_MATERIAL_BASE_URL = new InjectionToken("RT_ICONS_MATERIAL_BASE_URL", {
|
|
526
|
+
providedIn: "root",
|
|
527
|
+
factory: () => "/icons-material"
|
|
528
|
+
});
|
|
529
|
+
var RtIconRegistry = class RtIconRegistry {
|
|
530
|
+
#http = inject(HttpClient);
|
|
531
|
+
#doc = inject(DOCUMENT);
|
|
532
|
+
#baseUrl = inject(RT_ICONS_BASE_URL);
|
|
533
|
+
#materialBaseUrl = inject(RT_ICONS_MATERIAL_BASE_URL);
|
|
534
|
+
#platform = inject(PlatformService);
|
|
535
|
+
#requested = /* @__PURE__ */ new Set();
|
|
536
|
+
#requestSource = new Subject();
|
|
537
|
+
constructor() {
|
|
538
|
+
this.#requestSource.pipe(mergeMap((asked) => this.#load(asked)), takeUntilDestroyed()).subscribe();
|
|
539
|
+
}
|
|
540
|
+
symbolHref(name, drawing = "base") {
|
|
541
|
+
return `#${this.#symbolId(name, drawing)}`;
|
|
542
|
+
}
|
|
543
|
+
request(name, drawing = "base") {
|
|
544
|
+
const id = this.#symbolId(name, drawing);
|
|
545
|
+
if (!this.#platform.isPlatformBrowser || this.#requested.has(id)) return;
|
|
546
|
+
this.#requested.add(id);
|
|
547
|
+
if (this.#doc.getElementById(id)) return;
|
|
548
|
+
this.#requestSource.next({
|
|
549
|
+
name,
|
|
550
|
+
drawing
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
#load(asked) {
|
|
554
|
+
if (asked.drawing === "base") return this.#loadInto(asked, `${this.#baseUrl}/${asked.name}.svg`, EMPTY);
|
|
555
|
+
const own = this.#loadInto(asked, `${this.#baseUrl}/${asked.name}.svg`, EMPTY);
|
|
556
|
+
const outlined = asked.drawing === "material-fill" ? this.#loadInto(asked, `${this.#materialBaseUrl}/${asked.name}.svg`, own) : own;
|
|
557
|
+
const file = asked.drawing === "material-fill" ? `${asked.name}.fill.svg` : `${asked.name}.svg`;
|
|
558
|
+
return this.#loadInto(asked, `${this.#materialBaseUrl}/${file}`, outlined);
|
|
559
|
+
}
|
|
560
|
+
#loadInto(asked, url, fallback) {
|
|
561
|
+
return this.#http.get(url, { responseType: "text" }).pipe(tap((raw) => this.#mountSymbol(asked, raw)), map(() => void 0), catchError(() => fallback));
|
|
562
|
+
}
|
|
563
|
+
#symbolId(name, drawing) {
|
|
564
|
+
return `${{
|
|
565
|
+
base: RT_ICON_SYMBOL_ID_PREFIX,
|
|
566
|
+
material: RT_ICON_MATERIAL_SYMBOL_ID_PREFIX,
|
|
567
|
+
"material-fill": RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX
|
|
568
|
+
}[drawing]}${name}`;
|
|
569
|
+
}
|
|
570
|
+
#mountSymbol(asked, raw) {
|
|
571
|
+
const symbol = this.#doc.createElementNS("http://www.w3.org/2000/svg", "symbol");
|
|
572
|
+
symbol.id = this.#symbolId(asked.name, asked.drawing);
|
|
573
|
+
symbol.setAttribute("viewBox", this.#viewBox(raw));
|
|
574
|
+
symbol.innerHTML = this.#inner(raw);
|
|
575
|
+
this.#sprite().appendChild(symbol);
|
|
576
|
+
}
|
|
577
|
+
#viewBox(raw) {
|
|
578
|
+
const viewBoxMatch = /viewBox="([^"]+)"/.exec(raw);
|
|
579
|
+
return viewBoxMatch ? viewBoxMatch[1] : "0 0 24 24";
|
|
580
|
+
}
|
|
581
|
+
#inner(raw) {
|
|
582
|
+
return raw.replace(/<\?xml[\s\S]*?\?>/g, "").replace(/<!DOCTYPE[\s\S]*?>/g, "").replace(/<svg\b[^>]*>/i, "").replace(/<\/svg>\s*$/i, "").trim();
|
|
583
|
+
}
|
|
584
|
+
#sprite() {
|
|
585
|
+
const existing = this.#doc.querySelector(`svg#${RT_ICON_SPRITE_ID}`);
|
|
586
|
+
if (existing) return existing;
|
|
587
|
+
const sprite = this.#doc.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
588
|
+
sprite.id = RT_ICON_SPRITE_ID;
|
|
589
|
+
sprite.setAttribute("aria-hidden", "true");
|
|
590
|
+
sprite.setAttribute("style", "position:absolute;width:0;height:0;overflow:hidden;");
|
|
591
|
+
this.#doc.body.insertBefore(sprite, this.#doc.body.firstChild);
|
|
592
|
+
return sprite;
|
|
593
|
+
}
|
|
594
|
+
static {
|
|
595
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
596
|
+
minVersion: "12.0.0",
|
|
597
|
+
version: "22.2.2",
|
|
598
|
+
ngImport: i0,
|
|
599
|
+
type: RtIconRegistry,
|
|
600
|
+
deps: [],
|
|
601
|
+
target: i0.ɵɵFactoryTarget.Injectable
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
static {
|
|
605
|
+
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
606
|
+
minVersion: "12.0.0",
|
|
607
|
+
version: "22.2.2",
|
|
608
|
+
ngImport: i0,
|
|
609
|
+
type: RtIconRegistry,
|
|
610
|
+
providedIn: "root"
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
};
|
|
614
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
615
|
+
minVersion: "12.0.0",
|
|
616
|
+
version: "22.2.2",
|
|
617
|
+
ngImport: i0,
|
|
618
|
+
type: RtIconRegistry,
|
|
619
|
+
decorators: [{
|
|
620
|
+
type: Injectable,
|
|
621
|
+
args: [{ providedIn: "root" }]
|
|
622
|
+
}],
|
|
623
|
+
ctorParameters: () => []
|
|
336
624
|
});
|
|
337
|
-
class RtIconRegistry {
|
|
338
|
-
#http = inject(HttpClient);
|
|
339
|
-
#doc = inject(DOCUMENT);
|
|
340
|
-
#baseUrl = inject(RT_ICONS_BASE_URL);
|
|
341
|
-
#materialBaseUrl = inject(RT_ICONS_MATERIAL_BASE_URL);
|
|
342
|
-
#platform = inject(PlatformService);
|
|
343
|
-
/**
|
|
344
|
-
* Имена, за которыми уже сходили: второй раз в сеть за ними не ходят. Ключ несёт набор —
|
|
345
|
-
* одно имя приезжает двумя разными рисунками, и общий ключ отдал бы второму первый.
|
|
346
|
-
*/
|
|
347
|
-
#requested = new Set();
|
|
348
|
-
/** Имена, которые попросила разметка. Загрузку по ним ведёт подписка из конструктора. */
|
|
349
|
-
#requestSource = new Subject();
|
|
350
|
-
constructor() {
|
|
351
|
-
// Потоки складываются, а не вытесняют друг друга: странице нужны все спрошенные
|
|
352
|
-
// значки, а не последний из них.
|
|
353
|
-
this.#requestSource
|
|
354
|
-
.pipe(mergeMap((asked) => this.#load(asked)), takeUntilDestroyed())
|
|
355
|
-
.subscribe();
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Имя symbol для `<use href="#X">`. Возвращает строку с ведущим `#`.
|
|
359
|
-
*
|
|
360
|
-
* Набор назван явно, а не выведен из страницы: одна и та же страница держит оба набора
|
|
361
|
-
* рядом — признак стоит и на корне, и на контейнере, — и вывод по странице дал бы обоим
|
|
362
|
-
* один ответ.
|
|
363
|
-
*/
|
|
364
|
-
symbolHref(name, drawing = 'base') {
|
|
365
|
-
return `#${this.#symbolId(name, drawing)}`;
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* Просит значок по имени: грузит файл и дописывает `<symbol>` в спрайт страницы.
|
|
369
|
-
*
|
|
370
|
-
* Ответа зовущий не ждёт и потока не получает: разметка рисует ссылку на символ сразу, а
|
|
371
|
-
* браузер дорисовывает её, когда символ приезжает. Подписка живёт здесь и только здесь —
|
|
372
|
-
* иначе каждая разметка гасила бы её сама, а таких мест у значка два.
|
|
373
|
-
*/
|
|
374
|
-
request(name, drawing = 'base') {
|
|
375
|
-
const id = this.#symbolId(name, drawing);
|
|
376
|
-
// На сервере относительных запросов к статике нет вовсе: значок дорисуется после
|
|
377
|
-
// гидрации, когда разметка попросит его снова уже в браузере.
|
|
378
|
-
if (!this.#platform.isPlatformBrowser || this.#requested.has(id)) {
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
this.#requested.add(id);
|
|
382
|
-
// Символ уже лежит в спрайте страницы: его положила соседняя история витрины или
|
|
383
|
-
// сама страница до старта приложения. Запроса не уходит вовсе.
|
|
384
|
-
if (this.#doc.getElementById(id)) {
|
|
385
|
-
return;
|
|
386
|
-
}
|
|
387
|
-
this.#requestSource.next({ name, drawing });
|
|
388
|
-
}
|
|
389
|
-
#load(asked) {
|
|
390
|
-
if (asked.drawing === 'base') {
|
|
391
|
-
return this.#loadInto(asked, `${this.#baseUrl}/${asked.name}.svg`, EMPTY);
|
|
392
|
-
}
|
|
393
|
-
// Материальный рисунок, который не приехал, закрывается своим. Материальный набор —
|
|
394
|
-
// слой переопределений: имени, которого в нём нет, кит и так рисует свой рисунок, и
|
|
395
|
-
// не приехавший файл обязан вести себя так же. Иначе страница, объявившая набор, но
|
|
396
|
-
// не опубликовавшая его папку, показывает пустое место там, где обещан значок, —
|
|
397
|
-
// разметка при этом верна, и промах виден только глазами. Залитый, которого нет,
|
|
398
|
-
// сперва закрывается контурным того же набора.
|
|
399
|
-
const own = this.#loadInto(asked, `${this.#baseUrl}/${asked.name}.svg`, EMPTY);
|
|
400
|
-
const outlined = asked.drawing === 'material-fill' ? this.#loadInto(asked, `${this.#materialBaseUrl}/${asked.name}.svg`, own) : own;
|
|
401
|
-
const file = asked.drawing === 'material-fill' ? `${asked.name}.fill.svg` : `${asked.name}.svg`;
|
|
402
|
-
return this.#loadInto(asked, `${this.#materialBaseUrl}/${file}`, outlined);
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Рисунок по адресу под именем символа, которое просила разметка: подмена ссылки разметке
|
|
406
|
-
* не нужна. Отказ одного имени гасит только его значок — иначе один промах в наборе ронял бы
|
|
407
|
-
* всю страницу, а соседние значки уже приехали.
|
|
408
|
-
*/
|
|
409
|
-
#loadInto(asked, url, fallback) {
|
|
410
|
-
return this.#http.get(url, { responseType: 'text' }).pipe(tap((raw) => this.#mountSymbol(asked, raw)), map(() => undefined), catchError(() => fallback));
|
|
411
|
-
}
|
|
412
|
-
#symbolId(name, drawing) {
|
|
413
|
-
const prefix = {
|
|
414
|
-
base: RT_ICON_SYMBOL_ID_PREFIX,
|
|
415
|
-
material: RT_ICON_MATERIAL_SYMBOL_ID_PREFIX,
|
|
416
|
-
'material-fill': RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX,
|
|
417
|
-
};
|
|
418
|
-
return `${prefix[drawing]}${name}`;
|
|
419
|
-
}
|
|
420
|
-
#mountSymbol(asked, raw) {
|
|
421
|
-
const symbol = this.#doc.createElementNS('http://www.w3.org/2000/svg', 'symbol');
|
|
422
|
-
symbol.id = this.#symbolId(asked.name, asked.drawing);
|
|
423
|
-
symbol.setAttribute('viewBox', this.#viewBox(raw));
|
|
424
|
-
symbol.innerHTML = this.#inner(raw);
|
|
425
|
-
this.#sprite().appendChild(symbol);
|
|
426
|
-
}
|
|
427
|
-
#viewBox(raw) {
|
|
428
|
-
const viewBoxMatch = /viewBox="([^"]+)"/.exec(raw);
|
|
429
|
-
return viewBoxMatch ? viewBoxMatch[1] : '0 0 24 24';
|
|
430
|
-
}
|
|
431
|
-
#inner(raw) {
|
|
432
|
-
// Тело корневого `<svg>` без него самого: оно и становится телом `<symbol>`.
|
|
433
|
-
return raw
|
|
434
|
-
.replace(/<\?xml[\s\S]*?\?>/g, '')
|
|
435
|
-
.replace(/<!DOCTYPE[\s\S]*?>/g, '')
|
|
436
|
-
.replace(/<svg\b[^>]*>/i, '')
|
|
437
|
-
.replace(/<\/svg>\s*$/i, '')
|
|
438
|
-
.trim();
|
|
439
|
-
}
|
|
440
|
-
#sprite() {
|
|
441
|
-
const existing = this.#doc.querySelector(`svg#${RT_ICON_SPRITE_ID}`);
|
|
442
|
-
if (existing) {
|
|
443
|
-
return existing;
|
|
444
|
-
}
|
|
445
|
-
const sprite = this.#doc.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
446
|
-
sprite.id = RT_ICON_SPRITE_ID;
|
|
447
|
-
sprite.setAttribute('aria-hidden', 'true');
|
|
448
|
-
sprite.setAttribute('style', 'position:absolute;width:0;height:0;overflow:hidden;');
|
|
449
|
-
this.#doc.body.insertBefore(sprite, this.#doc.body.firstChild);
|
|
450
|
-
return sprite;
|
|
451
|
-
}
|
|
452
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtIconRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
453
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtIconRegistry, providedIn: 'root' }); }
|
|
454
|
-
}
|
|
455
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtIconRegistry, decorators: [{
|
|
456
|
-
type: Injectable,
|
|
457
|
-
args: [{ providedIn: 'root' }]
|
|
458
|
-
}], ctorParameters: () => [] });
|
|
459
|
-
|
|
460
|
-
/* Ступень — свойство, которое приложение задаёт правилом на значке или на его предке; умолчание —
|
|
461
|
-
шаг шкалы размеров кита, те же пиксели, что стояли здесь числом. Имя `--rt-icon-step-*`, а не
|
|
462
|
-
`--rt-icon-size-*`: те объявляет на корне страницы первый кит со своими значениями (md — 24px),
|
|
463
|
-
и в приложении с обоими китами каждый значок второго вырос бы. */
|
|
464
625
|
const SIZES = Object.freeze({
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
626
|
+
xs: "var(--rt-icon-step-xs, var(--rt-size-3))",
|
|
627
|
+
sm: "var(--rt-icon-step-sm, var(--rt-size-4))",
|
|
628
|
+
md: "var(--rt-icon-step-md, var(--rt-size-5))",
|
|
629
|
+
lg: "var(--rt-icon-step-lg, var(--rt-size-6))",
|
|
630
|
+
xl: "var(--rt-icon-step-xl, var(--rt-size-8))",
|
|
631
|
+
"2xl": "var(--rt-icon-step-2xl, var(--rt-size-10))",
|
|
632
|
+
"3xl": "var(--rt-icon-step-3xl, var(--rt-size-12))",
|
|
633
|
+
"4xl": "var(--rt-icon-step-4xl, var(--rt-size-16))"
|
|
473
634
|
});
|
|
474
|
-
/* Пиксели ступеней по умолчанию — оптический размер лигатуры. Без оси `opsz` в настройках шрифта
|
|
475
|
-
браузер ставил её по размеру шрифта, и умолчание повторяет это: значок, которому приложение оси
|
|
476
|
-
не задало, рисуется как прежде. */
|
|
477
635
|
const STEP_PX = Object.freeze({
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
636
|
+
xs: 12,
|
|
637
|
+
sm: 16,
|
|
638
|
+
md: 20,
|
|
639
|
+
lg: 24,
|
|
640
|
+
xl: 32,
|
|
641
|
+
"2xl": 40,
|
|
642
|
+
"3xl": 48,
|
|
643
|
+
"4xl": 64
|
|
486
644
|
});
|
|
487
|
-
/* Без переданного цвета значок цвета не пишет: `currentColor` строкой стиля перебивал правило
|
|
488
|
-
стилей, которое красит значок снаружи, — значок опасного пункта меню оставался цвета текста. */
|
|
489
|
-
// Каждый тон можно переназначить свойством сверху: поле ввода называет так тон своего значка в
|
|
490
|
-
// наборе оформления. Цвет стоит встроенным стилем, и правилом его не перебить.
|
|
491
645
|
const COLORS = Object.freeze({
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
646
|
+
current: null,
|
|
647
|
+
primary: "var(--rt-icon-color-primary, var(--rt-color-action-primary-on-surface))",
|
|
648
|
+
muted: "var(--rt-icon-color-muted, var(--rt-neutral-600))",
|
|
649
|
+
disabled: "var(--rt-icon-color-disabled, var(--rt-color-text-disabled))",
|
|
650
|
+
info: "var(--rt-icon-color-info, var(--rt-color-state-info))",
|
|
651
|
+
success: "var(--rt-icon-color-success, var(--rt-color-state-success))",
|
|
652
|
+
warning: "var(--rt-icon-color-warning, var(--rt-color-state-warning))",
|
|
653
|
+
danger: "var(--rt-icon-color-danger, var(--rt-color-state-danger))",
|
|
654
|
+
inverse: "var(--rt-icon-color-inverse, var(--rt-color-text-inverse))"
|
|
501
655
|
});
|
|
502
656
|
function isSizeStep(value) {
|
|
503
|
-
|
|
657
|
+
return Object.hasOwn(SIZES, value);
|
|
504
658
|
}
|
|
505
|
-
/** Ступень остаётся ступенью, число — пикселями. Числовая строка читается числом, прочее — ступенью `md`. */
|
|
506
659
|
function toSize(value) {
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
}
|
|
511
|
-
return size;
|
|
660
|
+
let size = typeof value === "number" || isSizeStep(value) ? value : numberAttribute(value, 0);
|
|
661
|
+
if (typeof size === "number" && size <= 0) size = "md";
|
|
662
|
+
return size;
|
|
512
663
|
}
|
|
513
|
-
const BEM_BLOCK =
|
|
514
|
-
class RtIconComponent {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
664
|
+
const BEM_BLOCK = "rt-icon";
|
|
665
|
+
var RtIconComponent = class RtIconComponent {
|
|
666
|
+
#registry;
|
|
667
|
+
#host;
|
|
668
|
+
#strategy;
|
|
669
|
+
#fontReady;
|
|
670
|
+
#preset;
|
|
671
|
+
constructor() {
|
|
672
|
+
this.#registry = inject(RtIconRegistry);
|
|
673
|
+
this.#host = inject(ElementRef);
|
|
674
|
+
this.#strategy = inject(RT_ICON_GLYPH_STRATEGY);
|
|
675
|
+
this.#fontReady = inject(RtIconFontService).ready;
|
|
676
|
+
this.#preset = signal("base", ...ngDevMode ? [{ debugName: "#preset" }] : /* istanbul ignore next */ []);
|
|
677
|
+
this.resolved = computed(() => resolveIconGlyph(this.name(), this.glyph(), this.glyphStrategy() ?? this.#strategy), ...ngDevMode ? [{ debugName: "resolved" }] : /* istanbul ignore next */ []);
|
|
678
|
+
this.kitName = computed(() => {
|
|
679
|
+
const resolved = this.resolved();
|
|
680
|
+
return resolved?.kind === "kit" ? resolved.name : null;
|
|
681
|
+
}, ...ngDevMode ? [{ debugName: "kitName" }] : /* istanbul ignore next */ []);
|
|
682
|
+
this.fontGlyph = computed(() => {
|
|
683
|
+
const resolved = this.resolved();
|
|
684
|
+
return resolved?.kind === "font" ? resolved.glyph : null;
|
|
685
|
+
}, ...ngDevMode ? [{ debugName: "fontGlyph" }] : /* istanbul ignore next */ []);
|
|
686
|
+
this.glyphMods = computed(() => ({
|
|
687
|
+
filled: this.fill(),
|
|
688
|
+
pending: !this.#fontReady()
|
|
689
|
+
}), ...ngDevMode ? [{ debugName: "glyphMods" }] : /* istanbul ignore next */ []);
|
|
690
|
+
this.href = computed(() => {
|
|
691
|
+
const name = this.kitName();
|
|
692
|
+
return name === null ? null : this.#registry.symbolHref(name, this.drawing());
|
|
693
|
+
}, ...ngDevMode ? [{ debugName: "href" }] : /* istanbul ignore next */ []);
|
|
694
|
+
this.preset = computed(() => {
|
|
695
|
+
const name = this.kitName();
|
|
696
|
+
return this.#preset() === "material" && name !== null && iconMaterialDrawn.has(name) ? "material" : "base";
|
|
697
|
+
}, ...ngDevMode ? [{ debugName: "preset" }] : /* istanbul ignore next */ []);
|
|
698
|
+
this.drawing = computed(() => {
|
|
699
|
+
if (this.preset() === "base") return "base";
|
|
700
|
+
return this.fill() ? "material-fill" : "material";
|
|
701
|
+
}, ...ngDevMode ? [{ debugName: "drawing" }] : /* istanbul ignore next */ []);
|
|
702
|
+
this.sizeValue = computed(() => {
|
|
703
|
+
const size = this.size();
|
|
704
|
+
return typeof size === "number" ? `${size}px` : SIZES[size];
|
|
705
|
+
}, ...ngDevMode ? [{ debugName: "sizeValue" }] : /* istanbul ignore next */ []);
|
|
706
|
+
this.opticalSize = computed(() => {
|
|
707
|
+
const size = this.size();
|
|
708
|
+
return typeof size === "number" ? size : STEP_PX[size];
|
|
709
|
+
}, ...ngDevMode ? [{ debugName: "opticalSize" }] : /* istanbul ignore next */ []);
|
|
710
|
+
this.colorValue = computed(() => COLORS[this.color()], ...ngDevMode ? [{ debugName: "colorValue" }] : /* istanbul ignore next */ []);
|
|
711
|
+
this.rotateStyle = computed(() => {
|
|
712
|
+
const r = this.rotate();
|
|
713
|
+
return r !== null && r !== 0 ? `rotate(${r}deg)` : null;
|
|
714
|
+
}, ...ngDevMode ? [{ debugName: "rotateStyle" }] : /* istanbul ignore next */ []);
|
|
715
|
+
this.name = input(null, ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
|
|
716
|
+
this.glyph = input(null, ...ngDevMode ? [{ debugName: "glyph" }] : /* istanbul ignore next */ []);
|
|
717
|
+
this.glyphStrategy = input(null, ...ngDevMode ? [{ debugName: "glyphStrategy" }] : /* istanbul ignore next */ []);
|
|
718
|
+
this.size = input("md", {
|
|
719
|
+
...ngDevMode ? { debugName: "size" } : /* istanbul ignore next */ {},
|
|
720
|
+
transform: toSize
|
|
721
|
+
});
|
|
722
|
+
this.color = input("current", ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
|
|
723
|
+
this.fill = input(false, {
|
|
724
|
+
...ngDevMode ? { debugName: "fill" } : /* istanbul ignore next */ {},
|
|
725
|
+
transform: booleanAttribute
|
|
726
|
+
});
|
|
727
|
+
this.spin = input(false, {
|
|
728
|
+
...ngDevMode ? { debugName: "spin" } : /* istanbul ignore next */ {},
|
|
729
|
+
transform: booleanAttribute
|
|
730
|
+
});
|
|
731
|
+
this.rotate = input(null, {
|
|
732
|
+
...ngDevMode ? { debugName: "rotate" } : /* istanbul ignore next */ {},
|
|
733
|
+
transform: (v) => {
|
|
734
|
+
if (v === null || v === "") return null;
|
|
735
|
+
return numberAttribute(v, 0);
|
|
736
|
+
}
|
|
737
|
+
});
|
|
738
|
+
effect(() => {
|
|
739
|
+
const name = this.kitName();
|
|
740
|
+
if (name !== null) this.#registry.request(name, this.drawing());
|
|
741
|
+
});
|
|
742
|
+
afterNextRender(() => {
|
|
743
|
+
if (this.#host.nativeElement.closest(RT_ICON_MATERIAL_PRESET_SELECTOR)) this.#preset.set("material");
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
static {
|
|
747
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
748
|
+
minVersion: "12.0.0",
|
|
749
|
+
version: "22.2.2",
|
|
750
|
+
ngImport: i0,
|
|
751
|
+
type: RtIconComponent,
|
|
752
|
+
deps: [],
|
|
753
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
static {
|
|
757
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
758
|
+
minVersion: "17.0.0",
|
|
759
|
+
version: "22.2.2",
|
|
760
|
+
type: RtIconComponent,
|
|
761
|
+
isStandalone: true,
|
|
762
|
+
selector: "rt-icon",
|
|
763
|
+
inputs: {
|
|
764
|
+
name: {
|
|
765
|
+
classPropertyName: "name",
|
|
766
|
+
publicName: "name",
|
|
767
|
+
isSignal: true,
|
|
768
|
+
isRequired: false,
|
|
769
|
+
transformFunction: null
|
|
770
|
+
},
|
|
771
|
+
glyph: {
|
|
772
|
+
classPropertyName: "glyph",
|
|
773
|
+
publicName: "glyph",
|
|
774
|
+
isSignal: true,
|
|
775
|
+
isRequired: false,
|
|
776
|
+
transformFunction: null
|
|
777
|
+
},
|
|
778
|
+
glyphStrategy: {
|
|
779
|
+
classPropertyName: "glyphStrategy",
|
|
780
|
+
publicName: "glyphStrategy",
|
|
781
|
+
isSignal: true,
|
|
782
|
+
isRequired: false,
|
|
783
|
+
transformFunction: null
|
|
784
|
+
},
|
|
785
|
+
size: {
|
|
786
|
+
classPropertyName: "size",
|
|
787
|
+
publicName: "size",
|
|
788
|
+
isSignal: true,
|
|
789
|
+
isRequired: false,
|
|
790
|
+
transformFunction: null
|
|
791
|
+
},
|
|
792
|
+
color: {
|
|
793
|
+
classPropertyName: "color",
|
|
794
|
+
publicName: "color",
|
|
795
|
+
isSignal: true,
|
|
796
|
+
isRequired: false,
|
|
797
|
+
transformFunction: null
|
|
798
|
+
},
|
|
799
|
+
fill: {
|
|
800
|
+
classPropertyName: "fill",
|
|
801
|
+
publicName: "fill",
|
|
802
|
+
isSignal: true,
|
|
803
|
+
isRequired: false,
|
|
804
|
+
transformFunction: null
|
|
805
|
+
},
|
|
806
|
+
spin: {
|
|
807
|
+
classPropertyName: "spin",
|
|
808
|
+
publicName: "spin",
|
|
809
|
+
isSignal: true,
|
|
810
|
+
isRequired: false,
|
|
811
|
+
transformFunction: null
|
|
812
|
+
},
|
|
813
|
+
rotate: {
|
|
814
|
+
classPropertyName: "rotate",
|
|
815
|
+
publicName: "rotate",
|
|
816
|
+
isSignal: true,
|
|
817
|
+
isRequired: false,
|
|
818
|
+
transformFunction: null
|
|
819
|
+
}
|
|
820
|
+
},
|
|
821
|
+
host: {
|
|
822
|
+
properties: {
|
|
823
|
+
"attr.aria-hidden": "'true'",
|
|
824
|
+
"style.width": "sizeValue()",
|
|
825
|
+
"style.height": "sizeValue()",
|
|
826
|
+
"style.color": "colorValue()",
|
|
827
|
+
"style.transform": "rotateStyle()",
|
|
828
|
+
"class.rt-icon--spin": "spin()"
|
|
829
|
+
},
|
|
830
|
+
classAttribute: "rt-icon"
|
|
831
|
+
},
|
|
832
|
+
ngImport: i0,
|
|
833
|
+
template: "<ng-container rtBlock=\"rt-icon\">\n @if (href(); as symbol) {\n <svg focusable=\"false\" aria-hidden=\"true\" [attr.viewBox]=\"'0 0 24 24'\">\n <use [attr.href]=\"symbol\" />\n </svg>\n } @else if (fontGlyph(); as ligature) {\n <span\n rtElem=\"glyph\"\n aria-hidden=\"true\"\n [rtMod]=\"glyphMods()\"\n [style.font-size]=\"sizeValue()\"\n [style.--rt-icon-glyph-opsz-auto]=\"opticalSize()\">\n {{ ligature }}\n </span>\n }\n</ng-container>\n",
|
|
834
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-icon{--rt-icon-spin-duration: 1s;--rt-icon-spin-duration-reduced: 4s;display:inline-flex;flex-shrink:0;line-height:0}.rt-icon svg{display:block;width:100%;height:100%;fill:currentcolor}.rt-icon__glyph{--rt-icon-glyph-fill: 0;--rt-icon-glyph-opsz-auto: 24;display:block;overflow:hidden;width:100%;font-family:var(--rt-icon-glyph-font, \"Material Symbols Outlined\"),sans-serif;font-feature-settings:\"liga\";font-style:normal;font-variation-settings:\"FILL\" var(--rt-icon-glyph-fill),\"wght\" var(--rt-icon-glyph-weight, 400),\"GRAD\" var(--rt-icon-glyph-grade, 0),\"opsz\" var(--rt-icon-glyph-opsz, var(--rt-icon-glyph-opsz-auto));font-weight:var(--rt-font-weight-regular);letter-spacing:normal;line-height:1;text-align:center;text-transform:none;white-space:nowrap}.rt-icon__glyph--filled{--rt-icon-glyph-fill: 1}.rt-icon__glyph--pending{visibility:hidden}.rt-icon--spin{animation:rt-icon-spin var(--rt-icon-spin-duration) linear infinite}@keyframes rt-icon-spin{to{transform:rotate(1turn)}}@media(prefers-reduced-motion:reduce){.rt-icon--spin{animation-duration:var(--rt-icon-spin-duration-reduced)}}}\n"],
|
|
835
|
+
dependencies: [
|
|
836
|
+
{
|
|
837
|
+
kind: "directive",
|
|
838
|
+
type: BlockDirective,
|
|
839
|
+
selector: "[rtBlock]",
|
|
840
|
+
inputs: ["rtMod"]
|
|
841
|
+
},
|
|
842
|
+
{
|
|
843
|
+
kind: "directive",
|
|
844
|
+
type: ElemDirective,
|
|
845
|
+
selector: "[rtElem]",
|
|
846
|
+
inputs: ["rtMod"]
|
|
847
|
+
},
|
|
848
|
+
{
|
|
849
|
+
kind: "directive",
|
|
850
|
+
type: ModDirective,
|
|
851
|
+
selector: "[rtMod]"
|
|
852
|
+
}
|
|
853
|
+
],
|
|
854
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
855
|
+
encapsulation: i0.ViewEncapsulation.None
|
|
856
|
+
});
|
|
857
|
+
}
|
|
858
|
+
};
|
|
859
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
860
|
+
minVersion: "12.0.0",
|
|
861
|
+
version: "22.2.2",
|
|
862
|
+
ngImport: i0,
|
|
863
|
+
type: RtIconComponent,
|
|
864
|
+
decorators: [{
|
|
865
|
+
type: Component,
|
|
866
|
+
args: [{
|
|
867
|
+
selector: "rt-icon",
|
|
868
|
+
imports: [
|
|
869
|
+
BlockDirective,
|
|
870
|
+
ElemDirective,
|
|
871
|
+
ModDirective
|
|
872
|
+
],
|
|
873
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
874
|
+
encapsulation: ViewEncapsulation.None,
|
|
875
|
+
host: {
|
|
876
|
+
class: BEM_BLOCK,
|
|
877
|
+
"[attr.aria-hidden]": "'true'",
|
|
878
|
+
"[style.width]": "sizeValue()",
|
|
879
|
+
"[style.height]": "sizeValue()",
|
|
880
|
+
"[style.color]": "colorValue()",
|
|
881
|
+
"[style.transform]": "rotateStyle()",
|
|
882
|
+
"[class.rt-icon--spin]": "spin()"
|
|
883
|
+
},
|
|
884
|
+
template: "<ng-container rtBlock=\"rt-icon\">\n @if (href(); as symbol) {\n <svg focusable=\"false\" aria-hidden=\"true\" [attr.viewBox]=\"'0 0 24 24'\">\n <use [attr.href]=\"symbol\" />\n </svg>\n } @else if (fontGlyph(); as ligature) {\n <span\n rtElem=\"glyph\"\n aria-hidden=\"true\"\n [rtMod]=\"glyphMods()\"\n [style.font-size]=\"sizeValue()\"\n [style.--rt-icon-glyph-opsz-auto]=\"opticalSize()\">\n {{ ligature }}\n </span>\n }\n</ng-container>\n",
|
|
885
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-icon{--rt-icon-spin-duration: 1s;--rt-icon-spin-duration-reduced: 4s;display:inline-flex;flex-shrink:0;line-height:0}.rt-icon svg{display:block;width:100%;height:100%;fill:currentcolor}.rt-icon__glyph{--rt-icon-glyph-fill: 0;--rt-icon-glyph-opsz-auto: 24;display:block;overflow:hidden;width:100%;font-family:var(--rt-icon-glyph-font, \"Material Symbols Outlined\"),sans-serif;font-feature-settings:\"liga\";font-style:normal;font-variation-settings:\"FILL\" var(--rt-icon-glyph-fill),\"wght\" var(--rt-icon-glyph-weight, 400),\"GRAD\" var(--rt-icon-glyph-grade, 0),\"opsz\" var(--rt-icon-glyph-opsz, var(--rt-icon-glyph-opsz-auto));font-weight:var(--rt-font-weight-regular);letter-spacing:normal;line-height:1;text-align:center;text-transform:none;white-space:nowrap}.rt-icon__glyph--filled{--rt-icon-glyph-fill: 1}.rt-icon__glyph--pending{visibility:hidden}.rt-icon--spin{animation:rt-icon-spin var(--rt-icon-spin-duration) linear infinite}@keyframes rt-icon-spin{to{transform:rotate(1turn)}}@media(prefers-reduced-motion:reduce){.rt-icon--spin{animation-duration:var(--rt-icon-spin-duration-reduced)}}}\n"]
|
|
886
|
+
}]
|
|
887
|
+
}],
|
|
888
|
+
ctorParameters: () => [],
|
|
889
|
+
propDecorators: {
|
|
890
|
+
name: [{
|
|
891
|
+
type: i0.Input,
|
|
892
|
+
args: [{
|
|
893
|
+
isSignal: true,
|
|
894
|
+
alias: "name",
|
|
895
|
+
required: false
|
|
896
|
+
}]
|
|
897
|
+
}],
|
|
898
|
+
glyph: [{
|
|
899
|
+
type: i0.Input,
|
|
900
|
+
args: [{
|
|
901
|
+
isSignal: true,
|
|
902
|
+
alias: "glyph",
|
|
903
|
+
required: false
|
|
904
|
+
}]
|
|
905
|
+
}],
|
|
906
|
+
glyphStrategy: [{
|
|
907
|
+
type: i0.Input,
|
|
908
|
+
args: [{
|
|
909
|
+
isSignal: true,
|
|
910
|
+
alias: "glyphStrategy",
|
|
911
|
+
required: false
|
|
912
|
+
}]
|
|
913
|
+
}],
|
|
914
|
+
size: [{
|
|
915
|
+
type: i0.Input,
|
|
916
|
+
args: [{
|
|
917
|
+
isSignal: true,
|
|
918
|
+
alias: "size",
|
|
919
|
+
required: false
|
|
920
|
+
}]
|
|
921
|
+
}],
|
|
922
|
+
color: [{
|
|
923
|
+
type: i0.Input,
|
|
924
|
+
args: [{
|
|
925
|
+
isSignal: true,
|
|
926
|
+
alias: "color",
|
|
927
|
+
required: false
|
|
928
|
+
}]
|
|
929
|
+
}],
|
|
930
|
+
fill: [{
|
|
931
|
+
type: i0.Input,
|
|
932
|
+
args: [{
|
|
933
|
+
isSignal: true,
|
|
934
|
+
alias: "fill",
|
|
935
|
+
required: false
|
|
936
|
+
}]
|
|
937
|
+
}],
|
|
938
|
+
spin: [{
|
|
939
|
+
type: i0.Input,
|
|
940
|
+
args: [{
|
|
941
|
+
isSignal: true,
|
|
942
|
+
alias: "spin",
|
|
943
|
+
required: false
|
|
944
|
+
}]
|
|
945
|
+
}],
|
|
946
|
+
rotate: [{
|
|
947
|
+
type: i0.Input,
|
|
948
|
+
args: [{
|
|
949
|
+
isSignal: true,
|
|
950
|
+
alias: "rotate",
|
|
951
|
+
required: false
|
|
952
|
+
}]
|
|
953
|
+
}]
|
|
954
|
+
}
|
|
955
|
+
});
|
|
716
956
|
function provideRtIcons(baseUrl, materialBaseUrl, options) {
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
957
|
+
return makeEnvironmentProviders([
|
|
958
|
+
...baseUrl === void 0 ? [] : [{
|
|
959
|
+
provide: RT_ICONS_BASE_URL,
|
|
960
|
+
useValue: baseUrl
|
|
961
|
+
}],
|
|
962
|
+
...materialBaseUrl === void 0 ? [] : [{
|
|
963
|
+
provide: RT_ICONS_MATERIAL_BASE_URL,
|
|
964
|
+
useValue: materialBaseUrl
|
|
965
|
+
}],
|
|
966
|
+
...options?.glyphStrategy === void 0 ? [] : [{
|
|
967
|
+
provide: RT_ICON_GLYPH_STRATEGY,
|
|
968
|
+
useValue: options.glyphStrategy
|
|
969
|
+
}]
|
|
970
|
+
]);
|
|
722
971
|
}
|
|
723
|
-
|
|
724
|
-
/**
|
|
725
|
-
* Generated bundle index. Do not edit.
|
|
726
|
-
*/
|
|
727
|
-
|
|
728
972
|
export { CATEGORY_ORDER, ICON_CATEGORY_RULES, RT_ICONS_BASE_URL, RT_ICONS_MATERIAL_BASE_URL, RT_ICON_GLYPH_STRATEGY, RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX, RT_ICON_MATERIAL_PRESET_SELECTOR, RT_ICON_MATERIAL_SYMBOL_ID_PREFIX, RT_ICON_PRESET_ATTRIBUTE, RT_ICON_SPRITE_ID, RT_ICON_SYMBOL_ID_PREFIX, RtIconComponent, RtIconFontService, RtIconRegistry, categoryOf, iconMaterialDrawn, iconMaterialMap, isKitIconName, materialPairOf, provideRtIcons, resolveIconGlyph };
|
|
729
|
-
|
|
973
|
+
|
|
974
|
+
//# sourceMappingURL=rt-tools-ui-kit-v2-icon.mjs.map
|