@kizmann/nano-ui 3.0.0 → 3.0.1

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 (137) hide show
  1. package/dist/nano-ui.css +1 -1
  2. package/dist/nano-ui.esm.js +1 -1
  3. package/dist/nano-ui.esm.js.map +1 -1
  4. package/dist/themes/default.css +1 -1
  5. package/package.json +3 -3
  6. package/src/button/js/button/NButtonView.ts +1 -1
  7. package/src/cascader/css/cascader-panel.scss +1 -1
  8. package/src/cascader/js/cascader/NCascaderController.ts +32 -16
  9. package/src/cascader/js/cascader/NCascaderView.ts +1 -1
  10. package/src/cascader/js/cascader-panel/NCascaderPanelController.ts +55 -24
  11. package/src/cascader/js/cascader-panel/NCascaderPanelView.ts +10 -9
  12. package/src/cascader/js/helper/NCascaderHelper.ts +3 -7
  13. package/src/checkbox/css/checkbox-group.scss +0 -8
  14. package/src/checkbox/css/checkbox.scss +6 -0
  15. package/src/checkbox/js/checkbox/NCheckbox.ts +7 -0
  16. package/src/checkbox/js/checkbox/NCheckboxData.ts +8 -1
  17. package/src/checkbox/js/checkbox-group/NCheckboxGroup.ts +7 -0
  18. package/src/checkbox/js/checkbox-group/NCheckboxGroupData.ts +5 -0
  19. package/src/collapse/css/collapse-item.scss +1 -1
  20. package/src/collapse/js/collapse-item/NCollapseItem.ts +5 -0
  21. package/src/collapse/js/collapse-item/NCollapseItemView.ts +6 -3
  22. package/src/config/js/config/NConfig.ts +5 -0
  23. package/src/config/js/config/NConfigController.ts +2 -2
  24. package/src/config/js/config/NConfigView.ts +5 -1
  25. package/src/draggable/css/draghandler.scss +11 -8
  26. package/src/draggable/js/drag/NDragIndicator.ts +4 -0
  27. package/src/draggable/js/drag/NDragReciever.ts +2 -2
  28. package/src/draggable/js/draglist/NDraglist.ts +6 -0
  29. package/src/draggable/js/draglist/NDraglistController.ts +157 -24
  30. package/src/draggable/js/draglist/NDraglistView.ts +43 -12
  31. package/src/draggable/js/dropzone/NDropzone.ts +14 -0
  32. package/src/draggable/js/dropzone/NDropzoneController.ts +27 -1
  33. package/src/draggable/js/dropzone/NDropzoneData.ts +10 -0
  34. package/src/draggable/js/dropzone/NDropzoneView.ts +3 -7
  35. package/src/empty/js/empty-icon/NEmptyIcon.ts +1 -1
  36. package/src/form/js/form/NForm.ts +1 -1
  37. package/src/form/js/form/NFormController.ts +20 -1
  38. package/src/form/js/form-bag/NFormBagController.ts +4 -0
  39. package/src/form/js/form-bag/NFormBagView.ts +2 -1
  40. package/src/form/js/form-item/NFormItemView.ts +1 -1
  41. package/src/form/js/form-rules/module/NFormRuleRequiredIf.ts +4 -0
  42. package/src/form/js/form-rules/module/NFormRuleRequiredUnless.ts +4 -0
  43. package/src/index.scss +1 -1
  44. package/src/info/css/info-field.scss +4 -4
  45. package/src/info/js/info/NInfoView.ts +1 -4
  46. package/src/info/js/info-column/NInfoColumnView.ts +6 -2
  47. package/src/input/css/input-number.scss +5 -0
  48. package/src/input/js/input-number/NInputNumberController.ts +4 -4
  49. package/src/input/js/textarea/NTextareaView.ts +3 -3
  50. package/src/modal/css/modal.scss +4 -0
  51. package/src/modal/js/drawer/NDrawerController.ts +16 -3
  52. package/src/modal/js/handler/NModalElement.ts +14 -0
  53. package/src/modal/js/handler/NModalHandler.ts +13 -0
  54. package/src/modal/js/modal/NModal.ts +7 -0
  55. package/src/modal/js/modal/NModalController.ts +20 -2
  56. package/src/modal/js/modal/NModalData.ts +18 -2
  57. package/src/modal/js/modal/NModalView.ts +7 -9
  58. package/src/popover/css/popover.scss +5 -10
  59. package/src/popover/js/handler/NPopoverElement.ts +4 -0
  60. package/src/popover/js/popover/NPopover.ts +7 -0
  61. package/src/popover/js/popover/NPopoverController.ts +10 -2
  62. package/src/popover/js/popover/NPopoverData.ts +5 -0
  63. package/src/popover/js/popover/NPopoverView.ts +22 -3
  64. package/src/popover/js/popover-panel/NPopoverPanelController.ts +3 -1
  65. package/src/preview/css/preview.scss +0 -6
  66. package/src/preview/js/handler/NPreviewHandler.ts +3 -3
  67. package/src/preview/js/preview/NPreview.ts +2 -2
  68. package/src/preview/js/preview/NPreviewController.ts +7 -8
  69. package/src/preview/js/preview/NPreviewData.ts +8 -1
  70. package/src/preview/js/preview/NPreviewView.ts +15 -12
  71. package/src/preview/js/preview-module/NPreviewFileModule.ts +1 -1
  72. package/src/radio/css/radio-group.scss +0 -8
  73. package/src/radio/css/radio.scss +6 -0
  74. package/src/radio/js/radio/NRadio.ts +9 -2
  75. package/src/radio/js/radio/NRadioData.ts +8 -1
  76. package/src/radio/js/radio-group/NRadioGroup.ts +9 -2
  77. package/src/radio/js/radio-group/NRadioGroupData.ts +5 -0
  78. package/src/resizer/css/resizer.scss +4 -0
  79. package/src/resizer/js/resizer/NResizerController.ts +5 -1
  80. package/src/resizer/js/resizer/NResizerData.ts +0 -35
  81. package/src/resizer/js/resizer/NResizerView.ts +4 -0
  82. package/src/root/css/helpers.scss +20 -0
  83. package/src/root/css/tooltip.scss +39 -49
  84. package/src/root/js/controller/GroupController.ts +1 -1
  85. package/src/root/js/data/DragData.ts +8 -0
  86. package/src/root/js/module/Pointer.ts +18 -0
  87. package/src/root/js/module/Styler.ts +4 -0
  88. package/src/root/js/prop/BaseProps.ts +33 -0
  89. package/src/root/js/prop/DragProps.ts +7 -0
  90. package/src/root/js/proto/ProtoView.ts +5 -2
  91. package/src/scrollbar/css/scrollbar.scss +6 -1
  92. package/src/scrollbar/js/handler/NScrollbarElement.ts +4 -0
  93. package/src/scrollbar/js/virtualbar/NVirtualbar.ts +3 -0
  94. package/src/scrollbar/js/virtualbar/NVirtualbarController.ts +1 -1
  95. package/src/scrollbar/js/virtualbar/NVirtualbarView.ts +53 -51
  96. package/src/select/js/select/NSelectController.ts +3 -1
  97. package/src/signal/js/alert/NAlertElement.ts +4 -2
  98. package/src/signal/js/confirm/NConfirmElement.ts +4 -4
  99. package/src/signal/js/notify/NNotifyElement.ts +1 -1
  100. package/src/switch/js/switch/NSwitchController.ts +20 -4
  101. package/src/table/css/table.scss +39 -6
  102. package/src/table/js/table/NTable.ts +3 -0
  103. package/src/table/js/table/NTableController.ts +6 -4
  104. package/src/table/js/table/NTableView.ts +62 -14
  105. package/src/table/js/table-cell/NTableCellImage.ts +1 -1
  106. package/src/table/js/table-cell/NTableCellOption.ts +1 -1
  107. package/src/table/js/table-column/NTableColumn.ts +7 -0
  108. package/src/table/js/table-column/NTableColumnData.ts +5 -0
  109. package/src/table/js/table-filter/NTableFilterOption.ts +5 -7
  110. package/src/table/js/table-filter/NTableFilterString.ts +1 -1
  111. package/src/tabs/js/tabs/NTabsController.ts +5 -1
  112. package/src/tabs/js/tabs/NTabsView.ts +4 -0
  113. package/src/tabs/js/tabs-item/NTabsItemController.ts +17 -3
  114. package/src/tabs/js/tabs-item/NTabsItemView.ts +12 -9
  115. package/src/transfer/js/transfer/NTransferController.ts +14 -10
  116. package/src/transfer/js/transfer/NTransferView.ts +2 -2
  117. package/src/visuals/css/message.scss +99 -0
  118. package/src/visuals/css/progress.scss +39 -0
  119. package/src/visuals/index.scss +2 -0
  120. package/src/visuals/index.ts +4 -0
  121. package/src/visuals/js/message/NMessage.ts +65 -0
  122. package/src/visuals/js/message/NMessageController.ts +96 -0
  123. package/src/visuals/js/message/NMessageData.ts +43 -0
  124. package/src/visuals/js/message/NMessageView.ts +101 -0
  125. package/src/visuals/js/progress/NProgress.ts +63 -0
  126. package/src/visuals/js/progress/NProgressController.ts +48 -0
  127. package/src/visuals/js/progress/NProgressData.ts +75 -0
  128. package/src/visuals/js/progress/NProgressView.ts +48 -0
  129. package/themes/default/checkbox/src/checkbox/checkbox.scss +13 -0
  130. package/themes/default/input-number/src/input-number/input-number.scss +6 -13
  131. package/themes/default/preview/src/preview/preview.scss +11 -2
  132. package/themes/default/radio/src/radio/radio.scss +13 -0
  133. package/themes/default/root/vars/colors-dark-bluish.scss +1 -0
  134. package/themes/default/root/vars/colors-dark.scss +1 -0
  135. package/themes/default/root/vars/colors-light-bluish.scss +2 -1
  136. package/themes/default/root/vars/colors-light.scss +2 -1
  137. package/themes/default/scrollbar/src/scrollbar/scrollbar.scss +1 -1
