yd-admin 0.1.11 → 0.1.13

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 (4) hide show
  1. package/README.md +21 -0
  2. package/dist/index.js +1016 -414
  3. package/dist/style.css +738 -360
  4. package/package.json +3 -1
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { Fragment, Teleport, Transition, computed, createApp, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, getCurrentInstance, guardReactiveProps, h, inject, isRef, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onMounted, onUnmounted, openBlock, provide, reactive, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, toDisplayString, unref, useCssVars, useSlots, vModelCheckbox, vModelDynamic, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
2
+ import { marked } from "marked";
3
+ import hljs from "highlight.js";
2
4
  import AsyncValidator from "async-validator";
3
5
  import { createI18n } from "vue-i18n";
4
6
  import { createMemoryHistory, createRouter as createVueRouter, createWebHashHistory, createWebHistory } from "vue-router";
@@ -657,11 +659,10 @@ var DynamicRouter = class {
657
659
  return result;
658
660
  }
659
661
  /**
660
- * 路径匹配
662
+ * 路径匹配 (复用 isPathMatch 函数)
661
663
  */
662
664
  matchPath(path, pattern) {
663
- if (typeof pattern === "string") return path === pattern || path.startsWith(pattern + "/");
664
- return pattern.test(path);
665
+ return isPathMatch(path, pattern);
665
666
  }
666
667
  /**
667
668
  * 查找路由名称
@@ -847,12 +848,12 @@ var export_helper_default = (sfc, props) => {
847
848
  };
848
849
  //#endregion
849
850
  //#region src/components/base/button/button.vue
850
- const _hoisted_1$57 = ["disabled", "type"];
851
- const _hoisted_2$37 = {
851
+ const _hoisted_1$58 = ["disabled", "type"];
852
+ const _hoisted_2$38 = {
852
853
  key: 0,
853
854
  class: "yd-button__loading"
854
855
  };
855
- const _hoisted_3$28 = { class: "yd-button__content" };
856
+ const _hoisted_3$29 = { class: "yd-button__content" };
856
857
  var button_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
857
858
  name: "YdButton",
858
859
  __name: "button",
@@ -897,7 +898,7 @@ var button_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
897
898
  disabled: __props.disabled || __props.loading,
898
899
  type: __props.nativeType,
899
900
  onClick: handleClick
900
- }, [__props.loading ? (openBlock(), createElementBlock("span", _hoisted_2$37, [..._cache[0] || (_cache[0] = [createElementVNode("svg", {
901
+ }, [__props.loading ? (openBlock(), createElementBlock("span", _hoisted_2$38, [..._cache[0] || (_cache[0] = [createElementVNode("svg", {
901
902
  class: "yd-button__spinner",
902
903
  viewBox: "0 0 24 24"
903
904
  }, [createElementVNode("circle", {
@@ -909,7 +910,7 @@ var button_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
909
910
  "stroke-width": "3",
910
911
  "stroke-dasharray": "31.4 31.4",
911
912
  "stroke-linecap": "round"
912
- })], -1)])])) : createCommentVNode("v-if", true), createElementVNode("span", _hoisted_3$28, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 10, _hoisted_1$57);
913
+ })], -1)])])) : createCommentVNode("v-if", true), createElementVNode("span", _hoisted_3$29, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 10, _hoisted_1$58);
913
914
  };
914
915
  }
915
916
  }), [["__scopeId", "data-v-08fa2dc1"]]);
@@ -942,7 +943,7 @@ function getIconRegistry() {
942
943
  }
943
944
  //#endregion
944
945
  //#region src/components/base/icon/icon.vue
945
- const _hoisted_1$56 = ["innerHTML"];
946
+ const _hoisted_1$57 = ["innerHTML"];
946
947
  var icon_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
947
948
  name: "YdIcon",
948
949
  inheritAttrs: false,
@@ -1003,13 +1004,13 @@ var icon_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
1003
1004
  fill: "none",
1004
1005
  xmlns: "http://www.w3.org/2000/svg",
1005
1006
  innerHTML: svgContent.value
1006
- }, null, 10, _hoisted_1$56)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Slot Fallback "), renderSlot(_ctx.$slots, "default", {}, void 0, true)], 2112))], 16);
1007
+ }, null, 10, _hoisted_1$57)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Slot Fallback "), renderSlot(_ctx.$slots, "default", {}, void 0, true)], 2112))], 16);
1007
1008
  };
1008
1009
  }
1009
1010
  }), [["__scopeId", "data-v-bb6b8302"]]);
1010
1011
  //#endregion
1011
1012
  //#region src/components/base/input/input.vue
1012
- const _hoisted_1$55 = [
1013
+ const _hoisted_1$56 = [
1013
1014
  "type",
1014
1015
  "value",
1015
1016
  "placeholder",
@@ -1118,7 +1119,7 @@ var input_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
1118
1119
  onFocus: handleFocus,
1119
1120
  onBlur: handleBlur,
1120
1121
  onKeydown: handleKeydown
1121
- }, null, 42, _hoisted_1$55),
1122
+ }, null, 42, _hoisted_1$56),
1122
1123
  __props.clearable && __props.modelValue && !__props.disabled ? (openBlock(), createElementBlock("span", {
1123
1124
  key: 1,
1124
1125
  class: normalizeClass(e("clear")),
@@ -1141,7 +1142,7 @@ var input_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
1141
1142
  }), [["__scopeId", "data-v-5c21184f"]]);
1142
1143
  //#endregion
1143
1144
  //#region src/components/base/textarea/textarea.vue
1144
- const _hoisted_1$54 = [
1145
+ const _hoisted_1$55 = [
1145
1146
  "value",
1146
1147
  "placeholder",
1147
1148
  "disabled",
@@ -1235,7 +1236,7 @@ var textarea_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
1235
1236
  onChange: handleChange,
1236
1237
  onFocus: handleFocus,
1237
1238
  onBlur: handleBlur
1238
- }, null, 42, _hoisted_1$54), __props.showWordLimit && __props.maxlength ? (openBlock(), createElementBlock("span", {
1239
+ }, null, 42, _hoisted_1$55), __props.showWordLimit && __props.maxlength ? (openBlock(), createElementBlock("span", {
1239
1240
  key: 0,
1240
1241
  class: normalizeClass(e("word-limit"))
1241
1242
  }, toDisplayString(String(__props.modelValue).length) + "/" + toDisplayString(__props.maxlength), 3)) : createCommentVNode("v-if", true)], 2);
@@ -1244,9 +1245,9 @@ var textarea_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
1244
1245
  }), [["__scopeId", "data-v-13af2da6"]]);
1245
1246
  //#endregion
1246
1247
  //#region src/components/base/input-number/input-number.vue
1247
- const _hoisted_1$53 = ["disabled"];
1248
- const _hoisted_2$36 = ["value", "disabled"];
1249
- const _hoisted_3$27 = ["disabled"];
1248
+ const _hoisted_1$54 = ["disabled"];
1249
+ const _hoisted_2$37 = ["value", "disabled"];
1250
+ const _hoisted_3$28 = ["disabled"];
1250
1251
  var input_number_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
1251
1252
  name: "YdInputNumber",
1252
1253
  __name: "input-number",
@@ -1341,7 +1342,7 @@ var input_number_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
1341
1342
  y1: "12",
1342
1343
  x2: "19",
1343
1344
  y2: "12"
1344
- })], -1)])], 10, _hoisted_1$53),
1345
+ })], -1)])], 10, _hoisted_1$54),
1345
1346
  createElementVNode("input", {
1346
1347
  ref_key: "inputRef",
1347
1348
  ref: inputRef,
@@ -1352,7 +1353,7 @@ var input_number_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
1352
1353
  onInput: handleInput,
1353
1354
  onBlur: handleBlur,
1354
1355
  onKeydown: handleKeydown
1355
- }, null, 42, _hoisted_2$36),
1356
+ }, null, 42, _hoisted_2$37),
1356
1357
  createElementVNode("button", {
1357
1358
  class: normalizeClass(e("btn")),
1358
1359
  disabled: __props.disabled || __props.modelValue >= __props.max,
@@ -1377,7 +1378,7 @@ var input_number_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
1377
1378
  y1: "12",
1378
1379
  x2: "19",
1379
1380
  y2: "12"
1380
- })], -1)])], 10, _hoisted_3$27)
1381
+ })], -1)])], 10, _hoisted_3$28)
1381
1382
  ], 2)], 2);
1382
1383
  };
1383
1384
  }
@@ -1429,13 +1430,13 @@ var empty_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
1429
1430
  }), [["__scopeId", "data-v-ed413d74"]]);
1430
1431
  //#endregion
1431
1432
  //#region src/components/base/select/select.vue
1432
- const _hoisted_1$52 = [
1433
+ const _hoisted_1$53 = [
1433
1434
  "value",
1434
1435
  "placeholder",
1435
1436
  "disabled"
1436
1437
  ];
1437
- const _hoisted_2$35 = ["onClick"];
1438
- const _hoisted_3$26 = ["onClick"];
1438
+ const _hoisted_2$36 = ["onClick"];
1439
+ const _hoisted_3$27 = ["onClick"];
1439
1440
  var select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
1440
1441
  name: "YdSelect",
1441
1442
  inheritAttrs: false,
@@ -1486,7 +1487,7 @@ var select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
1486
1487
  "blur",
1487
1488
  "search"
1488
1489
  ],
1489
- setup(__props, { emit: __emit }) {
1490
+ setup(__props, { expose: __expose, emit: __emit }) {
1490
1491
  const props = __props;
1491
1492
  const emit = __emit;
1492
1493
  const selectRef = ref();
@@ -1637,6 +1638,22 @@ var select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
1637
1638
  window.removeEventListener("scroll", handleWindowScroll, true);
1638
1639
  window.removeEventListener("resize", handleWindowResize);
1639
1640
  });
1641
+ __expose({
1642
+ focus: () => {
1643
+ (selectRef.value?.querySelector("input"))?.focus();
1644
+ },
1645
+ blur: () => {
1646
+ (selectRef.value?.querySelector("input"))?.blur();
1647
+ },
1648
+ getValue: () => props.modelValue,
1649
+ getLabel: () => selectedLabel.value,
1650
+ open: () => {
1651
+ visible.value = true;
1652
+ },
1653
+ close: () => {
1654
+ visible.value = false;
1655
+ }
1656
+ });
1640
1657
  return (_ctx, _cache) => {
1641
1658
  return openBlock(), createElementBlock("div", {
1642
1659
  ref_key: "selectRef",
@@ -1662,7 +1679,7 @@ var select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
1662
1679
  onFocus: handleFocus,
1663
1680
  onBlur: handleBlur,
1664
1681
  onKeydown: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"]))
1665
- }, null, 42, _hoisted_1$52)) : (openBlock(), createElementBlock("div", {
1682
+ }, null, 42, _hoisted_1$53)) : (openBlock(), createElementBlock("div", {
1666
1683
  key: 1,
1667
1684
  class: normalizeClass([e("display"), { [e("display--placeholder")]: !selectedLabel.value }])
1668
1685
  }, toDisplayString(selectedLabel.value || __props.placeholder), 3)),
@@ -1715,7 +1732,7 @@ var select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
1715
1732
  }, [createElementVNode("span", null, toDisplayString(opt.label), 1), isSelected(opt.value) ? (openBlock(), createElementBlock("span", {
1716
1733
  key: 0,
1717
1734
  class: normalizeClass(e("check"))
1718
- }, "✓", 2)) : createCommentVNode("v-if", true)], 10, _hoisted_2$35);
1735
+ }, "✓", 2)) : createCommentVNode("v-if", true)], 10, _hoisted_2$36);
1719
1736
  }), 128))], 2)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Option "), createElementVNode("div", {
1720
1737
  class: normalizeClass([e("option"), {
1721
1738
  [e("option--active")]: isSelected(option.value),
@@ -1725,17 +1742,17 @@ var select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
1725
1742
  }, [createElementVNode("span", null, toDisplayString(option.label), 1), isSelected(option.value) ? (openBlock(), createElementBlock("span", {
1726
1743
  key: 0,
1727
1744
  class: normalizeClass(e("check"))
1728
- }, "✓", 2)) : createCommentVNode("v-if", true)], 10, _hoisted_3$26)], 2112))], 64);
1745
+ }, "✓", 2)) : createCommentVNode("v-if", true)], 10, _hoisted_3$27)], 2112))], 64);
1729
1746
  }), 128))], 6))], 6)) : createCommentVNode("v-if", true)]),
1730
1747
  _: 1
1731
1748
  })]))
1732
1749
  ], 2);
1733
1750
  };
1734
1751
  }
1735
- }), [["__scopeId", "data-v-64b103da"]]);
1752
+ }), [["__scopeId", "data-v-8cade129"]]);
1736
1753
  //#endregion
1737
1754
  //#region src/components/base/switch/switch.vue
1738
- const _hoisted_1$51 = ["aria-checked", "disabled"];
1755
+ const _hoisted_1$52 = ["aria-checked", "disabled"];
1739
1756
  var switch_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
1740
1757
  name: "YdSwitch",
1741
1758
  __name: "switch",
@@ -1771,13 +1788,13 @@ var switch_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
1771
1788
  class: normalizeClass(switchClasses.value),
1772
1789
  disabled: __props.disabled,
1773
1790
  onClick: toggle
1774
- }, [createElementVNode("span", { class: normalizeClass(e("thumb")) }, null, 2)], 10, _hoisted_1$51);
1791
+ }, [createElementVNode("span", { class: normalizeClass(e("thumb")) }, null, 2)], 10, _hoisted_1$52);
1775
1792
  };
1776
1793
  }
1777
1794
  }), [["__scopeId", "data-v-178da0de"]]);
1778
1795
  //#endregion
1779
1796
  //#region src/components/base/checkbox/checkbox.vue
1780
- const _hoisted_1$50 = [
1797
+ const _hoisted_1$51 = [
1781
1798
  "checked",
1782
1799
  "disabled",
1783
1800
  "value"
@@ -1830,7 +1847,7 @@ var checkbox_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
1830
1847
  disabled: __props.disabled,
1831
1848
  value: __props.value,
1832
1849
  onChange: handleChange
1833
- }, null, 42, _hoisted_1$50),
1850
+ }, null, 42, _hoisted_1$51),
1834
1851
  createElementVNode("span", { class: normalizeClass(e("box")) }, [__props.modelValue ? (openBlock(), createElementBlock("svg", {
1835
1852
  key: 0,
1836
1853
  class: normalizeClass(e("icon")),
@@ -1897,7 +1914,7 @@ var checkbox_group_default = /* @__PURE__ */ export_helper_default(/* @__PURE__
1897
1914
  }), [["__scopeId", "data-v-3dce3e2c"]]);
1898
1915
  //#endregion
1899
1916
  //#region src/components/base/radio/radio.vue
1900
- const _hoisted_1$49 = [
1917
+ const _hoisted_1$50 = [
1901
1918
  "checked",
1902
1919
  "disabled",
1903
1920
  "value",
@@ -1953,7 +1970,7 @@ var radio_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
1953
1970
  value: __props.value,
1954
1971
  name: __props.name,
1955
1972
  onChange: handleChange
1956
- }, null, 42, _hoisted_1$49),
1973
+ }, null, 42, _hoisted_1$50),
1957
1974
  createElementVNode("span", { class: normalizeClass(e("dot")) }, null, 2),
1958
1975
  _ctx.$slots.default || __props.label ? (openBlock(), createElementBlock("span", {
1959
1976
  key: 0,
@@ -2073,7 +2090,7 @@ var tag_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineCo
2073
2090
  }), [["__scopeId", "data-v-ae4235fd"]]);
2074
2091
  //#endregion
2075
2092
  //#region src/components/base/avatar/avatar.vue
2076
- const _hoisted_1$48 = ["src", "alt"];
2093
+ const _hoisted_1$49 = ["src", "alt"];
2077
2094
  var avatar_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
2078
2095
  name: "YdAvatar",
2079
2096
  __name: "avatar",
@@ -2101,7 +2118,7 @@ var avatar_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
2101
2118
  src: __props.src,
2102
2119
  alt: __props.alt,
2103
2120
  onError: handleError
2104
- }, null, 40, _hoisted_1$48)) : _ctx.$slots.default ? (openBlock(), createElementBlock("span", {
2121
+ }, null, 40, _hoisted_1$49)) : _ctx.$slots.default ? (openBlock(), createElementBlock("span", {
2105
2122
  key: 1,
2106
2123
  class: normalizeClass(e("text"))
2107
2124
  }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 2)) : (openBlock(), createElementBlock("span", {
@@ -2161,7 +2178,7 @@ var badge_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
2161
2178
  }), [["__scopeId", "data-v-9b63f1ae"]]);
2162
2179
  //#endregion
2163
2180
  //#region src/components/base/rate/rate.vue
2164
- const _hoisted_1$47 = ["onClick", "onMouseenter"];
2181
+ const _hoisted_1$48 = ["onClick", "onMouseenter"];
2165
2182
  var rate_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
2166
2183
  name: "YdRate",
2167
2184
  __name: "rate",
@@ -2226,7 +2243,7 @@ var rate_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
2226
2243
  viewBox: "0 0 24 24",
2227
2244
  fill: "currentColor",
2228
2245
  stroke: "none"
2229
- }, [..._cache[1] || (_cache[1] = [createElementVNode("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" }, null, -1)])], 2))], 42, _hoisted_1$47);
2246
+ }, [..._cache[1] || (_cache[1] = [createElementVNode("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" }, null, -1)])], 2))], 42, _hoisted_1$48);
2230
2247
  }), 128)), __props.showText ? (openBlock(), createElementBlock("span", {
2231
2248
  key: 0,
2232
2249
  class: normalizeClass(e("text"))
@@ -2315,14 +2332,14 @@ var slider_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
2315
2332
  }), [["__scopeId", "data-v-51e82523"]]);
2316
2333
  //#endregion
2317
2334
  //#region src/components/base/date-picker/date-picker.vue
2318
- const _hoisted_1$46 = [
2335
+ const _hoisted_1$47 = [
2319
2336
  "value",
2320
2337
  "placeholder",
2321
2338
  "disabled"
2322
2339
  ];
2323
- const _hoisted_2$34 = ["onClick"];
2324
- const _hoisted_3$25 = ["onClick"];
2325
- const _hoisted_4$23 = ["disabled", "onClick"];
2340
+ const _hoisted_2$35 = ["onClick"];
2341
+ const _hoisted_3$26 = ["onClick"];
2342
+ const _hoisted_4$24 = ["disabled", "onClick"];
2326
2343
  var date_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
2327
2344
  name: "YdDatePicker",
2328
2345
  __name: "date-picker",
@@ -2336,7 +2353,7 @@ var date_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2336
2353
  type: { default: "date" }
2337
2354
  },
2338
2355
  emits: ["update:modelValue", "change"],
2339
- setup(__props, { emit: __emit }) {
2356
+ setup(__props, { expose: __expose, emit: __emit }) {
2340
2357
  const props = __props;
2341
2358
  const emit = __emit;
2342
2359
  const visible = ref(false);
@@ -2513,6 +2530,17 @@ var date_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2513
2530
  document.removeEventListener("click", handleClickOutside);
2514
2531
  window.removeEventListener("scroll", debouncedScrollHandler, true);
2515
2532
  });
2533
+ __expose({
2534
+ open: () => {
2535
+ visible.value = true;
2536
+ },
2537
+ close: () => {
2538
+ visible.value = false;
2539
+ },
2540
+ focus: () => {
2541
+ triggerRef.value?.querySelector("input")?.focus();
2542
+ }
2543
+ });
2516
2544
  return (_ctx, _cache) => {
2517
2545
  return openBlock(), createElementBlock("div", {
2518
2546
  class: normalizeClass(unref(cn)("yd-date-picker")),
@@ -2526,7 +2554,7 @@ var date_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2526
2554
  disabled: __props.disabled,
2527
2555
  readonly: "",
2528
2556
  onClick: withModifiers(togglePicker, ["stop"])
2529
- }, null, 10, _hoisted_1$46),
2557
+ }, null, 10, _hoisted_1$47),
2530
2558
  createElementVNode("span", {
2531
2559
  class: normalizeClass(e("icon")),
2532
2560
  onClick: withModifiers(togglePicker, ["stop"])
@@ -2550,13 +2578,13 @@ var date_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2550
2578
  key: y,
2551
2579
  class: normalizeClass([e("year"), { [e("year--selected")]: selectedYear.value === y }]),
2552
2580
  onClick: withModifiers(($event) => selectYear(y), ["stop"])
2553
- }, toDisplayString(y), 11, _hoisted_2$34);
2581
+ }, toDisplayString(y), 11, _hoisted_2$35);
2554
2582
  }), 128))], 2)], 2)) : view.value === "month" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Month selection "), createElementVNode("div", { class: normalizeClass(e("view")) }, [createElementVNode("div", { class: normalizeClass(e("view-header")) }, [createElementVNode("button", { onClick: _cache[0] || (_cache[0] = withModifiers(($event) => view.value = "year", ["stop"])) }, toDisplayString(selectedYear.value), 1)], 2), createElementVNode("div", { class: normalizeClass(e("months")) }, [(openBlock(), createElementBlock(Fragment, null, renderList(months, (m, i) => {
2555
2583
  return createElementVNode("button", {
2556
2584
  key: i,
2557
2585
  class: normalizeClass([e("month"), { [e("month--selected")]: selectedMonth.value === i }]),
2558
2586
  onClick: withModifiers(($event) => selectMonth(i), ["stop"])
2559
- }, toDisplayString(m), 11, _hoisted_3$25);
2587
+ }, toDisplayString(m), 11, _hoisted_3$26);
2560
2588
  }), 64))], 2)], 2)], 2112)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" Date selection "), createElementVNode("div", { class: normalizeClass(e("view")) }, [
2561
2589
  createElementVNode("div", { class: normalizeClass(e("header")) }, [
2562
2590
  createElementVNode("button", { onClick: withModifiers(prevMonth, ["stop"]) }, "‹"),
@@ -2587,21 +2615,21 @@ var date_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2587
2615
  }]),
2588
2616
  disabled: !day.current,
2589
2617
  onClick: withModifiers(($event) => selectDate(day), ["stop"])
2590
- }, toDisplayString(day.date.getDate()), 11, _hoisted_4$23);
2618
+ }, toDisplayString(day.date.getDate()), 11, _hoisted_4$24);
2591
2619
  }), 128))], 2)
2592
2620
  ], 2)], 2112))], 38)) : createCommentVNode("v-if", true)]))
2593
2621
  ], 2);
2594
2622
  };
2595
2623
  }
2596
- }), [["__scopeId", "data-v-6e664fd9"]]);
2624
+ }), [["__scopeId", "data-v-23f9364e"]]);
2597
2625
  //#endregion
2598
2626
  //#region src/components/base/date-picker/date-range-picker.vue
2599
- const _hoisted_1$45 = [
2627
+ const _hoisted_1$46 = [
2600
2628
  "value",
2601
2629
  "placeholder",
2602
2630
  "disabled"
2603
2631
  ];
2604
- const _hoisted_2$33 = [
2632
+ const _hoisted_2$34 = [
2605
2633
  "disabled",
2606
2634
  "onClick",
2607
2635
  "onMouseenter"
@@ -2767,7 +2795,7 @@ var date_range_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE
2767
2795
  placeholder: __props.placeholder,
2768
2796
  disabled: __props.disabled,
2769
2797
  readonly: ""
2770
- }, null, 10, _hoisted_1$45),
2798
+ }, null, 10, _hoisted_1$46),
2771
2799
  createElementVNode("span", { class: normalizeClass(e("icon")) }, "📅", 2),
2772
2800
  (openBlock(), createBlock(Teleport, { to: "body" }, [visible.value ? (openBlock(), createElementBlock("div", {
2773
2801
  key: 0,
@@ -2805,7 +2833,7 @@ var date_range_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE
2805
2833
  onClick: withModifiers(($event) => selectDate(day), ["stop"]),
2806
2834
  onMouseenter: ($event) => hoverDate.value = formatDate(day.date),
2807
2835
  onMouseleave: _cache[0] || (_cache[0] = ($event) => hoverDate.value = "")
2808
- }, toDisplayString(day.date.getDate()), 43, _hoisted_2$33);
2836
+ }, toDisplayString(day.date.getDate()), 43, _hoisted_2$34);
2809
2837
  }), 128))], 2)
2810
2838
  ], 6)) : createCommentVNode("v-if", true)]))
2811
2839
  ], 2);
@@ -2814,14 +2842,14 @@ var date_range_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE
2814
2842
  }), [["__scopeId", "data-v-c307df48"]]);
2815
2843
  //#endregion
2816
2844
  //#region src/components/base/time-picker/time-picker.vue
2817
- const _hoisted_1$44 = [
2845
+ const _hoisted_1$45 = [
2818
2846
  "value",
2819
2847
  "placeholder",
2820
2848
  "disabled"
2821
2849
  ];
2822
- const _hoisted_2$32 = ["onClick"];
2823
- const _hoisted_3$24 = ["onClick"];
2824
- const _hoisted_4$22 = ["onClick"];
2850
+ const _hoisted_2$33 = ["onClick"];
2851
+ const _hoisted_3$25 = ["onClick"];
2852
+ const _hoisted_4$23 = ["onClick"];
2825
2853
  var time_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
2826
2854
  name: "YdTimePicker",
2827
2855
  __name: "time-picker",
@@ -2898,7 +2926,7 @@ var time_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2898
2926
  placeholder: __props.placeholder,
2899
2927
  disabled: __props.disabled,
2900
2928
  readonly: ""
2901
- }, null, 10, _hoisted_1$44), (openBlock(), createBlock(Teleport, { to: "body" }, [visible.value ? (openBlock(), createElementBlock("div", {
2929
+ }, null, 10, _hoisted_1$45), (openBlock(), createBlock(Teleport, { to: "body" }, [visible.value ? (openBlock(), createElementBlock("div", {
2902
2930
  key: 0,
2903
2931
  class: normalizeClass(e("panel")),
2904
2932
  style: normalizeStyle(panelStyle.value)
@@ -2908,14 +2936,14 @@ var time_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2908
2936
  key: h - 1,
2909
2937
  class: normalizeClass([e("item"), { [e("item--active")]: selectedHour.value === h - 1 }]),
2910
2938
  onClick: ($event) => selectHour(h - 1)
2911
- }, toDisplayString(String(h - 1).padStart(2, "0")), 11, _hoisted_2$32);
2939
+ }, toDisplayString(String(h - 1).padStart(2, "0")), 11, _hoisted_2$33);
2912
2940
  }), 64))], 2),
2913
2941
  createElementVNode("div", { class: normalizeClass(e("column")) }, [(openBlock(), createElementBlock(Fragment, null, renderList(60, (m) => {
2914
2942
  return createElementVNode("div", {
2915
2943
  key: m - 1,
2916
2944
  class: normalizeClass([e("item"), { [e("item--active")]: selectedMinute.value === m - 1 }]),
2917
2945
  onClick: ($event) => selectMinute(m - 1)
2918
- }, toDisplayString(String(m - 1).padStart(2, "0")), 11, _hoisted_3$24);
2946
+ }, toDisplayString(String(m - 1).padStart(2, "0")), 11, _hoisted_3$25);
2919
2947
  }), 64))], 2),
2920
2948
  __props.showSeconds ? (openBlock(), createElementBlock("div", {
2921
2949
  key: 0,
@@ -2925,7 +2953,7 @@ var time_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2925
2953
  key: s - 1,
2926
2954
  class: normalizeClass([e("item"), { [e("item--active")]: selectedSecond.value === s - 1 }]),
2927
2955
  onClick: ($event) => selectSecond(s - 1)
2928
- }, toDisplayString(String(s - 1).padStart(2, "0")), 11, _hoisted_4$22);
2956
+ }, toDisplayString(String(s - 1).padStart(2, "0")), 11, _hoisted_4$23);
2929
2957
  }), 64))], 2)) : createCommentVNode("v-if", true)
2930
2958
  ], 2)], 6)) : createCommentVNode("v-if", true)]))], 2);
2931
2959
  };
@@ -2933,15 +2961,15 @@ var time_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
2933
2961
  }), [["__scopeId", "data-v-a6fe401a"]]);
2934
2962
  //#endregion
2935
2963
  //#region src/components/base/cascader/cascader.vue
2936
- const _hoisted_1$43 = [
2964
+ const _hoisted_1$44 = [
2937
2965
  "value",
2938
2966
  "placeholder",
2939
2967
  "disabled",
2940
2968
  "readonly"
2941
2969
  ];
2942
- const _hoisted_2$31 = ["onClick"];
2943
- const _hoisted_3$23 = ["onClick"];
2944
- const _hoisted_4$21 = ["onClick"];
2970
+ const _hoisted_2$32 = ["onClick"];
2971
+ const _hoisted_3$24 = ["onClick"];
2972
+ const _hoisted_4$22 = ["onClick"];
2945
2973
  var cascader_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
2946
2974
  name: "YdCascader",
2947
2975
  __name: "cascader",
@@ -3154,7 +3182,7 @@ var cascader_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
3154
3182
  onInput: handleSearch,
3155
3183
  onFocus: handleFocus,
3156
3184
  onBlur: handleBlur
3157
- }, null, 42, _hoisted_1$43), (openBlock(), createBlock(Teleport, { to: "body" }, [visible.value ? (openBlock(), createElementBlock("div", {
3185
+ }, null, 42, _hoisted_1$44), (openBlock(), createBlock(Teleport, { to: "body" }, [visible.value ? (openBlock(), createElementBlock("div", {
3158
3186
  key: 0,
3159
3187
  class: normalizeClass(e("dropdown")),
3160
3188
  style: normalizeStyle(dropdownStyle.value),
@@ -3177,7 +3205,7 @@ var cascader_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
3177
3205
  }), 128)), __props.multiple ? (openBlock(), createElementBlock("span", {
3178
3206
  key: 0,
3179
3207
  class: normalizeClass(e("checkmark"))
3180
- }, toDisplayString(isPathSelected(item.path) ? "✓" : ""), 3)) : createCommentVNode("v-if", true)], 10, _hoisted_2$31);
3208
+ }, toDisplayString(isPathSelected(item.path) ? "✓" : ""), 3)) : createCommentVNode("v-if", true)], 10, _hoisted_2$32);
3181
3209
  }), 128)), searchResults.value.length === 0 ? (openBlock(), createElementBlock("div", {
3182
3210
  key: 0,
3183
3211
  class: normalizeClass(e("empty"))
@@ -3189,7 +3217,7 @@ var cascader_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
3189
3217
  }, [createTextVNode(toDisplayString(option.label) + " ", 1), option.children?.length ? (openBlock(), createElementBlock("span", {
3190
3218
  key: 0,
3191
3219
  class: normalizeClass(e("arrow"))
3192
- }, "›", 2)) : createCommentVNode("v-if", true)], 10, _hoisted_3$23);
3220
+ }, "›", 2)) : createCommentVNode("v-if", true)], 10, _hoisted_3$24);
3193
3221
  }), 128))], 2), (openBlock(true), createElementBlock(Fragment, null, renderList(activePath.value.length, (level) => {
3194
3222
  return openBlock(), createElementBlock(Fragment, { key: level }, [activePath.value[level - 1]?.children?.length ? (openBlock(), createElementBlock("div", {
3195
3223
  key: 0,
@@ -3202,7 +3230,7 @@ var cascader_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
3202
3230
  }, [createTextVNode(toDisplayString(option.label) + " ", 1), option.children?.length ? (openBlock(), createElementBlock("span", {
3203
3231
  key: 0,
3204
3232
  class: normalizeClass(e("arrow"))
3205
- }, "›", 2)) : createCommentVNode("v-if", true)], 10, _hoisted_4$21);
3233
+ }, "›", 2)) : createCommentVNode("v-if", true)], 10, _hoisted_4$22);
3206
3234
  }), 128))], 2)) : createCommentVNode("v-if", true)], 64);
3207
3235
  }), 128))], 2)], 2112))], 38)) : createCommentVNode("v-if", true)]))], 2);
3208
3236
  };
@@ -3210,7 +3238,7 @@ var cascader_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
3210
3238
  }), [["__scopeId", "data-v-01225c10"]]);
3211
3239
  //#endregion
3212
3240
  //#region src/components/base/auto-complete/auto-complete.vue
3213
- const _hoisted_1$42 = ["onClick", "onMouseenter"];
3241
+ const _hoisted_1$43 = ["onClick", "onMouseenter"];
3214
3242
  var auto_complete_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
3215
3243
  name: "YdAutoComplete",
3216
3244
  __name: "auto-complete",
@@ -3294,15 +3322,15 @@ var auto_complete_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ *
3294
3322
  class: normalizeClass([e("option"), { [e("option--active")]: index === activeIndex.value }]),
3295
3323
  onClick: ($event) => selectOption(option),
3296
3324
  onMouseenter: ($event) => activeIndex.value = index
3297
- }, toDisplayString(option.label), 43, _hoisted_1$42);
3325
+ }, toDisplayString(option.label), 43, _hoisted_1$43);
3298
3326
  }), 128))], 6)) : createCommentVNode("v-if", true)]))], 2);
3299
3327
  };
3300
3328
  }
3301
3329
  }), [["__scopeId", "data-v-0251e526"]]);
3302
3330
  //#endregion
3303
3331
  //#region src/components/base/transfer/transfer.vue
3304
- const _hoisted_1$41 = ["onClick"];
3305
- const _hoisted_2$30 = ["onClick"];
3332
+ const _hoisted_1$42 = ["onClick"];
3333
+ const _hoisted_2$31 = ["onClick"];
3306
3334
  var transfer_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
3307
3335
  name: "YdTransfer",
3308
3336
  __name: "transfer",
@@ -3377,7 +3405,7 @@ var transfer_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
3377
3405
  "model-value",
3378
3406
  "disabled",
3379
3407
  "onChange"
3380
- ])], 10, _hoisted_1$41);
3408
+ ])], 10, _hoisted_1$42);
3381
3409
  }), 128)), sourceOptions.value.length === 0 ? (openBlock(), createBlock(empty_default, {
3382
3410
  key: 0,
3383
3411
  description: "暂无数据"
@@ -3425,7 +3453,7 @@ var transfer_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
3425
3453
  "model-value",
3426
3454
  "disabled",
3427
3455
  "onChange"
3428
- ])], 10, _hoisted_2$30);
3456
+ ])], 10, _hoisted_2$31);
3429
3457
  }), 128)), targetOptions.value.length === 0 ? (openBlock(), createBlock(empty_default, {
3430
3458
  key: 0,
3431
3459
  description: "暂无数据"
@@ -3436,7 +3464,7 @@ var transfer_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
3436
3464
  }), [["__scopeId", "data-v-a2e1ecd2"]]);
3437
3465
  //#endregion
3438
3466
  //#region src/components/feedback/spin/spin.vue
3439
- const _hoisted_1$40 = ["width", "height"];
3467
+ const _hoisted_1$41 = ["width", "height"];
3440
3468
  var spin_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
3441
3469
  name: "YdSpin",
3442
3470
  __name: "spin",
@@ -3474,7 +3502,7 @@ var spin_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
3474
3502
  "stroke-width": "2",
3475
3503
  "stroke-linecap": "round",
3476
3504
  "stroke-linejoin": "round"
3477
- }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }, null, -1)])], 8, _hoisted_1$40))], true)], 6), _ctx.$slots.default || __props.tip ? (openBlock(), createElementBlock("div", {
3505
+ }, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }, null, -1)])], 8, _hoisted_1$41))], true)], 6), _ctx.$slots.default || __props.tip ? (openBlock(), createElementBlock("div", {
3478
3506
  key: 0,
3479
3507
  class: normalizeClass(e("text"))
3480
3508
  }, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.tip), 1)], true)], 2)) : createCommentVNode("v-if", true)], 2);
@@ -3483,8 +3511,8 @@ var spin_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
3483
3511
  }), [["__scopeId", "data-v-f72fb3d9"]]);
3484
3512
  //#endregion
3485
3513
  //#region src/components/base/upload/upload.vue
3486
- const _hoisted_1$39 = ["onClick"];
3487
- const _hoisted_2$29 = [
3514
+ const _hoisted_1$40 = ["onClick"];
3515
+ const _hoisted_2$30 = [
3488
3516
  "multiple",
3489
3517
  "accept",
3490
3518
  "disabled"
@@ -3514,7 +3542,7 @@ var upload_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
3514
3542
  "remove",
3515
3543
  "exceed"
3516
3544
  ],
3517
- setup(__props, { emit: __emit }) {
3545
+ setup(__props, { expose: __expose, emit: __emit }) {
3518
3546
  const props = __props;
3519
3547
  const emit = __emit;
3520
3548
  const inputRef = ref();
@@ -3593,6 +3621,14 @@ var upload_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
3593
3621
  emit("update:fileList", newFileList);
3594
3622
  emit("remove", file, newFileList);
3595
3623
  }
3624
+ __expose({
3625
+ triggerBrowse: () => {
3626
+ inputRef.value?.click();
3627
+ },
3628
+ clearFiles: () => {
3629
+ emit("update:fileList", []);
3630
+ }
3631
+ });
3596
3632
  return (_ctx, _cache) => {
3597
3633
  return openBlock(), createElementBlock("div", { class: normalizeClass(unref(cn)("yd-upload")) }, [
3598
3634
  createElementVNode("div", { class: normalizeClass(e("list")) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.fileList, (file, index) => {
@@ -3616,7 +3652,7 @@ var upload_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
3616
3652
  key: 3,
3617
3653
  class: normalizeClass(e("file-remove")),
3618
3654
  onClick: ($event) => handleRemove(index)
3619
- }, "✕", 10, _hoisted_1$39)) : createCommentVNode("v-if", true)
3655
+ }, "✕", 10, _hoisted_1$40)) : createCommentVNode("v-if", true)
3620
3656
  ], 2);
3621
3657
  }), 128))], 2),
3622
3658
  createElementVNode("div", {
@@ -3637,7 +3673,7 @@ var upload_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
3637
3673
  disabled: __props.disabled,
3638
3674
  hidden: "",
3639
3675
  onChange: handleFileChange
3640
- }, null, 40, _hoisted_2$29), renderSlot(_ctx.$slots, "default", {}, () => [createElementVNode("div", { class: normalizeClass(e("trigger-content")) }, [_cache[2] || (_cache[2] = createElementVNode("svg", {
3676
+ }, null, 40, _hoisted_2$30), renderSlot(_ctx.$slots, "default", {}, () => [createElementVNode("div", { class: normalizeClass(e("trigger-content")) }, [_cache[2] || (_cache[2] = createElementVNode("svg", {
3641
3677
  xmlns: "http://www.w3.org/2000/svg",
3642
3678
  width: "32",
3643
3679
  height: "32",
@@ -3664,11 +3700,11 @@ var upload_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
3664
3700
  ], 2);
3665
3701
  };
3666
3702
  }
3667
- }), [["__scopeId", "data-v-30cb3c39"]]);
3703
+ }), [["__scopeId", "data-v-6c5ae5fc"]]);
3668
3704
  //#endregion
3669
3705
  //#region src/components/base/captcha/captcha.vue
3670
- const _hoisted_1$38 = ["width", "height"];
3671
- const _hoisted_2$28 = [
3706
+ const _hoisted_1$39 = ["width", "height"];
3707
+ const _hoisted_2$29 = [
3672
3708
  "src",
3673
3709
  "alt",
3674
3710
  "width",
@@ -3786,26 +3822,26 @@ var captcha_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defi
3786
3822
  class: normalizeClass(e("canvas")),
3787
3823
  width: __props.width,
3788
3824
  height: __props.height
3789
- }, null, 10, _hoisted_1$38)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" 后端提供的图片验证码 "), createElementVNode("img", {
3825
+ }, null, 10, _hoisted_1$39)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" 后端提供的图片验证码 "), createElementVNode("img", {
3790
3826
  class: normalizeClass(e("image")),
3791
3827
  src: __props.src,
3792
3828
  alt: __props.code || "验证码",
3793
3829
  width: __props.width,
3794
3830
  height: __props.height
3795
- }, null, 10, _hoisted_2$28)], 2112))], 2);
3831
+ }, null, 10, _hoisted_2$29)], 2112))], 2);
3796
3832
  };
3797
3833
  }
3798
3834
  }), [["__scopeId", "data-v-0ad64f93"]]);
3799
3835
  //#endregion
3800
3836
  //#region src/components/base/login/login.vue
3801
- const _hoisted_1$37 = ["onClick"];
3802
- const _hoisted_2$27 = ["placeholder"];
3803
- const _hoisted_3$22 = ["type", "placeholder"];
3804
- const _hoisted_4$20 = ["placeholder"];
3805
- const _hoisted_5$14 = ["placeholder"];
3806
- const _hoisted_6$13 = ["placeholder"];
3807
- const _hoisted_7$12 = ["disabled"];
3808
- const _hoisted_8$11 = ["placeholder"];
3837
+ const _hoisted_1$38 = ["onClick"];
3838
+ const _hoisted_2$28 = ["placeholder"];
3839
+ const _hoisted_3$23 = ["type", "placeholder"];
3840
+ const _hoisted_4$21 = ["placeholder"];
3841
+ const _hoisted_5$15 = ["placeholder"];
3842
+ const _hoisted_6$14 = ["placeholder"];
3843
+ const _hoisted_7$13 = ["disabled"];
3844
+ const _hoisted_8$12 = ["placeholder"];
3809
3845
  const _hoisted_9$11 = ["disabled"];
3810
3846
  const _hoisted_10$10 = ["title", "onClick"];
3811
3847
  var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
@@ -4037,7 +4073,7 @@ var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
4037
4073
  key: tab.key,
4038
4074
  class: normalizeClass([e("tab"), { [e("tab--active")]: activeTab.value === tab.key }]),
4039
4075
  onClick: ($event) => activeTab.value = tab.key
4040
- }, toDisplayString(tab.label), 11, _hoisted_1$37);
4076
+ }, toDisplayString(tab.label), 11, _hoisted_1$38);
4041
4077
  }), 128))], 2)) : createCommentVNode("v-if", true),
4042
4078
  createElementVNode("form", {
4043
4079
  class: normalizeClass(e("form")),
@@ -4050,7 +4086,7 @@ var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
4050
4086
  class: normalizeClass(e("input")),
4051
4087
  placeholder: __props.usernamePlaceholder,
4052
4088
  autocomplete: "username"
4053
- }, null, 10, _hoisted_2$27), [[vModelText, formData.username]])], 2)], 2),
4089
+ }, null, 10, _hoisted_2$28), [[vModelText, formData.username]])], 2)], 2),
4054
4090
  createElementVNode("div", { class: normalizeClass(e("field")) }, [createElementVNode("div", { class: normalizeClass(e("input-wrapper")) }, [
4055
4091
  createElementVNode("span", { class: normalizeClass(e("input-icon")) }, "🔒", 2),
4056
4092
  withDirectives(createElementVNode("input", {
@@ -4059,7 +4095,7 @@ var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
4059
4095
  class: normalizeClass(e("input")),
4060
4096
  placeholder: __props.passwordPlaceholder,
4061
4097
  autocomplete: "current-password"
4062
- }, null, 10, _hoisted_3$22), [[vModelDynamic, formData.password]]),
4098
+ }, null, 10, _hoisted_3$23), [[vModelDynamic, formData.password]]),
4063
4099
  createElementVNode("button", {
4064
4100
  type: "button",
4065
4101
  class: normalizeClass(e("toggle-pwd")),
@@ -4079,7 +4115,7 @@ var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
4079
4115
  type: "text",
4080
4116
  maxlength: "4",
4081
4117
  autocomplete: "off"
4082
- }, null, 10, _hoisted_4$20), [[vModelText, formData.captchaCode]])], 2), (openBlock(), createBlock(captcha_default, {
4118
+ }, null, 10, _hoisted_4$21), [[vModelText, formData.captchaCode]])], 2), (openBlock(), createBlock(captcha_default, {
4083
4119
  class: normalizeClass(e("captcha-img")),
4084
4120
  src: __props.captchaSrc,
4085
4121
  code: captchaCode.value,
@@ -4117,7 +4153,7 @@ var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
4117
4153
  type: "tel",
4118
4154
  maxlength: "11",
4119
4155
  autocomplete: "tel"
4120
- }, null, 10, _hoisted_5$14), [[vModelText, formData.phone]])], 2)], 2),
4156
+ }, null, 10, _hoisted_5$15), [[vModelText, formData.phone]])], 2)], 2),
4121
4157
  createElementVNode("div", { class: normalizeClass(e("field")) }, [createElementVNode("div", { class: normalizeClass(e("input-wrapper")) }, [
4122
4158
  createElementVNode("span", { class: normalizeClass(e("input-icon")) }, "🔑", 2),
4123
4159
  withDirectives(createElementVNode("input", {
@@ -4127,13 +4163,13 @@ var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
4127
4163
  type: "text",
4128
4164
  maxlength: "6",
4129
4165
  autocomplete: "one-time-code"
4130
- }, null, 10, _hoisted_6$13), [[vModelText, formData.code]]),
4166
+ }, null, 10, _hoisted_6$14), [[vModelText, formData.code]]),
4131
4167
  createElementVNode("button", {
4132
4168
  type: "button",
4133
4169
  class: normalizeClass([e("send-code"), { [e("send-code--disabled")]: countdown.value > 0 }]),
4134
4170
  disabled: countdown.value > 0,
4135
4171
  onClick: handleSendCode
4136
- }, toDisplayString(countdown.value > 0 ? `${countdown.value}s` : __props.sendCodeText), 11, _hoisted_7$12)
4172
+ }, toDisplayString(countdown.value > 0 ? `${countdown.value}s` : __props.sendCodeText), 11, _hoisted_7$13)
4137
4173
  ], 2)], 2),
4138
4174
  __props.showCaptcha ? (openBlock(), createElementBlock("div", {
4139
4175
  key: 0,
@@ -4148,7 +4184,7 @@ var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
4148
4184
  type: "text",
4149
4185
  maxlength: "4",
4150
4186
  autocomplete: "off"
4151
- }, null, 10, _hoisted_8$11), [[vModelText, formData.captchaCode]])], 2), (openBlock(), createBlock(captcha_default, {
4187
+ }, null, 10, _hoisted_8$12), [[vModelText, formData.captchaCode]])], 2), (openBlock(), createBlock(captcha_default, {
4152
4188
  class: normalizeClass(e("captcha-img")),
4153
4189
  src: __props.captchaSrc,
4154
4190
  code: captchaCode.value,
@@ -4212,11 +4248,11 @@ var login_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
4212
4248
  }), [["__scopeId", "data-v-6981722d"]]);
4213
4249
  //#endregion
4214
4250
  //#region src/components/base/login/login-centered.vue
4215
- const _hoisted_1$36 = ["fill"];
4216
- const _hoisted_2$26 = ["onClick"];
4217
- const _hoisted_3$21 = ["placeholder"];
4218
- const _hoisted_4$19 = ["type", "placeholder"];
4219
- const _hoisted_5$13 = {
4251
+ const _hoisted_1$37 = ["fill"];
4252
+ const _hoisted_2$27 = ["onClick"];
4253
+ const _hoisted_3$22 = ["placeholder"];
4254
+ const _hoisted_4$20 = ["type", "placeholder"];
4255
+ const _hoisted_5$14 = {
4220
4256
  key: 0,
4221
4257
  width: "18",
4222
4258
  height: "18",
@@ -4225,7 +4261,7 @@ const _hoisted_5$13 = {
4225
4261
  stroke: "currentColor",
4226
4262
  "stroke-width": "2"
4227
4263
  };
4228
- const _hoisted_6$12 = {
4264
+ const _hoisted_6$13 = {
4229
4265
  key: 1,
4230
4266
  width: "18",
4231
4267
  height: "18",
@@ -4234,8 +4270,8 @@ const _hoisted_6$12 = {
4234
4270
  stroke: "currentColor",
4235
4271
  "stroke-width": "2"
4236
4272
  };
4237
- const _hoisted_7$11 = ["placeholder"];
4238
- const _hoisted_8$10 = ["placeholder"];
4273
+ const _hoisted_7$12 = ["placeholder"];
4274
+ const _hoisted_8$11 = ["placeholder"];
4239
4275
  const _hoisted_9$10 = ["disabled"];
4240
4276
  const _hoisted_10$9 = ["placeholder"];
4241
4277
  const _hoisted_11$9 = ["disabled"];
@@ -4453,7 +4489,7 @@ var login_centered_default = /* @__PURE__ */ export_helper_default(/* @__PURE__
4453
4489
  height: "40",
4454
4490
  rx: "8",
4455
4491
  fill: __props.theme === "dark" ? "#6366f1" : "#4f46e5"
4456
- }, null, 8, _hoisted_1$36), _cache[8] || (_cache[8] = createElementVNode("path", {
4492
+ }, null, 8, _hoisted_1$37), _cache[8] || (_cache[8] = createElementVNode("path", {
4457
4493
  d: "M12 20L18 26L28 14",
4458
4494
  stroke: "#fff",
4459
4495
  "stroke-width": "3",
@@ -4471,7 +4507,7 @@ var login_centered_default = /* @__PURE__ */ export_helper_default(/* @__PURE__
4471
4507
  key: tab.key,
4472
4508
  class: normalizeClass([e("tab"), { [e("tab--active")]: activeTab.value === tab.key }]),
4473
4509
  onClick: ($event) => activeTab.value = tab.key
4474
- }, toDisplayString(tab.label), 11, _hoisted_2$26);
4510
+ }, toDisplayString(tab.label), 11, _hoisted_2$27);
4475
4511
  }), 128))], 2)) : createCommentVNode("v-if", true),
4476
4512
  createElementVNode("form", {
4477
4513
  class: normalizeClass(e("form")),
@@ -4494,7 +4530,7 @@ var login_centered_default = /* @__PURE__ */ export_helper_default(/* @__PURE__
4494
4530
  class: normalizeClass(e("input")),
4495
4531
  placeholder: __props.usernamePlaceholder,
4496
4532
  autocomplete: "username"
4497
- }, null, 10, _hoisted_3$21), [[vModelText, formData.username]])], 2)], 2), createElementVNode("div", { class: normalizeClass(e("field")) }, [createElementVNode("label", { class: normalizeClass(e("label")) }, toDisplayString(__props.passwordLabel), 3), createElementVNode("div", { class: normalizeClass(e("input-group")) }, [
4533
+ }, null, 10, _hoisted_3$22), [[vModelText, formData.username]])], 2)], 2), createElementVNode("div", { class: normalizeClass(e("field")) }, [createElementVNode("label", { class: normalizeClass(e("label")) }, toDisplayString(__props.passwordLabel), 3), createElementVNode("div", { class: normalizeClass(e("input-group")) }, [
4498
4534
  createElementVNode("span", { class: normalizeClass(e("input-prefix")) }, [..._cache[10] || (_cache[10] = [createElementVNode("svg", {
4499
4535
  width: "18",
4500
4536
  height: "18",
@@ -4516,16 +4552,16 @@ var login_centered_default = /* @__PURE__ */ export_helper_default(/* @__PURE__
4516
4552
  class: normalizeClass(e("input")),
4517
4553
  placeholder: __props.passwordPlaceholder,
4518
4554
  autocomplete: "current-password"
4519
- }, null, 10, _hoisted_4$19), [[vModelDynamic, formData.password]]),
4555
+ }, null, 10, _hoisted_4$20), [[vModelDynamic, formData.password]]),
4520
4556
  createElementVNode("button", {
4521
4557
  type: "button",
4522
4558
  class: normalizeClass(e("input-suffix")),
4523
4559
  onClick: _cache[2] || (_cache[2] = ($event) => showPassword.value = !showPassword.value)
4524
- }, [!showPassword.value ? (openBlock(), createElementBlock("svg", _hoisted_5$13, [..._cache[11] || (_cache[11] = [createElementVNode("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }, null, -1), createElementVNode("circle", {
4560
+ }, [!showPassword.value ? (openBlock(), createElementBlock("svg", _hoisted_5$14, [..._cache[11] || (_cache[11] = [createElementVNode("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }, null, -1), createElementVNode("circle", {
4525
4561
  cx: "12",
4526
4562
  cy: "12",
4527
4563
  r: "3"
4528
- }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_6$12, [..._cache[12] || (_cache[12] = [createElementVNode("path", { d: "M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24" }, null, -1), createElementVNode("line", {
4564
+ }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_6$13, [..._cache[12] || (_cache[12] = [createElementVNode("path", { d: "M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24" }, null, -1), createElementVNode("line", {
4529
4565
  x1: "1",
4530
4566
  y1: "1",
4531
4567
  x2: "23",
@@ -4559,7 +4595,7 @@ var login_centered_default = /* @__PURE__ */ export_helper_default(/* @__PURE__
4559
4595
  type: "tel",
4560
4596
  maxlength: "11",
4561
4597
  autocomplete: "tel"
4562
- }, null, 10, _hoisted_7$11), [[vModelText, formData.phone]])], 2)], 2), createElementVNode("div", { class: normalizeClass(e("field")) }, [createElementVNode("label", { class: normalizeClass(e("label")) }, toDisplayString(__props.codeLabel), 3), createElementVNode("div", { class: normalizeClass(e("input-group")) }, [
4598
+ }, null, 10, _hoisted_7$12), [[vModelText, formData.phone]])], 2)], 2), createElementVNode("div", { class: normalizeClass(e("field")) }, [createElementVNode("label", { class: normalizeClass(e("label")) }, toDisplayString(__props.codeLabel), 3), createElementVNode("div", { class: normalizeClass(e("input-group")) }, [
4563
4599
  createElementVNode("span", { class: normalizeClass(e("input-prefix")) }, [..._cache[14] || (_cache[14] = [createElementVNode("svg", {
4564
4600
  width: "18",
4565
4601
  height: "18",
@@ -4582,7 +4618,7 @@ var login_centered_default = /* @__PURE__ */ export_helper_default(/* @__PURE__
4582
4618
  type: "text",
4583
4619
  maxlength: "6",
4584
4620
  autocomplete: "one-time-code"
4585
- }, null, 10, _hoisted_8$10), [[vModelText, formData.code]]),
4621
+ }, null, 10, _hoisted_8$11), [[vModelText, formData.code]]),
4586
4622
  createElementVNode("button", {
4587
4623
  type: "button",
4588
4624
  class: normalizeClass([e("send-code"), { [e("send-code--disabled")]: countdown.value > 0 }]),
@@ -4682,7 +4718,7 @@ var login_centered_default = /* @__PURE__ */ export_helper_default(/* @__PURE__
4682
4718
  }), [["__scopeId", "data-v-267a78de"]]);
4683
4719
  //#endregion
4684
4720
  //#region src/components/base/pin-input/pin-input.vue
4685
- const _hoisted_1$35 = [
4721
+ const _hoisted_1$36 = [
4686
4722
  "value",
4687
4723
  "disabled",
4688
4724
  "onInput",
@@ -4792,7 +4828,7 @@ var pin_input_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ de
4792
4828
  onFocus: ($event) => focusedIndex.value = i - 1,
4793
4829
  onBlur: _cache[0] || (_cache[0] = ($event) => focusedIndex.value = -1),
4794
4830
  onPaste: handlePaste
4795
- }, null, 42, _hoisted_1$35);
4831
+ }, null, 42, _hoisted_1$36);
4796
4832
  }), 128))], 2), __props.error ? (openBlock(), createElementBlock("div", {
4797
4833
  key: 0,
4798
4834
  class: normalizeClass(e("error"))
@@ -4802,22 +4838,22 @@ var pin_input_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ de
4802
4838
  }), [["__scopeId", "data-v-fd187d50"]]);
4803
4839
  //#endregion
4804
4840
  //#region src/components/base/tree-select/tree-select.vue
4805
- const _hoisted_1$34 = [
4841
+ const _hoisted_1$35 = [
4806
4842
  "value",
4807
4843
  "placeholder",
4808
4844
  "disabled"
4809
4845
  ];
4810
- const _hoisted_2$25 = ["onClick"];
4811
- const _hoisted_3$20 = ["onClick"];
4812
- const _hoisted_4$18 = ["onClick"];
4813
- const _hoisted_5$12 = [
4846
+ const _hoisted_2$26 = ["onClick"];
4847
+ const _hoisted_3$21 = ["onClick"];
4848
+ const _hoisted_4$19 = ["onClick"];
4849
+ const _hoisted_5$13 = [
4814
4850
  "checked",
4815
4851
  "indeterminate",
4816
4852
  "disabled"
4817
4853
  ];
4818
- const _hoisted_6$11 = ["onClick"];
4819
- const _hoisted_7$10 = ["onClick"];
4820
- const _hoisted_8$9 = ["onClick"];
4854
+ const _hoisted_6$12 = ["onClick"];
4855
+ const _hoisted_7$11 = ["onClick"];
4856
+ const _hoisted_8$10 = ["onClick"];
4821
4857
  const _hoisted_9$9 = [
4822
4858
  "checked",
4823
4859
  "indeterminate",
@@ -4826,7 +4862,7 @@ const _hoisted_9$9 = [
4826
4862
  const _hoisted_10$8 = ["onClick"];
4827
4863
  const _hoisted_11$8 = ["onClick"];
4828
4864
  const _hoisted_12$5 = ["onClick"];
4829
- const _hoisted_13$4 = [
4865
+ const _hoisted_13$5 = [
4830
4866
  "checked",
4831
4867
  "indeterminate",
4832
4868
  "disabled"
@@ -5137,7 +5173,7 @@ var tree_select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5137
5173
  onFocus: handleFocus,
5138
5174
  onBlur: handleBlur,
5139
5175
  onKeydown: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"]))
5140
- }, null, 42, _hoisted_1$34)) : (openBlock(), createElementBlock("div", {
5176
+ }, null, 42, _hoisted_1$35)) : (openBlock(), createElementBlock("div", {
5141
5177
  key: 1,
5142
5178
  class: normalizeClass([e("display"), { [e("display--placeholder")]: !selectedTitle.value }])
5143
5179
  }, toDisplayString(selectedTitle.value || __props.placeholder), 3)),
@@ -5213,7 +5249,7 @@ var tree_select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5213
5249
  key: 0,
5214
5250
  class: normalizeClass(e("node-toggle")),
5215
5251
  onClick: withModifiers(($event) => handleToggle(node), ["stop"])
5216
- }, toDisplayString(expandedKeys.value.includes(node.key) ? "▾" : "▸"), 11, _hoisted_3$20)) : (openBlock(), createElementBlock("span", {
5252
+ }, toDisplayString(expandedKeys.value.includes(node.key) ? "▾" : "▸"), 11, _hoisted_3$21)) : (openBlock(), createElementBlock("span", {
5217
5253
  key: 1,
5218
5254
  class: normalizeClass(e("node-leaf"))
5219
5255
  }, "•", 2)),
@@ -5226,9 +5262,9 @@ var tree_select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5226
5262
  checked: checkedKeys.value.includes(node.key),
5227
5263
  indeterminate: indeterminateKeys.value.includes(node.key),
5228
5264
  disabled: node.disabled
5229
- }, null, 8, _hoisted_5$12)], 10, _hoisted_4$18)) : createCommentVNode("v-if", true),
5265
+ }, null, 8, _hoisted_5$13)], 10, _hoisted_4$19)) : createCommentVNode("v-if", true),
5230
5266
  createElementVNode("span", { class: normalizeClass(e("node-title")) }, toDisplayString(node.title), 3)
5231
- ], 14, _hoisted_2$25);
5267
+ ], 14, _hoisted_2$26);
5232
5268
  }), 128))], 38)], 6)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Normal mode "), createElementVNode("div", { class: normalizeClass(e("tree-container")) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredNodes.value, (node) => {
5233
5269
  return openBlock(), createElementBlock("div", {
5234
5270
  key: node.key,
@@ -5239,7 +5275,7 @@ var tree_select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5239
5275
  key: 0,
5240
5276
  class: normalizeClass(e("node-toggle")),
5241
5277
  onClick: withModifiers(($event) => handleToggle(node), ["stop"])
5242
- }, toDisplayString(expandedKeys.value.includes(node.key) ? "▾" : "▸"), 11, _hoisted_7$10)) : (openBlock(), createElementBlock("span", {
5278
+ }, toDisplayString(expandedKeys.value.includes(node.key) ? "▾" : "▸"), 11, _hoisted_7$11)) : (openBlock(), createElementBlock("span", {
5243
5279
  key: 1,
5244
5280
  class: normalizeClass(e("node-leaf"))
5245
5281
  }, "•", 2)),
@@ -5252,7 +5288,7 @@ var tree_select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5252
5288
  checked: checkedKeys.value.includes(node.key),
5253
5289
  indeterminate: indeterminateKeys.value.includes(node.key),
5254
5290
  disabled: node.disabled
5255
- }, null, 8, _hoisted_9$9)], 10, _hoisted_8$9)) : createCommentVNode("v-if", true),
5291
+ }, null, 8, _hoisted_9$9)], 10, _hoisted_8$10)) : createCommentVNode("v-if", true),
5256
5292
  createElementVNode("span", { class: normalizeClass(e("node-title")) }, toDisplayString(node.title), 3),
5257
5293
  hasChildren(node) && expandedKeys.value.includes(node.key) ? (openBlock(), createElementBlock("div", {
5258
5294
  key: 3,
@@ -5280,11 +5316,11 @@ var tree_select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5280
5316
  checked: checkedKeys.value.includes(child.key),
5281
5317
  indeterminate: indeterminateKeys.value.includes(child.key),
5282
5318
  disabled: child.disabled
5283
- }, null, 8, _hoisted_13$4)], 10, _hoisted_12$5)) : createCommentVNode("v-if", true),
5319
+ }, null, 8, _hoisted_13$5)], 10, _hoisted_12$5)) : createCommentVNode("v-if", true),
5284
5320
  createElementVNode("span", { class: normalizeClass(e("node-title")) }, toDisplayString(child.title), 3)
5285
5321
  ], 10, _hoisted_10$8);
5286
5322
  }), 128))], 2)) : createCommentVNode("v-if", true)
5287
- ], 10, _hoisted_6$11);
5323
+ ], 10, _hoisted_6$12);
5288
5324
  }), 128)), filteredNodes.value.length === 0 ? (openBlock(), createBlock(empty_default, {
5289
5325
  key: 0,
5290
5326
  description: "暂无数据"
@@ -5297,12 +5333,12 @@ var tree_select_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5297
5333
  }), [["__scopeId", "data-v-f36bc312"]]);
5298
5334
  //#endregion
5299
5335
  //#region src/components/base/color-picker/color-picker.vue
5300
- const _hoisted_1$33 = [
5336
+ const _hoisted_1$34 = [
5301
5337
  "value",
5302
5338
  "placeholder",
5303
5339
  "disabled"
5304
5340
  ];
5305
- const _hoisted_2$24 = {
5341
+ const _hoisted_2$25 = {
5306
5342
  xmlns: "http://www.w3.org/2000/svg",
5307
5343
  width: "14",
5308
5344
  height: "14",
@@ -5311,12 +5347,12 @@ const _hoisted_2$24 = {
5311
5347
  stroke: "currentColor",
5312
5348
  "stroke-width": "2"
5313
5349
  };
5314
- const _hoisted_3$19 = ["fill"];
5315
- const _hoisted_4$17 = ["value"];
5316
- const _hoisted_5$11 = ["value"];
5317
- const _hoisted_6$10 = ["value"];
5318
- const _hoisted_7$9 = ["value"];
5319
- const _hoisted_8$8 = ["value"];
5350
+ const _hoisted_3$20 = ["fill"];
5351
+ const _hoisted_4$18 = ["value"];
5352
+ const _hoisted_5$12 = ["value"];
5353
+ const _hoisted_6$11 = ["value"];
5354
+ const _hoisted_7$10 = ["value"];
5355
+ const _hoisted_8$9 = ["value"];
5320
5356
  const _hoisted_9$8 = ["onClick"];
5321
5357
  var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
5322
5358
  name: "YdColorPicker",
@@ -5738,7 +5774,7 @@ var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5738
5774
  onInput: handleInput,
5739
5775
  onFocus: handleFocus,
5740
5776
  onBlur: handleBlur
5741
- }, null, 42, _hoisted_1$33)) : createCommentVNode("v-if", true),
5777
+ }, null, 42, _hoisted_1$34)) : createCommentVNode("v-if", true),
5742
5778
  createCommentVNode(" Clear button "),
5743
5779
  __props.clearable && __props.modelValue && !__props.disabled ? (openBlock(), createElementBlock("span", {
5744
5780
  key: 2,
@@ -5766,14 +5802,14 @@ var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5766
5802
  y2: "18"
5767
5803
  })], -1)])], 2)) : createCommentVNode("v-if", true),
5768
5804
  createCommentVNode(" Trigger button "),
5769
- createElementVNode("span", { class: normalizeClass(e("trigger")) }, [(openBlock(), createElementBlock("svg", _hoisted_2$24, [_cache[5] || (_cache[5] = createElementVNode("circle", {
5805
+ createElementVNode("span", { class: normalizeClass(e("trigger")) }, [(openBlock(), createElementBlock("svg", _hoisted_2$25, [_cache[5] || (_cache[5] = createElementVNode("circle", {
5770
5806
  cx: "12",
5771
5807
  cy: "12",
5772
5808
  r: "10"
5773
5809
  }, null, -1)), createElementVNode("path", {
5774
5810
  d: "M12 2a10 10 0 0 1 0 20",
5775
5811
  fill: __props.modelValue || "#ffffff"
5776
- }, null, 8, _hoisted_3$19)]))], 2)
5812
+ }, null, 8, _hoisted_3$20)]))], 2)
5777
5813
  ], 2),
5778
5814
  __props.error || __props.hint ? (openBlock(), createElementBlock("div", {
5779
5815
  key: 1,
@@ -5842,7 +5878,7 @@ var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5842
5878
  class: normalizeClass(e("value-input")),
5843
5879
  value: hexValue.value,
5844
5880
  onInput: handleHexInput
5845
- }, null, 42, _hoisted_4$17)], 2),
5881
+ }, null, 42, _hoisted_4$18)], 2),
5846
5882
  createElementVNode("div", { class: normalizeClass(e("value-item")) }, [createElementVNode("span", { class: normalizeClass(e("value-label")) }, "R", 2), createElementVNode("input", {
5847
5883
  class: normalizeClass(e("value-input")),
5848
5884
  type: "number",
@@ -5850,7 +5886,7 @@ var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5850
5886
  max: 255,
5851
5887
  value: rgbValue.value.r,
5852
5888
  onInput: _cache[0] || (_cache[0] = (e) => handleRgbInput("r", e))
5853
- }, null, 42, _hoisted_5$11)], 2),
5889
+ }, null, 42, _hoisted_5$12)], 2),
5854
5890
  createElementVNode("div", { class: normalizeClass(e("value-item")) }, [createElementVNode("span", { class: normalizeClass(e("value-label")) }, "G", 2), createElementVNode("input", {
5855
5891
  class: normalizeClass(e("value-input")),
5856
5892
  type: "number",
@@ -5858,7 +5894,7 @@ var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5858
5894
  max: 255,
5859
5895
  value: rgbValue.value.g,
5860
5896
  onInput: _cache[1] || (_cache[1] = (e) => handleRgbInput("g", e))
5861
- }, null, 42, _hoisted_6$10)], 2),
5897
+ }, null, 42, _hoisted_6$11)], 2),
5862
5898
  createElementVNode("div", { class: normalizeClass(e("value-item")) }, [createElementVNode("span", { class: normalizeClass(e("value-label")) }, "B", 2), createElementVNode("input", {
5863
5899
  class: normalizeClass(e("value-input")),
5864
5900
  type: "number",
@@ -5866,7 +5902,7 @@ var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5866
5902
  max: 255,
5867
5903
  value: rgbValue.value.b,
5868
5904
  onInput: _cache[2] || (_cache[2] = (e) => handleRgbInput("b", e))
5869
- }, null, 42, _hoisted_7$9)], 2),
5905
+ }, null, 42, _hoisted_7$10)], 2),
5870
5906
  __props.showAlpha ? (openBlock(), createElementBlock("div", {
5871
5907
  key: 0,
5872
5908
  class: normalizeClass(e("value-item"))
@@ -5877,7 +5913,7 @@ var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5877
5913
  max: 100,
5878
5914
  value: Math.round(alphaValue.value * 100),
5879
5915
  onInput: handleAlphaInput
5880
- }, null, 42, _hoisted_8$8)], 2)) : createCommentVNode("v-if", true)
5916
+ }, null, 42, _hoisted_8$9)], 2)) : createCommentVNode("v-if", true)
5881
5917
  ], 2),
5882
5918
  createCommentVNode(" Preset colors "),
5883
5919
  __props.showPreset ? (openBlock(), createElementBlock("div", {
@@ -5900,9 +5936,9 @@ var color_picker_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */
5900
5936
  }), [["__scopeId", "data-v-24772c45"]]);
5901
5937
  //#endregion
5902
5938
  //#region src/components/base/calendar/calendar.vue
5903
- const _hoisted_1$32 = ["onClick"];
5904
- const _hoisted_2$23 = ["onClick"];
5905
- const _hoisted_3$18 = ["onClick"];
5939
+ const _hoisted_1$33 = ["onClick"];
5940
+ const _hoisted_2$24 = ["onClick"];
5941
+ const _hoisted_3$19 = ["onClick"];
5906
5942
  var calendar_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
5907
5943
  name: "YdCalendar",
5908
5944
  __name: "calendar",
@@ -6114,7 +6150,7 @@ var calendar_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
6114
6150
  [e("year-cell--today")]: y === currentYear.value
6115
6151
  }]),
6116
6152
  onClick: ($event) => selectYear(y)
6117
- }, toDisplayString(y), 11, _hoisted_1$32);
6153
+ }, toDisplayString(y), 11, _hoisted_1$33);
6118
6154
  }), 128))], 2)], 2)) : view.value === "month" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Month View "), createElementVNode("div", { class: normalizeClass(e("view")) }, [createElementVNode("div", { class: normalizeClass(e("month-grid")) }, [(openBlock(), createElementBlock(Fragment, null, renderList(months, (m, i) => {
