@kizmann/nano-ui 1.0.14 → 1.1.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.
Files changed (73) hide show
  1. package/dist/nano-ui.css +1 -1
  2. package/dist/nano-ui.js +1 -1
  3. package/dist/nano-ui.js.map +1 -1
  4. package/dist/themes/dark.css +1 -1
  5. package/dist/themes/glossy.dark.css +1 -0
  6. package/dist/themes/glossy.light.css +1 -0
  7. package/dist/themes/light.css +1 -1
  8. package/package.json +1 -1
  9. package/src/button/src/button/button.jsx +12 -0
  10. package/src/button/src/button/button.scss +4 -1
  11. package/src/collapse/src/collapse-item/collapse-item.jsx +1 -1
  12. package/src/draggable/src/draglist/draglist.jsx +1 -1
  13. package/src/draggable/src/draglist-item/draglist-item.jsx +5 -2
  14. package/src/drawer/src/drawer/drawer.jsx +9 -3
  15. package/src/form/src/form/form.jsx +9 -4
  16. package/src/form/src/form-frame/form-frame.jsx +53 -21
  17. package/src/form/src/form-frame/form-frame.scss +7 -0
  18. package/src/form/src/form-group/form-group.jsx +31 -11
  19. package/src/form/src/form-item/form-item.jsx +9 -5
  20. package/src/info/src/info/info.jsx +1 -1
  21. package/src/modal/src/modal/modal.jsx +1 -1
  22. package/src/modal/src/modal/modal.scss +2 -2
  23. package/src/paginator/src/paginator/paginator.jsx +24 -29
  24. package/src/preview/index.js +2 -0
  25. package/src/preview/index.scss +1 -0
  26. package/src/preview/src/_tools/preview-handler.js +193 -0
  27. package/src/preview/src/_tools/preview-helper.js +142 -0
  28. package/src/preview/src/preview/preview.jsx +48 -115
  29. package/src/preview/src/preview/preview.scss +2 -1
  30. package/src/preview/src/preview-modal/preview-modal.jsx +156 -0
  31. package/src/preview/src/preview-modal/preview-modal.scss +56 -0
  32. package/src/preview/src/preview-video/preview-video.jsx +4 -60
  33. package/src/resizer/index.js +3 -1
  34. package/src/resizer/src/resizer/resizer-next.jsx +536 -0
  35. package/src/resizer/src/resizer/resizer.jsx +17 -11
  36. package/src/scrollbar/index.js +3 -1
  37. package/src/scrollbar/index.scss +1 -0
  38. package/src/scrollbar/src/scrollbar/scrollbar.scss +14 -8
  39. package/src/scrollbar/src/scrollbar-next/scrollbar-next.jsx +640 -0
  40. package/src/scrollbar/src/scrollbar-next/scrollbar-next.scss +148 -0
  41. package/src/select/src/select/select.jsx +12 -16
  42. package/src/select/src/select/select.scss +1 -1
  43. package/src/table/src/table/table.jsx +4 -7
  44. package/src/table/src/table/table.scss +15 -14
  45. package/src/table/src/table-cell/types/table-cell-image.jsx +9 -3
  46. package/src/table/src/table-column/table-column.jsx +11 -27
  47. package/src/table/src/table-filter/types/table-filter-datetime.jsx +1 -1
  48. package/src/tabs/src/tabs-item/tabs-item.jsx +1 -1
  49. package/src/tags/src/tags-item/tags-item.jsx +1 -2
  50. package/src/timepicker/src/timepicker-panel/timepicker-panel.jsx +15 -3
  51. package/src/timepicker/src/timepicker-panel/timepicker-panel.scss +2 -1
  52. package/src/virtualscroller/src/virtualscroller/virtualscroller.jsx +63 -30
  53. package/src/virtualscroller/src/virtualscroller/virtualscroller.scss +1 -0
  54. package/themes/glossy/button/index.scss +2 -0
  55. package/themes/glossy/button/src/button/button.scss +116 -0
  56. package/themes/glossy/button/src/button-group/button-group.scss +1 -0
  57. package/themes/glossy/index-dark.scss +3 -0
  58. package/themes/glossy/index-light.scss +3 -0
  59. package/themes/glossy/index.scss +43 -0
  60. package/themes/glossy/root/image/empty-default.svg +30 -0
  61. package/themes/glossy/root/image/empty-space.svg +34 -0
  62. package/themes/glossy/root/image/star-default.svg +10 -0
  63. package/themes/glossy/root/image/test.svg +1 -0
  64. package/themes/glossy/root/vars-dark.scss +234 -0
  65. package/themes/glossy/root/vars-light.scss +234 -0
  66. package/themes/glossy/root/vars.scss +233 -0
  67. package/themes/macos/button/src/button/button.scss +46 -8
  68. package/themes/macos/form/src/form-frame/form-frame.scss +2 -2
  69. package/themes/macos/index.scss +1 -0
  70. package/themes/macos/preview/index.scss +1 -0
  71. package/themes/macos/preview/src/preview-modal/preview-modal.scss +28 -0
  72. package/themes/macos/scrollbar/src/scrollbar/scrollbar.scss +1 -0
  73. package/themes/macos/table/src/table/table.scss +5 -0
