ydb-embedded-ui 3.1.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +2 -0
  3. package/dist/components/DateRange/DateRange.scss +11 -0
  4. package/dist/{containers/Tenant/Diagnostics/TopShards → components}/DateRange/DateRange.tsx +7 -7
  5. package/dist/{containers/Tenant/Diagnostics/TopShards → components}/DateRange/index.ts +0 -0
  6. package/dist/components/EntitiesCount/EntitiesCount.tsx +34 -0
  7. package/dist/components/EntitiesCount/i18n/en.json +3 -0
  8. package/dist/components/{AsideNavigation/Settings → EntitiesCount}/i18n/index.ts +2 -2
  9. package/dist/components/EntitiesCount/i18n/ru.json +3 -0
  10. package/dist/components/EntitiesCount/index.ts +1 -0
  11. package/dist/components/Fullscreen/Fullscreen.scss +7 -5
  12. package/dist/components/Illustration/Illustration.tsx +4 -11
  13. package/dist/components/InfoViewer/InfoViewer.scss +2 -0
  14. package/dist/components/TabletsOverall/TabletsOverall.tsx +4 -4
  15. package/dist/components/TabletsStatistic/TabletsStatistic.tsx +56 -0
  16. package/dist/components/TabletsStatistic/index.ts +1 -0
  17. package/dist/containers/App/App.scss +4 -12
  18. package/dist/containers/AsideNavigation/AsideNavigation.scss +0 -18
  19. package/dist/containers/AsideNavigation/AsideNavigation.tsx +95 -33
  20. package/dist/containers/Heatmap/Heatmap.scss +0 -7
  21. package/dist/containers/Heatmap/Heatmap.tsx +203 -0
  22. package/dist/containers/Heatmap/HeatmapCanvas/HeatmapCanvas.js +2 -1
  23. package/dist/containers/Heatmap/index.ts +1 -0
  24. package/dist/containers/Node/Node.tsx +1 -1
  25. package/dist/containers/Storage/DiskStateProgressBar/DiskStateProgressBar.tsx +1 -1
  26. package/dist/containers/Storage/Storage.js +12 -19
  27. package/dist/containers/Storage/StorageNodes/StorageNodes.tsx +16 -0
  28. package/dist/containers/Tablets/Tablets.scss +0 -5
  29. package/dist/containers/Tablets/Tablets.tsx +172 -0
  30. package/dist/containers/Tablets/i18n/en.json +6 -0
  31. package/dist/{components/AsideNavigation → containers/Tablets}/i18n/index.ts +1 -1
  32. package/dist/containers/Tablets/i18n/ru.json +6 -0
  33. package/dist/containers/Tablets/index.ts +1 -0
  34. package/dist/containers/TabletsFilters/TabletsFilters.js +4 -8
  35. package/dist/containers/TabletsFilters/TabletsFilters.scss +6 -2
  36. package/dist/containers/Tenant/Diagnostics/Diagnostics.tsx +8 -13
  37. package/dist/containers/Tenant/Diagnostics/DiagnosticsPages.ts +7 -7
  38. package/dist/containers/Tenant/Diagnostics/{TopShards/TopShards.scss → OverloadedShards/OverloadedShards.scss} +1 -1
  39. package/dist/containers/Tenant/Diagnostics/{TopShards/TopShards.tsx → OverloadedShards/OverloadedShards.tsx} +10 -11
  40. package/dist/containers/Tenant/Diagnostics/{TopShards → OverloadedShards}/i18n/en.json +0 -0
  41. package/dist/containers/Tenant/Diagnostics/OverloadedShards/i18n/index.ts +11 -0
  42. package/dist/containers/Tenant/Diagnostics/{TopShards → OverloadedShards}/i18n/ru.json +0 -0
  43. package/dist/containers/Tenant/Diagnostics/OverloadedShards/index.ts +1 -0
  44. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +7 -7
  45. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.scss +16 -19
  46. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.tsx +202 -0
  47. package/dist/containers/Tenant/Diagnostics/TopQueries/i18n/en.json +4 -0
  48. package/dist/containers/Tenant/Diagnostics/{TopShards → TopQueries}/i18n/index.ts +1 -1
  49. package/dist/containers/Tenant/Diagnostics/TopQueries/i18n/ru.json +4 -0
  50. package/dist/containers/Tenant/Diagnostics/TopQueries/index.ts +1 -0
  51. package/dist/containers/Tenants/Tenants.js +1 -1
  52. package/dist/containers/UserSettings/UserSettings.tsx +5 -4
  53. package/dist/routes.ts +1 -1
  54. package/dist/services/api.d.ts +7 -0
  55. package/dist/store/reducers/describe.ts +4 -1
  56. package/dist/store/reducers/executeTopQueries.ts +170 -0
  57. package/dist/store/reducers/{heatmap.js → heatmap.ts} +33 -18
  58. package/dist/store/reducers/settings.js +13 -3
  59. package/dist/store/reducers/shardsWorkload.ts +9 -9
  60. package/dist/store/reducers/storage.js +2 -0
  61. package/dist/store/reducers/{tablets.js → tablets.ts} +30 -17
  62. package/dist/store/state-url-mapping.js +10 -2
  63. package/dist/types/api/compute.ts +52 -0
  64. package/dist/types/api/consumer.ts +257 -0
  65. package/dist/types/api/enums.ts +2 -2
  66. package/dist/types/api/nodes.ts +5 -2
  67. package/dist/types/api/pdisk.ts +3 -0
  68. package/dist/types/api/schema.ts +17 -3
  69. package/dist/types/api/storage.ts +31 -28
  70. package/dist/types/api/tablet.ts +18 -2
  71. package/dist/types/api/tenant.ts +4 -1
  72. package/dist/types/api/topic.ts +157 -0
  73. package/dist/types/api/vdisk.ts +3 -0
  74. package/dist/types/store/executeTopQueries.ts +29 -0
  75. package/dist/types/store/heatmap.ts +51 -0
  76. package/dist/types/store/schema.ts +3 -3
  77. package/dist/types/store/shardsWorkload.ts +3 -3
  78. package/dist/types/store/tablets.ts +42 -0
  79. package/dist/utils/constants.ts +1 -37
  80. package/dist/utils/getNodesColumns.js +14 -2
  81. package/dist/utils/tablet.ts +53 -0
  82. package/package.json +4 -3
  83. package/dist/components/AsideNavigation/AsideHeader.scss +0 -147
  84. package/dist/components/AsideNavigation/AsideHeader.tsx +0 -389
  85. package/dist/components/AsideNavigation/AsideHeaderFooterItem/AsideHeaderFooterItem.scss +0 -82
  86. package/dist/components/AsideNavigation/AsideHeaderFooterItem/AsideHeaderFooterItem.tsx +0 -138
  87. package/dist/components/AsideNavigation/AsideHeaderFooterSlot/AsideHeaderFooterSlot.tsx +0 -33
  88. package/dist/components/AsideNavigation/AsideHeaderFooterSlot/SlotsContext.tsx +0 -49
  89. package/dist/components/AsideNavigation/AsideHeaderTooltip/AsideHeaderTooltip.scss +0 -16
  90. package/dist/components/AsideNavigation/AsideHeaderTooltip/AsideHeaderTooltip.tsx +0 -37
  91. package/dist/components/AsideNavigation/CompositeBar/CompositeBar.scss +0 -108
  92. package/dist/components/AsideNavigation/CompositeBar/CompositeBar.tsx +0 -282
  93. package/dist/components/AsideNavigation/Content/Content.tsx +0 -35
  94. package/dist/components/AsideNavigation/Drawer/Drawer.scss +0 -76
  95. package/dist/components/AsideNavigation/Drawer/Drawer.tsx +0 -134
  96. package/dist/components/AsideNavigation/Drawer/index.ts +0 -1
  97. package/dist/components/AsideNavigation/Logo/Logo.scss +0 -43
  98. package/dist/components/AsideNavigation/Logo/Logo.tsx +0 -82
  99. package/dist/components/AsideNavigation/Settings/README.md +0 -92
  100. package/dist/components/AsideNavigation/Settings/Settings.scss +0 -128
  101. package/dist/components/AsideNavigation/Settings/Settings.tsx +0 -270
  102. package/dist/components/AsideNavigation/Settings/SettingsMenu/SettingsMenu.scss +0 -78
  103. package/dist/components/AsideNavigation/Settings/SettingsMenu/SettingsMenu.tsx +0 -141
  104. package/dist/components/AsideNavigation/Settings/SettingsSearch/SettingsSearch.tsx +0 -57
  105. package/dist/components/AsideNavigation/Settings/collect-settings.ts +0 -156
  106. package/dist/components/AsideNavigation/Settings/filter-settings.ts +0 -38
  107. package/dist/components/AsideNavigation/Settings/helpers.ts +0 -39
  108. package/dist/components/AsideNavigation/Settings/i18n/en.json +0 -5
  109. package/dist/components/AsideNavigation/Settings/i18n/ru.json +0 -5
  110. package/dist/components/AsideNavigation/Settings/index.ts +0 -1
  111. package/dist/components/AsideNavigation/constants.ts +0 -28
  112. package/dist/components/AsideNavigation/helpers.ts +0 -34
  113. package/dist/components/AsideNavigation/i18n/en.json +0 -4
  114. package/dist/components/AsideNavigation/i18n/ru.json +0 -4
  115. package/dist/components/AsideNavigation/icons.ts +0 -32
  116. package/dist/components/AsideNavigation/types.ts +0 -23
  117. package/dist/components/TabletsStatistic/TabletsStatistic.js +0 -58
  118. package/dist/containers/Heatmap/Heatmap.js +0 -244
  119. package/dist/containers/Tablets/Tablets.js +0 -228
  120. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.js +0 -188
  121. package/dist/containers/Tenant/Diagnostics/TopShards/DateRange/DateRange.scss +0 -13
  122. package/dist/containers/Tenant/Diagnostics/TopShards/index.ts +0 -1
  123. package/dist/store/reducers/executeTopQueries.js +0 -66
  124. package/dist/types/api/consumers.ts +0 -3