6119
6155
  return createElementVNode("button", {
6120
6156
  key: i,
@@ -6123,7 +6159,7 @@ var calendar_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
6123
6159
  [e("month-cell--today")]: selectedYear.value === currentYear.value && i === currentMonth.value
6124
6160
  }]),
6125
6161
  onClick: ($event) => selectMonth(i)
6126
- }, toDisplayString(m) + "月 ", 11, _hoisted_2$23);
6162
+ }, toDisplayString(m) + "月 ", 11, _hoisted_2$24);
6127
6163
  }), 64))], 2)], 2)], 2112)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" Month View (Calendar) "), createElementVNode("div", { class: normalizeClass(e("view")) }, [
6128
6164
  createCommentVNode(" Weekdays header "),
6129
6165
  createElementVNode("div", { class: normalizeClass(e("weekdays")) }, [(openBlock(), createElementBlock(Fragment, null, renderList(weekdays, (w) => {
@@ -6144,7 +6180,7 @@ var calendar_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
6144
6180
  }, [renderSlot(_ctx.$slots, "date-cell", {
6145
6181
  day,
6146
6182
  currentMonth: day.currentMonth
6147
- }, () => [createTextVNode(toDisplayString(day.date.getDate()), 1)], true)], 14, _hoisted_3$18);
6183
+ }, () => [createTextVNode(toDisplayString(day.date.getDate()), 1)], true)], 14, _hoisted_3$19);
6148
6184
  }), 128))], 2)
