@maxax/ui 1.1.30 → 1.1.32

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.
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@ import { camelize, isNumber, isString, removeClass, addClass, pascalCase, isClie
2
2
  import { shallowRef, shallowReadonly, onUnmounted, onMounted, nextTick, getCurrentScope, onScopeDispose, toValue, getCurrentInstance, watch, computed, unref, Fragment, isVNode, Comment, Text, watchEffect, onBeforeUnmount, inject, ref, isRef, toRaw, defineComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, renderSlot, h, useAttrs, mergeProps, createBlock, createCommentVNode, withCtx, createTextVNode, toDisplayString, createVNode, useSlots, createSlots, provide, reactive, toRefs, resolveComponent, Transition, withDirectives, withModifiers, normalizeStyle, withKeys, resolveDynamicComponent, vShow, render as render$1, useTemplateRef, renderList, normalizeProps, guardReactiveProps, triggerRef, TransitionGroup, toRef, vModelText, createApp, toHandlers, mergeDefaults } from "vue";
3
3
  import BScroll from "@better-scroll/core";
4
4
  import { NTooltip, NButton, NInput, NButtonGroup, NDropdown, NModal, NProgress, NSwitch, NCard, NCascader, NDatePicker, NDrawer, NDrawerContent, NSelect, NInputNumber, NUpload, NAutoComplete, NDynamicTags, NTreeSelect, NTimePicker, NCheckbox, NCheckboxGroup, NRadio, NRadioButton, NRadioGroup, NSlider, NTransfer, NDivider, NColorPicker, NRate, NCol, NFormItem, NForm, NRow, NPopover, NTabs, NTabPane, NScrollbar, NEmpty, NPagination, NSpin } from "naive-ui";
5
- import { b as buildLocaleContext, z as zhCN } from "./utils-BqJsjHj1.js";
5
+ import { b as buildLocaleContext, z as zhCN } from "./utils-D9CmPNRk.js";
6
6
  import { merge, cloneDeep as cloneDeep$1, uniqBy, isBoolean as isBoolean$1, isFunction as isFunction$1, isArray as isArray$1, isString as isString$1, isEqual, get, concat, partition, omit, has, set, unset, isNumber as isNumber$1, isPlainObject } from "lodash-es";
7
7
  import { VxePager } from "vxe-pc-ui";
8
8
  import { VxeUI, VxePager as VxePager2 } from "vxe-pc-ui";
@@ -1128,7 +1128,7 @@ const useZIndex = (zIndexOverrides) => {
1128
1128
  nextZIndex
1129
1129
  };
1130
1130
  };
