@sdata/web-vue 2.2.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +1 -1
  2. package/dist/sd.css +117 -191
  3. package/dist/sd.min.css +1 -1
  4. package/es/_components/picker/input-range.vue.d.ts +2 -2
  5. package/es/_components/transition/expand-transition.vue.d.ts +2 -2
  6. package/es/_hooks/use-responsive.d.ts +2 -2
  7. package/es/_hooks/use-theme-mode.d.ts +3 -0
  8. package/es/{calendar/hooks/use-calendar-theme.js → _hooks/use-theme-mode.js} +14 -10
  9. package/es/_utils/date.d.ts +10 -9
  10. package/es/_utils/date.js +23 -7
  11. package/es/_utils/responsive-observe.d.ts +5 -4
  12. package/es/_utils/responsive-observe.js +2 -1
  13. package/es/alert/index.d.ts +3 -3
  14. package/es/anchor/anchor.vue.d.ts +52 -2
  15. package/es/anchor/anchor.vue_vue_type_script_setup_true_lang.js +75 -15
  16. package/es/anchor/index.d.ts +78 -3
  17. package/es/avatar/index.d.ts +20 -20
  18. package/es/border-beam/border-beam.js +5 -0
  19. package/es/border-beam/border-beam.vue.d.ts +52 -0
  20. package/es/border-beam/border-beam.vue_vue_type_script_setup_true_lang.js +623 -0
  21. package/es/border-beam/index.d.ts +106 -0
  22. package/es/border-beam/index.js +10 -0
  23. package/es/border-beam/pulseDriver.d.ts +2 -0
  24. package/es/border-beam/pulseDriver.js +74 -0
  25. package/es/border-beam/style/css.js +2 -0
  26. package/es/border-beam/style/index.css +21 -0
  27. package/es/border-beam/style/index.d.ts +2 -0
  28. package/es/border-beam/style/index.js +2 -0
  29. package/es/border-beam/style/index.scss +12 -0
  30. package/es/border-beam/style/token.scss +12 -0
  31. package/es/border-beam/styles.d.ts +42 -0
  32. package/es/border-beam/styles.js +3545 -0
  33. package/es/border-beam/types.d.ts +27 -0
  34. package/es/button/button.vue.d.ts +16 -3
  35. package/es/button/button.vue_vue_type_script_setup_true_lang.js +39 -9
  36. package/es/button/index.d.ts +43 -24
  37. package/es/button/interface.d.ts +1 -0
  38. package/es/calendar/components/cell.vue.d.ts +26 -26
  39. package/es/calendar/components/index.vue.d.ts +1 -1
  40. package/es/calendar/components/index.vue_vue_type_script_setup_true_lang.js +3 -2
  41. package/es/calendar/index.d.ts +5 -5
  42. package/es/carousel/index.d.ts +3 -3
  43. package/es/cascader/cascader.vue.d.ts +8 -8
  44. package/es/checkbox/checkbox.d.ts +3 -3
  45. package/es/collapse/collapse-item.d.ts +5 -5
  46. package/es/collapse/index.d.ts +3 -3
  47. package/es/components.d.ts +1 -0
  48. package/es/config-provider/config-provider.vue.d.ts +9 -0
  49. package/es/config-provider/config-provider.vue_vue_type_script_setup_true_lang.js +10 -1
  50. package/es/config-provider/context.d.ts +1 -0
  51. package/es/config-provider/index.d.ts +36 -21
  52. package/es/copy/copy.vue_vue_type_script_setup_true_lang.js +1 -0
  53. package/es/date-picker/hooks/use-cell-class-name.d.ts +1 -0
  54. package/es/date-picker/hooks/use-cell-class-name.js +3 -2
  55. package/es/date-picker/hooks/use-header-value.d.ts +2 -0
  56. package/es/date-picker/hooks/use-header-value.js +23 -19
  57. package/es/date-picker/hooks/use-picker-state.d.ts +2 -0
  58. package/es/date-picker/hooks/use-picker-state.js +3 -3
  59. package/es/date-picker/hooks/use-range-header-value.d.ts +2 -0
  60. package/es/date-picker/hooks/use-range-header-value.js +5 -1
  61. package/es/date-picker/hooks/use-range-picker-state.d.ts +2 -0
  62. package/es/date-picker/hooks/use-range-picker-state.js +3 -3
  63. package/es/date-picker/hooks/use-value-format.d.ts +5 -3
  64. package/es/date-picker/hooks/use-value-format.js +10 -8
  65. package/es/date-picker/index.d.ts +1373 -12
  66. package/es/date-picker/interface.d.ts +7 -0
  67. package/es/date-picker/panels/body.vue.d.ts +24 -6
  68. package/es/date-picker/panels/body.vue_vue_type_script_setup_true_lang.js +13 -12
  69. package/es/date-picker/panels/date/index.vue.d.ts +26 -8
  70. package/es/date-picker/panels/date/index.vue_vue_type_script_setup_true_lang.js +18 -9
  71. package/es/date-picker/panels/header.vue_vue_type_script_setup_true_lang.js +13 -20
  72. package/es/date-picker/panels/month/index.vue.d.ts +13 -8
  73. package/es/date-picker/panels/month/index.vue_vue_type_script_setup_true_lang.js +6 -6
  74. package/es/date-picker/panels/quarter/index.vue.d.ts +13 -8
  75. package/es/date-picker/panels/quarter/index.vue_vue_type_script_setup_true_lang.js +6 -6
  76. package/es/date-picker/panels/shortcuts.vue_vue_type_script_setup_true_lang.js +2 -6
  77. package/es/date-picker/panels/week/index.vue.d.ts +13 -1
  78. package/es/date-picker/panels/week/index.vue_vue_type_script_setup_true_lang.js +5 -2
  79. package/es/date-picker/panels/year/index.vue.d.ts +13 -8
  80. package/es/date-picker/panels/year/index.vue_vue_type_script_setup_true_lang.js +25 -15
  81. package/es/date-picker/picker-panel.vue.d.ts +56 -14
  82. package/es/date-picker/picker-panel.vue_vue_type_script_setup_true_lang.js +36 -19
  83. package/es/date-picker/picker.vue.d.ts +951 -3
  84. package/es/date-picker/picker.vue_vue_type_script_setup_true_lang.js +91 -29
  85. package/es/date-picker/range-picker-panel.vue.d.ts +77 -15
  86. package/es/date-picker/range-picker-panel.vue_vue_type_script_setup_true_lang.js +52 -28
  87. package/es/date-picker/range-picker.vue.d.ts +1348 -4
  88. package/es/date-picker/range-picker.vue_vue_type_script_setup_true_lang.js +114 -34
  89. package/es/descriptions/index.d.ts +24 -24
  90. package/es/drawer/drawer.vue.d.ts +5 -5
  91. package/es/drawer/index.d.ts +15 -15
  92. package/es/dropdown/dropdown-button.vue.d.ts +4 -4
  93. package/es/dropdown/index.d.ts +15 -15
  94. package/es/ellipsis/ellipsis.vue.d.ts +7 -7
  95. package/es/ellipsis/performant-ellipsis.vue.d.ts +5 -5
  96. package/es/form/form-item.vue_vue_type_script_setup_true_lang.js +3 -3
  97. package/es/form/index.d.ts +3 -3
  98. package/es/grid/grid-col.vue_vue_type_script_setup_true_lang.js +2 -2
  99. package/es/grid/grid.vue_vue_type_script_setup_true_lang.js +10 -10
  100. package/es/icon/icon-menu/icon-menu.js +5 -0
  101. package/es/icon/icon-menu/icon-menu.vue_vue_type_script_setup_true_lang.js +52 -0
  102. package/es/icon/icon-menu/index.js +9 -0
  103. package/es/image/preview-toolbar.vue.d.ts +2 -3
  104. package/es/image/preview-toolbar.vue_vue_type_script_setup_true_lang.js +2 -3
  105. package/es/image/preview.vue.d.ts +2 -2
  106. package/es/index.css +117 -191
  107. package/es/index.d.ts +3 -1
  108. package/es/index.js +3 -2
  109. package/es/index.scss +1 -0
  110. package/es/input/index.d.ts +7 -7
  111. package/es/input/input-password.vue.d.ts +3 -3
  112. package/es/json-form/index.d.ts +9 -9
  113. package/es/json-form/json-form-item.vue_vue_type_script_setup_true_lang.js +1 -1
  114. package/es/json-form/json-form.vue.d.ts +3 -3
  115. package/es/layout/content.vue.d.ts +2 -2
  116. package/es/layout/content.vue_vue_type_script_setup_true_lang.js +8 -3
  117. package/es/layout/context.d.ts +12 -9
  118. package/es/layout/context.js +11 -3
  119. package/es/layout/footer.vue.d.ts +2 -2
  120. package/es/layout/footer.vue_vue_type_script_setup_true_lang.js +8 -3
  121. package/es/layout/header.vue.d.ts +3 -30
  122. package/es/layout/header.vue_vue_type_script_setup_true_lang.js +9 -339
  123. package/es/layout/hooks/use-has-sider.d.ts +2 -0
  124. package/es/layout/hooks/use-has-sider.js +38 -0
  125. package/es/layout/index.d.ts +91 -380
  126. package/es/layout/index.js +2 -2
  127. package/es/layout/interface.d.ts +12 -46
  128. package/es/layout/layout.vue.d.ts +4 -2
  129. package/es/layout/layout.vue_vue_type_script_setup_true_lang.js +38 -14
  130. package/es/layout/sider.vue.d.ts +47 -183
  131. package/es/layout/sider.vue_vue_type_script_setup_true_lang.js +191 -370
  132. package/es/layout/style/index.css +112 -190
  133. package/es/layout/style/index.scss +127 -239
  134. package/es/layout/style/token.scss +46 -26
  135. package/es/link/index.d.ts +6 -6
  136. package/es/list/index.d.ts +18 -18
  137. package/es/locale/interface.d.ts +2 -0
  138. package/es/locale/lang/ar-eg.js +46 -0
  139. package/es/locale/lang/de-de.js +46 -0
  140. package/es/locale/lang/es-es.js +46 -0
  141. package/es/locale/lang/fr-fr.js +46 -0
  142. package/es/locale/lang/id-id.js +46 -0
  143. package/es/locale/lang/it-it.js +46 -0
  144. package/es/locale/lang/km-kh.js +46 -0
  145. package/es/locale/lang/ko-kr.js +46 -0
  146. package/es/locale/lang/ms-my.js +46 -0
  147. package/es/locale/lang/pt-pt.js +46 -0
  148. package/es/locale/lang/th-th.js +46 -0
  149. package/es/locale/lang/vi-vn.js +46 -0
  150. package/es/mention/mention.js +2 -0
  151. package/es/menu/base-menu.vue.d.ts +1 -1
  152. package/es/menu/base-menu.vue_vue_type_script_setup_true_lang.js +14 -14
  153. package/es/menu/item.d.ts +1 -1
  154. package/es/menu/menu.d.ts +12 -12
  155. package/es/menu/menu.js +3 -3
  156. package/es/menu/sub-menu-pop.vue_vue_type_script_setup_true_lang.js +3 -4
  157. package/es/modal/index.d.ts +22 -20
  158. package/es/modal/index.js +47 -11
  159. package/es/modal/interface.d.ts +5 -0
  160. package/es/modal/modal.vue.d.ts +4 -4
  161. package/es/popconfirm/index.d.ts +12 -12
  162. package/es/popover/index.d.ts +12 -12
  163. package/es/progress/index.d.ts +6 -6
  164. package/es/qr-code/index.d.ts +3 -3
  165. package/es/radio/radio.d.ts +3 -3
  166. package/es/resize-box/resize-box.vue.d.ts +4 -4
  167. package/es/resize-box/resize-box.vue_vue_type_script_setup_true_lang.js +7 -7
  168. package/es/result/index.d.ts +3 -3
  169. package/es/scrollbar/style/index.css +1 -1
  170. package/es/scrollbar/style/index.scss +4 -1
  171. package/es/sd-vue.js +3 -1
  172. package/es/select/select.d.ts +17 -17
  173. package/es/slider/index.d.ts +3 -3
  174. package/es/split/split.vue.d.ts +4 -4
  175. package/es/split/split.vue_vue_type_script_setup_true_lang.js +6 -6
  176. package/es/steps/index.d.ts +6 -6
  177. package/es/tabs/index.d.ts +6 -6
  178. package/es/tag/index.d.ts +6 -6
  179. package/es/tag/tag.vue.d.ts +2 -2
  180. package/es/textarea/textarea.vue_vue_type_script_setup_true_lang.js +4 -4
  181. package/es/theme-provider/index.d.ts +9 -9
  182. package/es/time-picker/index.d.ts +6 -6
  183. package/es/time-picker/time-picker.vue.d.ts +2 -2
  184. package/es/timeline/index.d.ts +3 -3
  185. package/es/timeline/timeline.d.ts +1 -1
  186. package/es/tooltip/index.d.ts +3 -3
  187. package/es/tour/index.d.ts +3 -3
  188. package/es/tour/tour.vue_vue_type_script_setup_true_lang.js +6 -6
  189. package/es/tree/base-node.vue_vue_type_script_setup_true_lang.js +6 -21
  190. package/es/tree/expand-transition.vue.d.ts +2 -2
  191. package/es/tree/node-switcher.vue.d.ts +1 -12
  192. package/es/tree/node-switcher.vue_vue_type_script_lang.js +1 -5
  193. package/es/tree/tree.vue_vue_type_script_setup_true_lang.js +23 -23
  194. package/es/tree-select/tree-select.vue.d.ts +9 -9
  195. package/es/trigger/trigger.js +2 -1
  196. package/es/verification-code/verification-code.js +17 -7
  197. package/json/vetur-attributes.json +76 -156
  198. package/json/vetur-tags.json +26 -44
  199. package/json/web-types.json +150 -304
  200. package/package.json +5 -5
  201. package/es/_components/render-function.d.ts +0 -14
  202. package/es/_components/render-function.js +0 -14
  203. package/es/calendar/hooks/use-calendar-theme.d.ts +0 -4
  204. package/es/layout/utils.d.ts +0 -1
  205. package/es/layout/utils.js +0 -11