6149
6185
  ], 2)], 2112)),
6150
6186
  createCommentVNode(" Footer "),
@@ -6160,6 +6196,150 @@ var calendar_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
6160
6196
  }
6161
6197
  }), [["__scopeId", "data-v-b7db4b77"]]);
6162
6198
  //#endregion
6199
+ //#region src/components/base/markdown/markdown.vue
6200
+ const _hoisted_1$32 = {
6201
+ key: 0,
6202
+ class: "yd-markdown__editor"
6203
+ };
6204
+ const _hoisted_2$23 = ["placeholder"];
6205
+ const _hoisted_3$18 = ["innerHTML"];
6206
+ const _hoisted_4$17 = {
6207
+ key: 2,
6208
+ class: "yd-markdown__toolbar"
6209
+ };
6210
+ const _hoisted_5$11 = {
6211
+ key: 3,
6212
+ class: "yd-markdown__split"
6213
+ };
6214
+ const _hoisted_6$10 = { class: "yd-markdown__split-editor" };
6215
+ const _hoisted_7$9 = ["placeholder"];
6216
+ const _hoisted_8$8 = ["innerHTML"];
6217
+ var markdown_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
6218
+ name: "YdMarkdown",
6219
+ __name: "markdown",
6220
+ props: {
6221
+ modelValue: { default: "" },
6222
+ editable: {
6223
+ type: Boolean,
6224
+ default: false
6225
+ },
6226
+ showToolbar: {
6227
+ type: Boolean,
6228
+ default: true
6229
+ },
6230
+ size: {},
6231
+ placeholder: { default: "输入Markdown..." },
6232
+ highlight: {
6233
+ type: Boolean,
6234
+ default: true
6235
+ }
6236
+ },
6237
+ emits: ["update:modelValue", "change"],
6238
+ setup(__props, { emit: __emit }) {
6239
+ const props = __props;
6240
+ const emit = __emit;
6241
+ const { size: configSize } = useConfig();
6242
+ const textareaRef = ref(null);
6243
+ const mode = ref("edit");
6244
+ const resolvedSize = computed(() => props.size ?? configSize.value);
6245
+ const localValue = ref(props.modelValue);
6246
+ watch(() => props.modelValue, (val) => {
6247
+ localValue.value = val;
6248
+ });
6249
+ marked.setOptions({
6250
+ gfm: true,
6251
+ breaks: true
6252
+ });
6253
+ const renderer = new marked.Renderer();
6254
+ renderer.code = ({ text, lang }) => {
6255
+ if (props.highlight && lang && hljs.getLanguage(lang)) return `<pre><code class="hljs language-${lang}">${hljs.highlight(text, { language: lang }).value}</code></pre>`;
6256
+ return `<pre><code class="hljs">${text}</code></pre>`;
6257
+ };
6258
+ marked.use({ renderer });
6259
+ const renderedHtml = computed(() => {
6260
+ if (!localValue.value) return "";
6261
+ try {
6262
+ return marked.parse(localValue.value);
6263
+ } catch (e) {
6264
+ console.error("Markdown parse error:", e);
6265
+ return localValue.value;
6266
+ }
6267
+ });
6268
+ const classes = computed(() => cn("yd-markdown", `yd-markdown--${resolvedSize.value}`));
6269
+ const textareaClasses = computed(() => cn("yd-markdown__textarea", props.editable && "yd-markdown__textarea--editable"));
6270
+ const contentClasses = computed(() => cn("yd-markdown__content"));
6271
+ function handleInput(e) {
6272
+ const value = e.target.value;
6273
+ localValue.value = value;
6274
+ emit("update:modelValue", value);
6275
+ emit("change", value);
6276
+ }
6277
+ function handleKeydown(e) {
6278
+ if (e.key === "Tab") {
6279
+ e.preventDefault();
6280
+ const textarea = textareaRef.value;
6281
+ if (textarea) {
6282
+ const start = textarea.selectionStart;
6283
+ const end = textarea.selectionEnd;
6284
+ const value = textarea.value;
6285
+ localValue.value = value.substring(0, start) + " " + value.substring(end);
6286
+ emit("update:modelValue", localValue.value);
6287
+ setTimeout(() => {
6288
+ textarea.selectionStart = textarea.selectionEnd = start + 2;
6289
+ }, 0);
6290
+ }
6291
+ }
6292
+ }
6293
+ onMounted(() => {
6294
+ if (props.editable && textareaRef.value) textareaRef.value.focus();
6295
+ });
6296
+ return (_ctx, _cache) => {
6297
+ return openBlock(), createElementBlock("div", { class: normalizeClass(classes.value) }, [
6298
+ createCommentVNode(" 编辑模式 "),
6299
+ __props.editable ? (openBlock(), createElementBlock("div", _hoisted_1$32, [withDirectives(createElementVNode("textarea", {
6300
+ ref_key: "textareaRef",
6301
+ ref: textareaRef,
6302
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => localValue.value = $event),
6303
+ class: normalizeClass(textareaClasses.value),
6304
+ placeholder: __props.placeholder,
6305
+ onInput: handleInput,
6306
+ onKeydown: handleKeydown
6307
+ }, null, 42, _hoisted_2$23), [[vModelText, localValue.value]])])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" 预览模式 / 只读模式 "), createElementVNode("div", {
6308
+ class: normalizeClass(contentClasses.value),
6309
+ innerHTML: renderedHtml.value
6310
+ }, null, 10, _hoisted_3$18)], 2112)),
6311
+ createCommentVNode(" 工具栏 "),
6312
+ __props.showToolbar && __props.editable ? (openBlock(), createElementBlock("div", _hoisted_4$17, [
6313
+ createElementVNode("button", {
6314
+ type: "button",
6315
+ class: normalizeClass(["yd-markdown__tool", { "yd-markdown__tool--active": mode.value === "edit" }]),
6316
+ onClick: _cache[1] || (_cache[1] = ($event) => mode.value = "edit")
6317
+ }, " 编辑 ", 2),
6318
+ createElementVNode("button", {
6319
+ type: "button",
6320
+ class: normalizeClass(["yd-markdown__tool", { "yd-markdown__tool--active": mode.value === "preview" }]),
6321
+ onClick: _cache[2] || (_cache[2] = ($event) => mode.value = "preview")
6322
+ }, " 预览 ", 2),
6323
+ createElementVNode("button", {
6324
+ type: "button",
6325
+ class: normalizeClass(["yd-markdown__tool", { "yd-markdown__tool--active": mode.value === "split" }]),
6326
+ onClick: _cache[3] || (_cache[3] = ($event) => mode.value = "split")
6327
+ }, " 分屏 ", 2)
6328
+ ])) : createCommentVNode("v-if", true),
6329
+ createCommentVNode(" 分屏模式 "),
6330
+ mode.value === "split" && __props.editable ? (openBlock(), createElementBlock("div", _hoisted_5$11, [createElementVNode("div", _hoisted_6$10, [withDirectives(createElementVNode("textarea", {
6331
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => localValue.value = $event),
6332
+ placeholder: __props.placeholder,
6333
+ onInput: handleInput
6334
+ }, null, 40, _hoisted_7$9), [[vModelText, localValue.value]])]), createElementVNode("div", {
6335
+ class: "yd-markdown__split-preview",
6336
+ innerHTML: renderedHtml.value
6337
+ }, null, 8, _hoisted_8$8)])) : createCommentVNode("v-if", true)
6338
+ ], 2);
6339
+ };
6340
+ }
6341
+ }), [["__scopeId", "data-v-068d968a"]]);
6342
+ //#endregion
6163
6343
  //#region src/components/base/chat-page/chat-page.vue
