@rt-tools/ui-kit-v2 0.32.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +92 -5
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-badge.mjs +191 -0
- package/fesm2022/rt-tools-ui-kit-v2-badge.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs +6 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +35 -4
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +13 -4
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs +245 -60
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +30 -5
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +114 -2
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +14 -3
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +17 -3
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-divider.mjs +112 -0
- package/fesm2022/rt-tools-ui-kit-v2-divider.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs +854 -0
- package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +16 -5
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +580 -65
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +203 -15
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +40 -8
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +7 -3
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +53 -2
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +16 -5
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +207 -7
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs +171 -0
- package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +176 -6
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +9 -6
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +142 -23
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +22 -9
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +105 -8
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +13 -2
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +609 -33
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +45 -7
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +11 -2
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +152 -11
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +199 -17
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +35 -5
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +21 -6
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +4 -0
- package/package.json +17 -1
- package/src/assets/icons/volume-off.svg +2 -1
- package/src/lib/components/autocomplete/CONTEXT.md +25 -14
- package/src/lib/components/autocomplete/rt-autocomplete.component.scss +19 -0
- package/src/lib/components/badge/CONTEXT.md +33 -0
- package/src/lib/components/badge/rt-badge.directive.scss +104 -0
- package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +2 -2
- package/src/lib/components/button/CONTEXT.md +5 -0
- package/src/lib/components/button/rt-button.directive.scss +3 -1
- package/src/lib/components/checkbox/CONTEXT.md +15 -8
- package/src/lib/components/color-palette/rt-color-palette.component.scss +2 -2
- package/src/lib/components/container/CONTEXT.md +23 -6
- package/src/lib/components/container/rt-container.component.scss +90 -1
- package/src/lib/components/copy-value/CONTEXT.md +6 -5
- package/src/lib/components/copy-value/rt-copy-value.component.scss +16 -0
- package/src/lib/components/date-picker/rt-date-picker.component.scss +7 -0
- package/src/lib/components/date-range/rt-date-range.component.scss +7 -0
- package/src/lib/components/divider/CONTEXT.md +21 -0
- package/src/lib/components/divider/rt-divider.component.scss +34 -0
- package/src/lib/components/drawer/CONTEXT.md +73 -0
- package/src/lib/components/drawer/rt-drawer-container.component.scss +19 -0
- package/src/lib/components/drawer/rt-drawer.component.scss +168 -0
- package/src/lib/components/drawer/rt-resize-handle.component.scss +42 -0
- package/src/lib/components/dynamic-selector/CONTEXT.md +5 -0
- package/src/lib/components/expansion-panel/CONTEXT.md +32 -8
- package/src/lib/components/expansion-panel/rt-expansion-panel.component.scss +67 -2
- package/src/lib/components/field/CONTEXT.md +43 -0
- package/src/lib/components/field/rt-field-label-inside.scss +179 -0
- package/src/lib/components/field/rt-field.component.scss +51 -2
- package/src/lib/components/icon-button/CONTEXT.md +17 -15
- package/src/lib/components/icon-button/rt-icon-button.component.scss +3 -1
- package/src/lib/components/inline-edit/rt-inline-edit.component.scss +4 -4
- package/src/lib/components/input/CONTEXT.md +45 -11
- package/src/lib/components/input/rt-input-floating-label.scss +192 -0
- package/src/lib/components/input/rt-input-icons.scss +105 -0
- package/src/lib/components/input/rt-input.component.scss +91 -13
- package/src/lib/components/input-number/CONTEXT.md +7 -0
- package/src/lib/components/input-number/rt-input-number.component.scss +58 -1
- package/src/lib/components/menu/CONTEXT.md +1 -0
- package/src/lib/components/multiselect/CONTEXT.md +2 -1
- package/src/lib/components/multiselect/rt-multiselect.component.scss +7 -0
- package/src/lib/components/pagination/CONTEXT.md +3 -0
- package/src/lib/components/pagination/rt-pagination.component.scss +7 -0
- package/src/lib/components/progress-bar/CONTEXT.md +22 -0
- package/src/lib/components/progress-bar/rt-progress-bar.component.scss +77 -0
- package/src/lib/components/radio-button/CONTEXT.md +9 -0
- package/src/lib/components/radio-button/rt-radio-group.component.scss +13 -0
- package/src/lib/components/select/CONTEXT.md +28 -0
- package/src/lib/components/select/rt-select-clear.scss +88 -0
- package/src/lib/components/select/rt-select-floating-label.scss +155 -0
- package/src/lib/components/select/rt-select-material.scss +54 -0
- package/src/lib/components/select/rt-select.component.scss +54 -16
- package/src/lib/components/side-menu/CONTEXT.md +5 -0
- package/src/lib/components/speed-menu/rt-speed-menu.component.scss +5 -5
- package/src/lib/components/stepper/CONTEXT.md +13 -5
- package/src/lib/components/stepper/rt-stepper.component.scss +93 -0
- package/src/lib/components/tabs/CONTEXT.md +57 -9
- package/src/lib/components/tabs/rt-tabs.component.scss +201 -5
- package/src/lib/components/textarea/CONTEXT.md +12 -1
- package/src/lib/components/textarea/rt-textarea.component.scss +116 -1
- package/src/lib/components/toast/CONTEXT.md +23 -0
- package/src/lib/components/toast/rt-toast.component.scss +37 -0
- package/src/lib/components/toggle-button-group/CONTEXT.md +24 -4
- package/src/lib/components/toggle-button-group/rt-toggle-button-group-chips.scss +151 -0
- package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +35 -0
- package/src/lib/components/tooltip/CONTEXT.md +7 -1
- package/src/lib/components/tree/rt-tree.component.scss +2 -2
- package/src/rich-editor/lib/components/chat/CONTEXT.md +3 -0
- package/src/rich-editor/lib/components/chat/rt-chat.component.scss +9 -0
- package/src/styles/_color-scheme.scss +1 -1
- package/src/styles/_density.scss +48 -0
- package/src/styles/_index.scss +8 -0
- package/src/styles/_preset-material.scss +160 -70
- package/src/styles/_primitives.scss +1 -0
- package/src/styles/_semantic-navigation.scss +117 -0
- package/src/styles/_semantic.scss +29 -98
- package/src/styles/_theme-dark.scss +8 -0
- package/styles/tokens.css +2066 -1134
- package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +34 -0
- package/types/rt-tools-ui-kit-v2-badge.d.ts +71 -0
- package/types/rt-tools-ui-kit-v2-checkbox.d.ts +17 -3
- package/types/rt-tools-ui-kit-v2-container.d.ts +65 -9
- package/types/rt-tools-ui-kit-v2-copy-value.d.ts +11 -1
- package/types/rt-tools-ui-kit-v2-core.d.ts +110 -4
- package/types/rt-tools-ui-kit-v2-divider.d.ts +29 -0
- package/types/rt-tools-ui-kit-v2-drawer.d.ts +257 -0
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +240 -25
- package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +87 -3
- package/types/rt-tools-ui-kit-v2-field.d.ts +18 -1
- package/types/rt-tools-ui-kit-v2-form-control.d.ts +42 -4
- package/types/rt-tools-ui-kit-v2-icon-button.d.ts +2 -1
- package/types/rt-tools-ui-kit-v2-input-number.d.ts +1 -0
- package/types/rt-tools-ui-kit-v2-input.d.ts +98 -4
- package/types/rt-tools-ui-kit-v2-progress-bar.d.ts +53 -0
- package/types/rt-tools-ui-kit-v2-radio-button.d.ts +80 -1
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +5 -2
- package/types/rt-tools-ui-kit-v2-select.d.ts +65 -1
- package/types/rt-tools-ui-kit-v2-side-menu.d.ts +3 -0
- package/types/rt-tools-ui-kit-v2-stepper.d.ts +57 -4
- package/types/rt-tools-ui-kit-v2-tabs.d.ts +291 -6
- package/types/rt-tools-ui-kit-v2-textarea.d.ts +16 -0
- package/types/rt-tools-ui-kit-v2-toast.d.ts +38 -2
- package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +83 -3
- package/types/rt-tools-ui-kit-v2-tooltip.d.ts +17 -2
- package/types/rt-tools-ui-kit-v2.d.ts +4 -0
- package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector-popup-frame.component.scss +0 -6
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* Признак набора — на предке или на самом поле: приложение ставит его и на тег контрола. */
|
|
3
|
+
$preset: ':is(.rt-preset-material *, [data-preset="material"] *, .rt-preset-material, [data-preset="material"])';
|
|
4
|
+
$preset-weak: ':where(.rt-preset-material *, [data-preset="material"] *, .rt-preset-material, [data-preset="material"])';
|
|
5
|
+
|
|
6
|
+
/* Отступ текста и отключённый вид под материальным набором — отдельный лист стилей компонента:
|
|
7
|
+
основной лист стоит у порога в 8 КБ, который Angular по умолчанию ставит приложению. */
|
|
8
|
+
.rt-select {
|
|
9
|
+
/* Боковая рамка и отступ текста от внешнего края поля. Под материальным набором отступ — 16 px
|
|
10
|
+
от внешнего края, как у поля Material; своим видом кита он считается от рамки. */
|
|
11
|
+
--rt-select-edge: var(--rt-input-border-width);
|
|
12
|
+
--rt-select-text-inset: calc(var(--rt-input-padding-x) + var(--rt-select-edge));
|
|
13
|
+
|
|
14
|
+
&--appearance--fill {
|
|
15
|
+
--rt-select-edge: var(--rt-input-fill-edge);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&#{$preset-weak} {
|
|
19
|
+
--rt-select-text-inset: var(--rt-input-padding-x);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
&#{$preset-weak} &__trigger {
|
|
23
|
+
padding-inline: calc(var(--rt-select-text-inset) - var(--rt-select-edge));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* Отключённый выбор в материальном наборе не тускнеет, а красит рамку, текст и подсказку —
|
|
27
|
+
как поле ввода. Своим видом цвета равны обычным. */
|
|
28
|
+
&--disabled &__trigger {
|
|
29
|
+
color: var(--rt-input-color-text-disabled);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&--disabled &__label--placeholder {
|
|
33
|
+
color: var(--rt-input-color-placeholder-disabled);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Свой указатель (`rtSelectTrigger`) рамки не имеет и отключённым её не получает. Условие стоит
|
|
37
|
+
в `:where`, чтобы сила правила осталась прежней. */
|
|
38
|
+
&--disabled:not(.rt-select--invalid, .rt-select--appearance--fill, .rt-select--borderless)
|
|
39
|
+
&__trigger:where(:not(.rt-select__trigger--own)) {
|
|
40
|
+
border-color: var(--rt-input-color-border-disabled);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Треугольник отключённого выбора — цвета отключённого текста, как стрелка mat-select. */
|
|
44
|
+
&--disabled#{$preset} &__chevron {
|
|
45
|
+
--rt-icon-color-muted: var(--rt-input-color-placeholder-disabled);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Выбранное значение, нарисованное шаблоном строки, стоит в строке подписи по верху, а не по
|
|
49
|
+
базовой линии: иначе строка подписи вырастает на 4 px, и поле выбора выше поля Material. */
|
|
50
|
+
&#{$preset} &__label > &__option-content {
|
|
51
|
+
vertical-align: top;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
@use '../../../styles/mixins' as kv;
|
|
2
2
|
|
|
3
3
|
@layer rt-kit.components {
|
|
4
|
+
/* Признак набора — на предке или на самом поле: приложение ставит его и на тег контрола. */
|
|
5
|
+
$preset-weak: ':where(.rt-preset-material *, [data-preset="material"] *, .rt-preset-material, [data-preset="material"])';
|
|
6
|
+
|
|
4
7
|
.rt-select {
|
|
5
8
|
--rt-select-radius: var(--rt-input-radius);
|
|
6
9
|
--rt-select-fill-radius: var(--rt-radius-sm);
|
|
7
10
|
--rt-select-caret-transition-duration: var(--rt-duration-fast);
|
|
8
11
|
--rt-select-own-outline-width: var(--rt-border-width-medium);
|
|
12
|
+
--rt-select-floating-label-color: var(--rt-input-color-text-placeholder);
|
|
13
|
+
--rt-select-floating-label-color-focus: var(--rt-input-color-border-focus);
|
|
14
|
+
--rt-select-floating-label-color-error: var(--rt-input-color-border-error);
|
|
15
|
+
--rt-select-floating-label-bg: var(--rt-input-color-bg);
|
|
16
|
+
--rt-select-floating-label-font-size: var(--rt-text-xs);
|
|
17
|
+
--rt-select-floating-label-start: var(--rt-input-padding-x);
|
|
18
|
+
--rt-select-floating-label-rest-start: var(--rt-select-floating-label-start);
|
|
19
|
+
--rt-select-floating-label-raised-start: var(--rt-select-floating-label-start);
|
|
20
|
+
|
|
21
|
+
/* Разрыв рамки кнопки под подписью: начало, глубина — толщина рамки фокуса. Ширину подписи
|
|
22
|
+
ставит компонент замером; до замера разрыва нет. */
|
|
23
|
+
--rt-select-notch-start: calc(var(--rt-select-floating-label-raised-start) - var(--rt-space-1));
|
|
24
|
+
--rt-select-notch-depth: calc(2 * var(--rt-input-border-width));
|
|
25
|
+
--rt-select-notch-width: 0px;
|
|
26
|
+
|
|
27
|
+
/* Высота залитого поля Material с подписью: подпись лежит внутри поля над значением. Она
|
|
28
|
+
равна средней высоте поля — под набором это высота Material при выбранной плотности. */
|
|
29
|
+
--rt-select-fill-floating-height: var(--rt-input-height-md);
|
|
30
|
+
--rt-select-color-border-hover: var(--rt-color-text-primary);
|
|
31
|
+
--rt-select-floating-label-duration: var(--rt-duration-fast);
|
|
9
32
|
|
|
10
33
|
position: relative;
|
|
11
34
|
display: block;
|
|
12
35
|
width: 100%;
|
|
36
|
+
min-width: var(--rt-input-min-width);
|
|
13
37
|
|
|
14
38
|
/* bordered=false: снимаем только resting-рамку триггера. Объявлено ДО блока
|
|
15
39
|
__trigger — его :focus и правила --open/--invalid/--readonly __trigger
|
|
@@ -23,6 +47,7 @@
|
|
|
23
47
|
Объявлен до блоков состояний: фокус, ошибка и «только чтение» идут ниже и
|
|
24
48
|
перекрывают его рамку. */
|
|
25
49
|
&--appearance--fill &__trigger {
|
|
50
|
+
border-width: var(--rt-input-fill-edge) var(--rt-input-fill-edge) var(--rt-input-border-width);
|
|
26
51
|
border-color: transparent;
|
|
27
52
|
border-radius: var(--rt-select-fill-radius) var(--rt-select-fill-radius) 0 0;
|
|
28
53
|
border-bottom-color: var(--rt-color-field-fill-underline);
|
|
@@ -65,6 +90,13 @@
|
|
|
65
90
|
}
|
|
66
91
|
}
|
|
67
92
|
|
|
93
|
+
/* Наведение в материальном наборе — как у поля Material: рамка цвета текста. Сила правила —
|
|
94
|
+
на уровне кнопки, поэтому фокус, открытый список, ошибка, залитый вид и «без рамки»
|
|
95
|
+
его перекрывают. */
|
|
96
|
+
&#{$preset-weak} &__trigger:where(:hover:not(:disabled)) {
|
|
97
|
+
border-color: var(--rt-select-color-border-hover);
|
|
98
|
+
}
|
|
99
|
+
|
|
68
100
|
/* Свой указатель потребителя: полевой вид кнопки снимается — ground, рамка, высота и
|
|
69
101
|
отступы. Останется он — значок или метка потребителя окажутся внутри чужого поля, и
|
|
70
102
|
вход теряет смысл. Поведение при этом на кнопке, снимается только вид.
|
|
@@ -129,8 +161,15 @@
|
|
|
129
161
|
}
|
|
130
162
|
}
|
|
131
163
|
|
|
164
|
+
/* Отключённый выбор своим видом кита тускнеет целиком; цвета материального набора — в листе
|
|
165
|
+
`rt-select-material.scss`. */
|
|
132
166
|
&--disabled {
|
|
133
|
-
opacity: var(--rt-input-disabled-opacity);
|
|
167
|
+
opacity: var(--rt-input-disabled-field-opacity);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* Отключённый залитый выбор в наборе залит, как поле Material: on-surface 4 %. */
|
|
171
|
+
&--disabled.rt-select--appearance--fill &__trigger {
|
|
172
|
+
background-color: var(--rt-input-fill-color-bg-disabled);
|
|
134
173
|
}
|
|
135
174
|
|
|
136
175
|
/* Read-only: триггер остаётся в DOM (нужен для viewChild.required popover'а),
|
|
@@ -164,6 +203,10 @@
|
|
|
164
203
|
overflow: hidden;
|
|
165
204
|
min-width: 0;
|
|
166
205
|
flex: 1 1 auto;
|
|
206
|
+
|
|
207
|
+
/* Межбуквенный интервал значения — ручка приложения: кит её не объявляет. Без неё подпись
|
|
208
|
+
наследует интервал кнопки, как раньше; поле ввода, число и текст получают normal от браузера. */
|
|
209
|
+
letter-spacing: var(--rt-input-letter-spacing, inherit);
|
|
167
210
|
text-overflow: ellipsis;
|
|
168
211
|
white-space: nowrap;
|
|
169
212
|
|
|
@@ -186,21 +229,6 @@
|
|
|
186
229
|
transform: rotate(180deg);
|
|
187
230
|
}
|
|
188
231
|
|
|
189
|
-
/* Под материальным набором стрелка — залитый треугольник mat-select первого кита, 10 на 5 px,
|
|
190
|
-
и открытое поле его не переворачивает. Свой вид кита остаётся с шевроном. Размер значок
|
|
191
|
-
ставит себе встроенным стилем, поэтому треугольник задан пределами, а не шириной. */
|
|
192
|
-
:is(.rt-preset-material, [data-preset='material']) &__chevron {
|
|
193
|
-
max-width: 10px;
|
|
194
|
-
max-height: 5px;
|
|
195
|
-
background-color: currentcolor;
|
|
196
|
-
clip-path: polygon(0 0, 100% 0, 50% 100%);
|
|
197
|
-
transform: none;
|
|
198
|
-
|
|
199
|
-
svg {
|
|
200
|
-
display: none;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
232
|
/* Panel рендерится в CDK Overlay (body) — позиционирование на CDK,
|
|
205
233
|
здесь только chrome. Глобальный класс (ViewEncapsulation.None). */
|
|
206
234
|
&__panel {
|
|
@@ -286,6 +314,16 @@
|
|
|
286
314
|
flex: 1 1 auto;
|
|
287
315
|
}
|
|
288
316
|
|
|
317
|
+
/* Разметка строки от потребителя: занимает место подписи и выстраивает своё в ряд — метка
|
|
318
|
+
перед текстом встаёт по центру строки. */
|
|
319
|
+
&__option-content {
|
|
320
|
+
display: inline-flex;
|
|
321
|
+
min-width: 0;
|
|
322
|
+
flex: 1 1 auto;
|
|
323
|
+
align-items: center;
|
|
324
|
+
gap: var(--rt-space-sm);
|
|
325
|
+
}
|
|
326
|
+
|
|
289
327
|
/* Стрелка ветки и пустое место под неё у листа: шаг отступа равен их ширине с зазором,
|
|
290
328
|
и стрелка дочерней строки встаёт под подписью родителя. */
|
|
291
329
|
&__toggle,
|
|
@@ -46,6 +46,11 @@
|
|
|
46
46
|
**Раздел и запрос меню держит само.** Их не задать входом: раздел открывает нажатие или наведение
|
|
47
47
|
на пункт полосы, запрос — набор в поле.
|
|
48
48
|
|
|
49
|
+
**Поиск раскрывает и папку, совпавшую только по имени.** Строк в ней нет — в выдаче стоят только
|
|
50
|
+
совпавшие, — но её заголовок раскрыт, как у папок с найденным внутри. Свёрнутый человеком блок
|
|
51
|
+
избранного на время поиска стоит раскрытым и держит в заголовке число совпавших строк; со стёртым
|
|
52
|
+
запросом он снова свёрнут.
|
|
53
|
+
|
|
49
54
|
## Края
|
|
50
55
|
|
|
51
56
|
- Незакреплённая панель стоит над страницей и закрывается уходом указателя. Если человек взялся за
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
:is(.rt-preset-material, [data-preset='material']) & {
|
|
40
40
|
--rt-speed-menu-gap: var(--rt-size-4);
|
|
41
41
|
--rt-speed-menu-inset: calc(var(--rt-size-6) + var(--rt-size-1));
|
|
42
|
-
--rt-speed-menu-action-bg: var(--
|
|
43
|
-
--rt-speed-menu-action-color: var(--
|
|
42
|
+
--rt-speed-menu-action-bg: var(--rt-sys-primary-container, var(--rt-mat-neutral-25));
|
|
43
|
+
--rt-speed-menu-action-color: var(--rt-sys-on-primary-container, var(--rt-color-text-primary));
|
|
44
44
|
--rt-icon-step-md: var(--rt-size-6);
|
|
45
|
-
--rt-speed-menu-action-shadow: var(--
|
|
46
|
-
--rt-speed-menu-action-shadow-hover: var(--
|
|
45
|
+
--rt-speed-menu-action-shadow: var(--rt-sys-level3, var(--rt-mat-shadow-fab));
|
|
46
|
+
--rt-speed-menu-action-shadow-hover: var(--rt-sys-level4, var(--rt-mat-shadow-fab-hover));
|
|
47
47
|
--rt-speed-menu-duration: calc(var(--rt-duration-fast) * 5 / 6);
|
|
48
48
|
--rt-speed-menu-stagger: calc(var(--rt-duration-fast) * 5 / 12);
|
|
49
49
|
}
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
ступень первого кита. */
|
|
99
99
|
:root[data-theme='dark'] :is(.rt-preset-material, [data-preset='material']) .rt-speed-menu__panel,
|
|
100
100
|
html.rt-theme-dark :is(.rt-preset-material, [data-preset='material']) .rt-speed-menu__panel {
|
|
101
|
-
--rt-speed-menu-action-bg: var(--
|
|
101
|
+
--rt-speed-menu-action-bg: var(--rt-sys-primary-container, var(--rt-mat-dark-20));
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
@for $step from 1 through 7 {
|
|
@@ -6,12 +6,20 @@
|
|
|
6
6
|
<rt-stepper [steps]="[{ label: 'Заявка', description: 'Заполните данные' }, …]" [currentIndex]="1" />
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
| вход | тип | умолчание
|
|
10
|
-
| -------------- | ----------------------------------- |
|
|
11
|
-
| `steps` | `readonly { label, description }[]` | `[]`
|
|
12
|
-
| `currentIndex` | `number \| string` | `0`
|
|
9
|
+
| вход | тип | умолчание |
|
|
10
|
+
| -------------- | ----------------------------------- | -------------- |
|
|
11
|
+
| `steps` | `readonly { label, description }[]` | `[]` |
|
|
12
|
+
| `currentIndex` | `number \| string` | `0` |
|
|
13
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` |
|
|
13
14
|
|
|
14
|
-
Выходов нет — шаги переключает потребитель.
|
|
15
|
+
Выходов нет — шаги переключает потребитель. Описание шага необязательно.
|
|
16
|
+
|
|
17
|
+
## Вертикальный список
|
|
18
|
+
|
|
19
|
+
`orientation="vertical"` рисует `<ol>`: метка с номером, подпись, описание, линия между метками.
|
|
20
|
+
Номер ниже нуля даёт инструкцию: все метки нейтральные, `aria-current` нет ни у одного шага.
|
|
21
|
+
Подпись можно заменить шаблоном `ng-template[rtStepLabel]`; в его контексте `$implicit` — шаг,
|
|
22
|
+
`index` — номер с нуля. Полоса и её зажим номера к вертикальному списку не относятся.
|
|
15
23
|
|
|
16
24
|
## Главное, что нужно знать
|
|
17
25
|
|
|
@@ -125,6 +125,99 @@
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
+
/* Вертикальный список шагов: метка с номером, подпись справа, линия между метками. Номер
|
|
129
|
+
рисует метка, а не список: глобальный сброс у потребителя снимает нумерацию `<ol>`. */
|
|
130
|
+
&.rt-stepper--vertical > .rt-stepper {
|
|
131
|
+
--rt-stepper-mark-size: var(--rt-size-6);
|
|
132
|
+
--rt-stepper-mark-font-size: var(--rt-text-xs);
|
|
133
|
+
--rt-stepper-mark-bg: var(--rt-color-text-muted);
|
|
134
|
+
--rt-stepper-mark-color: var(--rt-color-text-inverse);
|
|
135
|
+
--rt-stepper-line-width: var(--rt-border-width-thin);
|
|
136
|
+
--rt-stepper-line-color: var(--rt-color-border-default);
|
|
137
|
+
--rt-stepper-item-gap: var(--rt-space-6);
|
|
138
|
+
|
|
139
|
+
padding: 0;
|
|
140
|
+
margin: 0;
|
|
141
|
+
gap: 0;
|
|
142
|
+
list-style: none;
|
|
143
|
+
|
|
144
|
+
.rt-stepper__item {
|
|
145
|
+
position: relative;
|
|
146
|
+
display: flex;
|
|
147
|
+
align-items: flex-start;
|
|
148
|
+
gap: var(--rt-space-4);
|
|
149
|
+
padding-block-end: var(--rt-stepper-item-gap);
|
|
150
|
+
|
|
151
|
+
&:last-child {
|
|
152
|
+
padding-block-end: 0;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* Линия от метки до метки следующего шага, с просветом у обеих. */
|
|
156
|
+
&:not(:last-child):after {
|
|
157
|
+
position: absolute;
|
|
158
|
+
background: var(--rt-stepper-line-color);
|
|
159
|
+
content: '';
|
|
160
|
+
inline-size: var(--rt-stepper-line-width);
|
|
161
|
+
inset-block: calc(var(--rt-stepper-mark-size) + var(--rt-space-1)) var(--rt-space-1);
|
|
162
|
+
inset-inline-start: calc((var(--rt-stepper-mark-size) - var(--rt-stepper-line-width)) / 2);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* Цифра пройденного шага — цвет, обратный тексту: прогресс в тёмной теме светлый. */
|
|
166
|
+
&--state--complete {
|
|
167
|
+
--rt-stepper-mark-bg: var(--rt-color-stepper-progress);
|
|
168
|
+
--rt-stepper-mark-color: var(--rt-color-text-inverse);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* Янтарь текущего шага один в обеих темах, и цифра на нём одна — тёмная. */
|
|
172
|
+
&--state--current {
|
|
173
|
+
--rt-stepper-mark-bg: var(--rt-color-stepper-current);
|
|
174
|
+
--rt-stepper-mark-color: var(--rt-neutral-950);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
&--state--upcoming {
|
|
178
|
+
--rt-stepper-mark-bg: var(--rt-color-stepper-track);
|
|
179
|
+
--rt-stepper-mark-color: var(--rt-color-text-primary);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.rt-stepper__mark {
|
|
184
|
+
display: inline-flex;
|
|
185
|
+
flex: 0 0 auto;
|
|
186
|
+
align-items: center;
|
|
187
|
+
justify-content: center;
|
|
188
|
+
border-radius: var(--rt-stepper-radius);
|
|
189
|
+
background: var(--rt-stepper-mark-bg);
|
|
190
|
+
block-size: var(--rt-stepper-mark-size);
|
|
191
|
+
color: var(--rt-stepper-mark-color);
|
|
192
|
+
font-size: var(--rt-stepper-mark-font-size);
|
|
193
|
+
font-weight: var(--rt-font-weight-medium);
|
|
194
|
+
inline-size: var(--rt-stepper-mark-size);
|
|
195
|
+
line-height: 1;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.rt-stepper__body {
|
|
199
|
+
display: flex;
|
|
200
|
+
min-width: 0;
|
|
201
|
+
flex-direction: column;
|
|
202
|
+
gap: var(--rt-space-1);
|
|
203
|
+
padding-block-start: var(--rt-space-1);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.rt-stepper__step-label {
|
|
207
|
+
color: var(--rt-color-text-primary);
|
|
208
|
+
font-size: var(--rt-text-sm);
|
|
209
|
+
line-height: var(--rt-leading-snug);
|
|
210
|
+
overflow-wrap: anywhere;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.rt-stepper__step-description {
|
|
214
|
+
margin: 0;
|
|
215
|
+
color: var(--rt-color-text-muted);
|
|
216
|
+
font-size: var(--rt-text-xs);
|
|
217
|
+
line-height: var(--rt-leading-snug);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
128
221
|
/* Шаг входа `radius` переназначает скругление точек шагов. */
|
|
129
222
|
@include kv.radius-steps('--rt-stepper-radius', '> .rt-stepper');
|
|
130
223
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# `rt-tabs` + `[rtTab]`
|
|
2
2
|
|
|
3
|
-
Вкладки объявляются директивой на `<ng-template>` — содержимое неактивной вкладки не
|
|
3
|
+
Вкладки объявляются директивой на `<ng-template>` — содержимое неактивной вкладки не создаётся;
|
|
4
|
+
с `preserveContent` тело открытой хоть раз вкладки живёт скрытым.
|
|
4
5
|
|
|
5
6
|
```html
|
|
6
7
|
<rt-tabs stretch [activeId]="tab()" (activeIdChange)="tab.set($event)">
|
|
@@ -12,14 +13,20 @@
|
|
|
12
13
|
|
|
13
14
|
## `rt-tabs`
|
|
14
15
|
|
|
15
|
-
| вход | тип
|
|
16
|
-
| ------------------- |
|
|
17
|
-
| `activeId` | `IRtTabs.Id \| null`
|
|
18
|
-
| `direction` | `'horizontal' \| 'vertical'`
|
|
19
|
-
| `stretch` | `boolean`
|
|
20
|
-
| `contentScrollable` | `boolean`
|
|
16
|
+
| вход | тип | умолчание |
|
|
17
|
+
| ------------------- | ------------------------------ | -------------- |
|
|
18
|
+
| `activeId` | `IRtTabs.Id \| null` | `null` |
|
|
19
|
+
| `direction` | `'horizontal' \| 'vertical'` | `'horizontal'` |
|
|
20
|
+
| `stretch` | `boolean` | `false` |
|
|
21
|
+
| `contentScrollable` | `boolean` | `true` |
|
|
22
|
+
| `headerOnly` | `boolean` | `false` |
|
|
23
|
+
| `activation` | `'auto' \| 'manual'` | `'auto'` |
|
|
24
|
+
| `scrollArrows` | `'overlay' \| 'inline'` | `'overlay'` |
|
|
25
|
+
| `scrollStep` | `'fixed' \| 'page' \| 'third'` | `'fixed'` |
|
|
26
|
+
| `animationDuration` | `string \| number \| null` | `null` |
|
|
27
|
+
| `preserveContent` | `boolean` | `false` |
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
Выходы: `activeIdChange: IRtTabs.Id`, `tabClose: IRtTabs.Id` — просьба закрыть вкладку с `closable`.
|
|
23
30
|
|
|
24
31
|
## `[rtTab]`
|
|
25
32
|
|
|
@@ -34,6 +41,11 @@
|
|
|
34
41
|
| `badgeAriaLabel` | `string` — подпись метки для чтения с экрана | `''` |
|
|
35
42
|
| `disabled` / `hidden` / `invalid` | `boolean` | `false` |
|
|
36
43
|
| `invalidMessage` | `string` | `''` → `uiTabInvalid` |
|
|
44
|
+
| `glyph` | `string \| null` — значок Material | `null` |
|
|
45
|
+
| `tooltip` | `string` — подсказка, и у отключённой | `''` |
|
|
46
|
+
| `closable` | `boolean` | `false` |
|
|
47
|
+
| `closeTooltip` | `string` — подсказка крестика | `''` |
|
|
48
|
+
| `closeTooltipPlacement` | `IRtTooltip.Placement \| null` | `null` |
|
|
37
49
|
|
|
38
50
|
## Главное, что нужно знать
|
|
39
51
|
|
|
@@ -52,8 +64,14 @@
|
|
|
52
64
|
|
|
53
65
|
- Стрелки (влево/вправо, а в вертикальной раскладке вверх/вниз) перешагивают отключённые вкладки
|
|
54
66
|
и заворачиваются по кругу; `Home`/`End` — к первой и последней.
|
|
55
|
-
-
|
|
67
|
+
- `activation="manual"`: стрелки и `Home`/`End` только переводят фокус, вкладку открывают `Enter`
|
|
68
|
+
и `Space`. По умолчанию (`auto`) стрелка открывает вкладку сразу.
|
|
69
|
+
- В таб-порядке стоит **одна** вкладка (`tabindex="0"`): активная, а в ручном режиме — та, на
|
|
70
|
+
которую перевели фокус. Остальные достаются стрелками.
|
|
56
71
|
- Панель и вкладка связаны в обе стороны: `aria-controls` ↔ `aria-labelledby`.
|
|
72
|
+
- Открытая панель стоит в таб-порядке (`tabindex="0"`): Tab с полосы попадает на неё. Вход
|
|
73
|
+
`contentTabIndex` задаёт другое значение, а `null` снимает атрибут, и Tab идёт с полосы сразу в
|
|
74
|
+
первое поле панели, как у `mat-tab-group`. Панель без полей тогда с клавиатуры не достать.
|
|
57
75
|
|
|
58
76
|
## Края
|
|
59
77
|
|
|
@@ -61,5 +79,35 @@
|
|
|
61
79
|
- У невалидной вкладки появляется подсказка с текстом `invalidMessage`.
|
|
62
80
|
- Метка без `badgeTitle` и `badgeAriaLabel` рисуется как прежде: голое значение, без подсказки и
|
|
63
81
|
без подписи. Подсказка метки — своя, на самой метке: подсказка кнопки занята неверной вкладкой.
|
|
82
|
+
- Отключённая вкладка помечена `aria-disabled`, не `disabled`: иначе на неё не навести, и её
|
|
83
|
+
подсказка не показалась бы. Клик по ней ничего не выбирает.
|
|
84
|
+
- Вкладка — обёртка `.rt-tab-item` с `role="presentation"`. В ней кнопка `__trigger` с
|
|
85
|
+
`role="tab"` и рядом кнопка-крестик `__close`: кнопка в кнопке недопустима. Отступы несёт
|
|
86
|
+
`__trigger`, а правый отступ закрываемой вкладки входит в отступ крестика, поэтому вид прежний.
|
|
87
|
+
Кольцо фокуса вкладки рисует обёртка, у крестика оно своё.
|
|
88
|
+
- Полоса выбранной вкладки и прокрутка к вкладке меряют обёртку по `data-tabitem`, фокус ищет
|
|
89
|
+
кнопку по `data-tabid`. Нажатие в любом месте обёртки выбирает вкладку, крестик своё нажатие
|
|
90
|
+
дальше не пускает.
|
|
91
|
+
- Крестик стоит в таб-порядке только у вкладки в фокусе. Его имя — `closeTooltip` или
|
|
92
|
+
переведённое `uiClose`. На вкладке закрывает и `Delete`. Фокус после закрытия с клавиатуры
|
|
93
|
+
встаёт на активную вкладку.
|
|
94
|
+
- У крестика своя подсказка `closeTooltip`; пока указатель на нём, подсказка вкладки пуста. Вид
|
|
95
|
+
крестика — свойства `--rt-tab-item-close-*` на `.rt-tab-item`; размер иконки идёт через шаг `xs`
|
|
96
|
+
самой иконки, её ширина задана стилем на теге.
|
|
97
|
+
- `headerOnly` убирает панель и `aria-controls` у вкладок; выбор по-прежнему уходит в `activeIdChange`.
|
|
64
98
|
- Стрелки прокрутки шапки есть в разметке всегда — показывает их модификатор `--visible`,
|
|
65
99
|
который выставляется по замеру ширины после отрисовки.
|
|
100
|
+
- Нажатие на стрелку плавно сдвигает полосу на 80 px, как до шага на страницу; `scrollStep="page"`
|
|
101
|
+
— на ширину видимой области, `"third"` — на её треть. Удержание дольше 300 мс прокручивает непрерывно. Вкладка, выбранная частично скрытой,
|
|
102
|
+
въезжает в видимую область так же плавно; длительность и кривая — `--rt-tabs-scroll-duration` и
|
|
103
|
+
`--rt-tabs-scroll-easing`, вход `animationDuration` их не трогает. Указатель, ушедший со стрелки до отпускания, полосу не сдвигает.
|
|
104
|
+
- Смена вкладки движется: полоса — один элемент полосы вкладок, переезжает на новую вкладку; панель
|
|
105
|
+
прежней уходит, новая въезжает по направлению перехода. Длительности — токены
|
|
106
|
+
`--rt-tabs-indicator-duration` и `--rt-tabs-panel-duration` (своё умолчание панели — `0ms`, смена
|
|
107
|
+
на месте) или вход `animationDuration` для обоих; `prefers-reduced-motion` снимает движение.
|
|
108
|
+
Пока панель уходит, якорь `tabs-panel` стоит только на новой, у уходящей — `tabs-panel-leaving`.
|
|
109
|
+
- `preserveContent`: тело создаётся при первом открытии вкладки и дальше живёт; неактивное скрыто
|
|
110
|
+
(`hidden`, `inert`, `aria-hidden`, вне таб-порядка) с якорем `tabs-panel-idle`. Уходит при смене
|
|
111
|
+
живое тело прежней вкладки. Тело вкладки, убранной из набора, уничтожается вместе с ней.
|
|
112
|
+
- `scrollArrows="inline"`: при переполнении обе стрелки стоят по краям, полоса между ними уже;
|
|
113
|
+
стрелка, в сторону которой прокручивать некуда, бледная и не нажимается.
|