@geelato/web-vue 2.57.0 → 2.58.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 (129) hide show
  1. package/dist/arco-vue.js +874 -535
  2. package/dist/arco-vue.js.map +1 -1
  3. package/dist/arco-vue.min.js +1645 -1546
  4. package/dist/arco-vue.min.js.map +1 -1
  5. package/dist/arco.css +39 -8
  6. package/dist/arco.min.css +1 -1
  7. package/es/_components/input-label/input-label.d.ts +3 -3
  8. package/es/_components/picker/input-range.d.ts +2 -2
  9. package/es/_components/picker/input.d.ts +2 -2
  10. package/es/_components/select-view/select-view.d.ts +1 -1
  11. package/es/_utils/array.d.ts +1 -1
  12. package/es/_utils/array.js +18 -1
  13. package/es/auto-complete/auto-complete.d.ts +3 -3
  14. package/es/auto-complete/index.d.ts +9 -9
  15. package/es/calendar/calendar.d.ts +1 -1
  16. package/es/calendar/index.d.ts +3 -3
  17. package/es/cascader/cascader-panel.d.ts +1 -1
  18. package/es/cascader/cascader.d.ts +5 -5
  19. package/es/cascader/index.d.ts +15 -15
  20. package/es/checkbox/checkbox-group.d.ts +2 -2
  21. package/es/checkbox/checkbox.d.ts +1 -1
  22. package/es/checkbox/index.d.ts +5 -5
  23. package/es/color-picker/color-picker.d.ts +1 -1
  24. package/es/color-picker/index.d.ts +3 -3
  25. package/es/date-picker/index.d.ts +12 -12
  26. package/es/date-picker/panels/date/index.d.ts +2 -2
  27. package/es/date-picker/panels/week/index.d.ts +2 -2
  28. package/es/date-picker/picker-panel.d.ts +4 -4
  29. package/es/date-picker/picker.d.ts +11 -11
  30. package/es/date-picker/range-picker-panel.d.ts +4 -4
  31. package/es/date-picker/range-picker.d.ts +12 -12
  32. package/es/drawer/drawer.d.ts +24 -0
  33. package/es/drawer/drawer.js +61 -6
  34. package/es/drawer/index.d.ts +45 -0
  35. package/es/drawer/style/index.css +10 -0
  36. package/es/drawer/style/index.less +12 -0
  37. package/es/form/form-item.d.ts +3 -3
  38. package/es/form/index.d.ts +3 -3
  39. package/es/index.css +39 -8
  40. package/es/input/index.d.ts +12 -12
  41. package/es/input/input-password.d.ts +3 -3
  42. package/es/input/input.d.ts +3 -3
  43. package/es/input-number/index.d.ts +3 -3
  44. package/es/input-number/input-number.d.ts +1 -1
  45. package/es/input-number/input-number.js +2 -0
  46. package/es/input-tag/index.d.ts +21 -21
  47. package/es/input-tag/input-tag.d.ts +7 -7
  48. package/es/mention/index.d.ts +9 -9
  49. package/es/mention/mention.d.ts +3 -3
  50. package/es/menu/item.d.ts +1 -1
  51. package/es/menu/sub-menu-pop.d.ts +1 -1
  52. package/es/message/message.d.ts +1 -1
  53. package/es/modal/index.d.ts +33 -3
  54. package/es/modal/modal.d.ts +16 -1
  55. package/es/modal/modal.js +23 -6
  56. package/es/modal/modal.vue_vue_type_script_lang.js +26 -2
  57. package/es/modal/style/index.css +7 -1
  58. package/es/modal/style/index.less +8 -1
  59. package/es/pagination/index.d.ts +3 -3
  60. package/es/pagination/page-jumper.d.ts +3 -3
  61. package/es/pagination/page-options.d.ts +16 -16
  62. package/es/pagination/pagination.d.ts +1 -1
  63. package/es/radio/index.d.ts +8 -8
  64. package/es/radio/radio-group.d.ts +2 -2
  65. package/es/radio/radio.d.ts +2 -2
  66. package/es/rate/index.d.ts +9 -9
  67. package/es/rate/rate.d.ts +3 -3
  68. package/es/select/index.d.ts +16 -16
  69. package/es/select/option.d.ts +5 -5
  70. package/es/select/select.d.ts +4 -4
  71. package/es/slider/index.d.ts +12 -12
  72. package/es/slider/slider-input.d.ts +3 -3
  73. package/es/slider/slider.d.ts +5 -5
  74. package/es/switch/index.d.ts +3 -3
  75. package/es/switch/switch.d.ts +1 -1
  76. package/es/table/context.d.ts +3 -0
  77. package/es/table/hooks/use-row-selection.js +5 -3
  78. package/es/table/interface.d.ts +1 -1
  79. package/es/table/style/index.css +22 -7
  80. package/es/table/style/index.less +25 -8
  81. package/es/table/table-operation-td.d.ts +13 -13
  82. package/es/table/table-operation-td.js +6 -6
  83. package/es/table/table-operation-th.js +19 -7
  84. package/es/table/table-td.js +2 -2
  85. package/es/table/table.js +165 -33
  86. package/es/table/utils.d.ts +1 -1
  87. package/es/table/utils.js +9 -5
  88. package/es/textarea/index.d.ts +6 -6
  89. package/es/textarea/textarea.d.ts +2 -2
  90. package/es/time-picker/index.d.ts +22 -22
  91. package/es/time-picker/panel.d.ts +2 -2
  92. package/es/time-picker/range-panel.d.ts +2 -2
  93. package/es/time-picker/time-picker.d.ts +10 -10
  94. package/es/transfer/index.d.ts +16 -16
  95. package/es/transfer/transfer-view.d.ts +5 -5
  96. package/es/transfer/transfer.d.ts +7 -7
  97. package/es/tree/base-node.d.ts +5 -5
  98. package/es/tree/transition-node-list.d.ts +5 -5
  99. package/es/tree-select/index.d.ts +5 -5
  100. package/es/tree-select/tree-select.d.ts +2 -2
  101. package/es/typography/edit-content.d.ts +36 -36
  102. package/es/typography/index.d.ts +3 -3
  103. package/es/typography/title.d.ts +3 -3
  104. package/es/upload/index.d.ts +3 -3
  105. package/es/upload/upload.d.ts +1 -1
  106. package/es/verification-code/index.d.ts +6 -6
  107. package/es/verification-code/verification-code.d.ts +2 -2
  108. package/json/vetur-attributes.json +2305 -2305
  109. package/json/vetur-tags.json +865 -865
  110. package/json/web-types.json +4470 -4470
  111. package/lib/_utils/array.js +18 -1
  112. package/lib/drawer/drawer.js +63 -8
  113. package/lib/drawer/style/index.css +10 -0
  114. package/lib/drawer/style/index.less +12 -0
  115. package/lib/index.css +39 -8
  116. package/lib/input-number/input-number.js +2 -0
  117. package/lib/modal/modal.js +23 -6
  118. package/lib/modal/modal.vue_vue_type_script_lang.js +36 -12
  119. package/lib/modal/style/index.css +7 -1
  120. package/lib/modal/style/index.less +8 -1
  121. package/lib/table/hooks/use-row-selection.js +5 -3
  122. package/lib/table/style/index.css +22 -7
  123. package/lib/table/style/index.less +25 -8
  124. package/lib/table/table-operation-td.js +6 -6
  125. package/lib/table/table-operation-th.js +19 -7
  126. package/lib/table/table-td.js +2 -2
  127. package/lib/table/table.js +164 -32
  128. package/lib/table/utils.js +9 -5
  129. package/package.json +1 -1