6164
6344
  const _hoisted_1$31 = { class: "yd-chat-page__header" };
6165
6345
  const _hoisted_2$22 = { class: "yd-chat-page__header-left" };
@@ -6176,14 +6356,14 @@ const _hoisted_9$7 = { class: "yd-chat-page__sidebar-header" };
6176
6356
  const _hoisted_10$7 = { class: "yd-chat-page__conversation-list" };
6177
6357
  const _hoisted_11$7 = ["onClick"];
6178
6358
  const _hoisted_12$4 = { class: "yd-chat-page__conv-info" };
6179
- const _hoisted_13$3 = { class: "yd-chat-page__conv-title" };
6180
- const _hoisted_14$2 = ["onClick"];
6181
- const _hoisted_15$2 = { class: "yd-chat-page__content" };
6182
- const _hoisted_16$2 = {
6359
+ const _hoisted_13$4 = { class: "yd-chat-page__conv-title" };
6360
+ const _hoisted_14$3 = ["onClick"];
6361
+ const _hoisted_15$3 = { class: "yd-chat-page__content" };
6362
+ const _hoisted_16$3 = {
6183
6363
  key: 0,
6184
6364
  class: "yd-chat-page__welcome"
6185
6365
  };
6186
- const _hoisted_17$1 = { class: "yd-chat-page__welcome-suggestions" };
6366
+ const _hoisted_17$2 = { class: "yd-chat-page__welcome-suggestions" };
6187
6367
  const _hoisted_18$1 = {
6188
6368
  key: 0,
6189
6369
  class: "yd-chat-page__message-avatar"
@@ -6193,37 +6373,43 @@ const _hoisted_20$1 = {
6193
6373
  key: 0,
6194
6374
  class: "yd-chat-page__reasoning"
6195
6375
  };
6196
- const _hoisted_21 = { class: "yd-chat-page__message-text" };
6197
- const _hoisted_22 = {
6376
+ const _hoisted_21 = { class: "yd-chat-page__reasoning-content" };
6377
+ const _hoisted_22 = { class: "yd-chat-page__message-bubble" };
6378
+ const _hoisted_23 = { class: "yd-chat-page__message-actions" };
6379
+ const _hoisted_24 = ["onClick", "title"];
6380
+ const _hoisted_25 = {
6381
+ key: 0,
6382
+ viewBox: "0 0 24 24",
6383
+ fill: "currentColor",
6384
+ width: "16",
6385
+ height: "16"
6386
+ };
6387
+ const _hoisted_26 = {
6388
+ key: 1,
6389
+ viewBox: "0 0 24 24",
6390
+ fill: "currentColor",
6391
+ width: "16",
6392
+ height: "16"
6393
+ };
6394
+ const _hoisted_27 = ["onClick"];
6395
+ const _hoisted_28 = {
6198
6396
  key: 2,
6199
6397
  class: "yd-chat-page__loading"
6200
6398
  };
6201
- const _hoisted_23 = { class: "yd-chat-page__input-area" };
6202
- const _hoisted_24 = { class: "yd-chat-page__input-wrapper" };
6203
- const _hoisted_25 = ["placeholder", "disabled"];
6204
- var chat_page_default = /* @__PURE__ */ export_helper_default({
6399
+ const _hoisted_29 = { class: "yd-chat-page__input-area" };
6400
+ const _hoisted_30 = { class: "yd-chat-page__input-wrapper" };
6401
+ const _hoisted_31 = ["placeholder", "disabled"];
6402
+ var chat_page_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
6205
6403
  __name: "chat-page",
6206
6404
  props: {
6207
- size: {
6208
- type: String,
6209
- default: "md"
6210
- },
6211
- title: {
6212
- type: String,
6213
- default: "AI Assistant"
6214
- },
6215
- model: {
6216
- type: String,
6217
- default: "GPT-4"
6218
- },
6219
- models: {
6220
- type: Array,
6221
- default: () => [
6222
- "GPT-4",
6223
- "GPT-3.5",
6224
- "Claude-3"
6225
- ]
6226
- },
6405
+ size: { default: "md" },
6406
+ title: { default: "AI Assistant" },
6407
+ model: { default: "GPT-4" },
6408
+ models: { default: () => [
6409
+ "GPT-4",
6410
+ "GPT-3.5",
6411
+ "Claude-3"
6412
+ ] },
6227
6413
  showModelSelector: {
6228
6414
  type: Boolean,
6229
6415
  default: true
@@ -6232,45 +6418,24 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6232
6418
  type: Boolean,
6233
6419
  default: true
6234
6420
  },
6235
- sidebarWidth: {
6236
- type: [Number, String],
6237
- default: 280
6238
- },
6239
- messages: {
6240
- type: Array,
6241
- default: () => []
6242
- },
6243
- conversations: {
6244
- type: Array,
6245
- default: () => []
6246
- },
6247
- currentConversationId: {
6248
- type: String,
6249
- default: ""
6250
- },
6251
- userInfo: {
6252
- type: Object,
6253
- default: () => ({
6254
- name: "User",
6255
- avatar: ""
6256
- })
6257
- },
6421
+ sidebarWidth: { default: 280 },
6422
+ messages: { default: () => [] },
6423
+ conversations: { default: () => [] },
6424
+ currentConversationId: { default: "" },
6425
+ userInfo: { default: () => ({
6426
+ name: "User",
6427
+ avatar: ""
6428
+ }) },
6258
6429
  streaming: {
6259
6430
  type: Boolean,
6260
6431
  default: false
6261
6432
  },
6262
- streamingContent: {
6263
- type: String,
6264
- default: ""
6265
- },
6433
+ streamingContent: { default: "" },
6266
6434
  showReasoning: {
6267
6435
  type: Boolean,
6268
6436
  default: true
6269
6437
  },
6270
- placeholder: {
6271
- type: String,
6272
- default: "Send a message..."
6273
- },
6438
+ placeholder: { default: "Send a message..." },
6274
6439
  disabled: {
6275
6440
  type: Boolean,
6276
6441
  default: false
@@ -6284,13 +6449,26 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6284
6449
  "update-conversation",
6285
6450
  "select-model",
6286
6451
  "logout",
6287
- "settings"
6452
+ "settings",
6453
+ "regenerate",
6454
+ "toggle-sidebar"
6288
6455
  ],
6289
6456
  setup(__props, { expose: __expose, emit: __emit }) {
6290
6457
  const props = __props;
6291
6458
  const emit = __emit;
6292
6459
  const inputValue = ref("");
6293
6460
  const conversationRef = ref(null);
6461
+ const copiedId = ref(null);
6462
+ function handleCopyMessage(content, id) {
6463
+ navigator.clipboard.writeText(content);
6464
+ copiedId.value = id;
6465
+ setTimeout(() => {
6466
+ copiedId.value = null;
6467
+ }, 2e3);
6468
+ }
6469
+ function handleRegenerate(messageId) {
6470
+ emit("regenerate", messageId);
6471
+ }
6294
6472
  const classes = computed(() => `yd-chat-page yd-chat-page--${props.size}`);
6295
6473
  const sidebarStyle = computed(() => {
6296
6474
  return { width: typeof props.sidebarWidth === "number" ? `${props.sidebarWidth}px` : props.sidebarWidth };
@@ -6321,6 +6499,11 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6321
6499
  function scrollToBottom() {
6322
6500
  if (conversationRef.value) conversationRef.value.scrollToBottom();
6323
6501
  }
6502
+ function autoResize(event) {
6503
+ const textarea = event.target;
6504
+ textarea.style.height = "auto";
6505
+ textarea.style.height = Math.min(textarea.scrollHeight, 120) + "px";
6506
+ }
6324
6507
  __expose({ scrollToBottom });
6325
6508
  return (_ctx, _cache) => {
6326
6509
  return openBlock(), createElementBlock("div", { class: normalizeClass(classes.value) }, [
@@ -6329,14 +6512,14 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6329
6512
  key: 0,
6330
6513
  class: "yd-chat-page__menu-btn",
6331
6514
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("toggle-sidebar"))
6332
- }, [..._cache[9] || (_cache[9] = [createElementVNode("svg", {
6515
+ }, [..._cache[10] || (_cache[10] = [createElementVNode("svg", {
6333
6516
  viewBox: "0 0 24 24",
6334
6517
  fill: "currentColor",
6335
6518
  width: "20",
6336
6519
  height: "20"
6337
6520
  }, [createElementVNode("path", { d: "M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z" })], -1)])])) : createCommentVNode("v-if", true), createElementVNode("h1", _hoisted_3$17, toDisplayString(__props.title), 1)]), createElementVNode("div", _hoisted_4$16, [
6338
6521
  createCommentVNode(" Model Selector "),
6339
- __props.showModelSelector ? (openBlock(), createElementBlock("div", _hoisted_5$10, [createElementVNode("button", _hoisted_6$9, [_cache[10] || (_cache[10] = createElementVNode("svg", {
6522
+ __props.showModelSelector ? (openBlock(), createElementBlock("div", _hoisted_5$10, [createElementVNode("button", _hoisted_6$9, [_cache[11] || (_cache[11] = createElementVNode("svg", {
6340
6523
  viewBox: "0 0 24 24",
6341
6524
  fill: "currentColor",
6342
6525
  width: "16",
@@ -6346,7 +6529,7 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6346
6529
  createElementVNode("div", _hoisted_7$8, [createElementVNode("button", {
6347
6530
  class: "yd-chat-page__user-btn",
6348
6531
  onClick: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("settings"))
6349
- }, [..._cache[11] || (_cache[11] = [createElementVNode("svg", {
6532
+ }, [..._cache[12] || (_cache[12] = [createElementVNode("svg", {
6350
6533
  viewBox: "0 0 24 24",
6351
6534
  fill: "currentColor",
6352
6535
  width: "20",
@@ -6354,7 +6537,7 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6354
6537
  }, [createElementVNode("path", { d: "M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z" })], -1)])]), createElementVNode("button", {
6355
6538
  class: "yd-chat-page__user-btn",
6356
6539
  onClick: _cache[2] || (_cache[2] = ($event) => _ctx.$emit("logout"))
6357
- }, [..._cache[12] || (_cache[12] = [createElementVNode("svg", {
6540
+ }, [..._cache[13] || (_cache[13] = [createElementVNode("svg", {
6358
6541
  viewBox: "0 0 24 24",
6359
6542
  fill: "currentColor",
6360
6543
  width: "20",
@@ -6373,7 +6556,7 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6373
6556
  block: "",
6374
6557
  onClick: handleNewConversation
6375
6558
  }, {
6376
- default: withCtx(() => [..._cache[13] || (_cache[13] = [createElementVNode("svg", {
6559
+ default: withCtx(() => [..._cache[14] || (_cache[14] = [createElementVNode("svg", {
6377
6560
  viewBox: "0 0 24 24",
6378
6561
  fill: "currentColor",
6379
6562
  width: "16",
@@ -6386,26 +6569,26 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6386
6569
  class: normalizeClass(["yd-chat-page__conversation-item", conv.id === __props.currentConversationId && "active"]),
6387
6570
  onClick: ($event) => handleSelectConversation(conv.id)
6388
6571
  }, [
6389
- _cache[15] || (_cache[15] = createElementVNode("div", { class: "yd-chat-page__conv-icon" }, [createElementVNode("svg", {
6572
+ _cache[16] || (_cache[16] = createElementVNode("div", { class: "yd-chat-page__conv-icon" }, [createElementVNode("svg", {
6390
6573
  viewBox: "0 0 24 24",
6391
6574
  fill: "currentColor",
6392
6575
  width: "18",
6393
6576
  height: "18"
6394
6577
  }, [createElementVNode("path", { d: "M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z" })])], -1)),
6395
- createElementVNode("div", _hoisted_12$4, [createElementVNode("div", _hoisted_13$3, toDisplayString(conv.title), 1)]),
6578
+ createElementVNode("div", _hoisted_12$4, [createElementVNode("div", _hoisted_13$4, toDisplayString(conv.title), 1)]),
6396
6579
  createElementVNode("button", {
6397
6580
  class: "yd-chat-page__conv-delete",
6398
6581
  onClick: ($event) => handleDeleteConversation(conv.id, $event)
6399
- }, [..._cache[14] || (_cache[14] = [createElementVNode("svg", {
6582
+ }, [..._cache[15] || (_cache[15] = [createElementVNode("svg", {
6400
6583
  viewBox: "0 0 24 24",
6401
6584
  fill: "currentColor",
6402
6585
  width: "14",
6403
6586
  height: "14"
6404
- }, [createElementVNode("path", { d: "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" })], -1)])], 8, _hoisted_14$2)
6587
+ }, [createElementVNode("path", { d: "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" })], -1)])], 8, _hoisted_14$3)
6405
6588
  ], 10, _hoisted_11$7);
6406
6589
  }), 128))])], 4)) : createCommentVNode("v-if", true),
6407
6590
  createCommentVNode(" Chat Area "),
6408
- createElementVNode("main", _hoisted_15$2, [
6591
+ createElementVNode("main", _hoisted_15$3, [
6409
6592
  createCommentVNode(" Messages "),
6410
6593
  createElementVNode("div", {
6411
6594
  ref_key: "conversationRef",
@@ -6413,34 +6596,25 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6413
6596
  class: "yd-chat-page__messages"
6414
6597
  }, [
6415
6598
  createCommentVNode(" Welcome Screen "),
6416
- allMessages.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_16$2, [
6417
- _cache[19] || (_cache[19] = createElementVNode("div", { class: "yd-chat-page__welcome-icon" }, [createElementVNode("svg", {
6599
+ allMessages.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_16$3, [
6600
+ _cache[20] || (_cache[20] = createElementVNode("div", { class: "yd-chat-page__welcome-icon" }, [createElementVNode("svg", {
6418
6601
  viewBox: "0 0 24 24",
6419
6602
  fill: "currentColor",
6420
6603
  width: "64",
6421
6604
  height: "64"
6422
6605
  }, [createElementVNode("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" })])], -1)),
6423
- _cache[20] || (_cache[20] = createElementVNode("h2", { class: "yd-chat-page__welcome-title" }, "How can I help you today?", -1)),
6424
- createElementVNode("div", _hoisted_17$1, [
6425
- createVNode(button_default, {
6426
- variant: "outline",
6427
- onClick: _cache[3] || (_cache[3] = ($event) => handleSend("Help me write a poem", []))
6428
- }, {
6429
- default: withCtx(() => [..._cache[16] || (_cache[16] = [createTextVNode("Help me write a poem", -1)])]),
6606
+ _cache[21] || (_cache[21] = createElementVNode("h2", { class: "yd-chat-page__welcome-title" }, "How can I help you today?", -1)),
6607
+ createElementVNode("div", _hoisted_17$2, [
6608
+ createVNode(button_default, { onClick: _cache[3] || (_cache[3] = ($event) => handleSend("Help me write a poem", [])) }, {
6609
+ default: withCtx(() => [..._cache[17] || (_cache[17] = [createTextVNode("Help me write a poem", -1)])]),
6430
6610
  _: 1
6431
6611
  }),
6432
- createVNode(button_default, {
6433
- variant: "outline",
6434
- onClick: _cache[4] || (_cache[4] = ($event) => handleSend("Explain quantum computing", []))
6435
- }, {
6436
- default: withCtx(() => [..._cache[17] || (_cache[17] = [createTextVNode("Explain quantum computing", -1)])]),
6612
+ createVNode(button_default, { onClick: _cache[4] || (_cache[4] = ($event) => handleSend("Explain quantum computing", [])) }, {
6613
+ default: withCtx(() => [..._cache[18] || (_cache[18] = [createTextVNode("Explain quantum computing", -1)])]),
6437
6614
  _: 1
6438
6615
  }),
6439
- createVNode(button_default, {
6440
- variant: "outline",
6441
- onClick: _cache[5] || (_cache[5] = ($event) => handleSend("Write a code snippet", []))
6442
- }, {
6443
- default: withCtx(() => [..._cache[18] || (_cache[18] = [createTextVNode("Write a code snippet", -1)])]),
6616
+ createVNode(button_default, { onClick: _cache[5] || (_cache[5] = ($event) => handleSend("Write a code snippet", [])) }, {
6617
+ default: withCtx(() => [..._cache[19] || (_cache[19] = [createTextVNode("Write a code snippet", -1)])]),
6444
6618
  _: 1
6445
6619
  })
6446
6620
  ])
@@ -6448,42 +6622,97 @@ var chat_page_default = /* @__PURE__ */ export_helper_default({
6448
6622
  return openBlock(), createElementBlock("div", {
6449
6623
  key: msg.id,
6450
6624
  class: normalizeClass(["yd-chat-page__message", `yd-chat-page__message--${msg.role}`])
6451
- }, [msg.role === "assistant" ? (openBlock(), createElementBlock("div", _hoisted_18$1, [..._cache[21] || (_cache[21] = [createElementVNode("svg", {
6452
- viewBox: "0 0 24 24",
6453
- fill: "currentColor",
6454
- width: "24",
6455
- height: "24"
6456
- }, [createElementVNode("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" })], -1)])])) : createCommentVNode("v-if", true), createElementVNode("div", _hoisted_19$1, [__props.showReasoning && msg.reasoning ? (openBlock(), createElementBlock("div", _hoisted_20$1, toDisplayString(msg.reasoning), 1)) : createCommentVNode("v-if", true), createElementVNode("div", _hoisted_21, toDisplayString(msg.content), 1)])], 2);
6625
+ }, [
6626
+ createCommentVNode(" AI Avatar "),
6627
+ msg.role === "assistant" ? (openBlock(), createElementBlock("div", _hoisted_18$1, [..._cache[22] || (_cache[22] = [createElementVNode("svg", {
6628
+ viewBox: "0 0 24 24",
6629
+ fill: "currentColor",
6630
+ width: "24",
6631
+ height: "24"
6632
+ }, [createElementVNode("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" })], -1)])])) : createCommentVNode("v-if", true),
6633
+ createElementVNode("div", _hoisted_19$1, [
6634
+ createCommentVNode(" Reasoning Display "),
6635
+ __props.showReasoning && msg.reasoning ? (openBlock(), createElementBlock("div", _hoisted_20$1, [_cache[23] || (_cache[23] = createElementVNode("div", { class: "yd-chat-page__reasoning-header" }, [createElementVNode("svg", {
6636
+ viewBox: "0 0 24 24",
6637
+ fill: "currentColor",
6638
+ width: "14",
6639
+ height: "14"
6640
+ }, [createElementVNode("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm0-4h-2V7h2v8z" })]), createElementVNode("span", null, "思考中")], -1)), createElementVNode("div", _hoisted_21, toDisplayString(msg.reasoning), 1)])) : createCommentVNode("v-if", true),
6641
+ createCommentVNode(" Message Content with Markdown "),
6642
+ createElementVNode("div", _hoisted_22, [
6643
+ createVNode(markdown_default, {
6644
+ "model-value": msg.content,
6645
+ editable: false,
6646
+ "show-toolbar": false
6647
+ }, null, 8, ["model-value"]),
6648
+ createCommentVNode(" Message Actions "),
6649
+ createElementVNode("div", _hoisted_23, [createElementVNode("button", {
6650
+ class: "yd-chat-page__action-btn",
6651
+ onClick: ($event) => handleCopyMessage(msg.content, msg.id),
6652
+ title: copiedId.value === msg.id ? "已复制" : "复制"
6653
+ }, [copiedId.value !== msg.id ? (openBlock(), createElementBlock("svg", _hoisted_25, [..._cache[24] || (_cache[24] = [createElementVNode("path", { d: "M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_26, [..._cache[25] || (_cache[25] = [createElementVNode("path", { d: "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z" }, null, -1)])]))], 8, _hoisted_24), msg.role === "assistant" ? (openBlock(), createElementBlock("button", {
6654
+ key: 0,
6655
+ class: "yd-chat-page__action-btn",
6656
+ onClick: ($event) => handleRegenerate(msg.id),
6657
+ title: "重新生成"
6658
+ }, [..._cache[26] || (_cache[26] = [createElementVNode("svg", {
6659
+ viewBox: "0 0 24 24",
6660
+ fill: "currentColor",
6661
+ width: "16",
6662
+ height: "16"
6663
+ }, [createElementVNode("path", { d: "M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z" })], -1)])], 8, _hoisted_27)) : createCommentVNode("v-if", true)])
6664
+ ])
6665
+ ])
6666
+ ], 2);
6457
6667
  }), 128))], 64)),
6458
6668
  createCommentVNode(" Streaming Indicator "),
6459
- __props.streaming && !__props.streamingContent ? (openBlock(), createElementBlock("div", _hoisted_22, [..._cache[22] || (_cache[22] = [createElementVNode("span", null, "AI is thinking...", -1)])])) : createCommentVNode("v-if", true)
6669
+ __props.streaming && !__props.streamingContent ? (openBlock(), createElementBlock("div", _hoisted_28, [..._cache[27] || (_cache[27] = [createElementVNode("span", null, "AI is thinking...", -1)])])) : createCommentVNode("v-if", true)
6460
6670
  ], 512),
6461
6671
  createCommentVNode(" Input Area "),
6462
- createElementVNode("div", _hoisted_23, [createElementVNode("div", _hoisted_24, [withDirectives(createElementVNode("textarea", {
6463
- "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => inputValue.value = $event),
6464
- class: "yd-chat-page__input",
6465
- placeholder: __props.placeholder,
6466
- disabled: __props.disabled,
6467
- onKeydown: _cache[7] || (_cache[7] = withKeys(withModifiers(($event) => handleSend(inputValue.value, []), ["exact", "prevent"]), ["enter"]))
6468
- }, null, 40, _hoisted_25), [[vModelText, inputValue.value]]), createVNode(button_default, {
6469
- type: "primary",
6470
- disabled: __props.disabled || __props.streaming || !inputValue.value.trim(),
6471
- onClick: _cache[8] || (_cache[8] = ($event) => handleSend(inputValue.value, []))
6472
- }, {
6473
- default: withCtx(() => [..._cache[23] || (_cache[23] = [createElementVNode("svg", {
6474
- viewBox: "0 0 24 24",
6475
- fill: "currentColor",
6476
- width: "20",
6477
- height: "20"
6478
- }, [createElementVNode("path", { d: "M2.01 21L23 12 2.01 3 2 10l15 2-15 2z" })], -1)])]),
6479
- _: 1
6480
- }, 8, ["disabled"])])])
6672
+ createElementVNode("div", _hoisted_29, [
6673
+ createElementVNode("div", _hoisted_30, [
6674
+ createCommentVNode(" Input Actions "),
6675
+ _cache[29] || (_cache[29] = createElementVNode("div", { class: "yd-chat-page__input-actions" }, [createElementVNode("button", {
6676
+ class: "yd-chat-page__input-action",
6677
+ title: "添加附件"
6678
+ }, [createElementVNode("svg", {
6679
+ viewBox: "0 0 24 24",
6680
+ fill: "currentColor",
6681
+ width: "18",
6682
+ height: "18"
6683
+ }, [createElementVNode("path", { d: "M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z" })])])], -1)),
6684
+ withDirectives(createElementVNode("textarea", {
6685
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => inputValue.value = $event),
6686
+ class: "yd-chat-page__input",
6687
+ placeholder: __props.placeholder,
6688
+ disabled: __props.disabled,
6689
+ rows: "1",
6690
+ onKeydown: _cache[7] || (_cache[7] = withKeys(withModifiers(($event) => handleSend(inputValue.value, []), ["exact", "prevent"]), ["enter"])),
6691
+ onInput: _cache[8] || (_cache[8] = ($event) => autoResize($event))
6692
+ }, null, 40, _hoisted_31), [[vModelText, inputValue.value]]),
6693
+ createVNode(button_default, {
6694
+ type: "primary",
6695
+ disabled: __props.disabled || __props.streaming || !inputValue.value.trim(),
6696
+ onClick: _cache[9] || (_cache[9] = ($event) => handleSend(inputValue.value, []))
6697
+ }, {
6698
+ default: withCtx(() => [..._cache[28] || (_cache[28] = [createElementVNode("svg", {
6699
+ viewBox: "0 0 24 24",
6700
+ fill: "currentColor",
6701
+ width: "20",
6702
+ height: "20"
6703
+ }, [createElementVNode("path", { d: "M2.01 21L23 12 2.01 3 2 10l15 2-15 2z" })], -1)])]),
6704
+ _: 1
6705
+ }, 8, ["disabled"])
6706
+ ]),
6707
+ createCommentVNode(" Input Hint "),
6708
+ _cache[30] || (_cache[30] = createElementVNode("div", { class: "yd-chat-page__input-hint" }, [createElementVNode("span", null, "按 Enter 发送,Shift + Enter 换行")], -1))
6709
+ ])
6481
6710
  ])
6482
6711
  ])
6483
6712
  ], 2);
6484
6713
  };
6485
6714
  }
6486
- }, [["__scopeId", "data-v-281b025e"]]);
6715
+ }), [["__scopeId", "data-v-35629158"]]);
6487
6716
  //#endregion
6488
6717
  //#region src/components/base/chat-bubble/chat-bubble.vue
6489
6718
  const _hoisted_1$30 = {
@@ -8414,10 +8643,10 @@ const _hoisted_10$3 = {
8414
8643
  };
8415
8644
  const _hoisted_11$3 = ["src", "alt"];
8416
8645
  const _hoisted_12$3 = ["onMouseenter", "onMouseleave"];
8417
- const _hoisted_13$2 = ["data-many"];
8418
- const _hoisted_14$1 = ["onClick"];
8419
- const _hoisted_15$1 = ["onClick"];
8420
- const _hoisted_16$1 = ["onClick"];
8646
+ const _hoisted_13$3 = ["data-many"];
8647
+ const _hoisted_14$2 = ["onClick"];
8648
+ const _hoisted_15$2 = ["onClick"];
8649
+ const _hoisted_16$2 = ["onClick"];
8421
8650
  var menu_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
8422
8651
  name: "YdMenu",
8423
8652
  __name: "menu",
@@ -8819,8 +9048,8 @@ var menu_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
8819
9048
  key: 1,
8820
9049
  class: normalizeClass([e("badge"), e(`badge--${sub.badgeType || "primary"}`)])
8821
9050
  }, toDisplayString(sub.badge), 3)) : createCommentVNode("v-if", true)
8822
- ], 10, _hoisted_14$1);
8823
- }), 128))], 10, _hoisted_13$2)], 2)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Level 2 item (standalone) "), createElementVNode("div", {
9051
+ ], 10, _hoisted_14$2);
9052
+ }), 128))], 10, _hoisted_13$3)], 2)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" Level 2 item (standalone) "), createElementVNode("div", {
8824
9053
  class: normalizeClass(e("dropdown-group")),
8825
9054
  onClick: ($event) => handleSelect(child)
8826
9055
  }, [createElementVNode("div", { class: normalizeClass([e("dropdown-item"), {
@@ -8836,7 +9065,7 @@ var menu_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
8836
9065
  key: 1,
8837
9066
  class: normalizeClass([e("badge"), e(`badge--${child.badgeType || "primary"}`)])
8838
9067
  }, toDisplayString(child.badge), 3)) : createCommentVNode("v-if", true)
8839
- ], 2)], 10, _hoisted_15$1)], 2112))], 64);
9068
+ ], 2)], 10, _hoisted_15$2)], 2112))], 64);
8840
9069
  }), 128))], 2)], 46, _hoisted_12$3)) : createCommentVNode("v-if", true)]),