@@ -0,0 +1,148 @@
1
+ @import "../../../root/vars";
2
+
3
+ .n-scrollbar-next {
4
+ position: relative;
5
+ overflow: hidden;
6
+ }
7
+
8
+ .n-scrollbar-next-test {
9
+ opacity: 0;
10
+ position: fixed;
11
+ width: 15px;
12
+ height: 15px;
13
+ overflow: scroll;
14
+ -webkit-overflow-scrolling: touch;
15
+ }
16
+
17
+ .n-scrollbar-next-test > div {
18
+ width: 16px;
19
+ height: 16px;
20
+ }
21
+
22
+ .n-scrollbar-next-content {
23
+ position: absolute;
24
+ top: 0;
25
+ left: 0;
26
+ right: 0;
27
+ bottom: 0;
28
+ overflow: scroll;
29
+ -webkit-overflow-scrolling: touch;
30
+ }
31
+
32
+ .n-scrollbar-next:not(.n-scrollbar-next--native) > .n-scrollbar-next-content {
33
+ right: -15px;
34
+ bottom: -15px;
35
+ }
36
+
37
+ .n-scrollbar-next.n-windows:not(.n-scrollbar-next--native) > .n-scrollbar-next-content {
38
+ right: -17px;
39
+ bottom: -17px;
40
+ }
41
+
42
+ .n-scrollbar-next.n-scrollbar-next--forced.n-scrollbar-next--native > .n-scrollbar-next-content {
43
+ padding-right: 16px;
44
+ padding-bottom: 16px;
45
+ right: -16px;
46
+ bottom: -16px;
47
+ }
48
+
49
+ .n-scrollbar-next:not(.n-overflow-x) > .n-scrollbar-next-content {
50
+ bottom: 0;
51
+ overflow-x: hidden;
52
+ }
53
+
54
+ .n-scrollbar-next:not(.n-overflow-y) > .n-scrollbar-next-content {
55
+ right: 0;
56
+ overflow-y: hidden;
57
+ }
58
+
59
+ .n-scrollbar-next > .n-scrollbar-next-content > .n-scrollbar-next__wrap {
60
+ position: relative;
61
+ }
62
+
63
+ .n-scrollbar-next-v,
64
+ .n-scrollbar-next-h {
65
+ cursor: default;
66
+ position: absolute;
67
+ z-index: 100;
68
+ user-select: none;
69
+ }
70
+
71
+ .n-scrollbar-next-v {
72
+ top: 0;
73
+ right: 0;
74
+ width: 14px;
75
+
76
+ }
77
+
78
+ .n-scrollbar-next-h {
79
+ left: 0;
80
+ bottom: 0;
81
+ height: 14px;
82
+ }
83
+
84
+ .n-scrollbar-next--native:not(.n-scrollbar-next--forced) > .n-scrollbar-next-v,
85
+ .n-scrollbar-next:not(.has-vtrack) > .n-scrollbar-next-v,
86
+ .n-scrollbar-next--native:not(.n-scrollbar-next--forced) > .n-scrollbar-next-h,
87
+ .n-scrollbar-next:not(.has-htrack) > .n-scrollbar-next-h {
88
+ display: none;
89
+ }
90
+
91
+ .n-scrollbar-next-v:before,
92
+ .n-scrollbar-next-h:before {
93
+ content: '\00a0';
94
+ position: absolute;
95
+ display: block;
96
+ border-radius: 500px;
97
+ opacity: 0;
98
+ transition: opacity 0.15s;
99
+ background: rgba(0, 255, 0, 0.4);
100
+ }
101
+
102
+ .n-scrollbar-next-v:before {
103
+ top: 2px;
104
+ bottom: 2px;
105
+ left: 5px;
106
+ right: 5px;
107
+ }
108
+
109
+ .n-scrollbar-next-h:before {
110
+ top: 5px;
111
+ bottom: 5px;
112
+ left: 2px;
113
+ right: 2px;
114
+ }
115
+
116
+ .n-scrollbar-next-v:after,
117
+ .n-scrollbar-next-h:after {
118
+ content: '\00a0';
119
+ position: absolute;
120
+ top: 2px;
121
+ bottom: 2px;
122
+ left: 2px;
123
+ right: 2px;
124
+ display: block;
125
+ border-radius: 500px;
126
+ opacity: 0;
127
+ transition: opacity 0.15s;
128
+ background: rgba(255, 0, 0, 0.4);
129
+ }
130
+
131
+ .n-scrollbar-next-v.is-active:after,
132
+ .n-scrollbar-next-h.is-active:after,
133
+ .n-scrollbar-next-v:hover:after,
134
+ .n-scrollbar-next-h:hover:after {
135
+ opacity: 1;
136
+ }
137
+
138
+ .n-scrollbar-next.has-vtrack > .n-scrollbar-next-v.is-active:before,
139
+ .n-scrollbar-next.has-htrack > .n-scrollbar-next-h.is-active:before,
140
+ .n-scrollbar-next.has-vtrack:hover > .n-scrollbar-next-v:before,
141
+ .n-scrollbar-next.has-htrack:hover > .n-scrollbar-next-h:before {
142
+ opacity: 1;
143
+ }
144
+
145
+ .n-scrollbar-next--touch.has-vtrack > .n-scrollbar-next-v:before,
146
+ .n-scrollbar-next--touch.has-htrack > .n-scrollbar-next-h:before {
147
+ opacity: 1;
148
+ }
@@ -326,8 +326,6 @@ export default {
326
326
  if ( !this.focus ) {
327
327
  this.$refs.popover.open();
328
328
  }
329
-
330
- clearInterval(this.refresh);
331
329
  },