@@ -1,447 +1,268 @@
1
+ import { configProviderInjectionKey } from "../config-provider/context.js";
1
2
  import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
2
3
  import { getPrefixCls } from "../_utils/global-config.js";
3
- import { isNumber } from "../_utils/is.js";
4
- import { off, on } from "../_utils/dom.js";
5
- import useMergeState from "../_hooks/use-merge-state.js";
6
- import { KEYBOARD_KEY } from "../_utils/keyboard.js";
7
- import usePopupManager from "../_hooks/use-popup-manager.js";
4
+ import { useScrollbar } from "../_hooks/use-scrollbar.js";
5
+ import Scrollbar from "../scrollbar/index.js";
8
6
  import IconRight from "../icon/icon-right/index.js";
7
+ import { useThemeMode } from "../_hooks/use-theme-mode.js";
9
8
  import IconLeft from "../icon/icon-left/index.js";
10
- import { LayoutSiderInjectionKey, SiderInjectionKey } from "./context.js";
11
- import { useResponsive } from "../_hooks/use-responsive.js";
12
- import ResizeBox from "../resize-box/index.js";
13
- import { SIDER_LOCATIONS } from "./utils.js";
14
- import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, inject, mergeProps, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, reactive, renderSlot, resolveDynamicComponent, toRefs, unref, watch, withCtx } from "vue";
9
+ import { LayoutContextInjectionKey, SiderContextInjectionKey } from "./context.js";
10
+ import IconMenu from "../icon/icon-menu/index.js";
11
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, inject, mergeProps, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, reactive, ref, renderSlot, resolveDynamicComponent, toRef, unref, watch, withCtx } from "vue";
15
12
  //#region components/layout/sider.vue?vue&type=script&setup=true&lang.ts