8841
9070
  _: 2
8842
9071
  }, 1024)]))], 2112))
@@ -8849,7 +9078,7 @@ var menu_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
8849
9078
  }, [item.icon ? (openBlock(), createElementBlock("span", {
8850
9079
  key: 0,
8851
9080
  class: normalizeClass(e("icon"))
8852
- }, toDisplayString(item.icon), 3)) : createCommentVNode("v-if", true), createElementVNode("span", { class: normalizeClass(e("label")) }, toDisplayString(item.label), 3)], 10, _hoisted_16$1)], 2112))], 64);
9081
+ }, toDisplayString(item.icon), 3)) : createCommentVNode("v-if", true), createElementVNode("span", { class: normalizeClass(e("label")) }, toDisplayString(item.label), 3)], 10, _hoisted_16$2)], 2112))], 64);
8853
9082
  }), 128))], 10, _hoisted_1$22);
8854
9083
  };
8855
9084
  }
@@ -9273,12 +9502,14 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9273
9502
  "context-menu",
9274
9503
  "reorder",
9275
9504
  "drag-start",
9276
- "drag-end"
9505
+ "drag-end",
9506
+ "refresh"
9277
9507
  ],
9278
- setup(__props, { emit: __emit }) {
9508
+ setup(__props, { expose: __expose, emit: __emit }) {
9279
9509
  const slots = useSlots();
9280
9510
  /**
9281
- * Tab item interface
9511
+ * YdTabs Props
9512
+ * @description 标签页组件,支持多种样式和拖拽排序
9282
9513
  */
9283
9514
  const props = __props;
9284
9515
  const hasContent = computed(() => !!slots.default);
@@ -9406,17 +9637,38 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9406
9637
  contextMenuVisible.value = true;
9407
9638
  }
9408
9639
  function handleCtxClose() {
9409
- if (contextTab.value) emit("edit", "remove", contextTab.value);
9640
+ if (contextTab.value) {
9641
+ emit("context-menu", "close", contextTab.value);
9642
+ emit("edit", "remove", contextTab.value);
9643
+ }
9644
+ contextMenuVisible.value = false;
9645
+ }
9646
+ function handleCtxRefresh() {
9647
+ if (contextTab.value) {
9648
+ emit("context-menu", "refresh", contextTab.value);
9649
+ emit("refresh", contextTab.value);
9650
+ }
9651
+ contextMenuVisible.value = false;
9652
+ }
9653
+ function handleCtxCloseRight() {
9654
+ if (contextTab.value) {
9655
+ emit("context-menu", "closeRight", contextTab.value);
9656
+ closeRight(contextTab.value.key);
9657
+ }
9410
9658
  contextMenuVisible.value = false;
9411
9659
  }
9412
9660
  function handleCtxCloseOthers() {
9413
9661
  if (contextTab.value) {
9414
- for (const item of props.items) if (item.key !== contextTab.value.key && item.closable) emit("edit", "remove", item);
9662
+ emit("context-menu", "closeOthers", contextTab.value);
9663
+ const currentTabs = mergedTabs.value;
9664
+ for (const item of currentTabs) if (item.key !== contextTab.value.key && item.closable !== false) emit("edit", "remove", item);
9415
9665
  }
9416
9666
  contextMenuVisible.value = false;
9417
9667
  }
9418
9668
  function handleCtxCloseAll() {
9419
- for (const item of props.items) if (item.closable) emit("edit", "remove", item);
9669
+ emit("context-menu", "closeAll", contextTab.value);
9670
+ const currentTabs = mergedTabs.value;
9671
+ for (const item of currentTabs) if (item.closable !== false) emit("edit", "remove", item);
9420
9672
  contextMenuVisible.value = false;
9421
9673
  }
9422
9674
  function handleClickOutside() {
@@ -9446,6 +9698,14 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9446
9698
  tooltipVisible.value = false;
9447
9699
  hoveredTab.value = null;
9448
9700
  }
9701
+ function handleTooltipRefresh() {
9702
+ if (hoveredTab.value) emit("refresh", hoveredTab.value);
9703
+ hideTooltip();
9704
+ }
9705
+ function handleTooltipClose() {
9706
+ if (hoveredTab.value) emit("edit", "remove", hoveredTab.value);
9707
+ hideTooltip();
9708
+ }
9449
9709
  function handleDragStart(index, event) {
9450
9710
  dragIndex.value = index;
9451
9711
  if (event.dataTransfer) {
@@ -9662,6 +9922,111 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9662
9922
  watch(() => props.items, () => {
9663
9923
  setTimeout(checkScroll, 0);
9664
9924
  }, { deep: true });
9925
+ /**
9926
+ * 添加 Tab
9927
+ * @param tab - 新 Tab 配置
9928
+ */
9929
+ function addTab(tab) {
9930
+ const newTab = {
9931
+ label: tab.label,
9932
+ key: tab.key,
9933
+ closable: tab.closable ?? true,
9934
+ disabled: tab.disabled ?? false,
9935
+ icon: tab.icon,
9936
+ description: tab.description
9937
+ };
9938
+ if (mergedTabs.value.some((t) => t.key === newTab.key)) {
9939
+ console.warn(`[YdTabs] Tab with key "${newTab.key}" already exists`);
9940
+ return;
9941
+ }
9942
+ if (props.modelTabs.length > 0) emit("update:modelTabs", [...props.modelTabs, newTab]);
9943
+ else internalTabs.value = [...internalTabs.value, newTab];
9944
+ emit("update:modelValue", newTab.key);
9945
+ emit("edit", "add", newTab);
9946
+ saveToStorage(props.modelTabs.length > 0 ? [...props.modelTabs, newTab] : [...internalTabs.value, newTab]);
9947
+ }
9948
+ /**
9949
+ * 关闭 Tab
9950
+ * @param key - Tab 的 key
9951
+ */
9952
+ function closeTab(key) {
9953
+ const tab = mergedTabs.value.find((t) => t.key === key);
9954
+ if (!tab) {
9955
+ console.warn(`[YdTabs] Tab with key "${key}" not found`);
9956
+ return;
9957
+ }
9958
+ if (props.modelTabs.length > 0) emit("update:modelTabs", props.modelTabs.filter((t) => t.key !== key));
9959
+ else internalTabs.value = internalTabs.value.filter((t) => t.key !== key);
9960
+ emit("edit", "remove", tab);
9961
+ if (props.modelValue === key) {
9962
+ const remainingTabs = mergedTabs.value.filter((t) => t.key !== key);
9963
+ if (remainingTabs.length > 0) emit("update:modelValue", remainingTabs[remainingTabs.length - 1].key);
9964
+ }
9965
+ saveToStorage(props.modelTabs.length > 0 ? props.modelTabs.filter((t) => t.key !== key) : internalTabs.value);
9966
+ }
9967
+ /**
9968
+ * 刷新 Tab(触发 refresh 事件)
9969
+ * @param key - Tab 的 key,不传则刷新当前激活的 Tab
9970
+ */
9971
+ function refreshTab(key) {
9972
+ const targetKey = key || props.modelValue;
9973
+ const tab = mergedTabs.value.find((t) => t.key === targetKey);
9974
+ if (!tab) {
9975
+ console.warn(`[YdTabs] Tab with key "${targetKey}" not found`);
9976
+ return;
9977
+ }
9978
+ emit("refresh", tab);
9979
+ }
9980
+ /**
9981
+ * 获取所有 Tabs
9982
+ */
9983
+ function getTabs() {
9984
+ return [...mergedTabs.value];
9985
+ }
9986
+ /**
9987
+ * 设置激活 Tab
9988
+ * @param key - Tab 的 key
9989
+ */
9990
+ function setActiveTab(key) {
9991
+ const tab = mergedTabs.value.find((t) => t.key === key);
9992
+ if (!tab) {
9993
+ console.warn(`[YdTabs] Tab with key "${key}" not found`);
9994
+ return;
9995
+ }
9996
+ if (tab.disabled) {
9997
+ console.warn(`[YdTabs] Tab with key "${key}" is disabled`);
9998
+ return;
9999
+ }
10000
+ emit("update:modelValue", key);
10001
+ }
10002
+ /**
10003
+ * 关闭右侧所有 Tab
10004
+ * @param key - 基准 Tab 的 key
10005
+ */
10006
+ function closeRight(key) {
10007
+ const index = mergedTabs.value.findIndex((t) => t.key === key);
10008
+ if (index === -1) {
10009
+ console.warn(`[YdTabs] Tab with key "${key}" not found`);
10010
+ return;
10011
+ }
10012
+ const rightTabs = mergedTabs.value.slice(index + 1).filter((t) => t.closable !== false);
10013
+ if (rightTabs.length === 0) return;
10014
+ const rightKeys = rightTabs.map((t) => t.key);
10015
+ if (props.modelTabs.length > 0) emit("update:modelTabs", props.modelTabs.filter((t) => !rightKeys.includes(t.key)));
10016
+ else internalTabs.value = internalTabs.value.filter((t) => !rightKeys.includes(t.key));
10017
+ rightTabs.forEach((tab) => emit("edit", "remove", tab));
10018
+ saveToStorage(props.modelTabs.length > 0 ? props.modelTabs.filter((t) => !rightKeys.includes(t.key)) : internalTabs.value);
10019
+ }
10020
+ __expose({
10021
+ addTab,
10022
+ closeTab,
10023
+ refreshTab,
10024
+ getTabs,
10025
+ setActiveTab,
10026
+ closeRight,
10027
+ scrollLeft,
10028
+ scrollRight
10029
+ });
9665
10030
  onMounted(() => {
9666
10031
  document.addEventListener("click", handleClickOutside);
9667
10032
  setTimeout(checkScroll, 0);
@@ -9679,7 +10044,7 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9679
10044
  key: 0,
9680
10045
  class: normalizeClass([e("arrow"), e("arrow--left")]),
9681
10046
  onClick: scrollLeft
9682
- }, [..._cache[2] || (_cache[2] = [createElementVNode("svg", {
10047
+ }, [..._cache[3] || (_cache[3] = [createElementVNode("svg", {
9683
10048
  xmlns: "http://www.w3.org/2000/svg",
9684
10049
  width: "14",
9685
10050
  height: "14",
@@ -9740,7 +10105,7 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9740
10105
  key: 1,
9741
10106
  class: normalizeClass(e("close")),
9742
10107
  onClick: withModifiers(($event) => handleTabClose(tab), ["stop"])
9743
- }, [..._cache[3] || (_cache[3] = [createElementVNode("svg", {
10108
+ }, [..._cache[4] || (_cache[4] = [createElementVNode("svg", {
9744
10109
  xmlns: "http://www.w3.org/2000/svg",
9745
10110
  width: "12",
9746
10111
  height: "12",
@@ -9767,7 +10132,7 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9767
10132
  key: 1,
9768
10133
  class: normalizeClass(e("add")),
9769
10134
  onClick: handleAdd
9770
- }, [..._cache[4] || (_cache[4] = [createElementVNode("svg", {
10135
+ }, [..._cache[5] || (_cache[5] = [createElementVNode("svg", {
9771
10136
  xmlns: "http://www.w3.org/2000/svg",
9772
10137
  width: "14",
9773
10138
  height: "14",
@@ -9794,7 +10159,7 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9794
10159
  key: 1,
9795
10160
  class: normalizeClass([e("arrow"), e("arrow--right")]),
9796
10161
  onClick: scrollRight
9797
- }, [..._cache[5] || (_cache[5] = [createElementVNode("svg", {
10162
+ }, [..._cache[6] || (_cache[6] = [createElementVNode("svg", {
9798
10163
  xmlns: "http://www.w3.org/2000/svg",
9799
10164
  width: "14",
9800
10165
  height: "14",
@@ -9816,10 +10181,18 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9816
10181
  style: normalizeStyle(contextMenuStyle.value),
9817
10182
  onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
9818
10183
  }, [
10184
+ createElementVNode("div", {
10185
+ class: normalizeClass(e("ctx-item")),
10186
+ onClick: handleCtxRefresh
10187
+ }, "刷新", 2),
9819
10188
  createElementVNode("div", {
9820
10189
  class: normalizeClass(e("ctx-item")),
9821
10190
  onClick: handleCtxClose
9822
10191
  }, "关闭", 2),
10192
+ createElementVNode("div", {
10193
+ class: normalizeClass(e("ctx-item")),
10194
+ onClick: handleCtxCloseRight
10195
+ }, "关闭右侧", 2),
9823
10196
  createElementVNode("div", {
9824
10197
  class: normalizeClass(e("ctx-item")),
9825
10198
  onClick: handleCtxCloseOthers
@@ -9837,15 +10210,61 @@ var tabs_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineC
9837
10210
  e("tooltip--visible"),
9838
10211
  effectiveTheme.value === "dark" ? e("tooltip--dark") : ""
9839
10212
  ]),
9840
- style: normalizeStyle(tooltipStyle.value)
9841
- }, [createElementVNode("div", { class: normalizeClass(e("tooltip-title")) }, toDisplayString(hoveredTab.value?.label), 3), hoveredTab.value?.description ? (openBlock(), createElementBlock("div", {
9842
- key: 0,
9843
- class: normalizeClass(e("tooltip-desc"))
9844
- }, toDisplayString(hoveredTab.value.description), 3)) : createCommentVNode("v-if", true)], 6)) : createCommentVNode("v-if", true)]))
10213
+ style: normalizeStyle(tooltipStyle.value),
10214
+ onClick: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"]))
10215
+ }, [
10216
+ createElementVNode("div", { class: normalizeClass(e("tooltip-title")) }, toDisplayString(hoveredTab.value?.label), 3),
10217
+ hoveredTab.value?.description ? (openBlock(), createElementBlock("div", {
10218
+ key: 0,
10219
+ class: normalizeClass(e("tooltip-desc"))
10220
+ }, toDisplayString(hoveredTab.value.description), 3)) : createCommentVNode("v-if", true),
10221
+ createElementVNode("div", { class: normalizeClass(e("tooltip-actions")) }, [createElementVNode("span", {
10222
+ class: normalizeClass(e("tooltip-action")),
10223
+ onClick: handleTooltipRefresh
10224
+ }, [..._cache[7] || (_cache[7] = [createElementVNode("svg", {
10225
+ xmlns: "http://www.w3.org/2000/svg",
10226
+ width: "12",
10227
+ height: "12",
10228
+ viewBox: "0 0 24 24",
10229
+ fill: "none",
10230
+ stroke: "currentColor",
10231
+ "stroke-width": "2",
10232
+ "stroke-linecap": "round",
10233
+ "stroke-linejoin": "round"
10234
+ }, [
10235
+ createElementVNode("polyline", { points: "23 4 23 10 17 10" }),
10236
+ createElementVNode("polyline", { points: "1 20 1 14 7 14" }),
10237
+ createElementVNode("path", { d: "M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" })
10238
+ ], -1), createTextVNode(" 刷新 ", -1)])], 2), hoveredTab.value?.closable ? (openBlock(), createElementBlock("span", {
10239
+ key: 0,
10240
+ class: normalizeClass(e("tooltip-action")),
10241
+ onClick: handleTooltipClose
10242
+ }, [..._cache[8] || (_cache[8] = [createElementVNode("svg", {
10243
+ xmlns: "http://www.w3.org/2000/svg",
10244
+ width: "12",
10245
+ height: "12",
10246
+ viewBox: "0 0 24 24",
10247
+ fill: "none",
10248
+ stroke: "currentColor",
10249
+ "stroke-width": "2",
10250
+ "stroke-linecap": "round",
10251
+ "stroke-linejoin": "round"
10252
+ }, [createElementVNode("line", {
10253
+ x1: "18",
10254
+ y1: "6",
10255
+ x2: "6",
10256
+ y2: "18"
10257
+ }), createElementVNode("line", {
10258
+ x1: "6",
10259
+ y1: "6",
10260
+ x2: "18",
10261
+ y2: "18"
10262
+ })], -1), createTextVNode(" 关闭 ", -1)])], 2)) : createCommentVNode("v-if", true)], 2)
10263
+ ], 6)) : createCommentVNode("v-if", true)]))
9845
10264
  ], 2);
9846
10265
  };
9847
10266
  }
9848
- }), [["__scopeId", "data-v-783bcbbc"]]);
10267
+ }), [["__scopeId", "data-v-c08e5670"]]);
9849
10268
  //#endregion
9850
10269
  //#region src/components/navigation/dropdown/dropdown.vue
9851
10270
  const _hoisted_1$19 = [
@@ -9869,7 +10288,7 @@ var dropdown_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
9869
10288
  triggerLabel: { default: "打开菜单" }
9870
10289
  },
9871
10290
  emits: ["select"],
9872
- setup(__props, { emit: __emit }) {
10291
+ setup(__props, { expose: __expose, emit: __emit }) {
9873
10292
  const props = __props;
9874
10293
  const emit = __emit;
9875
10294
  const visible = ref(false);
@@ -9977,6 +10396,14 @@ var dropdown_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
9977
10396
  document.removeEventListener("click", handleClickOutside);
9978
10397
  window.removeEventListener("scroll", debouncedScrollHandler, true);
9979
10398
  });
10399
+ __expose({
10400
+ open: () => {
10401
+ visible.value = true;
10402
+ },
10403
+ close: () => {
10404
+ visible.value = false;
10405
+ }
10406
+ });
9980
10407
  return (_ctx, _cache) => {
9981
10408
  return openBlock(), createElementBlock("div", {
9982
10409
  ref_key: "triggerRef",
@@ -10017,7 +10444,7 @@ var dropdown_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ def
10017
10444
  })]))], 42, _hoisted_1$19);
10018
10445
  };
10019
10446
  }
10020
- }), [["__scopeId", "data-v-14532ff3"]]);
10447
+ }), [["__scopeId", "data-v-eeb76db2"]]);
10021
10448
  //#endregion
10022
10449
  //#region src/components/layout/layout/layout-header.vue
10023
10450
  const _hoisted_1$18 = ["title"];
@@ -10037,7 +10464,11 @@ var layout_header_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ *
10037
10464
  type: Boolean,
10038
10465
  default: false
10039
10466
  },
10040
- headerHeight: { default: 56 }
10467
+ headerHeight: { default: 56 },
10468
+ showSettings: {
10469
+ type: Boolean,
10470
+ default: true
10471
+ }
10041
10472
  },
10042
10473
  emits: [
10043
10474
  "tab-change",
@@ -10360,7 +10791,7 @@ var layout_header_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ *
10360
10791
  _: 1
10361
10792
  })) : createCommentVNode("v-if", true)], true),
