@rt-tools/ui-kit-v2 0.23.2 → 0.23.4
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 +2309 -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-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 +41 -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 +35 -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/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 +10 -0
- package/src/lib/components/toolbar/rt-toolbar.component.scss +18 -0
- 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/styles/tokens.css +3 -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 +856 -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-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,162 +1,290 @@
|
|
|
1
|
-
import * as i0 from
|
|
2
|
-
import {
|
|
3
|
-
import { NG_VALUE_ACCESSOR } from
|
|
4
|
-
import { BlockDirective, ElemDirective, ModDirective } from
|
|
5
|
-
import { RtIconComponent } from
|
|
6
|
-
import * as i1 from
|
|
7
|
-
import { RtRadiusDirective } from
|
|
8
|
-
|
|
9
|
-
const BEM_BLOCK = 'rt-toggle-switch';
|
|
10
|
-
/** Счётчик для авто-id (связка подписи с кнопкой, когда `inputId` не задан). */
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ViewEncapsulation, booleanAttribute, computed, forwardRef, input, signal } from "@angular/core";
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
4
|
+
import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
|
|
5
|
+
import { RtIconComponent } from "@rt-tools/ui-kit-v2/icon";
|
|
6
|
+
import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
7
|
+
import { RtRadiusDirective } from "@rt-tools/ui-kit-v2/radius";
|
|
8
|
+
const BEM_BLOCK = "rt-toggle-switch";
|
|
11
9
|
let uidSeed = 0;
|
|
12
10
|
function nextAutoId() {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* On/off switch с `role="switch"` + `aria-checked` — более правильный a11y
|
|
18
|
-
* pattern чем `<input type="checkbox">` для toggle (screen readers произносят
|
|
19
|
-
* "switch off/on" вместо "checkbox checked/unchecked").
|
|
20
|
-
*
|
|
21
|
-
* Реализует `ControlValueAccessor` для `boolean` value через
|
|
22
|
-
* `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает
|
|
23
|
-
* NG0200 cycle при boot'е.
|
|
24
|
-
*
|
|
25
|
-
* Отключение складывается из двух независимых источников: входа `disabled` и
|
|
26
|
-
* слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из
|
|
27
|
-
* них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при
|
|
28
|
-
* связывании контрола, то есть раньше, чем переключатель впервые обновит своё
|
|
29
|
-
* вью, и мирроринг входа затирал бы её слово — контрол, созданный отключённым,
|
|
30
|
-
* оказывался бы кликабельным.
|
|
31
|
-
*
|
|
32
|
-
* Опциональные иконки `iconOff` / `iconOn` рисуются внутри трека статично:
|
|
33
|
-
* off-иконка в начальной половине, on-иконка в конечной. Бегунок непрозрачен
|
|
34
|
-
* и наезжает на иконку активного состояния, так что видна всегда иконка того
|
|
35
|
-
* состояния, куда переключится контрол.
|
|
36
|
-
*
|
|
37
|
-
* Вход `label` рисует подпись после кнопки — элементом `<label>`, связанным с
|
|
38
|
-
* кнопкой: нажатие на подпись переключает, и она же называет переключатель
|
|
39
|
-
* скринридеру через `aria-labelledby`.
|
|
40
|
-
*
|
|
41
|
-
* Размер и отключение выводятся модификаторами и на хост: свойства размеров
|
|
42
|
-
* объявлены на хосте, чтобы правило приложения на теге их переопределяло, а
|
|
43
|
-
* прозрачность отключения гасит переключатель вместе с подписью.
|
|
44
|
-
*
|
|
45
|
-
* ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.
|
|
46
|
-
*/
|
|
47
|
-
class RtToggleSwitchComponent {
|
|
48
|
-
constructor() {
|
|
49
|
-
this.#onChange = () => undefined;
|
|
50
|
-
this.#onTouched = () => undefined;
|
|
51
|
-
/** Отключение, назначенное формой через CVA (`setDisabledState`). */
|
|
52
|
-
this.#disabledByForm = signal(false, /* @ts-ignore */
|
|
53
|
-
...(ngDevMode ? [{ debugName: "#disabledByForm" }] : /* istanbul ignore next */ []));
|
|
54
|
-
this.#autoId = nextAutoId();
|
|
55
|
-
this.isOn = signal(false, /* @ts-ignore */
|
|
56
|
-
...(ngDevMode ? [{ debugName: "isOn" }] : /* istanbul ignore next */ []));
|
|
57
|
-
this.isDisabled = computed(() => this.disabled() || this.#disabledByForm(), /* @ts-ignore */
|
|
58
|
-
...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
59
|
-
/** Id кнопки: заданный входом или свой — на него указывает подпись. */
|
|
60
|
-
this.controlId = computed(() => this.inputId() ?? this.#autoId, /* @ts-ignore */
|
|
61
|
-
...(ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []));
|
|
62
|
-
this.labelId = `${this.#autoId}-label`;
|
|
63
|
-
/**
|
|
64
|
-
* BEM-модификаторы для `[rtMod]`. Собираем в .ts, потому что
|
|
65
|
-
* Angular template-parser не поддерживает computed property keys
|
|
66
|
-
* в inline-объектах, а размер приходит ключом.
|
|
67
|
-
*/
|
|
68
|
-
this.bemMods = computed(() => ({
|
|
69
|
-
[this.size()]: true,
|
|
70
|
-
on: this.isOn(),
|
|
71
|
-
disabled: this.isDisabled(),
|
|
72
|
-
withIcons: this.iconOff() !== null || this.iconOn() !== null,
|
|
73
|
-
}), /* @ts-ignore */
|
|
74
|
-
...(ngDevMode ? [{ debugName: "bemMods" }] : /* istanbul ignore next */ []));
|
|
75
|
-
this.inputId = input(null, /* @ts-ignore */
|
|
76
|
-
...(ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []));
|
|
77
|
-
this.ariaLabel = input(null, /* @ts-ignore */
|
|
78
|
-
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
79
|
-
/** Подпись после переключателя. Пусто — без подписи, как раньше. */
|
|
80
|
-
this.label = input(null, /* @ts-ignore */
|
|
81
|
-
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
82
|
-
/** Размерный тир трека. */
|
|
83
|
-
this.size = input('sm', /* @ts-ignore */
|
|
84
|
-
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
85
|
-
/** Иконка выключенного состояния — в начальной половине трека. Пусто — без иконки. */
|
|
86
|
-
this.iconOff = input(null, /* @ts-ignore */
|
|
87
|
-
...(ngDevMode ? [{ debugName: "iconOff" }] : /* istanbul ignore next */ []));
|
|
88
|
-
/** Иконка включённого состояния — в конечной половине трека. Пусто — без иконки. */
|
|
89
|
-
this.iconOn = input(null, /* @ts-ignore */
|
|
90
|
-
...(ngDevMode ? [{ debugName: "iconOn" }] : /* istanbul ignore next */ []));
|
|
91
|
-
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
92
|
-
}
|
|
93
|
-
#onChange;
|
|
94
|
-
#onTouched;
|
|
95
|
-
/** Отключение, назначенное формой через CVA (`setDisabledState`). */
|
|
96
|
-
#disabledByForm;
|
|
97
|
-
#autoId;
|
|
98
|
-
writeValue(value) {
|
|
99
|
-
this.isOn.set(value === true);
|
|
100
|
-
}
|
|
101
|
-
registerOnChange(fn) {
|
|
102
|
-
this.#onChange = fn;
|
|
103
|
-
}
|
|
104
|
-
registerOnTouched(fn) {
|
|
105
|
-
this.#onTouched = fn;
|
|
106
|
-
}
|
|
107
|
-
setDisabledState(disabled) {
|
|
108
|
-
this.#disabledByForm.set(disabled);
|
|
109
|
-
}
|
|
110
|
-
toggle() {
|
|
111
|
-
if (this.isDisabled()) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const next = !this.isOn();
|
|
115
|
-
this.isOn.set(next);
|
|
116
|
-
this.#onChange(next);
|
|
117
|
-
this.#onTouched();
|
|
118
|
-
}
|
|
119
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtToggleSwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
120
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtToggleSwitchComponent, isStandalone: true, selector: "rt-toggle-switch", inputs: { inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, iconOff: { classPropertyName: "iconOff", publicName: "iconOff", isSignal: true, isRequired: false, transformFunction: null }, iconOn: { classPropertyName: "iconOn", publicName: "iconOn", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rt-toggle-switch--md": "size() === 'md'", "class.rt-toggle-switch--lg": "size() === 'lg'", "class.rt-toggle-switch--on": "isOn()", "class.rt-toggle-switch--disabled": "isDisabled()" }, classAttribute: "rt-toggle-switch" }, providers: [
|
|
121
|
-
{
|
|
122
|
-
provide: NG_VALUE_ACCESSOR,
|
|
123
|
-
useExisting: forwardRef(() => RtToggleSwitchComponent),
|
|
124
|
-
multi: true,
|
|
125
|
-
},
|
|
126
|
-
], hostDirectives: [{ directive: i1.RtRadiusDirective, inputs: ["radius", "radius"] }], ngImport: i0, template: "<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-toggle-switch{--rt-toggle-radius: var(--rt-radius-full);--rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);--rt-toggle-transition-duration: var(--rt-duration-fast);--rt-toggle-disabled-opacity: .5;--rt-toggle-justify: flex-start;--rt-toggle-label-gap: var(--rt-space-2);--rt-toggle-label-size: var(--rt-text-sm);--rt-toggle-label-color-off: var(--rt-color-text-muted);--rt-toggle-label-color-on: var(--rt-color-text-primary);--rt-toggle-label-color-hover: var(--rt-color-text-primary);--rt-toggle-track-width: 42px;--rt-toggle-track-height: 24px;--rt-toggle-thumb-size: 18px;--rt-toggle-thumb-inset: 3px;--rt-toggle-thumb-travel: 18px;--rt-toggle-icon-inset: 4px;display:inline-flex;align-items:center;justify-content:var(--rt-toggle-justify);gap:var(--rt-toggle-label-gap)}rt-toggle-switch.rt-toggle-switch--md{--rt-toggle-track-width: 52px;--rt-toggle-thumb-travel: 28px}rt-toggle-switch.rt-toggle-switch--lg{--rt-toggle-track-width: 60px;--rt-toggle-track-height: 30px;--rt-toggle-thumb-size: 24px;--rt-toggle-thumb-travel: 30px;--rt-toggle-icon-inset: 6px}rt-toggle-switch.rt-toggle-switch--disabled{opacity:var(--rt-toggle-disabled-opacity)}rt-toggle-switch[data-rt-radius=none]{--rt-toggle-radius: var(--rt-radius-none)}rt-toggle-switch[data-rt-radius=xs]{--rt-toggle-radius: var(--rt-radius-xs)}rt-toggle-switch[data-rt-radius=sm]{--rt-toggle-radius: var(--rt-radius-sm)}rt-toggle-switch[data-rt-radius=ms]{--rt-toggle-radius: var(--rt-radius-ms)}rt-toggle-switch[data-rt-radius=md]{--rt-toggle-radius: var(--rt-radius-md)}rt-toggle-switch[data-rt-radius=lg]{--rt-toggle-radius: var(--rt-radius-lg)}rt-toggle-switch[data-rt-radius=xl]{--rt-toggle-radius: var(--rt-radius-xl)}rt-toggle-switch[data-rt-radius=\"2xl\"]{--rt-toggle-radius: var(--rt-radius-2xl)}rt-toggle-switch[data-rt-radius=full]{--rt-toggle-radius: var(--rt-radius-full)}rt-toggle-switch .rt-toggle-switch{display:inline-flex;padding:0;border:none;background:none;cursor:pointer}rt-toggle-switch .rt-toggle-switch:focus-visible{border-radius:var(--rt-toggle-radius);box-shadow:var(--rt-toggle-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-toggle-switch .rt-toggle-switch--disabled{cursor:not-allowed}rt-toggle-switch .rt-toggle-switch__track{position:relative;display:inline-block;width:var(--rt-toggle-track-width);height:var(--rt-toggle-track-height);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-track);box-shadow:var(--rt-toggle-shadow-border);color:var(--rt-toggle-color-icon);transition:background var(--rt-toggle-transition-duration) ease,box-shadow var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__track{background:var(--rt-toggle-color-track-on);box-shadow:none}rt-toggle-switch .rt-toggle-switch__icon-off,rt-toggle-switch .rt-toggle-switch__icon-on{position:absolute;inset-block-start:50%;transform:translateY(-50%)}rt-toggle-switch .rt-toggle-switch__icon-off{inset-inline-start:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__icon-on{inset-inline-end:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__thumb{position:absolute;width:var(--rt-toggle-thumb-size);height:var(--rt-toggle-thumb-size);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-thumb);box-shadow:var(--rt-toggle-shadow-thumb);inset-block-start:var(--rt-toggle-thumb-inset);inset-inline-start:var(--rt-toggle-thumb-inset);transition:transform var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__thumb{transform:translate(var(--rt-toggle-thumb-travel))}rt-toggle-switch .rt-toggle-switch__label{color:var(--rt-toggle-label-color-off);cursor:pointer;font-size:var(--rt-toggle-label-size);transition:color var(--rt-toggle-transition-duration) ease;-webkit-user-select:none;user-select:none}rt-toggle-switch.rt-toggle-switch--on .rt-toggle-switch__label{color:var(--rt-toggle-label-color-on)}rt-toggle-switch:not(.rt-toggle-switch--disabled):hover .rt-toggle-switch__label{color:var(--rt-toggle-label-color-hover)}rt-toggle-switch.rt-toggle-switch--disabled .rt-toggle-switch__label{cursor:not-allowed}}\n"], dependencies: [{ kind: "component", type:
|
|
127
|
-
// standalone components / directives
|
|
128
|
-
RtIconComponent, selector: "rt-icon", inputs: ["name", "glyph", "glyphStrategy", "size", "color", "fill", "spin", "rotate"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
11
|
+
uidSeed += 1;
|
|
12
|
+
return `rt-toggle-switch-${uidSeed}`;
|
|
129
13
|
}
|
|
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
|
-
|
|
14
|
+
var RtToggleSwitchComponent = class RtToggleSwitchComponent {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.#onChange = () => void 0;
|
|
17
|
+
this.#onTouched = () => void 0;
|
|
18
|
+
this.#disabledByForm = signal(false, ...ngDevMode ? [{ debugName: "#disabledByForm" }] : /* istanbul ignore next */ []);
|
|
19
|
+
this.#autoId = nextAutoId();
|
|
20
|
+
this.isOn = signal(false, ...ngDevMode ? [{ debugName: "isOn" }] : /* istanbul ignore next */ []);
|
|
21
|
+
this.isDisabled = computed(() => this.disabled() || this.#disabledByForm(), ...ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []);
|
|
22
|
+
this.controlId = computed(() => this.inputId() ?? this.#autoId, ...ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []);
|
|
23
|
+
this.labelId = `${this.#autoId}-label`;
|
|
24
|
+
this.bemMods = computed(() => ({
|
|
25
|
+
[this.size()]: true,
|
|
26
|
+
on: this.isOn(),
|
|
27
|
+
disabled: this.isDisabled(),
|
|
28
|
+
withIcons: this.iconOff() !== null || this.iconOn() !== null
|
|
29
|
+
}), ...ngDevMode ? [{ debugName: "bemMods" }] : /* istanbul ignore next */ []);
|
|
30
|
+
this.inputId = input(null, ...ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []);
|
|
31
|
+
this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
32
|
+
this.label = input(null, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
33
|
+
this.size = input("sm", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
34
|
+
this.iconOff = input(null, ...ngDevMode ? [{ debugName: "iconOff" }] : /* istanbul ignore next */ []);
|
|
35
|
+
this.iconOn = input(null, ...ngDevMode ? [{ debugName: "iconOn" }] : /* istanbul ignore next */ []);
|
|
36
|
+
this.disabled = input(false, {
|
|
37
|
+
...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
|
|
38
|
+
transform: booleanAttribute
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
#onChange;
|
|
42
|
+
#onTouched;
|
|
43
|
+
#disabledByForm;
|
|
44
|
+
#autoId;
|
|
45
|
+
writeValue(value) {
|
|
46
|
+
this.isOn.set(value === true);
|
|
47
|
+
}
|
|
48
|
+
registerOnChange(fn) {
|
|
49
|
+
this.#onChange = fn;
|
|
50
|
+
}
|
|
51
|
+
registerOnTouched(fn) {
|
|
52
|
+
this.#onTouched = fn;
|
|
53
|
+
}
|
|
54
|
+
setDisabledState(disabled) {
|
|
55
|
+
this.#disabledByForm.set(disabled);
|
|
56
|
+
}
|
|
57
|
+
toggle() {
|
|
58
|
+
if (this.isDisabled()) return;
|
|
59
|
+
const next = !this.isOn();
|
|
60
|
+
this.isOn.set(next);
|
|
61
|
+
this.#onChange(next);
|
|
62
|
+
this.#onTouched();
|
|
63
|
+
}
|
|
64
|
+
static {
|
|
65
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
66
|
+
minVersion: "12.0.0",
|
|
67
|
+
version: "22.2.2",
|
|
68
|
+
ngImport: i0,
|
|
69
|
+
type: RtToggleSwitchComponent,
|
|
70
|
+
deps: [],
|
|
71
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
static {
|
|
75
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
76
|
+
minVersion: "17.0.0",
|
|
77
|
+
version: "22.2.2",
|
|
78
|
+
type: RtToggleSwitchComponent,
|
|
79
|
+
isStandalone: true,
|
|
80
|
+
selector: "rt-toggle-switch",
|
|
81
|
+
inputs: {
|
|
82
|
+
inputId: {
|
|
83
|
+
classPropertyName: "inputId",
|
|
84
|
+
publicName: "inputId",
|
|
85
|
+
isSignal: true,
|
|
86
|
+
isRequired: false,
|
|
87
|
+
transformFunction: null
|
|
88
|
+
},
|
|
89
|
+
ariaLabel: {
|
|
90
|
+
classPropertyName: "ariaLabel",
|
|
91
|
+
publicName: "ariaLabel",
|
|
92
|
+
isSignal: true,
|
|
93
|
+
isRequired: false,
|
|
94
|
+
transformFunction: null
|
|
95
|
+
},
|
|
96
|
+
label: {
|
|
97
|
+
classPropertyName: "label",
|
|
98
|
+
publicName: "label",
|
|
99
|
+
isSignal: true,
|
|
100
|
+
isRequired: false,
|
|
101
|
+
transformFunction: null
|
|
102
|
+
},
|
|
103
|
+
size: {
|
|
104
|
+
classPropertyName: "size",
|
|
105
|
+
publicName: "size",
|
|
106
|
+
isSignal: true,
|
|
107
|
+
isRequired: false,
|
|
108
|
+
transformFunction: null
|
|
109
|
+
},
|
|
110
|
+
iconOff: {
|
|
111
|
+
classPropertyName: "iconOff",
|
|
112
|
+
publicName: "iconOff",
|
|
113
|
+
isSignal: true,
|
|
114
|
+
isRequired: false,
|
|
115
|
+
transformFunction: null
|
|
116
|
+
},
|
|
117
|
+
iconOn: {
|
|
118
|
+
classPropertyName: "iconOn",
|
|
119
|
+
publicName: "iconOn",
|
|
120
|
+
isSignal: true,
|
|
121
|
+
isRequired: false,
|
|
122
|
+
transformFunction: null
|
|
123
|
+
},
|
|
124
|
+
disabled: {
|
|
125
|
+
classPropertyName: "disabled",
|
|
126
|
+
publicName: "disabled",
|
|
127
|
+
isSignal: true,
|
|
128
|
+
isRequired: false,
|
|
129
|
+
transformFunction: null
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
host: {
|
|
133
|
+
properties: {
|
|
134
|
+
"class.rt-toggle-switch--md": "size() === 'md'",
|
|
135
|
+
"class.rt-toggle-switch--lg": "size() === 'lg'",
|
|
136
|
+
"class.rt-toggle-switch--on": "isOn()",
|
|
137
|
+
"class.rt-toggle-switch--disabled": "isDisabled()"
|
|
138
|
+
},
|
|
139
|
+
classAttribute: "rt-toggle-switch"
|
|
140
|
+
},
|
|
141
|
+
providers: [{
|
|
142
|
+
provide: NG_VALUE_ACCESSOR,
|
|
143
|
+
useExisting: forwardRef(() => RtToggleSwitchComponent),
|
|
144
|
+
multi: true
|
|
145
|
+
}],
|
|
146
|
+
hostDirectives: [{
|
|
147
|
+
directive: i1.RtRadiusDirective,
|
|
148
|
+
inputs: ["radius", "radius"]
|
|
149
|
+
}],
|
|
150
|
+
ngImport: i0,
|
|
151
|
+
template: "<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n",
|
|
152
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-toggle-switch{--rt-toggle-radius: var(--rt-radius-full);--rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);--rt-toggle-transition-duration: var(--rt-duration-fast);--rt-toggle-disabled-opacity: .5;--rt-toggle-justify: flex-start;--rt-toggle-label-gap: var(--rt-space-2);--rt-toggle-label-size: var(--rt-text-sm);--rt-toggle-label-color-off: var(--rt-color-text-muted);--rt-toggle-label-color-on: var(--rt-color-text-primary);--rt-toggle-label-color-hover: var(--rt-color-text-primary);--rt-toggle-track-width: 42px;--rt-toggle-track-height: 24px;--rt-toggle-thumb-size: 18px;--rt-toggle-thumb-inset: 3px;--rt-toggle-thumb-travel: 18px;--rt-toggle-icon-inset: 4px;display:inline-flex;align-items:center;justify-content:var(--rt-toggle-justify);gap:var(--rt-toggle-label-gap)}rt-toggle-switch.rt-toggle-switch--md{--rt-toggle-track-width: 52px;--rt-toggle-thumb-travel: 28px}rt-toggle-switch.rt-toggle-switch--lg{--rt-toggle-track-width: 60px;--rt-toggle-track-height: 30px;--rt-toggle-thumb-size: 24px;--rt-toggle-thumb-travel: 30px;--rt-toggle-icon-inset: 6px}rt-toggle-switch.rt-toggle-switch--disabled{opacity:var(--rt-toggle-disabled-opacity)}rt-toggle-switch[data-rt-radius=none]{--rt-toggle-radius: var(--rt-radius-none)}rt-toggle-switch[data-rt-radius=xs]{--rt-toggle-radius: var(--rt-radius-xs)}rt-toggle-switch[data-rt-radius=sm]{--rt-toggle-radius: var(--rt-radius-sm)}rt-toggle-switch[data-rt-radius=ms]{--rt-toggle-radius: var(--rt-radius-ms)}rt-toggle-switch[data-rt-radius=md]{--rt-toggle-radius: var(--rt-radius-md)}rt-toggle-switch[data-rt-radius=lg]{--rt-toggle-radius: var(--rt-radius-lg)}rt-toggle-switch[data-rt-radius=xl]{--rt-toggle-radius: var(--rt-radius-xl)}rt-toggle-switch[data-rt-radius=\"2xl\"]{--rt-toggle-radius: var(--rt-radius-2xl)}rt-toggle-switch[data-rt-radius=full]{--rt-toggle-radius: var(--rt-radius-full)}rt-toggle-switch .rt-toggle-switch{display:inline-flex;padding:0;border:none;background:none;cursor:pointer}rt-toggle-switch .rt-toggle-switch:focus-visible{border-radius:var(--rt-toggle-radius);box-shadow:var(--rt-toggle-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-toggle-switch .rt-toggle-switch--disabled{cursor:not-allowed}rt-toggle-switch .rt-toggle-switch__track{position:relative;display:inline-block;width:var(--rt-toggle-track-width);height:var(--rt-toggle-track-height);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-track);box-shadow:var(--rt-toggle-shadow-border);color:var(--rt-toggle-color-icon);transition:background var(--rt-toggle-transition-duration) ease,box-shadow var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__track{background:var(--rt-toggle-color-track-on);box-shadow:none}rt-toggle-switch .rt-toggle-switch__icon-off,rt-toggle-switch .rt-toggle-switch__icon-on{position:absolute;inset-block-start:50%;transform:translateY(-50%)}rt-toggle-switch .rt-toggle-switch__icon-off{inset-inline-start:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__icon-on{inset-inline-end:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__thumb{position:absolute;width:var(--rt-toggle-thumb-size);height:var(--rt-toggle-thumb-size);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-thumb);box-shadow:var(--rt-toggle-shadow-thumb);inset-block-start:var(--rt-toggle-thumb-inset);inset-inline-start:var(--rt-toggle-thumb-inset);transition:transform var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__thumb{transform:translate(var(--rt-toggle-thumb-travel))}rt-toggle-switch .rt-toggle-switch__label{color:var(--rt-toggle-label-color-off);cursor:pointer;font-size:var(--rt-toggle-label-size);transition:color var(--rt-toggle-transition-duration) ease;-webkit-user-select:none;user-select:none}rt-toggle-switch.rt-toggle-switch--on .rt-toggle-switch__label{color:var(--rt-toggle-label-color-on)}rt-toggle-switch:not(.rt-toggle-switch--disabled):hover .rt-toggle-switch__label{color:var(--rt-toggle-label-color-hover)}rt-toggle-switch.rt-toggle-switch--disabled .rt-toggle-switch__label{cursor:not-allowed}}\n"],
|
|
153
|
+
dependencies: [
|
|
154
|
+
{
|
|
155
|
+
kind: "component",
|
|
156
|
+
type: RtIconComponent,
|
|
157
|
+
selector: "rt-icon",
|
|
158
|
+
inputs: [
|
|
159
|
+
"name",
|
|
160
|
+
"glyph",
|
|
161
|
+
"glyphStrategy",
|
|
162
|
+
"size",
|
|
163
|
+
"color",
|
|
164
|
+
"fill",
|
|
165
|
+
"spin",
|
|
166
|
+
"rotate"
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
kind: "directive",
|
|
171
|
+
type: BlockDirective,
|
|
172
|
+
selector: "[rtBlock]",
|
|
173
|
+
inputs: ["rtMod"]
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
kind: "directive",
|
|
177
|
+
type: ElemDirective,
|
|
178
|
+
selector: "[rtElem]",
|
|
179
|
+
inputs: ["rtMod"]
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
kind: "directive",
|
|
183
|
+
type: ModDirective,
|
|
184
|
+
selector: "[rtMod]"
|
|
185
|
+
}
|
|
186
|
+
],
|
|
187
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
188
|
+
encapsulation: i0.ViewEncapsulation.None
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
193
|
+
minVersion: "12.0.0",
|
|
194
|
+
version: "22.2.2",
|
|
195
|
+
ngImport: i0,
|
|
196
|
+
type: RtToggleSwitchComponent,
|
|
197
|
+
decorators: [{
|
|
198
|
+
type: Component,
|
|
199
|
+
args: [{
|
|
200
|
+
selector: "rt-toggle-switch",
|
|
201
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
202
|
+
encapsulation: ViewEncapsulation.None,
|
|
203
|
+
imports: [
|
|
204
|
+
RtIconComponent,
|
|
205
|
+
BlockDirective,
|
|
206
|
+
ElemDirective,
|
|
207
|
+
ModDirective
|
|
208
|
+
],
|
|
209
|
+
providers: [{
|
|
210
|
+
provide: NG_VALUE_ACCESSOR,
|
|
211
|
+
useExisting: forwardRef(() => RtToggleSwitchComponent),
|
|
212
|
+
multi: true
|
|
213
|
+
}],
|
|
214
|
+
hostDirectives: [{
|
|
215
|
+
directive: RtRadiusDirective,
|
|
216
|
+
inputs: ["radius"]
|
|
217
|
+
}],
|
|
218
|
+
host: {
|
|
219
|
+
class: BEM_BLOCK,
|
|
220
|
+
"[class.rt-toggle-switch--md]": "size() === 'md'",
|
|
221
|
+
"[class.rt-toggle-switch--lg]": "size() === 'lg'",
|
|
222
|
+
"[class.rt-toggle-switch--on]": "isOn()",
|
|
223
|
+
"[class.rt-toggle-switch--disabled]": "isDisabled()"
|
|
224
|
+
},
|
|
225
|
+
template: "<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n",
|
|
226
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-toggle-switch{--rt-toggle-radius: var(--rt-radius-full);--rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);--rt-toggle-transition-duration: var(--rt-duration-fast);--rt-toggle-disabled-opacity: .5;--rt-toggle-justify: flex-start;--rt-toggle-label-gap: var(--rt-space-2);--rt-toggle-label-size: var(--rt-text-sm);--rt-toggle-label-color-off: var(--rt-color-text-muted);--rt-toggle-label-color-on: var(--rt-color-text-primary);--rt-toggle-label-color-hover: var(--rt-color-text-primary);--rt-toggle-track-width: 42px;--rt-toggle-track-height: 24px;--rt-toggle-thumb-size: 18px;--rt-toggle-thumb-inset: 3px;--rt-toggle-thumb-travel: 18px;--rt-toggle-icon-inset: 4px;display:inline-flex;align-items:center;justify-content:var(--rt-toggle-justify);gap:var(--rt-toggle-label-gap)}rt-toggle-switch.rt-toggle-switch--md{--rt-toggle-track-width: 52px;--rt-toggle-thumb-travel: 28px}rt-toggle-switch.rt-toggle-switch--lg{--rt-toggle-track-width: 60px;--rt-toggle-track-height: 30px;--rt-toggle-thumb-size: 24px;--rt-toggle-thumb-travel: 30px;--rt-toggle-icon-inset: 6px}rt-toggle-switch.rt-toggle-switch--disabled{opacity:var(--rt-toggle-disabled-opacity)}rt-toggle-switch[data-rt-radius=none]{--rt-toggle-radius: var(--rt-radius-none)}rt-toggle-switch[data-rt-radius=xs]{--rt-toggle-radius: var(--rt-radius-xs)}rt-toggle-switch[data-rt-radius=sm]{--rt-toggle-radius: var(--rt-radius-sm)}rt-toggle-switch[data-rt-radius=ms]{--rt-toggle-radius: var(--rt-radius-ms)}rt-toggle-switch[data-rt-radius=md]{--rt-toggle-radius: var(--rt-radius-md)}rt-toggle-switch[data-rt-radius=lg]{--rt-toggle-radius: var(--rt-radius-lg)}rt-toggle-switch[data-rt-radius=xl]{--rt-toggle-radius: var(--rt-radius-xl)}rt-toggle-switch[data-rt-radius=\"2xl\"]{--rt-toggle-radius: var(--rt-radius-2xl)}rt-toggle-switch[data-rt-radius=full]{--rt-toggle-radius: var(--rt-radius-full)}rt-toggle-switch .rt-toggle-switch{display:inline-flex;padding:0;border:none;background:none;cursor:pointer}rt-toggle-switch .rt-toggle-switch:focus-visible{border-radius:var(--rt-toggle-radius);box-shadow:var(--rt-toggle-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-toggle-switch .rt-toggle-switch--disabled{cursor:not-allowed}rt-toggle-switch .rt-toggle-switch__track{position:relative;display:inline-block;width:var(--rt-toggle-track-width);height:var(--rt-toggle-track-height);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-track);box-shadow:var(--rt-toggle-shadow-border);color:var(--rt-toggle-color-icon);transition:background var(--rt-toggle-transition-duration) ease,box-shadow var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__track{background:var(--rt-toggle-color-track-on);box-shadow:none}rt-toggle-switch .rt-toggle-switch__icon-off,rt-toggle-switch .rt-toggle-switch__icon-on{position:absolute;inset-block-start:50%;transform:translateY(-50%)}rt-toggle-switch .rt-toggle-switch__icon-off{inset-inline-start:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__icon-on{inset-inline-end:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__thumb{position:absolute;width:var(--rt-toggle-thumb-size);height:var(--rt-toggle-thumb-size);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-thumb);box-shadow:var(--rt-toggle-shadow-thumb);inset-block-start:var(--rt-toggle-thumb-inset);inset-inline-start:var(--rt-toggle-thumb-inset);transition:transform var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__thumb{transform:translate(var(--rt-toggle-thumb-travel))}rt-toggle-switch .rt-toggle-switch__label{color:var(--rt-toggle-label-color-off);cursor:pointer;font-size:var(--rt-toggle-label-size);transition:color var(--rt-toggle-transition-duration) ease;-webkit-user-select:none;user-select:none}rt-toggle-switch.rt-toggle-switch--on .rt-toggle-switch__label{color:var(--rt-toggle-label-color-on)}rt-toggle-switch:not(.rt-toggle-switch--disabled):hover .rt-toggle-switch__label{color:var(--rt-toggle-label-color-hover)}rt-toggle-switch.rt-toggle-switch--disabled .rt-toggle-switch__label{cursor:not-allowed}}\n"]
|
|
227
|
+
}]
|
|
228
|
+
}],
|
|
229
|
+
propDecorators: {
|
|
230
|
+
inputId: [{
|
|
231
|
+
type: i0.Input,
|
|
232
|
+
args: [{
|
|
233
|
+
isSignal: true,
|
|
234
|
+
alias: "inputId",
|
|
235
|
+
required: false
|
|
236
|
+
}]
|
|
237
|
+
}],
|
|
238
|
+
ariaLabel: [{
|
|
239
|
+
type: i0.Input,
|
|
240
|
+
args: [{
|
|
241
|
+
isSignal: true,
|
|
242
|
+
alias: "ariaLabel",
|
|
243
|
+
required: false
|
|
244
|
+
}]
|
|
245
|
+
}],
|
|
246
|
+
label: [{
|
|
247
|
+
type: i0.Input,
|
|
248
|
+
args: [{
|
|
249
|
+
isSignal: true,
|
|
250
|
+
alias: "label",
|
|
251
|
+
required: false
|
|
252
|
+
}]
|
|
253
|
+
}],
|
|
254
|
+
size: [{
|
|
255
|
+
type: i0.Input,
|
|
256
|
+
args: [{
|
|
257
|
+
isSignal: true,
|
|
258
|
+
alias: "size",
|
|
259
|
+
required: false
|
|
260
|
+
}]
|
|
261
|
+
}],
|
|
262
|
+
iconOff: [{
|
|
263
|
+
type: i0.Input,
|
|
264
|
+
args: [{
|
|
265
|
+
isSignal: true,
|
|
266
|
+
alias: "iconOff",
|
|
267
|
+
required: false
|
|
268
|
+
}]
|
|
269
|
+
}],
|
|
270
|
+
iconOn: [{
|
|
271
|
+
type: i0.Input,
|
|
272
|
+
args: [{
|
|
273
|
+
isSignal: true,
|
|
274
|
+
alias: "iconOn",
|
|
275
|
+
required: false
|
|
276
|
+
}]
|
|
277
|
+
}],
|
|
278
|
+
disabled: [{
|
|
279
|
+
type: i0.Input,
|
|
280
|
+
args: [{
|
|
281
|
+
isSignal: true,
|
|
282
|
+
alias: "disabled",
|
|
283
|
+
required: false
|
|
284
|
+
}]
|
|
285
|
+
}]
|
|
286
|
+
}
|
|
287
|
+
});
|
|
161
288
|
export { RtToggleSwitchComponent };
|
|
162
|
-
|
|
289
|
+
|
|
290
|
+
//# sourceMappingURL=rt-tools-ui-kit-v2-toggle-switch.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-toggle-switch.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.component.ts","../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.component.html","../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.model.ts","../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-tools-ui-kit-v2-toggle-switch.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { IRtToggleSwitch } from './rt-toggle-switch.model';\n\nconst BEM_BLOCK: string = 'rt-toggle-switch';\n\n/** Счётчик для авто-id (связка подписи с кнопкой, когда `inputId` не задан). */\nlet uidSeed: number = 0;\n\nfunction nextAutoId(): string {\n uidSeed += 1;\n return `rt-toggle-switch-${uidSeed}`;\n}\n\n/**\n * On/off switch с `role=\"switch\"` + `aria-checked` — более правильный a11y\n * pattern чем `<input type=\"checkbox\">` для toggle (screen readers произносят\n * \"switch off/on\" вместо \"checkbox checked/unchecked\").\n *\n * Реализует `ControlValueAccessor` для `boolean` value через\n * `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает\n * NG0200 cycle при boot'е.\n *\n * Отключение складывается из двух независимых источников: входа `disabled` и\n * слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из\n * них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при\n * связывании контрола, то есть раньше, чем переключатель впервые обновит своё\n * вью, и мирроринг входа затирал бы её слово — контрол, созданный отключённым,\n * оказывался бы кликабельным.\n *\n * Опциональные иконки `iconOff` / `iconOn` рисуются внутри трека статично:\n * off-иконка в начальной половине, on-иконка в конечной. Бегунок непрозрачен\n * и наезжает на иконку активного состояния, так что видна всегда иконка того\n * состояния, куда переключится контрол.\n *\n * Вход `label` рисует подпись после кнопки — элементом `<label>`, связанным с\n * кнопкой: нажатие на подпись переключает, и она же называет переключатель\n * скринридеру через `aria-labelledby`.\n *\n * Размер и отключение выводятся модификаторами и на хост: свойства размеров\n * объявлены на хосте, чтобы правило приложения на теге их переопределяло, а\n * прозрачность отключения гасит переключатель вместе с подписью.\n *\n * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.\n */\n@Component({\n selector: 'rt-toggle-switch',\n templateUrl: './rt-toggle-switch.component.html',\n styleUrl: './rt-toggle-switch.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtIconComponent,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof RtToggleSwitchComponent => RtToggleSwitchComponent),\n multi: true,\n },\n ],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n '[class.rt-toggle-switch--md]': \"size() === 'md'\",\n '[class.rt-toggle-switch--lg]': \"size() === 'lg'\",\n '[class.rt-toggle-switch--on]': 'isOn()',\n '[class.rt-toggle-switch--disabled]': 'isDisabled()',\n },\n})\nexport class RtToggleSwitchComponent implements ControlValueAccessor {\n #onChange: (value: boolean) => void = (): void => undefined;\n #onTouched: () => void = (): void => undefined;\n\n /** Отключение, назначенное формой через CVA (`setDisabledState`). */\n readonly #disabledByForm: WritableSignal<boolean> = signal<boolean>(false);\n\n readonly #autoId: string = nextAutoId();\n\n protected readonly isOn: WritableSignal<boolean> = signal<boolean>(false);\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.#disabledByForm());\n\n /** Id кнопки: заданный входом или свой — на него указывает подпись. */\n protected readonly controlId: Signal<string> = computed((): string => this.inputId() ?? this.#autoId);\n\n protected readonly labelId: string = `${this.#autoId}-label`;\n\n /**\n * BEM-модификаторы для `[rtMod]`. Собираем в .ts, потому что\n * Angular template-parser не поддерживает computed property keys\n * в inline-объектах, а размер приходит ключом.\n */\n protected readonly bemMods: Signal<Record<string, boolean>> = computed((): Record<string, boolean> => ({\n [this.size()]: true,\n on: this.isOn(),\n disabled: this.isDisabled(),\n withIcons: this.iconOff() !== null || this.iconOn() !== null,\n }));\n\n public readonly inputId: InputSignal<string | null> = input<string | null>(null);\n\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Подпись после переключателя. Пусто — без подписи, как раньше. */\n public readonly label: InputSignal<string | null> = input<string | null>(null);\n\n /** Размерный тир трека. */\n public readonly size: InputSignal<IRtToggleSwitch.Size> = input<IRtToggleSwitch.Size>('sm');\n\n /** Иконка выключенного состояния — в начальной половине трека. Пусто — без иконки. */\n public readonly iconOff: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Иконка включённого состояния — в конечной половине трека. Пусто — без иконки. */\n public readonly iconOn: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n public writeValue(value: boolean | null | undefined): void {\n this.isOn.set(value === true);\n }\n\n public registerOnChange(fn: (value: boolean) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.#disabledByForm.set(disabled);\n }\n\n protected toggle(): void {\n if (this.isDisabled()) {\n return;\n }\n const next: boolean = !this.isOn();\n this.isOn.set(next);\n this.#onChange(next);\n this.#onTouched();\n }\n}\n","<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n","/**\n * Модель `<rt-toggle-switch>`: один корневой неймспейс с префиксом `I`.\n */\n\nexport namespace IRtToggleSwitch {\n /**\n * Размерный тир трека. Маппинг на пиксели — в SCSS\n * (`--rt-toggle-track-width` / `-height` / `--rt-toggle-thumb-size`).\n * Default — `sm`: он совпадает по высоте с плотными контролами формы,\n * где тоггл стоит в ряду с текстом.\n */\n export type Size = 'sm' | 'md' | 'lg';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAwBA,MAAM,SAAS,GAAW,kBAAkB;AAE5C;AACA,IAAI,OAAO,GAAW,CAAC;AAEvB,SAAS,UAAU,GAAA;IACf,OAAO,IAAI,CAAC;IACZ,OAAO,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE;AACxC;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;MA8BU,uBAAuB,CAAA;AA7BpC,IAAA,WAAA,GAAA;AA8BI,QAAA,IAAA,CAAA,SAAS,GAA6B,MAAY,SAAS;AAC3D,QAAA,IAAA,CAAA,UAAU,GAAe,MAAY,SAAS;;QAGrC,IAAA,CAAA,eAAe,GAA4B,MAAM,CAAU,KAAK;4FAAC;QAEjE,IAAA,CAAA,OAAO,GAAW,UAAU,EAAE;QAEpB,IAAA,CAAA,IAAI,GAA4B,MAAM,CAAU,KAAK;iFAAC;AACtD,QAAA,IAAA,CAAA,UAAU,GAAoB,QAAQ,CAAC,MAAe,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;uFAAC;;AAGhG,QAAA,IAAA,CAAA,SAAS,GAAmB,QAAQ,CAAC,MAAc,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO;sFAAC;AAElF,QAAA,IAAA,CAAA,OAAO,GAAW,CAAA,EAAG,IAAI,CAAC,OAAO,QAAQ;AAE5D;;;;AAIG;AACgB,QAAA,IAAA,CAAA,OAAO,GAAoC,QAAQ,CAAC,OAAgC;AACnG,YAAA,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI;AACnB,YAAA,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE;AACf,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI;SAC/D,CAAC;oFAAC;QAEa,IAAA,CAAA,OAAO,GAA+B,KAAK,CAAgB,IAAI;oFAAC;QAEhE,IAAA,CAAA,SAAS,GAA+B,KAAK,CAAgB,IAAI;sFAAC;;QAGlE,IAAA,CAAA,KAAK,GAA+B,KAAK,CAAgB,IAAI;kFAAC;;QAG9D,IAAA,CAAA,IAAI,GAAsC,KAAK,CAAuB,IAAI;iFAAC;;QAG3E,IAAA,CAAA,OAAO,GAAqC,KAAK,CAAsB,IAAI;oFAAC;;QAG5E,IAAA,CAAA,MAAM,GAAqC,KAAK,CAAsB,IAAI;mFAAC;QAE3E,IAAA,CAAA,QAAQ,GAAoD,KAAK,CAAwB,KAAK,gFAC1G,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AA2BL,IAAA;AAzEG,IAAA,SAAS;AACT,IAAA,UAAU;;AAGD,IAAA,eAAe;AAEf,IAAA,OAAO;AA0CT,IAAA,UAAU,CAAC,KAAiC,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;IACjC;AAEO,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEO,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACxB;AAEO,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtC;IAEU,MAAM,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB;QACJ;AACA,QAAA,MAAM,IAAI,GAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE;IACrB;8GAzES,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAhBrB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAsC,uBAAuB,CAAC;AACtF,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpFL,ikCA2BA,EAAA,MAAA,EAAA,CAAA,umIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AD8CQ,gBAAA,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,wEACb,YAAY,EAAA,QAAA,EAAA,SAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAkBP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA7BnC,SAAS;+BACI,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;;wBAEL,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,YAAY;qBACf,EAAA,SAAA,EACU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6D,CAAC;AACtF,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EAAA,cAAA,EACe,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAA,IAAA,EAChE;AACF,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,8BAA8B,EAAE,QAAQ;AACxC,wBAAA,oCAAoC,EAAE,cAAc;AACvD,qBAAA,EAAA,QAAA,EAAA,ikCAAA,EAAA,MAAA,EAAA,CAAA,umIAAA,CAAA,EAAA;;;AE5FL;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-toggle-switch.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.component.ts","../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.component.html"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { IRtToggleSwitch } from './rt-toggle-switch.model';\n\nconst BEM_BLOCK: string = 'rt-toggle-switch';\n\n/** Счётчик для авто-id (связка подписи с кнопкой, когда `inputId` не задан). */\nlet uidSeed: number = 0;\n\nfunction nextAutoId(): string {\n uidSeed += 1;\n return `rt-toggle-switch-${uidSeed}`;\n}\n\n/**\n * On/off switch с `role=\"switch\"` + `aria-checked` — более правильный a11y\n * pattern чем `<input type=\"checkbox\">` для toggle (screen readers произносят\n * \"switch off/on\" вместо \"checkbox checked/unchecked\").\n *\n * Реализует `ControlValueAccessor` для `boolean` value через\n * `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает\n * NG0200 cycle при boot'е.\n *\n * Отключение складывается из двух независимых источников: входа `disabled` и\n * слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из\n * них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при\n * связывании контрола, то есть раньше, чем переключатель впервые обновит своё\n * вью, и мирроринг входа затирал бы её слово — контрол, созданный отключённым,\n * оказывался бы кликабельным.\n *\n * Опциональные иконки `iconOff` / `iconOn` рисуются внутри трека статично:\n * off-иконка в начальной половине, on-иконка в конечной. Бегунок непрозрачен\n * и наезжает на иконку активного состояния, так что видна всегда иконка того\n * состояния, куда переключится контрол.\n *\n * Вход `label` рисует подпись после кнопки — элементом `<label>`, связанным с\n * кнопкой: нажатие на подпись переключает, и она же называет переключатель\n * скринридеру через `aria-labelledby`.\n *\n * Размер и отключение выводятся модификаторами и на хост: свойства размеров\n * объявлены на хосте, чтобы правило приложения на теге их переопределяло, а\n * прозрачность отключения гасит переключатель вместе с подписью.\n *\n * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.\n */\n@Component({\n selector: 'rt-toggle-switch',\n templateUrl: './rt-toggle-switch.component.html',\n styleUrl: './rt-toggle-switch.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtIconComponent,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof RtToggleSwitchComponent => RtToggleSwitchComponent),\n multi: true,\n },\n ],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n '[class.rt-toggle-switch--md]': \"size() === 'md'\",\n '[class.rt-toggle-switch--lg]': \"size() === 'lg'\",\n '[class.rt-toggle-switch--on]': 'isOn()',\n '[class.rt-toggle-switch--disabled]': 'isDisabled()',\n },\n})\nexport class RtToggleSwitchComponent implements ControlValueAccessor {\n #onChange: (value: boolean) => void = (): void => undefined;\n #onTouched: () => void = (): void => undefined;\n\n /** Отключение, назначенное формой через CVA (`setDisabledState`). */\n readonly #disabledByForm: WritableSignal<boolean> = signal<boolean>(false);\n\n readonly #autoId: string = nextAutoId();\n\n protected readonly isOn: WritableSignal<boolean> = signal<boolean>(false);\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.#disabledByForm());\n\n /** Id кнопки: заданный входом или свой — на него указывает подпись. */\n protected readonly controlId: Signal<string> = computed((): string => this.inputId() ?? this.#autoId);\n\n protected readonly labelId: string = `${this.#autoId}-label`;\n\n /**\n * BEM-модификаторы для `[rtMod]`. Собираем в .ts, потому что\n * Angular template-parser не поддерживает computed property keys\n * в inline-объектах, а размер приходит ключом.\n */\n protected readonly bemMods: Signal<Record<string, boolean>> = computed((): Record<string, boolean> => ({\n [this.size()]: true,\n on: this.isOn(),\n disabled: this.isDisabled(),\n withIcons: this.iconOff() !== null || this.iconOn() !== null,\n }));\n\n public readonly inputId: InputSignal<string | null> = input<string | null>(null);\n\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Подпись после переключателя. Пусто — без подписи, как раньше. */\n public readonly label: InputSignal<string | null> = input<string | null>(null);\n\n /** Размерный тир трека. */\n public readonly size: InputSignal<IRtToggleSwitch.Size> = input<IRtToggleSwitch.Size>('sm');\n\n /** Иконка выключенного состояния — в начальной половине трека. Пусто — без иконки. */\n public readonly iconOff: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Иконка включённого состояния — в конечной половине трека. Пусто — без иконки. */\n public readonly iconOn: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n public writeValue(value: boolean | null | undefined): void {\n this.isOn.set(value === true);\n }\n\n public registerOnChange(fn: (value: boolean) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.#disabledByForm.set(disabled);\n }\n\n protected toggle(): void {\n if (this.isDisabled()) {\n return;\n }\n const next: boolean = !this.isOn();\n this.isOn.set(next);\n this.#onChange(next);\n this.#onTouched();\n }\n}\n","<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n"],"mappings":"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"}
|