@rt-tools/ui-kit-v2 0.11.0 → 0.13.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 +110 -5
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +947 -0
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2.mjs +12236 -8927
- package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
- package/package.json +8 -1
- package/rt-tools-ui-kit-v2-0.13.0.tgz +0 -0
- package/src/assets/fonts/montserrat-cyrillic-ext-wght-italic.woff2 +0 -0
- package/src/assets/fonts/montserrat-cyrillic-ext-wght-normal.woff2 +0 -0
- package/src/assets/fonts/montserrat-cyrillic-wght-italic.woff2 +0 -0
- package/src/assets/fonts/montserrat-cyrillic-wght-normal.woff2 +0 -0
- package/src/assets/fonts/montserrat-latin-ext-wght-italic.woff2 +0 -0
- package/src/assets/fonts/montserrat-latin-ext-wght-normal.woff2 +0 -0
- package/src/assets/fonts/montserrat-latin-wght-italic.woff2 +0 -0
- package/src/assets/fonts/montserrat-latin-wght-normal.woff2 +0 -0
- package/src/assets/icons/arrows.svg +9 -0
- package/src/assets/icons/equals.svg +8 -0
- package/src/assets/icons/user-off.svg +16 -0
- package/src/assets/icons-material/NOTICE.md +6 -2
- package/src/assets/icons-material/arrow-left.fill.svg +3 -0
- package/src/assets/icons-material/arrow-left.svg +1 -1
- package/src/assets/icons-material/arrow-right.fill.svg +3 -0
- package/src/assets/icons-material/arrow-right.svg +3 -0
- package/src/assets/icons-material/arrows.fill.svg +5 -0
- package/src/assets/icons-material/arrows.svg +5 -0
- package/src/assets/icons-material/ban.fill.svg +5 -0
- package/src/assets/icons-material/ban.svg +1 -1
- package/src/assets/icons-material/bars.fill.svg +3 -0
- package/src/assets/icons-material/bars.svg +1 -1
- package/src/assets/icons-material/check.fill.svg +3 -0
- package/src/assets/icons-material/check.svg +1 -1
- package/src/assets/icons-material/chevron-down.fill.svg +3 -0
- package/src/assets/icons-material/chevron-down.svg +1 -1
- package/src/assets/icons-material/chevron-left.fill.svg +3 -0
- package/src/assets/icons-material/chevron-left.svg +1 -1
- package/src/assets/icons-material/chevron-right.fill.svg +3 -0
- package/src/assets/icons-material/chevron-right.svg +1 -1
- package/src/assets/icons-material/close.fill.svg +3 -0
- package/src/assets/icons-material/close.svg +1 -1
- package/src/assets/icons-material/cloud-upload.fill.svg +5 -0
- package/src/assets/icons-material/cloud-upload.svg +1 -1
- package/src/assets/icons-material/cog.fill.svg +5 -0
- package/src/assets/icons-material/cog.svg +1 -1
- package/src/assets/icons-material/copy.fill.svg +5 -0
- package/src/assets/icons-material/copy.svg +1 -1
- package/src/assets/icons-material/ellipsis-h.fill.svg +5 -0
- package/src/assets/icons-material/ellipsis-h.svg +1 -1
- package/src/assets/icons-material/ellipsis-v.fill.svg +5 -0
- package/src/assets/icons-material/ellipsis-v.svg +1 -1
- package/src/assets/icons-material/email.fill.svg +5 -0
- package/src/assets/icons-material/email.svg +5 -0
- package/src/assets/icons-material/equals.fill.svg +3 -0
- package/src/assets/icons-material/equals.svg +3 -0
- package/src/assets/icons-material/external-link.fill.svg +5 -0
- package/src/assets/icons-material/external-link.svg +1 -1
- package/src/assets/icons-material/eye-slash.fill.svg +5 -0
- package/src/assets/icons-material/eye-slash.svg +1 -1
- package/src/assets/icons-material/eye.fill.svg +5 -0
- package/src/assets/icons-material/eye.svg +1 -1
- package/src/assets/icons-material/ico-download.fill.svg +5 -0
- package/src/assets/icons-material/ico-download.svg +1 -1
- package/src/assets/icons-material/ico-plus.fill.svg +3 -0
- package/src/assets/icons-material/ico-plus.svg +1 -1
- package/src/assets/icons-material/info-circle.fill.svg +5 -0
- package/src/assets/icons-material/info-circle.svg +1 -1
- package/src/assets/icons-material/pencil.fill.svg +5 -0
- package/src/assets/icons-material/pencil.svg +1 -1
- package/src/assets/icons-material/refresh.fill.svg +5 -0
- package/src/assets/icons-material/refresh.svg +1 -1
- package/src/assets/icons-material/search.fill.svg +5 -0
- package/src/assets/icons-material/search.svg +1 -1
- package/src/assets/icons-material/star.fill.svg +3 -0
- package/src/assets/icons-material/star.svg +1 -1
- package/src/assets/icons-material/sync.fill.svg +5 -0
- package/src/assets/icons-material/sync.svg +1 -1
- package/src/assets/icons-material/table.fill.svg +5 -0
- package/src/assets/icons-material/table.svg +1 -1
- package/src/assets/icons-material/tag.fill.svg +5 -0
- package/src/assets/icons-material/tag.svg +1 -1
- package/src/assets/icons-material/trash.fill.svg +5 -0
- package/src/assets/icons-material/trash.svg +1 -1
- package/src/assets/icons-material/user-off.fill.svg +5 -0
- package/src/assets/icons-material/user-off.svg +5 -0
- package/src/assets/icons-material/user.fill.svg +5 -0
- package/src/assets/icons-material/user.svg +1 -1
- package/src/lib/components/CONTEXT.md +19 -16
- package/src/lib/components/accordion/CONTEXT.md +31 -0
- package/src/lib/components/accordion/rt-accordion.component.scss +61 -0
- package/src/lib/components/action-bar/CONTEXT.md +53 -0
- package/src/lib/components/action-bar/rt-action-bar-holder.component.scss +70 -0
- package/src/lib/components/action-bar/rt-action-bar.component.scss +122 -0
- package/src/lib/components/aside/CONTEXT.md +5 -1
- package/src/lib/components/aside/_rt-aside-overlay.scss +9 -0
- package/src/lib/components/aside/header/rt-aside-header.component.scss +18 -2
- package/src/lib/components/aside/rt-aside.component.scss +5 -1
- package/src/lib/components/autocomplete/CONTEXT.md +2 -1
- package/src/lib/components/button/CONTEXT.md +11 -11
- package/src/lib/components/checkbox/rt-checkbox.component.scss +5 -1
- package/src/lib/components/data-list/CONTEXT.md +122 -0
- package/src/lib/components/data-list/rt-data-list.component.scss +57 -0
- package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +256 -0
- package/src/lib/components/data-list/toolbar/rt-data-list-toolbar.component.scss +128 -0
- package/src/lib/components/data-table/CONTEXT.md +102 -0
- package/src/lib/components/data-table/cell/rt-data-table-cell.component.scss +115 -0
- package/src/lib/components/data-table/filter-cell/rt-data-table-filter-cell.component.scss +51 -0
- package/src/lib/components/data-table/header-cell/rt-data-table-header-cell.component.scss +111 -0
- package/src/lib/components/data-table/rt-data-table.component.scss +263 -0
- package/src/lib/components/date-picker/rt-date-picker.component.scss +13 -0
- package/src/lib/components/delta-view/CONTEXT.md +1 -1
- package/src/lib/components/dialog/CONTEXT.md +4 -0
- package/src/lib/components/dynamic-list/CONTEXT.md +90 -0
- package/src/lib/components/dynamic-list/rt-dynamic-list.component.scss +123 -0
- package/src/lib/components/empty-state/CONTEXT.md +5 -0
- package/src/lib/components/empty-state/rt-empty-state.component.scss +19 -5
- package/src/lib/components/file-card/rt-file-card.component.scss +14 -0
- package/src/lib/components/file-drop/rt-file-drop.component.scss +44 -8
- package/src/lib/components/icon-button/rt-icon-button.component.scss +28 -4
- package/src/lib/components/input/rt-input.component.scss +25 -1
- package/src/lib/components/input-number/rt-input-number.component.scss +13 -0
- package/src/lib/components/menu/CONTEXT.md +10 -0
- package/src/lib/components/menu/rt-menu-item.component.scss +35 -3
- package/src/lib/components/menu/rt-menu.component.scss +15 -5
- package/src/lib/components/multiselect/CONTEXT.md +3 -0
- package/src/lib/components/multiselect/rt-multiselect.component.scss +58 -1
- package/src/lib/components/pagination/CONTEXT.md +4 -1
- package/src/lib/components/pagination/rt-pagination.component.scss +43 -13
- package/src/lib/components/radio-button/CONTEXT.md +42 -0
- package/src/lib/components/radio-button/rt-radio-button.component.scss +105 -0
- package/src/lib/components/scroll-area/CONTEXT.md +52 -0
- package/src/lib/components/scroll-area/rt-scroll-area.component.scss +69 -0
- package/src/lib/components/select/CONTEXT.md +8 -1
- package/src/lib/components/select/rt-select.component.scss +110 -7
- package/src/lib/components/table/CONTEXT.md +46 -1
- package/src/lib/components/table/filter-header/CONTEXT.md +64 -0
- package/src/lib/components/table/filter-header/rt-table-filter-header.component.scss +76 -0
- package/src/lib/components/table/rt-table.component.scss +32 -1
- package/src/lib/components/tag/CONTEXT.md +9 -0
- package/src/lib/components/tag/rt-tag.component.scss +38 -0
- package/src/lib/components/textarea/CONTEXT.md +1 -1
- package/src/lib/components/toolbar/CONTEXT.md +3 -0
- package/src/lib/components/toolbar/rt-toolbar.component.scss +9 -2
- package/src/lib/components/tooltip/CONTEXT.md +4 -4
- package/src/lib/components/tooltip/rt-tooltip.component.scss +2 -2
- package/src/{lib → rich-editor/lib}/components/chat/CONTEXT.md +1 -1
- package/src/{lib → rich-editor/lib}/components/message-composer/CONTEXT.md +5 -1
- package/src/{lib → rich-editor/lib}/components/message-composer/rt-message-composer.component.scss +9 -0
- package/src/{lib → rich-editor/lib}/components/rich-editor/CONTEXT.md +2 -2
- package/src/styles/_coarse-pointer.scss +15 -0
- package/src/styles/_coexist.scss +28 -0
- package/src/styles/_fonts.scss +99 -0
- package/src/styles/_index.scss +13 -0
- package/src/styles/_preset-material.scss +201 -26
- package/src/styles/_primitives.scss +41 -5
- package/src/styles/_scrollbar.scss +16 -12
- package/src/styles/_semantic-lists.scss +89 -0
- package/src/styles/_semantic.scss +80 -9
- package/src/styles/_theme-dark.scss +36 -0
- package/src/styles/_theme-scope.scss +111 -0
- package/src/styles/tokens.coexist.scss +3 -0
- package/src/styles/tokens.package.scss +6 -0
- package/styles/tokens.coexist.css +27 -0
- package/styles/tokens.css +5443 -43
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +529 -0
- package/types/rt-tools-ui-kit-v2.d.ts +2778 -1375
- package/rt-tools-ui-kit-v2-0.11.0.tgz +0 -0
- /package/src/{lib → rich-editor/lib}/components/chat/rt-chat.component.scss +0 -0
- /package/src/{lib → rich-editor/lib}/components/rich-editor/rt-rich-editor.component.scss +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
|
+
<path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="M157-175q-29 0-50-21t-21-50v-469q0-29 21-50t50-21h91q29 0 49.5 21t20.5 50v469q0 29-20.5 50T248-175h-91Zm278 0q-28 0-49.5-21T364-246v-469q0-29 21.5-50t49.5-21h91q29 0 50 21t21 50v469q0 29-21 50t-50 21h-91Zm278 0q-29 0-50-21t-21-50v-469q0-29 21-50t50-21h91q29 0 50 21t21 50v469q0 29-21 50t-50 21h-91Z" />
|
|
5
|
+
</svg>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
2
|
<path
|
|
3
3
|
fill="currentColor"
|
|
4
|
-
d="
|
|
4
|
+
d="M86-269v-422q0-39.19 27.61-67.09Q141.22-786 180-786h600q39.19 0 67.09 27.91Q875-730.19 875-691v422q0 38.78-27.91 66.39Q819.19-175 780-175H180q-38.78 0-66.39-27.61T86-269Zm94 0h137v-422H180v422Zm231 0h138v-422H411v422Zm232 0h137v-422H643v422Z" />
|
|
5
5
|
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
|
+
<path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="M880-381 580-81q-13.29 13.5-30.39 19.75Q532.5-55 514.25-55t-35.11-6.5Q462.29-68 449-81L83-447q-13-13-20.5-30.08T55-513v-299q0-38.78 27.32-66.39T148-906h300q18.33 0 35.52 7.37Q500.7-891.25 514-878l366 364q14.3 14.33 21.15 31.5 6.85 17.17 6.85 35.23 0 18.07-7 35.67T880-381ZM252.88-658Q273-658 288-673.03q15-15.03 15-35.35 0-20.33-14.88-35.47-14.88-15.15-35-15.15Q232-759 217-743.97q-15 15.03-15 35.35 0 20.33 14.88 35.47 14.88 15.15 36 15.15Z" />
|
|
5
|
+
</svg>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
2
|
<path
|
|
3
3
|
fill="currentColor"
|
|
4
|
-
d="
|
|
4
|
+
d="M880-381 580-81q-13.29 13.5-30.39 19.75Q532.5-55 514.25-55t-35.11-6.5Q462.29-68 449-81L83-447q-13-13-20.5-30.08T55-513v-299q0-38.78 27.32-66.39T148-906h300q18.33 0 35.52 7.37Q500.7-891.25 514-878l366 364q14.3 14.33 21.15 31.5 6.85 17.17 6.85 35.23 0 18.07-7 35.67T880-381ZM516-147l298-299-367.31-365H149v295.68L516-147ZM252.88-658Q273-658 288-673.03q15-15.03 15-35.35 0-20.33-14.88-35.47-14.88-15.15-35-15.15Q232-759 217-743.97q-15 15.03-15 35.35 0 20.33 14.88 35.47 14.88 15.15 36 15.15ZM481-479Z" />
|
|
5
5
|
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
|
+
<path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="M253-95q-39.46 0-67.23-27.47Q158-149.95 158-189v-553h-58v-94h231v-48h297v48h232v94h-58v553q0 39.05-27.77 66.53Q746.46-95 707-95H253Zm101-172h77v-399h-77v399Zm175 0h78v-399h-78v399Z" />
|
|
5
|
+
</svg>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
2
|
<path
|
|
3
3
|
fill="currentColor"
|
|
4
|
-
d="
|
|
4
|
+
d="M253-95q-40.21 0-67.61-27.1Q158-149.2 158-189v-553h-58v-94h231v-48h297v48h232v94h-58v553q0 39.05-27.77 66.53Q746.46-95 707-95H253Zm454-647H253v553h454v-553ZM354-267h77v-399h-77v399Zm175 0h78v-399h-78v399ZM253-742v553-553Z" />
|
|
5
5
|
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
|
+
<path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="m842-30-93-92H135v-120.79q0-44.21 22.63-77.63Q180.27-353.83 217-371q59.24-26 113.99-41 54.75-15 111.01-18L30-842l50-50L892-80l-50 50ZM742-371q35 15 57 44.5t25 70.5v8L674-398q17 5 34 12.5t34 14.5ZM561-511 322-751q20.76-44.64 64.38-68.82Q430-844 479.93-844q73.07 0 124.57 50.5T656-669.47q0 50.22-24.5 93.34Q607-533 561-511Z" />
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
|
+
<path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="m842-30-93-92H135v-120.79q0-44.51 22.83-77.73Q180.66-353.73 217-371q59.24-26 113.99-41 54.75-15 111.01-18L30-842l50-50L892-80l-50 50ZM229-216h425L535-336q-13-1-27-1.5t-28-.5q-56 0-108.5 10.5t-110.07 38.34Q247-282.44 238-268.42q-9 14.01-9 29.42v23Zm513-155q35 15 57 44.5t25 70.5v8L674-398q17 5 34.14 12.39Q725.29-378.22 742-371ZM561-511l-77-77q32-2 54.5-25t22.5-56q0-33.64-23.36-57.32Q514.29-750 480-750q-33 0-56 22t-25 55l-77-78q20.76-44.64 64.21-68.82Q429.66-844 479.93-844q73.07 0 124.57 50.5T656-669.05q0 49.8-24.5 92.92Q607-533 561-511Zm93 295H229h425ZM442-631Z" />
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
|
+
<path
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
d="M479.8-494q-77.21 0-126-48.8-48.8-48.79-48.8-126 0-77.2 48.8-126.2 48.79-49 126-49 77.2 0 126.7 49T656-668.8q0 77.21-49.5 126Q557-494 479.8-494ZM135-122v-120.79q0-44.51 22.83-77.73Q180.66-353.73 217-371q69-31 133.46-46.5Q414.92-433 479.73-433q66.73 0 130.5 16Q674-401 742-371q37.61 15.96 60.8 49.48Q826-288 826-243.05V-122H135Z" />
|
|
5
|
+
</svg>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
|
|
2
2
|
<path
|
|
3
3
|
fill="currentColor"
|
|
4
|
-
d="
|
|
4
|
+
d="M479.8-494q-77.21 0-126-48.8-48.8-48.79-48.8-126 0-77.2 48.8-126.2 48.79-49 126-49 77.2 0 126.7 49T656-668.8q0 77.21-49.5 126Q557-494 479.8-494ZM135-122v-120.79q0-44.51 22.83-77.73Q180.66-353.73 217-371q69-31 133.46-46.5Q414.92-433 479.73-433q66.73 0 130.5 16 63.77 16 131.69 46.19 37.91 16.09 61 49.45Q826-288 826-243.05V-122H135Zm94-94h502v-23q0-15.35-9.5-29.32T698-289q-60-28-110.5-38.5-50.49-10.5-108-10.5-55.5 0-108 10.5t-110.07 38.34Q247-282.44 238-268.42q-9 14.01-9 29.42v23Zm250.8-372q35.2 0 58.2-22.85 23-22.84 23-58.11 0-35.69-22.8-58.37-22.79-22.67-58-22.67-35.2 0-58.2 22.72t-23 57.82q0 35.51 22.8 58.49 22.79 22.97 58 22.97Zm.2-81Zm0 453Z" />
|
|
5
5
|
</svg>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Компоненты `@rt-tools/ui-kit-v2`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
73 семейства, каждое — своя директория с одинаковым устройством:
|
|
4
4
|
|
|
5
5
|
```
|
|
6
6
|
tag/
|
|
@@ -32,18 +32,21 @@ tag/
|
|
|
32
32
|
|
|
33
33
|
## Карта
|
|
34
34
|
|
|
35
|
-
| задача | компонент
|
|
36
|
-
| ------------------------ |
|
|
37
|
-
| иконка, кольцо, заглушка | `icon`, `spinner`, `skeleton`, `skeleton-wrapper`
|
|
38
|
-
| статус, счётчик, метка | `tag`, `live-badge`, `info-item`, `stat-tile`, `delta-view`
|
|
39
|
-
| кнопки | `button` (директива), `icon-button`, `split-button`, `toggle-button-group`
|
|
40
|
-
| поля ввода | `input`, `textarea`, `input-number`, `counter`, `checkbox`, `toggle-switch`, `date-picker`, `file-input`, `rich-editor`
|
|
41
|
-
| списки выбора | `select`, `multiselect`, `autocomplete`, `filter-control`
|
|
42
|
-
| обёртка поля | `field`, `form-control` (основа)
|
|
43
|
-
| плавающие панели | `popover`, `tooltip`, `confirm-popover`, `menu`, `toast`
|
|
44
|
-
| окна и панели | `dialog`, `aside`, `aside-section`, `bottom-sheet`, `welcome-dialog`, `photo-viewer`
|
|
45
|
-
| каркас страницы | `container`, `workspace`, `workspace-details`, `header`, `page-header`, `toolbar`, `section-nav`
|
|
46
|
-
| данные | `table`, `pagination`, `thread-list`, `detail-list`, `money-list`, `bar-list`, `timeline`, `night-grid`, `calendar`
|
|
47
|
-
| переписка | `chat`, `message`, `message-composer`
|
|
48
|
-
| файлы | `file-card`, `file-list`, `file-drop`, `download-link`
|
|
49
|
-
| прочее | `card`, `note`, `empty-state`, `tabs`, `stepper`, `logo`, `theme-toggle`, `notifications-bell`, `collapsible-text`, `counter-row` |
|
|
35
|
+
| задача | компонент |
|
|
36
|
+
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
37
|
+
| иконка, кольцо, заглушка | `icon`, `spinner`, `skeleton`, `skeleton-wrapper` |
|
|
38
|
+
| статус, счётчик, метка | `tag`, `live-badge`, `info-item`, `stat-tile`, `delta-view` |
|
|
39
|
+
| кнопки | `button` (директива), `icon-button`, `split-button`, `toggle-button-group` |
|
|
40
|
+
| поля ввода | `input`, `textarea`, `input-number`, `counter`, `checkbox`, `toggle-switch`, `date-picker`, `file-input`, `rich-editor` |
|
|
41
|
+
| списки выбора | `select`, `multiselect`, `autocomplete`, `filter-control` |
|
|
42
|
+
| обёртка поля | `field`, `form-control` (основа) |
|
|
43
|
+
| плавающие панели | `popover`, `tooltip`, `confirm-popover`, `menu`, `toast` |
|
|
44
|
+
| окна и панели | `dialog`, `aside`, `aside-section`, `bottom-sheet`, `welcome-dialog`, `photo-viewer` |
|
|
45
|
+
| каркас страницы | `container`, `workspace`, `workspace-details`, `header`, `page-header`, `toolbar`, `section-nav` |
|
|
46
|
+
| данные | `table`, `pagination`, `thread-list`, `detail-list`, `money-list`, `bar-list`, `timeline`, `night-grid`, `calendar` |
|
|
47
|
+
| переписка | `chat`, `message`, `message-composer` |
|
|
48
|
+
| файлы | `file-card`, `file-list`, `file-drop`, `download-link` |
|
|
49
|
+
| прочее | `card`, `note`, `empty-state`, `tabs`, `stepper`, `logo`, `theme-toggle`, `notifications-bell`, `collapsible-text`, `accordion`, `counter-row` |
|
|
50
|
+
|
|
51
|
+
`rich-editor`, `message-composer` и `chat` работают на quill и лежат во втором входе пакета —
|
|
52
|
+
`@rt-tools/ui-kit-v2/rich-editor`, каталог `src/rich-editor/`. Основной вход их не отдаёт.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `rt-accordion`
|
|
2
|
+
|
|
3
|
+
Список пунктов с заголовком-кнопкой и текстом под ней: вопросы с раскрывающимися ответами.
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<rt-accordion [items]="questions()" [openIndex]="null" />
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
| вход | тип | умолчание |
|
|
10
|
+
| ----------- | ------------------------------ | -------------- |
|
|
11
|
+
| `items` | `readonly IRtAccordion.Item[]` | **обязателен** |
|
|
12
|
+
| `openIndex` | `number \| null` | `0` |
|
|
13
|
+
|
|
14
|
+
Выходов нет.
|
|
15
|
+
|
|
16
|
+
## Главное, что нужно знать
|
|
17
|
+
|
|
18
|
+
**Пункты раскрываются независимо.** Нажатие раскрывает или сворачивает один пункт, соседи остаются
|
|
19
|
+
как были. Читающий сравнивает два ответа, и сворачивать первый при раскрытии второго нельзя.
|
|
20
|
+
|
|
21
|
+
**Решение о раскрытии лежит в `rt-accordion.logic.ts`.** Набор раскрытых номеров — связанный
|
|
22
|
+
сигнал компонента. Новый список пунктов начинает раскрытие заново с `openIndex`.
|
|
23
|
+
|
|
24
|
+
## Края
|
|
25
|
+
|
|
26
|
+
- `openIndex` вне списка, отрицательный или `null` оставляет все пункты свёрнутыми.
|
|
27
|
+
- Панель свёрнутого пункта лежит в разметке с `hidden`. Поисковик страницы с отрисовкой на сервере
|
|
28
|
+
видит все ответы.
|
|
29
|
+
- Id кнопок и панелей берутся из счётчика на экземпляр. Два аккордеона на странице не ссылаются на
|
|
30
|
+
чужие панели.
|
|
31
|
+
- Заголовок и текст — строки. Разметку внутри пункта компонент не принимает.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
.rt-accordion {
|
|
3
|
+
--rt-accordion-border-width: var(--rt-border-width-thin);
|
|
4
|
+
--rt-accordion-duration: var(--rt-duration-fast);
|
|
5
|
+
--rt-accordion-focus-shadow: var(--rt-shadow-focus-ring);
|
|
6
|
+
|
|
7
|
+
display: block;
|
|
8
|
+
width: 100%;
|
|
9
|
+
|
|
10
|
+
&__item {
|
|
11
|
+
border-bottom: var(--rt-accordion-border-width) solid var(--rt-color-border-subtle);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&__heading {
|
|
15
|
+
margin: 0;
|
|
16
|
+
font-family: var(--rt-font-family-sans);
|
|
17
|
+
font-size: var(--rt-text-md);
|
|
18
|
+
font-weight: var(--rt-font-weight-semibold);
|
|
19
|
+
line-height: var(--rt-leading-snug);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
&__toggle {
|
|
23
|
+
display: flex;
|
|
24
|
+
width: 100%;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: space-between;
|
|
27
|
+
padding: var(--rt-space-md) 0;
|
|
28
|
+
border: 0;
|
|
29
|
+
background: transparent;
|
|
30
|
+
color: var(--rt-color-text-primary);
|
|
31
|
+
cursor: pointer;
|
|
32
|
+
font: inherit;
|
|
33
|
+
gap: var(--rt-space-md);
|
|
34
|
+
text-align: start;
|
|
35
|
+
|
|
36
|
+
&:focus-visible {
|
|
37
|
+
box-shadow: var(--rt-accordion-focus-shadow);
|
|
38
|
+
outline: 2px solid transparent;
|
|
39
|
+
outline-offset: 2px;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&__chevron {
|
|
44
|
+
flex: none;
|
|
45
|
+
transition: transform var(--rt-accordion-duration);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&__text {
|
|
49
|
+
padding-bottom: var(--rt-space-md);
|
|
50
|
+
margin: 0;
|
|
51
|
+
color: var(--rt-color-text-muted);
|
|
52
|
+
font-family: var(--rt-font-family-sans);
|
|
53
|
+
font-size: var(--rt-text-sm);
|
|
54
|
+
line-height: var(--rt-leading-normal);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&__item--open &__chevron {
|
|
58
|
+
transform: rotate(180deg);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# `rt-action-bar`, `rt-action-bar-holder`
|
|
2
|
+
|
|
3
|
+
```html
|
|
4
|
+
<!-- список отмечает строки и пишет в службу; держатель рисует полосу над страницей -->
|
|
5
|
+
<rt-action-bar-holder />
|
|
6
|
+
```
|
|
7
|
+
|
|
8
|
+
| вход | тип | умолчание |
|
|
9
|
+
| -------- | --------------------- | -------------- |
|
|
10
|
+
| `config` | `IRtActionBar.Config` | **обязателен** |
|
|
11
|
+
|
|
12
|
+
| выход | тип |
|
|
13
|
+
| ----------- | --------------------- |
|
|
14
|
+
| `actionRun` | `IRtActionBar.Action` |
|
|
15
|
+
| `closed` | `void` |
|
|
16
|
+
|
|
17
|
+
У держателя входов нет вовсе: настройку он читает у службы `RtActionBarService`.
|
|
18
|
+
|
|
19
|
+
## Главное, что нужно знать
|
|
20
|
+
|
|
21
|
+
**Полоса открывается счётом выбранного, а не своим признаком.** Два источника одного признака
|
|
22
|
+
расходятся молча, и признак, оставшийся поднятым над опустевшим выбором, держал бы полосу над
|
|
23
|
+
страницей, где ничего не выбрано.
|
|
24
|
+
|
|
25
|
+
**Крестик ничего не закрывает.** Он сообщает наружу; выбранное отпускает держатель через службу,
|
|
26
|
+
а список принадлежит потребителю.
|
|
27
|
+
|
|
28
|
+
## Как этим пользоваться
|
|
29
|
+
|
|
30
|
+
- **Служба объявляется на своём уровне, а не в корне.** Тот, кто отмечает строки, и тот, кто
|
|
31
|
+
рисует полосу, стоят на разной глубине одного экрана: `providers: [RtActionBarService]` идёт
|
|
32
|
+
туда, где живёт список.
|
|
33
|
+
- **Действие с вложенным списком само не срабатывает** — оно заголовок группы. Нажатие раскрывает
|
|
34
|
+
список всплывающим слоем кита; нажатие пункта закрывает полосу так же, как обычное действие.
|
|
35
|
+
- **Вид действия называется входом `look`, а не объектом стилей.** Палитра кита закрытая, и своего
|
|
36
|
+
цвета в настройку не передать.
|
|
37
|
+
- **Подпись действия со значком снимает правило стиля по грубому указателю.** В разметке она стоит
|
|
38
|
+
всегда, и признак значка стоит модификатором — условие в шаблоне было бы оформлением, уехавшим
|
|
39
|
+
в код.
|
|
40
|
+
|
|
41
|
+
## Края
|
|
42
|
+
|
|
43
|
+
- Ноль выбранного показан числом: счётчик, прячущийся на нуле, дёргал бы ширину полосы ровно в
|
|
44
|
+
минуту её ухода.
|
|
45
|
+
- Полоса остаётся в разметке на длительность ухода. Число одно на разметку и правило стиля и лежит
|
|
46
|
+
в `rt-action-bar.model.ts`.
|
|
47
|
+
- Подпись действия не урезается. Ряд, не влезший в предел ширины, переносится; одно действие,
|
|
48
|
+
которое шире места и само по себе, переносит подпись внутри себя по границам слов.
|
|
49
|
+
|
|
50
|
+
## Рядом
|
|
51
|
+
|
|
52
|
+
- [`rt-toolbar`](../toolbar/CONTEXT.md) — полоса в потоке страницы, о выбранном ничего не знает.
|
|
53
|
+
- [`rt-menu`](../menu/CONTEXT.md) — действия над одной записью.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-action-bar-holder — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
|
|
3
|
+
`.rt-action-bar-holder` — сам хост (шаблон начинается с ng-container, класс ставит host). */
|
|
4
|
+
|
|
5
|
+
.rt-action-bar-holder {
|
|
6
|
+
// Номер слоя берётся шкалой: номер, написанный числом в файле компонента, ни в одну
|
|
7
|
+
// шкалу не попадает, и следующий узел над страницей возьмёт тот же, о том не узнав.
|
|
8
|
+
--rt-action-bar-holder-bottom: var(--rt-space-6);
|
|
9
|
+
--rt-action-bar-holder-inline: var(--rt-space-4);
|
|
10
|
+
--rt-action-bar-holder-enter-duration: 300ms;
|
|
11
|
+
--rt-action-bar-holder-leave-duration: 300ms;
|
|
12
|
+
|
|
13
|
+
position: fixed;
|
|
14
|
+
z-index: var(--rt-z-fixed);
|
|
15
|
+
display: flex;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
inset: auto var(--rt-action-bar-holder-inline) var(--rt-action-bar-holder-bottom);
|
|
18
|
+
pointer-events: none;
|
|
19
|
+
|
|
20
|
+
// Полоса ловит нажатия, а держатель — нет: он тянется на всю ширину страницы, и без
|
|
21
|
+
// этого перекрыл бы всё, что лежит под ним по краям от полосы.
|
|
22
|
+
&__bar {
|
|
23
|
+
max-width: 100%;
|
|
24
|
+
animation: rt-action-bar-enter var(--rt-action-bar-holder-enter-duration);
|
|
25
|
+
pointer-events: auto;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// `forwards`: полоса держится за нижней кромкой до того мига, когда её снимет разметка.
|
|
29
|
+
// Без него она возвращается на место в конце ухода и успевает мигнуть на своём месте.
|
|
30
|
+
&__bar--leaving {
|
|
31
|
+
animation: rt-action-bar-leave var(--rt-action-bar-holder-leave-duration) forwards;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Выезд полосы: снизу, с проскоком выше места и возвратом. Проскок и делает движение
|
|
36
|
+
// живым, а не равномерным; уход идёт тем же путём в обратную сторону.
|
|
37
|
+
@keyframes rt-action-bar-enter {
|
|
38
|
+
0% {
|
|
39
|
+
opacity: 0;
|
|
40
|
+
transform: translateY(100%);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
30% {
|
|
44
|
+
opacity: 1;
|
|
45
|
+
transform: translateY(calc(var(--rt-space-4) * -1));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
100% {
|
|
49
|
+
opacity: 1;
|
|
50
|
+
transform: translateY(0);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@keyframes rt-action-bar-leave {
|
|
55
|
+
0% {
|
|
56
|
+
opacity: 1;
|
|
57
|
+
transform: translateY(0);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
70% {
|
|
61
|
+
opacity: 1;
|
|
62
|
+
transform: translateY(calc(var(--rt-space-4) * -1));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
100% {
|
|
66
|
+
opacity: 0;
|
|
67
|
+
transform: translateY(100%);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-action-bar — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
|
|
3
|
+
`.rt-action-bar` — сам хост (шаблон начинается с ng-container, класс ставит host). */
|
|
4
|
+
|
|
5
|
+
.rt-action-bar {
|
|
6
|
+
--rt-action-bar-radius: var(--rt-radius-lg);
|
|
7
|
+
--rt-action-bar-shadow: var(--rt-shadow-card);
|
|
8
|
+
--rt-action-bar-action-radius: var(--rt-radius-md);
|
|
9
|
+
--rt-action-bar-action-bg-hover: color-mix(in srgb, var(--rt-color-text-inverse) 16%, transparent);
|
|
10
|
+
--rt-action-bar-action-color-danger: var(--rt-color-action-danger-on-surface);
|
|
11
|
+
--rt-action-bar-action-focus-shadow: var(--rt-shadow-focus-ring);
|
|
12
|
+
--rt-action-bar-menu-radius: var(--rt-radius-md);
|
|
13
|
+
--rt-action-bar-menu-shadow: var(--rt-shadow-card);
|
|
14
|
+
|
|
15
|
+
// Предел ширины стоит и на самом элементе. Содержащий блок полосы — этот элемент, и
|
|
16
|
+
// без предела он растёт по содержимому: сто процентов считались бы тогда от выросшего,
|
|
17
|
+
// и полоса выехала бы за отведённое ей место.
|
|
18
|
+
display: flex;
|
|
19
|
+
width: max-content;
|
|
20
|
+
max-width: 100%;
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
align-items: center;
|
|
23
|
+
padding: var(--rt-space-2) var(--rt-space-4);
|
|
24
|
+
border-radius: var(--rt-action-bar-radius);
|
|
25
|
+
background: var(--rt-color-bg-inverse);
|
|
26
|
+
box-shadow: var(--rt-action-bar-shadow);
|
|
27
|
+
color: var(--rt-color-text-inverse);
|
|
28
|
+
font-size: var(--rt-text-sm);
|
|
29
|
+
gap: var(--rt-space-4);
|
|
30
|
+
|
|
31
|
+
&__counter {
|
|
32
|
+
font-weight: var(--rt-font-weight-medium);
|
|
33
|
+
white-space: nowrap;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Ряд действий, не влезший в предел ширины полосы, переносится. Одно действие, которое
|
|
37
|
+
// шире места и само по себе, переносить некуда — у него переносится подпись.
|
|
38
|
+
&__actions {
|
|
39
|
+
display: flex;
|
|
40
|
+
min-width: 0;
|
|
41
|
+
flex-wrap: wrap;
|
|
42
|
+
gap: var(--rt-space-2);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&__action {
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
padding: var(--rt-space-1) var(--rt-space-2);
|
|
49
|
+
border: 0;
|
|
50
|
+
border-radius: var(--rt-action-bar-action-radius);
|
|
51
|
+
background: transparent;
|
|
52
|
+
color: inherit;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
font-family: inherit;
|
|
55
|
+
font-size: inherit;
|
|
56
|
+
|
|
57
|
+
// Нажатие в этом ките набрано средним начертанием — так набрана кнопка кита, и
|
|
58
|
+
// действие полосы такое же нажатие. Первый кит ставил здесь шестьсот.
|
|
59
|
+
font-weight: var(--rt-font-weight-medium);
|
|
60
|
+
gap: var(--rt-space-2);
|
|
61
|
+
|
|
62
|
+
&:hover {
|
|
63
|
+
background: var(--rt-action-bar-action-bg-hover);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&:focus-visible {
|
|
67
|
+
box-shadow: var(--rt-action-bar-action-focus-shadow);
|
|
68
|
+
outline: none;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&--danger {
|
|
72
|
+
color: var(--rt-action-bar-action-color-danger);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&__action-icon {
|
|
77
|
+
flex: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Подпись, не влезшую в место, полоса переносит внутри кнопки, а не режет и не прячет:
|
|
81
|
+
// предел ширины назван вместе с судьбой того, что в него не вошло. Перенос идёт по
|
|
82
|
+
// границам слов, и слово рубится только тогда, когда не влезает и оно одно: `anywhere`
|
|
83
|
+
// рубил бы и там, где есть куда перенести, — кадр показал «Скачат/ь» на месте в
|
|
84
|
+
// восемнадцать рем.
|
|
85
|
+
&__action-label {
|
|
86
|
+
overflow-wrap: break-word;
|
|
87
|
+
text-align: start;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Кнопка кита красит значок цветом обычного текста, а полоса стоит на обратной
|
|
91
|
+
// поверхности: в светлой теме значок вышел тёмным по тёмному, в тёмной — светлым по
|
|
92
|
+
// белому, и крестика не было видно ни в одном кадре. Своё свойство блока перебивают —
|
|
93
|
+
// так делает просмотр фотографии, где кнопка стоит на снимке.
|
|
94
|
+
&__close {
|
|
95
|
+
--rt-icon-button-color: var(--rt-color-text-inverse);
|
|
96
|
+
--rt-icon-button-color-bg-hover: var(--rt-action-bar-action-bg-hover);
|
|
97
|
+
|
|
98
|
+
flex: none;
|
|
99
|
+
margin-left: auto;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
&__menu {
|
|
103
|
+
display: flex;
|
|
104
|
+
flex-direction: column;
|
|
105
|
+
padding: var(--rt-space-2);
|
|
106
|
+
border-radius: var(--rt-action-bar-menu-radius);
|
|
107
|
+
background: var(--rt-color-bg-surface);
|
|
108
|
+
box-shadow: var(--rt-action-bar-menu-shadow);
|
|
109
|
+
color: var(--rt-color-text-primary);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Полоса живёт на нижней кромке, и пальцу нужно место, которое занимают подписи. Решает
|
|
113
|
+
// это правило, а не условие в шаблоне: условие было бы оформлением, уехавшим в код.
|
|
114
|
+
// Подпись снимается только у действия, у которого есть значок, — действие, показанное
|
|
115
|
+
// ничем, нажать нарочно нельзя.
|
|
116
|
+
@media (pointer: coarse) {
|
|
117
|
+
.rt-action-bar__action--with-icon .rt-action-bar__action-label {
|
|
118
|
+
display: none;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -29,11 +29,15 @@ ref.afterClosed().subscribe((result?: ITour): void => …);
|
|
|
29
29
|
| ---------------------------------------- | ----------------------------------------- |
|
|
30
30
|
| `data` | `null` — доезжает токеном `RT_ASIDE_DATA` |
|
|
31
31
|
| `position` | `'right'` |
|
|
32
|
-
| `closeOnBackdropClick` / `closeOnEscape` | `true
|
|
32
|
+
| `closeOnBackdropClick` / `closeOnEscape` | `true`; второе — из настроек кита |
|
|
33
33
|
| `backdropClass` / `panelClass` | `rt-aside-backdrop` / `rt-aside-overlay` |
|
|
34
34
|
|
|
35
35
|
## Главное, что нужно знать
|
|
36
36
|
|
|
37
|
+
**Панель берёт материальный набор от кнопки в фокусе.** Панель лежит в конце страницы, вне
|
|
38
|
+
контейнера с признаком набора, и класс набора получает, если признак стоит над узлом в фокусе в
|
|
39
|
+
минуту открытия. Открытая не по нажатию — через `panelClass` приложения.
|
|
40
|
+
|
|
37
41
|
**Асайд объявлен `role="complementary"`, а не диалогом.** Он не модален: страница за ним
|
|
38
42
|
остаётся видна, и это осознанный выбор — карточку смотрят, не теряя список.
|
|
39
43
|
|
|
@@ -26,6 +26,15 @@
|
|
|
26
26
|
transition: opacity var(--rt-aside-animation-duration) ease;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
/* Под материальным набором подложка первого кита — затемнение без размытия. Цвет объявлен
|
|
30
|
+
заново на самой подложке: на корне он вычислен по назначениям корня, а класс набора стоит
|
|
31
|
+
на подложке, которую открыл список первого кита. */
|
|
32
|
+
:is(.rt-preset-material, [data-preset='material']).cdk-overlay-backdrop.rt-aside-backdrop,
|
|
33
|
+
[data-preset='material'] .cdk-overlay-backdrop.rt-aside-backdrop {
|
|
34
|
+
--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);
|
|
35
|
+
--rt-aside-backdrop-blur: 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
29
38
|
.rt-aside-overlay {
|
|
30
39
|
height: 100dvh;
|
|
31
40
|
transition: transform var(--rt-aside-animation-duration) ease;
|
|
@@ -3,13 +3,20 @@
|
|
|
3
3
|
Селекторы префиксованы `.rt-aside-header`. */
|
|
4
4
|
|
|
5
5
|
.rt-aside-header {
|
|
6
|
+
--rt-aside-header-title-size: var(--rt-text-xl);
|
|
7
|
+
--rt-aside-header-title-weight: var(--rt-font-weight-bold);
|
|
8
|
+
--rt-aside-header-subtitle-size: var(--rt-text-sm);
|
|
9
|
+
--rt-aside-header-gap: var(--rt-space-sm);
|
|
10
|
+
--rt-aside-header-min-height: auto;
|
|
11
|
+
|
|
6
12
|
padding: var(--rt-aside-inset);
|
|
7
13
|
|
|
8
14
|
&__content {
|
|
9
15
|
display: flex;
|
|
10
16
|
min-width: 0;
|
|
17
|
+
min-height: var(--rt-aside-header-min-height);
|
|
11
18
|
align-items: center;
|
|
12
|
-
gap: var(--rt-
|
|
19
|
+
gap: var(--rt-aside-header-gap);
|
|
13
20
|
}
|
|
14
21
|
|
|
15
22
|
&__back {
|
|
@@ -41,7 +48,8 @@
|
|
|
41
48
|
min-width: 0;
|
|
42
49
|
margin: 0;
|
|
43
50
|
color: var(--rt-color-text-primary);
|
|
44
|
-
font-size: var(--rt-
|
|
51
|
+
font-size: var(--rt-aside-header-title-size);
|
|
52
|
+
font-weight: var(--rt-aside-header-title-weight);
|
|
45
53
|
|
|
46
54
|
/* Ellipsis для длинного заголовка: skeleton-wrapper рендерит `{{ title }}`
|
|
47
55
|
как ng-content внутри inline-flex; чтобы `text-overflow: ellipsis`
|
|
@@ -55,6 +63,14 @@
|
|
|
55
63
|
}
|
|
56
64
|
}
|
|
57
65
|
|
|
66
|
+
/* Подпись под заголовком переносится, а не режется: это фраза, а не имя. */
|
|
67
|
+
&__subtitle {
|
|
68
|
+
margin: 0;
|
|
69
|
+
color: var(--rt-color-text-muted);
|
|
70
|
+
font-size: var(--rt-aside-header-subtitle-size);
|
|
71
|
+
line-height: var(--rt-leading-snug);
|
|
72
|
+
}
|
|
73
|
+
|
|
58
74
|
/* Ряд бэйджей под title — переносится на новую строку при нехватке ширины. */
|
|
59
75
|
&__badges {
|
|
60
76
|
display: flex;
|
|
@@ -44,7 +44,11 @@
|
|
|
44
44
|
flex-direction: column;
|
|
45
45
|
padding: 0;
|
|
46
46
|
border: none;
|
|
47
|
-
|
|
47
|
+
|
|
48
|
+
/* Фон панели — ручка приложения, как `--rt-aside-host-background-color` первого кита. Кит
|
|
49
|
+
её не объявляет: панель живёт в слое поверх страницы, и приложение задаёт фон с корня.
|
|
50
|
+
Без неё панель берёт фон поверхности, который материальный набор красит своим. */
|
|
51
|
+
background: var(--rt-aside-bg, var(--rt-color-bg-surface));
|
|
48
52
|
color: var(--rt-color-text-primary);
|
|
49
53
|
|
|
50
54
|
/* Header / footer всегда видны, контентная часть скроллится при overflow.
|
|
@@ -51,7 +51,8 @@
|
|
|
51
51
|
- `itemTemplate` рисует свою разметку подсказки (иконка, две строки); контекст — `$implicit`.
|
|
52
52
|
- Крестик очистки стирает и текст, и значение.
|
|
53
53
|
- Клавиатура: `ArrowDown`/`ArrowUp` водят по подсказкам, `Enter` выбирает, `Escape` закрывает.
|
|
54
|
-
При закрытой панели клавиши ничего не делают.
|
|
54
|
+
При закрытой панели клавиши ничего не делают. Подсвеченная подсказка прокручивается в видимую
|
|
55
|
+
часть панели.
|
|
55
56
|
|
|
56
57
|
## Рядом
|
|
57
58
|
|
|
@@ -10,17 +10,17 @@
|
|
|
10
10
|
<a rtButton label="На главную" [routerLink]="'/'"></a>
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
| вход | тип | умолчание
|
|
14
|
-
| ------------- | -------------------------------------------------------------------------- |
|
|
15
|
-
| `label` | `string \| null` | `null`
|
|
16
|
-
| `icon` | `string \| null` (имя из набора `rt-icon`) | `null`
|
|
17
|
-
| `iconPos` | `'left' \| 'right'` | `'left'`
|
|
18
|
-
| `theme` | `'primary' \| 'secondary' \| 'success' \| 'warning' \| 'danger' \| 'info'` | `'primary'`
|
|
19
|
-
| `appearance` | `'filled' \| 'outlined' \| 'text'` | `'filled'`
|
|
20
|
-
| `size` | `'sm' \| 'md' \| 'lg' \| 'xl' \| '2xl'` (30 / 40 / 50 / 60 / 70 px) | `'md'`
|
|
21
|
-
| `rounded` | `boolean` | `false`
|
|
22
|
-
| `loading` | `boolean` | `false`
|
|
23
|
-
| `loadingIcon` | `string \| null` | `null` → встроенное кольцо
|
|
13
|
+
| вход | тип | умолчание |
|
|
14
|
+
| ------------- | -------------------------------------------------------------------------- | ----------------------------- |
|
|
15
|
+
| `label` | `string \| null` | `null` |
|
|
16
|
+
| `icon` | `string \| null` (имя из набора `rt-icon`) | `null` |
|
|
17
|
+
| `iconPos` | `'left' \| 'right'` | `'left'` |
|
|
18
|
+
| `theme` | `'primary' \| 'secondary' \| 'success' \| 'warning' \| 'danger' \| 'info'` | `'primary'` |
|
|
19
|
+
| `appearance` | `'filled' \| 'outlined' \| 'text'` | настройки кита или `'filled'` |
|
|
20
|
+
| `size` | `'sm' \| 'md' \| 'lg' \| 'xl' \| '2xl'` (30 / 40 / 50 / 60 / 70 px) | настройки кита или `'md'` |
|
|
21
|
+
| `rounded` | `boolean` | настройки кита или `false` |
|
|
22
|
+
| `loading` | `boolean` | `false` |
|
|
23
|
+
| `loadingIcon` | `string \| null` | `null` → встроенное кольцо |
|
|
24
24
|
|
|
25
25
|
Своего выхода нет — клик слушается нативным `(click)` на самом элементе.
|
|
26
26
|
|