yc-pro-components 0.0.12 → 0.0.14

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/es/components/dialog/src/index.vue2.mjs +17 -4
  2. package/es/components/dialog-form/src/index.vue2.mjs +19 -5
  3. package/es/components/display-item/index.d.ts +42 -6
  4. package/es/components/display-item/src/index.vue.d.ts +42 -6
  5. package/es/components/drawer-form/src/index.vue2.mjs +15 -5
  6. package/es/components/form/src/form-content.vue.d.ts +42 -6
  7. package/es/components/form/src/index.vue2.mjs +15 -5
  8. package/es/components/form-item/index.d.ts +88 -16
  9. package/es/components/form-item/src/index.vue.d.ts +35 -4
  10. package/es/components/form-item/src/index.vue2.mjs +1 -0
  11. package/es/components/page/src/index.vue2.mjs +1 -1
  12. package/es/components/popover/src/index.vue2.mjs +15 -5
  13. package/es/components/render/index.d.ts +3 -3
  14. package/es/components/render/src/index.vue.d.ts +1 -1
  15. package/es/components/table/src/table-action-bar.vue2.mjs +1 -1
  16. package/es/components/table/src/table-column.vue.d.ts +42 -6
  17. package/es/components/yc-drawer/src/index.vue.mjs +1 -1
  18. package/es/components/yc-drawer/src/index.vue2.mjs +3 -1
  19. package/es/components/yc-plus-tree/src/index.vue.mjs +1 -1
  20. package/es/components/yc-plus-tree/src/index.vue2.mjs +16 -4
  21. package/es/components/yc-status-dialog/src/index.vue.mjs +1 -1
  22. package/es/components/yc-status-dialog/src/index.vue2.mjs +14 -4
  23. package/es/constants/dict.d.ts +78 -0
  24. package/es/constants/dict.mjs +3 -0
  25. package/es/constants/index.d.ts +1 -0
  26. package/es/constants/index.mjs +1 -0
  27. package/es/hooks/index.d.ts +1 -0
  28. package/es/hooks/index.mjs +1 -0
  29. package/es/hooks/useDictInjection.d.ts +38 -0
  30. package/es/hooks/useDictInjection.mjs +18 -0
  31. package/es/hooks/useGetOptions.mjs +118 -30
  32. package/es/index.css +4 -4
  33. package/es/index.d.ts +1 -1
  34. package/es/index.mjs +2 -0
  35. package/es/types/plus.d.ts +74 -0
  36. package/es/version.d.ts +1 -1
  37. package/es/version.mjs +1 -1
  38. package/es/yc-components/index.d.ts +1 -1
  39. package/es/yc-components/version.d.ts +1 -1
  40. package/index.css +65 -53
  41. package/index.js +276 -95
  42. package/index.min.css +4 -4
  43. package/index.min.js +7 -7
  44. package/index.min.mjs +7 -7
  45. package/index.mjs +276 -97
  46. package/lib/components/dialog/src/index.vue2.js +17 -4
  47. package/lib/components/dialog-form/src/index.vue2.js +19 -5
  48. package/lib/components/display-item/index.d.ts +42 -6
  49. package/lib/components/display-item/src/index.vue.d.ts +42 -6
  50. package/lib/components/drawer-form/src/index.vue2.js +15 -5
  51. package/lib/components/form/src/form-content.vue.d.ts +42 -6
  52. package/lib/components/form/src/index.vue2.js +15 -5
  53. package/lib/components/form-item/index.d.ts +88 -16
  54. package/lib/components/form-item/src/index.vue.d.ts +35 -4
  55. package/lib/components/form-item/src/index.vue2.js +1 -0
  56. package/lib/components/page/src/index.vue2.js +1 -1
  57. package/lib/components/popover/src/index.vue2.js +14 -4
  58. package/lib/components/render/index.d.ts +3 -3
  59. package/lib/components/render/src/index.vue.d.ts +1 -1
  60. package/lib/components/table/src/table-action-bar.vue2.js +1 -1
  61. package/lib/components/table/src/table-column.vue.d.ts +42 -6
  62. package/lib/components/yc-drawer/src/index.vue.js +1 -1
  63. package/lib/components/yc-drawer/src/index.vue2.js +3 -1
  64. package/lib/components/yc-plus-tree/src/index.vue.js +1 -1
  65. package/lib/components/yc-plus-tree/src/index.vue2.js +16 -4
  66. package/lib/components/yc-status-dialog/src/index.vue.js +1 -1
  67. package/lib/components/yc-status-dialog/src/index.vue2.js +13 -3
  68. package/lib/constants/dict.d.ts +78 -0
  69. package/lib/constants/dict.js +5 -0
  70. package/lib/constants/index.d.ts +1 -0
  71. package/lib/constants/index.js +2 -0
  72. package/lib/hooks/index.d.ts +1 -0
  73. package/lib/hooks/index.js +2 -0
  74. package/lib/hooks/useDictInjection.d.ts +38 -0
  75. package/lib/hooks/useDictInjection.js +20 -0
  76. package/lib/hooks/useGetOptions.js +117 -29
  77. package/lib/index.css +4 -4
  78. package/lib/index.d.ts +1 -1
  79. package/lib/index.js +4 -0
  80. package/lib/types/plus.d.ts +74 -0
  81. package/lib/version.d.ts +1 -1
  82. package/lib/version.js +1 -1
  83. package/lib/yc-components/index.d.ts +1 -1
  84. package/lib/yc-components/version.d.ts +1 -1
  85. package/locale/en.js +1 -1
  86. package/locale/en.min.js +1 -1
  87. package/locale/en.min.mjs +1 -1
  88. package/locale/en.mjs +1 -1
  89. package/locale/ja.js +1 -1
  90. package/locale/ja.min.js +1 -1
  91. package/locale/ja.min.mjs +1 -1
  92. package/locale/ja.mjs +1 -1
  93. package/locale/ko.js +1 -1
  94. package/locale/ko.min.js +1 -1
  95. package/locale/ko.min.mjs +1 -1
  96. package/locale/ko.mjs +1 -1
  97. package/locale/zh-cn.js +1 -1
  98. package/locale/zh-cn.min.js +1 -1
  99. package/locale/zh-cn.min.mjs +1 -1
  100. package/locale/zh-cn.mjs +1 -1
  101. package/locale/zh-tw.js +1 -1
  102. package/locale/zh-tw.min.js +1 -1
  103. package/locale/zh-tw.min.mjs +1 -1
  104. package/locale/zh-tw.mjs +1 -1
  105. package/package.json +1 -1
  106. package/es/components/dialog-form/index.d.ts +0 -1142
  107. package/es/components/dialog-form/src/index.vue.d.ts +0 -481
  108. package/es/components/drawer-form/index.d.ts +0 -3455
  109. package/es/components/drawer-form/src/index.vue.d.ts +0 -1242
  110. package/es/components/form/index.d.ts +0 -1645
  111. package/es/components/form/src/index.vue.d.ts +0 -628
  112. package/es/components/page/index.d.ts +0 -15194
  113. package/es/components/page/src/index.vue.d.ts +0 -5234
  114. package/es/components/search/index.d.ts +0 -4430
  115. package/es/components/search/src/index.vue.d.ts +0 -1503
  116. package/es/components/yc-plus-page/src/index.vue.d.ts +0 -12672
  117. package/es/hooks/usePlusFormReset.d.ts +0 -9853
  118. package/lib/components/dialog-form/index.d.ts +0 -1142
  119. package/lib/components/dialog-form/src/index.vue.d.ts +0 -481
  120. package/lib/components/drawer-form/index.d.ts +0 -3455
  121. package/lib/components/drawer-form/src/index.vue.d.ts +0 -1242
  122. package/lib/components/form/index.d.ts +0 -1645
  123. package/lib/components/form/src/index.vue.d.ts +0 -628
  124. package/lib/components/page/index.d.ts +0 -15194
  125. package/lib/components/page/src/index.vue.d.ts +0 -5234
  126. package/lib/components/search/index.d.ts +0 -4430
  127. package/lib/components/search/src/index.vue.d.ts +0 -1503
  128. package/lib/components/yc-plus-page/src/index.vue.d.ts +0 -12672
  129. package/lib/hooks/usePlusFormReset.d.ts +0 -9853