10362
10793
  createCommentVNode(" 设置 "),
10363
- renderSlot(_ctx.$slots, "settings", {}, () => [createElementVNode("div", {
10794
+ __props.showSettings ? renderSlot(_ctx.$slots, "settings", { key: 0 }, () => [createElementVNode("div", {
10364
10795
  class: normalizeClass(el("action-btn")),
10365
10796
  onClick: _cache[2] || (_cache[2] = ($event) => _ctx.$emit("settings-click"))
10366
10797
  }, [..._cache[7] || (_cache[7] = [createElementVNode("svg", {
@@ -10377,7 +10808,7 @@ var layout_header_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ *
10377
10808
  cx: "12",
10378
10809
  cy: "12",
10379
10810
  r: "3"
10380
- }), createElementVNode("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z" })], -1)])], 2)], true)
10811
+ }), createElementVNode("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z" })], -1)])], 2)], true) : createCommentVNode("v-if", true)
10381
10812
  ], 2)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [createCommentVNode(" 移动端:仅头像 "), createElementVNode("div", { class: normalizeClass(el("user")) }, [__props.userInfo ? (openBlock(), createBlock(dropdown_default, {
10382
10813
  key: 0,
10383
10814
  items: mobileUserMenuItems.value,
@@ -10398,7 +10829,7 @@ var layout_header_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ *
10398
10829
  ], 6);
10399
10830
  };
10400
10831
  }
10401
- }), [["__scopeId", "data-v-1d3c26d9"]]);
10832
+ }), [["__scopeId", "data-v-f6d06be3"]]);
10402
10833
  var layout_content_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