16
- var _hoisted_1 = { key: 0 };
17
- var _hoisted_2 = { key: 1 };
18
13
  var sider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent(_objectSpread2(_objectSpread2({}, { name: "LayoutSider" }), {}, {
19
14
  __name: "sider",
20
15
  props: {
21
16
  /**
22
- * @zh 主题颜色
23
- * @en Theme
17
+ * @zh 是否可折叠
18
+ * @en Whether can be collapsed
24
19
  */
25
- theme: {
26
- type: String,
27
- default: "light"
28
- },
29
- /**
30
- * @zh 抽屉是否可见
31
- * @en Whether navigation drawer is visible
32
- */
33
- modelValue: {
34
- type: Boolean,
35
- default: void 0
36
- },
37
- /**
38
- * @zh 默认是否显示抽屉
39
- * @en Whether navigation drawer is visible by default
40
- */
41
- defaultVisible: {
20
+ collapsible: {
42
21
  type: Boolean,
43
22
  default: false
44
23
  },
45
24
  /**
46
- * @zh 当前收起状态
47
- * @en Current collapsed state
25
+ * @zh 当前折叠状态(受控)
26
+ * @en Current collapsed state (controlled)
48
27
  */
49
28
  collapsed: {
50
29
  type: Boolean,
51
30
  default: void 0
52
31
  },
53
32
  /**
54
- * @zh 默认的收起状态
55
- * @en The default collapsed state
33
+ * @zh 默认折叠状态(非受控)
34
+ * @en Default collapsed state (uncontrolled)
56
35
  */
57
36
  defaultCollapsed: {
58
37
  type: Boolean,
59
38
  default: false
60
39
  },
61
40
  /**
62
- * @zh 是否可收起
63
- * @en Whether is collapsible
41
+ * @zh 折叠时是否反转箭头方向
42
+ * @en Whether to reverse the arrow direction when collapsed
64
43
  */
65
- collapsible: { type: Boolean },
44
+ reverseArrow: {
45
+ type: Boolean,
46
+ default: false
47
+ },
66
48
  /**
67
- * @zh 是否启用 rail 模式
68
- * @en Whether to enable rail mode
49
+ * @zh collapsedWidth 0 时零宽触发器的自定义样式
50
+ * @en Custom style of zero-width trigger when collapsedWidth is 0
69
51
  */
70
- rail: {
71
- type: Boolean,
52
+ zeroWidthTriggerStyle: {
53
+ type: Object,
72
54
  default: void 0
73
55
  },
74
56
  /**
75
- * @zh 默认是否启用 rail 模式
76
- * @en Whether to enable rail mode by default
57
+ * @zh 是否隐藏内置折叠触发器,配合受控的 collapsed 自行控制折叠
58
+ * @en Whether to hide the built-in collapse trigger, control collapse via collapsed
77
59
  */
78
- defaultRail: {
60
+ hideTrigger: {
79
61
  type: Boolean,
80
62
  default: false
81
63
  },
82
64
  /**
83
- * @zh rail 模式下的宽度
84
- * @en Width in rail mode
85
- */
86
- railWidth: {
87
- type: [Number, String],
88
- default: 56
89
- },
90
- /**
91
- * @zh 是否在 hover 时临时展开 rail
92
- * @en Whether to expand rail on hover
93
- */
94
- expandOnHover: { type: Boolean },
95
- /**
96
- * @zh 是否禁用响应式宽度监听
97
- * @en Whether to disable resize watcher
98
- */
99
- disableResizeWatcher: { type: Boolean },
100
- /**
101
- * @zh 是否禁用路由切换时自动关闭临时抽屉
102
- * @en Whether to disable route watcher
103
- */
104
- disableRouteWatcher: { type: Boolean },
105
- /**
106
- * @zh 宽度
107
- * @en Width
65
+ * @zh 展开时的宽度
66
+ * @en Width when expanded
108
67
  */
109
68
  width: {
110
69
  type: [Number, String],
111
70
  default: 200
112
71
  },
113
72
  /**
114
- * @zh 顶部或底部抽屉的高度
115
- * @en Height of top or bottom drawer
116
- */
117
- height: {
118
- type: [Number, String],
119
- default: void 0
120
- },
121
- /**
122
- * @zh 收缩宽度
123
- * @en Collapsed width
73
+ * @zh 折叠时的宽度
74
+ * @en Width when collapsed
124
75
  */
125
76
  collapsedWidth: {
126
- type: Number,
77
+ type: [Number, String],
127
78
  default: 48
128
79
  },
129
80
  /**
130
- * @zh 是否为临时抽屉模式
131
- * @en Whether to use temporary drawer mode
132
- */
133
- temporary: { type: Boolean },
134
- /**
135
- * @zh 是否始终显示抽屉
136
- * @en Whether to always keep the drawer active
137
- */
138
- permanent: { type: Boolean },
139
- /**
140
- * @zh 临时抽屉模式下点击遮罩后是否保持显示
141
- * @en Whether temporary drawer should stay open after scrim click
142
- */
143
- persistent: { type: Boolean },
144
- /**
145
- * @zh 是否显示遮罩层
146
- * @en Whether to show the temporary drawer mask
147
- */
148
- mask: {
149
- type: Boolean,
150
- default: true
151
- },
152
- /**
153
- * @zh 点击遮罩层是否可以关闭抽屉
154
- * @en Whether the drawer can be closed by clicking the mask
155
- */
156
- maskClosable: {
157
- type: Boolean,
158
- default: true
159
- },
160
- /**
161
- * @zh 是否支持通过 ESC 键关闭临时抽屉
162
- * @en Whether temporary drawer can be closed with ESC
163
- */
164
- escToClose: {
165
- type: Boolean,
166
- default: true
167
- },
168
- /**
169
- * @zh 抽屉停靠位置
170
- * @en Navigation drawer location
81
+ * @zh 响应式断点,命中断点时自动折叠
82
+ * @en Responsive breakpoint, auto collapse when matched
171
83
  */
172
- location: {
84
+ breakpoint: {
173
85
  type: String,
174
- default: "start",
175
- validator: (value) => SIDER_LOCATIONS.includes(value)
86
+ default: void 0
176
87
  },
177
88
  /**
178
- * @zh 是否启用浮动模式
179
- * @en Whether to enable floating mode
180
- */
181
- floating: { type: Boolean },
182
- /**
183
- * @zh 是否启用粘性定位
184
- * @en Whether to enable sticky mode
185
- */
186
- sticky: { type: Boolean },
187
- /**
188
- * @zh 翻转折叠提示箭头的方向,当 Sider 在右边时可以使用
189
- * @en Flip and fold the direction of the hint arrow, which can be used when Sider is on the right
190
- */
191
- reverseArrow: { type: Boolean },
192
- /**
193
- * @zh 触发响应式布局的断点, 详见[响应式栅格](/vue/component/grid)
194
- * @en Trigger breakpoints for responsive layout, see [Responsive Grid](/vue/component/grid) for details
195
- */
196
- breakpoint: { type: String },
197
- /**
198
- * @zh 可以用 ResizeBox 替换原生的 `aside` 标签,这个参数即 ResizeBox的 `directions` 参数。详情请看 [ResizeBox](/vue/component/resize-box)。
199
- * @en Can replace the native `aside` tag with ResizeBox. This is the `directions` parameter of ResizeBox. For details, please see [ResizeBox](/vue/component/resize-box)
89
+ * @zh 主题颜色,未设置时跟随 ConfigProvider 的 themeMode
90
+ * @en Theme color, follows ConfigProvider's themeMode when not set
200
91
  */
201
- resizeDirections: {
202
- type: Array,
92
+ theme: {
93
+ type: String,
203
94
  default: void 0
204
95
  },
205
96
  /**
206
- * @zh 隐藏底部折叠触发器
207
- * @en Whether to hide the bottom fold trigger
97
+ * @zh 滚动配置,默认使用组件库 Scrollbar;设为 false 使用原生 overflow:auto,传对象可配置 Scrollbar
98
+ * @en Scroll config, use the component Scrollbar by default; set to false for native overflow:auto, pass an object to configure Scrollbar
208
99
  */
209
- hideTrigger: { type: Boolean }
100
+ scrollbar: {
101
+ type: [Object, Boolean],
102
+ default: void 0
103
+ }
210
104
  },
211
- emits: [
212
- "update:modelValue",
213
- "update:rail",
214
- "collapse",
215
- "update:collapsed",
216
- "breakpoint"
217
- ],
105
+ emits: ["collapse", "breakpoint"],
218
106
  setup(__props, { emit: __emit }) {
219
- const generateId = (() => {
220
- let i = 0;
221
- return (prefix = "") => {
222
- i += 1;
223
- return `${prefix}${i}`;
224
- };
225
- })();
107
+ var _props$collapsed;
108
+ let siderUuid = 0;
109
+ const generateId = (prefix = "") => {
110
+ siderUuid += 1;
111
+ return `${prefix}${siderUuid}`;
112
+ };
226
113
  const props = __props;
227
114
  const emit = __emit;
228
- /**
229
- * @zh 自定义底部折叠触发器
230
- * @en Custom bottom folding trigger
231
- * @slot trigger
232
- * @binding {boolean} collapsed
233
- */
234
- const { theme, modelValue, defaultVisible, collapsed, defaultCollapsed, collapsible, rail, defaultRail, expandOnHover, disableResizeWatcher, disableRouteWatcher, hideTrigger, breakpoint, height, collapsedWidth, mask, maskClosable, escToClose, location, floating, permanent, persistent, sticky, temporary, resizeDirections } = toRefs(props);
235
115
  const prefixCls = getPrefixCls("layout-sider");
236
- const [localCollapsed, setLocalCollapsed] = useMergeState(defaultCollapsed.value, reactive({ value: collapsed }));
237
- const [drawerVisible, setDrawerVisible] = useMergeState(defaultVisible.value, reactive({ value: modelValue }));
238
- const [railCollapsed, setRailCollapsed] = useMergeState(defaultRail.value, reactive({ value: rail }));
239
- const physicalLocation = computed(() => {
240
- if (location.value === "start") return "left";
241
- if (location.value === "end") return "right";
242
- return location.value;
243
- });
244
- const isHorizontal = computed(() => ["left", "right"].includes(physicalLocation.value));
245
- const isTemporary = computed(() => !permanent.value && !!temporary.value);
246
- const isDrawerActive = computed(() => !!permanent.value || drawerVisible.value);
247
- const temporaryVisible = computed(() => isTemporary.value && isDrawerActive.value);
248
- const railModeEnabled = computed(() => {
249
- var _rail$value;
250
- return ((_rail$value = rail === null || rail === void 0 ? void 0 : rail.value) !== null && _rail$value !== void 0 ? _rail$value : defaultRail.value) || railCollapsed.value;
251
- });
252
- const { zIndex } = usePopupManager("dialog", { visible: temporaryVisible });
253
- const componentTag = computed(() => (resizeDirections === null || resizeDirections === void 0 ? void 0 : resizeDirections.value) && !isTemporary.value && isHorizontal.value ? ResizeBox : "div");
254
- const resizeDirectionsProps = computed(() => componentTag.value === ResizeBox && (resizeDirections === null || resizeDirections === void 0 ? void 0 : resizeDirections.value) ? { directions: resizeDirections.value } : {});
255
- const showTrigger = computed(() => collapsible.value && !hideTrigger.value && !isTemporary.value && isHorizontal.value);
256
- const siderSize = computed(() => {
257
- let rawSize = props.width;
258
- if (localCollapsed.value) rawSize = props.collapsedWidth;
259
- else if (railCollapsed.value) rawSize = props.railWidth;
260
- return isNumber(rawSize) ? `${rawSize}px` : String(rawSize);
261
- });
262
- const crossAxisSize = computed(() => {
263
- var _height$value;
264
- const rawSize = (_height$value = height === null || height === void 0 ? void 0 : height.value) !== null && _height$value !== void 0 ? _height$value : props.width;
265
- return isNumber(rawSize) ? `${rawSize}px` : String(rawSize);
266
- });
267
- const siderStyles = computed(() => {
268
- const style = isHorizontal.value ? { width: siderSize.value } : { height: crossAxisSize.value };
269
- if (!isTemporary.value) {
270
- if (sticky.value && isHorizontal.value) return _objectSpread2(_objectSpread2({}, style), {}, {
271
- position: "sticky",
272
- top: "0",
273
- alignSelf: "flex-start",
274
- maxHeight: "100vh"
275
- });
276
- return style;
277
- }
278
- return _objectSpread2(_objectSpread2({}, style), {}, {
279
- [physicalLocation.value]: 0,
280
- zIndex: zIndex.value || void 0
281
- });
282
- });
283
- const triggerStyles = computed(() => ({ width: siderSize.value }));
284
- const showMask = computed(() => isTemporary.value && isDrawerActive.value && mask.value);
285
- const maskStyles = computed(() => {
286
- const baseStyle = { zIndex: zIndex.value ? zIndex.value - 1 : void 0 };
287
- if (!showMask.value) return baseStyle;
288
- if (physicalLocation.value === "left") return _objectSpread2(_objectSpread2({}, baseStyle), {}, {
289
- top: 0,
290
- right: 0,
291
- bottom: 0,
292
- left: siderSize.value
293
- });
294
- if (physicalLocation.value === "right") return _objectSpread2(_objectSpread2({}, baseStyle), {}, {
295
- top: 0,
296
- right: siderSize.value,
297
- bottom: 0,
298
- left: 0
299
- });
300
- if (physicalLocation.value === "top") return _objectSpread2(_objectSpread2({}, baseStyle), {}, {
301
- top: crossAxisSize.value,
302
- right: 0,
303
- bottom: 0,
304
- left: 0
305
- });
306
- return _objectSpread2(_objectSpread2({}, baseStyle), {}, {
307
- top: 0,
308
- right: 0,
309
- bottom: crossAxisSize.value,
310
- left: 0
311
- });
312
- });
313
- const classNames = computed(() => [prefixCls, {
314
- [`${prefixCls}-light`]: theme.value === "light",
315
- [`${prefixCls}-has-trigger`]: showTrigger.value,
316
- [`${prefixCls}-collapsed`]: localCollapsed.value,
317
- [`${prefixCls}-temporary`]: isTemporary.value,
318
- [`${prefixCls}-persistent`]: persistent.value,
319
- [`${prefixCls}-active`]: isDrawerActive.value,
320
- [`${prefixCls}-rail`]: railCollapsed.value,
321
- [`${prefixCls}-expand-on-hover`]: expandOnHover.value,
322
- [`${prefixCls}-floating`]: floating.value,
323
- [`${prefixCls}-sticky`]: sticky.value,
324
- [`${prefixCls}-${physicalLocation.value}`]: true
325
- }]);
326
- const triggerClassNames = computed(() => [`${prefixCls}-trigger`, { [`${prefixCls}-trigger-light`]: theme.value === "light" }]);
327
- const setVisibleState = (nextVisible) => {
328
- setDrawerVisible(nextVisible);
329
- emit("update:modelValue", nextVisible);
330
- };
331
- const setRailState = (nextRail) => {
332
- setRailCollapsed(nextRail);
333
- emit("update:rail", nextRail);
334
- };
335
- const toggleTrigger = () => {
336
- const nextCollapsed = !localCollapsed.value;
337
- setLocalCollapsed(nextCollapsed);
338
- emit("update:collapsed", nextCollapsed);
339
- emit("collapse", nextCollapsed, "clickTrigger");
340
- };
341
- const handleMaskClick = () => {
342
- if (!maskClosable.value || persistent.value) return;
343
- setVisibleState(false);
116
+ const dimensionMaxMap = {
117
+ xs: "479.98px",
118
+ sm: "575.98px",
119
+ md: "767.98px",
120
+ lg: "991.98px",
121
+ xl: "1199.98px",
122
+ xxl: "1599.98px",
123
+ xxxl: "1839.98px"
344
124
  };
345
- const handleGlobalKeyDown = (event) => {
346
- if (event.key === KEYBOARD_KEY.ESC && escToClose.value && isTemporary.value && !persistent.value) setVisibleState(false);
347
- };
348
- const handleRouteChange = () => {
349
- if (isTemporary.value && isDrawerActive.value && !disableRouteWatcher.value) setVisibleState(false);
125
+ const isNumeric = (val) => !Number.isNaN(Number.parseFloat(val)) && Number.isFinite(Number(val));
126
+ const toSiderWidth = (val) => isNumeric(val) ? `${val}px` : String(val);
127
+ const isControlled = computed(() => props.collapsed !== void 0);
128
+ const collapsedState = ref((_props$collapsed = props.collapsed) !== null && _props$collapsed !== void 0 ? _props$collapsed : props.defaultCollapsed);
129
+ watch(() => props.collapsed, (val) => {
130
+ if (val !== void 0) collapsedState.value = val;
131
+ });
132
+ const mergedCollapsed = computed(() => isControlled.value ? props.collapsed : collapsedState.value);
133
+ const handleSetCollapsed = (value, type) => {
134
+ if (!isControlled.value) collapsedState.value = value;
135
+ emit("collapse", value, type);
350
136
  };
351
- const handleMouseEnter = () => {
352
- if (expandOnHover.value && railModeEnabled.value && railCollapsed.value) setRailState(false);
137
+ const toggle = () => {
138
+ handleSetCollapsed(!mergedCollapsed.value, "clickTrigger");
353
139
  };
354
- const handleMouseLeave = () => {
355
- if (expandOnHover.value && railModeEnabled.value && !railCollapsed.value) setRailState(true);
140
+ const below = ref(false);
141
+ const setupResponsive = () => {
142
+ const { breakpoint } = props;
143
+ if (typeof window === "undefined" || !window.matchMedia || !breakpoint) return;
144
+ const max = dimensionMaxMap[breakpoint];
145
+ if (!max) return;
146
+ const mql = window.matchMedia(`screen and (max-width: ${max})`);
147
+ const handler = (m) => {
148
+ below.value = m.matches;
149
+ emit("breakpoint", m.matches);
150
+ if (mergedCollapsed.value !== m.matches) handleSetCollapsed(m.matches, "responsive");
151
+ };
152
+ if (typeof mql.addEventListener === "function") mql.addEventListener("change", handler);
153
+ else if (typeof mql.addListener === "function") mql.addListener(handler);
154
+ handler(mql);
155
+ return () => {
156
+ if (typeof mql.removeEventListener === "function") mql.removeEventListener("change", handler);
157
+ else if (typeof mql.removeListener === "function") mql.removeListener(handler);
158
+ };
356
159
  };
357
- useResponsive(breakpoint, (checked) => {
358
- if (disableResizeWatcher.value) return;
359
- const nextCollapsed = !checked;
360
- if (nextCollapsed !== localCollapsed.value) {
361
- setLocalCollapsed(nextCollapsed);
362
- emit("update:collapsed", nextCollapsed);
363
- emit("collapse", nextCollapsed, "responsive");
364
- emit("breakpoint", nextCollapsed);
365
- }
160
+ let cleanupResponsive;
161
+ onMounted(() => {
162
+ cleanupResponsive = setupResponsive();
366
163
  });
367
- watch(() => props.permanent, (nextPermanent) => {
368
- if (nextPermanent) setVisibleState(true);
164
+ watch(() => props.breakpoint, () => {
165
+ cleanupResponsive === null || cleanupResponsive === void 0 || cleanupResponsive();
166
+ cleanupResponsive = setupResponsive();
369
167
  });
370
- watch([
371
- isTemporary,
372
- isDrawerActive,
373
- escToClose
374
- ], ([nextTemporary, nextActive, nextEsc]) => {
375
- off(document.documentElement, "keydown", handleGlobalKeyDown);
376
- if (nextTemporary && nextActive && nextEsc) on(document.documentElement, "keydown", handleGlobalKeyDown);
377
- }, { immediate: true });
378
- watch([
379
- isTemporary,
380
- isDrawerActive,
381
- disableRouteWatcher
382
- ], ([nextTemporary, nextActive, nextDisableRouteWatcher]) => {
383
- off(window, "popstate", handleRouteChange);
384
- off(window, "hashchange", handleRouteChange);
385
- if (nextTemporary && nextActive && !nextDisableRouteWatcher) {
386
- on(window, "popstate", handleRouteChange);
387
- on(window, "hashchange", handleRouteChange);
388
- }
389
- }, { immediate: true });
390
- const uniqueId = generateId("__arco_layout_sider");
391
- const siderHook = inject(LayoutSiderInjectionKey, void 0);
168
+ onUnmounted(() => {
169
+ cleanupResponsive === null || cleanupResponsive === void 0 || cleanupResponsive();
170
+ });
171
+ const { siderHook } = inject(LayoutContextInjectionKey, { siderHook: {
172
+ addSider: () => {},
173
+ removeSider: () => {}
174
+ } });
175
+ let siderId = "";
392
176
  onMounted(() => {
393
- var _siderHook$onSiderMou;
394
- siderHook === null || siderHook === void 0 || (_siderHook$onSiderMou = siderHook.onSiderMount) === null || _siderHook$onSiderMou === void 0 || _siderHook$onSiderMou.call(siderHook, uniqueId);
177
+ siderId = generateId("sd-sider-");
178
+ siderHook.addSider(siderId);
395
179
  });
396
180
  onUnmounted(() => {
397
- var _siderHook$onSiderUnM;
398
- off(document.documentElement, "keydown", handleGlobalKeyDown);
399
- off(window, "popstate", handleRouteChange);
400
- off(window, "hashchange", handleRouteChange);
401
- siderHook === null || siderHook === void 0 || (_siderHook$onSiderUnM = siderHook.onSiderUnMount) === null || _siderHook$onSiderUnM === void 0 || _siderHook$onSiderUnM.call(siderHook, uniqueId);
181
+ siderHook.removeSider(siderId);
182
+ });
183
+ const configProvider = inject(configProviderInjectionKey, void 0);
184
+ const rtl = computed(() => {
185
+ var _configProvider$rtl;
186
+ return (_configProvider$rtl = configProvider === null || configProvider === void 0 ? void 0 : configProvider.rtl) !== null && _configProvider$rtl !== void 0 ? _configProvider$rtl : false;
187
+ });
188
+ const rootEl = ref(null);
189
+ const detectedThemeMode = useThemeMode(rootEl);
190
+ const mergedTheme = computed(() => {
191
+ var _props$theme;
192
+ return (_props$theme = props.theme) !== null && _props$theme !== void 0 ? _props$theme : detectedThemeMode.value;
402
193
  });
403
- provide(SiderInjectionKey, reactive({
404
- theme,
405
- collapsed: computed(() => localCollapsed.value || railCollapsed.value),
406
- collapsedWidth
194
+ const reverseIcon = computed(() => rtl.value === !props.reverseArrow);
195
+ const defaultTriggerComponent = computed(() => {
196
+ const expandedIcon = reverseIcon.value ? IconRight : IconLeft;
197
+ const collapsedIcon = reverseIcon.value ? IconLeft : IconRight;
198
+ return mergedCollapsed.value ? collapsedIcon : expandedIcon;
199
+ });
200
+ const rawWidth = computed(() => mergedCollapsed.value ? props.collapsedWidth : props.width);
201
+ const siderWidth = computed(() => toSiderWidth(rawWidth.value));
202
+ const hasZeroWidth = computed(() => Number.parseFloat(String(props.collapsedWidth || 0)) === 0);
203
+ const renderTrigger = computed(() => (props.collapsible || below.value && hasZeroWidth.value) && !props.hideTrigger);
204
+ const { scrollbarProps } = useScrollbar(toRef(props, "scrollbar"));
205
+ const useNativeScrollbar = computed(() => props.scrollbar === false);
206
+ const divStyle = computed(() => ({
207
+ flex: `0 0 ${siderWidth.value}`,
208
+ maxWidth: siderWidth.value,
209
+ minWidth: siderWidth.value,
210
+ width: siderWidth.value
407
211
  }));
212
+ const siderCls = computed(() => [
213
+ prefixCls,
214
+ `${prefixCls}-${mergedTheme.value}`,
215
+ {
216
+ [`${prefixCls}-collapsed`]: mergedCollapsed.value,
217
+ [`${prefixCls}-has-trigger`]: props.collapsible && !props.hideTrigger && !hasZeroWidth.value,
218
+ [`${prefixCls}-below`]: below.value,
219
+ [`${prefixCls}-zero-width`]: Number.parseFloat(siderWidth.value) === 0
220
+ }
221
+ ]);
222
+ const siderContext = reactive({
223
+ siderCollapsed: mergedCollapsed.value,
224
+ theme: mergedTheme.value
225
+ });
226
+ watch(mergedCollapsed, (val) => {
227
+ siderContext.siderCollapsed = val;
228
+ });
229
+ watch(mergedTheme, (val) => {
230
+ siderContext.theme = val;
231
+ });
232
+ provide(SiderContextInjectionKey, siderContext);
408
233
  return (_ctx, _cache) => {
409
- return openBlock(), createBlock(resolveDynamicComponent(componentTag.value), mergeProps({
410
- class: classNames.value,
411
- style: siderStyles.value
412
- }, resizeDirectionsProps.value, {
413
- onMouseenter: handleMouseEnter,
414
- onMouseleave: handleMouseLeave
415
- }), {
416
- default: withCtx(() => [
417
- showMask.value ? (openBlock(), createElementBlock("div", {
418
- key: 0,
419
- class: normalizeClass(`${unref(prefixCls)}-mask`),
420
- style: normalizeStyle(maskStyles.value),
421
- onClick: handleMaskClick
422
- }, null, 6)) : createCommentVNode("", true),
423
- _ctx.$slots.image ? (openBlock(), createElementBlock("div", {
424
- key: 1,
425
- class: normalizeClass(`${unref(prefixCls)}-image`)
426
- }, [renderSlot(_ctx.$slots, "image")], 2)) : createCommentVNode("", true),
427
- _ctx.$slots.prepend ? (openBlock(), createElementBlock("div", {
428
- key: 2,
429
- class: normalizeClass(`${unref(prefixCls)}-prepend`)
430
- }, [renderSlot(_ctx.$slots, "prepend")], 2)) : createCommentVNode("", true),
431
- createElementVNode("div", { class: normalizeClass(`${unref(prefixCls)}-children`) }, [renderSlot(_ctx.$slots, "default")], 2),
432
- _ctx.$slots.append ? (openBlock(), createElementBlock("div", {
433
- key: 3,
434
- class: normalizeClass(`${unref(prefixCls)}-append`)
435
- }, [renderSlot(_ctx.$slots, "append")], 2)) : createCommentVNode("", true),
436
- showTrigger.value ? (openBlock(), createElementBlock("div", {
437
- key: 4,
438
- class: normalizeClass(triggerClassNames.value),
439
- style: normalizeStyle(triggerStyles.value),
440
- onClick: toggleTrigger
441
- }, [renderSlot(_ctx.$slots, "trigger", { collapsed: unref(localCollapsed) }, () => [!__props.reverseArrow ? (openBlock(), createElementBlock("div", _hoisted_1, [!unref(localCollapsed) ? (openBlock(), createBlock(unref(IconLeft), { key: 0 })) : (openBlock(), createBlock(unref(IconRight), { key: 1 }))])) : (openBlock(), createElementBlock("div", _hoisted_2, [unref(localCollapsed) ? (openBlock(), createBlock(unref(IconLeft), { key: 0 })) : (openBlock(), createBlock(unref(IconRight), { key: 1 }))]))])], 6)) : createCommentVNode("", true)
442
- ]),
443
- _: 3
444
- }, 16, ["class", "style"]);
234
+ return openBlock(), createElementBlock("aside", {
235
+ ref_key: "rootEl",
236
+ ref: rootEl,
237
+ class: normalizeClass(siderCls.value),
238
+ style: normalizeStyle(divStyle.value)
239
+ }, [
240
+ _ctx.$slots.header ? (openBlock(), createElementBlock("div", {
241
+ key: 0,
242
+ class: normalizeClass(`${unref(prefixCls)}-header`)
243
+ }, [renderSlot(_ctx.$slots, "header")], 2)) : createCommentVNode("", true),
244
+ useNativeScrollbar.value ? (openBlock(), createElementBlock("div", {
245
+ key: 1,
246
+ class: normalizeClass([`${unref(prefixCls)}-children`, `${unref(prefixCls)}-children-scroll`])
247
+ }, [renderSlot(_ctx.$slots, "default")], 2)) : (openBlock(), createBlock(unref(Scrollbar), mergeProps({
248
+ key: 2,
249
+ "outer-class": `${unref(prefixCls)}-children`
250
+ }, unref(scrollbarProps)), {
251
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
252
+ _: 3
253
+ }, 16, ["outer-class"])),
254
+ renderTrigger.value ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [hasZeroWidth.value ? (openBlock(), createElementBlock("span", {
255
+ key: 0,
256
+ class: normalizeClass([`${unref(prefixCls)}-zero-width-trigger`, `${unref(prefixCls)}-zero-width-trigger-${__props.reverseArrow ? "right" : "left"}`]),
257
+ style: normalizeStyle(__props.zeroWidthTriggerStyle),
258
+ onClick: toggle
259
+ }, [renderSlot(_ctx.$slots, "trigger", {}, () => [createVNode(unref(IconMenu))])], 6)) : (openBlock(), createElementBlock("div", {
260
+ key: 1,
261
+ class: normalizeClass(`${unref(prefixCls)}-trigger`),
262
+ style: normalizeStyle({ width: siderWidth.value }),
263
+ onClick: toggle
264
+ }, [renderSlot(_ctx.$slots, "trigger", {}, () => [(openBlock(), createBlock(resolveDynamicComponent(defaultTriggerComponent.value)))])], 6))], 64)) : createCommentVNode("", true)
265
+ ], 6);
445
266
  };
446
267
  }
447
268
  }));