package/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- /*! yc-pro-components v0.0.12 */
2
- import { unref, isRef, ref, isReactive, watch, inject, computed, shallowRef, provide, onMounted, nextTick, onBeforeUnmount, defineComponent, watchEffect, openBlock, createBlock, mergeProps, createSlots, withCtx, createElementVNode, renderSlot, normalizeStyle, createVNode, createTextVNode, toDisplayString, createElementBlock, normalizeClass, createCommentVNode, reactive, useAttrs, Fragment, renderList, resolveDynamicComponent, normalizeProps, guardReactiveProps, h, withDirectives, isVNode, withKeys, withModifiers, TransitionGroup, toHandlers, getCurrentInstance, resolveComponent, toRefs, useSlots, onUnmounted, resolveDirective, pushScopeId, popScopeId, onBeforeMount, getCurrentScope, onScopeDispose, toRef, mergeModels, useModel, vShow } from 'vue';
1
+ /*! yc-pro-components v0.0.14 */
2
+ import { unref, isRef, ref, inject, isReactive, watch, computed, shallowRef, provide, onMounted, nextTick, onBeforeUnmount, defineComponent, watchEffect, openBlock, createBlock, mergeProps, createSlots, withCtx, createElementVNode, renderSlot, normalizeStyle, createVNode, createTextVNode, toDisplayString, createElementBlock, normalizeClass, createCommentVNode, reactive, useAttrs, Fragment, renderList, resolveDynamicComponent, normalizeProps, guardReactiveProps, h, withDirectives, isVNode, withKeys, withModifiers, TransitionGroup, toHandlers, getCurrentInstance, resolveComponent, toRefs, useSlots, onUnmounted, resolveDirective, pushScopeId, popScopeId, onBeforeMount, getCurrentScope, onScopeDispose, toRef, mergeModels, useModel, vShow } from 'vue';
3
3
  import { dayjs, localeContextKey, ElDialog, ElButton, ElPagination, ElRadioGroup, ElRadio, ElTableColumn, ElDropdown, ElDropdownMenu, ElDropdownItem, ElIcon, ElTooltip, ElPopconfirm, ElLink, ElMessageBox, useFormDisabled, ElDatePicker, ClickOutside, ElTag, ElInput, ElAutocomplete, ElCascader, ElCheckboxGroup, ElCheckbox, ElColorPicker, ElInputNumber, ElRate, ElSelect, ElOption, ElSlider, ElSwitch, ElTimePicker, ElTimeSelect, ElTransfer, ElTreeSelect, ElSelectV2, ElText, ElDivider, ElFormItem, ElOptionGroup, ElRow, ElCol, ElForm, ElCard, ElMessage, ElImage, ElProgress, ElAvatar, ElPopover, ElTable, vLoading, ElDescriptions, ElDescriptionsItem, ElDrawer, ElSteps, ElStep, ElBreadcrumb, ElBreadcrumbItem, ElMenuItem, ElSubMenu, ElMenu, ElScrollbar, ElHeader, ElContainer, ElMain, ElBacktop } from 'element-plus';
4
4
 
5
5
  const makeInstaller = (components = []) => {
@@ -11,8 +11,6 @@ const makeInstaller = (components = []) => {
11
11
  };
12
12
  };
13
13
 
14
- const version$2 = "2.6.3";
15
-
16
14
  /** Detect free variable `global` from Node.js. */
17
15
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
18
16
 
@@ -4640,6 +4638,8 @@ function set(object, path, value) {
4640
4638
  return object == null ? object : baseSet(object, path, value);
4641
4639
  }
4642
4640
 
4641
+ const version$2 = "2.6.3";
4642
+
4643
4643
  const objectToString = Object.prototype.toString;
4644
4644
  const toTypeString = (value) => objectToString.call(value);