10403
10834
  name: "YdLayoutContent",
10404
10835
  __name: "layout-content",
@@ -10613,7 +11044,7 @@ var drawer_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
10613
11044
  "open",
10614
11045
  "close"
10615
11046
  ],
10616
- setup(__props, { emit: __emit }) {
11047
+ setup(__props, { expose: __expose, emit: __emit }) {
10617
11048
  /**
10618
11049
  * YdDrawer Props
10619
11050
  * @description 抽屉组件,从一侧滑入的对话框
@@ -10657,6 +11088,14 @@ var drawer_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
10657
11088
  document.body.style.overflow = "";
10658
11089
  previousFocus.value?.focus();
10659
11090
  }
11091
+ __expose({
11092
+ open: () => {
11093
+ visibleValue.value = true;
11094
+ },
11095
+ close: () => {
11096
+ visibleValue.value = false;
11097
+ }
11098
+ });
10660
11099
  return (_ctx, _cache) => {
10661
11100
  return openBlock(), createBlock(Teleport, {
10662
11101
  to: "body",
@@ -10721,7 +11160,7 @@ var drawer_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
10721
11160
  })], 8, ["disabled"]);
10722
11161
  };
10723
11162
  }
10724
- }), [["__scopeId", "data-v-94becd9a"]]);
11163
+ }), [["__scopeId", "data-v-6c73aaee"]]);
10725
11164
  //#endregion
10726
11165
  //#region src/components/layout/layout/layout-types.ts
10727
11166
  /** 默认尺寸 */
@@ -10730,20 +11169,197 @@ const DEFAULT_LAYOUT_SIZE = {
10730
11169
  siderCollapsedWidth: 48,
10731
11170
  headerHeight: 40
10732
11171
  };
11172
+ /**
11173
+ * 默认设置项列表
11174
+ */
11175
+ const DEFAULT_SETTINGS = [
11176
+ {
11177
+ key: "theme",
11178
+ label: "主题",
11179
+ type: "theme"
11180
+ },
11181
+ {
11182
+ key: "siderWidth",
11183
+ label: "侧边栏宽度",
11184
+ type: "siderWidth"
11185
+ },
11186
+ {
11187
+ key: "collapsed",
11188
+ label: "折叠侧边栏",
11189
+ type: "collapsed"
11190
+ },
11191
+ {
11192
+ key: "waterfall",
11193
+ label: "菜单模式",
11194
+ type: "waterfall"
11195
+ },
11196
+ {
11197
+ key: "footerText",
11198
+ label: "底部支持",
11199
+ type: "footerText"
11200
+ }
11201
+ ];
11202
+ /**
11203
+ * 最小化设置
11204
+ */
11205
+ const MINIMAL_SETTINGS = [{
11206
+ key: "theme",
11207
+ label: "主题",
11208
+ type: "theme"
11209
+ }];
11210
+ /**
11211
+ * 完整设置
11212
+ */
11213
+ const FULL_SETTINGS = [
11214
+ {
11215
+ key: "theme",
11216
+ label: "主题",
11217
+ type: "theme"
11218
+ },
11219
+ {
11220
+ key: "siderWidth",
11221
+ label: "侧边栏宽度",
11222
+ type: "siderWidth"
11223
+ },
11224
+ {
11225
+ key: "collapsed",
11226
+ label: "折叠侧边栏",
11227
+ type: "collapsed"
11228
+ },
11229
+ {
11230
+ key: "waterfall",
11231
+ label: "菜单模式",
11232
+ type: "waterfall"
11233
+ },
11234
+ {
11235
+ key: "footerText",
11236
+ label: "底部支持",
11237
+ type: "footerText"
11238
+ }
11239
+ ];
11240
+ /**
11241
+ * 设置预设映射
11242
+ */
11243
+ const SETTINGS_PRESETS = {
11244
+ default: DEFAULT_SETTINGS,
11245
+ minimal: MINIMAL_SETTINGS,
11246
+ full: FULL_SETTINGS,
11247
+ none: []
11248
+ };
11249
+ /**
11250
+ * 示例菜单数据 - 通用管理后台
11251
+ */
11252
+ const DEFAULT_MENU_ITEMS = [
11253
+ {
11254
+ key: "dashboard",
11255
+ label: "工作台",
11256
+ icon: "home",
11257
+ path: "/dashboard"
11258
+ },
11259
+ {
11260
+ key: "system",
11261
+ label: "系统管理",
11262
+ icon: "setting",
11263
+ children: [
11264
+ {
11265
+ key: "system-user",
11266
+ label: "用户管理",
11267
+ path: "/system/user"
11268
+ },
11269
+ {
11270
+ key: "system-role",
11271
+ label: "角色管理",
11272
+ path: "/system/role"
11273
+ },
11274
+ {
11275
+ key: "system-menu",
11276
+ label: "菜单管理",
11277
+ path: "/system/menu"
11278
+ }
11279
+ ]
11280
+ },
11281
+ {
11282
+ key: "order",
11283
+ label: "订单管理",
11284
+ icon: "order",
11285
+ children: [{
11286
+ key: "order-list",
11287
+ label: "订单列表",
11288
+ path: "/order/list"
11289
+ }, {
11290
+ key: "order-refund",
11291
+ label: "退款管理",
11292
+ path: "/order/refund"
11293
+ }]
11294
+ }
11295
+ ];
11296
+ /**
11297
+ * 最小化菜单
11298
+ */
11299
+ const MINIMAL_MENU_ITEMS = [{
11300
+ key: "home",
11301
+ label: "首页",
11302
+ icon: "home",
11303
+ path: "/"
11304
+ }];
11305
+ /**
11306
+ * 完整菜单
11307
+ */
11308
+ const FULL_MENU_ITEMS = DEFAULT_MENU_ITEMS;
11309
+ /**
11310
+ * 菜单预设映射
11311
+ */
11312
+ const MENU_PRESETS = {
11313
+ default: DEFAULT_MENU_ITEMS,
11314
+ minimal: MINIMAL_MENU_ITEMS,
11315
+ full: FULL_MENU_ITEMS,
11316
+ none: []
11317
+ };
11318
+ /**
11319
+ * 示例标签页数据
11320
+ */
11321
+ const DEFAULT_TABS = [{
11322
+ key: "home",
11323
+ label: "工作台",
11324
+ path: "/dashboard",
11325
+ closable: false
11326
+ }];
11327
+ /**
11328
+ * 最小化标签页
11329
+ */
11330
+ const MINIMAL_TABS = [];
11331
+ /**
11332
+ * 完整标签页
11333
+ */
11334
+ const FULL_TABS = DEFAULT_TABS;
11335
+ /**
11336
+ * 标签页预设映射
11337
+ */
11338
+ const TABS_PRESETS = {
11339
+ default: DEFAULT_TABS,
11340
+ minimal: MINIMAL_TABS,
11341
+ full: FULL_TABS,
11342
+ none: []
11343
+ };
10733
11344
  //#endregion
10734
11345
  //#region src/components/layout/layout/layout.vue
10735
11346
  const _hoisted_1$15 = ["data-theme"];
10736
11347
  const _hoisted_2$10 = { class: "yd-layout-settings" };
10737
11348
  const _hoisted_3$7 = { class: "yd-layout-settings__item" };
10738
11349
  const _hoisted_4$6 = { class: "yd-layout-settings__row" };
10739
- const _hoisted_5$3 = { class: "yd-layout-settings__item" };
10740
- const _hoisted_6$3 = { class: "yd-layout-settings__row" };
10741
- const _hoisted_7$2 = { class: "yd-layout-settings__item" };
10742
- const _hoisted_8$2 = { class: "yd-layout-settings__row" };
11350
+ const _hoisted_5$3 = { class: "yd-layout-settings__label" };
11351
+ const _hoisted_6$3 = { class: "yd-layout-settings__item" };
11352
+ const _hoisted_7$2 = { class: "yd-layout-settings__row" };
11353
+ const _hoisted_8$2 = { class: "yd-layout-settings__label" };
10743
11354
  const _hoisted_9$2 = { class: "yd-layout-settings__item" };
10744
11355
  const _hoisted_10$2 = { class: "yd-layout-settings__row" };
10745
- const _hoisted_11$2 = { class: "yd-layout-settings__item" };
10746
- const _hoisted_12$2 = { class: "yd-layout-settings__row" };
11356
+ const _hoisted_11$2 = { class: "yd-layout-settings__label" };
11357
+ const _hoisted_12$2 = { class: "yd-layout-settings__item" };
11358
+ const _hoisted_13$2 = { class: "yd-layout-settings__row" };
11359
+ const _hoisted_14$1 = { class: "yd-layout-settings__label" };
11360
+ const _hoisted_15$1 = { class: "yd-layout-settings__item" };
11361
+ const _hoisted_16$1 = { class: "yd-layout-settings__row" };
11362
+ const _hoisted_17$1 = { class: "yd-layout-settings__label" };
10747
11363
  const MOBILE_BREAKPOINT = 768;
10748
11364
  var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
10749
11365
  name: "YdLayout",
@@ -10793,7 +11409,16 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
10793
11409
  type: Boolean,
10794
11410
  default: true
10795
11411
  },
10796
- watermark: { default: void 0 }
11412
+ watermark: { default: void 0 },
11413
+ showSettings: {
11414
+ type: Boolean,
11415
+ default: true
11416
+ },
11417
+ settings: { default: () => DEFAULT_SETTINGS },
11418
+ menuPreset: {},
11419
+ tabsPreset: {},
11420
+ settingsPreset: {},
11421
+ preset: {}
10797
11422
  },
10798
11423
  emits: [
10799
11424
  "update:collapsed",
@@ -10847,6 +11472,25 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
10847
11472
  const mergedWaterfall = computed(() => internalWaterfall.value);
10848
11473
  const mergedPopupAlign = computed(() => internalPopupAlign.value);
10849
11474
  const mergedFooterText = computed(() => internalFooterText.value);
11475
+ const resolvedMenuItems = computed(() => {
11476
+ if (props.menuItems && props.menuItems.length > 0) return props.menuItems;
11477
+ const menuPreset = props.menuPreset || props.preset;
11478
+ if (menuPreset) return MENU_PRESETS[menuPreset] || [];
11479
+ return [];
11480
+ });
11481
+ const resolvedTabs = computed(() => {
11482
+ if (props.tabs && props.tabs.length > 0) return props.tabs;
11483
+ if (props.modelTabs && props.modelTabs.length > 0) return props.modelTabs;
11484
+ const tabsPresetValue = props.tabsPreset || props.preset;
11485
+ if (tabsPresetValue) return TABS_PRESETS[tabsPresetValue] || [];
11486
+ return [];
11487
+ });
11488
+ const resolvedSettings = computed(() => {
11489
+ if (props.settings && props.settings.length > 0) return props.settings;
11490
+ const settingsPresetValue = props.settingsPreset || props.preset;
11491
+ if (settingsPresetValue) return SETTINGS_PRESETS[settingsPresetValue] || DEFAULT_SETTINGS;
11492
+ return DEFAULT_SETTINGS;
11493
+ });
10850
11494
  const layoutClasses = computed(() => cn("yd-layout", `yd-layout--${mergedTheme.value}`, mergedCollapsed.value && "yd-layout--collapsed"));
10851
11495
  const mainClasses = computed(() => cn("yd-layout__main"));
10852
11496
  const mainStyle = computed(() => ({ marginLeft: `${siderCurrentWidth.value}px` }));
@@ -10958,7 +11602,7 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
10958
11602
  title: __props.title,
10959
11603
  collapsed: mergedCollapsed.value,
10960
11604
  theme: mergedTheme.value,
10961
- "menu-items": __props.menuItems,
11605
+ "menu-items": resolvedMenuItems.value,
10962
11606
  "active-key": __props.activeKey,
10963
11607
  "collapsed-width": __props.siderCollapsedWidth,
10964
11608
  "expanded-width": mergedSiderWidth.value,
@@ -11002,14 +11646,15 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11002
11646
  __props.hasHeader ? (openBlock(), createBlock(layout_header_default, {
11003
11647
  key: 0,
11004
11648
  theme: mergedTheme.value,
11005
- tabs: __props.tabs,
11006
- "model-tabs": __props.modelTabs,
11649
+ tabs: resolvedTabs.value,
11650
+ "model-tabs": resolvedTabs.value,
11007
11651
  "active-tab": __props.activeTab,
11008
11652
  "user-info": __props.userInfo,
11009
11653
  "sider-width": mergedCollapsed.value ? __props.siderCollapsedWidth : mergedSiderWidth.value,
11010
11654
  "header-height": mergedHeaderHeight.value,
11011
11655
  "is-mobile": isMobileMode.value,
11012
11656
  fixed: __props.headerFixed,
11657
+ "show-settings": __props.showSettings,
11013
11658
  onTabChange: handleTabChange,
11014
11659
  onTabClose: handleTabClose,
11015
11660
  onTabAdd: handleTabAdd,
@@ -11032,7 +11677,8 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11032
11677
  "sider-width",
11033
11678
  "header-height",
11034
11679
  "is-mobile",
11035
- "fixed"
11680
+ "fixed",
11681
+ "show-settings"
11036
11682
  ])) : createCommentVNode("v-if", true),
11037
11683
  createCommentVNode(" 内容区 "),
11038
11684
  __props.hasContent && __props.watermark ? (openBlock(), createBlock(watermark_default, normalizeProps(mergeProps({ key: 1 }, __props.watermark)), {
@@ -11064,9 +11710,8 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11064
11710
  closable: true,
11065
11711
  "mask-closable": true
11066
11712
  }, {
11067
- default: withCtx(() => [createElementVNode("div", _hoisted_2$10, [
11068
- createCommentVNode(" 主题切换 "),
11069
- createElementVNode("div", _hoisted_3$7, [createElementVNode("div", _hoisted_4$6, [_cache[15] || (_cache[15] = createElementVNode("span", { class: "yd-layout-settings__label" }, "主题", -1)), createVNode(space_default, {
11713
+ default: withCtx(() => [createElementVNode("div", _hoisted_2$10, [(openBlock(true), createElementBlock(Fragment, null, renderList(resolvedSettings.value, (item) => {
11714
+ return openBlock(), createElementBlock(Fragment, { key: item.key }, [createCommentVNode(" 自定义设置项 "), item.type === "custom" && item.slot ? renderSlot(_ctx.$slots, item.slot, { key: 0 }, void 0, true) : item.type === "theme" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" 主题设置 "), createElementVNode("div", _hoisted_3$7, [createElementVNode("div", _hoisted_4$6, [createElementVNode("span", _hoisted_5$3, toDisplayString(item.label), 1), createVNode(space_default, {
11070
11715
  size: 4,
11071
11716
  direction: "horizontal"
11072
11717
  }, {
@@ -11097,9 +11742,7 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11097
11742
  }, 8, ["variant"])
11098
11743
  ]),
11099
11744
  _: 1
11100
- })])]),
11101
- createCommentVNode(" 侧边栏宽度 "),
11102
- createElementVNode("div", _hoisted_5$3, [createElementVNode("div", _hoisted_6$3, [_cache[19] || (_cache[19] = createElementVNode("span", { class: "yd-layout-settings__label" }, "侧边栏宽度", -1)), createVNode(space_default, {
11745
+ })])])], 2112)) : item.type === "siderWidth" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" 侧边栏宽度设置 "), createElementVNode("div", _hoisted_6$3, [createElementVNode("div", _hoisted_7$2, [createElementVNode("span", _hoisted_8$2, toDisplayString(item.label), 1), createVNode(space_default, {
11103
11746
  size: 4,
11104
11747
  direction: "horizontal"
11105
11748
  }, {
@@ -11109,7 +11752,7 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11109
11752
  variant: internalSiderWidth.value === 160 ? "primary" : "text",
11110
11753
  onClick: _cache[3] || (_cache[3] = ($event) => internalSiderWidth.value = 160)
11111
11754
  }, {
11112
- default: withCtx(() => [..._cache[16] || (_cache[16] = [createTextVNode(" 窄 ", -1)])]),
11755
+ default: withCtx(() => [..._cache[15] || (_cache[15] = [createTextVNode(" 窄 ", -1)])]),
11113
11756
  _: 1
11114
11757
  }, 8, ["variant"]),
11115
11758
  createVNode(button_default, {
@@ -11117,7 +11760,7 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11117
11760
  variant: internalSiderWidth.value === 200 ? "primary" : "text",
11118
11761
  onClick: _cache[4] || (_cache[4] = ($event) => internalSiderWidth.value = 200)
11119
11762
  }, {
11120
- default: withCtx(() => [..._cache[17] || (_cache[17] = [createTextVNode(" 中 ", -1)])]),
11763
+ default: withCtx(() => [..._cache[16] || (_cache[16] = [createTextVNode(" 中 ", -1)])]),
11121
11764
  _: 1
11122
11765
  }, 8, ["variant"]),
11123
11766
  createVNode(button_default, {
@@ -11125,19 +11768,15 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11125
11768
  variant: internalSiderWidth.value === 240 ? "primary" : "text",
11126
11769
  onClick: _cache[5] || (_cache[5] = ($event) => internalSiderWidth.value = 240)
11127
11770
  }, {
11128
- default: withCtx(() => [..._cache[18] || (_cache[18] = [createTextVNode(" 宽 ", -1)])]),
11771
+ default: withCtx(() => [..._cache[17] || (_cache[17] = [createTextVNode(" 宽 ", -1)])]),
11129
11772
  _: 1
11130
11773
  }, 8, ["variant"])
11131
11774
  ]),
11132
11775
  _: 1
11133
- })])]),
11134
- createCommentVNode(" 折叠侧边栏 "),
11135
- createElementVNode("div", _hoisted_7$2, [createElementVNode("div", _hoisted_8$2, [_cache[20] || (_cache[20] = createElementVNode("span", { class: "yd-layout-settings__label" }, "折叠侧边栏", -1)), createVNode(switch_default, {
11776
+ })])])], 2112)) : item.type === "collapsed" ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [createCommentVNode(" 折叠侧边栏设置 "), createElementVNode("div", _hoisted_9$2, [createElementVNode("div", _hoisted_10$2, [createElementVNode("span", _hoisted_11$2, toDisplayString(item.label), 1), createVNode(switch_default, {
11136
11777
  modelValue: internalCollapsed.value,
11137
11778
  "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => internalCollapsed.value = $event)
11138
- }, null, 8, ["modelValue"])])]),
11139
- createCommentVNode(" 菜单模式 "),
11140
- createElementVNode("div", _hoisted_9$2, [createElementVNode("div", _hoisted_10$2, [_cache[24] || (_cache[24] = createElementVNode("span", { class: "yd-layout-settings__label" }, "菜单模式", -1)), createVNode(space_default, {
11779
+ }, null, 8, ["modelValue"])])])], 2112)) : item.type === "waterfall" ? (openBlock(), createElementBlock(Fragment, { key: 4 }, [createCommentVNode(" 菜单模式设置 "), createElementVNode("div", _hoisted_12$2, [createElementVNode("div", _hoisted_13$2, [createElementVNode("span", _hoisted_14$1, toDisplayString(item.label), 1), createVNode(space_default, {
11141
11780
  size: 4,
11142
11781
  direction: "horizontal"
11143
11782
  }, {
@@ -11147,7 +11786,7 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11147
11786
  variant: !internalWaterfall.value ? "primary" : "text",
11148
11787
  onClick: _cache[7] || (_cache[7] = ($event) => internalWaterfall.value = false)
11149
11788
  }, {
11150
- default: withCtx(() => [..._cache[21] || (_cache[21] = [createTextVNode(" 传统 ", -1)])]),
11789
+ default: withCtx(() => [..._cache[18] || (_cache[18] = [createTextVNode(" 传��� ", -1)])]),
11151
11790
  _: 1
11152
11791
  }, 8, ["variant"]),
11153
11792
  createVNode(button_default, {
@@ -11158,7 +11797,7 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11158
11797
  internalPopupAlign.value = "container";
11159
11798
  })
11160
11799
  }, {
11161
- default: withCtx(() => [..._cache[22] || (_cache[22] = [createTextVNode(" 容器 ", -1)])]),
11800
+ default: withCtx(() => [..._cache[19] || (_cache[19] = [createTextVNode(" 容器 ", -1)])]),
11162
11801
  _: 1
11163
11802
  }, 8, ["variant"]),
11164
11803
  createVNode(button_default, {
@@ -11169,27 +11808,25 @@ var layout_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defin
11169
11808
  internalPopupAlign.value = "trigger";
11170
11809
  })
11171
11810
  }, {
11172
- default: withCtx(() => [..._cache[23] || (_cache[23] = [createTextVNode(" 浮动 ", -1)])]),
11811
+ default: withCtx(() => [..._cache[20] || (_cache[20] = [createTextVNode(" 浮动 ", -1)])]),
11173
11812
  _: 1
11174
11813
  }, 8, ["variant"])
11175
11814
  ]),
11176
11815
  _: 1
11177
- })])]),
11178
- createCommentVNode(" 底部支持 "),
11179
- createElementVNode("div", _hoisted_11$2, [createElementVNode("div", _hoisted_12$2, [_cache[25] || (_cache[25] = createElementVNode("span", { class: "yd-layout-settings__label" }, "底部支持", -1)), createVNode(input_default, {
11816
+ })])])], 2112)) : item.type === "footerText" ? (openBlock(), createElementBlock(Fragment, { key: 5 }, [createCommentVNode(" 底部支持设置 "), createElementVNode("div", _hoisted_15$1, [createElementVNode("div", _hoisted_16$1, [createElementVNode("span", _hoisted_17$1, toDisplayString(item.label), 1), createVNode(input_default, {
11180
11817
  modelValue: internalFooterText.value,
11181
11818
  "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => internalFooterText.value = $event),
11182
11819
  placeholder: "显示在侧边栏底部",
11183
11820
  clearable: "",
11184
11821
  style: { "width": "140px" }
11185
- }, null, 8, ["modelValue"])])])
11186
- ])]),
11187
- _: 1
11822
+ }, null, 8, ["modelValue"])])])], 2112)) : createCommentVNode("v-if", true)], 64);
11823
+ }), 128))])]),
11824
+ _: 3
11188
11825
  }, 8, ["modelValue"])
