sard-uniapp 1.11.2 → 1.12.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 (194) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +3 -2
  3. package/components/action-sheet/action-sheet.vue +8 -2
  4. package/components/action-sheet/index.scss +1 -1
  5. package/components/back-top/back-top.d.ts +1 -1
  6. package/components/badge/badge.vue +1 -1
  7. package/components/button/button.d.ts +1 -0
  8. package/components/button/button.vue +3 -0
  9. package/components/button/common.d.ts +3 -0
  10. package/components/button/index.scss +6 -1
  11. package/components/calendar/calendar.d.ts +1 -1
  12. package/components/calendar/calendar.vue +49 -22
  13. package/components/calendar/index.scss +5 -5
  14. package/components/calendar/variables.scss +1 -1
  15. package/components/calendar-input/calendar-input.d.ts +1 -1
  16. package/components/calendar-month/index.scss +1 -0
  17. package/components/cascader/cascader.d.ts +6 -6
  18. package/components/cascader/cascader.vue +9 -4
  19. package/components/cascader/common.d.ts +3 -3
  20. package/components/cascader/index.scss +1 -0
  21. package/components/checkbox-input/checkbox-input.vue +59 -32
  22. package/components/checkbox-input/index.scss +4 -0
  23. package/components/config/index.d.ts +23 -0
  24. package/components/config/index.js +47 -18
  25. package/components/crop-image/common.d.ts +32 -0
  26. package/components/crop-image/common.js +2 -0
  27. package/components/crop-image/crop-image.d.ts +19 -0
  28. package/components/crop-image/crop-image.vue +666 -0
  29. package/components/crop-image/index.d.ts +1 -0
  30. package/components/crop-image/index.scss +81 -0
  31. package/components/crop-image-agent/common.d.ts +19 -0
  32. package/components/crop-image-agent/common.js +16 -0
  33. package/components/crop-image-agent/crop-image-agent.d.ts +9 -0
  34. package/components/crop-image-agent/crop-image-agent.vue +70 -0
  35. package/components/crop-image-agent/index.d.ts +1 -0
  36. package/components/crop-image-agent/index.js +1 -0
  37. package/components/datetime-picker-input/datetime-picker-input.vue +4 -4
  38. package/components/datetime-range-picker/datetime-range-picker.vue +4 -3
  39. package/components/datetime-range-picker-input/datetime-range-picker-input.vue +4 -4
  40. package/components/dialog/common.d.ts +2 -3
  41. package/components/dialog/dialog.d.ts +6 -13
  42. package/components/dialog/dialog.vue +15 -4
  43. package/components/dialog-agent/dialog-agent.d.ts +1 -1
  44. package/components/dropdown-item/dropdown-item.vue +6 -6
  45. package/components/fab/fab.d.ts +1 -1
  46. package/components/floating-bubble/floating-bubble.vue +14 -19
  47. package/components/form-item/form-item.vue +4 -3
  48. package/components/grid/common.d.ts +4 -0
  49. package/components/grid-item/grid-item.vue +33 -18
  50. package/components/grid-item/index.scss +12 -4
  51. package/components/icon/index.scss +1 -0
  52. package/components/icon/sari.scss +9 -1
  53. package/components/indexes/common.d.ts +3 -5
  54. package/components/indexes/indexes.d.ts +2 -0
  55. package/components/indexes/indexes.vue +45 -109
  56. package/components/indexes-anchor/indexes-anchor.vue +9 -9
  57. package/components/indexes-nav/indexes-nav.vue +26 -22
  58. package/components/input/input.d.ts +4 -4
  59. package/components/loading/index.scss +1 -1
  60. package/components/locale/lang/en-US.d.ts +9 -0
  61. package/components/locale/lang/en-US.js +9 -0
  62. package/components/locale/lang/zh-CN.d.ts +9 -0
  63. package/components/locale/lang/zh-CN.js +9 -0
  64. package/components/navbar/common.d.ts +12 -0
  65. package/components/navbar/index.scss +17 -10
  66. package/components/navbar/navbar.d.ts +5 -1
  67. package/components/navbar/navbar.vue +45 -15
  68. package/components/navbar/variables.scss +4 -1
  69. package/components/navbar-item/index.scss +10 -0
  70. package/components/navbar-item/navbar-item.vue +27 -4
  71. package/components/navbar-pit/navbar-pit.d.ts +2 -0
  72. package/components/navbar-pit/navbar-pit.vue +22 -0
  73. package/components/notify/common.d.ts +1 -0
  74. package/components/notify/index.scss +12 -7
  75. package/components/notify/notify.vue +9 -3
  76. package/components/notify-agent/notify-agent.vue +9 -11
  77. package/components/pagination/pagination.d.ts +1 -1
  78. package/components/picker-input/picker-input.vue +4 -4
  79. package/components/popout/common.d.ts +2 -3
  80. package/components/popout/popout.d.ts +5 -12
  81. package/components/popout/popout.vue +16 -5
  82. package/components/popover/utils.js +2 -4
  83. package/components/popover-reference/popover-reference.vue +3 -3
  84. package/components/popup/common.d.ts +5 -3
  85. package/components/popup/index.scss +25 -3
  86. package/components/popup/popup.d.ts +1 -1
  87. package/components/pull-down-refresh/pull-down-refresh.d.ts +1 -1
  88. package/components/qrcode/qrcode.d.ts +1 -1
  89. package/components/qrcode/qrcode.vue +4 -7
  90. package/components/radio-input/index.scss +5 -1
  91. package/components/radio-input/radio-input.vue +59 -32
  92. package/components/scroll-spy/common.d.ts +29 -0
  93. package/components/scroll-spy/common.js +1 -0
  94. package/components/scroll-spy/index.d.ts +1 -0
  95. package/components/scroll-spy/index.js +1 -0
  96. package/components/scroll-spy/scroll-spy.d.ts +28 -0
  97. package/components/scroll-spy/scroll-spy.vue +120 -0
  98. package/components/scroll-spy-anchor/common.d.ts +13 -0
  99. package/components/scroll-spy-anchor/index.d.ts +1 -0
  100. package/components/scroll-spy-anchor/index.js +1 -0
  101. package/components/scroll-spy-anchor/scroll-spy-anchor.d.ts +10 -0
  102. package/components/scroll-spy-anchor/scroll-spy-anchor.vue +50 -0
  103. package/components/search/search.vue +2 -0
  104. package/components/share-sheet/share-sheet.vue +3 -2
  105. package/components/sidebar/common.d.ts +28 -0
  106. package/components/sidebar/common.js +1 -0
  107. package/components/sidebar/index.d.ts +1 -0
  108. package/components/sidebar/index.js +1 -0
  109. package/components/sidebar/index.scss +15 -0
  110. package/components/sidebar/sidebar.d.ts +16 -0
  111. package/components/sidebar/sidebar.vue +136 -0
  112. package/components/sidebar/variables.scss +20 -0
  113. package/components/sidebar-item/common.d.ts +16 -0
  114. package/components/sidebar-item/common.js +1 -0
  115. package/components/sidebar-item/index.d.ts +1 -0
  116. package/components/sidebar-item/index.js +1 -0
  117. package/components/sidebar-item/index.scss +70 -0
  118. package/components/sidebar-item/sidebar-item.d.ts +14 -0
  119. package/components/sidebar-item/sidebar-item.vue +111 -0
  120. package/components/signature/common.d.ts +41 -0
  121. package/components/signature/common.js +2 -0
  122. package/components/signature/index.d.ts +1 -0
  123. package/components/signature/index.js +1 -0
  124. package/components/signature/index.scss +109 -0
  125. package/components/signature/signature.d.ts +32 -0
  126. package/components/signature/signature.vue +580 -0
  127. package/components/signature/variables-dark.scss +7 -0
  128. package/components/signature/variables.scss +9 -0
  129. package/components/status-bar/common.d.ts +17 -0
  130. package/components/status-bar/common.js +2 -0
  131. package/components/status-bar/index.d.ts +1 -0
  132. package/components/status-bar/index.js +1 -0
  133. package/components/status-bar/index.scss +7 -0
  134. package/components/status-bar/status-bar.d.ts +12 -0
  135. package/components/status-bar/status-bar.vue +56 -0
  136. package/components/style/mixins/ellipsis.scss +7 -0
  137. package/components/style/mixins/scroll-shadow.scss +40 -0
  138. package/components/style/mixins.scss +1 -0
  139. package/components/style/variables.scss +3 -0
  140. package/components/swiper-dot/swiper-dot.d.ts +1 -1
  141. package/components/tab/tab.vue +4 -3
  142. package/components/tabbar/common.d.ts +1 -0
  143. package/components/tabbar/tabbar.d.ts +2 -0
  144. package/components/tabbar/tabbar.vue +2 -1
  145. package/components/table-cell/index.scss +1 -2
  146. package/components/table-fixation/table-fixation.vue +16 -8
  147. package/components/tree-node/tree-node.vue +3 -3
  148. package/components/upload/upload.vue +3 -2
  149. package/dark.scss +1 -0
  150. package/global.d.ts +9 -0
  151. package/index.d.ts +8 -0
  152. package/index.js +8 -0
  153. package/index.scss +2 -0
  154. package/package.json +28 -24
  155. package/use/index.d.ts +4 -0
  156. package/use/index.js +4 -0
  157. package/use/useDragPinch.d.ts +15 -0
  158. package/use/useDragPinch.js +88 -0
  159. package/use/useImperative.js +1 -0
  160. package/use/useInitialVelocity.d.ts +13 -0
  161. package/use/useInitialVelocity.js +65 -0
  162. package/use/useMouseDown.js +3 -4
  163. package/use/useScrollSide.d.ts +6 -0
  164. package/use/useScrollSide.js +34 -0
  165. package/use/useScrollSpy.d.ts +19 -0
  166. package/use/useScrollSpy.js +99 -0
  167. package/use/useTimeoutLoading.d.ts +6 -0
  168. package/use/useTimeoutLoading.js +53 -0
  169. package/use/useZIndex.js +7 -3
  170. package/utils/bem.d.ts +8 -8
  171. package/utils/dom.d.ts +3 -69
  172. package/utils/dom.js +32 -109
  173. package/utils/file.d.ts +1 -0
  174. package/utils/file.js +14 -0
  175. package/utils/geometry.d.ts +67 -0
  176. package/utils/geometry.js +127 -0
  177. package/utils/index.d.ts +2 -0
  178. package/utils/index.js +2 -0
  179. package/utils/inertialAnimate.d.ts +10 -0
  180. package/utils/inertialAnimate.js +42 -0
  181. package/utils/is.d.ts +8 -0
  182. package/utils/is.js +8 -0
  183. package/utils/system.d.ts +2 -0
  184. package/utils/system.js +6 -3
  185. package/utils/utils.d.ts +7 -0
  186. package/utils/utils.js +13 -0
  187. package/components/_template/_template.d.ts +0 -16
  188. package/components/_template/_template.vue +0 -45
  189. package/components/_template/common.d.ts +0 -14
  190. package/components/_template/index.d.ts +0 -1
  191. package/components/_template/index.scss +0 -17
  192. package/components/_template/variables.scss +0 -5
  193. /package/components/{_template → crop-image}/index.js +0 -0
  194. /package/components/{_template → scroll-spy-anchor}/common.js +0 -0