@@ -1,6 +1,6 @@
1
1
  import { h } from "vue";
2
- import { Arr, Mix } from "@kizmann/pico-js";
3
- import { ProtoView, Styler } from "../../../root/index.ts";
2
+ import { Arr, Mix, Obj } from "@kizmann/pico-js";
3
+ import { Pointer, ProtoView, Styler } from "../../../root/index.ts";
4
4
  import { NPreviewController } from "./NPreviewController.ts";
5
5
 
6
6
  export class NPreviewView extends ProtoView
@@ -65,9 +65,8 @@ export class NPreviewView extends ProtoView
65
65
  props.class, classList,
66
66
  ]);
67
67
 
68
- props.onPointerup = (e) => {
69
- e.stopPropagation();
70
- if ( data.preview ) scope.openPreview();
68
+ props.onClick = (e : any) => {
69
+ if ( e.which === 1 && data.preview ) scope.openPreview();
71
70
  };
72
71
 
73
72
  const preview = this.preview({
@@ -155,13 +154,10 @@ export class NPreviewView extends ProtoView
155
154
  let { data } = this.scope;
156
155
 
157
156
  let slots = [
158
- this.mime()
157
+ this.mime(),
158
+ this.path(),
159
159
  ];
160
160
 
161
- if ( fullscreen ) {
162
- slots.push(this.path());
163
- }
164
-
165
161
  if ( fullscreen ) {
166
162
  slots.push(this.link());
167
163
  }
@@ -177,7 +173,11 @@ export class NPreviewView extends ProtoView
177
173
  {
178
174
  let { data } = this.scope;
179
175
 
180
- if ( ! Mix.isStr(data.safeFile) ) {
176
+ const path = Obj.get(...[
177
+ data.safeFile, 'name', data.safeFile
178
+ ]);
179
+
180
+ if ( ! Mix.isStr(path) ) {
181
181
  return null;
182
182
  }
183
183
 
@@ -189,9 +189,12 @@ export class NPreviewView extends ProtoView
189
189
  class: data.classPart('path')
190
190
  };
191
191
 
192
- return h('li', props, [data.safeFile]);
192
+ return h('li', props, [
193
+ path.replace(/(.*?)([^\/]+)$/, '$2')
194
+ ]);
193
195
  }
194
196
 
197
+
195
198
  mime() : any
196
199
  {
197
200
  let { data } = this.scope;
@@ -1,7 +1,7 @@
1
1
  import { h } from "vue";
2
2
 
3
3
  export const NPreviewFileModule = ({ scope, full }) => {
4
- return h('ul', {}, [scope.view.meta(full)]);
4
+ return scope.view.meta(full);
5
5
  };
6
6
 
7
7
  export default NPreviewFileModule;
@@ -28,18 +28,10 @@
28
28
  margin-left: size('base-pad', 'calc($ * 1.2)');
29
29
  }
30
30
 
31
- .n-radio-group.n-radio-group--horizontal .n-radio:last-child {
32
- padding-right: 0;
33
- }
34
-
35
31
  .n-radio-group.n-radio-group--vertical .n-radio {
36
32
  min-height: 0;
37
33
  }
38
34
 
39
35
  .n-radio-group.n-radio-group--vertical .n-radio:not(:first-child) {
40
36
  margin-top: size('base-pad-vertical', 'calc($ * 0.7)');
41
- }
42
-
43
- .n-radio-group.n-radio-group--vertical .n-radio:last-child {
44
- padding-bottom: 0;
45
37
  }
@@ -47,3 +47,9 @@
47
47
  .n-radio .n-radio__label {
48
48
  padding-left: size('base-pad', 'calc($ * 0.8)');
49
49
  }
50
+
51
+ .n-radio.n-radio--button {
52
+ padding: size('base-pad-vertical') size('base-pad');
53
+ border: 1px solid transparent;
54
+ border-radius: size('base-rad');
55
+ }
@@ -9,10 +9,17 @@ export const NRadioProps = {
9
9
  ...Props.Disabled,
10
10
 
11
11
  /**
12
- * @type {PropType<null|string>}
12
+ * @type {PropType<null|string|number|boolean>}
13
13
  */
14
14
  value: {
15
- type: [String], default: 'undefined'
15
+ type: [String,Number,Boolean], default: 'undefined'
16
+ },
17
+
18
+ /**
19
+ * @type {PropType<string>}
20
+ */
21
+ view: {
22
+ type: [String], default: 'checkbox'
16
23
  },
17
24
 
18
25
  };
@@ -11,7 +11,9 @@ export class NRadioData extends ProtoData
11
11
 
12
12
  get classList() : string[]
13
13
  {
14
- let classList = this.classRoot();
14
+ let classList = this.classRoot([
15
+ `:bem--${this.view}`,
16
+ ]);
15
17
 
16
18
  if ( this.model === this.value ) {
17
19
  Arr.append(classList, 'n-checked');
@@ -30,4 +32,9 @@ export class NRadioData extends ProtoData
30
32
  return this.scope.get('value');
31
33
  }
32
34
 
35
+ get view() : string
36
+ {
37
+ return this.scope.ncx('group')?.data.view || this.scope.get('view');
38
+ }
39
+
33
40
  }
@@ -10,10 +10,17 @@ export const NRadioGroupProps = {
10
10
  ...Props.AlignHorizontal,
11
11
 
12
12
  /**
13
- * @type {PropType<string|number>}
13
+ * @type {PropType<string|number|boolean>}
14
14
  */
15
15
  modelValue: {
16
- type: [String,Number], default: ''
16
+ type: [String,Number,Boolean], default: ''
17
+ },
18
+
19
+ /**
20
+ * @type {PropType<string>}
21
+ */
22
+ view: {
23
+ type: [String], default: 'checkbox'
17
24
  },
18
25
 
19
26
  };
@@ -29,4 +29,9 @@ export class NRadioGroupData extends ProtoData
29
29
  return this.scope.get('align');
30
30
  }
31
31
 
32
+ get view() : string
33
+ {
34
+ return this.scope.get('view');
35
+ }
36
+
32
37
  }
@@ -15,6 +15,10 @@
15
15
  width: 6px;
16
16
  }