11189
11826
  ], 14, _hoisted_1$15);
11190
11827
  };
11191
11828
  }
11192
- }), [["__scopeId", "data-v-2a960b8a"]]);
11829
+ }), [["__scopeId", "data-v-7b7fc384"]]);
11193
11830
  var card_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
11194
11831
  name: "YdCard",
11195
11832
  inheritAttrs: false,
@@ -13692,7 +14329,7 @@ var modal_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
13692
14329
  "confirm",
13693
14330
  "cancel"
13694
14331
  ],
13695
- setup(__props, { emit: __emit }) {
14332
+ setup(__props, { expose: __expose, emit: __emit }) {
13696
14333
  /**
13697
14334
  * YdModal Props
13698
14335
  * @description 模态对话框组件,支持聚焦管理、ARIA 属性和键盘导航
@@ -13742,6 +14379,14 @@ var modal_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
13742
14379
  document.body.style.overflow = "";
13743
14380
  previousFocus.value?.focus();
13744
14381
  }
14382
+ __expose({
14383
+ open: () => {
14384
+ visibleValue.value = true;
14385
+ },
14386
+ close: () => {
14387
+ visibleValue.value = false;
14388
+ }
14389
+ });
13745
14390
  return (_ctx, _cache) => {
13746
14391
  return openBlock(), createBlock(Teleport, {
13747
14392
  to: "body",
@@ -13819,7 +14464,7 @@ var modal_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ define
13819
14464
  })], 8, ["disabled"]);
13820
14465
  };
13821
14466
  }
13822
- }), [["__scopeId", "data-v-9c8fa661"]]);
14467
+ }), [["__scopeId", "data-v-23e0a13d"]]);
13823
14468
  var message_default = /* @__PURE__ */ export_helper_default(/* @__PURE__ */ defineComponent({
13824
14469
  name: "YdMessage",
13825
14470
  __name: "message",
@@ -15121,25 +15766,6 @@ function useLoading(initialValue = false) {
15121
15766
  };
15122
15767
  }
15123
15768
  //#endregion
15124
- //#region src/types/index.ts
15125
- /** 是否为数组 */
15126
- const isArray = Array.isArray;
15127
- /** 是否为对象 */
15128
- const isObject = (val) => val !== null && typeof val === "object" && !isArray(val);
15129
- /** 是否为日期 */
15130
- const isDate = (val) => val instanceof Date;
15131
- /** 是否为函数 */
15132
- const isFunction = (val) => typeof val === "function";
15133
- /** 是否为空 */
15134
- const isEmpty = (val) => {
15135
- if (val === null || val === void 0) return true;
15136
- if (isArray(val) || typeof val === "string") return val.length === 0;
15137
- if (isObject(val)) return Object.keys(val).length === 0;
15138
- return false;
15139
- };
15140
- /** 是否为 Promise */
15141
- const isPromise = (val) => val instanceof Promise || typeof val === "object" && typeof val?.["then"] === "function";
15142
- //#endregion
15143
15769
  //#region src/styles/themes/index.ts
15144
15770
  /**
15145
15771
  * Theme definitions
@@ -15166,6 +15792,18 @@ const themes = {
15166
15792
  } }
15167
15793
  };
15168
15794
  //#endregion
15795
+ //#region src/styles/tokens.ts
15796
+ /** z-index层级常量 (供外部使用) */
15797
+ const Z_INDEX = {
15798
+ DROPDOWN: 1e3,
15799
+ STICKY: 1020,
15800
+ FIXED: 1030,
15801
+ MODAL_BACKDROP: 1040,
15802
+ MODAL: 1050,
15803
+ POPOVER: 1060,
15804
+ TOOLTIP: 1070
15805
+ };
15806
+ //#endregion
15169
15807
  //#region src/constants/index.ts
15170
15808
  /**
15171
15809
  * Application constants
@@ -15177,20 +15815,6 @@ const COMPONENT_PREFIX = "Yd";
15177
15815
  const CSS_PREFIX = "yd";
15178
15816
  /** 默认动画时长 (ms) */
15179
15817
  const ANIMATION_DURATION = 200;
15180
- /** 默认防抖延迟 (ms) */
15181
- const DEBOUNCE_DELAY = 300;
15182
- /** 默认节流间隔 (ms) */
15183
- const THROTTLE_DELAY = 300;
15184
- /** z-index 层级 */
15185
- const Z_INDEX = {
15186
- DROPDOWN: 1e3,
15187
- STICKY: 1020,
15188
- FIXED: 1030,
15189
- MODAL_BACKDROP: 1040,
15190
- MODAL: 1050,
15191
- POPOVER: 1060,
15192
- TOOLTIP: 1070
15193
- };
15194
15818
  //#endregion
15195
15819
  //#region src/stores/plugins/secure-storage.ts
15196
15820
  const CONFIG = {
@@ -16108,51 +16732,29 @@ function replace(path) {
16108
16732
  //#endregion
16109
16733
  //#region src/router/utils/route-helpers.ts
16110
16734
  /**
16111
- * 过滤菜单项(根据权限)
16735
+ * 过滤菜单项(根据权限)- 委托给 composables 实现
16112
16736
  * @param items 菜单项数组
16113
16737
  * @param permissions 用户权限
16114
16738
  * @returns 过滤后的菜单项
16115
16739
  */
16116
16740
  function filterMenuItems$1(items, permissions) {
16117
- if (!permissions) return items;
16118
- const { roles = [], permissions: perms = [] } = permissions;
16119
- return items.filter((item) => {
16120
- if (item.roles && item.roles.length > 0) {
16121
- if (!item.roles.some((role) => roles.includes(role))) return false;
16122
- }
16123
- if (item.permission) {
16124
- if (!(Array.isArray(item.permission) ? item.permission : [item.permission]).some((p) => perms.includes(p))) return false;
16125
- }
16126
- if (item.children && item.children.length > 0) item.children = filterMenuItems$1(item.children, permissions);
16127
- return true;
16128
- });
16741
+ return filterMenuItems(items, permissions);
16129
16742
  }
16130
16743
  /**
16131
- * 将 MenuItem 数组转换为路由记录
16744
+ * 将 MenuItem 数组转换为路由记录 - 委托给 composables 实现
16132
16745
  * @param items 菜单项数组
16133
16746
  * @param options 选项
16134
16747
  * @returns 路由记录数组
16135
16748
  */
16136
16749
  function menuToRoutes$1(items, options = {}) {
16137
16750
  const { basePath = "", userPermissions } = options;
16138
- return (userPermissions ? filterMenuItems$1(items, userPermissions) : items).map((item) => {
16139
- const route = {
16140
- path: item.path || item.key,
16141
- name: item.key,
16142
- meta: {
16143
- title: item.label,
16144
- icon: item.icon,
16145
- permission: item.permission,
16146
- roles: item.roles,
16147
- keepAlive: true
16148
- }
16149
- };
16150
- if (item.children && item.children.length > 0) route.children = menuToRoutes$1(item.children, {
16151
- basePath: `${basePath}/${route.path}`,
16152
- userPermissions
16153
- });
16154
- return route;
16155
- });
16751
+ return menuToRoutes(userPermissions ? filterMenuItems$1(items, userPermissions) : items, basePath).map((route) => ({
16752
+ ...route,
16753
+ meta: {
16754
+ ...route.meta,
16755
+ keepAlive: true
16756
+ }
16757
+ }));
16156
16758
  }
16157
16759
  /**
16158
16760
  * 检查路由是否需要认证
@@ -16237,4 +16839,4 @@ var router_exports = /* @__PURE__ */ __exportAll({
16237
16839
  setRouter: () => setRouter
16238
16840
  });
16239
16841
  //#endregion
16240
- export { ANIMATION_DURATION, COMPONENT_PREFIX, CSS_PREFIX, DEBOUNCE_DEFAULTS, DEBOUNCE_DELAY, DEFAULT_LAYOUT_SIZE, Message, Notification, THROTTLE_DEFAULTS, THROTTLE_DELAY, YdAdminResolver, ai_loader_default as YdAiLoader, anchor_default as YdAnchor, auto_complete_default as YdAutoComplete, avatar_default as YdAvatar, badge_default as YdBadge, breadcrumb_default as YdBreadcrumb, button_default as YdButton, calendar_default as YdCalendar, captcha_default as YdCaptcha, card_default as YdCard, cascader_default as YdCascader, chat_bubble_default as YdChatBubble, chat_page_default as YdChatPage, checkbox_default as YdCheckbox, checkbox_group_default as YdCheckboxGroup, code_block_default as YdCodeBlock, collapse_default as YdCollapse, color_picker_default as YdColorPicker, config_provider_default as YdConfigProvider, context_menu_default as YdContextMenu, conversation_default as YdConversation, crud_page_default as YdCrudPage, date_picker_default as YdDatePicker, date_range_picker_default as YdDateRangePicker, divider_default as YdDivider, drawer_default as YdDrawer, dropdown_default as YdDropdown, empty_default as YdEmpty, flow_chart_default as YdFlowChart, form_default as YdForm, form_item_default as YdFormItem, icon_default as YdIcon, image_default as YdImage, image_preview_group_default as YdImagePreviewGroup, input_default as YdInput, input_number_default as YdInputNumber, layout_default as YdLayout, layout_content_default as YdLayoutContent, layout_header_default as YdLayoutHeader, layout_sidebar_default as YdLayoutSidebar, list_default as YdList, loading_bar_default as YdLoadingBar, login_default as YdLogin, login_centered_default as YdLoginCentered, menu_default as YdMenu, modal_default as YdModal, model_selector_default as YdModelSelector, pagination_default as YdPagination, pin_input_default as YdPinInput, popconfirm_default as YdPopconfirm, progress_default as YdProgress, prompt_input_default as YdPromptInput, radio_default as YdRadio, radio_group_default as YdRadioGroup, rate_default as YdRate, reasoning_default as YdReasoning, result_default as YdResult, router_exports as YdRouter, SchemaForm_default as YdSchemaForm, select_default as YdSelect, skeleton_default as YdSkeleton, slider_default as YdSlider, sources_default as YdSources, space_default as YdSpace, spin_default as YdSpin, statistic_default as YdStatistic, stepper_default as YdStepper, steps_default as YdSteps, streaming_text_default as YdStreamingText, suggestion_default as YdSuggestion, switch_default as YdSwitch, table_default as YdTable, tabs_default as YdTabs, tag_default as YdTag, textarea_default as YdTextarea, time_picker_default as YdTimePicker, timeline_default as YdTimeline, tooltip_default as YdTooltip, transfer_default as YdTransfer, tree_default as YdTree, tree_select_default as YdTreeSelect, upload_default as YdUpload, watermark_default as YdWatermark, Z_INDEX, buildBreadcrumb, changeLocale, checkRoutePermission, clearKeyCache, cn, convertToSimpleRoute, createSecureStorage, createWatermark, debounce, decrypt, deepClone, dt, dynamicRouter, encrypt, filterMenuItems, findMenuItem, findMenuPath, flattenMenuItems, generateId, generateRouteTitle, generateSessionKey, getBreadcrumbPaths, getCurrentLocale, getIcon, getIconRegistry, getKeySource, i18n, initSecureStorage, isArray, isDate, isEmpty, isEmptyObject, isFunction, isObject, isPathMatch, isPromise, isStorageReady, joinPath, loadingBar, menuToRoutes, nf, normalizePath, registerIcon, registerLazyLocale, removeWatermark, resetStorageKey, rotateStorageKey, searchMenuItems, secureLocal, secureSession, secureStoragePlugin, setLocale, setSessionStorageEncryptionKey, setStorageEncryptionKey, setupI18n, signData, storageReady, supportedLocales, t, tc, themes, throttle, useConfig, useFormSchema, useFormValidate, useLoading, useLoadingBar, useLoginForm, useNamespace, verifyData };
16842
+ export { ANIMATION_DURATION, COMPONENT_PREFIX, CSS_PREFIX, DEBOUNCE_DEFAULTS, DEFAULT_LAYOUT_SIZE, DEFAULT_MENU_ITEMS, DEFAULT_SETTINGS, DEFAULT_TABS, FULL_MENU_ITEMS, FULL_SETTINGS, FULL_TABS, MENU_PRESETS, MINIMAL_MENU_ITEMS, MINIMAL_SETTINGS, MINIMAL_TABS, Message, Notification, SETTINGS_PRESETS, TABS_PRESETS, THROTTLE_DEFAULTS, YdAdminResolver, ai_loader_default as YdAiLoader, anchor_default as YdAnchor, auto_complete_default as YdAutoComplete, avatar_default as YdAvatar, badge_default as YdBadge, breadcrumb_default as YdBreadcrumb, button_default as YdButton, calendar_default as YdCalendar, captcha_default as YdCaptcha, card_default as YdCard, cascader_default as YdCascader, chat_bubble_default as YdChatBubble, chat_page_default as YdChatPage, checkbox_default as YdCheckbox, checkbox_group_default as YdCheckboxGroup, code_block_default as YdCodeBlock, collapse_default as YdCollapse, color_picker_default as YdColorPicker, config_provider_default as YdConfigProvider, context_menu_default as YdContextMenu, conversation_default as YdConversation, crud_page_default as YdCrudPage, date_picker_default as YdDatePicker, date_range_picker_default as YdDateRangePicker, divider_default as YdDivider, drawer_default as YdDrawer, dropdown_default as YdDropdown, empty_default as YdEmpty, flow_chart_default as YdFlowChart, form_default as YdForm, form_item_default as YdFormItem, icon_default as YdIcon, image_default as YdImage, image_preview_group_default as YdImagePreviewGroup, input_default as YdInput, input_number_default as YdInputNumber, layout_default as YdLayout, layout_content_default as YdLayoutContent, layout_header_default as YdLayoutHeader, layout_sidebar_default as YdLayoutSidebar, list_default as YdList, loading_bar_default as YdLoadingBar, login_default as YdLogin, login_centered_default as YdLoginCentered, markdown_default as YdMarkdown, menu_default as YdMenu, modal_default as YdModal, model_selector_default as YdModelSelector, pagination_default as YdPagination, pin_input_default as YdPinInput, popconfirm_default as YdPopconfirm, progress_default as YdProgress, prompt_input_default as YdPromptInput, radio_default as YdRadio, radio_group_default as YdRadioGroup, rate_default as YdRate, reasoning_default as YdReasoning, result_default as YdResult, router_exports as YdRouter, SchemaForm_default as YdSchemaForm, select_default as YdSelect, skeleton_default as YdSkeleton, slider_default as YdSlider, sources_default as YdSources, space_default as YdSpace, spin_default as YdSpin, statistic_default as YdStatistic, stepper_default as YdStepper, steps_default as YdSteps, streaming_text_default as YdStreamingText, suggestion_default as YdSuggestion, switch_default as YdSwitch, table_default as YdTable, tabs_default as YdTabs, tag_default as YdTag, textarea_default as YdTextarea, time_picker_default as YdTimePicker, timeline_default as YdTimeline, tooltip_default as YdTooltip, transfer_default as YdTransfer, tree_default as YdTree, tree_select_default as YdTreeSelect, upload_default as YdUpload, watermark_default as YdWatermark, Z_INDEX, buildBreadcrumb, changeLocale, checkRoutePermission, clearKeyCache, cn, convertToSimpleRoute, createSecureStorage, createWatermark, debounce, decrypt, deepClone, dt, dynamicRouter, encrypt, filterMenuItems, findMenuItem, findMenuPath, flattenMenuItems, generateId, generateRouteTitle, generateSessionKey, getBreadcrumbPaths, getCurrentLocale, getIcon, getIconRegistry, getKeySource, i18n, initSecureStorage, isEmptyObject, isPathMatch, isStorageReady, joinPath, loadingBar, menuToRoutes, nf, normalizePath, registerIcon, registerLazyLocale, removeWatermark, resetStorageKey, rotateStorageKey, searchMenuItems, secureLocal, secureSession, secureStoragePlugin, setLocale, setSessionStorageEncryptionKey, setStorageEncryptionKey, setupI18n, signData, storageReady, supportedLocales, t, tc, themes, throttle, useConfig, useFormSchema, useFormValidate, useLoading, useLoadingBar, useLoginForm, useNamespace, verifyData };