1131
- const _sfc_main$$ = /* @__PURE__ */ defineComponent({
1131
+ const _sfc_main$10 = /* @__PURE__ */ defineComponent({
1132
1132
  __name: "better-scroll",
1133
1133
  props: {
1134
1134
  options: {}
@@ -2854,7 +2854,7 @@ const Icon = defineComponent((props, { emit }) => {
2854
2854
  emits: ["load"]
2855
2855
  });
2856
2856
  const _hoisted_1$d = ["xlink:href"];
2857
- const _sfc_main$_ = /* @__PURE__ */ defineComponent({
2857
+ const _sfc_main$$ = /* @__PURE__ */ defineComponent({
2858
2858
  __name: "BasicSvgIcon",
2859
2859
  props: {
2860
2860
  icon: {},
@@ -2900,8 +2900,8 @@ const _sfc_main$_ = /* @__PURE__ */ defineComponent({
2900
2900
  };
2901
2901
  }
2902
2902
  });
2903
- const XBasicSvgIcon = withInstall(_sfc_main$_);
2904
- const _sfc_main$Z = /* @__PURE__ */ defineComponent({
2903
+ const XBasicSvgIcon = withInstall(_sfc_main$$);
2904
+ const _sfc_main$_ = /* @__PURE__ */ defineComponent({
2905
2905
  ...{
2906
2906
  inheritAttrs: false
2907
2907
  },
@@ -2950,7 +2950,7 @@ const _sfc_main$Z = /* @__PURE__ */ defineComponent({
2950
2950
  };
2951
2951
  }
2952
2952
  });
2953
- const _sfc_main$Y = /* @__PURE__ */ defineComponent({
2953
+ const _sfc_main$Z = /* @__PURE__ */ defineComponent({
2954
2954
  __name: "full-screen",
2955
2955
  props: {
2956
2956
  full: { type: Boolean }
@@ -2958,7 +2958,7 @@ const _sfc_main$Y = /* @__PURE__ */ defineComponent({
2958
2958
  setup(__props) {
2959
2959
  const { t } = useLocale();
2960
2960
  return (_ctx, _cache) => {
2961
- return openBlock(), createBlock(_sfc_main$Z, {
2961
+ return openBlock(), createBlock(_sfc_main$_, {
2962
2962
  key: String(__props.full),
2963
2963
  "tooltip-content": __props.full ? unref(t)("max.icon.fullscreenExit") : unref(t)("max.icon.fullscreen")
2964
2964
  }, {
@@ -2976,7 +2976,7 @@ const _sfc_main$Y = /* @__PURE__ */ defineComponent({
2976
2976
  };
2977
2977
  }
2978
2978
  });
2979
- const _sfc_main$X = /* @__PURE__ */ defineComponent({
2979
+ const _sfc_main$Y = /* @__PURE__ */ defineComponent({
2980
2980
  __name: "icon-tooltip",
2981
2981
  props: {
2982
2982
  icon: { default: "mdi-help-circle" },
@@ -3016,7 +3016,7 @@ const _sfc_main$X = /* @__PURE__ */ defineComponent({
3016
3016
  };
3017
3017
  }
3018
3018
  });
3019
- const _sfc_main$W = /* @__PURE__ */ defineComponent({
3019
+ const _sfc_main$X = /* @__PURE__ */ defineComponent({
3020
3020
  __name: "menu-toggler",
3021
3021
  props: {
3022
3022
  collapsed: { type: Boolean },
@@ -3042,7 +3042,7 @@ const _sfc_main$W = /* @__PURE__ */ defineComponent({
3042
3042
  return icons[arrowIcon][collapsed];
3043
3043
  });
3044
3044
  return (_ctx, _cache) => {
3045
- return openBlock(), createBlock(_sfc_main$Z, {
3045
+ return openBlock(), createBlock(_sfc_main$_, {
3046
3046
  key: String(__props.collapsed),
3047
3047
  "tooltip-content": __props.collapsed ? unref(t)("max.icon.expand") : unref(t)("max.icon.collapse"),
3048
3048
  "tooltip-placement": "bottom-start",
@@ -3056,7 +3056,7 @@ const _sfc_main$W = /* @__PURE__ */ defineComponent({
3056
3056
  };
3057
3057
  }
3058
3058
  });
3059
- const _sfc_main$V = /* @__PURE__ */ defineComponent({
3059
+ const _sfc_main$W = /* @__PURE__ */ defineComponent({
3060
3060
  __name: "pin-toggler",
3061
3061
  props: {
3062
3062
  pin: { type: Boolean }
@@ -3066,7 +3066,7 @@ const _sfc_main$V = /* @__PURE__ */ defineComponent({
3066
3066
  const { t } = useLocale();
3067
3067
  const icon = computed(() => props.pin ? "mdi-pin-off" : "mdi-pin");
3068
3068
  return (_ctx, _cache) => {
3069
- return openBlock(), createBlock(_sfc_main$Z, {
3069
+ return openBlock(), createBlock(_sfc_main$_, {
3070
3070
  "tooltip-content": __props.pin ? unref(t)("max.icon.unpin") : unref(t)("max.icon.pin"),
3071
3071
  "tooltip-placement": "bottom-start",
3072
3072
  "z-index": 100
@@ -3079,7 +3079,7 @@ const _sfc_main$V = /* @__PURE__ */ defineComponent({
3079
3079
  };
3080
3080
  }
3081
3081
  });
3082
- const _sfc_main$U = /* @__PURE__ */ defineComponent({
3082
+ const _sfc_main$V = /* @__PURE__ */ defineComponent({
3083
3083
  __name: "reload-button",
3084
3084
  props: {
3085
3085
  loading: { type: Boolean }
@@ -3088,7 +3088,7 @@ const _sfc_main$U = /* @__PURE__ */ defineComponent({
3088
3088
  const { t } = useLocale();
3089
3089
  const { b } = useNamespace("reload-button");
3090
3090
  return (_ctx, _cache) => {
3091
- return openBlock(), createBlock(_sfc_main$Z, {
3091
+ return openBlock(), createBlock(_sfc_main$_, {
3092
3092
  "tooltip-content": unref(t)("max.icon.reload")
3093
3093
  }, {
3094
3094
  default: withCtx(() => [
@@ -3102,14 +3102,14 @@ const _sfc_main$U = /* @__PURE__ */ defineComponent({
3102
3102
  };
3103
3103
  }
3104
3104
  });
3105
- const XCommonBetterScroll = withInstall(_sfc_main$$);
3106
- const XCommonButtonIcon = withInstall(_sfc_main$Z);
3107
- const XCommonFullScreen = withInstall(_sfc_main$Y);
3108
- const XCommonIconTooltip = withInstall(_sfc_main$X);
3109
- const XCommonMenuToggler = withInstall(_sfc_main$W);
3110
- const XCommonPinToggler = withInstall(_sfc_main$V);
3111
- const XCommonReloadButton = withInstall(_sfc_main$U);
3112
- const _sfc_main$T = /* @__PURE__ */ defineComponent({
3105
+ const XCommonBetterScroll = withInstall(_sfc_main$10);
3106
+ const XCommonButtonIcon = withInstall(_sfc_main$_);
3107
+ const XCommonFullScreen = withInstall(_sfc_main$Z);
3108
+ const XCommonIconTooltip = withInstall(_sfc_main$Y);
3109
+ const XCommonMenuToggler = withInstall(_sfc_main$X);
3110
+ const XCommonPinToggler = withInstall(_sfc_main$W);
3111
+ const XCommonReloadButton = withInstall(_sfc_main$V);
3112
+ const _sfc_main$U = /* @__PURE__ */ defineComponent({
3113
3113
  __name: "BasicButton",
3114
3114
  props: {
3115
3115
  size: {},
@@ -3164,7 +3164,7 @@ const _sfc_main$T = /* @__PURE__ */ defineComponent({
3164
3164
  };
3165
3165
  }
3166
3166
  });
3167
- const XBasicButton = withInstall(_sfc_main$T);
3167
+ const XBasicButton = withInstall(_sfc_main$U);
3168
3168
  !!(process.env.NODE_ENV !== "production") ? Object.freeze({}) : {};
3169
3169
  !!(process.env.NODE_ENV !== "production") ? Object.freeze([]) : [];
3170
3170
  const hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -3385,7 +3385,7 @@ const basicMessageBoxProps = {
3385
3385
  default: ""
3386
3386
  }
3387
3387
  };
3388
- const _sfc_main$S = defineComponent({
3388
+ const _sfc_main$T = defineComponent({
3389
3389
  components: {
3390
3390
  NButton,
3391
3391
  NInput,
@@ -3793,7 +3793,7 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
3793
3793
  _: 3
3794
3794
  });
3795
3795
  }
3796
- const MessageBoxConstructor = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$2]]);
3796
+ const MessageBoxConstructor = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$2]]);
3797
3797
  const messageInstance = /* @__PURE__ */ new Map();
3798
3798
  const getAppendToElement = (props) => {
3799
3799
  let appendTo = document.body;
@@ -3919,7 +3919,7 @@ MessageBox.close = () => {
3919
3919
  MessageBox._context = null;
3920
3920
  const $MessageBox = MessageBox;
3921
3921
  const XBasicMessageBox = $MessageBox;
3922
- const _sfc_main$R = /* @__PURE__ */ defineComponent({
3922
+ const _sfc_main$S = /* @__PURE__ */ defineComponent({
3923
3923
  __name: "BasicActionFooter",
3924
3924
  props: {
3925
3925
  showDeleteButton: { type: Boolean, default: false },
@@ -4001,8 +4001,8 @@ const _sfc_main$R = /* @__PURE__ */ defineComponent({
4001
4001
  };
4002
4002
  }
4003
4003
  });
4004
- const XBasicActionFooter = withInstall(_sfc_main$R);
4005
- const _sfc_main$Q = /* @__PURE__ */ defineComponent({
4004
+ const XBasicActionFooter = withInstall(_sfc_main$S);
4005
+ const _sfc_main$R = /* @__PURE__ */ defineComponent({
4006
4006
  __name: "BasicArrow",
4007
4007
  props: {
4008
4008
  expand: { type: Boolean },
@@ -4034,8 +4034,8 @@ const _sfc_main$Q = /* @__PURE__ */ defineComponent({
4034
4034
  };
4035
4035
  }
4036
4036
  });
4037
- const XBasicArrow = withInstall(_sfc_main$Q);
4038
- const _sfc_main$P = /* @__PURE__ */ defineComponent({
4037
+ const XBasicArrow = withInstall(_sfc_main$R);
4038
+ const _sfc_main$Q = /* @__PURE__ */ defineComponent({
4039
4039
  __name: "BasicButtonCreate",
4040
4040
  emits: ["click"],
4041
4041
  setup(__props, { emit: __emit }) {
@@ -4060,7 +4060,7 @@ const _sfc_main$P = /* @__PURE__ */ defineComponent({
4060
4060
  };
4061
4061
  }
4062
4062
  });
4063
- const _sfc_main$O = /* @__PURE__ */ defineComponent({
4063
+ const _sfc_main$P = /* @__PURE__ */ defineComponent({
4064
4064
  __name: "BasicButtonDelete",
4065
4065
  emits: ["click"],
4066
4066
  setup(__props, { emit: __emit }) {
@@ -4085,7 +4085,7 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
4085
4085
  };
4086
4086
  }
4087
4087
  });
4088
- const _sfc_main$N = /* @__PURE__ */ defineComponent({
4088
+ const _sfc_main$O = /* @__PURE__ */ defineComponent({
4089
4089
  __name: "BasicButtonDrop",
4090
4090
  props: {
4091
4091
  disabled: { type: Boolean },
@@ -4150,7 +4150,7 @@ const _sfc_main$N = /* @__PURE__ */ defineComponent({
4150
4150
  };
4151
4151
  }
4152
4152
  });
4153
- const _sfc_main$M = /* @__PURE__ */ defineComponent({
4153
+ const _sfc_main$N = /* @__PURE__ */ defineComponent({
4154
4154
  __name: "BasicButtonEdit",
4155
4155
  emits: ["click"],
4156
4156
  setup(__props, { emit: __emit }) {
@@ -4175,7 +4175,7 @@ const _sfc_main$M = /* @__PURE__ */ defineComponent({
4175
4175
  };
4176
4176
  }
4177
4177
  });
4178
- const _sfc_main$L = /* @__PURE__ */ defineComponent({
4178
+ const _sfc_main$M = /* @__PURE__ */ defineComponent({
4179
4179
  __name: "BasicButtonExport",
4180
4180
  props: {
4181
4181
  href: {},
@@ -4226,7 +4226,7 @@ const _sfc_main$L = /* @__PURE__ */ defineComponent({
4226
4226
  };
4227
4227
  }
4228
4228
  });
4229
- const _sfc_main$K = /* @__PURE__ */ defineComponent({
4229
+ const _sfc_main$L = /* @__PURE__ */ defineComponent({
4230
4230
  __name: "BasicButtonExportDrop",
4231
4231
  props: {
4232
4232
  disabled: { type: Boolean },
@@ -4250,7 +4250,7 @@ const _sfc_main$K = /* @__PURE__ */ defineComponent({
4250
4250
  emit("click", key2);
4251
4251
  }
4252
4252
  return (_ctx, _cache) => {
4253
- return openBlock(), createBlock(_sfc_main$N, {
4253
+ return openBlock(), createBlock(_sfc_main$O, {
4254
4254
  icon: __props.icon,
4255
4255
  options: cOptions.value,
4256
4256
  onClick: handleClick
@@ -4264,7 +4264,7 @@ const _sfc_main$K = /* @__PURE__ */ defineComponent({
4264
4264
  }
4265
4265
  });
4266
4266
  const _hoisted_1$b = ["multiple", "name", "accept"];
4267
- const _sfc_main$J = /* @__PURE__ */ defineComponent({
4267
+ const _sfc_main$K = /* @__PURE__ */ defineComponent({
4268
4268
  __name: "BasicButtonImport",
4269
4269
  props: {
4270
4270
  name: { default: "file" },
@@ -4361,7 +4361,7 @@ const _sfc_main$J = /* @__PURE__ */ defineComponent({
4361
4361
  };
4362
4362
  }
4363
4363
  });
4364
- const _sfc_main$I = /* @__PURE__ */ defineComponent({
4364
+ const _sfc_main$J = /* @__PURE__ */ defineComponent({
4365
4365
  __name: "BasicButtonPrint",
4366
4366
  emits: ["click"],
4367
4367
  setup(__props, { emit: __emit }) {
@@ -4386,18 +4386,405 @@ const _sfc_main$I = /* @__PURE__ */ defineComponent({
4386
4386
  };
4387
4387
  }
4388
4388
  });
4389
- const XBasicButtonCreate = withInstall(_sfc_main$P);
4390
- const XBasicButtonEdit = withInstall(_sfc_main$M);
4391
- const XBasicButtonDelete = withInstall(_sfc_main$O);
4392
- const XBasicButtonExport = withInstall(_sfc_main$L);
4393
- const XBasicButtonImport = withInstall(_sfc_main$J);
4394
- const XBasicButtonPrint = withInstall(_sfc_main$I);
4395
- const XBasicButtonDrop = withInstall(_sfc_main$N);
4396
- const XBasicButtonExportDrop = withInstall(_sfc_main$K);
4389
+ const XBasicButtonCreate = withInstall(_sfc_main$Q);
4390
+ const XBasicButtonEdit = withInstall(_sfc_main$N);
4391
+ const XBasicButtonDelete = withInstall(_sfc_main$P);
4392
+ const XBasicButtonExport = withInstall(_sfc_main$M);
4393
+ const XBasicButtonImport = withInstall(_sfc_main$K);
4394
+ const XBasicButtonPrint = withInstall(_sfc_main$J);
4395
+ const XBasicButtonDrop = withInstall(_sfc_main$O);
4396
+ const XBasicButtonExportDrop = withInstall(_sfc_main$L);
4397
+ const _hoisted_1$a = ["id"];
4398
+ const _hoisted_2$3 = ["textContent"];
4399
+ const _hoisted_3 = { key: 0 };
4400
+ const _hoisted_4 = ["innerHTML"];
4401
+ const _sfc_main$I = /* @__PURE__ */ defineComponent({
4402
+ __name: "BasicNotification",
4403
+ props: {
4404
+ customClass: { default: "" },
4405
+ dangerouslyUseHTMLString: { type: Boolean },
4406
+ duration: { default: 4500 },
4407
+ icon: {},
4408
+ id: { default: "" },
4409
+ message: {},
4410
+ offset: { default: 0 },
4411
+ onClick: { type: Function, default: () => void 0 },
4412
+ onClose: {},
4413
+ position: { default: "top-right" },
4414
+ showClose: { type: Boolean, default: true },
4415
+ title: { default: "" },
4416
+ type: { default: "" },
4417
+ zIndex: {}
4418
+ },
4419
+ emits: ["destroy"],
4420
+ setup(__props, { expose: __expose, emit: __emit }) {
4421
+ const props = __props;
4422
+ const emit = __emit;
4423
+ const { ns, zIndex: zIndex2 } = useConfigProvider("basic-notification");
4424
+ const { nextZIndex, currentZIndex } = zIndex2;
4425
+ const visible = ref(false);
4426
+ let timer;
4427
+ const iconMap = {
4428
+ success: "ri:checkbox-circle-line",
4429
+ error: "ri:close-circle-line",
4430
+ info: "ri:information-line",
4431
+ warning: "ri:error-warning-line"
4432
+ };
4433
+ const typeClass = computed(() => {
4434
+ const type = props.type;
4435
+ return type && iconMap[props.type] ? ns.m(type) : "";
4436
+ });
4437
+ const iconComponent = computed(() => {
4438
+ if (!props.type) return props.icon;
4439
+ return iconMap[props.type] || props.icon;
4440
+ });
4441
+ const horizontalClass = computed(() => props.position.endsWith("right") ? "right" : "left");
4442
+ const verticalProperty = computed(() => props.position.startsWith("top") ? "top" : "bottom");
4443
+ const positionStyle = computed(() => {
4444
+ var _a;
4445
+ return {
4446
+ [verticalProperty.value]: `${props.offset}px`,
4447
+ zIndex: (_a = props.zIndex) != null ? _a : currentZIndex.value
4448
+ };
4449
+ });
4450
+ function startTimer() {
4451
+ if (props.duration > 0) {
4452
+ ({ stop: timer } = useTimeoutFn(() => {
4453
+ if (visible.value) close2();
4454
+ }, props.duration));
4455
+ }
4456
+ }
4457
+ function clearTimer() {
4458
+ timer == null ? void 0 : timer();
4459
+ }
4460
+ function close2() {
4461
+ visible.value = false;
4462
+ }
4463
+ function onKeydown({ code }) {
4464
+ if (code === EVENT_CODE.delete || code === EVENT_CODE.backspace) {
4465
+ clearTimer();
4466
+ } else if (code === EVENT_CODE.esc) {
4467
+ if (visible.value) {
4468
+ close2();
4469
+ }
4470
+ } else {
4471
+ startTimer();
4472
+ }
4473
+ }
4474
+ onMounted(() => {
4475
+ startTimer();
4476
+ nextZIndex();
4477
+ visible.value = true;
4478
+ });
4479
+ useEventListener(document, "keydown", onKeydown);
4480
+ __expose({
4481
+ visible,
4482
+ /** @description close notification */
4483
+ close: close2
4484
+ });
4485
+ return (_ctx, _cache) => {
4486
+ return openBlock(), createBlock(Transition, {
4487
+ name: "imax-notification-fade",
4488
+ onBeforeLeave: __props.onClose,
4489
+ onAfterLeave: _cache[1] || (_cache[1] = ($event) => emit("destroy"))
4490
+ }, {
4491
+ default: withCtx(() => [
4492
+ withDirectives(createElementVNode("div", {
4493
+ id: __props.id,
4494
+ class: normalizeClass([unref(ns).b(), __props.customClass, horizontalClass.value]),
4495
+ style: normalizeStyle(positionStyle.value),
4496
+ role: "alert",
4497
+ onMouseenter: clearTimer,
4498
+ onMouseleave: startTimer,
4499
+ onClick: _cache[0] || (_cache[0] = //@ts-ignore
4500
+ (...args) => __props.onClick && __props.onClick(...args))
4501
+ }, [
4502
+ iconComponent.value ? (openBlock(), createBlock(unref(XBasicSvgIcon), {
4503
+ key: 0,
4504
+ class: normalizeClass([unref(ns).e("icon"), typeClass.value]),
4505
+ icon: iconComponent.value
4506
+ }, null, 8, ["class", "icon"])) : createCommentVNode("", true),
4507
+ createElementVNode("div", {
4508
+ class: normalizeClass(unref(ns).e("group"))
4509
+ }, [
4510
+ createElementVNode("h2", {
4511
+ class: normalizeClass(unref(ns).e("title")),
4512
+ textContent: toDisplayString(__props.title)
4513
+ }, null, 10, _hoisted_2$3),
4514
+ withDirectives(createElementVNode("div", {
4515
+ class: normalizeClass(unref(ns).e("content")),
4516
+ style: normalizeStyle(!!__props.title ? void 0 : { margin: 0 })
4517
+ }, [
4518
+ renderSlot(_ctx.$slots, "default", {}, () => [
4519
+ !__props.dangerouslyUseHTMLString ? (openBlock(), createElementBlock("p", _hoisted_3, toDisplayString(__props.message), 1)) : (openBlock(), createElementBlock("p", {
4520
+ key: 1,
4521
+ innerHTML: __props.message
4522
+ }, null, 8, _hoisted_4))
4523
+ ])
4524
+ ], 6), [
4525
+ [vShow, __props.message]
4526
+ ]),
4527
+ createElementVNode("span", {
4528
+ onClick: withModifiers(close2, ["stop"])
4529
+ }, [
4530
+ __props.showClose ? (openBlock(), createBlock(unref(XBasicSvgIcon), {
4531
+ key: 0,
4532
+ class: normalizeClass(unref(ns).e("closeBtn")),
4533
+ icon: "ri:close-line"
4534
+ }, null, 8, ["class"])) : createCommentVNode("", true)
4535
+ ])
4536
+ ], 2)
4537
+ ], 46, _hoisted_1$a), [
4538
+ [vShow, visible.value]
4539
+ ])
4540
+ ]),
4541
+ _: 3
4542
+ }, 8, ["onBeforeLeave"]);
4543
+ };
4544
+ }
4545
+ });
4546
+ const notificationTypes = ["success", "info", "warning", "error"];
4547
+ const notifications = {
4548
+ "top-left": [],
4549
+ "top-right": [],
4550
+ "bottom-left": [],
4551
+ "bottom-right": []
4552
+ };
4553
+ const GAP_SIZE = 16;
4554
+ let seed = 1;
4555
+ const notify = (options, context) => {
4556
+ if (!isClient$1) return { close: () => void 0 };
4557
+ if (isString(options) || isVNode(options)) {
4558
+ options = { message: options };
4559
+ }
4560
+ const position = (options == null ? void 0 : options.position) || "top-right";
4561
+ let verticalOffset = (options == null ? void 0 : options.offset) || 0;
4562
+ notifications[position].forEach(({ vm: vm2 }) => {
4563
+ var _a;
4564
+ verticalOffset += (((_a = vm2.el) == null ? void 0 : _a.offsetHeight) || 0) + GAP_SIZE;
4565
+ });
4566
+ verticalOffset += GAP_SIZE;
4567
+ const id = `notification_${seed++}`;
4568
+ const userOnClose = options == null ? void 0 : options.onClose;
4569
+ const props = {
4570
+ ...options,
4571
+ offset: verticalOffset,
4572
+ id,
4573
+ onClose: () => {
4574
+ close(id, position, userOnClose);
4575
+ }
4576
+ };
4577
+ let appendTo = document.body;
4578
+ if (isElement(options == null ? void 0 : options.appendTo)) {
4579
+ appendTo = options == null ? void 0 : options.appendTo;
4580
+ } else if (isString(options == null ? void 0 : options.appendTo)) {
4581
+ appendTo = document.querySelector(options == null ? void 0 : options.appendTo);
4582
+ }
4583
+ if (!isElement(appendTo)) {
4584
+ console.warn("the appendTo option is not an HTMLElement. Falling back to document.body.");
4585
+ appendTo = document.body;
4586
+ }
4587
+ const container = document.createElement("div");
4588
+ const vm = createVNode(_sfc_main$I, props, isFunction(props.message) ? props.message : isVNode(props.message) ? () => props.message : null);
4589
+ vm.appContext = isUndefined(context) ? notify._context : context;
4590
+ vm.props.onDestroy = () => {
4591
+ render$1(null, container);
4592
+ };
4593
+ render$1(vm, container);
4594
+ notifications[position].push({ vm });
4595
+ appendTo.appendChild(container.firstElementChild);
4596
+ return {
4597
+ // instead of calling the onClose function directly, setting this value so that we can have the full lifecycle
4598
+ // for out component, so that all closing steps will not be skipped.
4599
+ close: () => {
4600
+ vm.component.exposed.visible.value = false;
4601
+ }
4602
+ };
4603
+ };
4604
+ notificationTypes.forEach((type) => {
4605
+ notify[type] = (options = {}, appContext) => {
4606
+ if (isString(options) || isVNode(options)) {
4607
+ options = {
4608
+ message: options
4609
+ };
4610
+ }
4611
+ return notify({ ...options, type }, appContext);
4612
+ };
4613
+ });
4614
+ function close(id, position, userOnClose) {
4615
+ const orientedNotifications = notifications[position];
4616
+ const idx = orientedNotifications.findIndex(({ vm: vm2 }) => {
4617
+ var _a;
4618
+ return ((_a = vm2.component) == null ? void 0 : _a.props.id) === id;
4619
+ });
4620
+ if (idx === -1) return;
4621
+ const { vm } = orientedNotifications[idx];
4622
+ if (!vm) return;
4623
+ userOnClose == null ? void 0 : userOnClose(vm);
4624
+ const removedHeight = vm.el.offsetHeight;
4625
+ const verticalPos = (position == null ? void 0 : position.split("-")[0]) || "top";
4626
+ orientedNotifications.splice(idx, 1);
4627
+ const len = orientedNotifications.length;
4628
+ if (len < 1) return;
4629
+ for (let i = idx; i < len; i++) {
4630
+ const { el, component } = orientedNotifications[i].vm;
4631
+ const pos = Number.parseInt(el.style[verticalPos], 10) - removedHeight - GAP_SIZE;
4632
+ component.props.offset = pos;
4633
+ }
4634
+ }
4635
+ function closeAll() {
4636
+ for (const orientedNotifications of Object.values(notifications)) {
4637
+ orientedNotifications.forEach(({ vm }) => {
4638
+ vm.component.exposed.visible.value = false;
4639
+ });
4640
+ }
4641
+ }
4642
+ notify.closeAll = closeAll;
4643
+ notify._context = null;
4644
+ const $Notification = notify;
4645
+ const XBasicNotification = $Notification;
4646
+ const _sfc_main$H = /* @__PURE__ */ defineComponent({
4647
+ __name: "BasicButtonExportMax",
4648
+ props: {
4649
+ drop: { type: Boolean, default: true },
4650
+ disabled: { type: Boolean },
4651
+ icon: { default: "ri:export-line" },
4652
+ options: { default: () => [
4653
+ { label: "全部导出", key: "all" },
4654
+ { label: "按选择条目导出", key: "select" }
4655
+ ] },
4656
+ exportApi: {},
4657
+ beforeFetch: {},
4658
+ afterFetch: {},
4659
+ showProgress: { type: Boolean, default: true }
4660
+ },
4661
+ emits: ["click"],
4662
+ setup(__props, { emit: __emit }) {
4663
+ const props = __props;
4664
+ const emit = __emit;
4665
+ const { b } = useNamespace("basic-button-export-max");
4666
+ const { b: bm, e: em } = useNamespace("basic-button-em-modal");
4667
+ const progressVisible = ref(false);
4668
+ const progressPercent = ref(0);
4669
+ const attrs = useAttrs();
4670
+ const { t } = useLocale();
4671
+ const cOptions = computed(() => {
4672
+ var _a;
4673
+ return ((_a = props.options) != null ? _a : []).map((option) => {
4674
+ return option;
4675
+ });
4676
+ });
4677
+ async function runBeforeFetchGuard(key2) {
4678
+ if (!props.beforeFetch || !isFunction(props.beforeFetch)) return { pass: true, params: {} };
4679
+ try {
4680
+ const result = await props.beforeFetch(key2);
4681
+ if (result === false) return { pass: false, params: {} };
4682
+ if (isString(result) && result) {
4683
+ XBasicNotification.error(result);
4684
+ return { pass: false, params: {} };
4685
+ }
4686
+ return { pass: true, params: result || {} };
4687
+ } catch (error) {
4688
+ console.error(error);
4689
+ return { pass: false, params: {} };
4690
+ }
4691
+ }
4692
+ function getFetchApi(key2) {
4693
+ var _a;
4694
+ if (!props.drop) return props.exportApi;
4695
+ const option = (_a = props.options) == null ? void 0 : _a.find((option2) => option2.key === key2);
4696
+ return (option == null ? void 0 : option.api) || props.exportApi;
4697
+ }
4698
+ function onDownloadProgress(progressEvent) {
4699
+ if (progressEvent.total) {
4700
+ const percent = Math.round(progressEvent.loaded * 100 / progressEvent.total);
4701
+ progressPercent.value = percent;
4702
+ }
4703
+ }
4704
+ async function trigger(key2) {
4705
+ const api = getFetchApi(key2);
4706
+ if (!api) return;
4707
+ const { pass, params } = await runBeforeFetchGuard(key2);
4708
+ if (!pass) return;
4709
+ if (props.showProgress) {
4710
+ progressPercent.value = 0;
4711
+ progressVisible.value = true;
4712
+ }
4713
+ const { response, error } = await api(params, { onDownloadProgress });
4714
+ if (props.showProgress) {
4715
+ progressPercent.value = 100;
4716
+ progressVisible.value = false;
4717
+ }
4718
+ if (error) return;
4719
+ downloadFileByResponseData(response);
4720
+ emit("click", key2);
4721
+ }
4722
+ function onMultiExportClick(key2) {
4723
+ if (!key2) return;
4724
+ trigger(key2);
4725
+ }
4726
+ function onSingleExportClick() {
4727
+ trigger("max");
4728
+ }
4729
+ return (_ctx, _cache) => {
4730
+ return openBlock(), createElementBlock(Fragment, null, [
4731
+ __props.drop ? (openBlock(), createBlock(_sfc_main$O, mergeProps({
4732
+ key: 0,
4733
+ icon: __props.icon,
4734
+ options: cOptions.value,
4735
+ class: unref(b)()
4736
+ }, unref(attrs), { onClick: onMultiExportClick }), {
4737
+ default: withCtx(() => [
4738
+ renderSlot(_ctx.$slots, "default", {}, () => [
4739
+ createTextVNode(toDisplayString(unref(t)("max.basic.export")), 1)
4740
+ ])
4741
+ ]),
4742
+ _: 3
4743
+ }, 16, ["icon", "options", "class"])) : (openBlock(), createBlock(unref(XBasicButton), mergeProps({
4744
+ key: 1,
4745
+ icon: __props.icon,
4746
+ type: "primary"
4747
+ }, unref(attrs), { onClick: onSingleExportClick }), {
4748
+ default: withCtx(() => [
4749
+ renderSlot(_ctx.$slots, "default", {}, () => [
4750
+ createTextVNode(toDisplayString(unref(t)("max.basic.export")), 1)
4751
+ ])
4752
+ ]),
4753
+ _: 3
4754
+ }, 16, ["icon"])),
4755
+ createVNode(unref(NModal), {
4756
+ show: progressVisible.value,
4757
+ "onUpdate:show": _cache[0] || (_cache[0] = ($event) => progressVisible.value = $event),
4758
+ closable: false,
4759
+ "mask-closable": false,
4760
+ "show-mask": false
4761
+ }, {
4762
+ default: withCtx(() => [
4763
+ createElementVNode("div", {
4764
+ class: normalizeClass(unref(bm)())
4765
+ }, [
4766
+ createElementVNode("div", {
4767
+ class: normalizeClass(unref(em)("content"))
4768
+ }, [
4769
+ createVNode(unref(NProgress), {
4770
+ type: "circle",
4771
+ percentage: progressPercent.value
4772
+ }, null, 8, ["percentage"]),
4773
+ createElementVNode("p", null, toDisplayString(unref(t)("max.basic.downloading")), 1)
4774
+ ], 2)
4775
+ ], 2)
4776
+ ]),
4777
+ _: 1
4778
+ }, 8, ["show"])
4779
+ ], 64);
4780
+ };
4781
+ }
4782
+ });
4783
+ const XBasicButtonExportMax = withInstall(_sfc_main$H);
4397
4784
  function _isSlot$3(s) {
4398
4785
  return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
4399
4786
  }
4400
- const _sfc_main$H = /* @__PURE__ */ defineComponent({
4787
+ const _sfc_main$G = /* @__PURE__ */ defineComponent({
4401
4788
  name: "ButtonGroupItem",
4402
4789
  props: {
4403
4790
  schema: {
@@ -4750,7 +5137,7 @@ function useButtonGroupSchema({ getProps, schemaRef }) {
4750
5137
  });
4751
5138
  return { getSchema };
4752
5139
  }
4753
- const _sfc_main$G = /* @__PURE__ */ defineComponent({
5140
+ const _sfc_main$F = /* @__PURE__ */ defineComponent({
4754
5141
  __name: "BasicButtonGroup",
4755
5142
  props: {
4756
5143
  showReturnButton: { type: Boolean },
@@ -4831,7 +5218,7 @@ const _sfc_main$G = /* @__PURE__ */ defineComponent({
4831
5218
  return (_ctx, _cache) => {
4832
5219
  return openBlock(), createElementBlock("div", mergeProps({ class: unref(getWrapperClass) }, getBindValue.value), [
4833
5220
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getSchema), (schema) => {
4834
- return openBlock(), createBlock(_sfc_main$H, {
5221
+ return openBlock(), createBlock(_sfc_main$G, {
4835
5222
  key: schema.field,
4836
5223
  schema,
4837
5224
  "button-group-action-type": buttonGroupActionType,
@@ -4852,256 +5239,7 @@ const _sfc_main$G = /* @__PURE__ */ defineComponent({
4852
5239
  };
4853
5240
  }
4854
5241
  });
4855
- const XBasicButtonGroup = withInstall(_sfc_main$G);
4856
- const _hoisted_1$a = ["id"];
4857
- const _hoisted_2$3 = ["textContent"];
4858
- const _hoisted_3 = { key: 0 };
4859
- const _hoisted_4 = ["innerHTML"];
4860
- const _sfc_main$F = /* @__PURE__ */ defineComponent({
4861
- __name: "BasicNotification",
4862
- props: {
4863
- customClass: { default: "" },
4864
- dangerouslyUseHTMLString: { type: Boolean },
4865
- duration: { default: 4500 },
4866
- icon: {},
4867
- id: { default: "" },
4868
- message: {},
4869
- offset: { default: 0 },
4870
- onClick: { type: Function, default: () => void 0 },
4871
- onClose: {},
4872
- position: { default: "top-right" },
4873
- showClose: { type: Boolean, default: true },
4874
- title: { default: "" },
4875
- type: { default: "" },
4876
- zIndex: {}
4877
- },
4878
- emits: ["destroy"],
4879
- setup(__props, { expose: __expose, emit: __emit }) {
4880
- const props = __props;
4881
- const emit = __emit;
4882
- const { ns, zIndex: zIndex2 } = useConfigProvider("basic-notification");
4883
- const { nextZIndex, currentZIndex } = zIndex2;
4884
- const visible = ref(false);
4885
- let timer;
4886
- const iconMap = {
4887
- success: "ri:checkbox-circle-line",
4888
- error: "ri:close-circle-line",
4889
- info: "ri:information-line",
4890
- warning: "ri:error-warning-line"
4891
- };
4892
- const typeClass = computed(() => {
4893
- const type = props.type;
4894
- return type && iconMap[props.type] ? ns.m(type) : "";
4895
- });
4896
- const iconComponent = computed(() => {
4897
- if (!props.type) return props.icon;
4898
- return iconMap[props.type] || props.icon;
4899
- });
4900
- const horizontalClass = computed(() => props.position.endsWith("right") ? "right" : "left");
4901
- const verticalProperty = computed(() => props.position.startsWith("top") ? "top" : "bottom");
4902
- const positionStyle = computed(() => {
4903
- var _a;
4904
- return {
4905
- [verticalProperty.value]: `${props.offset}px`,
4906
- zIndex: (_a = props.zIndex) != null ? _a : currentZIndex.value
4907
- };
4908
- });
4909
- function startTimer() {
4910
- if (props.duration > 0) {
4911
- ({ stop: timer } = useTimeoutFn(() => {
4912
- if (visible.value) close2();
4913
- }, props.duration));
4914
- }
4915
- }
4916
- function clearTimer() {
4917
- timer == null ? void 0 : timer();
4918
- }
4919
- function close2() {
4920
- visible.value = false;
4921
- }
4922
- function onKeydown({ code }) {
4923
- if (code === EVENT_CODE.delete || code === EVENT_CODE.backspace) {
4924
- clearTimer();
4925
- } else if (code === EVENT_CODE.esc) {
4926
- if (visible.value) {
4927
- close2();
4928
- }
4929
- } else {
4930
- startTimer();
4931
- }
4932
- }
4933
- onMounted(() => {
4934
- startTimer();
4935
- nextZIndex();
4936
- visible.value = true;
4937
- });
4938
- useEventListener(document, "keydown", onKeydown);
4939
- __expose({
4940
- visible,
4941
- /** @description close notification */
4942
- close: close2
4943
- });
4944
- return (_ctx, _cache) => {
4945
- return openBlock(), createBlock(Transition, {
4946
- name: "imax-notification-fade",
4947
- onBeforeLeave: __props.onClose,
4948
- onAfterLeave: _cache[1] || (_cache[1] = ($event) => emit("destroy"))
4949
- }, {
4950
- default: withCtx(() => [
4951
- withDirectives(createElementVNode("div", {
4952
- id: __props.id,
4953
- class: normalizeClass([unref(ns).b(), __props.customClass, horizontalClass.value]),
4954
- style: normalizeStyle(positionStyle.value),
4955
- role: "alert",
4956
- onMouseenter: clearTimer,
4957
- onMouseleave: startTimer,
4958
- onClick: _cache[0] || (_cache[0] = //@ts-ignore
4959
- (...args) => __props.onClick && __props.onClick(...args))
4960
- }, [
4961
- iconComponent.value ? (openBlock(), createBlock(unref(XBasicSvgIcon), {
4962
- key: 0,
4963
- class: normalizeClass([unref(ns).e("icon"), typeClass.value]),
4964
- icon: iconComponent.value
4965
- }, null, 8, ["class", "icon"])) : createCommentVNode("", true),
4966
- createElementVNode("div", {
4967
- class: normalizeClass(unref(ns).e("group"))
4968
- }, [
4969
- createElementVNode("h2", {
4970
- class: normalizeClass(unref(ns).e("title")),
4971
- textContent: toDisplayString(__props.title)
4972
- }, null, 10, _hoisted_2$3),
4973
- withDirectives(createElementVNode("div", {
4974
- class: normalizeClass(unref(ns).e("content")),
4975
- style: normalizeStyle(!!__props.title ? void 0 : { margin: 0 })
4976
- }, [
4977
- renderSlot(_ctx.$slots, "default", {}, () => [
4978
- !__props.dangerouslyUseHTMLString ? (openBlock(), createElementBlock("p", _hoisted_3, toDisplayString(__props.message), 1)) : (openBlock(), createElementBlock("p", {
4979
- key: 1,
4980
- innerHTML: __props.message
4981
- }, null, 8, _hoisted_4))
4982
- ])
4983
- ], 6), [
4984
- [vShow, __props.message]
4985
- ]),
4986
- createElementVNode("span", {
4987
- onClick: withModifiers(close2, ["stop"])
4988
- }, [
4989
- __props.showClose ? (openBlock(), createBlock(unref(XBasicSvgIcon), {
4990
- key: 0,
4991
- class: normalizeClass(unref(ns).e("closeBtn")),
4992
- icon: "ri:close-line"
4993
- }, null, 8, ["class"])) : createCommentVNode("", true)
4994
- ])
4995
- ], 2)
4996
- ], 46, _hoisted_1$a), [
4997
- [vShow, visible.value]
4998
- ])
4999
- ]),
5000
- _: 3
5001
- }, 8, ["onBeforeLeave"]);
5002
- };
5003
- }
5004
- });
5005
- const notificationTypes = ["success", "info", "warning", "error"];
5006
- const notifications = {
5007
- "top-left": [],
5008
- "top-right": [],
5009
- "bottom-left": [],
5010
- "bottom-right": []
5011
- };
5012
- const GAP_SIZE = 16;
5013
- let seed = 1;
5014
- const notify = (options, context) => {
5015
- if (!isClient$1) return { close: () => void 0 };
5016
- if (isString(options) || isVNode(options)) {
5017
- options = { message: options };
5018
- }
5019
- const position = (options == null ? void 0 : options.position) || "top-right";
5020
- let verticalOffset = (options == null ? void 0 : options.offset) || 0;
5021
- notifications[position].forEach(({ vm: vm2 }) => {
5022
- var _a;
5023
- verticalOffset += (((_a = vm2.el) == null ? void 0 : _a.offsetHeight) || 0) + GAP_SIZE;
5024
- });
5025
- verticalOffset += GAP_SIZE;
5026
- const id = `notification_${seed++}`;
5027
- const userOnClose = options == null ? void 0 : options.onClose;
5028
- const props = {
5029
- ...options,
5030
- offset: verticalOffset,
5031
- id,
5032
- onClose: () => {
5033
- close(id, position, userOnClose);
5034
- }
5035
- };
5036
- let appendTo = document.body;
5037
- if (isElement(options == null ? void 0 : options.appendTo)) {
5038
- appendTo = options == null ? void 0 : options.appendTo;
5039
- } else if (isString(options == null ? void 0 : options.appendTo)) {
5040
- appendTo = document.querySelector(options == null ? void 0 : options.appendTo);
5041
- }
5042
- if (!isElement(appendTo)) {
5043
- console.warn("the appendTo option is not an HTMLElement. Falling back to document.body.");
5044
- appendTo = document.body;
5045
- }
5046
- const container = document.createElement("div");
5047
- const vm = createVNode(_sfc_main$F, props, isFunction(props.message) ? props.message : isVNode(props.message) ? () => props.message : null);
5048
- vm.appContext = isUndefined(context) ? notify._context : context;
5049
- vm.props.onDestroy = () => {
5050
- render$1(null, container);
5051
- };
5052
- render$1(vm, container);
5053
- notifications[position].push({ vm });
5054
- appendTo.appendChild(container.firstElementChild);
5055
- return {
5056
- // instead of calling the onClose function directly, setting this value so that we can have the full lifecycle
5057
- // for out component, so that all closing steps will not be skipped.
5058
- close: () => {
5059
- vm.component.exposed.visible.value = false;
5060
- }
5061
- };
5062
- };
5063
- notificationTypes.forEach((type) => {
5064
- notify[type] = (options = {}, appContext) => {
5065
- if (isString(options) || isVNode(options)) {
5066
- options = {
5067
- message: options
5068
- };
5069
- }
5070
- return notify({ ...options, type }, appContext);
5071
- };
5072
- });
5073
- function close(id, position, userOnClose) {
5074
- const orientedNotifications = notifications[position];
5075
- const idx = orientedNotifications.findIndex(({ vm: vm2 }) => {
5076
- var _a;
5077
- return ((_a = vm2.component) == null ? void 0 : _a.props.id) === id;
5078
- });
5079
- if (idx === -1) return;
5080
- const { vm } = orientedNotifications[idx];
5081
- if (!vm) return;
5082
- userOnClose == null ? void 0 : userOnClose(vm);
5083
- const removedHeight = vm.el.offsetHeight;
5084
- const verticalPos = (position == null ? void 0 : position.split("-")[0]) || "top";
5085
- orientedNotifications.splice(idx, 1);
5086
- const len = orientedNotifications.length;
5087
- if (len < 1) return;
5088
- for (let i = idx; i < len; i++) {
5089
- const { el, component } = orientedNotifications[i].vm;
5090
- const pos = Number.parseInt(el.style[verticalPos], 10) - removedHeight - GAP_SIZE;
5091
- component.props.offset = pos;
5092
- }
5093
- }
5094
- function closeAll() {
5095
- for (const orientedNotifications of Object.values(notifications)) {
5096
- orientedNotifications.forEach(({ vm }) => {
5097
- vm.component.exposed.visible.value = false;
5098
- });
5099
- }
5100
- }
5101
- notify.closeAll = closeAll;
5102
- notify._context = null;
5103
- const $Notification = notify;
5104
- const XBasicNotification = $Notification;
5242
+ const XBasicButtonGroup = withInstall(_sfc_main$F);
5105
5243
  const ROW_KEY$1 = "_MAX_ROW_KEY";
5106
5244
  const PAGE_SIZE_OPTIONS$1 = [10, 50, 80, 100];
5107
5245
  const PAGE_SIZE$1 = 10;
@@ -8593,7 +8731,7 @@ const _sfc_main$A = /* @__PURE__ */ defineComponent({
8593
8731
  class: normalizeClass(basicTextClass.value),
8594
8732
  title: unref(isString)(unref(mergedValueRef)) ? unref(mergedValueRef) : void 0
8595
8733
  }, [
8596
- __props.icon ? (openBlock(), createBlock(_sfc_main$_, {
8734
+ __props.icon ? (openBlock(), createBlock(_sfc_main$$, {
8597
8735
  key: 0,
8598
8736
  icon: __props.icon,
8599
8737
  class: normalizeClass(__props.iconClass),
@@ -27590,7 +27728,8 @@ const components = [
27590
27728
  XBasicCard,
27591
27729
  XBasicRegion,
27592
27730
  XBasicRegionSelect,
27593
- XBasicButtonImportMax
27731
+ XBasicButtonImportMax,
27732
+ XBasicButtonExportMax
27594
27733
  ];
27595
27734
  const makeInstaller = (components2 = []) => {
27596
27735
  const install2 = (app, options) => {
@@ -27912,6 +28051,7 @@ export {
27912
28051
  XBasicButtonEdit,
27913
28052
  XBasicButtonExport,
27914
28053
  XBasicButtonExportDrop,
28054
+ XBasicButtonExportMax,
27915
28055
  XBasicButtonGroup,
27916
28056
  XBasicButtonImport,
27917
28057
  XBasicButtonImportMax,