sard-uniapp 1.24.6 → 1.24.7

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 (211) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/components/action-sheet/action-sheet.d.ts +8 -1
  3. package/components/action-sheet/common.d.ts +99 -2
  4. package/components/alert/alert.d.ts +6 -0
  5. package/components/alert/common.d.ts +63 -1
  6. package/components/avatar/avatar.d.ts +8 -0
  7. package/components/avatar/common.d.ts +99 -1
  8. package/components/avatar-group/avatar-group.d.ts +6 -1
  9. package/components/avatar-group/common.d.ts +63 -2
  10. package/components/back-top/back-top.d.ts +4 -0
  11. package/components/back-top/common.d.ts +40 -1
  12. package/components/badge/badge.d.ts +7 -0
  13. package/components/badge/common.d.ts +99 -2
  14. package/components/button/button.d.ts +22 -0
  15. package/components/button/common.d.ts +960 -8
  16. package/components/calendar/calendar.d.ts +16 -1
  17. package/components/calendar/common.d.ts +360 -3
  18. package/components/calendar-input/calendar-input.d.ts +31 -2
  19. package/components/calendar-input/common.d.ts +1368 -7
  20. package/components/calendar-popout/calendar-popout.d.ts +22 -2
  21. package/components/calendar-popout/common.d.ts +675 -5
  22. package/components/cascader-input/cascader-input.d.ts +25 -0
  23. package/components/cascader-input/common.d.ts +783 -3
  24. package/components/cascader-popout/cascader-popout.d.ts +14 -0
  25. package/components/cascader-popout/common.d.ts +288 -2
  26. package/components/checkbox/checkbox.d.ts +11 -0
  27. package/components/checkbox/common.d.ts +323 -3
  28. package/components/checkbox-group/checkbox-group.d.ts +10 -0
  29. package/components/checkbox-input/checkbox-input.d.ts +28 -1
  30. package/components/checkbox-input/common.d.ts +960 -4
  31. package/components/checkbox-popout/checkbox-popout.d.ts +19 -1
  32. package/components/checkbox-popout/common.d.ts +460 -2
  33. package/components/config/index.d.ts +150 -482
  34. package/components/config/index.js +16 -34
  35. package/components/cool-icon/common.d.ts +63 -1
  36. package/components/cool-icon/cool-icon.d.ts +6 -0
  37. package/components/count-down/common.d.ts +48 -3
  38. package/components/count-down/count-down.d.ts +3 -0
  39. package/components/count-to/common.d.ts +35 -4
  40. package/components/count-to/count-to.d.ts +1 -0
  41. package/components/crop-image/common.d.ts +288 -4
  42. package/components/crop-image/crop-image.d.ts +12 -0
  43. package/components/crop-image-agent/common.d.ts +288 -5
  44. package/components/crop-image-agent/crop-image-agent.d.ts +11 -0
  45. package/components/datetime-picker/common.d.ts +120 -2
  46. package/components/datetime-picker/datetime-picker.d.ts +9 -1
  47. package/components/datetime-picker-input/common.d.ts +783 -4
  48. package/components/datetime-picker-input/datetime-picker-input.d.ts +23 -0
  49. package/components/datetime-picker-popout/common.d.ts +288 -3
  50. package/components/datetime-picker-popout/datetime-picker-popout.d.ts +13 -0
  51. package/components/datetime-range-picker/common.d.ts +143 -1
  52. package/components/datetime-range-picker/datetime-range-picker.d.ts +10 -0
  53. package/components/datetime-range-picker-input/common.d.ts +840 -3
  54. package/components/datetime-range-picker-input/datetime-range-picker-input.d.ts +25 -0
  55. package/components/datetime-range-picker-popout/common.d.ts +323 -2
  56. package/components/datetime-range-picker-popout/datetime-range-picker-popout.d.ts +15 -0
  57. package/components/dialog/common.d.ts +360 -6
  58. package/components/dialog/dialog.d.ts +16 -3
  59. package/components/dialog-agent/common.d.ts +1023 -7
  60. package/components/dialog-agent/dialog-agent.d.ts +28 -3
  61. package/components/divider/common.d.ts +48 -3
  62. package/components/divider/divider.d.ts +4 -1
  63. package/components/dropdown/common.d.ts +99 -5
  64. package/components/dropdown/dropdown.d.ts +7 -3
  65. package/components/empty/common.d.ts +48 -1
  66. package/components/empty/empty.d.ts +5 -0
  67. package/components/fab/common.d.ts +619 -7
  68. package/components/fab/fab.d.ts +20 -2
  69. package/components/floating-bubble/common.d.ts +153 -4
  70. package/components/floating-bubble/floating-bubble.d.ts +10 -1
  71. package/components/floating-panel/common.d.ts +63 -3
  72. package/components/floating-panel/floating-panel.d.ts +4 -0
  73. package/components/form/README.md +11 -12
  74. package/components/form/common.d.ts +304 -1
  75. package/components/form/form.d.ts +12 -1
  76. package/components/form-item/form-item.d.ts +15 -0
  77. package/components/form-item/useFormItem.d.ts +1 -1
  78. package/components/form-item-plain/form-item-plain.d.ts +15 -0
  79. package/components/form-item-plain/form-item-plain.vue +7 -3
  80. package/components/form-plain/common.d.ts +0 -1
  81. package/components/form-plain/form-plain.d.ts +12 -1
  82. package/components/grid/common.d.ts +99 -2
  83. package/components/grid/grid.d.ts +8 -1
  84. package/components/icon/common.d.ts +63 -3
  85. package/components/icon/icon.d.ts +5 -1
  86. package/components/indexes/common.d.ts +1 -0
  87. package/components/indexes/indexes.vue +2 -1
  88. package/components/input/common.d.ts +2400 -14
  89. package/components/input/input.d.ts +36 -2
  90. package/components/keyboard/common.d.ts +24 -2
  91. package/components/keyboard/keyboard.d.ts +2 -0
  92. package/components/list/common.d.ts +168 -1
  93. package/components/list-item/list-item.d.ts +11 -0
  94. package/components/loading/common.d.ts +117 -1
  95. package/components/loading/loading.d.ts +8 -0
  96. package/components/locale/lang/ar-SA.d.ts +2 -0
  97. package/components/locale/lang/ar-SA.js +2 -0
  98. package/components/locale/lang/en-US.d.ts +2 -0
  99. package/components/locale/lang/en-US.js +2 -0
  100. package/components/locale/lang/zh-CN.d.ts +2 -0
  101. package/components/locale/lang/zh-CN.js +2 -0
  102. package/components/marquee/common.d.ts +35 -3
  103. package/components/marquee/marquee.d.ts +2 -0
  104. package/components/notice-bar/common.d.ts +195 -4
  105. package/components/notice-bar/notice-bar.d.ts +10 -1
  106. package/components/notify/common.d.ts +143 -4
  107. package/components/notify/notify.d.ts +8 -1
  108. package/components/notify-agent/common.d.ts +483 -5
  109. package/components/notify-agent/notify-agent.d.ts +18 -1
  110. package/components/overlay/common.d.ts +63 -1
  111. package/components/overlay/overlay.d.ts +6 -0
  112. package/components/pagination/common.d.ts +143 -6
  113. package/components/pagination/pagination.d.ts +6 -1
  114. package/components/password-input/common.d.ts +168 -3
  115. package/components/password-input/password-input.d.ts +9 -0
  116. package/components/picker/common.d.ts +46 -1
  117. package/components/picker/picker.d.ts +5 -0
  118. package/components/picker-input/common.d.ts +599 -4
  119. package/components/picker-input/picker-input.d.ts +21 -1
  120. package/components/picker-popout/common.d.ts +181 -3
  121. package/components/picker-popout/picker-popout.d.ts +10 -0
  122. package/components/popout/common.d.ts +288 -6
  123. package/components/popout/popout.d.ts +11 -1
  124. package/components/popout-input/common.d.ts +181 -2
  125. package/components/popout-input/popout-input.d.ts +11 -0
  126. package/components/popover/common.d.ts +168 -7
  127. package/components/popover/popover.d.ts +8 -3
  128. package/components/popup/common.d.ts +168 -4
  129. package/components/popup/popup.d.ts +10 -2
  130. package/components/progress-bar/common.d.ts +143 -2
  131. package/components/progress-bar/progress-bar.d.ts +9 -0
  132. package/components/progress-circle/common.d.ts +80 -2
  133. package/components/progress-circle/progress-circle.d.ts +6 -0
  134. package/components/pull-down-refresh/common.d.ts +100 -8
  135. package/components/pull-down-refresh/pull-down-refresh.d.ts +3 -1
  136. package/components/qrcode/common.d.ts +168 -8
  137. package/components/qrcode/qrcode.d.ts +4 -0
  138. package/components/radio/common.d.ts +155 -2
  139. package/components/radio-group/radio-group.d.ts +10 -0
  140. package/components/radio-input/common.d.ts +869 -5
  141. package/components/radio-input/radio-input.d.ts +26 -1
  142. package/components/radio-popout/common.d.ts +397 -3
  143. package/components/radio-popout/radio-popout.d.ts +17 -1
  144. package/components/rate/common.d.ts +360 -4
  145. package/components/rate/rate.d.ts +15 -1
  146. package/components/read-more/common.d.ts +80 -1
  147. package/components/read-more/read-more.d.ts +7 -0
  148. package/components/resize-sensor/common.d.ts +24 -1
  149. package/components/resize-sensor/resize-sensor.d.ts +3 -0
  150. package/components/result/common.d.ts +80 -1
  151. package/components/result/result.d.ts +7 -0
  152. package/components/scroll-spy/README.md +9 -8
  153. package/components/scroll-spy/common.d.ts +1 -0
  154. package/components/scroll-spy/scroll-spy.vue +4 -2
  155. package/components/search/common.d.ts +224 -2
  156. package/components/search/search.d.ts +12 -0
  157. package/components/segmented/common.d.ts +131 -4
  158. package/components/segmented/segmented.d.ts +8 -1
  159. package/components/share-sheet/common.d.ts +120 -2
  160. package/components/share-sheet/share-sheet.d.ts +9 -1
  161. package/components/signature/common.d.ts +255 -7
  162. package/components/signature/signature.d.ts +9 -1
  163. package/components/skeleton/common.d.ts +120 -2
  164. package/components/skeleton/skeleton.d.ts +8 -0
  165. package/components/slider/common.d.ts +528 -4
  166. package/components/slider/slider.d.ts +18 -0
  167. package/components/space/common.d.ts +63 -2
  168. package/components/space/space.d.ts +5 -0
  169. package/components/status-bar/common.d.ts +24 -1
  170. package/components/status-bar/status-bar.d.ts +3 -0
  171. package/components/stepper/common.d.ts +360 -9
  172. package/components/stepper/stepper.d.ts +10 -1
  173. package/components/steps/common.d.ts +224 -8
  174. package/components/steps/steps.d.ts +6 -0
  175. package/components/swiper-dot/common.d.ts +63 -4
  176. package/components/swiper-dot/swiper-dot.d.ts +3 -0
  177. package/components/switch/common.d.ts +153 -3
  178. package/components/switch/switch.d.ts +10 -0
  179. package/components/tabbar/common.d.ts +80 -1
  180. package/components/tabbar/tabbar.d.ts +7 -0
  181. package/components/table/common.d.ts +35 -2
  182. package/components/table/table.d.ts +4 -1
  183. package/components/tabs/README.md +4 -3
  184. package/components/tabs/common.d.ts +49 -1
  185. package/components/tabs/index.scss +2 -1
  186. package/components/tabs/tabs.d.ts +5 -0
  187. package/components/tabs/tabs.vue +3 -1
  188. package/components/tag/common.d.ts +120 -2
  189. package/components/tag/tag.d.ts +8 -0
  190. package/components/toast/common.d.ts +120 -6
  191. package/components/toast/toast.d.ts +6 -2
  192. package/components/toast-agent/common.d.ts +440 -7
  193. package/components/toast-agent/toast-agent.d.ts +16 -2
  194. package/components/tree/README.md +34 -20
  195. package/components/tree/common.d.ts +391 -3
  196. package/components/tree/common.js +1 -0
  197. package/components/tree/index.scss +13 -0
  198. package/components/tree/tree.d.ts +16 -1
  199. package/components/tree/tree.vue +71 -22
  200. package/components/tree/variables.scss +4 -0
  201. package/components/tree-node/index.scss +6 -0
  202. package/components/tree-node/tree-node.vue +46 -12
  203. package/components/upload/common.d.ts +195 -1
  204. package/components/upload/upload.d.ts +13 -1
  205. package/components/upload-preview/upload-preview.d.ts +12 -0
  206. package/components/waterfall/common.d.ts +35 -3
  207. package/components/waterfall/waterfall.d.ts +2 -0
  208. package/components/watermark/common.d.ts +143 -5
  209. package/components/watermark/watermark.d.ts +7 -1
  210. package/package.json +1 -1
  211. package/use/useScrollSpy.js +5 -1