4645
4645
  const toRawType = (value) => {
@@ -4767,6 +4767,36 @@ const removeChildrenField = (item) => {
4767
4767
  return data;
4768
4768
  };
4769
4769
 
4770
+ const DefaultPageSizeList = [10, 20, 30, 40, 50, 100, 200, 300, 400, 500];
4771
+ const DefaultPageInfo = {
4772
+ page: 1,
4773
+ pageSize: 10
4774
+ };
4775
+
4776
+ const TableFormRefInjectionKey = Symbol("tableFormRefInjectionKey");
4777
+ const TableFormFieldRefInjectionKey = Symbol("tableFormFieldRefInjectionKey");
4778
+ const TableFormRowInfoInjectionKey = Symbol("tableFormRowInfoInjectionKey");
4779
+ const DatePickerValueIsArrayList = ["datetimerange", "daterange", "monthrange"];
4780
+ const ValueIsNumberList = ["rate", "input-number", "slider"];
4781
+ const ValueIsBooleanList = ["switch"];
4782
+ const ValueIsArrayList = [
4783
+ "checkbox",
4784
+ "cascader",
4785
+ "plus-date-picker",
4786
+ "plus-input-tag",
4787
+ "transfer"
4788
+ ];
4789
+
4790
+ const selectValueTypeList = [
4791
+ "select",
4792
+ "radio",
4793
+ "checkbox",
4794
+ "select-v2",
4795
+ "plus-radio"
4796
+ ];
4797
+
4798
+ const DictStoreInjectionKey = Symbol("DictStore");
4799
+
4770
4800
  const throwError = (data) => {
4771
4801
  if (!isArray(data)) {
4772
4802
  console.error("Uncaught TypeError: ", `options expected Array but got ${toRawType(data)}`);
@@ -4793,27 +4823,53 @@ const getOptionsByOptionsMap = (options, props) => {
4793
4823
  const useGetOptions = (props) => {
4794
4824
  const options = ref([]);
4795
4825
  const optionsIsReady = ref(false);
4796
- if (!props.options) {
4826
+ const injectedDictStore = inject(DictStoreInjectionKey, null);
4827
+ const hasValidOptions = props.options && (!isArray(props.options) || props.options.length > 0);
4828
+ if (hasValidOptions) {
4829
+ handleOptions();
4830
+ } else if (props.autoDict) {
4831
+ handleAutoDict();
4832
+ } else {
4797
4833
  options.value = [];
4798
4834
  optionsIsReady.value = true;
4799
- } else if (isRef(props.options) || isReactive(props.options) || isArray(props.options)) {
4800
- watch(
4801
- () => props.options,
4802
- (val) => {
4803
- const value = isRef(val) ? val.value : val;
4804
- options.value = getOptionsByOptionsMap(value, props);
4835
+ }
4836
+ function handleOptions() {
4837
+ if (!props.options) {
4838
+ options.value = [];
4839
+ optionsIsReady.value = true;
4840
+ return;
4841
+ }
4842
+ if (isRef(props.options) || isReactive(props.options) || isArray(props.options)) {
4843
+ watch(
4844
+ () => props.options,
4845
+ (val) => {
4846
+ const value = isRef(val) ? val.value : val;
4847
+ options.value = getOptionsByOptionsMap(value, props);
4848
+ optionsIsReady.value = true;
4849
+ },
4850
+ {
4851
+ immediate: true,
4852
+ deep: true
4853
+ }
4854
+ );
4855
+ } else if (isFunction(props.options)) {
4856
+ const getValue = props.options;
4857
+ const result = getValue(props);
4858
+ if (isPromise(result)) {
4859
+ result.then((value) => {
4860
+ options.value = getOptionsByOptionsMap(value, props);
4861
+ optionsIsReady.value = true;
4862
+ throwError(options.value);
4863
+ }).catch((err) => {
4864
+ throw err;
4865
+ });
4866
+ } else {
4867
+ options.value = getOptionsByOptionsMap(result, props);
4805
4868
  optionsIsReady.value = true;
4806
- },
4807
- {
4808
- immediate: true,
4809
- deep: true
4810
4869
  }
4811
- );
4812
- } else if (isFunction(props.options)) {
4813
- const getValue = props.options;
4814
- const result = getValue(props);
4815
- if (isPromise(result)) {
4816
- result.then((value) => {
4870
+ } else if (isPromise(props.options)) {
4871
+ const getValue = props.options;
4872
+ getValue.then((value) => {
4817
4873
  options.value = getOptionsByOptionsMap(value, props);
4818
4874
  optionsIsReady.value = true;
4819
4875
  throwError(options.value);
@@ -4821,21 +4877,82 @@ const useGetOptions = (props) => {
4821
4877
  throw err;
4822
4878
  });
4823
4879
  } else {
4824
- options.value = getOptionsByOptionsMap(result, props);
4825
4880
  optionsIsReady.value = true;
4881
+ throwError(props.options);
4826
4882
  }
4827
- } else if (isPromise(props.options)) {
4828
- const getValue = props.options;
4829
- getValue.then((value) => {
4830
- options.value = getOptionsByOptionsMap(value, props);
4883
+ }
4884
+ function handleAutoDict() {
4885
+ if (isFunction(props.autoDict)) {
4886
+ const autoDictFn = props.autoDict;
4887
+ watch(
4888
+ () => {
4889
+ return autoDictFn(props);
4890
+ },
4891
+ (result) => {
4892
+ if (isPromise(result)) {
4893
+ result.then((value) => {
4894
+ options.value = getOptionsByOptionsMap(value, props);
4895
+ optionsIsReady.value = true;
4896
+ }).catch((err) => {
4897
+ console.error("[yc-components] autoDict function error:", err);
4898
+ options.value = [];
4899
+ optionsIsReady.value = true;
4900
+ });
4901
+ } else {
4902
+ options.value = getOptionsByOptionsMap(result, props);
4903
+ optionsIsReady.value = true;
4904
+ }
4905
+ },
4906
+ { immediate: true }
4907
+ );
4908
+ } else if (typeof props.autoDict === "object" && props.autoDict !== null) {
4909
+ const { store, method = "getDictData", transform, dictCode } = props.autoDict;
4910
+ const dictStore = store || injectedDictStore;
4911
+ const fieldOrCode = dictCode || props.prop;
4912
+ if (dictStore && isFunction(dictStore[method])) {
4913
+ watch(
4914
+ () => dictStore[method](fieldOrCode),
4915
+ (val) => {
4916
+ try {
4917
+ const data = transform && isFunction(transform) ? transform(val) : val;
4918
+ options.value = getOptionsByOptionsMap(data, props);
4919
+ optionsIsReady.value = true;
4920
+ } catch (err) {
4921
+ console.error("[yc-components] autoDict transform error:", err);
4922
+ options.value = [];
4923
+ optionsIsReady.value = true;
4924
+ }
4925
+ },
4926
+ { immediate: true }
4927
+ );
4928
+ } else {
4929
+ console.warn(
4930
+ `[yc-components] autoDict: DictStore or method "${method}" not found for field "${fieldOrCode}"`
4931
+ );
4932
+ options.value = [];
4933
+ optionsIsReady.value = true;
4934
+ }
4935
+ } else if (props.autoDict === true) {
4936
+ if (injectedDictStore && isFunction(injectedDictStore.getDictData)) {
4937
+ watch(
4938
+ () => injectedDictStore.getDictData(props.prop),
4939
+ (val) => {
4940
+ options.value = getOptionsByOptionsMap(val, props);
4941
+ optionsIsReady.value = true;
4942
+ },
4943
+ { immediate: true }
4944
+ );
4945
+ } else {
4946
+ console.warn(
4947
+ `[yc-components] autoDict: DictStore not provided via inject for field "${props.prop}". Please use useDictInjection() in parent component.`
4948
+ );
4949
+ options.value = [];
4950
+ optionsIsReady.value = true;
4951
+ }
4952
+ } else {
4953
+ options.value = [];
4831
4954
  optionsIsReady.value = true;
4832
- throwError(options.value);
4833
- }).catch((err) => {
4834
- throw err;
4835
- });
4836
- } else {
4837
- optionsIsReady.value = true;
4838
- throwError(props.options);
4955
+ }
4839
4956
  }
4840
4957
  return { customOptions: options, customOptionsIsReady: optionsIsReady };
4841
4958
  };
@@ -4934,34 +5051,6 @@ const useLocale = (localeOverrides) => {
4934
5051
  }));
4935
5052
  };
4936
5053
 
4937
- const DefaultPageSizeList = [10, 20, 30, 40, 50, 100, 200, 300, 400, 500];
4938
- const DefaultPageInfo = {
4939
- page: 1,
4940
- pageSize: 10
4941
- };
4942
-
4943
- const TableFormRefInjectionKey = Symbol("tableFormRefInjectionKey");
4944
- const TableFormFieldRefInjectionKey = Symbol("tableFormFieldRefInjectionKey");
4945
- const TableFormRowInfoInjectionKey = Symbol("tableFormRowInfoInjectionKey");
4946
- const DatePickerValueIsArrayList = ["datetimerange", "daterange", "monthrange"];
4947
- const ValueIsNumberList = ["rate", "input-number", "slider"];
4948
- const ValueIsBooleanList = ["switch"];
4949
- const ValueIsArrayList = [
4950
- "checkbox",
4951
- "cascader",
4952
- "plus-date-picker",
4953
- "plus-input-tag",
4954
- "transfer"
4955
- ];
4956
-
4957
- const selectValueTypeList = [
4958
- "select",
4959
- "radio",
4960
- "checkbox",
4961
- "select-v2",
4962
- "plus-radio"
4963
- ];
4964
-
4965
5054
  function useTable(_pageInfo) {
4966
5055
  const defaultPageInfo = unref(_pageInfo) || DefaultPageInfo;
4967
5056
  const tableData = ref([]);
@@ -8482,6 +8571,20 @@ function useSelectWithPagination(config) {
8482
8571
  };
8483
8572
  }
8484
8573
 
8574
+ function useDictInjection(dictStore) {
8575
+ if (!dictStore) {
8576
+ console.warn("[yc-components] useDictInjection: dictStore is required");
8577
+ return;
8578
+ }
8579
+ if (typeof dictStore.getDictData !== "function") {
8580
+ console.error(
8581
+ "[yc-components] useDictInjection: dictStore must implement getDictData method. Please ensure your dictStore implements DictStoreInterface."
8582
+ );
8583
+ return;
8584
+ }
8585
+ provide(DictStoreInjectionKey, dictStore);
8586
+ }
8587
+
8485
8588
  const _hoisted_1$q = { class: "plus-dialog-body" };
8486
8589
  var _sfc_main$K = /* @__PURE__ */ defineComponent({
8487
8590
  ...{
@@ -8512,9 +8615,21 @@ var _sfc_main$K = /* @__PURE__ */ defineComponent({
8512
8615
  watchEffect(() => {
8513
8616
  subVisible.value = props.modelValue;
8514
8617
  });
8515
- const handleConfirm = () => {
8618
+ const isSubmitting = ref(false);
8619
+ const computedLoading = computed(() => props.confirmLoading || isSubmitting.value);
8620
+ const doConfirm = () => {
8621
+ isSubmitting.value = true;
8516
8622
  emit("confirm");
8623
+ setTimeout(() => {
8624
+ isSubmitting.value = false;
8625
+ }, 300);
8517
8626
  };
8627
+ const handleConfirm = debounce(doConfirm, 300, {
8628
+ leading: true,
8629
+ // 立即执行第一次
8630
+ trailing: false
8631
+ // 不执行最后一次
8632
+ });
8518
8633
  const handleCancel = () => {
8519
8634
  emit("update:modelValue", false);
8520
8635
  emit("cancel");
@@ -8571,8 +8686,8 @@ var _sfc_main$K = /* @__PURE__ */ defineComponent({
8571
8686
  }),
8572
8687
  createVNode(unref(ElButton), {
8573
8688
  type: "primary",
8574
- loading: _ctx.confirmLoading,
8575
- onClick: handleConfirm
8689
+ loading: computedLoading.value,
8690
+ onClick: unref(handleConfirm)
8576
8691
  }, {
8577
8692
  default: withCtx(() => [
8578
8693
  createTextVNode(
@@ -8583,7 +8698,7 @@ var _sfc_main$K = /* @__PURE__ */ defineComponent({
8583
8698
  ]),
8584
8699
  _: 1
8585
8700
  /* STABLE */
8586
- }, 8, ["loading"])
8701
+ }, 8, ["loading", "onClick"])
8587
8702
  ])
8588
8703
  ],
8589
8704
  4
@@ -15779,6 +15894,7 @@ var _sfc_main$D = /* @__PURE__ */ defineComponent({
15779
15894
  fieldChildrenSlot: { type: Function, default: void 0 },
15780
15895
  renderErrorMessage: { type: Function, default: void 0 },
15781
15896
  optionsMap: { default: void 0 },
15897
+ autoDict: { type: [Boolean, Function, Object], default: void 0 },
15782
15898
  index: { default: 0 },
15783
15899
  clearable: { type: Boolean, default: true }
15784
15900
  },
@@ -16678,8 +16794,11 @@ var _sfc_main$A = /* @__PURE__ */ defineComponent({
16678
16794
  var _a;
16679
16795
  (_a = formInstance.value) == null ? void 0 : _a.clearValidate();
16680
16796
  };
16681
- const handleSubmit = async () => {
16797
+ const isSubmitting = ref(false);
16798
+ const computedLoading = computed(() => props.submitLoading || isSubmitting.value);
16799
+ const doSubmit = async () => {
16682
16800
  var _a, _b, _c;
16801
+ isSubmitting.value = true;
16683
16802
  try {
16684
16803
  const valid = await ((_a = formInstance.value) == null ? void 0 : _a.validate());
16685
16804
  if (valid) {
@@ -16697,6 +16816,12 @@ var _sfc_main$A = /* @__PURE__ */ defineComponent({
16697
16816
  }
16698
16817
  return false;
16699
16818
  };
16819
+ const handleSubmit = debounce(doSubmit, 300, {
16820
+ leading: true,
16821
+ // 立即执行第一次
16822
+ trailing: false
16823
+ // 不执行最后一次
16824
+ });
16700
16825
  const handleReset = () => {
16701
16826
  clearValidate();
16702
16827
  values.value = { ...props.defaultValues };
@@ -16845,7 +16970,7 @@ var _sfc_main$A = /* @__PURE__ */ defineComponent({
16845
16970
  style: normalizeStyle(style.value)
16846
16971
  },
16847
16972
  [
16848
- renderSlot(_ctx.$slots, "footer", normalizeProps(guardReactiveProps({ handleReset, handleSubmit })), () => [
16973
+ renderSlot(_ctx.$slots, "footer", normalizeProps(guardReactiveProps({ handleReset, handleSubmit: unref(handleSubmit) })), () => [
16849
16974
  _ctx.hasReset ? (openBlock(), createBlock(unref(ElButton), {
16850
16975
  key: 0,
16851
16976
  onClick: handleReset
@@ -16863,8 +16988,8 @@ var _sfc_main$A = /* @__PURE__ */ defineComponent({
16863
16988
  })) : createCommentVNode("v-if", true),
16864
16989
  createVNode(unref(ElButton), {
16865
16990
  type: "primary",
16866
- loading: _ctx.submitLoading,
16867
- onClick: handleSubmit
16991
+ loading: computedLoading.value,
16992
+ onClick: unref(handleSubmit)
16868
16993
  }, {
16869
16994
  default: withCtx(() => [
16870
16995
  createCommentVNode(" \u63D0\u4EA4 "),
@@ -16876,7 +17001,7 @@ var _sfc_main$A = /* @__PURE__ */ defineComponent({
16876
17001
  ]),
16877
17002
  _: 1
16878
17003
  /* STABLE */
16879
- }, 8, ["loading"])
17004
+ }, 8, ["loading", "onClick"])
16880
17005
  ])
16881
17006
  ],
16882
17007
  4
@@ -17980,10 +18105,19 @@ var _sfc_main$v = /* @__PURE__ */ defineComponent({
17980
18105
  subVisible.value = false;
17981
18106
  emit("cancel");
17982
18107
  };
17983
- const handleConfirmPopover = () => {
18108
+ const isSubmitting = ref(false);
18109
+ const computedLoading = computed(() => props.confirmLoading || isSubmitting.value);
18110
+ const doConfirm = () => {
18111
+ isSubmitting.value = true;
17984
18112
  subVisible.value = false;
17985
18113
  emit("confirm");
17986
18114
  };
18115
+ const handleConfirmPopover = debounce(doConfirm, 300, {
18116
+ leading: true,
18117
+ // 立即执行第一次
18118
+ trailing: false
18119
+ // 不执行最后一次
18120
+ });
17987
18121
  return (_ctx, _cache) => {
17988
18122
  return openBlock(), createBlock(unref(ElPopover), mergeProps({
17989
18123
  visible: subVisible.value,
@@ -18015,8 +18149,8 @@ var _sfc_main$v = /* @__PURE__ */ defineComponent({
18015
18149
  createVNode(unref(ElButton), {
18016
18150
  size: "small",
18017
18151
  type: "primary",
18018
- loading: _ctx.confirmLoading,
18019
- onClick: handleConfirmPopover
18152
+ loading: computedLoading.value,
18153
+ onClick: unref(handleConfirmPopover)
18020
18154
  }, {
18021
18155
  default: withCtx(() => [
18022
18156
  createTextVNode(
@@ -18027,7 +18161,7 @@ var _sfc_main$v = /* @__PURE__ */ defineComponent({
18027
18161
  ]),
18028
18162
  _: 1
18029
18163
  /* STABLE */
18030
- }, 8, ["loading"])
18164
+ }, 8, ["loading", "onClick"])
18031
18165
  ])) : createCommentVNode("v-if", true)
18032
18166
  ]),
18033
18167
  _: 3
@@ -19464,8 +19598,10 @@ var _sfc_main$q = /* @__PURE__ */ defineComponent({
19464
19598
  emit("update:modelValue", values);
19465
19599
  emit("change", values, column);
19466
19600
  };
19467
- const handleConfirm = async () => {
19601
+ const isSubmitting = ref(false);
19602
+ const doConfirm = async () => {
19468
19603
  var _a, _b, _c;
19604
+ isSubmitting.value = true;
19469
19605
  try {
19470
19606
  const valid = await ((_a = computedFormInstance.value) == null ? void 0 : _a.validate());
19471
19607
  if (valid) {
@@ -19479,8 +19615,18 @@ var _sfc_main$q = /* @__PURE__ */ defineComponent({
19479
19615
  ElMessage.warning(message || t("plus.form.errorTip"));
19480
19616
  }
19481
19617
  emit("confirmError", errors);
19618
+ } finally {
19619
+ setTimeout(() => {
19620
+ isSubmitting.value = false;
19621
+ }, 300);
19482
19622
  }
19483
19623
  };
19624
+ const handleConfirm = debounce(doConfirm, 300, {
19625
+ leading: true,
19626
+ // 立即执行第一次
19627
+ trailing: false
19628
+ // 不执行最后一次
19629
+ });
19484
19630
  const handleCancel = () => {
19485
19631
  subVisible.value = false;
19486
19632
  emit("update:visible", subVisible.value);
@@ -19502,11 +19648,12 @@ var _sfc_main$q = /* @__PURE__ */ defineComponent({
19502
19648
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => subVisible.value = $event),
19503
19649
  width: "800px",
19504
19650
  top: "10vh",
19505
- title: unref(t)("plus.dialogForm.title")
19651
+ title: unref(t)("plus.dialogForm.title"),
19652
+ "confirm-loading": isSubmitting.value
19506
19653
  }, _ctx.dialog, {
19507
19654
  onClose: handleClose,
19508
19655
  onCancel: handleCancel,
19509
- onConfirm: handleConfirm
19656
+ onConfirm: unref(handleConfirm)
19510
19657
  }), createSlots({
19511
19658
  default: withCtx(() => [
19512
19659
  createVNode(unref(PlusForm), mergeProps({
@@ -19557,11 +19704,11 @@ var _sfc_main$q = /* @__PURE__ */ defineComponent({
19557
19704
  _ctx.$slots["dialog-footer"] ? {
19558
19705
  name: "footer",
19559
19706
  fn: withCtx(() => [
19560
- renderSlot(_ctx.$slots, "dialog-footer", normalizeProps(guardReactiveProps({ handleConfirm, handleCancel })))
19707
+ renderSlot(_ctx.$slots, "dialog-footer", normalizeProps(guardReactiveProps({ handleConfirm: unref(handleConfirm), handleCancel })))
19561
19708
  ]),
19562
19709
  key: "1"
19563
19710
  } : void 0
19564
- ]), 1040, ["modelValue", "title"]);
19711
+ ]), 1040, ["modelValue", "title", "confirm-loading", "onConfirm"]);
19565
19712
  };
19566
19713
  }
19567
19714
  });
@@ -19623,8 +19770,11 @@ var _sfc_main$p = /* @__PURE__ */ defineComponent({
19623
19770
  emit("update:modelValue", values);
19624
19771
  emit("change", values, column);
19625
19772
  };
19626
- const handleConfirm = async () => {
19773
+ const isSubmitting = ref(false);
19774
+ const computedLoading = computed(() => props.confirmLoading || isSubmitting.value);
19775
+ const doConfirm = async () => {
19627
19776
  var _a, _b, _c;
19777
+ isSubmitting.value = true;
19628
19778
  try {
19629
19779
  const valid = await ((_a = computedFormInstance.value) == null ? void 0 : _a.validate());
19630
19780
  if (valid) {
@@ -19640,6 +19790,12 @@ var _sfc_main$p = /* @__PURE__ */ defineComponent({
19640
19790
  emit("confirmError", errors);
19641
19791
  }
19642
19792
  };
19793
+ const handleConfirm = debounce(doConfirm, 300, {
19794
+ leading: true,
19795
+ // 立即执行第一次
19796
+ trailing: false
19797
+ // 不执行最后一次
19798
+ });
19643
19799
  const handleClose = () => {
19644
19800
  handleCancel();
19645
19801
  emit("update:visible", subVisible.value);
@@ -19713,7 +19869,7 @@ var _sfc_main$p = /* @__PURE__ */ defineComponent({
19713
19869
  name: "footer",
19714
19870
  fn: withCtx(() => [
19715
19871
  createElementVNode("div", _hoisted_1$d, [
19716
- renderSlot(_ctx.$slots, "drawer-footer", normalizeProps(guardReactiveProps({ handleConfirm, handleCancel })), () => [
19872
+ renderSlot(_ctx.$slots, "drawer-footer", normalizeProps(guardReactiveProps({ handleConfirm: unref(handleConfirm), handleCancel })), () => [
19717
19873
  createVNode(unref(ElButton), { onClick: handleCancel }, {
19718
19874
  default: withCtx(() => [
19719
19875
  createTextVNode(
@@ -19727,8 +19883,8 @@ var _sfc_main$p = /* @__PURE__ */ defineComponent({
19727
19883
  }),
19728
19884
  createVNode(unref(ElButton), {
19729
19885
  type: "primary",
19730
- loading: _ctx.confirmLoading,
19731
- onClick: handleConfirm
19886
+ loading: computedLoading.value,
19887
+ onClick: unref(handleConfirm)
19732
19888
  }, {
19733
19889
  default: withCtx(() => [
19734
19890
  createTextVNode(
@@ -19739,7 +19895,7 @@ var _sfc_main$p = /* @__PURE__ */ defineComponent({
19739
19895
  ]),
19740
19896
  _: 1
19741
19897
  /* STABLE */
19742
- }, 8, ["loading"])
19898
+ }, 8, ["loading", "onClick"])
19743
19899
  ])
19744
19900
  ])
19745
19901
  ]),
@@ -57188,6 +57344,7 @@ var _sfc_main$9 = /* @__PURE__ */ defineComponent({
57188
57344
  });
57189
57345
  return (_ctx, _cache) => {
57190
57346
  const _component_el_input = resolveComponent("el-input");
57347
+ const _component_el_tooltip = resolveComponent("el-tooltip");
57191
57348
  const _component_el_divider = resolveComponent("el-divider");
57192
57349
  const _component_el_dropdown_item = resolveComponent("el-dropdown-item");
57193
57350
  const _component_el_dropdown_menu = resolveComponent("el-dropdown-menu");
@@ -57308,10 +57465,21 @@ var _sfc_main$9 = /* @__PURE__ */ defineComponent({
57308
57465
  }, () => [
57309
57466
  createElementVNode("span", _hoisted_4$3, [
57310
57467
  createCommentVNode(" \u9ED8\u8BA4\u8282\u70B9\u6807\u7B7E\u6587\u672C "),
57311
- createElementVNode("span", {
57312
- class: "label-text",
57313
- innerHTML: highlightKeyword(node.label, props.searchMode === "local" ? filterText.value : "")
57314
- }, null, 8, _hoisted_5$3)
57468
+ createVNode(_component_el_tooltip, {
57469
+ content: node.label,
57470
+ placement: "top",
57471
+ disabled: !node.label || node.label.length <= 20,
57472
+ "show-after": 500
57473
+ }, {
57474
+ default: withCtx(() => [
57475
+ createElementVNode("span", {
57476
+ class: "label-text",
57477
+ innerHTML: highlightKeyword(node.label, props.searchMode === "local" ? filterText.value : "")
57478
+ }, null, 8, _hoisted_5$3)
57479
+ ]),
57480
+ _: 2
57481
+ /* DYNAMIC */
57482
+ }, 1032, ["content", "disabled"])
57315
57483
  ])
57316
57484
  ], true),
57317
57485
  createCommentVNode(" \u8282\u70B9\u64CD\u4F5C\u533A\u57DF\uFF08\u72EC\u7ACB\u4E8E\u81EA\u5B9A\u4E49 slot\uFF09 "),
@@ -57422,7 +57590,7 @@ var _sfc_main$9 = /* @__PURE__ */ defineComponent({
57422
57590
  }
57423
57591
  });
57424
57592
 
57425
- var YcPlusTreeComponent = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-fa0eccd0"], ["__file", "index.vue"]]);
57593
+ var YcPlusTreeComponent = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-0043eed3"], ["__file", "index.vue"]]);
57426
57594
 
57427
57595
  const YcPlusTree = l(YcPlusTreeComponent);
57428
57596
  const RePlusTree = YcPlusTree;
@@ -57557,7 +57725,7 @@ const closeAllDrawer = () => {
57557
57725
  drawerStore.value = [];
57558
57726
  };
57559
57727
 
57560
- const _withScopeId$1 = (n) => (pushScopeId("data-v-e306ac1f"), n = n(), popScopeId(), n);
57728
+ const _withScopeId$1 = (n) => (pushScopeId("data-v-f8ad9f74"), n = n(), popScopeId(), n);
57561
57729
  const _hoisted_1$4 = { class: "custom-drawer-header" };
57562
57730
  const _hoisted_2$4 = { class: "header-content" };
57563
57731
  const _hoisted_3$4 = ["id"];
@@ -57600,7 +57768,9 @@ var _sfc_main$7 = /* @__PURE__ */ defineComponent({
57600
57768
  bg: true,
57601
57769
  popConfirm: options == null ? void 0 : options.popConfirm,
57602
57770
  btnClick: ({ drawer: { options: options2, index } }) => {
57771
+ var _a;
57603
57772
  if (!options2 || index === void 0) return;
57773
+ if ((_a = sureBtnMap.value[index]) == null ? void 0 : _a.loading) return;
57604
57774
  if (options2 == null ? void 0 : options2.sureBtnLoading) {
57605
57775
  sureBtnMap.value[index] = Object.assign({}, sureBtnMap.value[index] || {}, {
57606
57776
  loading: true
@@ -57779,7 +57949,7 @@ var _sfc_main$7 = /* @__PURE__ */ defineComponent({
57779
57949
  }
57780
57950
  });
57781
57951
 
57782
- var YcDrawerComponent = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-e306ac1f"], ["__file", "index.vue"]]);
57952
+ var YcDrawerComponent = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-f8ad9f74"], ["__file", "index.vue"]]);
57783
57953
 
57784
57954
  const YcDrawer = YcDrawerComponent;
57785
57955
  const ReDrawer = YcDrawerComponent;
@@ -57863,10 +58033,18 @@ var _sfc_main$6 = /* @__PURE__ */ defineComponent({
57863
58033
  if (props.confirmText) return props.confirmText;
57864
58034
  return props.status === "delete" ? "\u5220\u9664" : "\u786E\u5B9A";
57865
58035
  });
57866
- const handleConfirm = () => {
58036
+ const isSubmitting = ref(false);
58037
+ const doConfirm = () => {
58038
+ isSubmitting.value = true;
57867
58039
  emit("confirm");
57868
58040
  dialogVisible.value = false;
57869
58041
  };
58042
+ const handleConfirm = debounce(doConfirm, 300, {
58043
+ leading: true,
58044
+ // 立即执行第一次
58045
+ trailing: false
58046
+ // 不执行最后一次
58047
+ });
57870
58048
  const handleCancel = () => {
57871
58049
  emit("cancel");
57872
58050
  dialogVisible.value = false;
@@ -57925,7 +58103,8 @@ var _sfc_main$6 = /* @__PURE__ */ defineComponent({
57925
58103
  })) : createCommentVNode("v-if", true),
57926
58104
  createVNode(unref(ElButton), {
57927
58105
  type: currentStatusConfig.value.confirmButtonType,
57928
- onClick: handleConfirm
58106
+ loading: isSubmitting.value,
58107
+ onClick: unref(handleConfirm)
57929
58108
  }, {
57930
58109
  default: withCtx(() => [
57931
58110
  createTextVNode(
@@ -57936,7 +58115,7 @@ var _sfc_main$6 = /* @__PURE__ */ defineComponent({
57936
58115
  ]),
57937
58116
  _: 1
57938
58117
  /* STABLE */
57939
- }, 8, ["type"])
58118
+ }, 8, ["type", "loading", "onClick"])
57940
58119
  ], true)
57941
58120
  ])
57942
58121
  ]),
@@ -57960,7 +58139,7 @@ var _sfc_main$6 = /* @__PURE__ */ defineComponent({
57960
58139
  }
57961
58140
  });
57962
58141
 
57963
- var YcStatusDialog = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-ce588855"], ["__file", "index.vue"]]);
58142
+ var YcStatusDialog = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-a1851fcd"], ["__file", "index.vue"]]);
57964
58143
 
57965
58144
  var _sfc_main$5 = /* @__PURE__ */ defineComponent({
57966
58145
  ...{
@@ -59636,8 +59815,8 @@ const plugins = [
59636
59815
 
59637
59816
  var installer = makeInstaller([...plugins]);
59638
59817
 
59639
- const version = "0.1.30";
59818
+ const version = "0.0.13";
59640
59819
 
59641
59820
  const install = installer.install;
59642
59821
 
59643
- export { DEFAULT_CDN_CONFIG, DEFAULT_YC_CONFIG, DatePickerValueIsArrayList, DefaultPageInfo, DefaultPageSizeList, PlusBreadcrumb, PlusCheckCard, PlusCheckCardGroup, PlusDatePicker, PlusDescriptions, PlusDialog, PlusDialogForm, PlusDisplayItem, PlusDrawerForm, PlusForm, PlusFormItem, PlusHeader, PlusInputTag, PlusLayout, PlusPage, PlusPagination, PlusPopover, PlusRadio, PlusSearch, PlusSidebar, PlusSidebarItem, PlusStepsForm, PlusTable, YcAnimateSelector as ReAnimateSelector, YcAuth as ReAuth, YcCard as ReCard, YcCol as ReCol, YcConfigProvider as ReConfigProvider, ReDialog, YcDownloadDialog as ReDownloadDialog, ReDrawer, ReFormContainerHeader, YcLineTree as ReLineTree, ReMoreActions, YcCountTo as ReNormalCountTo, YcPerms as RePerms, RePlusPage, RePlusTree, YcSegmented as ReSegmented, YcSelectV2 as ReSelectV2, YcStatusDialog as ReStatusDialog, YcSvgIcon as ReSvgIcon, YcTabsWithFilter as ReTabsWithFilter, YcText as ReText, YcReboundCountTo as ReboundCountTo, SIZE_MAP, STATUS_CONFIG_MAP, TableFormFieldRefInjectionKey, TableFormRefInjectionKey, TableFormRowInfoInjectionKey, ValueIsArrayList, ValueIsBooleanList, ValueIsNumberList, YC_CONFIG_KEY, YcAnimateSelector, YcAnimateSelectorWithInstall, YcAuth, YcAuthWithInstall, YcCard, YcCardWithInstall, YcCol, YcConfigProvider, YcCountTo, YcDialog, YcDownloadDialog, YcDownloadDialogWithInstall, YcDrawer, YcFlicker, YcFormContainerHeader, YcLineTree, YcLineTreeWithInstall, YcMoreActions, YcPerms, YcPermsWithInstall, YcPlusPage, YcPlusTree, YcReboundCountTo, YcReboundCountToWithInstall, YcSegmented, YcSegmentedWithInstall, YcSelectV2, YcStatusDialog, YcSvgIcon, YcTabsWithFilter, YcTabsWithFilterWithInstall, YcText, YcTextWithInstall, addDrawer, animates, closeAllDrawer, closeDrawer, installer as default, drawerStore, findNodeById, findNodeByPath, findNodePosition, insertAsChild, insertAsSibling, insertNodeAtPosition, install, providePlusProConfig, removeNode, reorderNodeChildren, reorderSiblingNodes, selectValueTypeList, updateDrawer, useDialogFormConfig, useDrawerFormConfig, useGetOptions, useLocale, usePlusFormReset, usePlusProConfig, useRenderFlicker, useRenderFlicker as useRenderReFlicker, useSelectWithMapping, useSelectWithPagination, useSortableDrag$1 as useSortableDrag, useTable, useYcAuth, useYcCdn, useYcCdnUrl, useYcComponentConfig, useYcConfig, useYcPerms, useYcShowPageSearch, useYcTranslate, version };
59822
+ export { DEFAULT_CDN_CONFIG, DEFAULT_YC_CONFIG, DatePickerValueIsArrayList, DefaultPageInfo, DefaultPageSizeList, DictStoreInjectionKey, PlusBreadcrumb, PlusCheckCard, PlusCheckCardGroup, PlusDatePicker, PlusDescriptions, PlusDialog, PlusDialogForm, PlusDisplayItem, PlusDrawerForm, PlusForm, PlusFormItem, PlusHeader, PlusInputTag, PlusLayout, PlusPage, PlusPagination, PlusPopover, PlusRadio, PlusSearch, PlusSidebar, PlusSidebarItem, PlusStepsForm, PlusTable, YcAnimateSelector as ReAnimateSelector, YcAuth as ReAuth, YcCard as ReCard, YcCol as ReCol, YcConfigProvider as ReConfigProvider, ReDialog, YcDownloadDialog as ReDownloadDialog, ReDrawer, ReFormContainerHeader, YcLineTree as ReLineTree, ReMoreActions, YcCountTo as ReNormalCountTo, YcPerms as RePerms, RePlusPage, RePlusTree, YcSegmented as ReSegmented, YcSelectV2 as ReSelectV2, YcStatusDialog as ReStatusDialog, YcSvgIcon as ReSvgIcon, YcTabsWithFilter as ReTabsWithFilter, YcText as ReText, YcReboundCountTo as ReboundCountTo, SIZE_MAP, STATUS_CONFIG_MAP, TableFormFieldRefInjectionKey, TableFormRefInjectionKey, TableFormRowInfoInjectionKey, ValueIsArrayList, ValueIsBooleanList, ValueIsNumberList, YC_CONFIG_KEY, YcAnimateSelector, YcAnimateSelectorWithInstall, YcAuth, YcAuthWithInstall, YcCard, YcCardWithInstall, YcCol, YcConfigProvider, YcCountTo, YcDialog, YcDownloadDialog, YcDownloadDialogWithInstall, YcDrawer, YcFlicker, YcFormContainerHeader, YcLineTree, YcLineTreeWithInstall, YcMoreActions, YcPerms, YcPermsWithInstall, YcPlusPage, YcPlusTree, YcReboundCountTo, YcReboundCountToWithInstall, YcSegmented, YcSegmentedWithInstall, YcSelectV2, YcStatusDialog, YcSvgIcon, YcTabsWithFilter, YcTabsWithFilterWithInstall, YcText, YcTextWithInstall, addDrawer, animates, closeAllDrawer, closeDrawer, installer as default, drawerStore, findNodeById, findNodeByPath, findNodePosition, insertAsChild, insertAsSibling, insertNodeAtPosition, install, providePlusProConfig, removeNode, reorderNodeChildren, reorderSiblingNodes, selectValueTypeList, updateDrawer, useDialogFormConfig, useDictInjection, useDrawerFormConfig, useGetOptions, useLocale, usePlusFormReset, usePlusProConfig, useRenderFlicker, useRenderFlicker as useRenderReFlicker, useSelectWithMapping, useSelectWithPagination, useSortableDrag$1 as useSortableDrag, useTable, useYcAuth, useYcCdn, useYcCdnUrl, useYcComponentConfig, useYcConfig, useYcPerms, useYcShowPageSearch, useYcTranslate, version };