17
17
 
18
+ .n-resizer.n-disabled > .n-resizer__handle {
19
+ display: none !important;
20
+ }
21
+
18
22
  .n-resizer.n-move > .n-resizer__handle {
19
23
  z-index: 99999;
20
24
  }
@@ -122,7 +122,11 @@ export class NResizerController extends ProtoController
122
122
  target = Math.min(target, data.maxWidth);
123
123
  }
124
124
 
125
- target = data.width = Math.round(target);
125
+ target = Math.round(target);
126
+
127
+ if ( target > 0 ) {
128
+ this.set('width', target);
129
+ }
126
130
 
127
131
  if ( data.direction === 'right' ) {
128
132
  return target;
@@ -24,69 +24,34 @@ export class NResizerData extends ProtoData
24
24
  return this.scope.get('modelValue');
25
25
  }
26
26
 
27
- set model(value : number)
28
- {
29
- this.scope.set('modelValue', value);
30
- }
31
-
32
27
  get width() : number
33
28
  {
34
29
  return this.scope.get('width');
35
30
  }
36
31
 
37
- set width(value : number)
38
- {
39
- this.scope.set('width', value);
40
- }
41
-
42
32
  get minWidth() : number
43
33
  {
44
34
  return this.scope.get('minWidth');
45
35
  }