@@ -1,5 +1,18 @@
1
1
  <template>
2
2
  <view :class="treeClass" :style="treeStyle">
3
+ <view v-if="lazy && !!load" :class="bem.e('load-status')">
4
+ <sar-loading v-if="loadStatus === 'loading'" />
5
+ <text
6
+ v-else-if="loadStatus === 'error'"
7
+ :class="bem.e('error')"
8
+ @click="onErrorClick"
9
+ >
10
+ {{ t('error') }}
11
+ </text>
12
+ <text v-else-if="loadStatus === 'loaded' && treeData.length === 0">
13
+ {{ t('noData') }}
14
+ </text>
15
+ </view>
3
16
  <template v-for="(node, index) of treeData" :key="node.key">
4
17
  <sar-tree-node v-if="node.visible" :index="index" :node="node" />
5
18
  </template>
@@ -49,6 +62,7 @@ import {
49
62
  } from "./common";
50
63
  import SarTreeNode from "../tree-node/tree-node.vue";
51
64
  import SarPopover from "../popover/popover.vue";
65
+ import SarLoading from "../loading/loading.vue";
52
66
  import { usePopover } from "../popover";
53
67
  import SarInput from "../input/input.vue";
54
68
  import SarDialog from "../dialog/dialog.vue";
@@ -73,6 +87,8 @@ import { recurAncestor, recurDescendant, recurNodes } from "./utils";
73
87
  * @property {boolean} editable 是否可编辑节点(增删改),默认值:false。