@@ -1,7 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const union = (target, source, difference = false) => {
4
- return difference ? target.filter((item) => !source.includes(item)) : Array.from(new Set(target.concat(source)));
4
+ if (difference) {
5
+ const sourceSet = source instanceof Set ? source : new Set(source);
6
+ const result = [];
7
+ for (const item of target) {
8
+ if (!sourceSet.has(item)) {
9
+ result.push(item);
10
+ }
11
+ }
12
+ return result;
13
+ }
14
+ const resultSet = /* @__PURE__ */ new Set();
15
+ for (const item of target) {
16
+ resultSet.add(item);
17
+ }
18
+ for (const item of source) {
19
+ resultSet.add(item);
20
+ }
21
+ return Array.from(resultSet);
5
22
  };
6
23
  const getReverse = (array) => {
7
24
  const result = [];
@@ -5,7 +5,9 @@ var clientOnly = require("../_components/client-only.js");
5
5
  var index = require("../button/index.js");
6
6
  var iconHover = require("../_components/icon-hover.js");
7
7
  var index$1 = require("../icon/icon-close/index.js");
8
- var index$2 = require("../locale/index.js");
8
+ var index$2 = require("../icon/icon-fullscreen/index.js");
9
+ var index$3 = require("../icon/icon-fullscreen-exit/index.js");
10
+ var index$4 = require("../locale/index.js");
9
11
  var useOverflow = require("../_hooks/use-overflow.js");
10
12
  var dom = require("../_utils/dom.js");
11
13
  var usePopupManager = require("../_hooks/use-popup-manager.js");
@@ -20,7 +22,9 @@ const _sfc_main = vue.defineComponent({
20
22
  ClientOnly: clientOnly,
21
23
  ArcoButton: index["default"],
22
24
  IconHover: iconHover,
23
- IconClose: index$1
25
+ IconClose: index$1,
26
+ IconFullscreen: index$2,
27
+ IconFullscreenExit: index$3
24
28
  },
25
29
  inheritAttrs: false,
26
30
  props: {
@@ -109,10 +113,19 @@ const _sfc_main = vue.defineComponent({
109
113
  hideCancel: {
110
114
  type: Boolean,
111
115
  default: false
116
+ },
117
+ fullscreen: {
118
+ type: Boolean,
119
+ default: false
120
+ },
121
+ showFullscreen: {
122
+ type: Boolean,
123
+ default: false
112
124
  }
113
125
  },
114
126
  emits: {
115
127
  "update:visible": (visible) => true,
128
+ "update:fullscreen": (fullscreen) => true,
116
129
  "ok": (e) => true,
117
130
  "cancel": (e) => true,
118
131
  "open": () => true,
@@ -123,12 +136,19 @@ const _sfc_main = vue.defineComponent({
123
136
  setup(props, { emit }) {
124
137
  const { popupContainer } = vue.toRefs(props);
125
138
  const prefixCls = globalConfig.getPrefixCls("drawer");
126
- const { t } = index$2.useI18n();
139
+ const { t } = index$4.useI18n();
127
140
  const _visible = vue.ref(props.defaultVisible);
141
+ const _fullscreen = vue.ref(props.fullscreen);
128
142
  const computedVisible = vue.computed(() => {
129
143
  var _a;
130
144
  return (_a = props.visible) != null ? _a : _visible.value;
131
145
  });
146
+ const mergedFullscreen = vue.computed(
147
+ () => {
148
+ var _a;
149
+ return (_a = props.fullscreen) != null ? _a : _fullscreen.value;
150
+ }
151
+ );
132
152
  const _okLoading = vue.ref(false);
133
153
  const mergedOkLoading = vue.computed(() => props.okLoading || _okLoading.value);
134
154
  const { teleportContainer, containerRef } = useTeleportContainer.useTeleportContainer({
@@ -215,6 +235,11 @@ const _sfc_main = vue.defineComponent({
215
235
  close();
216
236
  }
217
237
  };
238
+ const toggleFullscreen = () => {
239
+ const next = !mergedFullscreen.value;
240
+ _fullscreen.value = next;
241
+ emit("update:fullscreen", next);
242
+ };
218
243
  const handleMask = (e) => {
219
244
  if (props.maskClosable) {
220
245
  handleCancel(e);
@@ -258,6 +283,14 @@ const _sfc_main = vue.defineComponent({
258
283
  removeGlobalKeyDownListener();
259
284
  }
260
285
  });
286
+ vue.watch(
287
+ () => props.fullscreen,
288
+ (val) => {
289
+ if (_fullscreen.value !== val) {
290
+ _fullscreen.value = !!val;
291
+ }
292
+ }
293
+ );
261
294
  const style = vue.computed(() => {
262
295
  var _a;
263
296
  const style2 = {
@@ -285,13 +318,17 @@ const _sfc_main = vue.defineComponent({
285
318
  handleClose,
286
319
  handleMask,
287
320
  isFixed,
288
- teleportContainer
321
+ teleportContainer,
322
+ mergedFullscreen,
323
+ toggleFullscreen
289
324
  };
290
325
  }
291
326
  });
292
327
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
293
- const _component_icon_close = vue.resolveComponent("icon-close");
328
+ const _component_icon_fullscreen = vue.resolveComponent("icon-fullscreen");
329
+ const _component_icon_fullscreen_exit = vue.resolveComponent("icon-fullscreen-exit");
294
330
  const _component_icon_hover = vue.resolveComponent("icon-hover");
331
+ const _component_icon_close = vue.resolveComponent("icon-close");
295
332
  const _component_arco_button = vue.resolveComponent("arco-button");
296
333
  const _component_client_only = vue.resolveComponent("client-only");
297
334
  return vue.openBlock(), vue.createBlock(_component_client_only, null, {
@@ -329,7 +366,10 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
329
366
  }, {
330
367
  default: vue.withCtx(() => [
331
368
  vue.withDirectives(vue.createElementVNode("div", {
332
- class: vue.normalizeClass(_ctx.prefixCls),
369
+ class: vue.normalizeClass([
370
+ _ctx.prefixCls,
371
+ { [`${_ctx.prefixCls}-fullscreen`]: _ctx.mergedFullscreen }
372
+ ]),
333
373
  style: vue.normalizeStyle(_ctx.style)
334
374
  }, [
335
375
  _ctx.header ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -345,13 +385,28 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
345
385
  vue.createTextVNode(vue.toDisplayString(_ctx.title), 1)
346
386
  ])
347
387
  ], 2)) : vue.createCommentVNode("v-if", true),
348
- _ctx.closable ? (vue.openBlock(), vue.createElementBlock("div", {
388
+ _ctx.showFullscreen ? (vue.openBlock(), vue.createElementBlock("div", {
349
389
  key: 1,
350
390
  tabindex: "-1",
351
391
  role: "button",
392
+ "aria-label": "Fullscreen",
393
+ class: vue.normalizeClass(`${_ctx.prefixCls}-fullscreen-btn`),
394
+ onClick: _cache[1] || (_cache[1] = (...args) => _ctx.toggleFullscreen && _ctx.toggleFullscreen(...args))
395
+ }, [
396
+ vue.createVNode(_component_icon_hover, null, {
397
+ default: vue.withCtx(() => [
398
+ !_ctx.mergedFullscreen ? (vue.openBlock(), vue.createBlock(_component_icon_fullscreen, { key: 0 })) : (vue.openBlock(), vue.createBlock(_component_icon_fullscreen_exit, { key: 1 }))
399
+ ]),
400
+ _: 1
401
+ })
402
+ ], 2)) : vue.createCommentVNode("v-if", true),
403
+ _ctx.closable ? (vue.openBlock(), vue.createElementBlock("div", {
404
+ key: 2,
405
+ tabindex: "-1",
406
+ role: "button",
352
407
  "aria-label": "Close",
353
408
  class: vue.normalizeClass(`${_ctx.prefixCls}-close-btn`),
354
- onClick: _cache[1] || (_cache[1] = (...args) => _ctx.handleCancel && _ctx.handleCancel(...args))
409
+ onClick: _cache[2] || (_cache[2] = (...args) => _ctx.handleCancel && _ctx.handleCancel(...args))
355
410
  }, [
356
411
  vue.createVNode(_component_icon_hover, null, {
357
412
  default: vue.withCtx(() => [
@@ -64,6 +64,12 @@
64
64
  font-size: 12px;
65
65
  cursor: pointer;
66
66
  }
67
+ .arco-drawer-header .arco-drawer-fullscreen-btn {
68
+ margin-left: 8px;
69
+ color: var(--color-text-1);
70
+ font-size: 12px;
71
+ cursor: pointer;
72
+ }
67
73
  .arco-drawer-footer {
68
74
  flex-shrink: 0;
69
75
  box-sizing: border-box;
@@ -83,6 +89,10 @@
83
89
  overflow: auto;
84
90
  color: var(--color-text-1);
85
91
  }
92
+ .arco-drawer-fullscreen {
93
+ width: 100% !important;
94
+ height: 100% !important;
95
+ }
86
96
  .fade-drawer-enter-from,
87
97
  .fade-drawer-appear-from {
88
98
  opacity: 0;
@@ -54,6 +54,13 @@
54
54
  font-size: @drawer-font-size-close-icon;
55
55
  cursor: pointer;
56
56
  }
57
+
58
+ .@{drawer-prefix-cls}-fullscreen-btn {
59
+ margin-left: 8px;
60
+ color: @drawer-color-header-text;
61
+ font-size: @drawer-font-size-close-icon;
62
+ cursor: pointer;
63
+ }
57
64
  }
58
65
 
59
66
  &-footer {
@@ -79,6 +86,11 @@
79
86
  }
80
87
  }
81
88
 
89
+ .@{drawer-prefix-cls}-fullscreen {
90
+ width: 100% !important;
91
+ height: 100% !important;
92
+ }
93
+
82
94
  .fade-drawer-enter-from,
83
95
  .fade-drawer-appear-from {
84
96
  opacity: 0;
package/lib/index.css CHANGED
@@ -6169,6 +6169,12 @@ body[arco-theme='dark'] .arco-carousel-indicator-outer .arco-carousel-indicator-
6169
6169
  font-size: 12px;
6170
6170
  cursor: pointer;
6171
6171
  }
6172
+ .arco-drawer-header .arco-drawer-fullscreen-btn {
6173
+ margin-left: 8px;
6174
+ color: var(--color-text-1);
6175
+ font-size: 12px;
6176
+ cursor: pointer;
6177
+ }
6172
6178
  .arco-drawer-footer {
6173
6179
  flex-shrink: 0;
6174
6180
  box-sizing: border-box;
@@ -6188,6 +6194,10 @@ body[arco-theme='dark'] .arco-carousel-indicator-outer .arco-carousel-indicator-
6188
6194
  overflow: auto;
6189
6195
  color: var(--color-text-1);
6190
6196
  }
6197
+ .arco-drawer-fullscreen {
6198
+ width: 100% !important;
6199
+ height: 100% !important;
6200
+ }
6191
6201
  .fade-drawer-enter-from,
6192
6202
  .fade-drawer-appear-from {
6193
6203
  opacity: 0;
@@ -11140,7 +11150,13 @@ body[arco-theme='dark'] .arco-carousel-indicator-outer .arco-carousel-indicator-
11140
11150
  margin-left: 12px;
11141
11151
  }
11142
11152
  .arco-modal-close-btn {
11143
- margin-left: -12px;
11153
+ margin-left: 8px;
11154
+ color: var(--color-text-1);
11155
+ font-size: 12px;
11156
+ cursor: pointer;
11157
+ }
11158
+ .arco-modal-fullscreen-btn {
11159
+ margin-left: 8px;
11144
11160
  color: var(--color-text-1);
11145
11161
  font-size: 12px;
11146
11162
  cursor: pointer;
@@ -14393,6 +14409,24 @@ body[arco-theme='dark'] .arco-radio-button::after {
14393
14409
  justify-content: center;
14394
14410
  padding: 0;
14395
14411
  }
14412
+ .arco-table-th.arco-table-operation.arco-table-checkbox .arco-table-cell,
14413
+ .arco-table-td.arco-table-operation.arco-table-checkbox .arco-table-cell,
14414
+ .arco-table-th.arco-table-operation.arco-table-radio .arco-table-cell,
14415
+ .arco-table-td.arco-table-operation.arco-table-radio .arco-table-cell {
14416
+ padding: 0 4px;
14417
+ }
14418
+ .arco-table-th.arco-table-operation.arco-table-checkbox,
14419
+ .arco-table-td.arco-table-operation.arco-table-checkbox {
14420
+ position: relative;
14421
+ z-index: 11;
14422
+ }
14423
+ .arco-table-th.arco-table-operation.arco-table-checkbox.arco-table-col-fixed-left,
14424
+ .arco-table-td.arco-table-operation.arco-table-checkbox.arco-table-col-fixed-left,
14425
+ .arco-table-th.arco-table-operation.arco-table-checkbox.arco-table-col-fixed-right,
14426
+ .arco-table-td.arco-table-operation.arco-table-checkbox.arco-table-col-fixed-right {
14427
+ position: sticky !important;
14428
+ z-index: 12;
14429
+ }
14396
14430
  .arco-table-radio,
14397
14431
  .arco-table-checkbox {
14398
14432
  justify-content: center;
@@ -14783,13 +14817,10 @@ body[arco-theme='dark'] .arco-radio-button::after {
14783
14817
  .arco-table-virtualized .arco-table-element {
14784
14818
  table-layout: fixed;
14785
14819
  }
14786
- .arco-table-virtualized div.arco-table-body div.arco-table-tr {
14787
- display: flex;
14788
- }
14789
- .arco-table-virtualized div.arco-table-body div.arco-table-td {
14790
- display: flex;
14791
- flex: 1;
14792
- align-items: center;
14820
+ .arco-table-virtualized .arco-table-body .arco-table-td.arco-table-col-fixed-left,
14821
+ .arco-table-virtualized .arco-table-body .arco-table-td.arco-table-col-fixed-right {
14822
+ position: sticky;
14823
+ z-index: 10;
14793
14824
  }
14794
14825
  .arco-table-pagination {
14795
14826
  display: flex;
@@ -214,6 +214,8 @@ var _InputNumber = vue.defineComponent({
214
214
  };
215
215
  const handleInput = (value, ev) => {
216
216
  var _a2, _b, _c, _d;
217
+ if (props.readOnly)
218
+ return;
217
219
  value = value.trim().replace(/。/g, ".");
218
220
  value = (_b = (_a2 = props.parser) == null ? void 0 : _a2.call(props, value)) != null ? _b : value;
219
221
  if (is.isNumber(Number(value)) || /^(\.|-)$/.test(value)) {
@@ -7,8 +7,10 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
7
7
  const _component_icon_check_circle_fill = vue.resolveComponent("icon-check-circle-fill");
8
8
  const _component_icon_exclamation_circle_fill = vue.resolveComponent("icon-exclamation-circle-fill");
9
9
  const _component_icon_close_circle_fill = vue.resolveComponent("icon-close-circle-fill");
10
- const _component_icon_close = vue.resolveComponent("icon-close");
10
+ const _component_icon_fullscreen = vue.resolveComponent("icon-fullscreen");
11
+ const _component_icon_fullscreen_exit = vue.resolveComponent("icon-fullscreen-exit");
11
12
  const _component_icon_hover = vue.resolveComponent("icon-hover");
13
+ const _component_icon_close = vue.resolveComponent("icon-close");
12
14
  const _component_arco_button = vue.resolveComponent("arco-button");
13
15
  const _component_client_only = vue.resolveComponent("client-only");
14
16
  return vue.openBlock(), vue.createBlock(_component_client_only, null, {
@@ -41,8 +43,8 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
41
43
  vue.createElementVNode("div", {
42
44
  ref: "wrapperRef",
43
45
  class: vue.normalizeClass(_ctx.wrapperCls),
44
- onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args) => _ctx.handleMaskClick && _ctx.handleMaskClick(...args), ["self"])),
45
- onMousedown: _cache[3] || (_cache[3] = vue.withModifiers((...args) => _ctx.handleMaskMouseDown && _ctx.handleMaskMouseDown(...args), ["self"]))
46
+ onClick: _cache[3] || (_cache[3] = vue.withModifiers((...args) => _ctx.handleMaskClick && _ctx.handleMaskClick(...args), ["self"])),
47
+ onMousedown: _cache[4] || (_cache[4] = vue.withModifiers((...args) => _ctx.handleMaskMouseDown && _ctx.handleMaskMouseDown(...args), ["self"]))
46
48
  }, [
47
49
  vue.createVNode(vue.Transition, {
48
50
  name: _ctx.modalAnimationName,
@@ -60,7 +62,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
60
62
  !_ctx.hideTitle && (_ctx.$slots.title || _ctx.title || _ctx.closable) ? (vue.openBlock(), vue.createElementBlock("div", {
61
63
  key: 0,
62
64
  class: vue.normalizeClass(`${_ctx.prefixCls}-header`),
63
- onMousedown: _cache[1] || (_cache[1] = (...args) => _ctx.handleMoveDown && _ctx.handleMoveDown(...args))
65
+ onMousedown: _cache[2] || (_cache[2] = (...args) => _ctx.handleMoveDown && _ctx.handleMoveDown(...args))
64
66
  }, [
65
67
  _ctx.$slots.title || _ctx.title ? (vue.openBlock(), vue.createElementBlock("div", {
66
68
  key: 0,
@@ -82,13 +84,28 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
82
84
  vue.createTextVNode(vue.toDisplayString(_ctx.title), 1)
83
85
  ])
84
86
  ], 2)) : vue.createCommentVNode("v-if", true),
85
- !_ctx.simple && _ctx.closable ? (vue.openBlock(), vue.createElementBlock("div", {
87
+ !_ctx.simple && _ctx.showFullscreen ? (vue.openBlock(), vue.createElementBlock("div", {
86
88
  key: 1,
87
89
  tabindex: "-1",
88
90
  role: "button",
91
+ "aria-label": "Fullscreen",
92
+ class: vue.normalizeClass(`${_ctx.prefixCls}-fullscreen-btn`),
93
+ onClick: _cache[0] || (_cache[0] = (...args) => _ctx.toggleFullscreen && _ctx.toggleFullscreen(...args))
94
+ }, [
95
+ vue.createVNode(_component_icon_hover, null, {
96
+ default: vue.withCtx(() => [
97
+ !_ctx.mergedFullscreen ? (vue.openBlock(), vue.createBlock(_component_icon_fullscreen, { key: 0 })) : (vue.openBlock(), vue.createBlock(_component_icon_fullscreen_exit, { key: 1 }))
98
+ ]),
99
+ _: 1
100
+ })
101
+ ], 2)) : vue.createCommentVNode("v-if", true),
102
+ !_ctx.simple && _ctx.closable ? (vue.openBlock(), vue.createElementBlock("div", {
103
+ key: 2,
104
+ tabindex: "-1",
105
+ role: "button",
89
106
  "aria-label": "Close",
90
107
  class: vue.normalizeClass(`${_ctx.prefixCls}-close-btn`),
91
- onClick: _cache[0] || (_cache[0] = (...args) => _ctx.handleCancel && _ctx.handleCancel(...args))
108
+ onClick: _cache[1] || (_cache[1] = (...args) => _ctx.handleCancel && _ctx.handleCancel(...args))
92
109
  }, [
93
110
  vue.createVNode(_component_icon_hover, null, {
94
111
  default: vue.withCtx(() => [
@@ -5,11 +5,13 @@ var clientOnly = require("../_components/client-only.js");
5
5
  var iconHover = require("../_components/icon-hover.js");
6
6
  var index = require("../button/index.js");
7
7
  var index$1 = require("../icon/icon-close/index.js");
8
- var index$2 = require("../icon/icon-info-circle-fill/index.js");
9
- var index$3 = require("../icon/icon-check-circle-fill/index.js");
10
- var index$4 = require("../icon/icon-exclamation-circle-fill/index.js");
11
- var index$5 = require("../icon/icon-close-circle-fill/index.js");
12
- var index$6 = require("../locale/index.js");
8
+ var index$2 = require("../icon/icon-fullscreen/index.js");
9
+ var index$3 = require("../icon/icon-fullscreen-exit/index.js");
10
+ var index$4 = require("../icon/icon-info-circle-fill/index.js");
11
+ var index$5 = require("../icon/icon-check-circle-fill/index.js");
12
+ var index$6 = require("../icon/icon-exclamation-circle-fill/index.js");
13
+ var index$7 = require("../icon/icon-close-circle-fill/index.js");
14
+ var index$8 = require("../locale/index.js");
13
15
  var useOverflow = require("../_hooks/use-overflow.js");
14
16
  var dom = require("../_utils/dom.js");
15
17
  var usePopupManager = require("../_hooks/use-popup-manager.js");
@@ -24,10 +26,12 @@ var _sfc_main = vue.defineComponent({
24
26
  ArcoButton: index["default"],
25
27
  IconHover: iconHover,
26
28
  IconClose: index$1,
27
- IconInfoCircleFill: index$2,
28
- IconCheckCircleFill: index$3,
29
- IconExclamationCircleFill: index$4,
30
- IconCloseCircleFill: index$5
29
+ IconFullscreen: index$2,
30
+ IconFullscreenExit: index$3,
31
+ IconInfoCircleFill: index$4,
32
+ IconCheckCircleFill: index$5,
33
+ IconExclamationCircleFill: index$6,
34
+ IconCloseCircleFill: index$7
31
35
  },
32
36
  inheritAttrs: false,
33
37
  props: {
@@ -130,6 +134,10 @@ var _sfc_main = vue.defineComponent({
130
134
  type: Boolean,
131
135
  default: false
132
136
  },
137
+ showFullscreen: {
138
+ type: Boolean,
139
+ default: false
140
+ },
133
141
  maskAnimationName: {
134
142
  type: String,
135
143
  default: (props) => {
@@ -164,6 +172,7 @@ var _sfc_main = vue.defineComponent({
164
172
  },
165
173
  emits: {
166
174
  "update:visible": (visible) => true,
175
+ "update:fullscreen": (fullscreen) => true,
167
176
  "ok": (e) => true,
168
177
  "cancel": (e) => true,
169
178
  "open": () => true,
@@ -182,7 +191,7 @@ var _sfc_main = vue.defineComponent({
182
191
  const prefixCls = globalConfig.getPrefixCls("modal");
183
192
  const {
184
193
  t
185
- } = index$6.useI18n();
194
+ } = index$8.useI18n();
186
195
  const wrapperRef = vue.ref();
187
196
  const modalRef = vue.ref();
188
197
  const _visible = vue.ref(props.defaultVisible);
@@ -192,6 +201,11 @@ var _sfc_main = vue.defineComponent({
192
201
  });
193
202
  const _okLoading = vue.ref(false);
194
203
  const mergedOkLoading = vue.computed(() => props.okLoading || _okLoading.value);
204
+ const _fullscreen = vue.ref(props.fullscreen);
205
+ const mergedFullscreen = vue.computed(() => {
206
+ var _a;
207
+ return (_a = props.fullscreen) != null ? _a : _fullscreen.value;
208
+ });
195
209
  const mergedDraggable = vue.computed(() => props.draggable && !props.fullscreen);
196
210
  const {
197
211
  teleportContainer,
@@ -354,7 +368,15 @@ var _sfc_main = vue.defineComponent({
354
368
  if (position.value) {
355
369
  position.value = void 0;
356
370
  }
371
+ if (_fullscreen.value !== fullscreen.value) {
372
+ _fullscreen.value = !!fullscreen.value;
373
+ }
357
374
  });
375
+ const toggleFullscreen = () => {
376
+ const next = !mergedFullscreen.value;
377
+ _fullscreen.value = next;
378
+ emit("update:fullscreen", next);
379
+ };
358
380
  const wrapperCls = vue.computed(() => [`${prefixCls}-wrapper`, {
359
381
  [`${prefixCls}-wrapper-align-center`]: props.alignCenter && !props.fullscreen,
360
382
  [`${prefixCls}-wrapper-moved`]: Boolean(position.value)
@@ -362,7 +384,7 @@ var _sfc_main = vue.defineComponent({
362
384
  const modalCls = vue.computed(() => [`${prefixCls}`, props.modalClass, {
363
385
  [`${prefixCls}-simple`]: props.simple,
364
386
  [`${prefixCls}-draggable`]: mergedDraggable.value,
365
- [`${prefixCls}-fullscreen`]: props.fullscreen
387
+ [`${prefixCls}-fullscreen`]: mergedFullscreen.value
366
388
  }]);
367
389
  const mergedModalStyle = vue.computed(() => {
368
390
  var _a;
@@ -401,7 +423,9 @@ var _sfc_main = vue.defineComponent({
401
423
  wrapperCls,
402
424
  modalCls,
403
425
  teleportContainer,
404
- handleMoveDown
426
+ handleMoveDown,
427
+ mergedFullscreen,
428
+ toggleFullscreen
405
429
  };
406
430
  }
407
431
  });
@@ -116,7 +116,13 @@
116
116
  margin-left: 12px;
117
117
  }
118
118
  .arco-modal-close-btn {
119
- margin-left: -12px;
119
+ margin-left: 8px;
120
+ color: var(--color-text-1);
121
+ font-size: 12px;
122
+ cursor: pointer;
123
+ }
124
+ .arco-modal-fullscreen-btn {
125
+ margin-left: 8px;
120
126
  color: var(--color-text-1);
121
127
  font-size: 12px;
122
128
  cursor: pointer;
@@ -127,7 +127,14 @@
127
127
  }
128
128
 
129
129
  &-close-btn {
130
- margin-left: -@modal-font-size-close-icon;
130
+ margin-left: 8px;
131
+ color: @modal-color-header-text;
132
+ font-size: @modal-font-size-close-icon;
133
+ cursor: pointer;
134
+ }
135
+
136
+ &-fullscreen-btn {
137
+ margin-left: 8px;
131
138
  color: @modal-color-header-text;
132
139
  font-size: @modal-font-size-close-icon;
133
140
  cursor: pointer;
@@ -25,9 +25,11 @@ const useRowSelection = ({
25
25
  return (_c2 = (_b2 = selectedKeys.value) != null ? _b2 : (_a2 = rowSelection.value) == null ? void 0 : _a2.selectedRowKeys) != null ? _c2 : _selectedRowKeys.value;
26
26
  }
27
27
  );
28
- const currentSelectedRowKeys = vue.computed(
29
- () => selectedRowKeys.value.filter((key) => currentAllRowKeys.value.includes(key))
30
- );
28
+ const currentAllRowKeySet = vue.computed(() => new Set(currentAllRowKeys.value));
29
+ const currentSelectedRowKeys = vue.computed(() => {
30
+ const allKeySet = currentAllRowKeySet.value;
31
+ return selectedRowKeys.value.filter((key) => allKeySet.has(key));
32
+ });
31
33
  const handleSelectAll = (checked) => {
32
34
  const newKeys = array.union(
33
35
  selectedRowKeys.value,
@@ -275,6 +275,24 @@
275
275
  justify-content: center;
276
276
  padding: 0;
277
277
  }
278
+ .arco-table-th.arco-table-operation.arco-table-checkbox .arco-table-cell,
279
+ .arco-table-td.arco-table-operation.arco-table-checkbox .arco-table-cell,
280
+ .arco-table-th.arco-table-operation.arco-table-radio .arco-table-cell,
281
+ .arco-table-td.arco-table-operation.arco-table-radio .arco-table-cell {
282
+ padding: 0 4px;
283
+ }
284
+ .arco-table-th.arco-table-operation.arco-table-checkbox,
285
+ .arco-table-td.arco-table-operation.arco-table-checkbox {
286
+ position: relative;
287
+ z-index: 11;
288
+ }
289
+ .arco-table-th.arco-table-operation.arco-table-checkbox.arco-table-col-fixed-left,
290
+ .arco-table-td.arco-table-operation.arco-table-checkbox.arco-table-col-fixed-left,
291
+ .arco-table-th.arco-table-operation.arco-table-checkbox.arco-table-col-fixed-right,
292
+ .arco-table-td.arco-table-operation.arco-table-checkbox.arco-table-col-fixed-right {
293
+ position: sticky !important;
294
+ z-index: 12;
295
+ }
278
296
  .arco-table-radio,
279
297
  .arco-table-checkbox {
280
298
  justify-content: center;
@@ -665,13 +683,10 @@
665
683
  .arco-table-virtualized .arco-table-element {
666
684
  table-layout: fixed;
667
685
  }
668
- .arco-table-virtualized div.arco-table-body div.arco-table-tr {
669
- display: flex;
670
- }
671
- .arco-table-virtualized div.arco-table-body div.arco-table-td {
672
- display: flex;
673
- flex: 1;
674
- align-items: center;
686
+ .arco-table-virtualized .arco-table-body .arco-table-td.arco-table-col-fixed-left,
687
+ .arco-table-virtualized .arco-table-body .arco-table-td.arco-table-col-fixed-right {
688
+ position: sticky;
689
+ z-index: 10;
675
690
  }
676
691
  .arco-table-pagination {
677
692
  display: flex;
@@ -349,6 +349,25 @@
349
349
  padding: 0;
350
350
  }
351
351
 
352
+ &-th&-operation&-checkbox &-cell,
353
+ &-td&-operation&-checkbox &-cell,
354
+ &-th&-operation&-radio &-cell,
355
+ &-td&-operation&-radio &-cell {
356
+ padding: 0 @spacing-2;
357
+ }
358
+
359
+ &-th&-operation&-checkbox,
360
+ &-td&-operation&-checkbox {
361
+ position: relative;
362
+ z-index: 11;
363
+
364
+ &.@{table-prefix-cls}-col-fixed-left,
365
+ &.@{table-prefix-cls}-col-fixed-right {
366
+ position: sticky !important;
367
+ z-index: 12;
368
+ }
369
+ }
370
+
352
371
  &-radio,
353
372
  &-checkbox {
354
373
  justify-content: center;
@@ -824,14 +843,12 @@
824
843
  table-layout: fixed;
825
844
  }
826
845
 
827
- &-virtualized div&-body div&-tr {
828
- display: flex;
829
- }
830
-
831
- &-virtualized div&-body div&-td {
832
- display: flex;
833
- flex: 1;
834
- align-items: center;
846
+ &-virtualized .@{table-prefix-cls}-body .@{table-prefix-cls}-td {
847
+ &.@{table-prefix-cls}-col-fixed-left,
848
+ &.@{table-prefix-cls}-col-fixed-right {
849
+ position: sticky;
850
+ z-index: 10;
851
+ }
835
852
  }
836
853
  }
837
854
 
@@ -68,11 +68,11 @@ var OperationTd = vue.defineComponent({
68
68
  }, ...utils.getOperationFixedCls(prefixCls, props.operationColumn)]);
69
69
  const leafKeys = vue.computed(() => utils.getLeafKeys(props.record));
70
70
  const selectionStatus = vue.computed(() => {
71
- var _a;
72
- return utils.getSelectionStatus((_a = tableCtx.currentSelectedRowKeys) != null ? _a : [], leafKeys.value);
71
+ var _a, _b;
72
+ return utils.getSelectionStatus((_b = (_a = tableCtx.currentSelectedRowKeySet) != null ? _a : tableCtx.currentSelectedRowKeys) != null ? _b : [], leafKeys.value);
73
73
  });
74
74
  const renderContent = () => {
75
- var _a, _b, _c, _d, _e, _f;
75
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
76
76
  if (props.summary) {
77
77
  return null;
78
78
  }
@@ -95,7 +95,7 @@ var OperationTd = vue.defineComponent({
95
95
  }, null);
96
96
  }
97
97
  return vue.createVNode(index["default"], {
98
- "modelValue": (_b = (_a = props.selectedRowKeys) == null ? void 0 : _a.includes(value)) != null ? _b : false,
98
+ "modelValue": (_d = (_c = (_a = tableCtx.selectedRowKeySet) == null ? void 0 : _a.has(value)) != null ? _c : (_b = props.selectedRowKeys) == null ? void 0 : _b.includes(value)) != null ? _d : false,
99
99
  "disabled": Boolean(props.record.disabled),
100
100
  "uninjectGroupContext": true,
101
101
  "onChange": (checked) => {
@@ -108,7 +108,7 @@ var OperationTd = vue.defineComponent({
108
108
  if (props.operationColumn.name === "selection-radio") {
109
109
  const value = props.record.key;
110
110
  return vue.createVNode(index$1["default"], {
111
- "modelValue": (_d = (_c = props.selectedRowKeys) == null ? void 0 : _c.includes(value)) != null ? _d : false,
111
+ "modelValue": (_h = (_g = (_e = tableCtx.selectedRowKeySet) == null ? void 0 : _e.has(value)) != null ? _g : (_f = props.selectedRowKeys) == null ? void 0 : _f.includes(value)) != null ? _h : false,
112
112
  "disabled": Boolean(props.record.disabled),
113
113
  "uninjectGroupContext": true,
114
114
  "onChange": (checked) => {
@@ -125,7 +125,7 @@ var OperationTd = vue.defineComponent({
125
125
  return null;
126
126
  }
127
127
  if (props.operationColumn.name === "drag-handle") {
128
- return (_f = (_e = slots["drag-handle-icon"]) == null ? void 0 : _e.call(slots)) != null ? _f : vue.createVNode(index$4, null, null);
128
+ return (_j = (_i = slots["drag-handle-icon"]) == null ? void 0 : _i.call(slots)) != null ? _j : vue.createVNode(index$4, null, null);
129
129
  }
130
130
  return null;
131
131
  };