46
36
 
47
- set minWidth(value : number)
48
- {
49
- this.scope.set('minWidth', value);
50
- }
51
-
52
37
  get maxWidth() : number
53
38
  {
54
39
  return this.scope.get('maxWidth');
55
40
  }
56
41
 
57
- set maxWidth(value : number)
58
- {
59
- this.scope.set('maxWidth', value);
60
- }
61
-
62
42
  get group() : any[]
63
43
  {
64
44
  return this.scope.get('group');
65
45
  }
66
46
 
67
- set group(value : any[])
68
- {
69
- this.scope.set('group', value);
70
- }
71
-
72
47
  get flex() : string
73
48
  {
74
49
  return this.scope.get('flex');
75
50
  }
76
51
 
77
- set flex(value : string)
78
- {
79
- this.scope.set('flex', value);
80
- }
81
-
82
52
  get direction() : string
83
53
  {
84
54
  return this.scope.get('direction');
85
55
  }
86
56
 
87
- set direction(value : string)
88
- {
89
- this.scope.set('direction', value);
90
- }
91
-
92
57
  }
@@ -59,6 +59,10 @@ export class NResizerView extends ProtoView
59
59
  name: 'handle', ref: scope.ref('handle'),
60
60
  };
61
61
 
62
+ props.onClick = (e : any) => {
63
+ e.stopPropagation();
64
+ };
65
+
62
66
  props.onPointerdown = (e : any) => {
63
67
  scope.onPointerdown(e);
64
68
  };