@@ -6,21 +6,24 @@
6
6
  :style="stringifyStyle(contentStyle)"
7
7
  @click="onClick"
8
8
  >
9
- <slot>
10
- <view :class="bem.e('icon')">
11
- <slot name="icon">
12
- <sar-icon
13
- :name="icon"
14
- :color="iconColor"
15
- :size="iconSize"
16
- :family="iconFamily"
17
- />
18
- </slot>
19
- </view>
20
- <view :class="bem.e('text')">
21
- <slot name="text">{{ text }}</slot>
22
- </view>
23
- </slot>
9
+ <view :class="bem.e('main')">
10
+ <slot>
11
+ <view :class="bem.e('icon')">
12
+ <slot name="icon">
13
+ <sar-icon
14
+ :name="icon"
15
+ :color="iconColor"
16
+ :size="iconSize"
17
+ :family="iconFamily"
18
+ />
19
+ </slot>
20
+ </view>
21
+ <view :class="bem.e('text')">
22
+ <slot name="text">{{ text }}</slot>
23
+ </view>
24
+ </slot>
25
+ <sar-badge v-bind="mergedBadgeProps" fixed />
26
+ </view>
24
27
  </view>
25
28
  </view>
26
29
  </view>
@@ -34,9 +37,11 @@ import {
34
37
  gridSymbol
35
38
  } from "../grid/common";