332
330
 
333
331
  onInputInput(event)
@@ -364,11 +362,9 @@ export default {
364
362
 
365
363
  let searchRegex = new RegExp(this.search, 'i');
366
364
 
367
- let searched = Arr.filter(this.elements, (option) => {
368
- return Any.isString(option.label) && option.label.match(searchRegex);
365
+ this.searched = Arr.filter(this.elements, (option) => {
366
+ return Any.string(option.label || '').match(searchRegex);
369
367
  });
370
-
371
- this.searched = searched;
372
368
  },
373
369
 
374
370
  toggleOption(value, event = null)
@@ -505,8 +501,8 @@ export default {
505
501
  this.$refs.scrollbar.scrollIntoView(`[data-option="${selected._.uid}"]`);
506
502
  }
507
503
 
508
- if ( this.$refs.virtualbar ) {
509
- this.$refs.virtualbar.scrollToIndex(this.index);
504
+ if ( this.$refs.virtualscroll ) {
505
+ this.$refs.virtualscroll.scrollToIndex(this.index);
510
506
  }
511
507
  },
512
508
 
@@ -534,14 +530,14 @@ export default {
534
530
  return;
535
531
  }
536
532
 
537
- if ( this.$refs.virtualbar ) {
538
- this.$refs.virtualbar.scrollToIndex(index, 250);
533
+ if ( this.$refs.virtualscroll ) {
534
+ this.$refs.virtualscroll.scrollToIndex(index, 0);
539
535
  }
540
536
 
541
537
  let select = `[data-option="${Obj.get(this.elements[index], '_.uid', 0)}"]`;
542
538
 
543
539
  if ( this.$refs.scrollbar ) {
544
- this.$refs.scrollbar.scrollIntoView(select, 250);
540
+ this.$refs.scrollbar.scrollIntoView(select, 0);
545
541
  }
546
542
  }
547
543
 
@@ -758,7 +754,7 @@ export default {
758
754
  return emptyHtml;
759
755
  }
760
756
 
761
- if ( this.lazy ) {
757
+ if ( this.lazy || true ) {
762
758
  return this.ctor('renderLazyItems')();
763
759
  }
764
760
 
@@ -767,8 +763,8 @@ export default {
767
763
  });
768
764
 
769
765
  let props = {
770
- relative: true, size: this.size
771
- }
766
+ size: this.size
767
+ };
772
768
 
773
769
  return (
774
770
  <NScrollbar ref="scrollbar" class="n-select__body" {...props}>
@@ -822,7 +818,7 @@ export default {
822
818
  renderLazyItems()
823
819
  {
824
820
  let props = {
825
- items: this.searched
821
+ items: this.searched, offsetY: 0
826
822
  };
827
823
 
828
824
  props.renderNode = ({ value, index }) => {
@@ -830,7 +826,7 @@ export default {
830
826
  };
831
827
 
832
828
  return (
833
- <NVirtualscroller ref="virtualbar" class="n-select__body n-virtual" {...props} />
829
+ <NVirtualscroller ref="virtualscroll" class="n-select__body n-virtual" {...props} />
834
830
  );
835
831
  },
836
832
 
@@ -119,7 +119,7 @@
119
119
  }
120
120
 
121
121
  .n-select__body.n-virtual {
122
- min-height: 210px;
122
+ //min-height: 210px;
123
123
  }
124
124
 
125
125
  .n-select__empty {
@@ -262,7 +262,7 @@ export default {
262
262
  useKeys: {
263
263
  default()
264
264
  {
265
- return false;
265
+ return true;
266
266
  },
267
267
  type: [Boolean]
268
268
  },
@@ -616,8 +616,7 @@ export default {
616
616
  render()
617
617
  {
618
618
  let except = [
619
- 'visible', 'filter', 'sortProp',
620
- 'sortDir', 'closeFilterOnEnter'
619
+ 'visible', 'filter', 'sortProp', 'sortDir', 'closeFilterOnEnter'
621
620
  ];
622
621
 
623
622
  let props = Obj.except(this.$props, except, {
@@ -662,10 +661,8 @@ export default {
662
661
 
663
662
  return (
664
663
  <div class="n-table">
665
- <NScrollbar ref="scrollbar" class="n-table__wrap" fixture={true} overflowY={false}>
666
- <div class="n-table__inner">
667
- {[this.ctor('renderHead')(), draggableHtml]}
668
- </div>
664
+ <NScrollbar ref="scrollbar" wrapClass="n-table__wrap" overflowY={false}>
665
+ {[this.ctor('renderHead')(), draggableHtml]}
669
666
  </NScrollbar>
670
667
  {this.$slots.default && this.$slots.default()}
671
668
  </div>
@@ -6,7 +6,6 @@
6
6
  width: 100%;
7
7
  display: flex;
8
8
  flex-direction: column;
9
- border-radius: $md-radius + 2;
10
9
  }
11
10
 
12
11
  .n-table:before {
@@ -20,22 +19,23 @@
20
19
  background: transparent;
21
20
  z-index: 50;
22
21
  pointer-events: none;
23
- border-radius: $md-radius + 2;
24
22
  border: 1px solid transparent;
25
23
  }
26
24
 
25
+ .n-table > .n-scrollbar {
26
+ flex: 1 1 auto;
27
+ }
28
+
27
29
  .n-table .n-table__header {
28
- border-radius: $md-radius + 2 $md-radius + 2 0 0;
30
+ display: inline-flex;
29
31
  }
30
32
 
31
- .n-table .n-table__wrap,
32
- .n-table .n-table__inner,
33
- .n-table > .n-scrollbar,
34
- .n-table > .n-scrollbar > .n-scrollbar-content,
35
- .n-table > .n-scrollbar > .n-scrollbar-content > .n-scrollbar__wrap {
33
+ .n-table .n-table__wrap {
36
34
  min-width: 100%;
35
+ min-height: 0;
36
+ max-height: 100%;
37
37
  flex: 1 1 auto;
38
- display: flex;
38
+ display: inline-flex;
39
39
  flex-direction: column;
40
40
  align-items: stretch;
41
41
  justify-content: stretch;
@@ -54,10 +54,6 @@
54
54
  //margin-bottom: -1px;
55
55
  }
56
56
 
57
- .n-table__header {
58
- margin-left: -1px;
59
- }
60
-
61
57
  .n-table .n-table__inner {
62
58
  position: relative;
63
59
  }
@@ -90,6 +86,7 @@
90
86
 
91
87
  .n-table__body .n-scrollbar {
92
88
  flex: 1 1 auto;
89
+ max-height: 100%;
93
90
  }
94
91
 
95
92
  .n-table__body .n-scrollbar__wrap {
@@ -108,6 +105,10 @@
108
105
  display: flex;
109
106
  flex-direction: row;
110
107
  align-items: stretch;
111
- justify-content: stretch;
108
+ justify-content: flex-start;
112
109
  border-bottom: 1px solid transparent;
110
+ }
111
+
112
+ .n-table .n-fixed {
113
+ flex: 0 0 auto !important;
113
114
  }
@@ -33,13 +33,19 @@ export default {
33
33
  'n-table-cell--' + this.column.type
34
34
  ];
35
35
 
36
- let props = {
36
+ let previewProps = {
37
37
  fit: 'contain',
38
- }
38
+ index: this.NDraggableItem.index,
39
+ group: this.column.uid,
40
+ };
41
+
42
+ previewProps['onSlide'] = () => {
43
+ this.NTable.$refs.draggable.setRawCurrent(this.NDraggableItem.index);
44
+ };
39
45
 
40
46
  return (
41
47
  <div class={classList}>
42
- <NPreview file={this.preview || this.input} thumb={this.input} {...props} />
48
+ <NPreview file={this.preview || this.input} thumb={this.input} {...previewProps} />
43
49
  </div>
44
50
  );
45
51
  }
@@ -174,14 +174,6 @@ export default {
174
174
  type: [String]
175
175
  },
176
176
 
177
- fluid: {
178
- default()
179
- {
180
- return false;
181
- },
182
- type: [Boolean]
183
- },
184
-
185
177
  fixedWidth: {
186
178
  default()
187
179
  {
@@ -353,10 +345,6 @@ export default {
353
345
  classList.push('n-sorted', 'n-' + sortDirection);
354
346
  }
355
347
 
356
- if ( this.fluid || !this.width ) {
357
- classList.push('n-fluid');
358
- }
359
-
360
348
  if ( this.fixedWidth ) {
361
349
  classList.push('n-fixed');
362
350
  }
@@ -365,35 +353,35 @@ export default {
365
353
  classList.push('n-filtered');
366
354
  }
367
355
 
368
- let style = {};
356
+ let flex = '1 1 auto';
369
357
 
370
- if ( this.fixedWidth ) {
371
- style.width = this.fixedWidth + 'px';
372
- }
373
-
374
- if ( this.width ) {
375
- style.flexBasis = this.width + 'px';
358
+ if ( ! Any.isEmpty(this.width) ) {
359
+ flex = `1 1 ${this.width}`;
376
360
  }
377
361
 
378
362
  let props = {
379
363
  modelValue: this.tempWidth,
380
- width: this.width,
364
+ flex: flex,
381
365
  minWidth: this.minWidth,
382
366
  maxWidth: this.maxWidth,
383
367
  disabled: !!this.fixedWidth,
384
- group: [this.NTable.uid],
368
+ group: ['n-table', this.NTable.uid],
369
+ };
370
+
371
+ props['onUpdateWidth'] = (value) => {
372
+ this.tempWidth = value;
385
373
  };
386
374
 
387
375
  props['onUpdate:modelValue'] = (value) => {
388
376
  this.tempWidth = value;
389
- }
377
+ };
390
378
 
391
379
  if ( this.sort ) {
392
380
  props.onMousedown = this.sortByColumn;
393
381
  }
394
382
 
395
383
  return (
396
- <NResizer ref="column" class={classList} style={style} {...props}>
384
+ <NResizer ref="column" class={classList} {...props}>
397
385
  {this.ctor('renderHeadSort')()}
398
386
  {this.ctor('renderHeadLabel')()}
399
387
  {this.ctor('renderHeadFilter')()}
@@ -472,10 +460,6 @@ export default {
472
460
  'n-table-cell--' + this.type,
473
461
  ];
474
462
 
475
- if ( this.fluid ) {
476
- classList.push('n-fluid');
477
- }
478
-
479
463
  if ( this.tempWidth ) {
480
464
  classList.push('n-fixed');
481
465
  }
@@ -31,7 +31,7 @@ export default {
31
31
  return (
32
32
  <NForm>
33
33
  <NFormItem>
34
- <NDatepicker size="sm" vModel={this.filter.value} format={this.column.datetimeFormat} />
34
+ <NDatepicker size="sm" vModel={this.filter.value} />
35
35
  </NFormItem>
36
36
  <NFormItem>
37
37
  <NSelect size="sm" vModel={this.filter.operator} options={options} />
@@ -114,7 +114,7 @@ export default {
114
114
 
115
115
  return (
116
116
  <div class="n-tabs__tab-icon">
117
- { this.$slots.icon && this.$slots.icon() || <i class={this.icon}></i> }
117
+ { this.$slots.icon && this.$slots.icon() || <i class={'n-icon ' + this.icon}></i> }
118
118
  </div>
119
119
  );
120
120
  },
@@ -77,7 +77,7 @@ export default {
77
77
  }
78
78
 
79
79
  return (
80
- <i class={this.icon}></i>
80
+ <i class={'n-icon ' + this.icon}></i>
81
81
  );
82
82
  },
83
83
 
@@ -99,7 +99,6 @@ export default {
99
99
  let classList = [
100
100
  'n-tags-item',
101
101
  'n-tags-item--' + size,
102
- ,
103
102
  ];
104
103
 
105
104
  if ( this.type === -1 ) {
@@ -201,8 +201,12 @@ export default {
201
201
  return null;
202
202
  }
203
203
 
204
+ let scrollbarProps = {
205
+ offsetY: 0, wrapClass: 'n-timepicker-panel__wrap'
206
+ };
207
+
204
208
  return (
205
- <NScrollbar ref="hour" class="n-timepicker-panel__panel" wrapClass="n-timepicker-panel__wrap">
209
+ <NScrollbar ref="hour" class="n-timepicker-panel__panel" {...scrollbarProps}>
206
210
  {Arr.each(this.hoursGrid, this.ctor('renderHourItem'))}
207
211
  </NScrollbar>
208
212
  );
@@ -235,8 +239,12 @@ export default {
235
239
  return null;
236
240
  }
237
241
 
242
+ let scrollbarProps = {
243
+ offsetY: 0, wrapClass: 'n-timepicker-panel__wrap'
244
+ };
245
+
238
246
  return (
239
- <NScrollbar ref="minute" class="n-timepicker-panel__panel" wrapClass="n-timepicker-panel__wrap">
247
+ <NScrollbar ref="minute" class="n-timepicker-panel__panel" {...scrollbarProps}>
240
248
  {Arr.each(this.minutesGrid, this.ctor('renderMinuteItem'))}
241
249
  </NScrollbar>
242
250
  );
@@ -269,8 +277,12 @@ export default {
269
277
  return null;
270
278
  }
271
279
 
280
+ let scrollbarProps = {
281
+ offsetY: 0, wrapClass: 'n-timepicker-panel__wrap'
282
+ };
283
+
272
284
  return (
273
- <NScrollbar ref="second" class="n-timepicker-panel__panel" wrapClass="n-timepicker-panel__wrap">
285
+ <NScrollbar ref="second" class="n-timepicker-panel__panel" {...scrollbarProps}>
274
286
  {Arr.each(this.secondsGrid, this.ctor('renderSecondItem'))}
275
287
  </NScrollbar>
276
288
  );
@@ -16,10 +16,11 @@
16
16
  flex-direction: row;
17
17
  align-items: stretch;
18
18
  justify-content: stretch;
19
+ max-height: 260px;
19
20
  }
20
21
 
21
22
  .n-timepicker-panel__panel {
22
- flex: 1 0 auto;
23
+ flex: 1 0 auto;
23
24
  min-height: 0;
24
25
  }
25
26