74
88
  * @property {'lenient' | 'strict'} filterMode 节点过滤模式,默认值:'lenient'。
75
89
  * @property {(value: string, node: TreeStateNode) => boolean} filterMethod 自定义过滤方法,默认值:-。
90
+ * @property {boolean} lazy 是否懒加载子节点,需与 load 方法结合使用,默认值:false。
91
+ * @property {(node?: TreeStateNode) => Promise<TreeNode[]> | TreeNode[]} load 加载子树数据的方法,仅当 lazy 属性为true 时生效,默认值:-。
76
92
  * @event {(key: string | number, node: TreeStateNode) => void} update 选择节点后触发(单选)
77
93
  * @event {(key: string | number, node: TreeStateNode) => void} select 选择节点后触发(单选)
78
94
  * @event {(event: {checked: boolean; node: TreeStateNode}) => void} check 点击树节点复选框时触发
@@ -82,6 +98,7 @@ export default _defineComponent({
82
98
  components: {
83
99
  SarTreeNode,
84
100
  SarPopover,
101
+ SarLoading,
85
102
  SarInput,
86
103
  SarDialog,
87
104
  SarToast,
@@ -110,7 +127,9 @@ export default _defineComponent({
110
127
  draggable: { type: Boolean, required: false },
111
128
  editable: { type: Boolean, required: false },
112
129
  filterMode: { type: String, required: false },
113
- filterMethod: { type: Function, required: false }
130
+ filterMethod: { type: Function, required: false },
131
+ lazy: { type: Boolean, required: false },
132
+ load: { type: Function, required: false }
114
133
  }, defaultTreeProps()),
115
134
  emits: ["update:current", "select", "check", "node-click"],
116
135
  setup(__props, { expose: __expose, emit: __emit }) {
@@ -124,7 +143,7 @@ export default _defineComponent({
124
143
  const treeData = ref([]);
125
144
  let treeMap = {};
126
145
  const totalLevel = ref(0);
127
- const recurRawNode = (nodes, parent) => {
146
+ const toTreeStateNodes = (nodes, parent) => {
128
147
  return nodes.map((node) => {
129
148
  const key = node[fieldKeys.value.key] ?? uniqid();
130
149
  const stateNode = reactive({
@@ -137,10 +156,13 @@ export default _defineComponent({
137
156
  level: 0,
138
157
  offsetLevel: 0,
139
158
  visible: true,
140
- disabled: !!node.disabled
159
+ disabled: !!node.disabled,
160
+ isLeaf: node[fieldKeys.value.isLeaf],
161
+ loadStatus: "idle",
162
+ depth: parent ? parent.depth + 1 : 0
141
163
  });
142
164
  if (node.children && node.children.length) {
143
- stateNode.children = recurRawNode(node.children, stateNode);
165
+ stateNode.children = toTreeStateNodes(node.children, stateNode);
144
166
  }
145
167
  treeMap[key] = stateNode;
146
168
  return stateNode;
@@ -388,17 +410,18 @@ export default _defineComponent({
388
410
  };
389
411
  const setRenderPosition = () => {
390
412
  let count = 0;
391
- function recur(nodes) {
413
+ function recur(nodes, parent) {
392
414
  nodes.forEach((node) => {
415
+ node.depth = parent ? parent.depth + 1 : 0;
393
416
  if (node.visible) {
394
417
  node.level = count++;
395
418
  }
396
419
  if (node.children && node.expanded) {
397
- recur(node.children);
420
+ recur(node.children, node);
398
421
  }
399
422
  });
400
423
  }
401
- recur(treeData.value);
424
+ recur(treeData.value, null);
402
425
  totalLevel.value = count;
403
426
  };
404
427
  const toggleCheck = (node, checked) => {
@@ -408,22 +431,41 @@ export default _defineComponent({
408
431
  node
409
432
  });
410
433
  };
434
+ const loadStatus = ref("loaded");
435
+ const initialize = async () => {
436
+ if (props.lazy && props.load) {
437
+ try {
438
+ loadStatus.value = "loading";
439
+ const data = await props.load();
440
+ loadStatus.value = "loaded";
441
+ initializeTree(data);
442
+ } catch {
443
+ loadStatus.value = "error";
444
+ }
445
+ } else {
446
+ initializeTree(props.data);
447
+ }
448
+ };
449
+ const initializeTree = (data) => {
450
+ treeData.value = toTreeStateNodes(data, null);
451
+ if (props.defaultCheckedKeys && props.defaultCheckedKeys.length > 0) {
452
+ setCheckedKeys(props.defaultCheckedKeys);
453
+ }
454
+ if (props.defaultExpandedKeys && props.defaultExpandedKeys.length > 0) {
455
+ setExpandedKeys(props.defaultExpandedKeys);
456
+ }
457
+ setRenderPosition();
458
+ };
459
+ const onErrorClick = () => {
460
+ initialize();
461
+ };
411
462
  watch(
412
463
  () => props.data,
413
464
  () => {
414
- treeData.value = recurRawNode(props.data, null);
415
- if (props.defaultCheckedKeys && props.defaultCheckedKeys.length > 0) {
416
- setCheckedKeys(props.defaultCheckedKeys);
417
- }
418
- if (props.defaultExpandedKeys && props.defaultExpandedKeys.length > 0) {
419
- setExpandedKeys(props.defaultExpandedKeys);
420
- }
421
- setRenderPosition();
422
- },
423
- {
424
- immediate: true
465
+ initializeTree(props.data);
425
466
  }
426
467
  );
468
+ initialize();
427
469
  const popoverOptions = [
428
470
  { id: "sibling", icon: "plus", text: t("addSibling") },
429
471
  { id: "child", icon: "plus", text: t("addChild") },
@@ -482,7 +524,10 @@ export default _defineComponent({
482
524
  level: 0,
483
525
  offsetLevel: 0,
484
526
  visible: true,
485
- disabled: false
527
+ disabled: false,
528
+ isLeaf: false,
529
+ loadStatus: "idle",
530
+ depth: 0
486
531
  });
487
532
  switch (currentEditType.value) {
488
533
  case "sibling":
@@ -568,6 +613,8 @@ export default _defineComponent({
568
613
  singleSelectable: toRef(() => props.singleSelectable),
569
614
  leafOnly: toRef(() => props.leafOnly),
570
615
  treeData: toRef(() => treeData.value),
616
+ load: toRef(() => props.load),
617
+ lazy: toRef(() => props.lazy),
571
618
  setExpandedByNode,
572
619
  toggleExpandedByNode,
573
620
  setCheckedByNode,
@@ -578,7 +625,9 @@ export default _defineComponent({
578
625
  edit,
579
626
  currentKey,
580
627
  singleSelect,
581
- nodeClick
628
+ nodeClick,
629
+ toTreeStateNodes,
630
+ setRenderPosition
582
631
  });
583
632
  provide(treeContextSymbol, context);
584
633
  __expose({
@@ -609,11 +658,11 @@ export default _defineComponent({
609
658
  return treeMap;
610
659
  }, set treeMap(v) {
611
660
  treeMap = v;
612
- }, totalLevel, recurRawNode, setExpandedByNode, toggleExpandedByNode, setExpanded, toggleExpanded, setExpandedKeys, getExpandedKeys, setCheckedByNode, updateAncestorChecked, setCheckedKeys, setChecked, getCheckedKeys, getHalfCheckedKeys, prepend, append, appendRoot, before, after, remove, levelup, leveldown, drop, addRootNode, getCleanTreeData, setRenderPosition, toggleCheck, popoverOptions, popover, get currentEditNode() {
661
+ }, totalLevel, toTreeStateNodes, setExpandedByNode, toggleExpandedByNode, setExpanded, toggleExpanded, setExpandedKeys, getExpandedKeys, setCheckedByNode, updateAncestorChecked, setCheckedKeys, setChecked, getCheckedKeys, getHalfCheckedKeys, prepend, append, appendRoot, before, after, remove, levelup, leveldown, drop, addRootNode, getCleanTreeData, setRenderPosition, toggleCheck, loadStatus, initialize, initializeTree, onErrorClick, popoverOptions, popover, get currentEditNode() {
613
662
  return currentEditNode;
614
663
  }, set currentEditNode(v) {
615
664
  currentEditNode = v;
616
- }, currentEditType, currentEditValue, mapEditTypeTitle, currentEditTitle, dialogVisible, toastVisible, onPopoverSelect, beforeClose, edit, focused, onVisibleHook, defaultFilterMethod, filter, currentKey, singleSelect, nodeClick, context, treeClass, treeStyle, SarTreeNode, SarPopover, SarInput, SarDialog, SarToast };
665
+ }, currentEditType, currentEditValue, mapEditTypeTitle, currentEditTitle, dialogVisible, toastVisible, onPopoverSelect, beforeClose, edit, focused, onVisibleHook, defaultFilterMethod, filter, currentKey, singleSelect, nodeClick, context, treeClass, treeStyle, SarTreeNode, SarPopover, SarLoading, SarInput, SarDialog, SarToast };
617
666
  return __returned__;
618
667
  }
619
668
  });
@@ -4,6 +4,9 @@ page,
4
4
  --sar-tree-border-color: var(--sar-border-color);
5
5
  --sar-tree-bg: var(--sar-emphasis-bg);
6
6
  --sar-tree-duration: var(--sar-duration);
7
+ --sar-tree-loading-size: var(--sar-text-base);
8
+ --sar-tree-loading-color: var(--sar-fourth-color);
9
+ --sar-tree-loading-margin-y: 20rpx;
7
10
 
8
11
  --sar-tree-node-height: 80rpx;
9
12
  --sar-tree-node-padding-x: 32rpx;
@@ -12,6 +15,7 @@ page,
12
15
  --sar-tree-node-active-bg: var(--sar-active-bg);
13
16
  --sar-tree-node-dragging-bg: var(--sar-mask-white-legible);
14
17
  --sar-tree-node-dragging-shadow: var(--sar-shadow-dragging);
18
+ --sar-tree-node-loading-margin-right: 16rpx;
15
19
 
16
20
  --sar-tree-toolbar-margin-right: -24rpx;
17
21
 
@@ -52,6 +52,12 @@
52
52
  }
53
53
  }
54
54
 
55
+ @include e(loading) {
56
+ margin-right: var(--sar-tree-node-loading-margin-right);
57
+ font-size: var(--sar-tree-loading-size);
58
+ color: var(--sar-tree-loading-color);
59
+ }
60
+
55
61
  @include e(selection) {
56
62
  @include universal;
57
63
  margin: calc(var(--sar-tree-node-padding-y) * -1) 0
@@ -12,6 +12,10 @@
12
12
  <view :class="arrowClass">
13
13
  <sar-icon family="sari" name="right" />
14
14
  </view>
15
+ <sar-loading
16
+ v-if="node.loadStatus === 'loading'"
17
+ :class="bem.e('loading')"
18
+ />
15
19
  <view
16
20
  v-if="treeContext.selectable || canSingleSelectable"
17
21
  :class="selectionClass"
@@ -75,7 +79,12 @@
75
79
  </view>
76
80
 
77
81
  <template
78
- v-if="!isLeaf && node.expanded && node.children && node.children.length > 0"
82
+ v-if="
83
+ !isMergedLeaf &&
84
+ node.expanded &&
85
+ node.children &&
86
+ node.children.length > 0
87
+ "
79
88
  >
80
89
  <template v-for="(node, index) of node.children" :key="node.key">
81
90
  <sar-tree-node v-if="node.visible" :index="index" :node="node" />
@@ -265,21 +274,46 @@ export default _defineComponent({
265
274
  break;
266
275
  }
267
276
  };
268
- const isLeaf = computed(() => {
269
- return !props.node.children || props.node.children.length === 0;
277
+ const isMergedLeaf = computed(() => {
278
+ const { children, isLeaf } = props.node;
279
+ return treeContext.lazy && treeContext.load ? isLeaf : !children || children.length === 0;
270
280
  });
271
- const onNodeClick = (event) => {
272
- if (!isLeaf.value) {
273
- treeContext.toggleExpandedByNode(props.node);
281
+ const onNodeClick = async (event) => {
282
+ const node = props.node;
283
+ const { loadStatus, isLeaf } = node;
284
+ if (loadStatus === "loading") {
285
+ return;
286
+ }
287
+ if (treeContext.lazy && treeContext.load && !isLeaf && loadStatus === "idle") {
288
+ try {
289
+ node.loadStatus = "loading";
290
+ const treeNodes = await treeContext.load(node) || [];
291
+ node.loadStatus = "loaded";
292
+ node.children = treeContext.toTreeStateNodes(treeNodes, node);
293
+ if (node.children.length === 0) {
294
+ node.isLeaf = true;
295
+ } else {
296
+ treeContext.setRenderPosition();
297
+ if (node.checked) {
298
+ treeContext.setCheckedByNode(props.node, true);
299
+ }
300
+ }
301
+ } catch {
302
+ node.loadStatus = "idle";
303
+ return;
304
+ }
305
+ }
306
+ if (!isMergedLeaf.value) {
307
+ treeContext.toggleExpandedByNode(node);
274
308
  }
275
309
  if (canSingleSelectable.value && treeContext.leafOnly) {
276
- treeContext.singleSelect(props.node);
310
+ treeContext.singleSelect(node);
277
311
  }
278
- treeContext.nodeClick(props.node, event);
312
+ treeContext.nodeClick(node, event);
279
313
  };
280
314
  const nodeActive = ref(false);
281
315
  const onNodeTouchStart = () => {
282
- if (!isLeaf.value || canSingleSelectable.value && treeContext.leafOnly) {
316
+ if (!isMergedLeaf.value || canSingleSelectable.value && treeContext.leafOnly) {
283
317
  nodeActive.value = true;
284
318
  }
285
319
  };
@@ -292,7 +326,7 @@ export default _defineComponent({
292
326
  onNodeTouchEnd
293
327
  );
294
328
  const canSingleSelectable = computed(() => {
295
- return treeContext.singleSelectable && (!treeContext.leafOnly || isLeaf.value);
329
+ return treeContext.singleSelectable && (!treeContext.leafOnly || isMergedLeaf.value);
296
330
  });
297
331
  const isSingleChecked = computed(
298
332
  () => props.node.key === treeContext.currentKey
@@ -353,7 +387,7 @@ export default _defineComponent({
353
387
  return classNames(
354
388
  bem.e("arrow"),
355
389
  bem.em("arrow", "expanded", props.node.expanded),
356
- bem.em("arrow", "is-leaf", isLeaf.value)
390
+ bem.em("arrow", "is-leaf", isMergedLeaf.value)
357
391
  );
358
392
  });
359
393
  const selectionClass = computed(() => {
@@ -378,7 +412,7 @@ export default _defineComponent({
378
412
  return obviousNodes;
379
413
  }, set obviousNodes(v) {
380
414
  obviousNodes = v;
381
- }, onDragStart, onDragMove, onDragEnd, onDragSimulatedClickTouchStart, onDragSimulatedClickTouchEnd, onDragSimulatedPressTouchStart, onDragSimulatedPressTouchMove, onDragSimulatedPressTouchEnd, onDragTouchStart, onDragTouchMove, onDragTouchEnd, onDragMouseDown, dragId, popover, isLastNode, popoverOptions, onPopoverSelect, isLeaf, onNodeClick, nodeActive, onNodeTouchStart, onNodeTouchEnd, onNodeMouseDown, canSingleSelectable, isSingleChecked, onSelectionTouchStart, onSelectionTouchEnd, onSelectionMouseDown, editId, getEditRect, onEditTouchStart, onEditTouchEnd, onEditMouseDown, nodeClass, nodeStyle, editClass, indentStyle, arrowClass, selectionClass, SarIcon, SarCheckbox, SarRadio, SarPopover };
415
+ }, onDragStart, onDragMove, onDragEnd, onDragSimulatedClickTouchStart, onDragSimulatedClickTouchEnd, onDragSimulatedPressTouchStart, onDragSimulatedPressTouchMove, onDragSimulatedPressTouchEnd, onDragTouchStart, onDragTouchMove, onDragTouchEnd, onDragMouseDown, dragId, popover, isLastNode, popoverOptions, onPopoverSelect, isMergedLeaf, onNodeClick, nodeActive, onNodeTouchStart, onNodeTouchEnd, onNodeMouseDown, canSingleSelectable, isSingleChecked, onSelectionTouchStart, onSelectionTouchEnd, onSelectionMouseDown, editId, getEditRect, onEditTouchStart, onEditTouchEnd, onEditMouseDown, nodeClass, nodeStyle, editClass, indentStyle, arrowClass, selectionClass, SarIcon, SarCheckbox, SarRadio, SarPopover };
382
416
  return __returned__;
383
417
  }
384
418
  });
@@ -80,7 +80,201 @@ export interface UploadPreviewProps {
80
80
  readonly?: boolean;
81
81
  }
82
82
  export declare const defaultUploadPreviewProps: {
83
- status: UploadPreviewProps["status"];
83
+ rootStyle?: (string | false | ((props: {
84
+ rootStyle: StyleValue;
85
+ rootClass: string;
86
+ file: UploadFile;
87
+ url: string;
88
+ isImage: boolean;
89
+ isVideo: boolean;
90
+ status: UploadStatus;
91
+ name: string;
92
+ message: string;
93
+ removable: boolean;
94
+ index: number;
95
+ disabled: boolean;
96
+ readonly: boolean;
97
+ }) => string | false | import("vue").CSSProperties | StyleValue[]) | null) | undefined;
98
+ rootClass?: (string | ((props: {
99
+ rootStyle: StyleValue;
100
+ rootClass: string;
101
+ file: UploadFile;
102
+ url: string;
103
+ isImage: boolean;
104
+ isVideo: boolean;
105
+ status: UploadStatus;
106
+ name: string;
107
+ message: string;
108
+ removable: boolean;
109
+ index: number;
110
+ disabled: boolean;
111
+ readonly: boolean;
112
+ }) => string)) | undefined;
113
+ file?: ((props: {
114
+ rootStyle: StyleValue;
115
+ rootClass: string;
116
+ file: UploadFile;
117
+ url: string;
118
+ isImage: boolean;
119
+ isVideo: boolean;
120
+ status: UploadStatus;
121
+ name: string;
122
+ message: string;
123
+ removable: boolean;
124
+ index: number;
125
+ disabled: boolean;
126
+ readonly: boolean;
127
+ }) => UploadFile) | undefined;
128
+ url?: (string | ((props: {
129
+ rootStyle: StyleValue;
130
+ rootClass: string;
131
+ file: UploadFile;
132
+ url: string;
133
+ isImage: boolean;
134
+ isVideo: boolean;
135
+ status: UploadStatus;
136
+ name: string;
137
+ message: string;
138
+ removable: boolean;
139
+ index: number;
140
+ disabled: boolean;
141
+ readonly: boolean;
142
+ }) => string)) | undefined;
143
+ isImage?: (boolean | ((props: {
144
+ rootStyle: StyleValue;
145
+ rootClass: string;
146
+ file: UploadFile;
147
+ url: string;
148
+ isImage: boolean;
149
+ isVideo: boolean;
150
+ status: UploadStatus;
151
+ name: string;
152
+ message: string;
153
+ removable: boolean;
154
+ index: number;
155
+ disabled: boolean;
156
+ readonly: boolean;
157
+ }) => boolean)) | undefined;
158
+ isVideo?: (boolean | ((props: {
159
+ rootStyle: StyleValue;
160
+ rootClass: string;
161
+ file: UploadFile;
162
+ url: string;
163
+ isImage: boolean;
164
+ isVideo: boolean;
165
+ status: UploadStatus;
166
+ name: string;
167
+ message: string;
168
+ removable: boolean;
169
+ index: number;
170
+ disabled: boolean;
171
+ readonly: boolean;
172
+ }) => boolean)) | undefined;
173
+ status?: (UploadStatus | ((props: {
174
+ rootStyle: StyleValue;
175
+ rootClass: string;
176
+ file: UploadFile;
177
+ url: string;
178
+ isImage: boolean;
179
+ isVideo: boolean;
180
+ status: UploadStatus;
181
+ name: string;
182
+ message: string;
183
+ removable: boolean;
184
+ index: number;
185
+ disabled: boolean;
186
+ readonly: boolean;
187
+ }) => "done" | "pending" | "uploading" | "failed")) | undefined;
188
+ name?: (string | ((props: {
189
+ rootStyle: StyleValue;
190
+ rootClass: string;
191
+ file: UploadFile;
192
+ url: string;
193
+ isImage: boolean;
194
+ isVideo: boolean;
195
+ status: UploadStatus;
196
+ name: string;
197
+ message: string;
198
+ removable: boolean;
199
+ index: number;
200
+ disabled: boolean;
201
+ readonly: boolean;
202
+ }) => string)) | undefined;
203
+ message?: (string | ((props: {
204
+ rootStyle: StyleValue;
205
+ rootClass: string;
206
+ file: UploadFile;
207
+ url: string;
208
+ isImage: boolean;
209
+ isVideo: boolean;
210
+ status: UploadStatus;
211
+ name: string;
212
+ message: string;
213
+ removable: boolean;
214
+ index: number;
215
+ disabled: boolean;
216
+ readonly: boolean;
217
+ }) => string)) | undefined;
218
+ removable?: (boolean | ((props: {
219
+ rootStyle: StyleValue;
220
+ rootClass: string;
221
+ file: UploadFile;
222
+ url: string;
223
+ isImage: boolean;
224
+ isVideo: boolean;
225
+ status: UploadStatus;
226
+ name: string;
227
+ message: string;
228
+ removable: boolean;
229
+ index: number;
230
+ disabled: boolean;
231
+ readonly: boolean;
232
+ }) => boolean)) | undefined;
233
+ index?: (number | ((props: {
234
+ rootStyle: StyleValue;
235
+ rootClass: string;
236
+ file: UploadFile;
237
+ url: string;
238
+ isImage: boolean;
239
+ isVideo: boolean;
240
+ status: UploadStatus;
241
+ name: string;
242
+ message: string;
243
+ removable: boolean;
244
+ index: number;
245
+ disabled: boolean;
246
+ readonly: boolean;
247
+ }) => number)) | undefined;
248
+ disabled?: (boolean | ((props: {
249
+ rootStyle: StyleValue;
250
+ rootClass: string;
251
+ file: UploadFile;
252
+ url: string;
253
+ isImage: boolean;
254
+ isVideo: boolean;
255
+ status: UploadStatus;
256
+ name: string;
257
+ message: string;
258
+ removable: boolean;
259
+ index: number;
260
+ disabled: boolean;
261
+ readonly: boolean;
262
+ }) => boolean)) | undefined;
263
+ readonly?: (boolean | ((props: {
264
+ rootStyle: StyleValue;
265
+ rootClass: string;
266
+ file: UploadFile;
267
+ url: string;
268
+ isImage: boolean;
269
+ isVideo: boolean;
270
+ status: UploadStatus;
271
+ name: string;
272
+ message: string;
273
+ removable: boolean;
274
+ index: number;
275
+ disabled: boolean;
276
+ readonly: boolean;
277
+ }) => boolean)) | undefined;
84
278
  };
85
279
  export interface UploadPreviewEmits {
86
280
  (e: 'image-click'): void;
@@ -1,4 +1,4 @@
1
- import { type UploadProps, type UploadSlots, type UploadFile, type UploadFileItem } from './common';
1
+ import { type UploadProps, type UploadSlots, type UploadFile, type UploadFileItem, type UploadSelectOptions } from './common';
2
2
  declare function __VLS_template(): Readonly<UploadSlots> & UploadSlots;
3
3
  declare const __VLS_component: import("vue").DefineComponent<UploadProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
4
4
  "update:model-value": (value: UploadFileItem[]) => any;
@@ -11,11 +11,23 @@ declare const __VLS_component: import("vue").DefineComponent<UploadProps, {}, {}
11
11
  onRemove?: ((index: number, item: UploadFileItem) => any) | undefined;
12
12
  "onItem-click"?: ((item: UploadFileItem, index: number) => any) | undefined;
13
13
  }>, {
14
+ multiple: boolean;
15
+ rootStyle: string | false | import("vue").CSSProperties | import("vue").StyleValue[] | null;
16
+ rootClass: string;
17
+ modelValue: UploadFileItem[];
18
+ disabled: boolean;
19
+ readonly: boolean;
14
20
  validateEvent: boolean;
21
+ camera: "back" | "front";
15
22
  maxDuration: number;
16
23
  maxCount: number;
17
24
  maxSize: number | ((file: UploadFile) => boolean);
25
+ overSize: (fileItem: UploadFileItem[]) => void;
26
+ beforeChoose: (fileList: UploadFileItem[], next: (allowed: boolean | UploadSelectOptions) => void) => void;
27
+ beforeRead: (file: UploadFile) => boolean | Promise<UploadFile>;
28
+ afterRead: (fileItem: UploadFileItem) => void;
18
29
  removable: boolean;
30
+ beforeRemove: (index: number, fileItem: UploadFileItem) => boolean | Promise<void>;
19
31
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
32
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
21
33
  export default _default;
@@ -8,6 +8,18 @@ declare const _default: import("vue").DefineComponent<UploadPreviewProps, {}, {}
8
8
  onRemove?: (() => any) | undefined;
9
9
  "onImage-click"?: (() => any) | undefined;
10
10
  }>, {
11
+ file: import("../upload/common").UploadFile;
12
+ name: string;
13
+ url: string;
14
+ rootStyle: string | false | import("vue").CSSProperties | import("vue").StyleValue[] | null;
15
+ rootClass: string;
16
+ message: string;
11
17
  status: import("../upload/common").UploadStatus;
18
+ disabled: boolean;
19
+ readonly: boolean;
20
+ index: number;
21
+ isImage: boolean;
22
+ isVideo: boolean;
23
+ removable: boolean;
12
24
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
25
  export default _default;
@@ -8,9 +8,41 @@ export interface WaterfallProps {
8
8
  rowGap?: number;
9
9
  }
10
10
  export declare const defaultWaterfallProps: {
11
- columns: number;
12
- columnGap: number;
13
- rowGap: number;
11
+ rootStyle?: (string | false | ((props: {
12
+ rootStyle: StyleValue;
13
+ rootClass: string;
14
+ columns: number;
15
+ columnGap: number;
16
+ rowGap: number;
17
+ }) => string | false | import("vue").CSSProperties | StyleValue[]) | null) | undefined;
18
+ rootClass?: (string | ((props: {
19
+ rootStyle: StyleValue;
20
+ rootClass: string;
21
+ columns: number;
22
+ columnGap: number;
23
+ rowGap: number;
24
+ }) => string)) | undefined;
25
+ columns?: (number | ((props: {
26
+ rootStyle: StyleValue;
27
+ rootClass: string;
28
+ columns: number;
29
+ columnGap: number;
30
+ rowGap: number;
31
+ }) => number)) | undefined;
32
+ columnGap?: (number | ((props: {
33
+ rootStyle: StyleValue;
34
+ rootClass: string;
35
+ columns: number;
36
+ columnGap: number;
37
+ rowGap: number;
38
+ }) => number)) | undefined;
39
+ rowGap?: (number | ((props: {
40
+ rootStyle: StyleValue;
41
+ rootClass: string;
42
+ columns: number;
43
+ columnGap: number;
44
+ rowGap: number;
45
+ }) => number)) | undefined;
14
46
  };
15
47
  export interface WaterfallSlots {
16
48
  default?(props: Record<string, never>): any;
@@ -10,6 +10,8 @@ declare const __VLS_component: import("vue").DefineComponent<WaterfallProps, {
10
10
  onLoad?: (() => any) | undefined;
11
11
  onLoadstart?: (() => any) | undefined;
12
12
  }>, {
13
+ rootStyle: string | false | import("vue").CSSProperties | import("vue").StyleValue[] | null;
14
+ rootClass: string;
13
15
  columns: number;
14
16
  columnGap: number;
15
17
  rowGap: number;