cnhis-design-vue 3.1.9-beta.11 → 3.1.9-beta.12

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.
Files changed (49) hide show
  1. package/es/packages/big-table/src/BigTable.vue_vue_type_script_setup_true_lang.js +34 -13
  2. package/es/packages/chunk-upload/index.d.ts +22 -1
  3. package/es/packages/chunk-upload/src/chunk-upload-new.vue.d.ts +32 -0
  4. package/es/packages/chunk-upload/src/chunk-upload-new.vue_vue_type_script_setup_true_lang.js +3 -2
  5. package/es/packages/chunk-upload/src/hooks/upload-data.d.ts +29 -27
  6. package/es/packages/chunk-upload/src/hooks/upload-data.js +32 -29
  7. package/es/packages/chunk-upload/src/hooks/vod-data.d.ts +21 -42
  8. package/es/packages/chunk-upload/src/hooks/vod-data.js +26 -31
  9. package/es/packages/chunk-upload/src/vod-chunk-upload/vod-chunk-upload.vue.d.ts +31 -2
  10. package/es/packages/chunk-upload/src/vod-chunk-upload/vod-chunk-upload.vue_vue_type_script_setup_true_lang.js +16 -6
  11. package/es/packages/chunk-upload/style/index.css +2 -0
  12. package/es/packages/fabric-chart/src/Center.js +4 -0
  13. package/es/packages/fabric-chart/src/Center.vue.d.ts +2 -0
  14. package/es/packages/fabric-chart/src/Center.vue_vue_type_script_setup_true_lang.js +15 -0
  15. package/es/packages/fabric-chart/src/FabricChart.vue_vue_type_script_setup_true_lang.js +14 -5
  16. package/es/packages/fabric-chart/src/Top.js +4 -0
  17. package/es/packages/fabric-chart/src/Top.vue_vue_type_script_setup_true_lang.js +128 -0
  18. package/es/packages/fabric-chart/src/hooks/useDraw.d.ts +35 -0
  19. package/es/packages/fabric-chart/src/hooks/useDraw.js +75 -0
  20. package/es/packages/fabric-chart/src/hooks/useGrid.d.ts +1 -0
  21. package/es/packages/fabric-chart/src/hooks/useGrid.js +47 -0
  22. package/es/packages/fabric-chart/src/interface.d.ts +80 -0
  23. package/es/packages/fabric-chart/src/interface.js +4 -0
  24. package/es/packages/index.css +24 -4
  25. package/es/packages/scale-view/index.d.ts +137 -0
  26. package/es/packages/scale-view/src/ScaleView.vue.d.ts +119 -0
  27. package/es/packages/scale-view/src/ScaleView.vue_vue_type_script_setup_true_lang.js +24 -22
  28. package/es/packages/scale-view/src/components/formitem/r-checkbox.d.ts +9 -0
  29. package/es/packages/scale-view/src/components/formitem/r-checkbox.js +46 -7
  30. package/es/packages/scale-view/src/components/formitem/r-datetime.js +3 -1
  31. package/es/packages/scale-view/src/components/formitem/r-radio.d.ts +9 -0
  32. package/es/packages/scale-view/src/components/formitem/r-radio.js +12 -6
  33. package/es/packages/scale-view/src/hooks/scaleview-computed.js +5 -13
  34. package/es/packages/scale-view/src/hooks/scaleview-props.d.ts +28 -0
  35. package/es/packages/scale-view/src/hooks/scaleview-props.js +21 -0
  36. package/es/packages/scale-view/src/hooks/scaleview-state.d.ts +32 -31
  37. package/es/packages/scale-view/src/hooks/scaleview-state.js +41 -38
  38. package/es/packages/scale-view/src/hooks/use-component.d.ts +103 -2
  39. package/es/packages/scale-view/style/index.css +3 -0
  40. package/es/packages/select-label/index.d.ts +46 -2
  41. package/es/packages/select-label/src/LabelFormContent.vue.d.ts +1 -1
  42. package/es/packages/select-label/src/SelectLabel.vue.d.ts +58 -8
  43. package/es/packages/select-label/src/SelectLabel.vue_vue_type_script_setup_true_lang.js +20 -2
  44. package/es/packages/select-label/src/components/label-classify.vue_vue_type_script_setup_true_lang.js +4 -1
  45. package/es/packages/select-label/style/index.css +10 -0
  46. package/es/src/components/player-vod/video-modal.js +1 -1
  47. package/package.json +3 -2
  48. package/es/packages/fabric-chart/index.d.ts +0 -108
  49. package/es/packages/fabric-chart/src/FabricChart.vue.d.ts +0 -109