@@ -0,0 +1,51 @@
1
+ import type {ApiRequestAction} from '../../store/utils';
2
+ import {FETCH_HEATMAP, setHeatmapOptions} from '../../store/reducers/heatmap';
3
+
4
+ import type {IResponseError} from '../api/error';
5
+ import type {TTabletStateInfo} from '../api/tablet';
6
+ import type {TTableStats} from '../api/schema';
7
+ import type {TMetrics} from '../api/tenant';
8
+
9
+ export interface IHeatmapTabletData extends TTabletStateInfo {
10
+ metrics?: TTableStats & TMetrics;
11
+ }
12
+
13
+ export type IHeatmapMetricValue = keyof TTableStats | keyof TMetrics;
14
+
15
+ interface IHeatmapMetric {
16
+ value: IHeatmapMetricValue;
17
+ content: IHeatmapMetricValue;
18
+ }
19
+
20
+ export interface IHeatmapState {
21
+ loading: boolean;
22
+ wasLoaded: boolean;
23
+ currentMetric?: IHeatmapMetricValue;
24
+ sort: boolean;
25
+ heatmap: boolean;
26
+ data?: IHeatmapTabletData[];
27
+ metrics?: IHeatmapMetric[];
28
+ error?: IResponseError;
29
+ }
30
+
31
+ export interface IHeatmapApiRequestParams {
32
+ nodes?: string[];
33
+ path: string;
34
+ }
35
+
36
+ interface IHeatmapHandledResponse {
37
+ data: IHeatmapTabletData[];
38
+ metrics?: IHeatmapMetric[];
39
+ }
40
+
41
+ type IHeatmapApiRequestAction = ApiRequestAction<
42
+ typeof FETCH_HEATMAP,
43
+ IHeatmapHandledResponse,
44
+ IResponseError
45
+ >;
46
+
47
+ export type IHeatmapAction = IHeatmapApiRequestAction | ReturnType<typeof setHeatmapOptions>;
48
+
49
+ export interface IHeatmapRootStateSlice {
50
+ heatmap: IHeatmapState;
51
+ }
@@ -25,9 +25,9 @@ export interface ISchemaState {
25
25
  }
