djm-ui 0.72.0 → 0.73.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,8 @@
1
- /*! DJM UI v0.72.0 · MIT · 2026-10-26 */
1
+ /*!
2
+ * DJM UI v0.73.1 · 企业级中后台 Vue 3 组件库
3
+ * Copyright (c) 2026 上海多聚米科技有限公司. All rights reserved.
4
+ * MIT License · https://ui.duojumi.com · Build 2026-10-26
5
+ */
2
6
  var __defProp = Object.defineProperty;
3
7
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
8
  var __esm = (fn, res, err) => function __init() {
@@ -1722,7 +1726,7 @@ function t(key, params) {
1722
1726
  // src/utils/panel.js
1723
1727
  var PANEL_HIDDEN_STYLE = { position: "fixed", left: "0px", top: "0px", visibility: "hidden" };
1724
1728
  function bindPanelListeners({ root, panel, onClose, onReposition, esc = true }) {
1725
- const el = (ref50) => typeof ref50 === "function" ? ref50() : ref50;
1729
+ const el = (ref51) => typeof ref51 === "function" ? ref51() : ref51;
1726
1730
  function onDocumentMousedown(event) {
1727
1731
  const rootEl = el(root);
1728
1732
  const panelEl = el(panel);
@@ -4095,12 +4099,18 @@ var progress_default = {
4095
4099
  name: "DjmProgress",
4096
4100
  props: {
4097
4101
  percent: { type: Number, default: 0 },
4102
+ // line 横向 / circle 环形
4103
+ type: { type: String, default: "line" },
4098
4104
  // '' / success / error / warning
4099
4105
  status: { type: String, default: "" },
4100
4106
  showText: { type: Boolean, default: true },
4101
4107
  strokeWidth: { type: Number, default: 6 },
4102
4108
  // 自定义进度色,不传由状态决定
4103
- color: { type: String, default: "" }
4109
+ color: { type: String, default: "" },
4110
+ // 环形直径(px)
4111
+ size: { type: Number, default: 96 },
4112
+ // 无障碍名称,默认「进度」
4113
+ label: { type: String, default: "" }
4104
4114
  },
4105
4115
  computed: {
4106
4116
  safePercent() {
@@ -4113,10 +4123,72 @@ var progress_default = {
4113
4123
  },
4114
4124
  trackStyle() {
4115
4125
  return { height: this.strokeWidth + "px" };
4126
+ },
4127
+ circleSize() {
4128
+ return Math.max(48, Number(this.size) || 96);
4129
+ },
4130
+ circleRadius() {
4131
+ return (this.circleSize - this.strokeWidth) / 2;
4132
+ },
4133
+ circleLength() {
4134
+ return 2 * Math.PI * this.circleRadius;
4135
+ },
4136
+ circleOffset() {
4137
+ return this.circleLength * (1 - this.safePercent / 100);
4138
+ },
4139
+ circleStyle() {
4140
+ return { width: this.circleSize + "px", height: this.circleSize + "px" };
4141
+ },
4142
+ circleLabelStyle() {
4143
+ return { fontSize: Math.max(12, Math.round(this.circleSize / 5)) + "px" };
4116
4144
  }
4117
4145
  },
4118
4146
  template: `
4119
- <div class="djm-progress-line" :class="status ? 'djm-is-' + status : ''">
4147
+ <div
4148
+ v-if="type === 'circle'"
4149
+ class="djm-progress-circle"
4150
+ :class="status ? 'djm-is-' + status : ''"
4151
+ :style="circleStyle"
4152
+ role="progressbar"
4153
+ :aria-label="label || '\u8FDB\u5EA6'"
4154
+ :aria-valuenow="safePercent"
4155
+ aria-valuemin="0"
4156
+ aria-valuemax="100"
4157
+ >
4158
+ <svg :viewBox="'0 0 ' + circleSize + ' ' + circleSize" aria-hidden="true">
4159
+ <circle
4160
+ class="djm-progress-circle-track"
4161
+ :cx="circleSize / 2"
4162
+ :cy="circleSize / 2"
4163
+ :r="circleRadius"
4164
+ :stroke-width="strokeWidth"
4165
+ fill="none"
4166
+ />
4167
+ <circle
4168
+ class="djm-progress-circle-bar"
4169
+ :cx="circleSize / 2"
4170
+ :cy="circleSize / 2"
4171
+ :r="circleRadius"
4172
+ :stroke-width="strokeWidth"
4173
+ fill="none"
4174
+ stroke-linecap="round"
4175
+ :stroke-dasharray="circleLength"
4176
+ :stroke-dashoffset="circleOffset"
4177
+ :style="color ? { stroke: color } : null"
4178
+ />
4179
+ </svg>
4180
+ <span v-if="showText" class="djm-progress-circle-label" :style="circleLabelStyle">{{ safePercent }}%</span>
4181
+ </div>
4182
+ <div
4183
+ v-else
4184
+ class="djm-progress-line"
4185
+ :class="status ? 'djm-is-' + status : ''"
4186
+ role="progressbar"
4187
+ :aria-label="label || '\u8FDB\u5EA6'"
4188
+ :aria-valuenow="safePercent"
4189
+ aria-valuemin="0"
4190
+ aria-valuemax="100"
4191
+ >
4120
4192
  <div class="djm-progress" :style="trackStyle">
4121
4193
  <div class="djm-progress-bar" :style="barStyle"></div>
4122
4194
  </div>
@@ -5318,48 +5390,91 @@ var alert_default = {
5318
5390
  };
5319
5391
 
5320
5392
  // src/components/spin/index.js
5393
+ import { onBeforeUnmount as onBeforeUnmount4, ref as ref3, watch as watch3 } from "vue";
5321
5394
  var spin_default = {
5322
5395
  name: "DjmSpin",
5323
5396
  props: {
5324
5397
  spinning: { type: Boolean, default: true },
5325
- size: { type: String, default: "md" },
5326
5398
  // sm | md | lg
5327
- tip: { type: String, default: "" }
5399
+ size: { type: String, default: "md" },
5400
+ // ring 环形 / dots 点状 / bars 柱状 / pulse 脉冲
5401
+ type: { type: String, default: "ring" },
5402
+ tip: { type: String, default: "" },
5403
+ // 延迟多少毫秒后显示,0 表示立即
5404
+ delay: { type: Number, default: 0 },
5405
+ // 全屏加载:遮罩铺满视口
5406
+ fullscreen: { type: Boolean, default: false },
5407
+ // 自定义指示器颜色,默认跟随品牌色
5408
+ color: { type: String, default: "" }
5409
+ },
5410
+ setup(props) {
5411
+ const visible = ref3(false);
5412
+ let timer = null;
5413
+ function sync() {
5414
+ window.clearTimeout(timer);
5415
+ timer = null;
5416
+ if (!props.spinning) {
5417
+ visible.value = false;
5418
+ return;
5419
+ }
5420
+ if (props.delay > 0) {
5421
+ timer = window.setTimeout(() => {
5422
+ visible.value = true;
5423
+ }, props.delay);
5424
+ } else {
5425
+ visible.value = true;
5426
+ }
5427
+ }
5428
+ watch3(() => [props.spinning, props.delay], sync, { immediate: true });
5429
+ onBeforeUnmount4(() => window.clearTimeout(timer));
5430
+ return { visible };
5328
5431
  },
5329
5432
  computed: {
5330
- // 有默认插槽即为包裹模式
5331
5433
  wrapped() {
5332
5434
  return !!this.$slots.default;
5435
+ },
5436
+ rootClass() {
5437
+ return [
5438
+ "djm-spin",
5439
+ "djm-spin-" + this.size,
5440
+ {
5441
+ "djm-spin-wrap": this.wrapped && !this.fullscreen,
5442
+ "djm-spin-inline": !this.wrapped && !this.fullscreen,
5443
+ "djm-spin-fullscreen": this.fullscreen
5444
+ }
5445
+ ];
5333
5446
  }
5334
5447
  },
5335
5448
  template: `
5336
5449
  <div
5337
- v-if="wrapped"
5338
- class="djm-spin-wrap"
5339
- :class="'djm-spin-' + size"
5340
- :aria-busy="String(spinning)"
5450
+ v-if="fullscreen || wrapped || visible"
5451
+ :class="rootClass"
5452
+ :aria-busy="String(visible)"
5453
+ :role="visible ? 'status' : undefined"
5454
+ :aria-label="!wrapped && !fullscreen && !tip && visible ? '\u52A0\u8F7D\u4E2D' : undefined"
5341
5455
  >
5342
- <slot />
5343
- <div v-if="spinning" class="djm-spin-mask" role="status">
5344
- <span class="djm-spinner"></span>
5456
+ <slot v-if="wrapped && !fullscreen" />
5457
+ <div v-if="visible" class="djm-spin-mask">
5458
+ <span class="djm-spin-indicator" :class="'djm-spin-' + type" :style="color ? { color } : null">
5459
+ <slot name="indicator">
5460
+ <i v-if="type === 'ring'" class="djm-spinner"></i>
5461
+ <template v-else-if="type === 'dots'">
5462
+ <i></i><i></i><i></i>
5463
+ </template>
5464
+ <template v-else-if="type === 'bars'">
5465
+ <i></i><i></i><i></i><i></i>
5466
+ </template>
5467
+ <i v-else class="djm-spin-core"></i>
5468
+ </slot>
5469
+ </span>
5345
5470
  <span v-if="tip" class="djm-spin-tip">{{ tip }}</span>
5346
5471
  </div>
5347
5472
  </div>
5348
- <span
5349
- v-else
5350
- class="djm-spin-inline"
5351
- :class="'djm-spin-' + size"
5352
- role="status"
5353
- :aria-label="tip ? undefined : '\u52A0\u8F7D\u4E2D'"
5354
- >
5355
- <span class="djm-spinner"></span>
5356
- <span v-if="tip" class="djm-spin-tip">{{ tip }}</span>
5357
- </span>
5358
5473
  `
5359
5474
  };
5360
5475
 
5361
5476
  // src/components/popconfirm/index.js
5362
- import { nextTick as nextTick3, onBeforeUnmount as onBeforeUnmount4, onMounted as onMounted3, ref as ref3, watch as watch3 } from "vue";
5477
+ import { nextTick as nextTick3, onBeforeUnmount as onBeforeUnmount5, onMounted as onMounted3, ref as ref4, watch as watch4 } from "vue";
5363
5478
  var popconfirm_default = {
5364
5479
  name: "DjmPopconfirm",
5365
5480
  components: { DjmIcon: icon_default },
@@ -5375,10 +5490,10 @@ var popconfirm_default = {
5375
5490
  },
5376
5491
  emits: ["confirm", "cancel", "visible-change"],
5377
5492
  setup(props, { emit }) {
5378
- const open = ref3(false);
5379
- const root = ref3(null);
5380
- const panelEl = ref3(null);
5381
- const panelStyle = ref3({});
5493
+ const open = ref4(false);
5494
+ const root = ref4(null);
5495
+ const panelEl = ref4(null);
5496
+ const panelStyle = ref4({});
5382
5497
  const PANEL_WIDTH = 244;
5383
5498
  let detachPanel = null;
5384
5499
  function syncTriggerA11y() {
@@ -5394,7 +5509,7 @@ var popconfirm_default = {
5394
5509
  target.setAttribute("aria-expanded", String(open.value));
5395
5510
  }
5396
5511
  onMounted3(() => nextTick3(syncTriggerA11y));
5397
- watch3(open, () => nextTick3(syncTriggerA11y));
5512
+ watch4(open, () => nextTick3(syncTriggerA11y));
5398
5513
  function updatePosition() {
5399
5514
  if (!open.value || !root.value) return;
5400
5515
  const rect = root.value.getBoundingClientRect();
@@ -5453,7 +5568,7 @@ var popconfirm_default = {
5453
5568
  emit("cancel");
5454
5569
  close2();
5455
5570
  }
5456
- onBeforeUnmount4(close2);
5571
+ onBeforeUnmount5(close2);
5457
5572
  return { open, root, panelEl, panelStyle, toggle, close: close2, confirm, cancel };
5458
5573
  },
5459
5574
  template: `
@@ -5497,7 +5612,7 @@ var popconfirm_default = {
5497
5612
  };
5498
5613
 
5499
5614
  // src/components/anchor/index.js
5500
- import { onBeforeUnmount as onBeforeUnmount5, onMounted as onMounted4, ref as ref4, watch as watch4 } from "vue";
5615
+ import { onBeforeUnmount as onBeforeUnmount6, onMounted as onMounted4, ref as ref5, watch as watch5 } from "vue";
5501
5616
  var anchor_default = {
5502
5617
  name: "DjmAnchor",
5503
5618
  props: {
@@ -5510,8 +5625,8 @@ var anchor_default = {
5510
5625
  },
5511
5626
  emits: ["change"],
5512
5627
  setup(props, { emit }) {
5513
- const root = ref4(null);
5514
- const activeKey = ref4("");
5628
+ const root = ref5(null);
5629
+ const activeKey = ref5("");
5515
5630
  let scrollEl = null;
5516
5631
  let target = null;
5517
5632
  function resolveContainer() {
@@ -5566,8 +5681,8 @@ var anchor_default = {
5566
5681
  emit("change", item.href);
5567
5682
  }
5568
5683
  onMounted4(bind);
5569
- watch4(() => props.container, bind);
5570
- onBeforeUnmount5(unbind);
5684
+ watch5(() => props.container, bind);
5685
+ onBeforeUnmount6(unbind);
5571
5686
  return { root, activeKey, go };
5572
5687
  },
5573
5688
  template: `
@@ -5589,7 +5704,7 @@ var anchor_default = {
5589
5704
  };
5590
5705
 
5591
5706
  // src/components/backtop/index.js
5592
- import { onBeforeUnmount as onBeforeUnmount6, onMounted as onMounted5, ref as ref5 } from "vue";
5707
+ import { onBeforeUnmount as onBeforeUnmount7, onMounted as onMounted5, ref as ref6 } from "vue";
5593
5708
  var backtop_default = {
5594
5709
  name: "DjmBacktop",
5595
5710
  components: { DjmIcon: icon_default },
@@ -5602,8 +5717,8 @@ var backtop_default = {
5602
5717
  },
5603
5718
  emits: ["click"],
5604
5719
  setup(props, { emit }) {
5605
- const visible = ref5(false);
5606
- const root = ref5(null);
5720
+ const visible = ref6(false);
5721
+ const root = ref6(null);
5607
5722
  let target = null;
5608
5723
  let scrollEl = null;
5609
5724
  function resolveContainer() {
@@ -5637,7 +5752,7 @@ var backtop_default = {
5637
5752
  emit("click");
5638
5753
  }
5639
5754
  onMounted5(bind);
5640
- onBeforeUnmount6(unbind);
5755
+ onBeforeUnmount7(unbind);
5641
5756
  return { visible, root, toTop };
5642
5757
  },
5643
5758
  template: `
@@ -5714,7 +5829,7 @@ var space_default = {
5714
5829
  };
5715
5830
 
5716
5831
  // src/components/affix/index.js
5717
- import { onBeforeUnmount as onBeforeUnmount7, onMounted as onMounted6, ref as ref6 } from "vue";
5832
+ import { onBeforeUnmount as onBeforeUnmount8, onMounted as onMounted6, ref as ref7 } from "vue";
5718
5833
  var affix_default = {
5719
5834
  name: "DjmAffix",
5720
5835
  props: {
@@ -5725,10 +5840,10 @@ var affix_default = {
5725
5840
  zIndex: { type: Number, default: 900 }
5726
5841
  },
5727
5842
  setup(props) {
5728
- const root = ref6(null);
5729
- const fixed = ref6(false);
5730
- const affixStyle = ref6({});
5731
- const holderStyle = ref6({});
5843
+ const root = ref7(null);
5844
+ const fixed = ref7(false);
5845
+ const affixStyle = ref7({});
5846
+ const holderStyle = ref7({});
5732
5847
  let target = null;
5733
5848
  let scrollEl = null;
5734
5849
  function resolveContainer() {
@@ -5784,7 +5899,7 @@ var affix_default = {
5784
5899
  target = null;
5785
5900
  }
5786
5901
  onMounted6(bind);
5787
- onBeforeUnmount7(unbind);
5902
+ onBeforeUnmount8(unbind);
5788
5903
  return { root, fixed, affixStyle, holderStyle };
5789
5904
  },
5790
5905
  template: `
@@ -5835,7 +5950,7 @@ var segmented_default = {
5835
5950
  };
5836
5951
 
5837
5952
  // src/components/image/index.js
5838
- import { nextTick as nextTick4, onBeforeUnmount as onBeforeUnmount8, ref as ref7, watch as watch5 } from "vue";
5953
+ import { nextTick as nextTick4, onBeforeUnmount as onBeforeUnmount9, ref as ref8, watch as watch6 } from "vue";
5839
5954
 
5840
5955
  // src/utils/scroll-lock.js
5841
5956
  var count = 0;
@@ -5882,11 +5997,11 @@ var image_default = {
5882
5997
  preview: { type: Boolean, default: true }
5883
5998
  },
5884
5999
  setup(props) {
5885
- const failed = ref7(false);
5886
- const open = ref7(false);
5887
- const zoomRef = ref7(null);
5888
- const closeRef = ref7(null);
5889
- watch5(() => props.src, () => {
6000
+ const failed = ref8(false);
6001
+ const open = ref8(false);
6002
+ const zoomRef = ref8(null);
6003
+ const closeRef = ref8(null);
6004
+ watch6(() => props.src, () => {
5890
6005
  failed.value = false;
5891
6006
  });
5892
6007
  function toSize(value) {
@@ -5910,7 +6025,7 @@ var image_default = {
5910
6025
  document.removeEventListener("keydown", onKeydown);
5911
6026
  if (zoomRef.value) zoomRef.value.focus();
5912
6027
  }
5913
- onBeforeUnmount8(closePreview);
6028
+ onBeforeUnmount9(closePreview);
5914
6029
  return { failed, open, zoomRef, closeRef, toSize, openPreview, closePreview, t };
5915
6030
  },
5916
6031
  template: `
@@ -5965,13 +6080,15 @@ var image_default = {
5965
6080
  };
5966
6081
 
5967
6082
  // src/components/watermark/index.js
5968
- import { computed as computed4, onBeforeUnmount as onBeforeUnmount9, onMounted as onMounted7, ref as ref9, watch as watch6 } from "vue";
6083
+ import { computed as computed4, onBeforeUnmount as onBeforeUnmount10, onMounted as onMounted7, ref as ref10, watch as watch7 } from "vue";
5969
6084
 
5970
6085
  // src/theme/index.js
5971
- import { ref as ref8 } from "vue";
6086
+ import { ref as ref9 } from "vue";
5972
6087
  var KEY = "djm-theme";
5973
6088
  var COLOR_KEY = "djm-primary";
5974
- var theme = ref8("light");
6089
+ var GLASS_KEY = "djm-glass";
6090
+ var theme = ref9("light");
6091
+ var glass = ref9(false);
5975
6092
  var PRESET_COLORS = [
5976
6093
  { name: "\u9ED8\u8BA4\u84DD", value: "#1a6fc4" },
5977
6094
  { name: "\u79D1\u6280\u84DD", value: "#2563eb" },
@@ -5982,7 +6099,7 @@ var PRESET_COLORS = [
5982
6099
  { name: "\u6731\u7802\u7EA2", value: "#c0392b" },
5983
6100
  { name: "\u77F3\u58A8\u7070", value: "#4b5b6b" }
5984
6101
  ];
5985
- var primaryColor = ref8("");
6102
+ var primaryColor = ref9("");
5986
6103
  var BRAND_VARS = [
5987
6104
  "--djm-brand-50",
5988
6105
  "--djm-brand-100",
@@ -6104,6 +6221,15 @@ function setTheme(name) {
6104
6221
  function toggleTheme() {
6105
6222
  setTheme(theme.value === "dark" ? "light" : "dark");
6106
6223
  }
6224
+ function setGlass(enabled) {
6225
+ glass.value = !!enabled;
6226
+ document.documentElement.dataset.djmGlass = glass.value ? "on" : "";
6227
+ try {
6228
+ if (glass.value) localStorage.setItem(GLASS_KEY, "1");
6229
+ else localStorage.removeItem(GLASS_KEY);
6230
+ } catch (error) {
6231
+ }
6232
+ }
6107
6233
  function initTheme() {
6108
6234
  let saved = "";
6109
6235
  try {
@@ -6123,9 +6249,16 @@ function initTheme() {
6123
6249
  } catch (error) {
6124
6250
  color = "";
6125
6251
  }
6252
+ let glassSaved = false;
6253
+ try {
6254
+ glassSaved = localStorage.getItem(GLASS_KEY) === "1";
6255
+ } catch (error) {
6256
+ glassSaved = false;
6257
+ }
6126
6258
  if (color) primaryColor.value = color;
6127
6259
  const next = param === "dark" || param === "light" ? param : saved || "light";
6128
6260
  setTheme(next);
6261
+ setGlass(glassSaved);
6129
6262
  }
6130
6263
 
6131
6264
  // src/components/watermark/index.js
@@ -6141,7 +6274,7 @@ var watermark_default = {
6141
6274
  zIndex: { type: Number, default: 10 }
6142
6275
  },
6143
6276
  setup(props) {
6144
- const dataUrl = ref9("");
6277
+ const dataUrl = ref10("");
6145
6278
  let canvasEl = null;
6146
6279
  function build() {
6147
6280
  const lines = (Array.isArray(props.content) ? props.content : [props.content]).filter(Boolean);
@@ -6183,8 +6316,8 @@ var watermark_default = {
6183
6316
  zIndex: props.zIndex
6184
6317
  }));
6185
6318
  onMounted7(build);
6186
- watch6(() => [props.content, props.gap, props.fontSize, props.color, props.rotate, theme.value], build, { deep: true });
6187
- onBeforeUnmount9(() => {
6319
+ watch7(() => [props.content, props.gap, props.fontSize, props.color, props.rotate, theme.value], build, { deep: true });
6320
+ onBeforeUnmount10(() => {
6188
6321
  canvasEl = null;
6189
6322
  });
6190
6323
  return { layerStyle };
@@ -6374,7 +6507,7 @@ var autocomplete_default = {
6374
6507
  };
6375
6508
 
6376
6509
  // src/components/splitter/index.js
6377
- import { computed as computed5, onBeforeUnmount as onBeforeUnmount10, ref as ref10 } from "vue";
6510
+ import { computed as computed5, onBeforeUnmount as onBeforeUnmount11, ref as ref11 } from "vue";
6378
6511
  var splitter_default = {
6379
6512
  name: "DjmSplitter",
6380
6513
  props: {
@@ -6387,8 +6520,8 @@ var splitter_default = {
6387
6520
  },
6388
6521
  emits: ["update:modelValue", "change"],
6389
6522
  setup(props, { emit }) {
6390
- const root = ref10(null);
6391
- const dragging = ref10(false);
6523
+ const root = ref11(null);
6524
+ const dragging = ref11(false);
6392
6525
  const ratio = computed5(() => {
6393
6526
  const value = Number(props.modelValue);
6394
6527
  const safe = Number.isFinite(value) ? value : 50;
@@ -6433,7 +6566,7 @@ var splitter_default = {
6433
6566
  commit(ratio.value + step);
6434
6567
  }
6435
6568
  }
6436
- onBeforeUnmount10(stopDrag);
6569
+ onBeforeUnmount11(stopDrag);
6437
6570
  return { root, dragging, ratio, startDrag, onKeydown };
6438
6571
  },
6439
6572
  template: `
@@ -6470,7 +6603,7 @@ var splitter_default = {
6470
6603
  };
6471
6604
 
6472
6605
  // src/components/carousel/index.js
6473
- import { onBeforeUnmount as onBeforeUnmount11, onMounted as onMounted8, ref as ref11, watch as watch7 } from "vue";
6606
+ import { onBeforeUnmount as onBeforeUnmount12, onMounted as onMounted8, ref as ref12, watch as watch8 } from "vue";
6474
6607
  var carousel_default = {
6475
6608
  name: "DjmCarousel",
6476
6609
  components: { DjmIcon: icon_default },
@@ -6484,7 +6617,7 @@ var carousel_default = {
6484
6617
  },
6485
6618
  emits: ["change"],
6486
6619
  setup(props, { emit }) {
6487
- const index = ref11(0);
6620
+ const index = ref12(0);
6488
6621
  let timer = null;
6489
6622
  const boxStyle = () => ({
6490
6623
  height: typeof props.height === "number" ? props.height + "px" : props.height
@@ -6522,14 +6655,14 @@ var carousel_default = {
6522
6655
  }
6523
6656
  }
6524
6657
  onMounted8(start);
6525
- watch7(() => [props.autoplay, props.interval, props.items.length], start);
6658
+ watch8(() => [props.autoplay, props.interval, props.items.length], start);
6526
6659
  function pause() {
6527
6660
  if (props.autoplay) stop();
6528
6661
  }
6529
6662
  function resume() {
6530
6663
  if (props.autoplay) start();
6531
6664
  }
6532
- onBeforeUnmount11(stop);
6665
+ onBeforeUnmount12(stop);
6533
6666
  return { index, boxStyle, go, next, prev, onKeydown, pause, resume };
6534
6667
  },
6535
6668
  template: `
@@ -6589,7 +6722,7 @@ var carousel_default = {
6589
6722
  };
6590
6723
 
6591
6724
  // src/components/tour/index.js
6592
- import { computed as computed6, nextTick as nextTick5, onBeforeUnmount as onBeforeUnmount12, onMounted as onMounted9, ref as ref12, watch as watch8 } from "vue";
6725
+ import { computed as computed6, nextTick as nextTick5, onBeforeUnmount as onBeforeUnmount13, onMounted as onMounted9, ref as ref13, watch as watch9 } from "vue";
6593
6726
  var tour_default = {
6594
6727
  name: "DjmTour",
6595
6728
  components: { DjmIcon: icon_default },
@@ -6601,10 +6734,10 @@ var tour_default = {
6601
6734
  },
6602
6735
  emits: ["update:modelValue", "change", "finish"],
6603
6736
  setup(props, { emit }) {
6604
- const current = ref12(0);
6605
- const highlight = ref12({ top: "0px", left: "0px", width: "0px", height: "0px" });
6606
- const cardStyle = ref12({ position: "fixed", left: "0px", top: "0px", visibility: "hidden" });
6607
- const card = ref12(null);
6737
+ const current = ref13(0);
6738
+ const highlight = ref13({ top: "0px", left: "0px", width: "0px", height: "0px" });
6739
+ const cardStyle = ref13({ position: "fixed", left: "0px", top: "0px", visibility: "hidden" });
6740
+ const card = ref13(null);
6608
6741
  const step = computed6(() => props.steps[current.value] || null);
6609
6742
  function update() {
6610
6743
  const scene = step.value;
@@ -6665,14 +6798,14 @@ var tour_default = {
6665
6798
  emit("change", current.value);
6666
6799
  nextTick5(update);
6667
6800
  }
6668
- watch8(() => props.modelValue, (value) => {
6801
+ watch9(() => props.modelValue, (value) => {
6669
6802
  if (value) startScene();
6670
6803
  else stopScene();
6671
6804
  });
6672
6805
  onMounted9(() => {
6673
6806
  if (props.modelValue) startScene();
6674
6807
  });
6675
- onBeforeUnmount12(stopScene);
6808
+ onBeforeUnmount13(stopScene);
6676
6809
  return { current, step, highlight, cardStyle, card, close: close2, next, prev, t };
6677
6810
  },
6678
6811
  template: `
@@ -6710,7 +6843,7 @@ var tour_default = {
6710
6843
  };
6711
6844
 
6712
6845
  // src/components/calendar/index.js
6713
- import { computed as computed7, ref as ref13, watch as watch9 } from "vue";
6846
+ import { computed as computed7, ref as ref14, watch as watch10 } from "vue";
6714
6847
  function pad2(num) {
6715
6848
  return String(num).padStart(2, "0");
6716
6849
  }
@@ -6740,8 +6873,8 @@ var calendar_default = {
6740
6873
  const today = /* @__PURE__ */ new Date();
6741
6874
  const todayKey = toKey(today.getFullYear(), today.getMonth(), today.getDate());
6742
6875
  const initial = parse(props.modelValue);
6743
- const viewYear = ref13(initial ? initial.year : today.getFullYear());
6744
- const viewMonth = ref13(initial ? initial.month : today.getMonth());
6876
+ const viewYear = ref14(initial ? initial.year : today.getFullYear());
6877
+ const viewMonth = ref14(initial ? initial.month : today.getMonth());
6745
6878
  const weekNames = computed7(() => {
6746
6879
  const base = ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"];
6747
6880
  return base.slice(props.firstDay).concat(base.slice(0, props.firstDay));
@@ -6807,7 +6940,7 @@ var calendar_default = {
6807
6940
  event.preventDefault();
6808
6941
  list[next].focus();
6809
6942
  }
6810
- watch9(() => props.modelValue, (value) => {
6943
+ watch10(() => props.modelValue, (value) => {
6811
6944
  const parts = parse(value);
6812
6945
  if (parts && (parts.year !== viewYear.value || parts.month !== viewMonth.value)) {
6813
6946
  viewYear.value = parts.year;
@@ -6861,7 +6994,7 @@ var calendar_default = {
6861
6994
  };
6862
6995
 
6863
6996
  // src/components/float-button/index.js
6864
- import { onBeforeUnmount as onBeforeUnmount13, ref as ref14 } from "vue";
6997
+ import { onBeforeUnmount as onBeforeUnmount14, ref as ref15 } from "vue";
6865
6998
  var float_button_default = {
6866
6999
  name: "DjmFloatButton",
6867
7000
  components: { DjmIcon: icon_default },
@@ -6877,7 +7010,7 @@ var float_button_default = {
6877
7010
  },
6878
7011
  emits: ["click", "select"],
6879
7012
  setup(props, { emit }) {
6880
- const open = ref14(false);
7013
+ const open = ref15(false);
6881
7014
  function onKeydown(event) {
6882
7015
  if (event.key === "Escape") close2();
6883
7016
  }
@@ -6912,7 +7045,7 @@ var float_button_default = {
6912
7045
  emit("select", item);
6913
7046
  if (typeof item.onClick === "function") item.onClick(item);
6914
7047
  }
6915
- onBeforeUnmount13(close2);
7048
+ onBeforeUnmount14(close2);
6916
7049
  return { open, onMainClick, choose };
6917
7050
  },
6918
7051
  template: `
@@ -6947,7 +7080,7 @@ var float_button_default = {
6947
7080
  };
6948
7081
 
6949
7082
  // src/components/mentions/index.js
6950
- import { computed as computed8, nextTick as nextTick6, onBeforeUnmount as onBeforeUnmount14, ref as ref15, watch as watch10 } from "vue";
7083
+ import { computed as computed8, nextTick as nextTick6, onBeforeUnmount as onBeforeUnmount15, ref as ref16, watch as watch11 } from "vue";
6951
7084
  var uidSeed3 = 0;
6952
7085
  var mentions_default = {
6953
7086
  name: "DjmMentions",
@@ -6962,17 +7095,17 @@ var mentions_default = {
6962
7095
  },
6963
7096
  emits: ["update:modelValue", "input", "select"],
6964
7097
  setup(props, { emit }) {
6965
- const root = ref15(null);
6966
- const input = ref15(null);
6967
- const text = ref15(props.modelValue);
6968
- const open = ref15(false);
6969
- const keyword = ref15("");
6970
- const activeIndex = ref15(-1);
7098
+ const root = ref16(null);
7099
+ const input = ref16(null);
7100
+ const text = ref16(props.modelValue);
7101
+ const open = ref16(false);
7102
+ const keyword = ref16("");
7103
+ const activeIndex = ref16(-1);
6971
7104
  const listId = "djm-mentions-" + ++uidSeed3;
6972
- const panelStyle = ref15({ ...PANEL_HIDDEN_STYLE });
7105
+ const panelStyle = ref16({ ...PANEL_HIDDEN_STYLE });
6973
7106
  let triggerIndex = -1;
6974
7107
  let detachPanel = null;
6975
- watch10(() => props.modelValue, (value) => {
7108
+ watch11(() => props.modelValue, (value) => {
6976
7109
  text.value = value;
6977
7110
  });
6978
7111
  const normalized = computed8(() => props.options.map((item) => typeof item === "string" ? { value: item, label: item } : item));
@@ -7065,7 +7198,7 @@ var mentions_default = {
7065
7198
  input.value.setSelectionRange(pos, pos);
7066
7199
  });
7067
7200
  }
7068
- onBeforeUnmount14(closePanel);
7201
+ onBeforeUnmount15(closePanel);
7069
7202
  return {
7070
7203
  root,
7071
7204
  input,
@@ -7339,7 +7472,7 @@ var input_tag_default = {
7339
7472
  };
7340
7473
 
7341
7474
  // src/components/password/index.js
7342
- import { computed as computed9, ref as ref16 } from "vue";
7475
+ import { computed as computed9, ref as ref17 } from "vue";
7343
7476
  var password_default = {
7344
7477
  name: "DjmPassword",
7345
7478
  components: { DjmIcon: icon_default },
@@ -7353,7 +7486,7 @@ var password_default = {
7353
7486
  },
7354
7487
  emits: ["update:modelValue", "input", "change", "enter", "focus", "blur"],
7355
7488
  setup(props, { emit }) {
7356
- const visible = ref16(false);
7489
+ const visible = ref17(false);
7357
7490
  const score = computed9(() => {
7358
7491
  const value = props.modelValue || "";
7359
7492
  if (!value) return 0;
@@ -7419,7 +7552,7 @@ var password_default = {
7419
7552
  };
7420
7553
 
7421
7554
  // src/components/command-palette/index.js
7422
- import { computed as computed10, nextTick as nextTick7, onBeforeUnmount as onBeforeUnmount15, onMounted as onMounted10, ref as ref17, watch as watch11 } from "vue";
7555
+ import { computed as computed10, nextTick as nextTick7, onBeforeUnmount as onBeforeUnmount16, onMounted as onMounted10, ref as ref18, watch as watch12 } from "vue";
7423
7556
 
7424
7557
  // src/utils/focus-trap.js
7425
7558
  var FOCUSABLE = [
@@ -7472,11 +7605,11 @@ var command_palette_default = {
7472
7605
  },
7473
7606
  emits: ["update:modelValue", "run"],
7474
7607
  setup(props, { emit }) {
7475
- const open = ref17(false);
7476
- const keyword = ref17("");
7477
- const activeIndex = ref17(-1);
7478
- const searchInput = ref17(null);
7479
- const panelEl = ref17(null);
7608
+ const open = ref18(false);
7609
+ const keyword = ref18("");
7610
+ const activeIndex = ref18(-1);
7611
+ const searchInput = ref18(null);
7612
+ const panelEl = ref18(null);
7480
7613
  const listId = "djm-command-list-" + ++uidSeed4;
7481
7614
  let releaseTrap = null;
7482
7615
  const filtered = computed10(() => {
@@ -7559,12 +7692,12 @@ var command_palette_default = {
7559
7692
  if (typeof item.run === "function") item.run(item);
7560
7693
  hide();
7561
7694
  }
7562
- watch11(() => props.modelValue, (value) => {
7695
+ watch12(() => props.modelValue, (value) => {
7563
7696
  if (value) show();
7564
7697
  else hide();
7565
7698
  });
7566
7699
  onMounted10(() => window.addEventListener("keydown", onGlobalKeydown));
7567
- onBeforeUnmount15(() => {
7700
+ onBeforeUnmount16(() => {
7568
7701
  window.removeEventListener("keydown", onGlobalKeydown);
7569
7702
  hide();
7570
7703
  });
@@ -7616,7 +7749,7 @@ var command_palette_default = {
7616
7749
  };
7617
7750
 
7618
7751
  // src/components/qrcode/index.js
7619
- import { onMounted as onMounted11, ref as ref18, watch as watch12 } from "vue";
7752
+ import { onMounted as onMounted11, ref as ref19, watch as watch13 } from "vue";
7620
7753
  var qrcode_default = {
7621
7754
  name: "DjmQRCode",
7622
7755
  props: {
@@ -7631,8 +7764,8 @@ var qrcode_default = {
7631
7764
  alt: { type: String, default: "\u4E8C\u7EF4\u7801" }
7632
7765
  },
7633
7766
  setup(props) {
7634
- const src = ref18("");
7635
- const error = ref18("");
7767
+ const src = ref19("");
7768
+ const error = ref19("");
7636
7769
  let lib = null;
7637
7770
  let seq2 = 0;
7638
7771
  async function ensureLib() {
@@ -7669,7 +7802,7 @@ var qrcode_default = {
7669
7802
  }
7670
7803
  }
7671
7804
  onMounted11(render);
7672
- watch12(() => [props.value, props.size, props.level, props.margin, props.dark, props.light], render);
7805
+ watch13(() => [props.value, props.size, props.level, props.margin, props.dark, props.light], render);
7673
7806
  return { src, error };
7674
7807
  },
7675
7808
  template: `
@@ -7708,7 +7841,7 @@ var status_default = {
7708
7841
  };
7709
7842
 
7710
7843
  // src/components/tooltip/index.js
7711
- import { ref as ref19, nextTick as nextTick8, onBeforeUnmount as onBeforeUnmount16 } from "vue";
7844
+ import { ref as ref20, nextTick as nextTick8, onBeforeUnmount as onBeforeUnmount17 } from "vue";
7712
7845
  var uid2 = 0;
7713
7846
  var tooltip_default = {
7714
7847
  name: "DjmTooltip",
@@ -7719,11 +7852,11 @@ var tooltip_default = {
7719
7852
  delay: { type: Number, default: 80 }
7720
7853
  },
7721
7854
  setup(props) {
7722
- const visible = ref19(false);
7723
- const rootRef = ref19(null);
7724
- const contentRef = ref19(null);
7725
- const actualPlacement = ref19(props.placement);
7726
- const panelStyle = ref19({});
7855
+ const visible = ref20(false);
7856
+ const rootRef = ref20(null);
7857
+ const contentRef = ref20(null);
7858
+ const actualPlacement = ref20(props.placement);
7859
+ const panelStyle = ref20({});
7727
7860
  const tipId = "djm-tooltip-" + ++uid2;
7728
7861
  let timer = null;
7729
7862
  function triggerEl() {
@@ -7794,7 +7927,7 @@ var tooltip_default = {
7794
7927
  bindTrigger(false);
7795
7928
  bindReposition(false);
7796
7929
  }
7797
- onBeforeUnmount16(() => {
7930
+ onBeforeUnmount17(() => {
7798
7931
  window.clearTimeout(timer);
7799
7932
  bindReposition(false);
7800
7933
  });
@@ -7819,7 +7952,7 @@ var tooltip_default = {
7819
7952
  };
7820
7953
 
7821
7954
  // src/components/dropdown/index.js
7822
- import { nextTick as nextTick9, onBeforeUnmount as onBeforeUnmount17, onMounted as onMounted12, ref as ref20, watch as watch13 } from "vue";
7955
+ import { nextTick as nextTick9, onBeforeUnmount as onBeforeUnmount18, onMounted as onMounted12, ref as ref21, watch as watch14 } from "vue";
7823
7956
  var dropdown_default = {
7824
7957
  name: "DjmDropdown",
7825
7958
  components: { DjmIcon: icon_default },
@@ -7836,10 +7969,10 @@ var dropdown_default = {
7836
7969
  },
7837
7970
  emits: ["select", "visible-change"],
7838
7971
  setup(props, { emit }) {
7839
- const open = ref20(false);
7840
- const root = ref20(null);
7841
- const menuEl = ref20(null);
7842
- const panelStyle = ref20({});
7972
+ const open = ref21(false);
7973
+ const root = ref21(null);
7974
+ const menuEl = ref21(null);
7975
+ const panelStyle = ref21({});
7843
7976
  let detachPanel = null;
7844
7977
  function syncTriggerA11y() {
7845
7978
  const wrapper = root.value && root.value.querySelector(".djm-dropdown-trigger");
@@ -7853,7 +7986,7 @@ var dropdown_default = {
7853
7986
  else target.removeAttribute("aria-disabled");
7854
7987
  }
7855
7988
  onMounted12(() => nextTick9(syncTriggerA11y));
7856
- watch13(open, () => nextTick9(syncTriggerA11y));
7989
+ watch14(open, () => nextTick9(syncTriggerA11y));
7857
7990
  function updatePosition() {
7858
7991
  if (!open.value || !root.value) return;
7859
7992
  const rect = root.value.getBoundingClientRect();
@@ -7956,7 +8089,7 @@ var dropdown_default = {
7956
8089
  emit("select", item);
7957
8090
  if (props.closeOnSelect) close2();
7958
8091
  }
7959
- onBeforeUnmount17(() => {
8092
+ onBeforeUnmount18(() => {
7960
8093
  window.clearTimeout(hoverTimer);
7961
8094
  close2();
7962
8095
  });
@@ -8021,7 +8154,7 @@ var dropdown_default = {
8021
8154
  };
8022
8155
 
8023
8156
  // src/components/drawer/index.js
8024
- import { ref as ref21, nextTick as nextTick10, watch as watch14, onMounted as onMounted13, onBeforeUnmount as onBeforeUnmount18 } from "vue";
8157
+ import { ref as ref22, nextTick as nextTick10, watch as watch15, onMounted as onMounted13, onBeforeUnmount as onBeforeUnmount19 } from "vue";
8025
8158
  var uid3 = 0;
8026
8159
  var drawer_default = {
8027
8160
  name: "DjmDrawer",
@@ -8034,11 +8167,13 @@ var drawer_default = {
8034
8167
  // 点击遮罩关闭
8035
8168
  maskClosable: { type: Boolean, default: true },
8036
8169
  showClose: { type: Boolean, default: true },
8037
- closeOnEsc: { type: Boolean, default: true }
8170
+ closeOnEsc: { type: Boolean, default: true },
8171
+ // 毛玻璃底
8172
+ glass: { type: Boolean, default: false }
8038
8173
  },
8039
8174
  emits: ["update:modelValue", "open", "close"],
8040
8175
  setup(props, { emit }) {
8041
- const panelRef = ref21(null);
8176
+ const panelRef = ref22(null);
8042
8177
  const titleId = `djm-drawer-title-${++uid3}`;
8043
8178
  let locked = false;
8044
8179
  let releaseTrap = null;
@@ -8071,14 +8206,14 @@ var drawer_default = {
8071
8206
  }
8072
8207
  emit("close");
8073
8208
  }
8074
- watch14(() => props.modelValue, (open) => {
8209
+ watch15(() => props.modelValue, (open) => {
8075
8210
  if (open) activate();
8076
8211
  else deactivate();
8077
8212
  });
8078
8213
  onMounted13(() => {
8079
8214
  if (props.modelValue) activate();
8080
8215
  });
8081
- onBeforeUnmount18(() => {
8216
+ onBeforeUnmount19(() => {
8082
8217
  document.removeEventListener("keydown", onKeydown);
8083
8218
  release();
8084
8219
  if (locked) unlockScroll();
@@ -8097,7 +8232,7 @@ var drawer_default = {
8097
8232
  <aside
8098
8233
  ref="panelRef"
8099
8234
  class="djm-drawer"
8100
- :class="'djm-drawer-' + placement"
8235
+ :class="['djm-drawer-' + placement, { 'djm-is-glass': glass }]"
8101
8236
  :style="panelStyle"
8102
8237
  role="dialog"
8103
8238
  aria-modal="true"
@@ -8132,7 +8267,7 @@ var drawer_default = {
8132
8267
  };
8133
8268
 
8134
8269
  // src/components/modal/index.js
8135
- import { ref as ref22, nextTick as nextTick11, watch as watch15, computed as computed11, onMounted as onMounted14, onBeforeUnmount as onBeforeUnmount19 } from "vue";
8270
+ import { ref as ref23, nextTick as nextTick11, watch as watch16, computed as computed11, onMounted as onMounted14, onBeforeUnmount as onBeforeUnmount20 } from "vue";
8136
8271
  var uid4 = 0;
8137
8272
  var modal_default = {
8138
8273
  name: "DjmModal",
@@ -8147,11 +8282,13 @@ var modal_default = {
8147
8282
  // 是否允许 Esc 关闭
8148
8283
  closeOnEsc: { type: Boolean, default: true },
8149
8284
  // 全屏铺满,适合配置类大表单
8150
- fullscreen: { type: Boolean, default: false }
8285
+ fullscreen: { type: Boolean, default: false },
8286
+ // 毛玻璃底:需要显示背后页面时使用
8287
+ glass: { type: Boolean, default: false }
8151
8288
  },
8152
8289
  emits: ["update:modelValue", "open", "close"],
8153
8290
  setup(props, { emit }) {
8154
- const dialogRef = ref22(null);
8291
+ const dialogRef = ref23(null);
8155
8292
  const titleId = `djm-modal-title-${++uid4}`;
8156
8293
  let locked = false;
8157
8294
  let releaseTrap = null;
@@ -8184,14 +8321,14 @@ var modal_default = {
8184
8321
  }
8185
8322
  emit("close");
8186
8323
  }
8187
- watch15(() => props.modelValue, (open) => {
8324
+ watch16(() => props.modelValue, (open) => {
8188
8325
  if (open) activate();
8189
8326
  else deactivate();
8190
8327
  });
8191
8328
  onMounted14(() => {
8192
8329
  if (props.modelValue) activate();
8193
8330
  });
8194
- onBeforeUnmount19(() => {
8331
+ onBeforeUnmount20(() => {
8195
8332
  document.removeEventListener("keydown", onKey);
8196
8333
  release();
8197
8334
  if (locked) unlockScroll();
@@ -8213,7 +8350,7 @@ var modal_default = {
8213
8350
  <div
8214
8351
  ref="dialogRef"
8215
8352
  class="djm-modal"
8216
- :class="{ 'djm-is-fullscreen': fullscreen }"
8353
+ :class="{ 'djm-is-fullscreen': fullscreen, 'djm-is-glass': glass }"
8217
8354
  :style="dialogStyle"
8218
8355
  role="dialog"
8219
8356
  aria-modal="true"
@@ -8311,7 +8448,7 @@ var confirm_dialog_default = {
8311
8448
  };
8312
8449
 
8313
8450
  // src/components/pagination/index.js
8314
- import { computed as computed12, ref as ref23 } from "vue";
8451
+ import { computed as computed12, ref as ref24 } from "vue";
8315
8452
  var pagination_default = {
8316
8453
  name: "DjmPagination",
8317
8454
  components: { Icon: icon_default },
@@ -8323,7 +8460,7 @@ var pagination_default = {
8323
8460
  },
8324
8461
  emits: ["update:page", "update:pageSize", "change"],
8325
8462
  setup(props, { emit }) {
8326
- const jumpText = ref23("");
8463
+ const jumpText = ref24("");
8327
8464
  const pageCount = computed12(() => Math.max(1, Math.ceil(props.total / Math.max(1, props.pageSize))));
8328
8465
  const current = computed12(() => Math.min(Math.max(1, props.page), pageCount.value));
8329
8466
  const pages = computed12(() => {
@@ -8543,7 +8680,7 @@ var tabs_default = {
8543
8680
  };
8544
8681
 
8545
8682
  // src/components/context-menu/index.js
8546
- import { ref as ref24, watch as watch16, nextTick as nextTick12, onBeforeUnmount as onBeforeUnmount20 } from "vue";
8683
+ import { ref as ref25, watch as watch17, nextTick as nextTick12, onBeforeUnmount as onBeforeUnmount21 } from "vue";
8547
8684
  var context_menu_default = {
8548
8685
  name: "DjmContextMenu",
8549
8686
  components: { Icon: icon_default },
@@ -8555,8 +8692,8 @@ var context_menu_default = {
8555
8692
  },
8556
8693
  emits: ["update:modelValue", "select"],
8557
8694
  setup(props, { emit }) {
8558
- const menuRef = ref24(null);
8559
- const pos = ref24({ left: 0, top: 0 });
8695
+ const menuRef = ref25(null);
8696
+ const pos = ref25({ left: 0, top: 0 });
8560
8697
  const margin = 8;
8561
8698
  function close2() {
8562
8699
  emit("update:modelValue", false);
@@ -8618,7 +8755,7 @@ var context_menu_default = {
8618
8755
  detach = null;
8619
8756
  }
8620
8757
  }
8621
- watch16(
8758
+ watch17(
8622
8759
  () => props.modelValue,
8623
8760
  (open) => {
8624
8761
  if (open) {
@@ -8629,10 +8766,10 @@ var context_menu_default = {
8629
8766
  }
8630
8767
  }
8631
8768
  );
8632
- watch16([() => props.x, () => props.y], () => {
8769
+ watch17([() => props.x, () => props.y], () => {
8633
8770
  if (props.modelValue) openAtCursor();
8634
8771
  });
8635
- onBeforeUnmount20(unbind);
8772
+ onBeforeUnmount21(unbind);
8636
8773
  return { menuRef, pos, close: close2, onSelect, onKeydown, t };
8637
8774
  },
8638
8775
  template: `
@@ -8671,7 +8808,7 @@ var context_menu_default = {
8671
8808
  };
8672
8809
 
8673
8810
  // src/components/date-picker/index.js
8674
- import { ref as ref25, computed as computed14, onBeforeUnmount as onBeforeUnmount21, watch as watch17 } from "vue";
8811
+ import { ref as ref26, computed as computed14, onBeforeUnmount as onBeforeUnmount22, watch as watch18 } from "vue";
8675
8812
  var uidSeed5 = 0;
8676
8813
  function pad3(value) {
8677
8814
  return String(value).padStart(2, "0");
@@ -8706,12 +8843,12 @@ var date_picker_default = {
8706
8843
  },
8707
8844
  emits: ["update:modelValue", "change", "visible-change"],
8708
8845
  setup(props, { emit }) {
8709
- const open = ref25(false);
8710
- watch17(open, (value) => emit("visible-change", value));
8711
- const root = ref25(null);
8712
- const panel = ref25(null);
8846
+ const open = ref26(false);
8847
+ watch18(open, (value) => emit("visible-change", value));
8848
+ const root = ref26(null);
8849
+ const panel = ref26(null);
8713
8850
  const panelId = "djm-date-panel-" + ++uidSeed5;
8714
- const panelStyle = ref25({ ...PANEL_HIDDEN_STYLE });
8851
+ const panelStyle = ref26({ ...PANEL_HIDDEN_STYLE });
8715
8852
  let detachPanel = null;
8716
8853
  const today = /* @__PURE__ */ new Date();
8717
8854
  const todayKey = toKey2(today.getFullYear(), today.getMonth(), today.getDate());
@@ -8726,16 +8863,16 @@ var date_picker_default = {
8726
8863
  return end ? `${start} ~ ${end}` : `${start} ~ ${t("datePicker.rangeEnd")}`;
8727
8864
  });
8728
8865
  const initial = parse2(values.value[0]);
8729
- const viewYear = ref25(initial ? initial.year : today.getFullYear());
8730
- const viewMonth = ref25(initial ? initial.month : today.getMonth());
8731
- const pendingStart = ref25(values.value[0] || "");
8732
- const pendingEnd = ref25(values.value[1] || "");
8866
+ const viewYear = ref26(initial ? initial.year : today.getFullYear());
8867
+ const viewMonth = ref26(initial ? initial.month : today.getMonth());
8868
+ const pendingStart = ref26(values.value[0] || "");
8869
+ const pendingEnd = ref26(values.value[1] || "");
8733
8870
  const placeholderText = computed14(() => {
8734
8871
  if (props.placeholder) return props.placeholder;
8735
8872
  return t(props.range ? "datePicker.rangePlaceholder" : "datePicker.placeholder");
8736
8873
  });
8737
8874
  const weeks = computed14(() => t("datePicker.weeks").split(","));
8738
- const narrow = ref25(false);
8875
+ const narrow = ref26(false);
8739
8876
  let media = null;
8740
8877
  const onMediaChange = (event) => {
8741
8878
  narrow.value = event.matches;
@@ -8746,13 +8883,13 @@ var date_picker_default = {
8746
8883
  if (media.addEventListener) media.addEventListener("change", onMediaChange);
8747
8884
  else media.addListener(onMediaChange);
8748
8885
  }
8749
- onBeforeUnmount21(() => {
8886
+ onBeforeUnmount22(() => {
8750
8887
  if (!media) return;
8751
8888
  if (media.removeEventListener) media.removeEventListener("change", onMediaChange);
8752
8889
  else media.removeListener(onMediaChange);
8753
8890
  });
8754
8891
  const panelCount = computed14(() => props.range ? Math.min(narrow.value ? 1 : 2, Math.max(1, props.panels)) : 1);
8755
- const hoverKey = ref25("");
8892
+ const hoverKey = ref26("");
8756
8893
  const hoverRange = computed14(() => {
8757
8894
  if (!props.range || !pendingStart.value || pendingEnd.value || !hoverKey.value) return null;
8758
8895
  const a = pendingStart.value;
@@ -8932,7 +9069,7 @@ var date_picker_default = {
8932
9069
  pendingEnd.value = "";
8933
9070
  closePanel();
8934
9071
  }
8935
- onBeforeUnmount21(() => {
9072
+ onBeforeUnmount22(() => {
8936
9073
  if (detachPanel) {
8937
9074
  detachPanel();
8938
9075
  detachPanel = null;
@@ -9061,7 +9198,7 @@ var date_picker_default = {
9061
9198
  };
9062
9199
 
9063
9200
  // src/components/tree-select/index.js
9064
- import { ref as ref26, computed as computed15, nextTick as nextTick13, onBeforeUnmount as onBeforeUnmount22, watch as watch18 } from "vue";
9201
+ import { ref as ref27, computed as computed15, nextTick as nextTick13, onBeforeUnmount as onBeforeUnmount23, watch as watch19 } from "vue";
9065
9202
  function collectLeaves(node, keyOf2, out = []) {
9066
9203
  if (node.children && node.children.length) {
9067
9204
  node.children.forEach((child) => collectLeaves(child, keyOf2, out));
@@ -9097,13 +9234,13 @@ var tree_select_default = {
9097
9234
  },
9098
9235
  emits: ["update:modelValue", "change", "visible-change"],
9099
9236
  setup(props, { emit }) {
9100
- const open = ref26(false);
9101
- const root = ref26(null);
9102
- const panel = ref26(null);
9103
- const searchInput = ref26(null);
9104
- const search = ref26("");
9105
- const temp = ref26([]);
9106
- const panelStyle = ref26({ ...PANEL_HIDDEN_STYLE });
9237
+ const open = ref27(false);
9238
+ const root = ref27(null);
9239
+ const panel = ref27(null);
9240
+ const searchInput = ref27(null);
9241
+ const search = ref27("");
9242
+ const temp = ref27([]);
9243
+ const panelStyle = ref27({ ...PANEL_HIDDEN_STYLE });
9107
9244
  let detachPanel = null;
9108
9245
  function keyOf2(node) {
9109
9246
  return node ? node[props.nodeKey] : void 0;
@@ -9112,7 +9249,7 @@ var tree_select_default = {
9112
9249
  const value = node ? node[props.labelKey] : "";
9113
9250
  return value === null || value === void 0 ? "" : String(value);
9114
9251
  }
9115
- const expandedIds = ref26(
9252
+ const expandedIds = ref27(
9116
9253
  new Set(
9117
9254
  collectNodes(props.options).filter((node) => node.children && node.children.length).map((node) => keyOf2(node))
9118
9255
  )
@@ -9122,7 +9259,7 @@ var tree_select_default = {
9122
9259
  collectNodes(props.options).forEach((node) => map.set(keyOf2(node), node));
9123
9260
  return map;
9124
9261
  });
9125
- watch18(() => props.options, (options) => {
9262
+ watch19(() => props.options, (options) => {
9126
9263
  if (!options || !options.length || expandedIds.value.size) return;
9127
9264
  expandedIds.value = new Set(
9128
9265
  collectNodes(options).filter((node) => node.children && node.children.length).map((node) => keyOf2(node))
@@ -9281,7 +9418,7 @@ var tree_select_default = {
9281
9418
  emit("change", []);
9282
9419
  temp.value = [];
9283
9420
  }
9284
- onBeforeUnmount22(() => {
9421
+ onBeforeUnmount23(() => {
9285
9422
  if (detachPanel) {
9286
9423
  detachPanel();
9287
9424
  detachPanel = null;
@@ -9420,10 +9557,10 @@ var tree_select_default = {
9420
9557
  };
9421
9558
 
9422
9559
  // src/components/rich-editor/index.js
9423
- import { ref as ref28, computed as computed17, watch as watch20, onMounted as onMounted15, onBeforeUnmount as onBeforeUnmount23 } from "vue";
9560
+ import { ref as ref29, computed as computed17, watch as watch21, onMounted as onMounted15, onBeforeUnmount as onBeforeUnmount24 } from "vue";
9424
9561
 
9425
9562
  // src/components/media-picker/index.js
9426
- import { computed as computed16, ref as ref27, watch as watch19 } from "vue";
9563
+ import { computed as computed16, ref as ref28, watch as watch20 } from "vue";
9427
9564
  var media_picker_default = {
9428
9565
  name: "DjmMediaPicker",
9429
9566
  components: { DjmModal: modal_default, DjmPagination: pagination_default, DjmIcon: icon_default },
@@ -9442,10 +9579,10 @@ var media_picker_default = {
9442
9579
  },
9443
9580
  emits: ["update:modelValue", "change"],
9444
9581
  setup(props, { emit }) {
9445
- const open = ref27(false);
9446
- const keyword = ref27("");
9447
- const page = ref27(1);
9448
- const temp = ref27([]);
9582
+ const open = ref28(false);
9583
+ const keyword = ref28("");
9584
+ const page = ref28(1);
9585
+ const temp = ref28([]);
9449
9586
  const selectedIds = computed16(() => {
9450
9587
  if (props.multiple) return Array.isArray(props.modelValue) ? props.modelValue : [];
9451
9588
  if (props.modelValue === "" || props.modelValue === null || props.modelValue === void 0) return [];
@@ -9468,10 +9605,10 @@ var media_picker_default = {
9468
9605
  const start = (page.value - 1) * props.pageSize;
9469
9606
  return filtered.value.slice(start, start + props.pageSize);
9470
9607
  });
9471
- watch19(keyword, () => {
9608
+ watch20(keyword, () => {
9472
9609
  page.value = 1;
9473
9610
  });
9474
- watch19(
9611
+ watch20(
9475
9612
  () => filtered.value.length,
9476
9613
  () => {
9477
9614
  const max = Math.max(1, Math.ceil(filtered.value.length / props.pageSize));
@@ -9805,18 +9942,18 @@ var rich_editor_default = {
9805
9942
  },
9806
9943
  emits: ["update:modelValue", "upload-error"],
9807
9944
  setup(props, { emit }) {
9808
- const editor = ref28(null);
9809
- const fileInput = ref28(null);
9810
- const sourceMode = ref28(false);
9811
- const source = ref28(props.modelValue);
9812
- const fullscreen = ref28(false);
9813
- const panel = ref28("");
9814
- const uploadCount = ref28(0);
9815
- const textColor = ref28(COLORS[0]);
9816
- const bgColor = ref28("#fdf3c4");
9817
- const fontSize = ref28("");
9818
- const count2 = ref28(0);
9819
- const formats = ref28({
9945
+ const editor = ref29(null);
9946
+ const fileInput = ref29(null);
9947
+ const sourceMode = ref29(false);
9948
+ const source = ref29(props.modelValue);
9949
+ const fullscreen = ref29(false);
9950
+ const panel = ref29("");
9951
+ const uploadCount = ref29(0);
9952
+ const textColor = ref29(COLORS[0]);
9953
+ const bgColor = ref29("#fdf3c4");
9954
+ const fontSize = ref29("");
9955
+ const count2 = ref29(0);
9956
+ const formats = ref29({
9820
9957
  bold: false,
9821
9958
  italic: false,
9822
9959
  underline: false,
@@ -10210,7 +10347,7 @@ var rich_editor_default = {
10210
10347
  panel.value = "";
10211
10348
  }
10212
10349
  }
10213
- watch20(
10350
+ watch21(
10214
10351
  () => props.modelValue,
10215
10352
  (value) => {
10216
10353
  if (sourceMode.value) {
@@ -10229,7 +10366,7 @@ var rich_editor_default = {
10229
10366
  document.addEventListener("click", onDocumentClick);
10230
10367
  document.addEventListener("keydown", onKeydown);
10231
10368
  });
10232
- onBeforeUnmount23(() => {
10369
+ onBeforeUnmount24(() => {
10233
10370
  document.removeEventListener("selectionchange", syncFormats);
10234
10371
  document.removeEventListener("click", onDocumentClick);
10235
10372
  document.removeEventListener("keydown", onKeydown);
@@ -10532,7 +10669,7 @@ var rich_editor_default = {
10532
10669
  };
10533
10670
 
10534
10671
  // src/components/floating-window/index.js
10535
- import { ref as ref29, onBeforeUnmount as onBeforeUnmount24 } from "vue";
10672
+ import { ref as ref30, onBeforeUnmount as onBeforeUnmount25 } from "vue";
10536
10673
  function clamp(value, min, max) {
10537
10674
  return Math.min(Math.max(value, min), Math.max(min, max));
10538
10675
  }
@@ -10550,12 +10687,12 @@ var floating_window_default = {
10550
10687
  },
10551
10688
  emits: ["close", "focus"],
10552
10689
  setup(props, { emit }) {
10553
- const root = ref29(null);
10554
- const pos = ref29({ x: props.initialX, y: props.initialY });
10555
- const size = ref29({ w: props.width, h: props.height });
10556
- const minimized = ref29(false);
10557
- const maximized = ref29(false);
10558
- const saved = ref29(null);
10690
+ const root = ref30(null);
10691
+ const pos = ref30({ x: props.initialX, y: props.initialY });
10692
+ const size = ref30({ w: props.width, h: props.height });
10693
+ const minimized = ref30(false);
10694
+ const maximized = ref30(false);
10695
+ const saved = ref30(null);
10559
10696
  let drag = null;
10560
10697
  let resize = null;
10561
10698
  function stage() {
@@ -10643,7 +10780,7 @@ var floating_window_default = {
10643
10780
  }
10644
10781
  emit("focus");
10645
10782
  }
10646
- onBeforeUnmount24(() => {
10783
+ onBeforeUnmount25(() => {
10647
10784
  window.removeEventListener("pointermove", onDrag);
10648
10785
  window.removeEventListener("pointerup", endDrag);
10649
10786
  window.removeEventListener("pointermove", onResize);
@@ -10691,7 +10828,7 @@ var floating_window_default = {
10691
10828
  };
10692
10829
 
10693
10830
  // src/components/upload/index.js
10694
- import { reactive as reactive4, ref as ref30, watch as watch21, onBeforeUnmount as onBeforeUnmount25 } from "vue";
10831
+ import { reactive as reactive4, ref as ref31, watch as watch22, onBeforeUnmount as onBeforeUnmount26 } from "vue";
10695
10832
  var uidSeed6 = 0;
10696
10833
  function extension(name) {
10697
10834
  const index = name.lastIndexOf(".");
@@ -10741,11 +10878,11 @@ var upload_default = {
10741
10878
  },
10742
10879
  emits: ["update:modelValue", "change", "success", "error", "remove", "exceed"],
10743
10880
  setup(props, { emit }) {
10744
- const files = ref30([]);
10745
- const dragActive = ref30(false);
10746
- const inputRef = ref30(null);
10881
+ const files = ref31([]);
10882
+ const dragActive = ref31(false);
10883
+ const inputRef = ref31(null);
10747
10884
  const tasks = /* @__PURE__ */ new Map();
10748
- watch21(
10885
+ watch22(
10749
10886
  () => props.modelValue,
10750
10887
  (list) => {
10751
10888
  const next = list || [];
@@ -10899,7 +11036,7 @@ var upload_default = {
10899
11036
  files.value = [];
10900
11037
  emitList();
10901
11038
  }
10902
- onBeforeUnmount25(() => {
11039
+ onBeforeUnmount26(() => {
10903
11040
  files.value.forEach((item) => {
10904
11041
  if (item.url) URL.revokeObjectURL(item.url);
10905
11042
  });
@@ -11047,7 +11184,7 @@ var upload_default = {
11047
11184
  };
11048
11185
 
11049
11186
  // src/components/tree/index.js
11050
- import { computed as computed18, ref as ref31, watch as watch22 } from "vue";
11187
+ import { computed as computed18, ref as ref32, watch as watch23 } from "vue";
11051
11188
  var tree_default = {
11052
11189
  name: "DjmTree",
11053
11190
  components: { Icon: icon_default },
@@ -11079,17 +11216,17 @@ var tree_default = {
11079
11216
  },
11080
11217
  emits: ["update:checked", "update:expanded", "node-click", "check", "node-drop", "load-error"],
11081
11218
  setup(props, { emit }) {
11082
- const lazyChildren = ref31({});
11083
- const loadingKeys = ref31([]);
11084
- const innerExpanded = ref31([...props.expanded]);
11085
- const innerChecked = ref31([...props.checked]);
11086
- watch22(
11219
+ const lazyChildren = ref32({});
11220
+ const loadingKeys = ref32([]);
11221
+ const innerExpanded = ref32([...props.expanded]);
11222
+ const innerChecked = ref32([...props.checked]);
11223
+ watch23(
11087
11224
  () => props.expanded,
11088
11225
  (value) => {
11089
11226
  if (Array.isArray(value)) innerExpanded.value = value;
11090
11227
  }
11091
11228
  );
11092
- watch22(
11229
+ watch23(
11093
11230
  () => props.checked,
11094
11231
  (value) => {
11095
11232
  if (Array.isArray(value)) innerChecked.value = value;
@@ -11127,7 +11264,7 @@ var tree_default = {
11127
11264
  });
11128
11265
  return out;
11129
11266
  }
11130
- watch22(
11267
+ watch23(
11131
11268
  () => props.data,
11132
11269
  () => {
11133
11270
  if (props.defaultExpandAll) innerExpanded.value = collectExpandable(props.data);
@@ -11215,8 +11352,8 @@ var tree_default = {
11215
11352
  function isActive(node) {
11216
11353
  return props.activeKey !== "" && node[props.nodeKey] === props.activeKey;
11217
11354
  }
11218
- const rootEl = ref31(null);
11219
- const focusIndex = ref31(-1);
11355
+ const rootEl = ref32(null);
11356
+ const focusIndex = ref32(-1);
11220
11357
  function tabIndexOf(index) {
11221
11358
  return (focusIndex.value === -1 ? 0 : focusIndex.value) === index ? 0 : -1;
11222
11359
  }
@@ -11273,9 +11410,9 @@ var tree_default = {
11273
11410
  function rowClassOf(node, level) {
11274
11411
  return typeof props.rowClass === "function" ? props.rowClass(node, level) : props.rowClass;
11275
11412
  }
11276
- const dragKey = ref31("");
11277
- const dropKey = ref31("");
11278
- const dropPosition = ref31("");
11413
+ const dragKey = ref32("");
11414
+ const dropKey = ref32("");
11415
+ const dropPosition = ref32("");
11279
11416
  function findNodeByKey(key, nodes = props.data) {
11280
11417
  for (const node of nodes) {
11281
11418
  if (node[props.nodeKey] === key) return node;
@@ -11456,7 +11593,7 @@ var tree_default = {
11456
11593
  };
11457
11594
 
11458
11595
  // src/components/editable-table/index.js
11459
- import { computed as computed19, nextTick as nextTick14, reactive as reactive5, ref as ref32, useSlots, watch as watch23 } from "vue";
11596
+ import { computed as computed19, nextTick as nextTick14, reactive as reactive5, ref as ref33, useSlots, watch as watch24 } from "vue";
11460
11597
  var ACTIONS_KEY = "__editable_actions";
11461
11598
  function isEmpty(value) {
11462
11599
  if (value === "" || value === null || value === void 0) return true;
@@ -11480,10 +11617,10 @@ var editable_table_default = {
11480
11617
  emits: ["edit", "save", "cancel"],
11481
11618
  setup(props, { emit }) {
11482
11619
  const slots = useSlots();
11483
- const editingKey = ref32("");
11620
+ const editingKey = ref33("");
11484
11621
  const draft = reactive5({});
11485
11622
  const errors = reactive5({});
11486
- const tableRef = ref32(null);
11623
+ const tableRef = ref33(null);
11487
11624
  const editableColumns = computed19(() => props.columns.filter((column) => column.editor));
11488
11625
  const renderColumns = computed19(() => {
11489
11626
  if (!props.showActions) return props.columns;
@@ -11592,7 +11729,7 @@ var editable_table_default = {
11592
11729
  clearErrors();
11593
11730
  return true;
11594
11731
  }
11595
- watch23(
11732
+ watch24(
11596
11733
  () => props.rows,
11597
11734
  () => {
11598
11735
  if (editingKey.value && !findRow(editingKey.value)) {
@@ -11774,7 +11911,7 @@ var message_default = {
11774
11911
  };
11775
11912
 
11776
11913
  // src/components/org-picker/index.js
11777
- import { computed as computed20, onBeforeUnmount as onBeforeUnmount26, ref as ref33, watch as watch24 } from "vue";
11914
+ import { computed as computed20, onBeforeUnmount as onBeforeUnmount27, ref as ref34, watch as watch25 } from "vue";
11778
11915
  var org_picker_default = {
11779
11916
  name: "DjmOrgPicker",
11780
11917
  components: { DjmIcon: icon_default },
@@ -11793,13 +11930,13 @@ var org_picker_default = {
11793
11930
  },
11794
11931
  emits: ["update:modelValue", "change", "visible-change"],
11795
11932
  setup(props, { emit }) {
11796
- const open = ref33(false);
11797
- const root = ref33(null);
11798
- const searchRef = ref33(null);
11799
- const keyword = ref33("");
11800
- const activeDept = ref33("");
11801
- const temp = ref33([]);
11802
- const expandedIds = ref33(/* @__PURE__ */ new Set());
11933
+ const open = ref34(false);
11934
+ const root = ref34(null);
11935
+ const searchRef = ref34(null);
11936
+ const keyword = ref34("");
11937
+ const activeDept = ref34("");
11938
+ const temp = ref34([]);
11939
+ const expandedIds = ref34(/* @__PURE__ */ new Set());
11803
11940
  let detachPanel = null;
11804
11941
  function collectDeptIds(nodes, out = []) {
11805
11942
  nodes.forEach((node) => {
@@ -11870,8 +12007,8 @@ var org_picker_default = {
11870
12007
  const selectedCount = computed20(() => temp.value.length);
11871
12008
  const placeholderText = computed20(() => props.placeholder || t("orgPicker.placeholder"));
11872
12009
  const emptyLabel = computed20(() => props.emptyText || t("orgPicker.empty"));
11873
- const panel = ref33(null);
11874
- const panelStyle = ref33({ ...PANEL_HIDDEN_STYLE });
12010
+ const panel = ref34(null);
12011
+ const panelStyle = ref34({ ...PANEL_HIDDEN_STYLE });
11875
12012
  const PANEL_HEIGHT = 342;
11876
12013
  function updatePosition() {
11877
12014
  if (!open.value || !root.value) return;
@@ -11888,7 +12025,7 @@ var org_picker_default = {
11888
12025
  expandedIds.value = new Set(collectDeptIds(props.departments));
11889
12026
  }
11890
12027
  expandAll();
11891
- watch24(() => props.departments, () => {
12028
+ watch25(() => props.departments, () => {
11892
12029
  expandedIds.value = /* @__PURE__ */ new Set([...expandedIds.value, ...collectDeptIds(props.departments)]);
11893
12030
  });
11894
12031
  function initialOf(item) {
@@ -11977,7 +12114,7 @@ var org_picker_default = {
11977
12114
  function clearTemp() {
11978
12115
  temp.value = [];
11979
12116
  }
11980
- onBeforeUnmount26(() => {
12117
+ onBeforeUnmount27(() => {
11981
12118
  if (detachPanel) {
11982
12119
  detachPanel();
11983
12120
  detachPanel = null;
@@ -12163,7 +12300,7 @@ var org_picker_default = {
12163
12300
  };
12164
12301
 
12165
12302
  // src/components/schema-form/index.js
12166
- import { computed as computed21, reactive as reactive7, ref as ref34, watch as watch25 } from "vue";
12303
+ import { computed as computed21, reactive as reactive7, ref as ref35, watch as watch26 } from "vue";
12167
12304
  var CONTROL_MAP = {
12168
12305
  input: input_default,
12169
12306
  number: input_number_default,
@@ -12199,22 +12336,22 @@ var schema_form_default = {
12199
12336
  },
12200
12337
  emits: ["update:modelValue", "change"],
12201
12338
  setup(props, { emit }) {
12202
- const innerForm = ref34(null);
12339
+ const innerForm = ref35(null);
12203
12340
  const model = reactive7({ ...props.modelValue });
12204
- watch25(() => props.fields, (fields) => {
12341
+ watch26(() => props.fields, (fields) => {
12205
12342
  fields.forEach((field) => {
12206
12343
  if (model[field.key] === void 0 && field.default !== void 0) {
12207
12344
  model[field.key] = typeof field.default === "function" ? field.default() : field.default;
12208
12345
  }
12209
12346
  });
12210
12347
  }, { immediate: true, deep: true });
12211
- watch25(() => props.modelValue, (value) => {
12348
+ watch26(() => props.modelValue, (value) => {
12212
12349
  if (!value) return;
12213
12350
  Object.keys(value).forEach((key) => {
12214
12351
  if (model[key] !== value[key]) model[key] = value[key];
12215
12352
  });
12216
12353
  }, { deep: true });
12217
- watch25(model, () => {
12354
+ watch26(model, () => {
12218
12355
  emit("update:modelValue", { ...model });
12219
12356
  emit("change", { ...model });
12220
12357
  }, { deep: true });
@@ -12425,7 +12562,7 @@ var approval_flow_default = {
12425
12562
  };
12426
12563
 
12427
12564
  // src/components/query-filter/index.js
12428
- import { computed as computed22, reactive as reactive8, ref as ref35, watch as watch26 } from "vue";
12565
+ import { computed as computed22, reactive as reactive8, ref as ref36, watch as watch27 } from "vue";
12429
12566
  var CONTROL_MAP2 = {
12430
12567
  input: input_default,
12431
12568
  number: input_number_default,
@@ -12450,22 +12587,22 @@ var query_filter_default = {
12450
12587
  },
12451
12588
  emits: ["update:modelValue", "search", "reset"],
12452
12589
  setup(props, { emit }) {
12453
- const expanded = ref35(false);
12590
+ const expanded = ref36(false);
12454
12591
  const model = reactive8({ ...props.modelValue });
12455
- watch26(() => props.fields, (fields) => {
12592
+ watch27(() => props.fields, (fields) => {
12456
12593
  fields.forEach((field) => {
12457
12594
  if (model[field.key] === void 0 && field.default !== void 0) {
12458
12595
  model[field.key] = typeof field.default === "function" ? field.default() : field.default;
12459
12596
  }
12460
12597
  });
12461
12598
  }, { immediate: true, deep: true });
12462
- watch26(() => props.modelValue, (value) => {
12599
+ watch27(() => props.modelValue, (value) => {
12463
12600
  if (!value) return;
12464
12601
  Object.keys(value).forEach((key) => {
12465
12602
  if (model[key] !== value[key]) model[key] = value[key];
12466
12603
  });
12467
12604
  }, { deep: true });
12468
- watch26(model, () => {
12605
+ watch27(model, () => {
12469
12606
  emit("update:modelValue", { ...model });
12470
12607
  }, { deep: true });
12471
12608
  const collapsible = computed22(() => props.fields.length > props.visibleCount);
@@ -12599,7 +12736,7 @@ var filter_tags_default = {
12599
12736
  };
12600
12737
 
12601
12738
  // src/components/kanban/index.js
12602
- import { ref as ref36, watch as watch27 } from "vue";
12739
+ import { ref as ref37, watch as watch28 } from "vue";
12603
12740
  function cloneColumns(list) {
12604
12741
  return (list || []).map((col) => ({ ...col, cards: (col.cards || []).slice() }));
12605
12742
  }
@@ -12616,15 +12753,15 @@ var kanban_default = {
12616
12753
  },
12617
12754
  emits: ["update:columns", "change", "card-move", "card-click", "card-add"],
12618
12755
  setup(props, { emit }) {
12619
- const inner = ref36(cloneColumns(props.columns));
12620
- watch27(
12756
+ const inner = ref37(cloneColumns(props.columns));
12757
+ watch28(
12621
12758
  () => props.columns,
12622
12759
  (list) => {
12623
12760
  inner.value = cloneColumns(list);
12624
12761
  }
12625
12762
  );
12626
- const dragCard = ref36(null);
12627
- const dropTarget = ref36(null);
12763
+ const dragCard = ref37(null);
12764
+ const dropTarget = ref37(null);
12628
12765
  function columnOf(key) {
12629
12766
  return inner.value.find((col) => col.key === key);
12630
12767
  }
@@ -12924,7 +13061,7 @@ var attachment_list_default = {
12924
13061
  };
12925
13062
 
12926
13063
  // src/components/notification/index.js
12927
- import { computed as computed24, onBeforeUnmount as onBeforeUnmount27, ref as ref37 } from "vue";
13064
+ import { computed as computed24, onBeforeUnmount as onBeforeUnmount28, ref as ref38 } from "vue";
12928
13065
  var TYPE_MAP = {
12929
13066
  info: { icon: "info", cls: "djm-is-info" },
12930
13067
  success: { icon: "check", cls: "djm-is-success" },
@@ -12956,7 +13093,7 @@ var notification_default = {
12956
13093
  function onReadAll() {
12957
13094
  emit("read-all");
12958
13095
  }
12959
- const clearing = ref37(false);
13096
+ const clearing = ref38(false);
12960
13097
  let clearTimer = null;
12961
13098
  function onClear() {
12962
13099
  if (!clearing.value) {
@@ -12970,7 +13107,7 @@ var notification_default = {
12970
13107
  clearing.value = false;
12971
13108
  emit("clear");
12972
13109
  }
12973
- onBeforeUnmount27(() => window.clearTimeout(clearTimer));
13110
+ onBeforeUnmount28(() => window.clearTimeout(clearTimer));
12974
13111
  function onRemove(item) {
12975
13112
  emit("remove", item);
12976
13113
  }
@@ -13045,7 +13182,7 @@ var notification_default = {
13045
13182
  };
13046
13183
 
13047
13184
  // src/components/config-provider/index.js
13048
- import { watch as watch28 } from "vue";
13185
+ import { watch as watch29 } from "vue";
13049
13186
  var SIZE_HEIGHT = { xs: "24px", sm: "28px", md: "30px", lg: "34px" };
13050
13187
  var config_provider_default = {
13051
13188
  name: "DjmConfigProvider",
@@ -13055,7 +13192,7 @@ var config_provider_default = {
13055
13192
  },
13056
13193
  setup(props) {
13057
13194
  if (props.locale) setLocale(props.locale);
13058
- watch28(
13195
+ watch29(
13059
13196
  () => props.locale,
13060
13197
  (code) => {
13061
13198
  if (code) setLocale(code);
@@ -13077,7 +13214,7 @@ var config_provider_default = {
13077
13214
  };
13078
13215
 
13079
13216
  // src/components/date-time-picker/index.js
13080
- import { ref as ref38, computed as computed25, watch as watch29, onBeforeUnmount as onBeforeUnmount28 } from "vue";
13217
+ import { ref as ref39, computed as computed25, watch as watch30, onBeforeUnmount as onBeforeUnmount29 } from "vue";
13081
13218
  var uidSeed7 = 0;
13082
13219
  var pad4 = (value) => String(value).padStart(2, "0");
13083
13220
  function toDateKey(year, month, day) {
@@ -13110,20 +13247,20 @@ var date_time_picker_default = {
13110
13247
  },
13111
13248
  emits: ["update:modelValue", "change", "visible-change"],
13112
13249
  setup(props, { emit }) {
13113
- const open = ref38(false);
13114
- watch29(open, (value) => emit("visible-change", value));
13115
- const root = ref38(null);
13116
- const panel = ref38(null);
13250
+ const open = ref39(false);
13251
+ watch30(open, (value) => emit("visible-change", value));
13252
+ const root = ref39(null);
13253
+ const panel = ref39(null);
13117
13254
  const panelId = "djm-datetime-panel-" + ++uidSeed7;
13118
- const panelStyle = ref38({ ...PANEL_HIDDEN_STYLE });
13255
+ const panelStyle = ref39({ ...PANEL_HIDDEN_STYLE });
13119
13256
  let detachPanel = null;
13120
13257
  const today = /* @__PURE__ */ new Date();
13121
13258
  const todayKey = toDateKey(today.getFullYear(), today.getMonth(), today.getDate());
13122
13259
  const hasSeconds = computed25(() => props.format.indexOf("ss") > -1);
13123
- const draft = ref38({ date: "", h: "00", m: "00", s: "00" });
13260
+ const draft = ref39({ date: "", h: "00", m: "00", s: "00" });
13124
13261
  const initial = parseDate(parseValue(props.modelValue).date);
13125
- const viewYear = ref38(initial ? initial.year : today.getFullYear());
13126
- const viewMonth = ref38(initial ? initial.month : today.getMonth());
13262
+ const viewYear = ref39(initial ? initial.year : today.getFullYear());
13263
+ const viewMonth = ref39(initial ? initial.month : today.getMonth());
13127
13264
  const displayText = computed25(() => props.modelValue || "");
13128
13265
  const placeholderText = computed25(() => props.placeholder || t("dateTimePicker.placeholder"));
13129
13266
  const weeks = computed25(() => t("datePicker.weeks").split(","));
@@ -13279,7 +13416,7 @@ var date_time_picker_default = {
13279
13416
  emit("change", "");
13280
13417
  closePanel();
13281
13418
  }
13282
- onBeforeUnmount28(() => {
13419
+ onBeforeUnmount29(() => {
13283
13420
  if (detachPanel) {
13284
13421
  detachPanel();
13285
13422
  detachPanel = null;
@@ -13404,7 +13541,7 @@ var date_time_picker_default = {
13404
13541
  };
13405
13542
 
13406
13543
  // src/components/virtual-list/index.js
13407
- import { ref as ref39, computed as computed26, watch as watch30, onMounted as onMounted16, onBeforeUnmount as onBeforeUnmount29 } from "vue";
13544
+ import { ref as ref40, computed as computed26, watch as watch31, onMounted as onMounted16, onBeforeUnmount as onBeforeUnmount30 } from "vue";
13408
13545
  var virtual_list_default = {
13409
13546
  name: "DjmVirtualList",
13410
13547
  props: {
@@ -13421,9 +13558,9 @@ var virtual_list_default = {
13421
13558
  },
13422
13559
  emits: ["scroll", "reach-bottom", "item-click"],
13423
13560
  setup(props, { emit, expose }) {
13424
- const viewport = ref39(null);
13425
- const scrollTop = ref39(0);
13426
- const viewHeight = ref39(typeof props.height === "number" ? props.height : 320);
13561
+ const viewport = ref40(null);
13562
+ const scrollTop = ref40(0);
13563
+ const viewHeight = ref40(typeof props.height === "number" ? props.height : 320);
13427
13564
  let bottomFired = false;
13428
13565
  function rowHeight(item, index) {
13429
13566
  return typeof props.itemHeight === "function" ? Math.max(1, Number(props.itemHeight(item, index)) || 1) : Math.max(1, props.itemHeight);
@@ -13493,7 +13630,7 @@ var virtual_list_default = {
13493
13630
  else if (start < el.scrollTop) el.scrollTop = start;
13494
13631
  else if (end > el.scrollTop + el.clientHeight) el.scrollTop = end - el.clientHeight;
13495
13632
  }
13496
- watch30(
13633
+ watch31(
13497
13634
  () => props.height,
13498
13635
  () => {
13499
13636
  if (viewport.value) viewHeight.value = viewport.value.clientHeight;
@@ -13510,7 +13647,7 @@ var virtual_list_default = {
13510
13647
  resizeObserver.observe(viewport.value);
13511
13648
  }
13512
13649
  });
13513
- onBeforeUnmount29(() => {
13650
+ onBeforeUnmount30(() => {
13514
13651
  if (resizeObserver) resizeObserver.disconnect();
13515
13652
  });
13516
13653
  function onItemClick(row) {
@@ -13599,7 +13736,7 @@ var batch_bar_default = {
13599
13736
  };
13600
13737
 
13601
13738
  // src/components/import-wizard/index.js
13602
- import { ref as ref40, computed as computed28, watch as watch31 } from "vue";
13739
+ import { ref as ref41, computed as computed28, watch as watch32 } from "vue";
13603
13740
  function matchAccept2(name, accept) {
13604
13741
  if (!accept) return true;
13605
13742
  const ext = "." + String(name).split(".").pop().toLowerCase();
@@ -13626,19 +13763,19 @@ var import_wizard_default = {
13626
13763
  },
13627
13764
  emits: ["update:step", "update:mapping", "file-change", "submit", "retry"],
13628
13765
  setup(props, { emit }) {
13629
- const innerStep = ref40(props.step || 1);
13630
- watch31(
13766
+ const innerStep = ref41(props.step || 1);
13767
+ watch32(
13631
13768
  () => props.step,
13632
13769
  (value) => {
13633
13770
  if (value) innerStep.value = value;
13634
13771
  }
13635
13772
  );
13636
- const file = ref40(null);
13637
- const fileError = ref40("");
13638
- const mappingError = ref40("");
13639
- const fileInput = ref40(null);
13640
- const innerMapping = ref40({ ...props.mapping });
13641
- watch31(
13773
+ const file = ref41(null);
13774
+ const fileError = ref41("");
13775
+ const mappingError = ref41("");
13776
+ const fileInput = ref41(null);
13777
+ const innerMapping = ref41({ ...props.mapping });
13778
+ watch32(
13642
13779
  () => props.mapping,
13643
13780
  (value) => {
13644
13781
  innerMapping.value = { ...value };
@@ -13703,7 +13840,7 @@ var import_wizard_default = {
13703
13840
  }
13704
13841
  emit("submit", { ...innerMapping.value });
13705
13842
  }
13706
- watch31(
13843
+ watch32(
13707
13844
  () => props.result,
13708
13845
  (value) => {
13709
13846
  if (value && (value.total || value.success || value.failed || value.errors && value.errors.length)) {
@@ -13870,7 +14007,7 @@ var import_wizard_default = {
13870
14007
  };
13871
14008
 
13872
14009
  // src/components/diff/index.js
13873
- import { ref as ref41, computed as computed29 } from "vue";
14010
+ import { ref as ref42, computed as computed29 } from "vue";
13874
14011
 
13875
14012
  // src/utils/text-diff.js
13876
14013
  var MAX_CELLS = 1e6;
@@ -13944,7 +14081,7 @@ var diff_default = {
13944
14081
  });
13945
14082
  return { add, remove };
13946
14083
  });
13947
- const expandedBlocks = ref41([]);
14084
+ const expandedBlocks = ref42([]);
13948
14085
  function expand(index) {
13949
14086
  expandedBlocks.value = expandedBlocks.value.concat(index);
13950
14087
  }
@@ -14071,7 +14208,7 @@ var diff_default = {
14071
14208
  };
14072
14209
 
14073
14210
  // src/components/tree-table/index.js
14074
- import { ref as ref42, computed as computed30, watch as watch32 } from "vue";
14211
+ import { ref as ref43, computed as computed30, watch as watch33 } from "vue";
14075
14212
  function keyOf(row, rowKey) {
14076
14213
  return row && row[rowKey] !== void 0 ? row[rowKey] : row && row.id;
14077
14214
  }
@@ -14110,17 +14247,17 @@ var tree_table_default = {
14110
14247
  eachNode(props.data, (row) => keys.push(keyOf(row, props.rowKey)));
14111
14248
  return keys;
14112
14249
  }
14113
- const innerExpanded = ref42(
14250
+ const innerExpanded = ref43(
14114
14251
  props.expandedKeys ? props.expandedKeys.slice() : props.defaultExpandAll ? allKeys() : []
14115
14252
  );
14116
- watch32(
14253
+ watch33(
14117
14254
  () => props.expandedKeys,
14118
14255
  (value) => {
14119
14256
  if (value) innerExpanded.value = value.slice();
14120
14257
  }
14121
14258
  );
14122
- const innerChecked = ref42(props.checkedKeys ? props.checkedKeys.slice() : []);
14123
- watch32(
14259
+ const innerChecked = ref43(props.checkedKeys ? props.checkedKeys.slice() : []);
14260
+ watch33(
14124
14261
  () => props.checkedKeys,
14125
14262
  (value) => {
14126
14263
  if (value) innerChecked.value = value.slice();
@@ -14352,7 +14489,7 @@ var tree_table_default = {
14352
14489
  };
14353
14490
 
14354
14491
  // src/components/schedule/index.js
14355
- import { ref as ref43, computed as computed31, watch as watch33, onBeforeUnmount as onBeforeUnmount30 } from "vue";
14492
+ import { ref as ref44, computed as computed31, watch as watch34, onBeforeUnmount as onBeforeUnmount31 } from "vue";
14356
14493
  var pad5 = (value) => String(value).padStart(2, "0");
14357
14494
  function toKey3(date) {
14358
14495
  return `${date.getFullYear()}-${pad5(date.getMonth() + 1)}-${pad5(date.getDate())}`;
@@ -14384,13 +14521,13 @@ var schedule_default = {
14384
14521
  emits: ["update:modelValue", "event-click", "slot-click", "week-change"],
14385
14522
  setup(props, { emit }) {
14386
14523
  const todayKey = toKey3(/* @__PURE__ */ new Date());
14387
- const nowMinutes = ref43((/* @__PURE__ */ new Date()).getHours() * 60 + (/* @__PURE__ */ new Date()).getMinutes());
14524
+ const nowMinutes = ref44((/* @__PURE__ */ new Date()).getHours() * 60 + (/* @__PURE__ */ new Date()).getMinutes());
14388
14525
  const timer = window.setInterval(() => {
14389
14526
  const now = /* @__PURE__ */ new Date();
14390
14527
  nowMinutes.value = now.getHours() * 60 + now.getMinutes();
14391
14528
  }, 6e4);
14392
- const anchor = ref43(props.modelValue || todayKey);
14393
- watch33(
14529
+ const anchor = ref44(props.modelValue || todayKey);
14530
+ watch34(
14394
14531
  () => props.modelValue,
14395
14532
  (value) => {
14396
14533
  if (value) anchor.value = value;
@@ -14497,7 +14634,7 @@ var schedule_default = {
14497
14634
  const minute = minutes % 60;
14498
14635
  emit("slot-click", { date: day.key, time: `${pad5(hour)}:${pad5(minute)}` });
14499
14636
  }
14500
- onBeforeUnmount30(() => window.clearInterval(timer));
14637
+ onBeforeUnmount31(() => window.clearInterval(timer));
14501
14638
  return {
14502
14639
  days,
14503
14640
  hours,
@@ -14597,7 +14734,7 @@ var schedule_default = {
14597
14734
  };
14598
14735
 
14599
14736
  // src/components/comment/index.js
14600
- import { ref as ref44, computed as computed32 } from "vue";
14737
+ import { ref as ref45, computed as computed32 } from "vue";
14601
14738
  var comment_default = {
14602
14739
  name: "DjmComment",
14603
14740
  components: { DjmAvatar: avatar_default, DjmIcon: icon_default },
@@ -14614,8 +14751,8 @@ var comment_default = {
14614
14751
  },
14615
14752
  emits: ["submit", "reply", "remove"],
14616
14753
  setup(props, { emit }) {
14617
- const content = ref44("");
14618
- const replyTarget = ref44(null);
14754
+ const content = ref45("");
14755
+ const replyTarget = ref45(null);
14619
14756
  const placeholderText = computed32(() => {
14620
14757
  if (replyTarget.value) return t("comment.replyPlaceholder", { name: replyTarget.value.author });
14621
14758
  return props.placeholder || t("comment.placeholder");
@@ -14728,7 +14865,7 @@ var comment_default = {
14728
14865
  };
14729
14866
 
14730
14867
  // src/components/signature/index.js
14731
- import { ref as ref45, onMounted as onMounted17, onBeforeUnmount as onBeforeUnmount31, watch as watch34 } from "vue";
14868
+ import { ref as ref46, onMounted as onMounted17, onBeforeUnmount as onBeforeUnmount32, watch as watch35 } from "vue";
14732
14869
  var signature_default = {
14733
14870
  name: "DjmSignature",
14734
14871
  props: {
@@ -14742,10 +14879,10 @@ var signature_default = {
14742
14879
  },
14743
14880
  emits: ["update:modelValue", "change", "start", "end", "clear"],
14744
14881
  setup(props, { emit }) {
14745
- const canvas = ref45(null);
14746
- const root = ref45(null);
14747
- const strokes = ref45([]);
14748
- const hasImage = ref45(false);
14882
+ const canvas = ref46(null);
14883
+ const root = ref46(null);
14884
+ const strokes = ref46([]);
14885
+ const hasImage = ref46(false);
14749
14886
  let imageCache = null;
14750
14887
  let drawing = false;
14751
14888
  let current = null;
@@ -14860,7 +14997,7 @@ var signature_default = {
14860
14997
  return canvas.value ? canvas.value.toDataURL("image/png") : "";
14861
14998
  }
14862
14999
  const isEmpty2 = () => strokes.value.length === 0 && !hasImage.value;
14863
- watch34(
15000
+ watch35(
14864
15001
  () => props.modelValue,
14865
15002
  (value) => {
14866
15003
  if (value === lastEmitted) return;
@@ -14898,7 +15035,7 @@ var signature_default = {
14898
15035
  if (root.value) observer.observe(root.value);
14899
15036
  }
14900
15037
  });
14901
- onBeforeUnmount31(() => {
15038
+ onBeforeUnmount32(() => {
14902
15039
  if (observer) observer.disconnect();
14903
15040
  });
14904
15041
  return {
@@ -14938,7 +15075,7 @@ var signature_default = {
14938
15075
  };
14939
15076
 
14940
15077
  // src/components/print/index.js
14941
- import { ref as ref46, computed as computed33 } from "vue";
15078
+ import { ref as ref47, computed as computed33 } from "vue";
14942
15079
  function escapeHtml(text) {
14943
15080
  return String(text).replace(/[&<>"]/g, (ch) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" })[ch]);
14944
15081
  }
@@ -14954,7 +15091,7 @@ var print_default = {
14954
15091
  },
14955
15092
  emits: ["before-print", "after-print"],
14956
15093
  setup(props, { emit }) {
14957
- const content = ref46(null);
15094
+ const content = ref47(null);
14958
15095
  const label = computed33(() => props.buttonText || t("print.button"));
14959
15096
  function collectStyles() {
14960
15097
  return Array.from(document.querySelectorAll('link[rel="stylesheet"], style')).map((el) => el.outerHTML).join("");
@@ -15175,7 +15312,7 @@ var gantt_default = {
15175
15312
  };
15176
15313
 
15177
15314
  // src/components/field-list/index.js
15178
- import { ref as ref47, computed as computed35, watch as watch35 } from "vue";
15315
+ import { ref as ref48, computed as computed35, watch as watch36 } from "vue";
15179
15316
  var uidSeed8 = 0;
15180
15317
  var field_list_default = {
15181
15318
  name: "DjmFieldList",
@@ -15195,7 +15332,7 @@ var field_list_default = {
15195
15332
  },
15196
15333
  emits: ["update:modelValue", "add", "remove", "change"],
15197
15334
  setup(props, { emit }) {
15198
- const uids = ref47([]);
15335
+ const uids = ref48([]);
15199
15336
  function syncUids() {
15200
15337
  const length = props.modelValue.length;
15201
15338
  if (uids.value.length === length) return;
@@ -15204,8 +15341,8 @@ var field_list_default = {
15204
15341
  uids.value = next;
15205
15342
  }
15206
15343
  syncUids();
15207
- watch35(() => props.modelValue.length, syncUids);
15208
- const errors = ref47({});
15344
+ watch36(() => props.modelValue.length, syncUids);
15345
+ const errors = ref48({});
15209
15346
  const addLabel = computed35(() => props.addText || t("fieldList.add"));
15210
15347
  const emptyLabel = computed35(() => props.emptyText || t("fieldList.empty"));
15211
15348
  const canAdd = computed35(() => !props.disabled && (!props.max || props.modelValue.length < props.max));
@@ -15371,7 +15508,7 @@ var field_list_default = {
15371
15508
  };
15372
15509
 
15373
15510
  // src/components/chat/index.js
15374
- import { ref as ref48, computed as computed36, watch as watch36, nextTick as nextTick15 } from "vue";
15511
+ import { ref as ref49, computed as computed36, watch as watch37, nextTick as nextTick15 } from "vue";
15375
15512
  var chat_default = {
15376
15513
  name: "DjmChat",
15377
15514
  components: { DjmAvatar: avatar_default },
@@ -15388,8 +15525,8 @@ var chat_default = {
15388
15525
  },
15389
15526
  emits: ["submit"],
15390
15527
  setup(props, { emit }) {
15391
- const content = ref48("");
15392
- const listRef = ref48(null);
15528
+ const content = ref49("");
15529
+ const listRef = ref49(null);
15393
15530
  const placeholderText = computed36(() => props.placeholder || t("chat.placeholder"));
15394
15531
  const sendLabel = computed36(() => props.sendText || t("chat.send"));
15395
15532
  const emptyLabel = computed36(() => props.emptyText || t("chat.empty"));
@@ -15398,7 +15535,7 @@ var chat_default = {
15398
15535
  const el = listRef.value;
15399
15536
  if (el) el.scrollTop = el.scrollHeight;
15400
15537
  }
15401
- watch36(
15538
+ watch37(
15402
15539
  () => props.messages.length,
15403
15540
  () => nextTick15(scrollToBottom)
15404
15541
  );
@@ -15511,7 +15648,7 @@ var chat_default = {
15511
15648
  };
15512
15649
 
15513
15650
  // src/components/org-chart/index.js
15514
- import { ref as ref49, computed as computed37, watch as watch37 } from "vue";
15651
+ import { ref as ref50, computed as computed37, watch as watch38 } from "vue";
15515
15652
  var org_chart_default = {
15516
15653
  name: "DjmOrgChart",
15517
15654
  components: { DjmAvatar: avatar_default, DjmIcon: icon_default },
@@ -15544,8 +15681,8 @@ var org_chart_default = {
15544
15681
  walk(node);
15545
15682
  return keys;
15546
15683
  }
15547
- const collapsed = ref49(props.defaultExpandAll ? [] : collapsedByDefault(props.data));
15548
- watch37(() => props.data, (data) => {
15684
+ const collapsed = ref50(props.defaultExpandAll ? [] : collapsedByDefault(props.data));
15685
+ watch38(() => props.data, (data) => {
15549
15686
  collapsed.value = props.defaultExpandAll ? [] : collapsedByDefault(data);
15550
15687
  });
15551
15688
  const layout = computed37(() => {
@@ -15938,7 +16075,7 @@ var components = [
15938
16075
  org_chart_default,
15939
16076
  page_tabs_default
15940
16077
  ];
15941
- var version = "0.72.0";
16078
+ var version = "0.73.1";
15942
16079
  function install(app, options = {}) {
15943
16080
  if (options.locale) setLocale(options.locale);
15944
16081
  components.forEach((component) => app.component(component.name, component));
@@ -16060,6 +16197,7 @@ export {
16060
16197
  djmMessage,
16061
16198
  djmMessages,
16062
16199
  getLocale,
16200
+ glass,
16063
16201
  hasPermission,
16064
16202
  initTheme,
16065
16203
  install,
@@ -16069,6 +16207,7 @@ export {
16069
16207
  primaryColor,
16070
16208
  resetPrimaryColor,
16071
16209
  sanitizeHtml,
16210
+ setGlass,
16072
16211
  setLocale,
16073
16212
  setPermissions,
16074
16213
  setPrimaryColor,