@@ -1,5 +1,6 @@
1
1
  @use "sass:color";
2
2
  @use "sass:string";
3
+ @use "sass:math";
3
4
 
4
5
  @mixin css-colors($colors, $prefix: '') {
5
6
  @each $name, $color in $colors {
@@ -39,3 +40,22 @@
39
40
  @function size($size, $context: '$') {
40
41
  @return string.unquote(string-replace($context, "$", "var(--n-size-#{$size})"));
41
42
  };
43
+
44
+ @function fixed-number($number) {
45
+ @return math.div(math.round($number * 1000), 1000);
46
+ }
47
+
48
+ @function to-space-fixed($color, $space: rgb) {
49
+
50
+ $target: color.to-space($color, $space);
51
+
52
+ @if $space != rgb {
53
+ @return $target;
54
+ }
55
+
56
+ $r: fixed-number(color.channel($target, 'red'));
57
+ $g: fixed-number(color.channel($target, 'green'));
58
+ $b: fixed-number(color.channel($target, 'blue'));
59
+
60
+ @return color.change($target, $space: $space, $red: $r, $green: $g, $blue: $b);
61
+ }
@@ -5,20 +5,16 @@
5
5
  }
6
6
 
7
7
  [data-tooltip=""]:before,
8
- [data-tooltip-ltr=""]:before,
9
- [data-tooltip-rtl=""]:before,
8
+ [data-tooltip-inv=""]:before,
10
9
  [data-tooltip=""]:after,
11
- [data-tooltip-ltr=""]:after,
12
- [data-tooltip-rtl=""]:after {
10
+ [data-tooltip-inv=""]:after {
13
11
  display: none !important;
14
12
  }
15
13
 
16
14
  [data-tooltip]:before,
17
- [data-tooltip-ltr]:before,
18
- [data-tooltip-rtl]:before,
15
+ [data-tooltip-inv]:before,
19
16
  [data-tooltip]:after,
20
- [data-tooltip-ltr]:after,
21
- [data-tooltip-rtl]:after {
17
+ [data-tooltip-inv]:after {
22
18
  z-index: 999999999;
23
19
  position: absolute;
24
20
  display: inline-flex;
@@ -26,50 +22,50 @@
26
22
  visibility: hidden;
27
23
  }
28
24
 
29
- [data-tooltip]:before,
30
- [data-tooltip-ltr]:before,
31
- [data-tooltip-rtl]:before {
25
+ [data-tooltip]:before {
32
26
  bottom: calc(100% + 5px);
27
+ }
28
+
29
+ [data-tooltip-inv]:before {
30
+ top: calc(100% + 5px);
31
+ }
32
+
33
+ [data-tooltip]:before,
34
+ [data-tooltip-inv]:before {
33
35
  padding: size('base-pad-vertical', 'calc($ * 0.5)') size('base-pad');
34
36
  font-size: size('base-fnt-label');
35
37
  border-radius: size('base-rad');
36
38
  }
37
39
 
38
40
  [data-tooltip]:after,
39
- [data-tooltip-ltr]:after,
40
- [data-tooltip-rtl]:after {
41
+ [data-tooltip-inv]:after {
41
42
  content: '\00a0';
42
- bottom: 100%;
43
43
  width: 28px;
44
44
  height: 6px;
45
45
  }
46
46
 
47
- [data-tooltip]:before {
48
- content: attr(data-tooltip);
49
- }
50
-
51
- [data-tooltip]:before,
52
47
  [data-tooltip]:after {
53
- left: 50%;
54
- transform: translateX(-50%);
48
+ bottom: 100%;
55
49
  }
56
50
 
57
- [data-tooltip-ltr]:before {
58
- content: attr(data-tooltip-ltr);
51
+ [data-tooltip-inv]:after {
52
+ top: 100%;
59
53
  }
60
54
 
61
- [data-tooltip-ltr]:before,
62
- [data-tooltip-ltr]:after {
63
- left: 0;
55
+ [data-tooltip]:before{
56
+ content: attr(data-tooltip);
64
57
  }
65
58
 
66
- [data-tooltip-rtl]:before {
67
- content: attr(data-tooltip-rtl);
59
+ [data-tooltip-inv]:before {
60
+ content: attr(data-tooltip-inv);
68
61
  }
69
62
 
70
- [data-tooltip-rtl]:before,
71
- [data-tooltip-rtl]:after {
72
- right: 0;
63
+ [data-tooltip]:before,
64
+ [data-tooltip-inv]:before,
65
+ [data-tooltip]:after,
66
+ [data-tooltip-inv]:after {
67
+ left: 50%;
68
+ transform: translateX(-50%);
73
69
  }
74
70
 
75
71
  [data-tooltip]:hover:before,
@@ -80,37 +76,31 @@
80
76
  visibility: visible;
81
77
  }
82
78
 
83
- [data-tooltip-ltr]:hover:before,
84
- [data-tooltip-ltr]:hover:after,
85
- [data-tooltip-ltr].n-move:before,
86
- [data-tooltip-ltr].n-move:after,
87
- [data-tooltip-rtl]:hover:before,
88
- [data-tooltip-rtl]:hover:after,
89
- [data-tooltip-rtl].n-move:before,
90
- [data-tooltip-rtl].n-move:after {
79
+ [data-tooltip-inv]:hover:before,
80
+ [data-tooltip-inv]:hover:after,
81
+ [data-tooltip-inv].n-move:before,
82
+ [data-tooltip-inv].n-move:after {
91
83
  opacity: 1;
92
84
  visibility: visible;
93
- transform: translateY(0);
94
85
  }
95
86
 
96
87
  [data-tooltip]:before,
97
- [data-tooltip-ltr]:before,
98
- [data-tooltip-rtl]:before,
88
+ [data-tooltip-inv]:before,
99
89
  [data-tooltip]:after,
100
- [data-tooltip-ltr]:after,
101
- [data-tooltip-rtl]:after {
90
+ [data-tooltip-inv]:after {
102
91
  background: color('tooltip', 0.95);
103
92
  transition: opacity 0.2s;
104
93
  }
105
94
 
106
95
  [data-tooltip]:before,
107
- [data-tooltip-ltr]:before,
108
- [data-tooltip-rtl]:before {
96
+ [data-tooltip-inv]:before {
109
97
  color: color('white');
110
98
  }
111
99
 
112
- [data-tooltip]:after,
113
- [data-tooltip-ltr]:after,
114
- [data-tooltip-rtl]:after {
100
+ [data-tooltip]:after{
115
101
  mask: svg-load('angle-down.svg') no-repeat center 0 / contain;
102
+ }
103
+
104
+ [data-tooltip-inv]:after {
105
+ mask: svg-load('angle-up.svg') no-repeat center 0 / contain;
116
106
  }
@@ -17,7 +17,7 @@ export class GroupController extends ProtoController
17
17
 
18
18
  get childs() : any
19
19
  {
20
- return this._childs.value;
20
+ return this._childs?.value ?? [];
21
21
  }
22
22
 
23
23
  set childs(value : any)
@@ -39,6 +39,14 @@ export class DragData
39
39
  return this.scope.get('expanded');
40
40
  }
41
41
 
42
+ /**
43
+ * @returns {any[]}
44
+ */
45
+ get cascade() : any[]
46
+ {
47
+ return this.scope.get('cascade');
48
+ }
49
+
42
50
  /**
43
51
  * @returns {any[]}
44
52
  */
@@ -1,4 +1,5 @@
1
1
  import { Arr, Dom, For, Mix, Obj, Run } from "@kizmann/pico-js";
2
+ import * as fs from "node:fs";
2
3
 
3
4
  export class Pointer
4
5
  {
@@ -29,6 +30,11 @@ export class Pointer
29
30
  clientX: 0, clientY: 0
30
31
  };
31
32
 
33
+ /**
34
+ * @type {any[]}
35
+ */
36
+ static waiter : any[] = [];
37
+
32
38
  static init() : Pointer
33
39
  {
34
40
  const el = Dom.find(window);
@@ -234,6 +240,18 @@ export class Pointer
234
240
  return index !== -1 && index !== this.chains.length - 1;
235
241
  }
236
242
 
243
+ static wait(cb : Function)
244
+ {
245
+ Arr.append(this.waiter, Run.delay(cb, 250));
246
+ }
247
+
248
+ static stop()
249
+ {
250
+ this.waiter = Arr.filter(this.waiter, (clear : Function) => {
251
+ return clear(), false;
252
+ });
253
+ }
254
+
237
255
  }
238
256
 
239
257
  if ( !globalThis.NPointer ) {
@@ -116,4 +116,8 @@ export class Styler
116
116
 
117
117
  }
118
118
 
119
+ if ( ! globalThis.NStyler ) {
120
+ globalThis.NStyler = Styler;
121
+ }
122
+
119
123
  export default Styler;
@@ -77,6 +77,17 @@ export const ClearValue = {
77
77
 
78
78
  };
79
79
 
80
+ export const ThemeNone = {
81
+
82
+ /**
83
+ * @type {PropType<string>}
84
+ */
85
+ theme: {
86
+ type: [String], default: null
87
+ },
88
+
89
+ };
90
+
80
91
  export const ThemeDark = {
81
92
 
82
93
  /**
@@ -87,3 +98,25 @@ export const ThemeDark = {
87
98
  },
88
99
 
89
100
  };
101
+
102
+ export const EmptyPropsInline = {
103
+
104
+ /**
105
+ * @type {PropType<object>}
106
+ */
107
+ emptyProps: {
108
+ type: [Object], default: () => ({ inline: true })
109
+ },
110
+
111
+ };
112
+
113
+ export const EmptyPropsStacked = {
114
+
115
+ /**
116
+ * @type {PropType<object>}
117
+ */
118
+ emptyProps: {
119
+ type: [Object], default: () => ({ inline: false })
120
+ },
121
+
122
+ };
@@ -30,6 +30,13 @@ export const Draglist = {
30
30
  type: [Array], default: () => []
31
31
  },
32
32
 
33
+ /**
34
+ * @type {PropType<array>}
35
+ */
36
+ cascade: {
37
+ type: [Array], default: () => []
38
+ },
39
+
33
40
  /**
34
41
  * @type {PropType<array>}
35
42
  */
@@ -116,6 +116,7 @@ export class ProtoView
116
116
  scope.applyClear();
117
117
  scope.set('search', '');
118
118
  scope.ref('input')?.value?.focus();
119
+ scope.emit('clear');
119
120
  };
120
121
 
121
122
  return this.div(config, [
@@ -138,8 +139,10 @@ export class ProtoView
138
139
  {
139
140
  const { scope } = this.scope;
140
141
 
141
- const props = {
142
- ...options, emptyText: scope.get('emptyText')
142
+ let props : any = scope.get('emptyProps') || {};
143
+
144
+ props = {
145
+ emptyText: scope.get('emptyText'), ...props, ...options
143
146
  };
144
147
 
145
148
  return this.div('empty', [
@@ -3,6 +3,7 @@
3
3
  .n-scrollbar {
4
4
  position: relative;
5
5
  overflow: clip;
6
+ //overflow: hidden;
6
7
  scrollbar-gutter: stable;
7
8
  }
8
9
 
@@ -10,12 +11,16 @@ body.n-drag .n-scrollbar {
10
11
  overflow: hidden !important;
11
12
  }
12
13
 
14
+ .n-scrollbar .n-scrollbar__empty {
15
+ padding: size('base-pad', 'calc($ * 3)') size('base-pad');
16
+ }
17
+
13
18
  .n-scrollbar.is-paused .n-table__wrap {
14
19
  display: flex;
15
20
  }
16
21
 
17
22
  .n-scrollbar-spacer {
18
- display: inline-block;
23
+ display: block;
19
24
  }
20
25
 
21
26
  .n-scrollbar-content {
@@ -172,6 +172,10 @@ export class NScrollbarElement
172
172
 
173
173
  fireScroll()
174
174
  {
175
+ this.el.el.setAttribute('data-scolled', ...[
176
+ this.cl.el.scrollTop != 0
177
+ ]);
178
+
175
179
  Dom.find(window).fire('virtualscroll', {
176
180
  target: this.cl.el,
177
181
  });
@@ -4,6 +4,9 @@ import { NVirtualbarController } from "./NVirtualbarController.ts";
4
4
 
5
5
  export const NVirtualbarProps = {
6
6
 
7
+ ...Props.EmptyText,
8
+ ...Props.EmptyPropsStacked,
9
+
7
10
  /**
8
11
  * @type {PropType<array>}
9
12
  */
@@ -104,7 +104,7 @@ export class NVirtualbarController extends ProtoController
104
104
  const { el, data } = this;
105
105
 
106
106
  let [grid, width] : [number, number] = [
107
- 1, el.clientWidth
107
+ 1, el?.clientWidth || 0
108
108
  ];
109
109
 
110
110
  if ( data.grid ) {