@@ -1,11 +1,16 @@
1
- import { defineComponent, ref, computed, reactive, provide, onMounted, openBlock, createElementBlock, createElementVNode } from 'vue';
1
+ import { defineComponent, ref, computed, reactive, provide, onMounted, openBlock, createElementBlock, createElementVNode, createVNode } from 'vue';
2
2
  import { fabric } from 'fabric';
3
+ import './Center.js';
4
+ import './Top.js';
5
+ import { InjectionCanvas, InjectionPropItems } from './interface.js';
6
+ import script$1 from './Top.vue_vue_type_script_setup_true_lang.js';
7
+ import script$2 from './Center.vue_vue_type_script_setup_true_lang.js';
3
8
 
4
9
  const _hoisted_1 = { class: "c-fabric-chart" };
5
10
  var script = /* @__PURE__ */ defineComponent({
6
11
  __name: "FabricChart",
7
12
  props: {
8
- data: { type: Object, required: true }
13
+ data: { type: null, required: true }
9
14
  },
10
15
  setup(__props) {
11
16
  const props = __props;
@@ -91,6 +96,8 @@ var script = /* @__PURE__ */ defineComponent({
91
96
  const propItems = reactive({
92
97
  canvasWidth: props.data.width,
93
98
  canvasHeight: props.data.height,
99
+ grid: props.data.grid,
100
+ top: props.data.top,
94
101
  gridXNumber: gridXNumber.value,
95
102
  gridYNumber: gridYNumber.value,
96
103
  originX: originX.value,
@@ -106,8 +113,8 @@ var script = /* @__PURE__ */ defineComponent({
106
113
  centigradeYCell: centigradeYCell.value,
107
114
  event: event.value
108
115
  });
109
- provide("canvas", canvas);
110
- provide("propItems", propItems);
116
+ provide(InjectionCanvas, canvas);
117
+ provide(InjectionPropItems, propItems);
111
118
  onMounted(() => {
112
119
  canvas.value = new fabric.Canvas(canvasRef.value, {
113
120
  width: propItems.canvasWidth,
@@ -123,7 +130,9 @@ var script = /* @__PURE__ */ defineComponent({
123
130
  createElementVNode("canvas", {
124
131
  ref_key: "canvasRef",
125
132
  ref: canvasRef
126
- }, null, 512)
133
+ }, null, 512),
134
+ createVNode(script$1),
135
+ createVNode(script$2)
127
136
  ]);
128
137
  };
129
138
  }
@@ -0,0 +1,4 @@
1
+ import script from './Top.vue_vue_type_script_setup_true_lang.js';
2
+ export { default } from './Top.vue_vue_type_script_setup_true_lang.js';
3
+
4
+ script.__file = "packages/fabric-chart/src/Top.vue";
@@ -0,0 +1,128 @@
1
+ import { defineComponent, inject, onMounted, nextTick } from 'vue';
2
+ import { fabric } from 'fabric';
3
+ import { defaultStyle, drawTextGroup, defaultTextStyle, defaultRectStyle } from './hooks/useDraw.js';
4
+ import { InjectionCanvas, InjectionPropItems } from './interface.js';
5
+
6
+ var script = /* @__PURE__ */ defineComponent({
7
+ __name: "Top",
8
+ setup(__props) {
9
+ const canvas = inject(InjectionCanvas);
10
+ const propItems = inject(InjectionPropItems);
11
+ const { originY, grid, originX, xCellWidth, gridXNumber, top } = propItems;
12
+ function drawTop() {
13
+ let list = [];
14
+ drawTopDate(top, list);
15
+ drawTopDay(top, list);
16
+ drawTopTime(top, list);
17
+ const group = list.length > 0 ? new fabric.Group([...list], { ...defaultStyle }) : null;
18
+ group && group.sendToBack();
19
+ group && canvas.value.add(group);
20
+ }
21
+ function drawTopTime(top2, list) {
22
+ var _a, _b;
23
+ const dateHeight = ((_a = top2.date) == null ? void 0 : _a.height) || 0;
24
+ const dayHeight = top2.dayHeight || 0;
25
+ const height = originY - dateHeight - dayHeight;
26
+ const titleHeight = dayHeight + height;
27
+ const title = drawTextGroup({
28
+ width: originX,
29
+ height: titleHeight,
30
+ ...defaultRectStyle
31
+ }, {
32
+ ...defaultTextStyle,
33
+ ...((_b = top2.date) == null ? void 0 : _b.style) || {}
34
+ }, {
35
+ left: 0,
36
+ top: dateHeight
37
+ }, top2.xScalevalue.title);
38
+ list.push(title);
39
+ let timeList = [];
40
+ for (let j = 0; j < grid.mainXCell; j++) {
41
+ timeList.push(top2.xScalevalue.list);
42
+ }
43
+ timeList.flat().forEach((v, i) => {
44
+ var _a2;
45
+ const left = originX + i * xCellWidth;
46
+ const textGroup = drawTextGroup({
47
+ width: xCellWidth,
48
+ height
49
+ }, {
50
+ ...defaultTextStyle,
51
+ ...((_a2 = top2.date) == null ? void 0 : _a2.style) || {}
52
+ }, {
53
+ left,
54
+ top: dateHeight + dayHeight
55
+ }, v);
56
+ list.push(textGroup);
57
+ });
58
+ }
59
+ function drawTopDay(top2, list) {
60
+ var _a;
61
+ if (!top2.dayHeight)
62
+ return false;
63
+ const height = top2.dayHeight;
64
+ const width = xCellWidth * grid.subSecondXCell;
65
+ const dayList = gridXNumber / grid.subSecondXCell;
66
+ for (let i = 0; i < dayList; i++) {
67
+ const left = originX + i * width;
68
+ const value = i % 2 === 0 ? "\u4E0A\u5348" : "\u4E0B\u5348";
69
+ const textGroup = drawTextGroup({
70
+ width,
71
+ height
72
+ }, {
73
+ ...defaultTextStyle,
74
+ ...((_a = top2.date) == null ? void 0 : _a.style) || {}
75
+ }, {
76
+ left,
77
+ top: top2.date.height || 0
78
+ }, value);
79
+ list.push(textGroup);
80
+ }
81
+ }
82
+ function drawTopDate(top2, list) {
83
+ var _a;
84
+ if (!top2.date.height)
85
+ return false;
86
+ const height = top2.date.height;
87
+ const title = drawTextGroup({
88
+ width: originX,
89
+ height,
90
+ ...defaultRectStyle
91
+ }, {
92
+ ...defaultTextStyle,
93
+ ...((_a = top2.date) == null ? void 0 : _a.style) || {}
94
+ }, {
95
+ left: 0,
96
+ top: 0
97
+ }, top2.date.title);
98
+ list.push(title);
99
+ const width = xCellWidth * grid.subXCell;
100
+ top2.date.list.forEach((v, i) => {
101
+ var _a2;
102
+ const left = originX + i * width;
103
+ const textGroup = drawTextGroup({
104
+ width,
105
+ height
106
+ }, {
107
+ ...defaultTextStyle,
108
+ ...((_a2 = top2.date) == null ? void 0 : _a2.style) || {}
109
+ }, {
110
+ left,
111
+ top: 0
112
+ }, v);
113
+ list.push(textGroup);
114
+ });
115
+ }
116
+ onMounted(() => {
117
+ nextTick(() => {
118
+ drawTop();
119
+ canvas.value.renderAll();
120
+ });
121
+ });
122
+ return (_ctx, _cache) => {
123
+ return null;
124
+ };
125
+ }
126
+ });
127
+
128
+ export { script as default };
@@ -0,0 +1,35 @@
1
+ import { fabric } from 'fabric';
2
+ export declare const defaultStyle: {
3
+ evented: boolean;
4
+ selectable: boolean;
5
+ };
6
+ export declare const defaultLineStyle: {
7
+ evented: boolean;
8
+ selectable: boolean;
9
+ stroke: string;
10
+ strokeWidth: number;
11
+ strokeDashArray: number[];
12
+ };
13
+ export declare const defaultRectStyle: {
14
+ evented: boolean;
15
+ selectable: boolean;
16
+ fill: string;
17
+ stroke: string;
18
+ strokeWidth: number;
19
+ originX: string;
20
+ originY: string;
21
+ };
22
+ export declare const defaultTextStyle: {
23
+ evented: boolean;
24
+ selectable: boolean;
25
+ fontFamily: string;
26
+ fontSize: number;
27
+ fill: string;
28
+ centeredRotation: boolean;
29
+ originX: string;
30
+ originY: string;
31
+ lineHeight: number;
32
+ };
33
+ export declare function drawLine(points: number[], style: Partial<fabric.ILineOptions>): fabric.Line | null;
34
+ export declare function drawTextGroup(rectStyle: Partial<fabric.IRectOptions>, fontStyle: Partial<fabric.ITextOptions>, groupStyle: Partial<fabric.IGroupOptions>, text: string | number): fabric.Group | null;
35
+ export declare function drawPoint(type: string, style: any): fabric.Triangle | fabric.Circle | undefined;
@@ -0,0 +1,75 @@
1
+ import { fabric } from 'fabric';
2
+
3
+ const defaultStyle = {
4
+ evented: false,
5
+ selectable: false
6
+ };
7
+ const defaultLineStyle = {
8
+ stroke: "#000",
9
+ strokeWidth: 1,
10
+ strokeDashArray: [0, 0],
11
+ ...defaultStyle
12
+ };
13
+ const defaultRectStyle = {
14
+ fill: "transparent",
15
+ stroke: "#999",
16
+ strokeWidth: 1,
17
+ originX: "center",
18
+ originY: "center",
19
+ ...defaultStyle
20
+ };
21
+ const defaultTextStyle = {
22
+ fontFamily: "\u5FAE\u8F6F\u96C5\u9ED1",
23
+ fontSize: 12,
24
+ fill: "#000",
25
+ centeredRotation: true,
26
+ originX: "center",
27
+ originY: "center",
28
+ lineHeight: 1,
29
+ ...defaultStyle
30
+ };
31
+ function drawLine(points, style) {
32
+ if (!Array.isArray(points))
33
+ return null;
34
+ if (points.length < 4)
35
+ return null;
36
+ return new fabric.Line(points, {
37
+ ...defaultLineStyle,
38
+ ...style
39
+ });
40
+ }
41
+ function drawTextGroup(rectStyle, fontStyle, groupStyle, text) {
42
+ const rect = new fabric.Rect({
43
+ ...defaultRectStyle,
44
+ ...rectStyle
45
+ });
46
+ const texts = new fabric.Text(String(text), {
47
+ ...defaultTextStyle,
48
+ ...fontStyle
49
+ });
50
+ return new fabric.Group([rect, texts], {
51
+ ...groupStyle
52
+ });
53
+ }
54
+ function drawPoint(type, style) {
55
+ switch (type) {
56
+ case "triangle":
57
+ return new fabric.Triangle({
58
+ width: 20,
59
+ height: 20,
60
+ strokeWidth: 1,
61
+ scale: 1,
62
+ ...style
63
+ });
64
+ case "circle":
65
+ return new fabric.Circle({
66
+ objectCaching: false,
67
+ strokeWidth: 1,
68
+ radius: 5,
69
+ scale: 1,
70
+ ...style
71
+ });
72
+ }
73
+ }
74
+
75
+ export { defaultLineStyle, defaultRectStyle, defaultStyle, defaultTextStyle, drawLine, drawPoint, drawTextGroup };
@@ -0,0 +1 @@
1
+ export default function useGrid(drawLine: Function): void;
@@ -0,0 +1,47 @@
1
+ import { inject, onMounted, nextTick } from 'vue';
2
+ import { fabric } from 'fabric';
3
+ import { InjectionCanvas, InjectionPropItems } from '../interface.js';
4
+
5
+ function useGrid(drawLine) {
6
+ const canvas = inject(InjectionCanvas);
7
+ const propItems = inject(InjectionPropItems);
8
+ const { gridYNumber, originY, grid, originX, endX, xCellWidth, yCellHeight, gridXNumber, endY } = propItems;
9
+ const yList = [];
10
+ const xList = [];
11
+ for (let i = 0; i <= gridYNumber; i++) {
12
+ const y = originY + parseInt(String(yCellHeight * (gridYNumber - i)));
13
+ const style = i % grid.subYCell === 0 ? grid.mainLineStyle || {} : grid.subLineStyle || {};
14
+ yList.push(drawLine([originX, y, endX, y], {
15
+ id: i + "_" + new Date().getTime(),
16
+ ...style
17
+ }));
18
+ }
19
+ for (let i = 0; i <= gridXNumber; i++) {
20
+ const x = originX + parseInt(String(xCellWidth * i));
21
+ let style;
22
+ style = i % grid.subXCell === 0 ? grid.mainLineStyle || {} : grid.subLineStyle || {};
23
+ if (i % grid.subSecondXCell === 0) {
24
+ style = grid.subSecondLineStyle || {};
25
+ }
26
+ if (i % grid.subXCell === 0) {
27
+ style = grid.mainLineStyle || {};
28
+ }
29
+ xList.push(drawLine([x, originY, x, endY], {
30
+ id: i + "_" + new Date().getTime(),
31
+ ...style
32
+ }));
33
+ }
34
+ const group = new fabric.Group([...xList, ...yList], {
35
+ evented: false,
36
+ selectable: false
37
+ });
38
+ onMounted(() => {
39
+ nextTick(() => {
40
+ canvas.value.add(group);
41
+ canvas.value.sendToBack(group);
42
+ canvas.value.renderAll();
43
+ });
44
+ });
45
+ }
46
+
47
+ export { useGrid as default };
@@ -0,0 +1,80 @@
1
+ import { InjectionKey, Ref } from 'vue';
2
+ import { fabric } from 'fabric';
3
+ interface IEvent {
4
+ selectable: boolean;
5
+ evented: boolean;
6
+ }
7
+ interface IGrid {
8
+ mainXCell: number;
9
+ subXCell: number;
10
+ subSecondXCell: number;
11
+ mainYCell: number;
12
+ subYCell: number;
13
+ mainLineStyle?: fabric.ILineOptions;
14
+ subLineStyle?: fabric.ILineOptions;
15
+ subSecondLineStyle?: fabric.ILineOptions;
16
+ event?: Partial<IEvent>;
17
+ }
18
+ interface IPropItems {
19
+ canvasWidth: number;
20
+ canvasHeight: number;
21
+ grid: IGrid;
22
+ top: ITop;
23
+ gridXNumber: number;
24
+ gridYNumber: number;
25
+ originX: number;
26
+ originY: number;
27
+ endX: number;
28
+ endY: number;
29
+ xCellWidth: number;
30
+ yCellHeight: number;
31
+ xScaleList: Array<string | number>;
32
+ xScaleCell: number;
33
+ breatheYCell: number;
34
+ pulseYCell: number;
35
+ centigradeYCell: number;
36
+ event: Partial<IEvent>;
37
+ }
38
+ interface IPoint {
39
+ time: string;
40
+ value: string | number;
41
+ }
42
+ interface IOther {
43
+ style?: fabric.ITextOptions;
44
+ list: Array<IPoint>;
45
+ }
46
+ interface IDate {
47
+ title: string;
48
+ height?: number;
49
+ list: Array<string | number>;
50
+ style?: fabric.ITextOptions;
51
+ }
52
+ interface ITop {
53
+ dateStyle?: fabric.ITextOptions;
54
+ titleWidth: number;
55
+ date: IDate;
56
+ xScalevalue: IDate;
57
+ dayHeight?: number;
58
+ }
59
+ interface ILeft {
60
+ spaceGridNumber?: number;
61
+ yScaleValue: Array<any>;
62
+ }
63
+ interface IRight {
64
+ width?: number;
65
+ yScaleValue: any;
66
+ }
67
+ export interface IData {
68
+ width: number;
69
+ height: number;
70
+ borderStyle?: fabric.ILineOptions;
71
+ grid: IGrid;
72
+ other?: IOther;
73
+ top: ITop;
74
+ left: ILeft;
75
+ right?: IRight;
76
+ bottom?: any;
77
+ }
78
+ export declare const InjectionCanvas: InjectionKey<Ref<fabric.Canvas>>;
79
+ export declare const InjectionPropItems: InjectionKey<IPropItems>;
80
+ export {};
@@ -0,0 +1,4 @@
1
+ const InjectionCanvas = Symbol("canvas");
2
+ const InjectionPropItems = Symbol("propItems");
3
+
4
+ export { InjectionCanvas, InjectionPropItems };
@@ -1126,6 +1126,16 @@ body > .vxe-table--tooltip-wrapper {
1126
1126
  text-overflow: ellipsis;
1127
1127
  white-space: nowrap;
1128
1128
  }
1129
+ .n-dialog__title .svg-wrap {
1130
+ margin: 0 0 0 auto;
1131
+ }
1132
+ .n-dialog__title .svg-wrap svg {
1133
+ font-size: 14px;
1134
+ cursor: pointer;
1135
+ }
1136
+ .n-dialog__title .svg-wrap svg + svg {
1137
+ margin-left: 16px;
1138
+ }
1129
1139
  .c-chunk-upload-container {
1130
1140
  width: 100%;
1131
1141
  height: 100%;
@@ -1417,8 +1427,10 @@ body > .vxe-table--tooltip-wrapper {
1417
1427
  position: relative;
1418
1428
  top: 50%;
1419
1429
  left: 50%;
1430
+ font-size: 46px;
1420
1431
  transform: translate(-50%, -50%);
1421
1432
  transition: all 0.25s ease-out;
1433
+ cursor: pointer;
1422
1434
  }
1423
1435
  .c-icon-wrap .theme_outlined {
1424
1436
  display: inline-block;
@@ -1608,6 +1620,9 @@ body > .vxe-table--tooltip-wrapper {
1608
1620
  box-sizing: border-box;
1609
1621
  color: rgba(0, 0, 0, 0.65);
1610
1622
  }
1623
+ .c-scale.c-scale-nobtn {
1624
+ padding-bottom: 4px;
1625
+ }
1611
1626
  .c-scale .scale-container {
1612
1627
  width: 100%;
1613
1628
  height: 100%;
@@ -2264,6 +2279,10 @@ body > .vxe-table--tooltip-wrapper {
2264
2279
  padding-top: 20px;
2265
2280
  line-height: 40px;
2266
2281
  }
2282
+ .video-js {
2283
+ width: 100%;
2284
+ height: 100%;
2285
+ }
2267
2286
  .video-js .vjs-time-control {
2268
2287
  display: block;
2269
2288
  }
@@ -2324,7 +2343,6 @@ body > .vxe-table--tooltip-wrapper {
2324
2343
  .vod-wrap .icon-play {
2325
2344
  color: #fff;
2326
2345
  opacity: 0.8;
2327
- transform: scale3d(2, 2, 2);
2328
2346
  transition: all 0.25s ease-out;
2329
2347
  }
2330
2348
  .player-wrap {
@@ -2376,7 +2394,6 @@ body > .vxe-table--tooltip-wrapper {
2376
2394
  .c-video-modal .c-playervod-wrap .vod-wrap .icon-play {
2377
2395
  color: #fff;
2378
2396
  opacity: 0.8;
2379
- transform: scale3d(2, 2, 2);
2380
2397
  transition: all 0.25s ease-out;
2381
2398
  }
2382
2399
  .c-video-modal .c-playervod-wrap .player-wrap {
@@ -2384,18 +2401,21 @@ body > .vxe-table--tooltip-wrapper {
2384
2401
  height: 100%;
2385
2402
  width: 100%;
2386
2403
  }
2387
- .c-video-modal .c-player-video-modal .preview-wrap {
2404
+ .c-player-video-modal .preview-wrap {
2388
2405
  height: 100%;
2389
2406
  width: 100%;
2390
2407
  display: flex;
2391
2408
  justify-content: center;
2392
2409
  align-items: center;
2393
2410
  }
2394
- .c-video-modal .c-player-video-modal .preview-wrap .preview {
2411
+ .c-player-video-modal .preview-wrap .preview {
2395
2412
  padding: 20px 0;
2396
2413
  width: 60vw;
2397
2414
  height: 100%;
2398
2415
  }
2416
+ .c-player-video-modal .preview-wrap .video-container {
2417
+ height: 100%;
2418
+ }
2399
2419
  .vxe-table--footer-wrapper.body--wrapper::-webkit-scrollbar,
2400
2420
  .vxe-table--body-wrapper::-webkit-scrollbar {
2401
2421
  width: 10px;