36
39
  import SarIcon from "../icon/icon.vue";
40
+ import SarBadge from "../badge/badge.vue";
37
41
  export default _defineComponent({
38
42
  components: {
39
43
  SarIcon,
44
+ SarBadge,
40
45
  },
41
46
  ...{
42
47
  options: {
@@ -54,7 +59,10 @@ export default _defineComponent({
54
59
  icon: { type: String, required: false },
55
60
  iconSize: { type: String, required: false },
56
61
  iconColor: { type: String, required: false },
57
- iconFamily: { type: String, required: false }
62
+ iconFamily: { type: String, required: false },
63
+ dot: { type: Boolean, required: false },
64
+ badge: { type: [Number, String], required: false },
65
+ badgeProps: { type: Object, required: false }
58
66
  },
59
67
  emits: ["click"],
60
68
  setup(__props, { expose: __expose, emit: __emit }) {
@@ -69,6 +77,13 @@ export default _defineComponent({
69
77
  const onClick = (event) => {
70
78
  emit("click", event);
71
79
  };
80
+ const mergedBadgeProps = computed(() => {
81
+ return {
82
+ dot: props.dot,
83
+ value: props.badge,
84
+ ...props.badgeProps
85
+ };
86
+ });
72
87
  const itemClass = computed(() => {
73
88
  return classNames(bem.e("item"), props.rootClass);
74
89
  });
@@ -87,11 +102,11 @@ export default _defineComponent({
87
102
  props.rootStyle
88
103
  );
89
104
  });
90
- const __returned__ = { props, emit, bem, context, onClick, itemClass, itemStyle, get stringifyStyle() {
105
+ const __returned__ = { props, emit, bem, context, onClick, mergedBadgeProps, itemClass, itemStyle, get stringifyStyle() {
91
106
  return stringifyStyle;
92
107
  }, get classNames() {
93
108
  return classNames;
94
- }, SarIcon };
109
+ }, SarIcon, SarBadge };
95
110
  return __returned__;
96
111
  }
97
112
  });
@@ -23,6 +23,14 @@
23
23
  background-color: var(--sar-grid-bg);
24
24
  }
25
25
 
26
+ @include e(main) {
27
+ position: relative;
28
+ display: inline-flex;
29
+ justify-content: center;
30
+ align-items: center;
31
+ flex: none;
32
+ }
33
+
26
34
  @include e(icon) {
27
35
  @include universal;
28
36
  font-size: var(--sar-grid-item-icon-size);
@@ -51,7 +59,7 @@
51
59
  }
52
60
 
53
61
  @include m(vertical) {
54
- @include e(content) {
62
+ @include e(main) {
55
63
  flex-direction: column;
56
64
  }
57
65
 
@@ -61,7 +69,7 @@
61
69
  }
62
70
 
63
71
  @include m(horizontal) {
64
- @include e(content) {
72
+ @include e(main) {
65
73
  flex-direction: row;
66
74
  }
67
75
 
@@ -71,7 +79,7 @@
71
79
  }
72
80
 
73
81
  @include m-intersect(vertical, reverse) {
74
- @include e(content) {
82
+ @include e(main) {
75
83
  flex-direction: column-reverse;
76
84
  }
77
85
 
@@ -82,7 +90,7 @@
82
90
  }
83
91
 
84
92
  @include m-intersect(horizontal, reverse) {
85
- @include e(content) {
93
+ @include e(main) {
86
94
  flex-direction: row-reverse;
87
95
  }
88
96
 
@@ -17,6 +17,7 @@
17
17
  display: flex;
18
18
  width: 1em;
19
19
  height: 1em;
20
+ font-size: inherit;
20
21
  object-fit: contain;
21
22
  }
22
23
  }
@@ -1,6 +1,6 @@
1
1
  @font-face {
2
2
  font-family: 'sari'; /* Project id 2907887 */
3
- src: url('data:font/ttf;charset=utf-8;base64,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BSInJicmNDc2NzYyFxYXFhQHBgcGBzI3PgE3NjQnLgEnJiIHDgEHBhQXHgEXFgIAemhlPD09PGVo9GhlPD09PGVoemhfXI4nKCgnjlxf0F9cjicoKCeOXF9APTxlaPRoZTw9PTxlaPRoZTw9QCgnjlxf0F9cjicoKCeOXF/QX1yOJygAAAAAEgDeAAEAAAAAAAAAEwAAAAEAAAAAAAEABAATAAEAAAAAAAIABwAXAAEAAAAAAAMABAAeAAEAAAAAAAQABAAiAAEAAAAAAAUACwAmAAEAAAAAAAYABAAxAAEAAAAAAAoAKwA1AAEAAAAAAAsAEwBgAAMAAQQJAAAAJgBzAAMAAQQJAAEACACZAAMAAQQJAAIADgChAAMAAQQJAAMACACvAAMAAQQJAAQACAC3AAMAAQQJAAUAFgC/AAMAAQQJAAYACADVAAMAAQQJAAoAVgDdAAMAAQQJAAsAJgEzQ3JlYXRlZCBieSBpY29uZm9udHNhcmlSZWd1bGFyc2FyaXNhcmlWZXJzaW9uIDEuMHNhcmlHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AHMAYQByAGkAUgBlAGcAdQBsAGEAcgBzAGEAcgBpAHMAYQByAGkAVgBlAHIAcwBpAG8AbgAgADEALgAwAHMAYQByAGkARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8BAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwAAdiYWNrdG9wBWNoZWNrBXRyYXNoDXBlbmNpbC1zcXVhcmUQZGFzaC1zcXVhcmUtZmlsbARsaXN0EGRhc2gtY2lyY2xlLWZpbGwQcGx1cy1jaXJjbGUtZmlsbAJ1cAVyaWdodARsZWZ0BGRvd24FY2xvc2UHbG9hZGluZwl2b2x1bWUtdXAEcGxheQpjYXJldC1kb3duCmNhcmV0LWxlZnQLY2FyZXQtcmlnaHQIY2FyZXQtdXAJYmFja3NwYWNlDXJlY29yZC1jaXJjbGUEZmlsZQ14LWNpcmNsZS1maWxsBnNxdWFyZRFjaGVjay1zcXVhcmUtZmlsbAVpbWFnZQRzdGFyCXN0YXItZmlsbAh4LWNpcmNsZQVlbXB0eQx3YXJuaW5nLWZpbGwQaW5mby1jaXJjbGUtZmlsbBRxdWVzdGlvbi1jaXJjbGUtZmlsbA54LW9jdGFnb24tZmlsbBFjaGVjay1jaXJjbGUtZmlsbAZwZXJzb24EZmFpbAdzdWNjZXNzCHF1ZXN0aW9uBGluZm8FbWludXMEcGx1cwRkYXNoBnNlYXJjaAZjaXJjbGUAAA==')
3
+ src: url('data:font/ttf;charset=utf-8;base64,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UgBlAGcAdQBsAGEAcgBzAGEAcgBpAHMAYQByAGkAVgBlAHIAcwBpAG8AbgAgADEALgAwAHMAYQByAGkARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgAEdW5kbwtyb3RhdGUtbGVmdAdiYWNrdG9wBWNoZWNrBXRyYXNoDXBlbmNpbC1zcXVhcmUQZGFzaC1zcXVhcmUtZmlsbARsaXN0EGRhc2gtY2lyY2xlLWZpbGwQcGx1cy1jaXJjbGUtZmlsbAJ1cAVyaWdodARsZWZ0BGRvd24FY2xvc2UHbG9hZGluZwl2b2x1bWUtdXAEcGxheQpjYXJldC1kb3duCmNhcmV0LWxlZnQLY2FyZXQtcmlnaHQIY2FyZXQtdXAJYmFja3NwYWNlDXJlY29yZC1jaXJjbGUEZmlsZQ14LWNpcmNsZS1maWxsBnNxdWFyZRFjaGVjay1zcXVhcmUtZmlsbAVpbWFnZQRzdGFyCXN0YXItZmlsbAh4LWNpcmNsZQVlbXB0eQx3YXJuaW5nLWZpbGwQaW5mby1jaXJjbGUtZmlsbBRxdWVzdGlvbi1jaXJjbGUtZmlsbA54LW9jdGFnb24tZmlsbBFjaGVjay1jaXJjbGUtZmlsbAZwZXJzb24EZmFpbAdzdWNjZXNzCHF1ZXN0aW9uBGluZm8FbWludXMEcGx1cwRkYXNoBnNlYXJjaAZjaXJjbGUAAAAAAA==')
4
4
  format('truetype');
5
5
  }
6
6
 
@@ -12,6 +12,14 @@
12
12
  -moz-osx-font-smoothing: grayscale;
13
13
  }
14
14
 
15
+ .sari-undo:before {
16
+ content: '\e670';
17
+ }
18
+
19
+ .sari-rotate-left:before {
20
+ content: '\e671';
21
+ }
22
+
15
23
  .sari-backtop:before {
16
24
  content: '\e630';
17
25
  }
@@ -9,6 +9,7 @@ export interface IndexesSlots {
9
9
  default?(props: Record<string, never>): any;
10
10
  }
11
11
  export interface IndexesEmits {
12
+ (e: 'update:current', name: number | string): void;
12
13
  (e: 'change', name: number | string): void;
13
14
  }
14
15
  export interface IndexesExpose {
@@ -18,7 +19,7 @@ export interface IndexesExpose {
18
19
  export interface IndexesAnchorProps {
19
20
  rootStyle?: StyleValue;
20
21
  rootClass?: string;
21
- name: string | number;
22
+ name?: string | number;
22
23
  }
23
24
  export interface IndexesAnchorSlots {
24
25
  default?(props: Record<string, never>): any;
@@ -34,10 +35,7 @@ export interface IndexesNavEmits {
34
35
  (e: 'select', name: string | number): void;
35
36
  }
36
37
  export interface IndexesContext {
37
- register: (name: string | number, expose: {
38
- getRect: () => Promise<NodeRect>;
39
- id: string;
40
- }) => void;
38
+ register: (name: string | number, getRect: () => Promise<NodeRect>) => void;
41
39
  unregister: (name: string | number) => void;
42
40
  }
43
41
  export declare const indexesContextSymbol: unique symbol;
@@ -5,8 +5,10 @@ declare const __VLS_component: import("vue").DefineComponent<IndexesProps, {
5
5
  update: () => void;
6
6
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
7
7
  change: (name: string | number) => any;
8
+ "update:current": (name: string | number) => any;
8
9
  }, string, import("vue").PublicProps, Readonly<IndexesProps> & Readonly<{
9
10
  onChange?: ((name: string | number) => any) | undefined;
11
+ "onUpdate:current"?: ((name: string | number) => any) | undefined;
10
12
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
13
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
12
14
  export default _default;
@@ -7,7 +7,9 @@
7
7
  :scroll-top="scrollTop"
8
8
  @scroll="onScroll"
9
9
  >
10
- <slot></slot>
10
+ <view>
11
+ <slot></slot>
12
+ </view>
11
13
  </scroll-view>
12
14
  <sar-indexes-nav
13
15
  :anchors="anchorNames"
@@ -21,26 +23,24 @@
21
23
  import { defineComponent as _defineComponent } from "vue";
22
24
  import {
23
25
  computed,
24
- onMounted,
25
26
  getCurrentInstance,
26
- ref,
27
+ nextTick,
28
+ onMounted,
27
29
  provide,
28
- watch,
29
- nextTick
30
+ watch
30
31
  } from "vue";
31
32
  import {
32
33
  classNames,
33
34
  stringifyStyle,
34
35
  createBem,
36
+ isNullish,
35
37
  uniqid,
36
- getBoundingClientRect,
37
- matchScrollVisible,
38
- isNullish
38
+ getBoundingClientRect
39
39
  } from "../../utils";
40
40
  import {
41
41
  indexesContextSymbol
42
42
  } from "./common";
43
- import { useSetTimeout } from "../../use";
43
+ import { useScrollSpy } from "../../use";
44
44
  import SarIndexesNav from "../indexes-nav/indexes-nav.vue";
45
45
  export default _defineComponent({
46
46
  components: {
@@ -58,110 +58,50 @@ export default _defineComponent({
58
58
  rootClass: { type: String, required: false },
59
59
  current: { type: [Number, String], required: false }
60
60
  },
61
- emits: ["change"],
61
+ emits: ["update:current", "change"],
62
62
  setup(__props, { expose: __expose, emit: __emit }) {
63
63
  const props = __props;
64
64
  const emit = __emit;
65
65
  const bem = createBem("indexes");
66
- const innerCurrent = ref(props.current);
67
- watch(
68
- () => props.current,
69
- () => {
70
- if (!isNullish(props.current) && anchorNames.value.includes(props.current)) {
71
- innerCurrent.value = props.current;
72
- scrollTo(props.current);
73
- }
74
- }
75
- );
76
- const instance = getCurrentInstance();
77
66
  const scrollViewId = uniqid();
78
- const scrollViewRect = ref();
79
- const scrollTop = ref(0);
80
- const memoScrollTop = ref(0);
81
- let lockScroll = false;
82
- const [unLockScrollLater] = useSetTimeout(() => {
83
- lockScroll = false;
84
- });
85
- const scrollTo = (name) => {
86
- if (!scrollViewRect.value) {
87
- return;
88
- }
89
- lockScroll = true;
90
- unLockScrollLater(150);
91
- const item = anchorRectList.value.find((item2) => item2[0] === name);
92
- if (item) {
93
- const offset = item[1].top - scrollViewRect.value.top;
94
- scrollTop.value = void 0;
95
- nextTick(() => {
96
- scrollTop.value = offset;
97
- });
98
- }
99
- };
100
- const onScroll = (event) => {
101
- memoScrollTop.value = event.detail.scrollTop;
102
- if (lockScroll || !scrollViewRect.value) {
103
- return;
67
+ const instance = getCurrentInstance();
68
+ const {
69
+ scrollTop,
70
+ innerCurrent,
71
+ anchorRectList,
72
+ register,
73
+ unregister,
74
+ onScroll,
75
+ scrollTo,
76
+ update,
77
+ initialize
78
+ } = useScrollSpy({
79
+ defaultCurrent: props.current,
80
+ getSpiedRect() {
81
+ return getBoundingClientRect(`#${scrollViewId}`, instance);
82
+ },
83
+ onChange(name) {
84
+ emit("change", name);
104
85
  }
105
- matchScrollVisible(
106
- anchorRectList.value.map((item) => item[1]),
107
- (index) => {
108
- const name = anchorRectList.value[index][0];
109
- if (name !== innerCurrent.value) {
110
- innerCurrent.value = name;
111
- emit("change", name);
112
- }
113
- },
114
- {
115
- offset: scrollViewRect.value.top + memoScrollTop.value
116
- }
117
- );
118
- };
119
- onMounted(() => {
120
- getBoundingClientRect(`#${scrollViewId}`, instance).then((rect) => {
121
- scrollViewRect.value = rect;
122
- });
123
86
  });
124
- const anchorRectList = ref([]);
125
- const anchorMap = ref({});
126
87
  provide(indexesContextSymbol, {
127
- register(name, expose) {
128
- anchorMap.value[name] = expose;
129
- },
130
- unregister(name) {
131
- delete anchorMap.value[name];
132
- }
88
+ register,
89
+ unregister
133
90
  });
134
- const getAllAnchorRect = async () => {
135
- const allRect = await Promise.all(
136
- Object.keys(anchorMap.value).map((name) => {
137
- const { getRect } = anchorMap.value[name];
138
- return new Promise((resolve) => {
139
- getRect().then((rect) => {
140
- resolve([name, rect]);
141
- });
142
- });
143
- })
144
- );
145
- const sortedAllRect = allRect.sort((a, b) => {
146
- return a[1].top - b[1].top;
147
- });
148
- return sortedAllRect;
149
- };
150
- const update = () => {
151
- getAllAnchorRect().then((rect) => {
152
- anchorRectList.value = rect;
153
- if (!isNullish(props.current)) {
154
- scrollTo(props.current);
155
- } else {
156
- innerCurrent.value = anchorNames.value[0];
157
- }
158
- });
159
- };
160
91
  onMounted(() => {
161
92
  nextTick(() => {
162
- update();
93
+ initialize();
163
94
  });
164
95
  });
96
+ watch(
97
+ () => props.current,
98
+ () => {
99
+ if (!isNullish(props.current) && anchorNames.value.includes(props.current) && props.current !== innerCurrent.value) {
100
+ innerCurrent.value = props.current;
101
+ scrollTo(props.current);
102
+ }
103
+ }
104
+ );
165
105
  const anchorNames = computed(() => {
166
106
  return anchorRectList.value.map((item) => item[0]);
167
107
  });
@@ -170,21 +110,17 @@ export default _defineComponent({
170
110
  scrollTo(name);
171
111
  emit("change", name);
172
112
  };
173
- __expose({
174
- scrollTo,
175
- update
176
- });
177
113
  const indexesClass = computed(() => {
178
114
  return classNames(bem.b(), props.rootClass);
179
115
  });
180
116
  const indexesStyle = computed(() => {
181
117
  return stringifyStyle(props.rootStyle);
182
118
  });
183
- const __returned__ = { props, emit, bem, innerCurrent, instance, scrollViewId, scrollViewRect, scrollTop, memoScrollTop, get lockScroll() {
184
- return lockScroll;
185
- }, set lockScroll(v) {
186
- lockScroll = v;
187
- }, unLockScrollLater, scrollTo, onScroll, anchorRectList, anchorMap, getAllAnchorRect, update, anchorNames, onNavSelect, indexesClass, indexesStyle, SarIndexesNav };
119
+ __expose({
120
+ scrollTo,
121
+ update
122
+ });
123
+ const __returned__ = { props, emit, bem, scrollViewId, instance, scrollTop, innerCurrent, anchorRectList, register, unregister, onScroll, scrollTo, update, initialize, anchorNames, onNavSelect, indexesClass, indexesStyle, SarIndexesNav };
188
124
  return __returned__;
189
125
  }
190
126
  });
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <view :class="indexesAnchorClass" :style="indexesAnchorStyle" :id="anchorId">
2
+ <view :class="indexesAnchorClass" :style="indexesAnchorStyle">
3
3
  <slot>
4
4
  {{ name }}
5
5
  </slot>
@@ -14,7 +14,8 @@ import {
14
14
  stringifyStyle,
15
15
  createBem,
16
16
  getBoundingClientRect,
17
- uniqid
17
+ uniqid,
18
+ isNullish
18
19
  } from "../../utils";
19
20
  import {
20
21
  indexesContextSymbol
@@ -30,7 +31,7 @@ export default _defineComponent({
30
31
  props: {
31
32
  rootStyle: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true },
32
33
  rootClass: { type: String, required: false },
33
- name: { type: [String, Number], required: true }
34
+ name: { type: [String, Number], required: false }
34
35
  },
35
36
  setup(__props, { expose: __expose }) {
36
37
  __expose();
@@ -43,16 +44,15 @@ export default _defineComponent({
43
44
  const anchorId = uniqid();
44
45
  const instance = getCurrentInstance();
45
46
  const getRect = () => {
46
- return getBoundingClientRect(`#${anchorId}`, instance);
47
+ return getBoundingClientRect(`.${anchorId}`, instance);
47
48
  };
48
49
  onBeforeMount(() => {
49
- context.register(props.name, {
50
- getRect,
51
- id: anchorId
52
- });
50
+ if (!isNullish(props.name)) {
51
+ context.register(props.name, getRect);
52
+ }
53
53
  });
54
54
  const indexesAnchorClass = computed(() => {
55
- return classNames(bem.e("anchor"), props.rootClass);
55
+ return classNames(bem.e("anchor"), props.rootClass, anchorId);
56
56
  });
57
57
  const indexesAnchorStyle = computed(() => {
58
58
  return stringifyStyle(props.rootStyle);
@@ -2,7 +2,6 @@
2
2
  <view
3
3
  :class="navClass"
4
4
  :style="navStyle"
5
- :id="navId"
6
5
  @touchstart="onTouchStart"
7
6
  @touchmove.stop.prevent="onTouchMove"
8
7
  @touchend="onTouchEnd"
@@ -15,7 +14,7 @@
15
14
  :class="
16
15
  classNames(
17
16
  bem.e('nav-item'),
18
- bem.em('nav-item', 'active', name === current),
17
+ bem.em('nav-item', 'active', name === innerCurrent),
19
18
  )
20
19
  "
21
20
  >
@@ -32,7 +31,7 @@
32
31
  @transitionend="onTransitionEnd"
33
32
  >
34
33
  <view :class="bem.e('hint-text')">
35
- {{ current }}
34
+ {{ innerCurrent }}
36
35
  </view>
37
36
  </view>
38
37
  </view>
@@ -40,7 +39,7 @@
40
39
 
41
40
  <script>
42
41
  import { defineComponent as _defineComponent } from "vue";
43
- import { computed, ref, getCurrentInstance, reactive } from "vue";
42
+ import { computed, ref, getCurrentInstance, reactive, watch } from "vue";
44
43
  import {
45
44
  classNames,
46
45
  stringifyStyle,
@@ -74,10 +73,19 @@ export default _defineComponent({
74
73
  const navId = uniqid();
75
74
  const navRect = ref();
76
75
  const hintVisible = ref(false);
77
- let currentItemIndex = null;
78
76
  let moved = false;
77
+ const innerCurrent = ref();
78
+ watch(
79
+ () => props.current,
80
+ (current) => {
81
+ innerCurrent.value = current;
82
+ },
83
+ {
84
+ immediate: true
85
+ }
86
+ );
79
87
  const getNavRect = async () => {
80
- navRect.value = await getBoundingClientRect(`#${navId}`, instance);
88
+ navRect.value = await getBoundingClientRect(`.${navId}`, instance);
81
89
  };
82
90
  const { realVisible, transitionClass, onTransitionEnd } = useTransition(
83
91
  reactive({
@@ -87,13 +95,13 @@ export default _defineComponent({
87
95
  })
88
96
  );
89
97
  const hintTop = computed(() => {
90
- let index = props.current !== void 0 ? props.anchors.indexOf(props.current) : -1;
98
+ let index = innerCurrent.value !== void 0 ? props.anchors.indexOf(innerCurrent.value) : -1;
91
99
  if (index < 0) {
92
100
  index = 0;
93
101
  }
94
102
  return index * itemSize + itemSize / 2 + "px";
95
103
  });
96
- const update = (touch) => {
104
+ const calcPosition = (touch) => {
97
105
  if (!navRect.value) {
98
106
  return;
99
107
  }
@@ -103,16 +111,18 @@ export default _defineComponent({
103
111
  0,
104
112
  props.anchors.length - 1
105
113
  );
106
- if (itemIndex !== currentItemIndex) {
107
- currentItemIndex = itemIndex;
108
- emit("select", props.anchors[itemIndex]);
114
+ const current = props.anchors[itemIndex];
115
+ if (current !== innerCurrent.value) {
116
+ innerCurrent.value = current;
117
+ emit("select", current);
109
118
  }
110
119
  };
111
120
  const onTouchStart = async (event) => {
112
121
  hintVisible.value = true;
122
+ moved = false;
113
123
  await getNavRect();
114
124
  if (!moved) {
115
- update(event.touches[0]);
125
+ calcPosition(event.touches[0]);
116
126
  }
117
127
  };
118
128
  const onTouchMove = (event) => {
@@ -120,32 +130,26 @@ export default _defineComponent({
120
130
  if (!navRect.value) {
121
131
  return;
122
132
  }
123
- update(event.touches[0]);
133
+ calcPosition(event.touches[0]);
124
134
  };
125
135
  const onTouchEnd = () => {
126
136
  hintVisible.value = false;
127
- moved = false;
128
137
  navRect.value = void 0;
129
- currentItemIndex = null;
130
138
  };
131
139
  const onMouseDown = useMouseDown(onTouchStart, onTouchMove, onTouchEnd);
132
140
  const navClass = computed(() => {
133
- return classNames(bem.e("nav"));
141
+ return classNames(bem.e("nav"), navId);
134
142
  });
135
143
  const navStyle = computed(() => {
136
144
  return stringifyStyle({
137
145
  "--sar-indexes-nav-item-size": `${itemSize}px`
138
146
  });
139
147
  });
140
- const __returned__ = { props, emit, bem, instance, itemSize, navId, navRect, hintVisible, get currentItemIndex() {
141
- return currentItemIndex;
142
- }, set currentItemIndex(v) {
143
- currentItemIndex = v;
144
- }, get moved() {
148
+ const __returned__ = { props, emit, bem, instance, itemSize, navId, navRect, hintVisible, get moved() {
145
149
  return moved;
146
150
  }, set moved(v) {
147
151
  moved = v;
148
- }, getNavRect, realVisible, transitionClass, onTransitionEnd, hintTop, update, onTouchStart, onTouchMove, onTouchEnd, onMouseDown, navClass, navStyle, get classNames() {
152
+ }, innerCurrent, getNavRect, realVisible, transitionClass, onTransitionEnd, hintTop, calcPosition, onTouchStart, onTouchMove, onTouchEnd, onMouseDown, navClass, navStyle, get classNames() {
149
153
  return classNames;
150
154
  }, get stringifyStyle() {
151
155
  return stringifyStyle;