26
26
 
27
27
  export interface ISchemaHandledResponse {
28
- path: string | undefined;
29
- currentSchema: TEvDescribeSchemeResult | undefined;
30
- data: ISchemaData | undefined;
28
+ path?: string;
29
+ currentSchema?: TEvDescribeSchemeResult;
30
+ data?: ISchemaData;
31
31
  }
32
32
 
33
33
  type ISchemaApiRequestAction = ApiRequestAction<
@@ -1,4 +1,4 @@
1
- import {SEND_SHARD_QUERY, setShardQueryOptions, setTopShardFilters} from '../../store/reducers/shardsWorkload';
1
+ import {SEND_SHARD_QUERY, setShardsState, setShardsQueryFilters} from '../../store/reducers/shardsWorkload';
2
2
  import type {ApiRequestAction} from '../../store/utils';
3
3
  import type {IResponseError} from '../api/error';
4
4
  import type {IQueryResult} from './query';
@@ -20,8 +20,8 @@ export interface IShardsWorkloadState {
20
20
 
21
21
  export type IShardsWorkloadAction =
22
22
  | ApiRequestAction<typeof SEND_SHARD_QUERY, IQueryResult, IResponseError>
23
- | ReturnType<typeof setShardQueryOptions>
24
- | ReturnType<typeof setTopShardFilters>;
23
+ | ReturnType<typeof setShardsState>
24
+ | ReturnType<typeof setShardsQueryFilters>;
25
25
 
26
26
  export interface IShardsWorkloadRootStateSlice {
27
27
  shardsWorkload: IShardsWorkloadState;
@@ -0,0 +1,42 @@
1
+ import type {ApiRequestAction} from '../../store/utils';
2
+ import {
3
+ clearWasLoadingFlag,
4
+ FETCH_TABLETS,
5
+ setStateFilter,
6
+ setTypeFilter,
7
+ } from '../../store/reducers/tablets';
8
+
9
+ import type {IResponseError} from '../api/error';
10
+ import type {TEvTabletStateResponse, EType, ETabletState} from '../api/tablet';
11
+
12
+ export interface ITabletsState {
13
+ loading: boolean;
14
+ wasLoaded: boolean;
15
+ stateFilter: ETabletState[];
16
+ typeFilter: EType[];
17
+ data?: TEvTabletStateResponse;
18
+ error?: IResponseError;
19
+ }
20
+
21
+ export interface ITabletsApiRequestParams {
22
+ nodes?: string[];
23
+ path?: string;
24
+ }
25
+
26
+ type ITabletsApiRequestAction = ApiRequestAction<
27
+ typeof FETCH_TABLETS,
28
+ TEvTabletStateResponse,
29
+ IResponseError
30
+ >;
31
+
32
+ export type ITabletsAction =
33
+ | ITabletsApiRequestAction
34
+ | (
35
+ | ReturnType<typeof clearWasLoadingFlag>
36
+ | ReturnType<typeof setStateFilter>
37
+ | ReturnType<typeof setTypeFilter>
38
+ );
39
+
40
+ export interface ITabletsRootStateSlice {
41
+ tablets: ITabletsState;
42
+ }
@@ -39,39 +39,6 @@ export const TABLET_COLORS = {
39
39
  Active: 'lightgreen',
40
40
  };
41
41
 
42
- export const TABLET_COLOR_TO_STATES = {
43
- Red: [
44
- 'Created',
45
- 'ResolveStateStorage',
46
- 'Candidate',
47
- 'BlockBlobStorage',
48
- 'WriteZeroEntry',
49
- 'Restored',
50
- 'Discover',
51
- 'Lock',
52
- 'Dead',
53
- ],
54
- Orange: ['RebuildGraph'],
55
- Yellow: ['ResolveMaster', 'ResolveLeader'],
56
- Green: ['Deleted', 'Active'],
57
- };
58
-
59
- export const TABLETS_STATES = [
60
- 'Active',
61
- 'Deleted',
62
- 'Created',
63
- 'ResolveStateStorage',
64
- 'Candidate',
65
- 'BlockBlobStorage',
66
- 'WriteZeroEntry',
67
- 'Restored',
68
- 'Discover',
69
- 'Lock',
70
- 'Dead',
71
- 'RebuildGraph',
72
- 'ResolveLeader',
73
- ];
74
-
75
42
  export const TxAllocator = 'TxAllocator';
76
43
 
77
44
  export const TABLET_SYMBOLS = {
@@ -123,13 +90,10 @@ export type IProblemFilterValues = typeof ALL | typeof PROBLEMS;
123
90
  export const THEME_KEY = 'theme';
124
91
  export const INVERTED_DISKS_KEY = 'invertedDisks';
125
92
  export const SAVED_QUERIES_KEY = 'saved_queries';
93
+ export const ASIDE_HEADER_COMPACT_KEY = 'asideHeaderCompact';
126
94
  export const QUERIES_HISTORY_KEY = 'queries_history';
127
95
  export const DATA_QA_TUNE_COLUMNS_POPUP = 'tune-columns-popup';
128
96
 
129
- export const defaultUserSettings = {
130
- [THEME_KEY]: 'light',
131
- [INVERTED_DISKS_KEY]: false,
132
- };
133
97
  export const DEFAULT_SIZE_RESULT_PANE_KEY = 'default-size-result-pane';
134
98
  export const DEFAULT_SIZE_TENANT_SUMMARY_KEY = 'default-size-tenant-summary-pane';
135
99
  export const DEFAULT_SIZE_TENANT_KEY = 'default-size-tenant-pane';
@@ -6,7 +6,7 @@ import Icon from '../components/Icon/Icon';
6
6
  import EntityStatus from '../components/EntityStatus/EntityStatus';
7
7
  import PoolsGraph from '../components/PoolsGraph/PoolsGraph';
8
8
  import ProgressViewer from '../components/ProgressViewer/ProgressViewer';
9
- import TabletsStatistic from '../components/TabletsStatistic/TabletsStatistic';
9
+ import {TabletsStatistic} from '../components/TabletsStatistic';
10
10
 
11
11
  import {getDefaultNodePath} from '../containers/Node/NodePages';
12
12
  import {formatBytes} from './index';
@@ -41,7 +41,12 @@ export function getNodesColumns({showTooltip, hideTooltip, tabletsPath, getNodeR
41
41
  className={b('host-name')}
42
42
  />
43
43
  {nodeRef && (
44
- <Button size="s" href={nodeRef} className={b('external-button')}>
44
+ <Button
45
+ size="s"
46
+ href={nodeRef}
47
+ className={b('external-button')}
48
+ target="_blank"
49
+ >
45
50
  <Icon name="external" />
46
51
  </Button>
47
52
  )}
@@ -58,6 +63,13 @@ export function getNodesColumns({showTooltip, hideTooltip, tabletsPath, getNodeR
58
63
  render: ({value}) => (value ? value : '—'),
59
64
  width: '60px',
60
65
  },
66
+ {
67
+ name: 'Rack',
68
+ header: 'Rack',
69
+ align: DataTable.LEFT,
70
+ render: ({value}) => (value ? value : '—'),
71
+ width: '80px',
72
+ },
61
73
  {
62
74
  name: 'Version',
63
75
  width: '200px',
@@ -0,0 +1,53 @@
1
+ import {EFlag} from '../types/api/enums';
2
+ import {ETabletState} from '../types/api/tablet';
3
+
4
+ const tabletStateToColorState: Record<ETabletState, EFlag> = {
5
+ [ETabletState.Active]: EFlag.Green,
6
+ [ETabletState.Deleted]: EFlag.Green,
7
+
8
+ [ETabletState.RebuildGraph]: EFlag.Orange,
9
+ [ETabletState.ResolveLeader]: EFlag.Yellow,
10
+
11
+ [ETabletState.Created]: EFlag.Red,
12
+ [ETabletState.ResolveStateStorage]: EFlag.Red,
13
+ [ETabletState.Candidate]: EFlag.Red,
14
+ [ETabletState.BlockBlobStorage]: EFlag.Red,
15
+ [ETabletState.WriteZeroEntry]: EFlag.Red,
16
+ [ETabletState.Restored]: EFlag.Red,
17
+ [ETabletState.Discover]: EFlag.Red,
18
+ [ETabletState.Lock]: EFlag.Red,
19
+ [ETabletState.Dead]: EFlag.Red,
20
+ [ETabletState.Stopped]: EFlag.Red,
21
+ };
22
+
23
+ export const tabletStates = Object.keys(ETabletState);
24
+
25
+ export const tabletColorToTabletState = Object.entries(tabletStateToColorState).reduce(
26
+ (acc, [state, color]) => {
27
+ if (acc[color]) {
28
+ acc[color].push(state as ETabletState);
29
+ } else {
30
+ acc[color] = [state as ETabletState];
31
+ }
32
+
33
+ return acc;
34
+ },
35
+ {} as Record<EFlag, ETabletState[]>,
36
+ );
37
+
38
+ // Tablet State in different versions or in different endpoint
39
+ // could be represented as ETabletState of EFlag
40
+ export const mapTabletStateToColorState = (state?: ETabletState | EFlag): EFlag => {
41
+ if (!state) {
42
+ return EFlag.Grey;
43
+ }
44
+
45
+ const isEFlag = (value: ETabletState | EFlag): value is EFlag =>
46
+ Object.values(EFlag).includes(value as EFlag);
47
+
48
+ if (isEFlag(state)) {
49
+ return state;
50
+ }
51
+
52
+ return tabletStateToColorState[state];
53
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ydb-embedded-ui",
3
- "version": "3.1.0",
3
+ "version": "3.2.1",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -11,8 +11,9 @@
11
11
  "dependencies": {
12
12
  "@gravity-ui/axios-wrapper": "^1.3.0",
13
13
  "@gravity-ui/i18n": "^1.0.0",
14
+ "@gravity-ui/navigation": "^0.3.1",
14
15
  "@yandex-cloud/paranoid": "^1.3.0",
15
- "@yandex-cloud/react-data-table": "0.2.1",
16
+ "@yandex-cloud/react-data-table": "^1.0.2",
16
17
  "axios": "0.19.2",
17
18
  "bem-cn-lite": "4.0.0",
18
19
  "history": "4.10.1",
@@ -37,7 +38,7 @@
37
38
  "reselect": "4.1.6",
38
39
  "sass": "1.32.8",
39
40
  "web-vitals": "1.1.2",
40
- "ydb-ui-components": "3.0.1"
41
+ "ydb-ui-components": "^3.0.2"
41
42
  },
42
43
  "scripts": {
43
44
  "start": "react-app-rewired start",
@@ -1,147 +0,0 @@
1
- .nv-aside-header {
2
- $class: &;
3
- --nv-aside-header-min-width: 56px;
4
- position: relative;
5
-
6
- width: 100%;
7
- height: 100%;
8
-
9
- background-color: var(--yc-color-base-background);
10
-
11
- &__aside {
12
- position: sticky;
13
- z-index: 100;
14
- top: 0;
15
- left: 0;
16
-
17
- display: flex;
18
- flex-direction: column;
19
-
20
- width: inherit;
21
- height: 100vh;
22
-
23
- border-right: 1px solid var(--yc-color-line-generic);
24
- background-color: var(--yc-color-base-background);
25
-
26
- &-popup-anchor {
27
- position: absolute;
28
- z-index: 1;
29
- top: 0;
30
- right: 0;
31
- bottom: 0;
32
- left: 0;
33
- }
34
-
35
- &-content {
36
- position: relative;
37
- z-index: 2;
38
-
39
- display: flex;
40
- overflow-x: hidden;
41
- flex-direction: column;
42
-
43
- width: inherit;
44
- height: inherit;
45
-
46
- user-select: none;
47
- }
48
- }
49
-
50
- &__footer {
51
- display: flex;
52
- flex-direction: column;
53
- flex-shrink: 0;
54
-
55
- width: 100%;
56
- margin: 8px 0;
57
-
58
- &::before {
59
- position: relative;
60
- top: -8px;
61
-
62
- content: '';
63
-
64
- border-top: 1px solid var(--yc-color-line-generic);
65
- }
66
- }
67
-
68
- &__drawer {
69
- position: fixed;
70
- z-index: 98;
71
- top: 0;
72
- right: 0;
73
- bottom: 0;
74
- left: 0;
75
-
76
- overflow: auto;
77
- }
78
-
79
- &__panel {
80
- height: 100%;
81
- }
82
-
83
- &__content-container {
84
- height: 100%;
85
- }
86
-
87
- &__pane-container {
88
- display: flex;
89
- overflow: visible;
90
- flex: 1 1 0;
91
- flex-direction: row;
92
-
93
- user-select: text;
94
-
95
- outline: none;
96
- }
97
-
98
- &__content {
99
- z-index: 90;
100
-
101
- width: calc(100% - var(--nv-aside-header-size));
102
- }
103
-
104
- &__all-services-button {
105
- &_top {
106
- box-sizing: border-box;
107
-
108
- border-bottom: 1px solid var(--yc-color-line-generic);
109
- }
110
- }
111
-
112
- &__collapse-button {
113
- position: absolute;
114
- z-index: 3;
115
- right: 14px;
116
- bottom: 14px;
117
-
118
- width: 28px;
119
- height: 28px;
120
-
121
- transition: none;
122
- &_compact {
123
- right: -29px;
124
-
125
- border: 1px solid var(--yc-color-line-generic);
126
- border-left: none;
127
- border-radius: 0 4px 4px 0;
128
- background-color: inherit;
129
-
130
- &.yc-button::before {
131
- border-radius: 0 3px 3px 0;
132
- }
133
- }
134
-
135
- &:not(#{&}_compact) {
136
- transform: rotate(180deg);
137
- }
138
-
139
- &:hover {
140
- color: var(--yc-color-text-misc);
141
- }
142
- }
143
-
144
- &__collapse-icon {
145
- color: var(--yc-color-text-misc);
146
- }
147
- }