djm-ui 0.72.0 → 0.73.0

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,4 @@
1
- /*! DJM UI v0.72.0 · MIT · 2026-10-26 */
1
+ /*! DJM UI v0.73.0 · MIT · 2026-10-26 */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __esm = (fn, res, err) => function __init() {
@@ -1722,7 +1722,7 @@ function t(key, params) {
1722
1722
  // src/utils/panel.js
1723
1723
  var PANEL_HIDDEN_STYLE = { position: "fixed", left: "0px", top: "0px", visibility: "hidden" };
1724
1724
  function bindPanelListeners({ root, panel, onClose, onReposition, esc = true }) {
1725
- const el = (ref50) => typeof ref50 === "function" ? ref50() : ref50;
1725
+ const el = (ref51) => typeof ref51 === "function" ? ref51() : ref51;
1726
1726
  function onDocumentMousedown(event) {
1727
1727
  const rootEl = el(root);
1728
1728
  const panelEl = el(panel);
@@ -4095,12 +4095,18 @@ var progress_default = {
4095
4095
  name: "DjmProgress",
4096
4096
  props: {
4097
4097
  percent: { type: Number, default: 0 },
4098
+ // line 横向 / circle 环形
4099
+ type: { type: String, default: "line" },
4098
4100
  // '' / success / error / warning
4099
4101
  status: { type: String, default: "" },
4100
4102
  showText: { type: Boolean, default: true },
4101
4103
  strokeWidth: { type: Number, default: 6 },
4102
4104
  // 自定义进度色,不传由状态决定
4103
- color: { type: String, default: "" }
4105
+ color: { type: String, default: "" },
4106
+ // 环形直径(px)
4107
+ size: { type: Number, default: 96 },
4108
+ // 无障碍名称,默认「进度」
4109
+ label: { type: String, default: "" }
4104
4110
  },
4105
4111
  computed: {
4106
4112
  safePercent() {
@@ -4113,10 +4119,72 @@ var progress_default = {
4113
4119
  },
4114
4120
  trackStyle() {
4115
4121
  return { height: this.strokeWidth + "px" };
4122
+ },
4123
+ circleSize() {
4124
+ return Math.max(48, Number(this.size) || 96);
4125
+ },
4126
+ circleRadius() {
4127
+ return (this.circleSize - this.strokeWidth) / 2;
4128
+ },
4129
+ circleLength() {
4130
+ return 2 * Math.PI * this.circleRadius;
4131
+ },
4132
+ circleOffset() {
4133
+ return this.circleLength * (1 - this.safePercent / 100);
4134
+ },
4135
+ circleStyle() {
4136
+ return { width: this.circleSize + "px", height: this.circleSize + "px" };
4137
+ },
4138
+ circleLabelStyle() {
4139
+ return { fontSize: Math.max(12, Math.round(this.circleSize / 5)) + "px" };
4116
4140
  }
4117
4141
  },
4118
4142
  template: `
4119
- <div class="djm-progress-line" :class="status ? 'djm-is-' + status : ''">
4143
+ <div
4144
+ v-if="type === 'circle'"
4145
+ class="djm-progress-circle"
4146
+ :class="status ? 'djm-is-' + status : ''"
4147
+ :style="circleStyle"
4148
+ role="progressbar"
4149
+ :aria-label="label || '\u8FDB\u5EA6'"
4150
+ :aria-valuenow="safePercent"
4151
+ aria-valuemin="0"
4152
+ aria-valuemax="100"
4153
+ >
4154
+ <svg :viewBox="'0 0 ' + circleSize + ' ' + circleSize" aria-hidden="true">
4155
+ <circle
4156
+ class="djm-progress-circle-track"
4157
+ :cx="circleSize / 2"
4158
+ :cy="circleSize / 2"
4159
+ :r="circleRadius"
4160
+ :stroke-width="strokeWidth"
4161
+ fill="none"
4162
+ />
4163
+ <circle
4164
+ class="djm-progress-circle-bar"
4165
+ :cx="circleSize / 2"
4166
+ :cy="circleSize / 2"
4167
+ :r="circleRadius"
4168
+ :stroke-width="strokeWidth"
4169
+ fill="none"
4170
+ stroke-linecap="round"
4171
+ :stroke-dasharray="circleLength"
4172
+ :stroke-dashoffset="circleOffset"
4173
+ :style="color ? { stroke: color } : null"
4174
+ />
4175
+ </svg>
4176
+ <span v-if="showText" class="djm-progress-circle-label" :style="circleLabelStyle">{{ safePercent }}%</span>
4177
+ </div>
4178
+ <div
4179
+ v-else
4180
+ class="djm-progress-line"
4181
+ :class="status ? 'djm-is-' + status : ''"
4182
+ role="progressbar"
4183
+ :aria-label="label || '\u8FDB\u5EA6'"
4184
+ :aria-valuenow="safePercent"
4185
+ aria-valuemin="0"
4186
+ aria-valuemax="100"
4187
+ >
4120
4188
  <div class="djm-progress" :style="trackStyle">
4121
4189
  <div class="djm-progress-bar" :style="barStyle"></div>
4122
4190
  </div>
@@ -5318,48 +5386,91 @@ var alert_default = {
5318
5386
  };
5319
5387
 
5320
5388
  // src/components/spin/index.js
5389
+ import { onBeforeUnmount as onBeforeUnmount4, ref as ref3, watch as watch3 } from "vue";
5321
5390
  var spin_default = {
5322
5391
  name: "DjmSpin",
5323
5392
  props: {
5324
5393
  spinning: { type: Boolean, default: true },
5325
- size: { type: String, default: "md" },
5326
5394
  // sm | md | lg
5327
- tip: { type: String, default: "" }
5395
+ size: { type: String, default: "md" },
5396
+ // ring 环形 / dots 点状 / bars 柱状 / pulse 脉冲
5397
+ type: { type: String, default: "ring" },
5398
+ tip: { type: String, default: "" },
5399
+ // 延迟多少毫秒后显示,0 表示立即
5400
+ delay: { type: Number, default: 0 },
5401
+ // 全屏加载:遮罩铺满视口
5402
+ fullscreen: { type: Boolean, default: false },
5403
+ // 自定义指示器颜色,默认跟随品牌色
5404
+ color: { type: String, default: "" }
5405
+ },
5406
+ setup(props) {
5407
+ const visible = ref3(false);
5408
+ let timer = null;
5409
+ function sync() {
5410
+ window.clearTimeout(timer);
5411
+ timer = null;
5412
+ if (!props.spinning) {
5413
+ visible.value = false;
5414
+ return;
5415
+ }
5416
+ if (props.delay > 0) {
5417
+ timer = window.setTimeout(() => {
5418
+ visible.value = true;
5419
+ }, props.delay);
5420
+ } else {
5421
+ visible.value = true;
5422
+ }
5423
+ }
5424
+ watch3(() => [props.spinning, props.delay], sync, { immediate: true });
5425
+ onBeforeUnmount4(() => window.clearTimeout(timer));
5426
+ return { visible };
5328
5427
  },
5329
5428
  computed: {
5330
- // 有默认插槽即为包裹模式
5331
5429
  wrapped() {
5332
5430
  return !!this.$slots.default;
5431
+ },
5432
+ rootClass() {
5433
+ return [
5434
+ "djm-spin",
5435
+ "djm-spin-" + this.size,
5436
+ {
5437
+ "djm-spin-wrap": this.wrapped && !this.fullscreen,
5438
+ "djm-spin-inline": !this.wrapped && !this.fullscreen,
5439
+ "djm-spin-fullscreen": this.fullscreen
5440
+ }
5441
+ ];
5333
5442
  }
5334
5443
  },
5335
5444
  template: `
5336
5445
  <div
5337
- v-if="wrapped"
5338
- class="djm-spin-wrap"
5339
- :class="'djm-spin-' + size"
5340
- :aria-busy="String(spinning)"
5446
+ v-if="fullscreen || wrapped || visible"
5447
+ :class="rootClass"
5448
+ :aria-busy="String(visible)"
5449
+ :role="visible ? 'status' : undefined"
5450
+ :aria-label="!wrapped && !fullscreen && !tip && visible ? '\u52A0\u8F7D\u4E2D' : undefined"
5341
5451
  >
5342
- <slot />
5343
- <div v-if="spinning" class="djm-spin-mask" role="status">
5344
- <span class="djm-spinner"></span>
5452
+ <slot v-if="wrapped && !fullscreen" />
5453
+ <div v-if="visible" class="djm-spin-mask">
5454
+ <span class="djm-spin-indicator" :class="'djm-spin-' + type" :style="color ? { color } : null">
5455
+ <slot name="indicator">
5456
+ <i v-if="type === 'ring'" class="djm-spinner"></i>
5457
+ <template v-else-if="type === 'dots'">
5458
+ <i></i><i></i><i></i>
5459
+ </template>
5460
+ <template v-else-if="type === 'bars'">
5461
+ <i></i><i></i><i></i><i></i>
5462
+ </template>
5463
+ <i v-else class="djm-spin-core"></i>
5464
+ </slot>
5465
+ </span>
5345
5466
  <span v-if="tip" class="djm-spin-tip">{{ tip }}</span>
5346
5467
  </div>
5347
5468
  </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
5469
  `
5359
5470
  };
5360
5471
 
5361
5472
  // src/components/popconfirm/index.js
5362
- import { nextTick as nextTick3, onBeforeUnmount as onBeforeUnmount4, onMounted as onMounted3, ref as ref3, watch as watch3 } from "vue";
5473
+ import { nextTick as nextTick3, onBeforeUnmount as onBeforeUnmount5, onMounted as onMounted3, ref as ref4, watch as watch4 } from "vue";
5363
5474
  var popconfirm_default = {
5364
5475
  name: "DjmPopconfirm",
5365
5476
  components: { DjmIcon: icon_default },
@@ -5375,10 +5486,10 @@ var popconfirm_default = {
5375
5486
  },
5376
5487
  emits: ["confirm", "cancel", "visible-change"],
5377
5488
  setup(props, { emit }) {
5378
- const open = ref3(false);
5379
- const root = ref3(null);
5380
- const panelEl = ref3(null);
5381
- const panelStyle = ref3({});
5489
+ const open = ref4(false);
5490
+ const root = ref4(null);
5491
+ const panelEl = ref4(null);
5492
+ const panelStyle = ref4({});
5382
5493
  const PANEL_WIDTH = 244;
5383
5494
  let detachPanel = null;
5384
5495
  function syncTriggerA11y() {
@@ -5394,7 +5505,7 @@ var popconfirm_default = {
5394
5505
  target.setAttribute("aria-expanded", String(open.value));
5395
5506
  }
5396
5507
  onMounted3(() => nextTick3(syncTriggerA11y));
5397
- watch3(open, () => nextTick3(syncTriggerA11y));
5508
+ watch4(open, () => nextTick3(syncTriggerA11y));
5398
5509
  function updatePosition() {
5399
5510
  if (!open.value || !root.value) return;
5400
5511
  const rect = root.value.getBoundingClientRect();
@@ -5453,7 +5564,7 @@ var popconfirm_default = {
5453
5564
  emit("cancel");
5454
5565
  close2();
5455
5566
  }
5456
- onBeforeUnmount4(close2);
5567
+ onBeforeUnmount5(close2);
5457
5568
  return { open, root, panelEl, panelStyle, toggle, close: close2, confirm, cancel };
5458
5569
  },
5459
5570
  template: `
@@ -5497,7 +5608,7 @@ var popconfirm_default = {
5497
5608
  };
5498
5609
 
5499
5610
  // src/components/anchor/index.js
5500
- import { onBeforeUnmount as onBeforeUnmount5, onMounted as onMounted4, ref as ref4, watch as watch4 } from "vue";
5611
+ import { onBeforeUnmount as onBeforeUnmount6, onMounted as onMounted4, ref as ref5, watch as watch5 } from "vue";
5501
5612
  var anchor_default = {
5502
5613
  name: "DjmAnchor",
5503
5614
  props: {
@@ -5510,8 +5621,8 @@ var anchor_default = {
5510
5621
  },
5511
5622
  emits: ["change"],
5512
5623
  setup(props, { emit }) {
5513
- const root = ref4(null);
5514
- const activeKey = ref4("");
5624
+ const root = ref5(null);
5625
+ const activeKey = ref5("");
5515
5626
  let scrollEl = null;
5516
5627
  let target = null;
5517
5628
  function resolveContainer() {
@@ -5566,8 +5677,8 @@ var anchor_default = {
5566
5677
  emit("change", item.href);
5567
5678
  }
5568
5679
  onMounted4(bind);
5569
- watch4(() => props.container, bind);
5570
- onBeforeUnmount5(unbind);
5680
+ watch5(() => props.container, bind);
5681
+ onBeforeUnmount6(unbind);
5571
5682
  return { root, activeKey, go };
5572
5683
  },
5573
5684
  template: `
@@ -5589,7 +5700,7 @@ var anchor_default = {
5589
5700
  };
5590
5701
 
5591
5702
  // src/components/backtop/index.js
5592
- import { onBeforeUnmount as onBeforeUnmount6, onMounted as onMounted5, ref as ref5 } from "vue";
5703
+ import { onBeforeUnmount as onBeforeUnmount7, onMounted as onMounted5, ref as ref6 } from "vue";
5593
5704
  var backtop_default = {
5594
5705
  name: "DjmBacktop",
5595
5706
  components: { DjmIcon: icon_default },
@@ -5602,8 +5713,8 @@ var backtop_default = {
5602
5713
  },
5603
5714
  emits: ["click"],
5604
5715
  setup(props, { emit }) {
5605
- const visible = ref5(false);
5606
- const root = ref5(null);
5716
+ const visible = ref6(false);
5717
+ const root = ref6(null);
5607
5718
  let target = null;
5608
5719
  let scrollEl = null;
5609
5720
  function resolveContainer() {
@@ -5637,7 +5748,7 @@ var backtop_default = {
5637
5748
  emit("click");
5638
5749
  }
5639
5750
  onMounted5(bind);
5640
- onBeforeUnmount6(unbind);
5751
+ onBeforeUnmount7(unbind);
5641
5752
  return { visible, root, toTop };
5642
5753
  },
5643
5754
  template: `
@@ -5714,7 +5825,7 @@ var space_default = {
5714
5825
  };
5715
5826
 
5716
5827
  // src/components/affix/index.js
5717
- import { onBeforeUnmount as onBeforeUnmount7, onMounted as onMounted6, ref as ref6 } from "vue";
5828
+ import { onBeforeUnmount as onBeforeUnmount8, onMounted as onMounted6, ref as ref7 } from "vue";
5718
5829
  var affix_default = {
5719
5830
  name: "DjmAffix",
5720
5831
  props: {
@@ -5725,10 +5836,10 @@ var affix_default = {
5725
5836
  zIndex: { type: Number, default: 900 }
5726
5837
  },
5727
5838
  setup(props) {
5728
- const root = ref6(null);
5729
- const fixed = ref6(false);
5730
- const affixStyle = ref6({});
5731
- const holderStyle = ref6({});
5839
+ const root = ref7(null);
5840
+ const fixed = ref7(false);
5841
+ const affixStyle = ref7({});
5842
+ const holderStyle = ref7({});
5732
5843
  let target = null;
5733
5844
  let scrollEl = null;
5734
5845
  function resolveContainer() {
@@ -5784,7 +5895,7 @@ var affix_default = {
5784
5895
  target = null;
5785
5896
  }
5786
5897
  onMounted6(bind);
5787
- onBeforeUnmount7(unbind);
5898
+ onBeforeUnmount8(unbind);
5788
5899
  return { root, fixed, affixStyle, holderStyle };
5789
5900
  },
5790
5901
  template: `
@@ -5835,7 +5946,7 @@ var segmented_default = {
5835
5946
  };
5836
5947
 
5837
5948
  // src/components/image/index.js
5838
- import { nextTick as nextTick4, onBeforeUnmount as onBeforeUnmount8, ref as ref7, watch as watch5 } from "vue";
5949
+ import { nextTick as nextTick4, onBeforeUnmount as onBeforeUnmount9, ref as ref8, watch as watch6 } from "vue";
5839
5950
 
5840
5951
  // src/utils/scroll-lock.js
5841
5952
  var count = 0;
@@ -5882,11 +5993,11 @@ var image_default = {
5882
5993
  preview: { type: Boolean, default: true }
5883
5994
  },
5884
5995
  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, () => {
5996
+ const failed = ref8(false);
5997
+ const open = ref8(false);
5998
+ const zoomRef = ref8(null);
5999
+ const closeRef = ref8(null);
6000
+ watch6(() => props.src, () => {
5890
6001
  failed.value = false;
5891
6002
  });
5892
6003
  function toSize(value) {
@@ -5910,7 +6021,7 @@ var image_default = {
5910
6021
  document.removeEventListener("keydown", onKeydown);
5911
6022
  if (zoomRef.value) zoomRef.value.focus();
5912
6023
  }
5913
- onBeforeUnmount8(closePreview);
6024
+ onBeforeUnmount9(closePreview);
5914
6025
  return { failed, open, zoomRef, closeRef, toSize, openPreview, closePreview, t };
5915
6026
  },
5916
6027
  template: `
@@ -5965,13 +6076,15 @@ var image_default = {
5965
6076
  };
5966
6077
 
5967
6078
  // src/components/watermark/index.js
5968
- import { computed as computed4, onBeforeUnmount as onBeforeUnmount9, onMounted as onMounted7, ref as ref9, watch as watch6 } from "vue";
6079
+ import { computed as computed4, onBeforeUnmount as onBeforeUnmount10, onMounted as onMounted7, ref as ref10, watch as watch7 } from "vue";
5969
6080
 
5970
6081
  // src/theme/index.js
5971
- import { ref as ref8 } from "vue";
6082
+ import { ref as ref9 } from "vue";
5972
6083
  var KEY = "djm-theme";
5973
6084
  var COLOR_KEY = "djm-primary";
5974
- var theme = ref8("light");
6085
+ var GLASS_KEY = "djm-glass";
6086
+ var theme = ref9("light");
6087
+ var glass = ref9(false);
5975
6088
  var PRESET_COLORS = [
5976
6089
  { name: "\u9ED8\u8BA4\u84DD", value: "#1a6fc4" },
5977
6090
  { name: "\u79D1\u6280\u84DD", value: "#2563eb" },
@@ -5982,7 +6095,7 @@ var PRESET_COLORS = [
5982
6095
  { name: "\u6731\u7802\u7EA2", value: "#c0392b" },
5983
6096
  { name: "\u77F3\u58A8\u7070", value: "#4b5b6b" }
5984
6097
  ];
5985
- var primaryColor = ref8("");
6098
+ var primaryColor = ref9("");
5986
6099
  var BRAND_VARS = [
5987
6100
  "--djm-brand-50",
5988
6101
  "--djm-brand-100",
@@ -6104,6 +6217,15 @@ function setTheme(name) {
6104
6217
  function toggleTheme() {
6105
6218
  setTheme(theme.value === "dark" ? "light" : "dark");
6106
6219
  }
6220
+ function setGlass(enabled) {
6221
+ glass.value = !!enabled;
6222
+ document.documentElement.dataset.djmGlass = glass.value ? "on" : "";
6223
+ try {
6224
+ if (glass.value) localStorage.setItem(GLASS_KEY, "1");
6225
+ else localStorage.removeItem(GLASS_KEY);
6226
+ } catch (error) {
6227
+ }
6228
+ }
6107
6229
  function initTheme() {
6108
6230
  let saved = "";
6109
6231
  try {
@@ -6123,9 +6245,16 @@ function initTheme() {
6123
6245
  } catch (error) {
6124
6246
  color = "";
6125
6247
  }
6248
+ let glassSaved = false;
6249
+ try {
6250
+ glassSaved = localStorage.getItem(GLASS_KEY) === "1";
6251
+ } catch (error) {
6252
+ glassSaved = false;
6253
+ }
6126
6254
  if (color) primaryColor.value = color;
6127
6255
  const next = param === "dark" || param === "light" ? param : saved || "light";
6128
6256
  setTheme(next);
6257
+ setGlass(glassSaved);
6129
6258
  }
6130
6259
 
6131
6260
  // src/components/watermark/index.js
@@ -6141,7 +6270,7 @@ var watermark_default = {
6141
6270
  zIndex: { type: Number, default: 10 }
6142
6271
  },
6143
6272
  setup(props) {
6144
- const dataUrl = ref9("");
6273
+ const dataUrl = ref10("");
6145
6274
  let canvasEl = null;
6146
6275
  function build() {
6147
6276
  const lines = (Array.isArray(props.content) ? props.content : [props.content]).filter(Boolean);
@@ -6183,8 +6312,8 @@ var watermark_default = {
6183
6312
  zIndex: props.zIndex
6184
6313
  }));
6185
6314
  onMounted7(build);
6186
- watch6(() => [props.content, props.gap, props.fontSize, props.color, props.rotate, theme.value], build, { deep: true });
6187
- onBeforeUnmount9(() => {
6315
+ watch7(() => [props.content, props.gap, props.fontSize, props.color, props.rotate, theme.value], build, { deep: true });
6316
+ onBeforeUnmount10(() => {
6188
6317
  canvasEl = null;
6189
6318
  });
6190
6319
  return { layerStyle };
@@ -6374,7 +6503,7 @@ var autocomplete_default = {
6374
6503
  };
6375
6504
 
6376
6505
  // src/components/splitter/index.js
6377
- import { computed as computed5, onBeforeUnmount as onBeforeUnmount10, ref as ref10 } from "vue";
6506
+ import { computed as computed5, onBeforeUnmount as onBeforeUnmount11, ref as ref11 } from "vue";
6378
6507
  var splitter_default = {
6379
6508
  name: "DjmSplitter",
6380
6509
  props: {
@@ -6387,8 +6516,8 @@ var splitter_default = {
6387
6516
  },
6388
6517
  emits: ["update:modelValue", "change"],
6389
6518
  setup(props, { emit }) {
6390
- const root = ref10(null);
6391
- const dragging = ref10(false);
6519
+ const root = ref11(null);
6520
+ const dragging = ref11(false);
6392
6521
  const ratio = computed5(() => {
6393
6522
  const value = Number(props.modelValue);
6394
6523
  const safe = Number.isFinite(value) ? value : 50;
@@ -6433,7 +6562,7 @@ var splitter_default = {
6433
6562
  commit(ratio.value + step);
6434
6563
  }
6435
6564
  }
6436
- onBeforeUnmount10(stopDrag);
6565
+ onBeforeUnmount11(stopDrag);
6437
6566
  return { root, dragging, ratio, startDrag, onKeydown };
6438
6567
  },
6439
6568
  template: `
@@ -6470,7 +6599,7 @@ var splitter_default = {
6470
6599
  };
6471
6600
 
6472
6601
  // src/components/carousel/index.js
6473
- import { onBeforeUnmount as onBeforeUnmount11, onMounted as onMounted8, ref as ref11, watch as watch7 } from "vue";
6602
+ import { onBeforeUnmount as onBeforeUnmount12, onMounted as onMounted8, ref as ref12, watch as watch8 } from "vue";
6474
6603
  var carousel_default = {
6475
6604
  name: "DjmCarousel",
6476
6605
  components: { DjmIcon: icon_default },
@@ -6484,7 +6613,7 @@ var carousel_default = {
6484
6613
  },
6485
6614
  emits: ["change"],
6486
6615
  setup(props, { emit }) {
6487
- const index = ref11(0);
6616
+ const index = ref12(0);
6488
6617
  let timer = null;
6489
6618
  const boxStyle = () => ({
6490
6619
  height: typeof props.height === "number" ? props.height + "px" : props.height
@@ -6522,14 +6651,14 @@ var carousel_default = {
6522
6651
  }
6523
6652
  }
6524
6653
  onMounted8(start);
6525
- watch7(() => [props.autoplay, props.interval, props.items.length], start);
6654
+ watch8(() => [props.autoplay, props.interval, props.items.length], start);
6526
6655
  function pause() {
6527
6656
  if (props.autoplay) stop();
6528
6657
  }
6529
6658
  function resume() {
6530
6659
  if (props.autoplay) start();
6531
6660
  }
6532
- onBeforeUnmount11(stop);
6661
+ onBeforeUnmount12(stop);
6533
6662
  return { index, boxStyle, go, next, prev, onKeydown, pause, resume };
6534
6663
  },
6535
6664
  template: `
@@ -6589,7 +6718,7 @@ var carousel_default = {
6589
6718
  };
6590
6719
 
6591
6720
  // 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";
6721
+ import { computed as computed6, nextTick as nextTick5, onBeforeUnmount as onBeforeUnmount13, onMounted as onMounted9, ref as ref13, watch as watch9 } from "vue";
6593
6722
  var tour_default = {
6594
6723
  name: "DjmTour",
6595
6724
  components: { DjmIcon: icon_default },
@@ -6601,10 +6730,10 @@ var tour_default = {
6601
6730
  },
6602
6731
  emits: ["update:modelValue", "change", "finish"],
6603
6732
  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);
6733
+ const current = ref13(0);
6734
+ const highlight = ref13({ top: "0px", left: "0px", width: "0px", height: "0px" });
6735
+ const cardStyle = ref13({ position: "fixed", left: "0px", top: "0px", visibility: "hidden" });
6736
+ const card = ref13(null);
6608
6737
  const step = computed6(() => props.steps[current.value] || null);
6609
6738
  function update() {
6610
6739
  const scene = step.value;
@@ -6665,14 +6794,14 @@ var tour_default = {
6665
6794
  emit("change", current.value);
6666
6795
  nextTick5(update);
6667
6796
  }
6668
- watch8(() => props.modelValue, (value) => {
6797
+ watch9(() => props.modelValue, (value) => {
6669
6798
  if (value) startScene();
6670
6799
  else stopScene();
6671
6800
  });
6672
6801
  onMounted9(() => {
6673
6802
  if (props.modelValue) startScene();
6674
6803
  });
6675
- onBeforeUnmount12(stopScene);
6804
+ onBeforeUnmount13(stopScene);
6676
6805
  return { current, step, highlight, cardStyle, card, close: close2, next, prev, t };
6677
6806
  },
6678
6807
  template: `
@@ -6710,7 +6839,7 @@ var tour_default = {
6710
6839
  };
6711
6840
 
6712
6841
  // src/components/calendar/index.js
6713
- import { computed as computed7, ref as ref13, watch as watch9 } from "vue";
6842
+ import { computed as computed7, ref as ref14, watch as watch10 } from "vue";
6714
6843
  function pad2(num) {
6715
6844
  return String(num).padStart(2, "0");
6716
6845
  }
@@ -6740,8 +6869,8 @@ var calendar_default = {
6740
6869
  const today = /* @__PURE__ */ new Date();
6741
6870
  const todayKey = toKey(today.getFullYear(), today.getMonth(), today.getDate());
6742
6871
  const initial = parse(props.modelValue);
6743
- const viewYear = ref13(initial ? initial.year : today.getFullYear());
6744
- const viewMonth = ref13(initial ? initial.month : today.getMonth());
6872
+ const viewYear = ref14(initial ? initial.year : today.getFullYear());
6873
+ const viewMonth = ref14(initial ? initial.month : today.getMonth());
6745
6874
  const weekNames = computed7(() => {
6746
6875
  const base = ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"];
6747
6876
  return base.slice(props.firstDay).concat(base.slice(0, props.firstDay));
@@ -6807,7 +6936,7 @@ var calendar_default = {
6807
6936
  event.preventDefault();
6808
6937
  list[next].focus();
6809
6938
  }
6810
- watch9(() => props.modelValue, (value) => {
6939
+ watch10(() => props.modelValue, (value) => {
6811
6940
  const parts = parse(value);
6812
6941
  if (parts && (parts.year !== viewYear.value || parts.month !== viewMonth.value)) {
6813
6942
  viewYear.value = parts.year;
@@ -6861,7 +6990,7 @@ var calendar_default = {
6861
6990
  };
6862
6991
 
6863
6992
  // src/components/float-button/index.js
6864
- import { onBeforeUnmount as onBeforeUnmount13, ref as ref14 } from "vue";
6993
+ import { onBeforeUnmount as onBeforeUnmount14, ref as ref15 } from "vue";
6865
6994
  var float_button_default = {
6866
6995
  name: "DjmFloatButton",
6867
6996
  components: { DjmIcon: icon_default },
@@ -6877,7 +7006,7 @@ var float_button_default = {
6877
7006
  },
6878
7007
  emits: ["click", "select"],
6879
7008
  setup(props, { emit }) {
6880
- const open = ref14(false);
7009
+ const open = ref15(false);
6881
7010
  function onKeydown(event) {
6882
7011
  if (event.key === "Escape") close2();
6883
7012
  }
@@ -6912,7 +7041,7 @@ var float_button_default = {
6912
7041
  emit("select", item);
6913
7042
  if (typeof item.onClick === "function") item.onClick(item);
6914
7043
  }
6915
- onBeforeUnmount13(close2);
7044
+ onBeforeUnmount14(close2);
6916
7045
  return { open, onMainClick, choose };
6917
7046
  },
6918
7047
  template: `
@@ -6947,7 +7076,7 @@ var float_button_default = {
6947
7076
  };
6948
7077
 
6949
7078
  // src/components/mentions/index.js
6950
- import { computed as computed8, nextTick as nextTick6, onBeforeUnmount as onBeforeUnmount14, ref as ref15, watch as watch10 } from "vue";
7079
+ import { computed as computed8, nextTick as nextTick6, onBeforeUnmount as onBeforeUnmount15, ref as ref16, watch as watch11 } from "vue";
6951
7080
  var uidSeed3 = 0;
6952
7081
  var mentions_default = {
6953
7082
  name: "DjmMentions",
@@ -6962,17 +7091,17 @@ var mentions_default = {
6962
7091
  },
6963
7092
  emits: ["update:modelValue", "input", "select"],
6964
7093
  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);
7094
+ const root = ref16(null);
7095
+ const input = ref16(null);
7096
+ const text = ref16(props.modelValue);
7097
+ const open = ref16(false);
7098
+ const keyword = ref16("");
7099
+ const activeIndex = ref16(-1);
6971
7100
  const listId = "djm-mentions-" + ++uidSeed3;
6972
- const panelStyle = ref15({ ...PANEL_HIDDEN_STYLE });
7101
+ const panelStyle = ref16({ ...PANEL_HIDDEN_STYLE });
6973
7102
  let triggerIndex = -1;
6974
7103
  let detachPanel = null;
6975
- watch10(() => props.modelValue, (value) => {
7104
+ watch11(() => props.modelValue, (value) => {
6976
7105
  text.value = value;
6977
7106
  });
6978
7107
  const normalized = computed8(() => props.options.map((item) => typeof item === "string" ? { value: item, label: item } : item));
@@ -7065,7 +7194,7 @@ var mentions_default = {
7065
7194
  input.value.setSelectionRange(pos, pos);
7066
7195
  });
7067
7196
  }
7068
- onBeforeUnmount14(closePanel);
7197
+ onBeforeUnmount15(closePanel);
7069
7198
  return {
7070
7199
  root,
7071
7200
  input,
@@ -7339,7 +7468,7 @@ var input_tag_default = {
7339
7468
  };
7340
7469
 
7341
7470
  // src/components/password/index.js
7342
- import { computed as computed9, ref as ref16 } from "vue";
7471
+ import { computed as computed9, ref as ref17 } from "vue";
7343
7472
  var password_default = {
7344
7473
  name: "DjmPassword",
7345
7474
  components: { DjmIcon: icon_default },
@@ -7353,7 +7482,7 @@ var password_default = {
7353
7482
  },
7354
7483
  emits: ["update:modelValue", "input", "change", "enter", "focus", "blur"],
7355
7484
  setup(props, { emit }) {
7356
- const visible = ref16(false);
7485
+ const visible = ref17(false);
7357
7486
  const score = computed9(() => {
7358
7487
  const value = props.modelValue || "";
7359
7488
  if (!value) return 0;
@@ -7419,7 +7548,7 @@ var password_default = {
7419
7548
  };
7420
7549
 
7421
7550
  // 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";
7551
+ import { computed as computed10, nextTick as nextTick7, onBeforeUnmount as onBeforeUnmount16, onMounted as onMounted10, ref as ref18, watch as watch12 } from "vue";
7423
7552
 
7424
7553
  // src/utils/focus-trap.js
7425
7554
  var FOCUSABLE = [
@@ -7472,11 +7601,11 @@ var command_palette_default = {
7472
7601
  },
7473
7602
  emits: ["update:modelValue", "run"],
7474
7603
  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);
7604
+ const open = ref18(false);
7605
+ const keyword = ref18("");
7606
+ const activeIndex = ref18(-1);
7607
+ const searchInput = ref18(null);
7608
+ const panelEl = ref18(null);
7480
7609
  const listId = "djm-command-list-" + ++uidSeed4;
7481
7610
  let releaseTrap = null;
7482
7611
  const filtered = computed10(() => {
@@ -7559,12 +7688,12 @@ var command_palette_default = {
7559
7688
  if (typeof item.run === "function") item.run(item);
7560
7689
  hide();
7561
7690
  }
7562
- watch11(() => props.modelValue, (value) => {
7691
+ watch12(() => props.modelValue, (value) => {
7563
7692
  if (value) show();
7564
7693
  else hide();
7565
7694
  });
7566
7695
  onMounted10(() => window.addEventListener("keydown", onGlobalKeydown));
7567
- onBeforeUnmount15(() => {
7696
+ onBeforeUnmount16(() => {
7568
7697
  window.removeEventListener("keydown", onGlobalKeydown);
7569
7698
  hide();
7570
7699
  });
@@ -7616,7 +7745,7 @@ var command_palette_default = {
7616
7745
  };
7617
7746
 
7618
7747
  // src/components/qrcode/index.js
7619
- import { onMounted as onMounted11, ref as ref18, watch as watch12 } from "vue";
7748
+ import { onMounted as onMounted11, ref as ref19, watch as watch13 } from "vue";
7620
7749
  var qrcode_default = {
7621
7750
  name: "DjmQRCode",
7622
7751
  props: {
@@ -7631,8 +7760,8 @@ var qrcode_default = {
7631
7760
  alt: { type: String, default: "\u4E8C\u7EF4\u7801" }
7632
7761
  },
7633
7762
  setup(props) {
7634
- const src = ref18("");
7635
- const error = ref18("");
7763
+ const src = ref19("");
7764
+ const error = ref19("");
7636
7765
  let lib = null;
7637
7766
  let seq2 = 0;
7638
7767
  async function ensureLib() {
@@ -7669,7 +7798,7 @@ var qrcode_default = {
7669
7798
  }
7670
7799
  }
7671
7800
  onMounted11(render);
7672
- watch12(() => [props.value, props.size, props.level, props.margin, props.dark, props.light], render);
7801
+ watch13(() => [props.value, props.size, props.level, props.margin, props.dark, props.light], render);
7673
7802
  return { src, error };
7674
7803
  },
7675
7804
  template: `
@@ -7708,7 +7837,7 @@ var status_default = {
7708
7837
  };
7709
7838
 
7710
7839
  // src/components/tooltip/index.js
7711
- import { ref as ref19, nextTick as nextTick8, onBeforeUnmount as onBeforeUnmount16 } from "vue";
7840
+ import { ref as ref20, nextTick as nextTick8, onBeforeUnmount as onBeforeUnmount17 } from "vue";
7712
7841
  var uid2 = 0;
7713
7842
  var tooltip_default = {
7714
7843
  name: "DjmTooltip",
@@ -7719,11 +7848,11 @@ var tooltip_default = {
7719
7848
  delay: { type: Number, default: 80 }
7720
7849
  },
7721
7850
  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({});
7851
+ const visible = ref20(false);
7852
+ const rootRef = ref20(null);
7853
+ const contentRef = ref20(null);
7854
+ const actualPlacement = ref20(props.placement);
7855
+ const panelStyle = ref20({});
7727
7856
  const tipId = "djm-tooltip-" + ++uid2;
7728
7857
  let timer = null;
7729
7858
  function triggerEl() {
@@ -7794,7 +7923,7 @@ var tooltip_default = {
7794
7923
  bindTrigger(false);
7795
7924
  bindReposition(false);
7796
7925
  }
7797
- onBeforeUnmount16(() => {
7926
+ onBeforeUnmount17(() => {
7798
7927
  window.clearTimeout(timer);
7799
7928
  bindReposition(false);
7800
7929
  });
@@ -7819,7 +7948,7 @@ var tooltip_default = {
7819
7948
  };
7820
7949
 
7821
7950
  // src/components/dropdown/index.js
7822
- import { nextTick as nextTick9, onBeforeUnmount as onBeforeUnmount17, onMounted as onMounted12, ref as ref20, watch as watch13 } from "vue";
7951
+ import { nextTick as nextTick9, onBeforeUnmount as onBeforeUnmount18, onMounted as onMounted12, ref as ref21, watch as watch14 } from "vue";
7823
7952
  var dropdown_default = {
7824
7953
  name: "DjmDropdown",
7825
7954
  components: { DjmIcon: icon_default },
@@ -7836,10 +7965,10 @@ var dropdown_default = {
7836
7965
  },
7837
7966
  emits: ["select", "visible-change"],
7838
7967
  setup(props, { emit }) {
7839
- const open = ref20(false);
7840
- const root = ref20(null);
7841
- const menuEl = ref20(null);
7842
- const panelStyle = ref20({});
7968
+ const open = ref21(false);
7969
+ const root = ref21(null);
7970
+ const menuEl = ref21(null);
7971
+ const panelStyle = ref21({});
7843
7972
  let detachPanel = null;
7844
7973
  function syncTriggerA11y() {
7845
7974
  const wrapper = root.value && root.value.querySelector(".djm-dropdown-trigger");
@@ -7853,7 +7982,7 @@ var dropdown_default = {
7853
7982
  else target.removeAttribute("aria-disabled");
7854
7983
  }
7855
7984
  onMounted12(() => nextTick9(syncTriggerA11y));
7856
- watch13(open, () => nextTick9(syncTriggerA11y));
7985
+ watch14(open, () => nextTick9(syncTriggerA11y));
7857
7986
  function updatePosition() {
7858
7987
  if (!open.value || !root.value) return;
7859
7988
  const rect = root.value.getBoundingClientRect();
@@ -7956,7 +8085,7 @@ var dropdown_default = {
7956
8085
  emit("select", item);
7957
8086
  if (props.closeOnSelect) close2();
7958
8087
  }
7959
- onBeforeUnmount17(() => {
8088
+ onBeforeUnmount18(() => {
7960
8089
  window.clearTimeout(hoverTimer);
7961
8090
  close2();
7962
8091
  });
@@ -8021,7 +8150,7 @@ var dropdown_default = {
8021
8150
  };
8022
8151
 
8023
8152
  // src/components/drawer/index.js
8024
- import { ref as ref21, nextTick as nextTick10, watch as watch14, onMounted as onMounted13, onBeforeUnmount as onBeforeUnmount18 } from "vue";
8153
+ import { ref as ref22, nextTick as nextTick10, watch as watch15, onMounted as onMounted13, onBeforeUnmount as onBeforeUnmount19 } from "vue";
8025
8154
  var uid3 = 0;
8026
8155
  var drawer_default = {
8027
8156
  name: "DjmDrawer",
@@ -8034,11 +8163,13 @@ var drawer_default = {
8034
8163
  // 点击遮罩关闭
8035
8164
  maskClosable: { type: Boolean, default: true },
8036
8165
  showClose: { type: Boolean, default: true },
8037
- closeOnEsc: { type: Boolean, default: true }
8166
+ closeOnEsc: { type: Boolean, default: true },
8167
+ // 毛玻璃底
8168
+ glass: { type: Boolean, default: false }
8038
8169
  },
8039
8170
  emits: ["update:modelValue", "open", "close"],
8040
8171
  setup(props, { emit }) {
8041
- const panelRef = ref21(null);
8172
+ const panelRef = ref22(null);
8042
8173
  const titleId = `djm-drawer-title-${++uid3}`;
8043
8174
  let locked = false;
8044
8175
  let releaseTrap = null;
@@ -8071,14 +8202,14 @@ var drawer_default = {
8071
8202
  }
8072
8203
  emit("close");
8073
8204
  }
8074
- watch14(() => props.modelValue, (open) => {
8205
+ watch15(() => props.modelValue, (open) => {
8075
8206
  if (open) activate();
8076
8207
  else deactivate();
8077
8208
  });
8078
8209
  onMounted13(() => {
8079
8210
  if (props.modelValue) activate();
8080
8211
  });
8081
- onBeforeUnmount18(() => {
8212
+ onBeforeUnmount19(() => {
8082
8213
  document.removeEventListener("keydown", onKeydown);
8083
8214
  release();
8084
8215
  if (locked) unlockScroll();
@@ -8097,7 +8228,7 @@ var drawer_default = {
8097
8228
  <aside
8098
8229
  ref="panelRef"
8099
8230
  class="djm-drawer"
8100
- :class="'djm-drawer-' + placement"
8231
+ :class="['djm-drawer-' + placement, { 'djm-is-glass': glass }]"
8101
8232
  :style="panelStyle"
8102
8233
  role="dialog"
8103
8234
  aria-modal="true"
@@ -8132,7 +8263,7 @@ var drawer_default = {
8132
8263
  };
8133
8264
 
8134
8265
  // 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";
8266
+ import { ref as ref23, nextTick as nextTick11, watch as watch16, computed as computed11, onMounted as onMounted14, onBeforeUnmount as onBeforeUnmount20 } from "vue";
8136
8267
  var uid4 = 0;
8137
8268
  var modal_default = {
8138
8269
  name: "DjmModal",
@@ -8147,11 +8278,13 @@ var modal_default = {
8147
8278
  // 是否允许 Esc 关闭
8148
8279
  closeOnEsc: { type: Boolean, default: true },
8149
8280
  // 全屏铺满,适合配置类大表单
8150
- fullscreen: { type: Boolean, default: false }
8281
+ fullscreen: { type: Boolean, default: false },
8282
+ // 毛玻璃底:需要显示背后页面时使用
8283
+ glass: { type: Boolean, default: false }
8151
8284
  },
8152
8285
  emits: ["update:modelValue", "open", "close"],
8153
8286
  setup(props, { emit }) {
8154
- const dialogRef = ref22(null);
8287
+ const dialogRef = ref23(null);
8155
8288
  const titleId = `djm-modal-title-${++uid4}`;
8156
8289
  let locked = false;
8157
8290
  let releaseTrap = null;
@@ -8184,14 +8317,14 @@ var modal_default = {
8184
8317
  }
8185
8318
  emit("close");
8186
8319
  }
8187
- watch15(() => props.modelValue, (open) => {
8320
+ watch16(() => props.modelValue, (open) => {
8188
8321
  if (open) activate();
8189
8322
  else deactivate();
8190
8323
  });
8191
8324
  onMounted14(() => {
8192
8325
  if (props.modelValue) activate();
8193
8326
  });
8194
- onBeforeUnmount19(() => {
8327
+ onBeforeUnmount20(() => {
8195
8328
  document.removeEventListener("keydown", onKey);
8196
8329
  release();
8197
8330
  if (locked) unlockScroll();
@@ -8213,7 +8346,7 @@ var modal_default = {
8213
8346
  <div
8214
8347
  ref="dialogRef"
8215
8348
  class="djm-modal"
8216
- :class="{ 'djm-is-fullscreen': fullscreen }"
8349
+ :class="{ 'djm-is-fullscreen': fullscreen, 'djm-is-glass': glass }"
8217
8350
  :style="dialogStyle"
8218
8351
  role="dialog"
8219
8352
  aria-modal="true"
@@ -8311,7 +8444,7 @@ var confirm_dialog_default = {
8311
8444
  };
8312
8445
 
8313
8446
  // src/components/pagination/index.js
8314
- import { computed as computed12, ref as ref23 } from "vue";
8447
+ import { computed as computed12, ref as ref24 } from "vue";
8315
8448
  var pagination_default = {
8316
8449
  name: "DjmPagination",
8317
8450
  components: { Icon: icon_default },
@@ -8323,7 +8456,7 @@ var pagination_default = {
8323
8456
  },
8324
8457
  emits: ["update:page", "update:pageSize", "change"],
8325
8458
  setup(props, { emit }) {
8326
- const jumpText = ref23("");
8459
+ const jumpText = ref24("");
8327
8460
  const pageCount = computed12(() => Math.max(1, Math.ceil(props.total / Math.max(1, props.pageSize))));
8328
8461
  const current = computed12(() => Math.min(Math.max(1, props.page), pageCount.value));
8329
8462
  const pages = computed12(() => {
@@ -8543,7 +8676,7 @@ var tabs_default = {
8543
8676
  };
8544
8677
 
8545
8678
  // src/components/context-menu/index.js
8546
- import { ref as ref24, watch as watch16, nextTick as nextTick12, onBeforeUnmount as onBeforeUnmount20 } from "vue";
8679
+ import { ref as ref25, watch as watch17, nextTick as nextTick12, onBeforeUnmount as onBeforeUnmount21 } from "vue";
8547
8680
  var context_menu_default = {
8548
8681
  name: "DjmContextMenu",
8549
8682
  components: { Icon: icon_default },
@@ -8555,8 +8688,8 @@ var context_menu_default = {
8555
8688
  },
8556
8689
  emits: ["update:modelValue", "select"],
8557
8690
  setup(props, { emit }) {
8558
- const menuRef = ref24(null);
8559
- const pos = ref24({ left: 0, top: 0 });
8691
+ const menuRef = ref25(null);
8692
+ const pos = ref25({ left: 0, top: 0 });
8560
8693
  const margin = 8;
8561
8694
  function close2() {
8562
8695
  emit("update:modelValue", false);
@@ -8618,7 +8751,7 @@ var context_menu_default = {
8618
8751
  detach = null;
8619
8752
  }
8620
8753
  }
8621
- watch16(
8754
+ watch17(
8622
8755
  () => props.modelValue,
8623
8756
  (open) => {
8624
8757
  if (open) {
@@ -8629,10 +8762,10 @@ var context_menu_default = {
8629
8762
  }
8630
8763
  }
8631
8764
  );
8632
- watch16([() => props.x, () => props.y], () => {
8765
+ watch17([() => props.x, () => props.y], () => {
8633
8766
  if (props.modelValue) openAtCursor();
8634
8767
  });
8635
- onBeforeUnmount20(unbind);
8768
+ onBeforeUnmount21(unbind);
8636
8769
  return { menuRef, pos, close: close2, onSelect, onKeydown, t };
8637
8770
  },
8638
8771
  template: `
@@ -8671,7 +8804,7 @@ var context_menu_default = {
8671
8804
  };
8672
8805
 
8673
8806
  // src/components/date-picker/index.js
8674
- import { ref as ref25, computed as computed14, onBeforeUnmount as onBeforeUnmount21, watch as watch17 } from "vue";
8807
+ import { ref as ref26, computed as computed14, onBeforeUnmount as onBeforeUnmount22, watch as watch18 } from "vue";
8675
8808
  var uidSeed5 = 0;
8676
8809
  function pad3(value) {
8677
8810
  return String(value).padStart(2, "0");
@@ -8706,12 +8839,12 @@ var date_picker_default = {
8706
8839
  },
8707
8840
  emits: ["update:modelValue", "change", "visible-change"],
8708
8841
  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);
8842
+ const open = ref26(false);
8843
+ watch18(open, (value) => emit("visible-change", value));
8844
+ const root = ref26(null);
8845
+ const panel = ref26(null);
8713
8846
  const panelId = "djm-date-panel-" + ++uidSeed5;
8714
- const panelStyle = ref25({ ...PANEL_HIDDEN_STYLE });
8847
+ const panelStyle = ref26({ ...PANEL_HIDDEN_STYLE });
8715
8848
  let detachPanel = null;
8716
8849
  const today = /* @__PURE__ */ new Date();
8717
8850
  const todayKey = toKey2(today.getFullYear(), today.getMonth(), today.getDate());
@@ -8726,16 +8859,16 @@ var date_picker_default = {
8726
8859
  return end ? `${start} ~ ${end}` : `${start} ~ ${t("datePicker.rangeEnd")}`;
8727
8860
  });
8728
8861
  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] || "");
8862
+ const viewYear = ref26(initial ? initial.year : today.getFullYear());
8863
+ const viewMonth = ref26(initial ? initial.month : today.getMonth());
8864
+ const pendingStart = ref26(values.value[0] || "");
8865
+ const pendingEnd = ref26(values.value[1] || "");
8733
8866
  const placeholderText = computed14(() => {
8734
8867
  if (props.placeholder) return props.placeholder;
8735
8868
  return t(props.range ? "datePicker.rangePlaceholder" : "datePicker.placeholder");
8736
8869
  });
8737
8870
  const weeks = computed14(() => t("datePicker.weeks").split(","));
8738
- const narrow = ref25(false);
8871
+ const narrow = ref26(false);
8739
8872
  let media = null;
8740
8873
  const onMediaChange = (event) => {
8741
8874
  narrow.value = event.matches;
@@ -8746,13 +8879,13 @@ var date_picker_default = {
8746
8879
  if (media.addEventListener) media.addEventListener("change", onMediaChange);
8747
8880
  else media.addListener(onMediaChange);
8748
8881
  }
8749
- onBeforeUnmount21(() => {
8882
+ onBeforeUnmount22(() => {
8750
8883
  if (!media) return;
8751
8884
  if (media.removeEventListener) media.removeEventListener("change", onMediaChange);
8752
8885
  else media.removeListener(onMediaChange);
8753
8886
  });
8754
8887
  const panelCount = computed14(() => props.range ? Math.min(narrow.value ? 1 : 2, Math.max(1, props.panels)) : 1);
8755
- const hoverKey = ref25("");
8888
+ const hoverKey = ref26("");
8756
8889
  const hoverRange = computed14(() => {
8757
8890
  if (!props.range || !pendingStart.value || pendingEnd.value || !hoverKey.value) return null;
8758
8891
  const a = pendingStart.value;
@@ -8932,7 +9065,7 @@ var date_picker_default = {
8932
9065
  pendingEnd.value = "";
8933
9066
  closePanel();
8934
9067
  }
8935
- onBeforeUnmount21(() => {
9068
+ onBeforeUnmount22(() => {
8936
9069
  if (detachPanel) {
8937
9070
  detachPanel();
8938
9071
  detachPanel = null;
@@ -9061,7 +9194,7 @@ var date_picker_default = {
9061
9194
  };
9062
9195
 
9063
9196
  // 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";
9197
+ import { ref as ref27, computed as computed15, nextTick as nextTick13, onBeforeUnmount as onBeforeUnmount23, watch as watch19 } from "vue";
9065
9198
  function collectLeaves(node, keyOf2, out = []) {
9066
9199
  if (node.children && node.children.length) {
9067
9200
  node.children.forEach((child) => collectLeaves(child, keyOf2, out));
@@ -9097,13 +9230,13 @@ var tree_select_default = {
9097
9230
  },
9098
9231
  emits: ["update:modelValue", "change", "visible-change"],
9099
9232
  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 });
9233
+ const open = ref27(false);
9234
+ const root = ref27(null);
9235
+ const panel = ref27(null);
9236
+ const searchInput = ref27(null);
9237
+ const search = ref27("");
9238
+ const temp = ref27([]);
9239
+ const panelStyle = ref27({ ...PANEL_HIDDEN_STYLE });
9107
9240
  let detachPanel = null;
9108
9241
  function keyOf2(node) {
9109
9242
  return node ? node[props.nodeKey] : void 0;
@@ -9112,7 +9245,7 @@ var tree_select_default = {
9112
9245
  const value = node ? node[props.labelKey] : "";
9113
9246
  return value === null || value === void 0 ? "" : String(value);
9114
9247
  }
9115
- const expandedIds = ref26(
9248
+ const expandedIds = ref27(
9116
9249
  new Set(
9117
9250
  collectNodes(props.options).filter((node) => node.children && node.children.length).map((node) => keyOf2(node))
9118
9251
  )
@@ -9122,7 +9255,7 @@ var tree_select_default = {
9122
9255
  collectNodes(props.options).forEach((node) => map.set(keyOf2(node), node));
9123
9256
  return map;
9124
9257
  });
9125
- watch18(() => props.options, (options) => {
9258
+ watch19(() => props.options, (options) => {
9126
9259
  if (!options || !options.length || expandedIds.value.size) return;
9127
9260
  expandedIds.value = new Set(
9128
9261
  collectNodes(options).filter((node) => node.children && node.children.length).map((node) => keyOf2(node))
@@ -9281,7 +9414,7 @@ var tree_select_default = {
9281
9414
  emit("change", []);
9282
9415
  temp.value = [];
9283
9416
  }
9284
- onBeforeUnmount22(() => {
9417
+ onBeforeUnmount23(() => {
9285
9418
  if (detachPanel) {
9286
9419
  detachPanel();
9287
9420
  detachPanel = null;
@@ -9420,10 +9553,10 @@ var tree_select_default = {
9420
9553
  };
9421
9554
 
9422
9555
  // 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";
9556
+ import { ref as ref29, computed as computed17, watch as watch21, onMounted as onMounted15, onBeforeUnmount as onBeforeUnmount24 } from "vue";
9424
9557
 
9425
9558
  // src/components/media-picker/index.js
9426
- import { computed as computed16, ref as ref27, watch as watch19 } from "vue";
9559
+ import { computed as computed16, ref as ref28, watch as watch20 } from "vue";
9427
9560
  var media_picker_default = {
9428
9561
  name: "DjmMediaPicker",
9429
9562
  components: { DjmModal: modal_default, DjmPagination: pagination_default, DjmIcon: icon_default },
@@ -9442,10 +9575,10 @@ var media_picker_default = {
9442
9575
  },
9443
9576
  emits: ["update:modelValue", "change"],
9444
9577
  setup(props, { emit }) {
9445
- const open = ref27(false);
9446
- const keyword = ref27("");
9447
- const page = ref27(1);
9448
- const temp = ref27([]);
9578
+ const open = ref28(false);
9579
+ const keyword = ref28("");
9580
+ const page = ref28(1);
9581
+ const temp = ref28([]);
9449
9582
  const selectedIds = computed16(() => {
9450
9583
  if (props.multiple) return Array.isArray(props.modelValue) ? props.modelValue : [];
9451
9584
  if (props.modelValue === "" || props.modelValue === null || props.modelValue === void 0) return [];
@@ -9468,10 +9601,10 @@ var media_picker_default = {
9468
9601
  const start = (page.value - 1) * props.pageSize;
9469
9602
  return filtered.value.slice(start, start + props.pageSize);
9470
9603
  });
9471
- watch19(keyword, () => {
9604
+ watch20(keyword, () => {
9472
9605
  page.value = 1;
9473
9606
  });
9474
- watch19(
9607
+ watch20(
9475
9608
  () => filtered.value.length,
9476
9609
  () => {
9477
9610
  const max = Math.max(1, Math.ceil(filtered.value.length / props.pageSize));
@@ -9805,18 +9938,18 @@ var rich_editor_default = {
9805
9938
  },
9806
9939
  emits: ["update:modelValue", "upload-error"],
9807
9940
  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({
9941
+ const editor = ref29(null);
9942
+ const fileInput = ref29(null);
9943
+ const sourceMode = ref29(false);
9944
+ const source = ref29(props.modelValue);
9945
+ const fullscreen = ref29(false);
9946
+ const panel = ref29("");
9947
+ const uploadCount = ref29(0);
9948
+ const textColor = ref29(COLORS[0]);
9949
+ const bgColor = ref29("#fdf3c4");
9950
+ const fontSize = ref29("");
9951
+ const count2 = ref29(0);
9952
+ const formats = ref29({
9820
9953
  bold: false,
9821
9954
  italic: false,
9822
9955
  underline: false,
@@ -10210,7 +10343,7 @@ var rich_editor_default = {
10210
10343
  panel.value = "";
10211
10344
  }
10212
10345
  }
10213
- watch20(
10346
+ watch21(
10214
10347
  () => props.modelValue,
10215
10348
  (value) => {
10216
10349
  if (sourceMode.value) {
@@ -10229,7 +10362,7 @@ var rich_editor_default = {
10229
10362
  document.addEventListener("click", onDocumentClick);
10230
10363
  document.addEventListener("keydown", onKeydown);
10231
10364
  });
10232
- onBeforeUnmount23(() => {
10365
+ onBeforeUnmount24(() => {
10233
10366
  document.removeEventListener("selectionchange", syncFormats);
10234
10367
  document.removeEventListener("click", onDocumentClick);
10235
10368
  document.removeEventListener("keydown", onKeydown);
@@ -10532,7 +10665,7 @@ var rich_editor_default = {
10532
10665
  };
10533
10666
 
10534
10667
  // src/components/floating-window/index.js
10535
- import { ref as ref29, onBeforeUnmount as onBeforeUnmount24 } from "vue";
10668
+ import { ref as ref30, onBeforeUnmount as onBeforeUnmount25 } from "vue";
10536
10669
  function clamp(value, min, max) {
10537
10670
  return Math.min(Math.max(value, min), Math.max(min, max));
10538
10671
  }
@@ -10550,12 +10683,12 @@ var floating_window_default = {
10550
10683
  },
10551
10684
  emits: ["close", "focus"],
10552
10685
  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);
10686
+ const root = ref30(null);
10687
+ const pos = ref30({ x: props.initialX, y: props.initialY });
10688
+ const size = ref30({ w: props.width, h: props.height });
10689
+ const minimized = ref30(false);
10690
+ const maximized = ref30(false);
10691
+ const saved = ref30(null);
10559
10692
  let drag = null;
10560
10693
  let resize = null;
10561
10694
  function stage() {
@@ -10643,7 +10776,7 @@ var floating_window_default = {
10643
10776
  }
10644
10777
  emit("focus");
10645
10778
  }
10646
- onBeforeUnmount24(() => {
10779
+ onBeforeUnmount25(() => {
10647
10780
  window.removeEventListener("pointermove", onDrag);
10648
10781
  window.removeEventListener("pointerup", endDrag);
10649
10782
  window.removeEventListener("pointermove", onResize);
@@ -10691,7 +10824,7 @@ var floating_window_default = {
10691
10824
  };
10692
10825
 
10693
10826
  // src/components/upload/index.js
10694
- import { reactive as reactive4, ref as ref30, watch as watch21, onBeforeUnmount as onBeforeUnmount25 } from "vue";
10827
+ import { reactive as reactive4, ref as ref31, watch as watch22, onBeforeUnmount as onBeforeUnmount26 } from "vue";
10695
10828
  var uidSeed6 = 0;
10696
10829
  function extension(name) {
10697
10830
  const index = name.lastIndexOf(".");
@@ -10741,11 +10874,11 @@ var upload_default = {
10741
10874
  },
10742
10875
  emits: ["update:modelValue", "change", "success", "error", "remove", "exceed"],
10743
10876
  setup(props, { emit }) {
10744
- const files = ref30([]);
10745
- const dragActive = ref30(false);
10746
- const inputRef = ref30(null);
10877
+ const files = ref31([]);
10878
+ const dragActive = ref31(false);
10879
+ const inputRef = ref31(null);
10747
10880
  const tasks = /* @__PURE__ */ new Map();
10748
- watch21(
10881
+ watch22(
10749
10882
  () => props.modelValue,
10750
10883
  (list) => {
10751
10884
  const next = list || [];
@@ -10899,7 +11032,7 @@ var upload_default = {
10899
11032
  files.value = [];
10900
11033
  emitList();
10901
11034
  }
10902
- onBeforeUnmount25(() => {
11035
+ onBeforeUnmount26(() => {
10903
11036
  files.value.forEach((item) => {
10904
11037
  if (item.url) URL.revokeObjectURL(item.url);
10905
11038
  });
@@ -11047,7 +11180,7 @@ var upload_default = {
11047
11180
  };
11048
11181
 
11049
11182
  // src/components/tree/index.js
11050
- import { computed as computed18, ref as ref31, watch as watch22 } from "vue";
11183
+ import { computed as computed18, ref as ref32, watch as watch23 } from "vue";
11051
11184
  var tree_default = {
11052
11185
  name: "DjmTree",
11053
11186
  components: { Icon: icon_default },
@@ -11079,17 +11212,17 @@ var tree_default = {
11079
11212
  },
11080
11213
  emits: ["update:checked", "update:expanded", "node-click", "check", "node-drop", "load-error"],
11081
11214
  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(
11215
+ const lazyChildren = ref32({});
11216
+ const loadingKeys = ref32([]);
11217
+ const innerExpanded = ref32([...props.expanded]);
11218
+ const innerChecked = ref32([...props.checked]);
11219
+ watch23(
11087
11220
  () => props.expanded,
11088
11221
  (value) => {
11089
11222
  if (Array.isArray(value)) innerExpanded.value = value;
11090
11223
  }
11091
11224
  );
11092
- watch22(
11225
+ watch23(
11093
11226
  () => props.checked,
11094
11227
  (value) => {
11095
11228
  if (Array.isArray(value)) innerChecked.value = value;
@@ -11127,7 +11260,7 @@ var tree_default = {
11127
11260
  });
11128
11261
  return out;
11129
11262
  }
11130
- watch22(
11263
+ watch23(
11131
11264
  () => props.data,
11132
11265
  () => {
11133
11266
  if (props.defaultExpandAll) innerExpanded.value = collectExpandable(props.data);
@@ -11215,8 +11348,8 @@ var tree_default = {
11215
11348
  function isActive(node) {
11216
11349
  return props.activeKey !== "" && node[props.nodeKey] === props.activeKey;
11217
11350
  }
11218
- const rootEl = ref31(null);
11219
- const focusIndex = ref31(-1);
11351
+ const rootEl = ref32(null);
11352
+ const focusIndex = ref32(-1);
11220
11353
  function tabIndexOf(index) {
11221
11354
  return (focusIndex.value === -1 ? 0 : focusIndex.value) === index ? 0 : -1;
11222
11355
  }
@@ -11273,9 +11406,9 @@ var tree_default = {
11273
11406
  function rowClassOf(node, level) {
11274
11407
  return typeof props.rowClass === "function" ? props.rowClass(node, level) : props.rowClass;
11275
11408
  }
11276
- const dragKey = ref31("");
11277
- const dropKey = ref31("");
11278
- const dropPosition = ref31("");
11409
+ const dragKey = ref32("");
11410
+ const dropKey = ref32("");
11411
+ const dropPosition = ref32("");
11279
11412
  function findNodeByKey(key, nodes = props.data) {
11280
11413
  for (const node of nodes) {
11281
11414
  if (node[props.nodeKey] === key) return node;
@@ -11456,7 +11589,7 @@ var tree_default = {
11456
11589
  };
11457
11590
 
11458
11591
  // 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";
11592
+ import { computed as computed19, nextTick as nextTick14, reactive as reactive5, ref as ref33, useSlots, watch as watch24 } from "vue";
11460
11593
  var ACTIONS_KEY = "__editable_actions";
11461
11594
  function isEmpty(value) {
11462
11595
  if (value === "" || value === null || value === void 0) return true;
@@ -11480,10 +11613,10 @@ var editable_table_default = {
11480
11613
  emits: ["edit", "save", "cancel"],
11481
11614
  setup(props, { emit }) {
11482
11615
  const slots = useSlots();
11483
- const editingKey = ref32("");
11616
+ const editingKey = ref33("");
11484
11617
  const draft = reactive5({});
11485
11618
  const errors = reactive5({});
11486
- const tableRef = ref32(null);
11619
+ const tableRef = ref33(null);
11487
11620
  const editableColumns = computed19(() => props.columns.filter((column) => column.editor));
11488
11621
  const renderColumns = computed19(() => {
11489
11622
  if (!props.showActions) return props.columns;
@@ -11592,7 +11725,7 @@ var editable_table_default = {
11592
11725
  clearErrors();
11593
11726
  return true;
11594
11727
  }
11595
- watch23(
11728
+ watch24(
11596
11729
  () => props.rows,
11597
11730
  () => {
11598
11731
  if (editingKey.value && !findRow(editingKey.value)) {
@@ -11774,7 +11907,7 @@ var message_default = {
11774
11907
  };
11775
11908
 
11776
11909
  // src/components/org-picker/index.js
11777
- import { computed as computed20, onBeforeUnmount as onBeforeUnmount26, ref as ref33, watch as watch24 } from "vue";
11910
+ import { computed as computed20, onBeforeUnmount as onBeforeUnmount27, ref as ref34, watch as watch25 } from "vue";
11778
11911
  var org_picker_default = {
11779
11912
  name: "DjmOrgPicker",
11780
11913
  components: { DjmIcon: icon_default },
@@ -11793,13 +11926,13 @@ var org_picker_default = {
11793
11926
  },
11794
11927
  emits: ["update:modelValue", "change", "visible-change"],
11795
11928
  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());
11929
+ const open = ref34(false);
11930
+ const root = ref34(null);
11931
+ const searchRef = ref34(null);
11932
+ const keyword = ref34("");
11933
+ const activeDept = ref34("");
11934
+ const temp = ref34([]);
11935
+ const expandedIds = ref34(/* @__PURE__ */ new Set());
11803
11936
  let detachPanel = null;
11804
11937
  function collectDeptIds(nodes, out = []) {
11805
11938
  nodes.forEach((node) => {
@@ -11870,8 +12003,8 @@ var org_picker_default = {
11870
12003
  const selectedCount = computed20(() => temp.value.length);
11871
12004
  const placeholderText = computed20(() => props.placeholder || t("orgPicker.placeholder"));
11872
12005
  const emptyLabel = computed20(() => props.emptyText || t("orgPicker.empty"));
11873
- const panel = ref33(null);
11874
- const panelStyle = ref33({ ...PANEL_HIDDEN_STYLE });
12006
+ const panel = ref34(null);
12007
+ const panelStyle = ref34({ ...PANEL_HIDDEN_STYLE });
11875
12008
  const PANEL_HEIGHT = 342;
11876
12009
  function updatePosition() {
11877
12010
  if (!open.value || !root.value) return;
@@ -11888,7 +12021,7 @@ var org_picker_default = {
11888
12021
  expandedIds.value = new Set(collectDeptIds(props.departments));
11889
12022
  }
11890
12023
  expandAll();
11891
- watch24(() => props.departments, () => {
12024
+ watch25(() => props.departments, () => {
11892
12025
  expandedIds.value = /* @__PURE__ */ new Set([...expandedIds.value, ...collectDeptIds(props.departments)]);
11893
12026
  });
11894
12027
  function initialOf(item) {
@@ -11977,7 +12110,7 @@ var org_picker_default = {
11977
12110
  function clearTemp() {
11978
12111
  temp.value = [];
11979
12112
  }
11980
- onBeforeUnmount26(() => {
12113
+ onBeforeUnmount27(() => {
11981
12114
  if (detachPanel) {
11982
12115
  detachPanel();
11983
12116
  detachPanel = null;
@@ -12163,7 +12296,7 @@ var org_picker_default = {
12163
12296
  };
12164
12297
 
12165
12298
  // src/components/schema-form/index.js
12166
- import { computed as computed21, reactive as reactive7, ref as ref34, watch as watch25 } from "vue";
12299
+ import { computed as computed21, reactive as reactive7, ref as ref35, watch as watch26 } from "vue";
12167
12300
  var CONTROL_MAP = {
12168
12301
  input: input_default,
12169
12302
  number: input_number_default,
@@ -12199,22 +12332,22 @@ var schema_form_default = {
12199
12332
  },
12200
12333
  emits: ["update:modelValue", "change"],
12201
12334
  setup(props, { emit }) {
12202
- const innerForm = ref34(null);
12335
+ const innerForm = ref35(null);
12203
12336
  const model = reactive7({ ...props.modelValue });
12204
- watch25(() => props.fields, (fields) => {
12337
+ watch26(() => props.fields, (fields) => {
12205
12338
  fields.forEach((field) => {
12206
12339
  if (model[field.key] === void 0 && field.default !== void 0) {
12207
12340
  model[field.key] = typeof field.default === "function" ? field.default() : field.default;
12208
12341
  }
12209
12342
  });
12210
12343
  }, { immediate: true, deep: true });
12211
- watch25(() => props.modelValue, (value) => {
12344
+ watch26(() => props.modelValue, (value) => {
12212
12345
  if (!value) return;
12213
12346
  Object.keys(value).forEach((key) => {
12214
12347
  if (model[key] !== value[key]) model[key] = value[key];
12215
12348
  });
12216
12349
  }, { deep: true });
12217
- watch25(model, () => {
12350
+ watch26(model, () => {
12218
12351
  emit("update:modelValue", { ...model });
12219
12352
  emit("change", { ...model });
12220
12353
  }, { deep: true });
@@ -12425,7 +12558,7 @@ var approval_flow_default = {
12425
12558
  };
12426
12559
 
12427
12560
  // src/components/query-filter/index.js
12428
- import { computed as computed22, reactive as reactive8, ref as ref35, watch as watch26 } from "vue";
12561
+ import { computed as computed22, reactive as reactive8, ref as ref36, watch as watch27 } from "vue";
12429
12562
  var CONTROL_MAP2 = {
12430
12563
  input: input_default,
12431
12564
  number: input_number_default,
@@ -12450,22 +12583,22 @@ var query_filter_default = {
12450
12583
  },
12451
12584
  emits: ["update:modelValue", "search", "reset"],
12452
12585
  setup(props, { emit }) {
12453
- const expanded = ref35(false);
12586
+ const expanded = ref36(false);
12454
12587
  const model = reactive8({ ...props.modelValue });
12455
- watch26(() => props.fields, (fields) => {
12588
+ watch27(() => props.fields, (fields) => {
12456
12589
  fields.forEach((field) => {
12457
12590
  if (model[field.key] === void 0 && field.default !== void 0) {
12458
12591
  model[field.key] = typeof field.default === "function" ? field.default() : field.default;
12459
12592
  }
12460
12593
  });
12461
12594
  }, { immediate: true, deep: true });
12462
- watch26(() => props.modelValue, (value) => {
12595
+ watch27(() => props.modelValue, (value) => {
12463
12596
  if (!value) return;
12464
12597
  Object.keys(value).forEach((key) => {
12465
12598
  if (model[key] !== value[key]) model[key] = value[key];
12466
12599
  });
12467
12600
  }, { deep: true });
12468
- watch26(model, () => {
12601
+ watch27(model, () => {
12469
12602
  emit("update:modelValue", { ...model });
12470
12603
  }, { deep: true });
12471
12604
  const collapsible = computed22(() => props.fields.length > props.visibleCount);
@@ -12599,7 +12732,7 @@ var filter_tags_default = {
12599
12732
  };
12600
12733
 
12601
12734
  // src/components/kanban/index.js
12602
- import { ref as ref36, watch as watch27 } from "vue";
12735
+ import { ref as ref37, watch as watch28 } from "vue";
12603
12736
  function cloneColumns(list) {
12604
12737
  return (list || []).map((col) => ({ ...col, cards: (col.cards || []).slice() }));
12605
12738
  }
@@ -12616,15 +12749,15 @@ var kanban_default = {
12616
12749
  },
12617
12750
  emits: ["update:columns", "change", "card-move", "card-click", "card-add"],
12618
12751
  setup(props, { emit }) {
12619
- const inner = ref36(cloneColumns(props.columns));
12620
- watch27(
12752
+ const inner = ref37(cloneColumns(props.columns));
12753
+ watch28(
12621
12754
  () => props.columns,
12622
12755
  (list) => {
12623
12756
  inner.value = cloneColumns(list);
12624
12757
  }
12625
12758
  );
12626
- const dragCard = ref36(null);
12627
- const dropTarget = ref36(null);
12759
+ const dragCard = ref37(null);
12760
+ const dropTarget = ref37(null);
12628
12761
  function columnOf(key) {
12629
12762
  return inner.value.find((col) => col.key === key);
12630
12763
  }
@@ -12924,7 +13057,7 @@ var attachment_list_default = {
12924
13057
  };
12925
13058
 
12926
13059
  // src/components/notification/index.js
12927
- import { computed as computed24, onBeforeUnmount as onBeforeUnmount27, ref as ref37 } from "vue";
13060
+ import { computed as computed24, onBeforeUnmount as onBeforeUnmount28, ref as ref38 } from "vue";
12928
13061
  var TYPE_MAP = {
12929
13062
  info: { icon: "info", cls: "djm-is-info" },
12930
13063
  success: { icon: "check", cls: "djm-is-success" },
@@ -12956,7 +13089,7 @@ var notification_default = {
12956
13089
  function onReadAll() {
12957
13090
  emit("read-all");
12958
13091
  }
12959
- const clearing = ref37(false);
13092
+ const clearing = ref38(false);
12960
13093
  let clearTimer = null;
12961
13094
  function onClear() {
12962
13095
  if (!clearing.value) {
@@ -12970,7 +13103,7 @@ var notification_default = {
12970
13103
  clearing.value = false;
12971
13104
  emit("clear");
12972
13105
  }
12973
- onBeforeUnmount27(() => window.clearTimeout(clearTimer));
13106
+ onBeforeUnmount28(() => window.clearTimeout(clearTimer));
12974
13107
  function onRemove(item) {
12975
13108
  emit("remove", item);
12976
13109
  }
@@ -13045,7 +13178,7 @@ var notification_default = {
13045
13178
  };
13046
13179
 
13047
13180
  // src/components/config-provider/index.js
13048
- import { watch as watch28 } from "vue";
13181
+ import { watch as watch29 } from "vue";
13049
13182
  var SIZE_HEIGHT = { xs: "24px", sm: "28px", md: "30px", lg: "34px" };
13050
13183
  var config_provider_default = {
13051
13184
  name: "DjmConfigProvider",
@@ -13055,7 +13188,7 @@ var config_provider_default = {
13055
13188
  },
13056
13189
  setup(props) {
13057
13190
  if (props.locale) setLocale(props.locale);
13058
- watch28(
13191
+ watch29(
13059
13192
  () => props.locale,
13060
13193
  (code) => {
13061
13194
  if (code) setLocale(code);
@@ -13077,7 +13210,7 @@ var config_provider_default = {
13077
13210
  };
13078
13211
 
13079
13212
  // src/components/date-time-picker/index.js
13080
- import { ref as ref38, computed as computed25, watch as watch29, onBeforeUnmount as onBeforeUnmount28 } from "vue";
13213
+ import { ref as ref39, computed as computed25, watch as watch30, onBeforeUnmount as onBeforeUnmount29 } from "vue";
13081
13214
  var uidSeed7 = 0;
13082
13215
  var pad4 = (value) => String(value).padStart(2, "0");
13083
13216
  function toDateKey(year, month, day) {
@@ -13110,20 +13243,20 @@ var date_time_picker_default = {
13110
13243
  },
13111
13244
  emits: ["update:modelValue", "change", "visible-change"],
13112
13245
  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);
13246
+ const open = ref39(false);
13247
+ watch30(open, (value) => emit("visible-change", value));
13248
+ const root = ref39(null);
13249
+ const panel = ref39(null);
13117
13250
  const panelId = "djm-datetime-panel-" + ++uidSeed7;
13118
- const panelStyle = ref38({ ...PANEL_HIDDEN_STYLE });
13251
+ const panelStyle = ref39({ ...PANEL_HIDDEN_STYLE });
13119
13252
  let detachPanel = null;
13120
13253
  const today = /* @__PURE__ */ new Date();
13121
13254
  const todayKey = toDateKey(today.getFullYear(), today.getMonth(), today.getDate());
13122
13255
  const hasSeconds = computed25(() => props.format.indexOf("ss") > -1);
13123
- const draft = ref38({ date: "", h: "00", m: "00", s: "00" });
13256
+ const draft = ref39({ date: "", h: "00", m: "00", s: "00" });
13124
13257
  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());
13258
+ const viewYear = ref39(initial ? initial.year : today.getFullYear());
13259
+ const viewMonth = ref39(initial ? initial.month : today.getMonth());
13127
13260
  const displayText = computed25(() => props.modelValue || "");
13128
13261
  const placeholderText = computed25(() => props.placeholder || t("dateTimePicker.placeholder"));
13129
13262
  const weeks = computed25(() => t("datePicker.weeks").split(","));
@@ -13279,7 +13412,7 @@ var date_time_picker_default = {
13279
13412
  emit("change", "");
13280
13413
  closePanel();
13281
13414
  }
13282
- onBeforeUnmount28(() => {
13415
+ onBeforeUnmount29(() => {
13283
13416
  if (detachPanel) {
13284
13417
  detachPanel();
13285
13418
  detachPanel = null;
@@ -13404,7 +13537,7 @@ var date_time_picker_default = {
13404
13537
  };
13405
13538
 
13406
13539
  // 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";
13540
+ import { ref as ref40, computed as computed26, watch as watch31, onMounted as onMounted16, onBeforeUnmount as onBeforeUnmount30 } from "vue";
13408
13541
  var virtual_list_default = {
13409
13542
  name: "DjmVirtualList",
13410
13543
  props: {
@@ -13421,9 +13554,9 @@ var virtual_list_default = {
13421
13554
  },
13422
13555
  emits: ["scroll", "reach-bottom", "item-click"],
13423
13556
  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);
13557
+ const viewport = ref40(null);
13558
+ const scrollTop = ref40(0);
13559
+ const viewHeight = ref40(typeof props.height === "number" ? props.height : 320);
13427
13560
  let bottomFired = false;
13428
13561
  function rowHeight(item, index) {
13429
13562
  return typeof props.itemHeight === "function" ? Math.max(1, Number(props.itemHeight(item, index)) || 1) : Math.max(1, props.itemHeight);
@@ -13493,7 +13626,7 @@ var virtual_list_default = {
13493
13626
  else if (start < el.scrollTop) el.scrollTop = start;
13494
13627
  else if (end > el.scrollTop + el.clientHeight) el.scrollTop = end - el.clientHeight;
13495
13628
  }
13496
- watch30(
13629
+ watch31(
13497
13630
  () => props.height,
13498
13631
  () => {
13499
13632
  if (viewport.value) viewHeight.value = viewport.value.clientHeight;
@@ -13510,7 +13643,7 @@ var virtual_list_default = {
13510
13643
  resizeObserver.observe(viewport.value);
13511
13644
  }
13512
13645
  });
13513
- onBeforeUnmount29(() => {
13646
+ onBeforeUnmount30(() => {
13514
13647
  if (resizeObserver) resizeObserver.disconnect();
13515
13648
  });
13516
13649
  function onItemClick(row) {
@@ -13599,7 +13732,7 @@ var batch_bar_default = {
13599
13732
  };
13600
13733
 
13601
13734
  // src/components/import-wizard/index.js
13602
- import { ref as ref40, computed as computed28, watch as watch31 } from "vue";
13735
+ import { ref as ref41, computed as computed28, watch as watch32 } from "vue";
13603
13736
  function matchAccept2(name, accept) {
13604
13737
  if (!accept) return true;
13605
13738
  const ext = "." + String(name).split(".").pop().toLowerCase();
@@ -13626,19 +13759,19 @@ var import_wizard_default = {
13626
13759
  },
13627
13760
  emits: ["update:step", "update:mapping", "file-change", "submit", "retry"],
13628
13761
  setup(props, { emit }) {
13629
- const innerStep = ref40(props.step || 1);
13630
- watch31(
13762
+ const innerStep = ref41(props.step || 1);
13763
+ watch32(
13631
13764
  () => props.step,
13632
13765
  (value) => {
13633
13766
  if (value) innerStep.value = value;
13634
13767
  }
13635
13768
  );
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(
13769
+ const file = ref41(null);
13770
+ const fileError = ref41("");
13771
+ const mappingError = ref41("");
13772
+ const fileInput = ref41(null);
13773
+ const innerMapping = ref41({ ...props.mapping });
13774
+ watch32(
13642
13775
  () => props.mapping,
13643
13776
  (value) => {
13644
13777
  innerMapping.value = { ...value };
@@ -13703,7 +13836,7 @@ var import_wizard_default = {
13703
13836
  }
13704
13837
  emit("submit", { ...innerMapping.value });
13705
13838
  }
13706
- watch31(
13839
+ watch32(
13707
13840
  () => props.result,
13708
13841
  (value) => {
13709
13842
  if (value && (value.total || value.success || value.failed || value.errors && value.errors.length)) {
@@ -13870,7 +14003,7 @@ var import_wizard_default = {
13870
14003
  };
13871
14004
 
13872
14005
  // src/components/diff/index.js
13873
- import { ref as ref41, computed as computed29 } from "vue";
14006
+ import { ref as ref42, computed as computed29 } from "vue";
13874
14007
 
13875
14008
  // src/utils/text-diff.js
13876
14009
  var MAX_CELLS = 1e6;
@@ -13944,7 +14077,7 @@ var diff_default = {
13944
14077
  });
13945
14078
  return { add, remove };
13946
14079
  });
13947
- const expandedBlocks = ref41([]);
14080
+ const expandedBlocks = ref42([]);
13948
14081
  function expand(index) {
13949
14082
  expandedBlocks.value = expandedBlocks.value.concat(index);
13950
14083
  }
@@ -14071,7 +14204,7 @@ var diff_default = {
14071
14204
  };
14072
14205
 
14073
14206
  // src/components/tree-table/index.js
14074
- import { ref as ref42, computed as computed30, watch as watch32 } from "vue";
14207
+ import { ref as ref43, computed as computed30, watch as watch33 } from "vue";
14075
14208
  function keyOf(row, rowKey) {
14076
14209
  return row && row[rowKey] !== void 0 ? row[rowKey] : row && row.id;
14077
14210
  }
@@ -14110,17 +14243,17 @@ var tree_table_default = {
14110
14243
  eachNode(props.data, (row) => keys.push(keyOf(row, props.rowKey)));
14111
14244
  return keys;
14112
14245
  }
14113
- const innerExpanded = ref42(
14246
+ const innerExpanded = ref43(
14114
14247
  props.expandedKeys ? props.expandedKeys.slice() : props.defaultExpandAll ? allKeys() : []
14115
14248
  );
14116
- watch32(
14249
+ watch33(
14117
14250
  () => props.expandedKeys,
14118
14251
  (value) => {
14119
14252
  if (value) innerExpanded.value = value.slice();
14120
14253
  }
14121
14254
  );
14122
- const innerChecked = ref42(props.checkedKeys ? props.checkedKeys.slice() : []);
14123
- watch32(
14255
+ const innerChecked = ref43(props.checkedKeys ? props.checkedKeys.slice() : []);
14256
+ watch33(
14124
14257
  () => props.checkedKeys,
14125
14258
  (value) => {
14126
14259
  if (value) innerChecked.value = value.slice();
@@ -14352,7 +14485,7 @@ var tree_table_default = {
14352
14485
  };
14353
14486
 
14354
14487
  // src/components/schedule/index.js
14355
- import { ref as ref43, computed as computed31, watch as watch33, onBeforeUnmount as onBeforeUnmount30 } from "vue";
14488
+ import { ref as ref44, computed as computed31, watch as watch34, onBeforeUnmount as onBeforeUnmount31 } from "vue";
14356
14489
  var pad5 = (value) => String(value).padStart(2, "0");
14357
14490
  function toKey3(date) {
14358
14491
  return `${date.getFullYear()}-${pad5(date.getMonth() + 1)}-${pad5(date.getDate())}`;
@@ -14384,13 +14517,13 @@ var schedule_default = {
14384
14517
  emits: ["update:modelValue", "event-click", "slot-click", "week-change"],
14385
14518
  setup(props, { emit }) {
14386
14519
  const todayKey = toKey3(/* @__PURE__ */ new Date());
14387
- const nowMinutes = ref43((/* @__PURE__ */ new Date()).getHours() * 60 + (/* @__PURE__ */ new Date()).getMinutes());
14520
+ const nowMinutes = ref44((/* @__PURE__ */ new Date()).getHours() * 60 + (/* @__PURE__ */ new Date()).getMinutes());
14388
14521
  const timer = window.setInterval(() => {
14389
14522
  const now = /* @__PURE__ */ new Date();
14390
14523
  nowMinutes.value = now.getHours() * 60 + now.getMinutes();
14391
14524
  }, 6e4);
14392
- const anchor = ref43(props.modelValue || todayKey);
14393
- watch33(
14525
+ const anchor = ref44(props.modelValue || todayKey);
14526
+ watch34(
14394
14527
  () => props.modelValue,
14395
14528
  (value) => {
14396
14529
  if (value) anchor.value = value;
@@ -14497,7 +14630,7 @@ var schedule_default = {
14497
14630
  const minute = minutes % 60;
14498
14631
  emit("slot-click", { date: day.key, time: `${pad5(hour)}:${pad5(minute)}` });
14499
14632
  }
14500
- onBeforeUnmount30(() => window.clearInterval(timer));
14633
+ onBeforeUnmount31(() => window.clearInterval(timer));
14501
14634
  return {
14502
14635
  days,
14503
14636
  hours,
@@ -14597,7 +14730,7 @@ var schedule_default = {
14597
14730
  };
14598
14731
 
14599
14732
  // src/components/comment/index.js
14600
- import { ref as ref44, computed as computed32 } from "vue";
14733
+ import { ref as ref45, computed as computed32 } from "vue";
14601
14734
  var comment_default = {
14602
14735
  name: "DjmComment",
14603
14736
  components: { DjmAvatar: avatar_default, DjmIcon: icon_default },
@@ -14614,8 +14747,8 @@ var comment_default = {
14614
14747
  },
14615
14748
  emits: ["submit", "reply", "remove"],
14616
14749
  setup(props, { emit }) {
14617
- const content = ref44("");
14618
- const replyTarget = ref44(null);
14750
+ const content = ref45("");
14751
+ const replyTarget = ref45(null);
14619
14752
  const placeholderText = computed32(() => {
14620
14753
  if (replyTarget.value) return t("comment.replyPlaceholder", { name: replyTarget.value.author });
14621
14754
  return props.placeholder || t("comment.placeholder");
@@ -14728,7 +14861,7 @@ var comment_default = {
14728
14861
  };
14729
14862
 
14730
14863
  // src/components/signature/index.js
14731
- import { ref as ref45, onMounted as onMounted17, onBeforeUnmount as onBeforeUnmount31, watch as watch34 } from "vue";
14864
+ import { ref as ref46, onMounted as onMounted17, onBeforeUnmount as onBeforeUnmount32, watch as watch35 } from "vue";
14732
14865
  var signature_default = {
14733
14866
  name: "DjmSignature",
14734
14867
  props: {
@@ -14742,10 +14875,10 @@ var signature_default = {
14742
14875
  },
14743
14876
  emits: ["update:modelValue", "change", "start", "end", "clear"],
14744
14877
  setup(props, { emit }) {
14745
- const canvas = ref45(null);
14746
- const root = ref45(null);
14747
- const strokes = ref45([]);
14748
- const hasImage = ref45(false);
14878
+ const canvas = ref46(null);
14879
+ const root = ref46(null);
14880
+ const strokes = ref46([]);
14881
+ const hasImage = ref46(false);
14749
14882
  let imageCache = null;
14750
14883
  let drawing = false;
14751
14884
  let current = null;
@@ -14860,7 +14993,7 @@ var signature_default = {
14860
14993
  return canvas.value ? canvas.value.toDataURL("image/png") : "";
14861
14994
  }
14862
14995
  const isEmpty2 = () => strokes.value.length === 0 && !hasImage.value;
14863
- watch34(
14996
+ watch35(
14864
14997
  () => props.modelValue,
14865
14998
  (value) => {
14866
14999
  if (value === lastEmitted) return;
@@ -14898,7 +15031,7 @@ var signature_default = {
14898
15031
  if (root.value) observer.observe(root.value);
14899
15032
  }
14900
15033
  });
14901
- onBeforeUnmount31(() => {
15034
+ onBeforeUnmount32(() => {
14902
15035
  if (observer) observer.disconnect();
14903
15036
  });
14904
15037
  return {
@@ -14938,7 +15071,7 @@ var signature_default = {
14938
15071
  };
14939
15072
 
14940
15073
  // src/components/print/index.js
14941
- import { ref as ref46, computed as computed33 } from "vue";
15074
+ import { ref as ref47, computed as computed33 } from "vue";
14942
15075
  function escapeHtml(text) {
14943
15076
  return String(text).replace(/[&<>"]/g, (ch) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" })[ch]);
14944
15077
  }
@@ -14954,7 +15087,7 @@ var print_default = {
14954
15087
  },
14955
15088
  emits: ["before-print", "after-print"],
14956
15089
  setup(props, { emit }) {
14957
- const content = ref46(null);
15090
+ const content = ref47(null);
14958
15091
  const label = computed33(() => props.buttonText || t("print.button"));
14959
15092
  function collectStyles() {
14960
15093
  return Array.from(document.querySelectorAll('link[rel="stylesheet"], style')).map((el) => el.outerHTML).join("");
@@ -15175,7 +15308,7 @@ var gantt_default = {
15175
15308
  };
15176
15309
 
15177
15310
  // src/components/field-list/index.js
15178
- import { ref as ref47, computed as computed35, watch as watch35 } from "vue";
15311
+ import { ref as ref48, computed as computed35, watch as watch36 } from "vue";
15179
15312
  var uidSeed8 = 0;
15180
15313
  var field_list_default = {
15181
15314
  name: "DjmFieldList",
@@ -15195,7 +15328,7 @@ var field_list_default = {
15195
15328
  },
15196
15329
  emits: ["update:modelValue", "add", "remove", "change"],
15197
15330
  setup(props, { emit }) {
15198
- const uids = ref47([]);
15331
+ const uids = ref48([]);
15199
15332
  function syncUids() {
15200
15333
  const length = props.modelValue.length;
15201
15334
  if (uids.value.length === length) return;
@@ -15204,8 +15337,8 @@ var field_list_default = {
15204
15337
  uids.value = next;
15205
15338
  }
15206
15339
  syncUids();
15207
- watch35(() => props.modelValue.length, syncUids);
15208
- const errors = ref47({});
15340
+ watch36(() => props.modelValue.length, syncUids);
15341
+ const errors = ref48({});
15209
15342
  const addLabel = computed35(() => props.addText || t("fieldList.add"));
15210
15343
  const emptyLabel = computed35(() => props.emptyText || t("fieldList.empty"));
15211
15344
  const canAdd = computed35(() => !props.disabled && (!props.max || props.modelValue.length < props.max));
@@ -15371,7 +15504,7 @@ var field_list_default = {
15371
15504
  };
15372
15505
 
15373
15506
  // src/components/chat/index.js
15374
- import { ref as ref48, computed as computed36, watch as watch36, nextTick as nextTick15 } from "vue";
15507
+ import { ref as ref49, computed as computed36, watch as watch37, nextTick as nextTick15 } from "vue";
15375
15508
  var chat_default = {
15376
15509
  name: "DjmChat",
15377
15510
  components: { DjmAvatar: avatar_default },
@@ -15388,8 +15521,8 @@ var chat_default = {
15388
15521
  },
15389
15522
  emits: ["submit"],
15390
15523
  setup(props, { emit }) {
15391
- const content = ref48("");
15392
- const listRef = ref48(null);
15524
+ const content = ref49("");
15525
+ const listRef = ref49(null);
15393
15526
  const placeholderText = computed36(() => props.placeholder || t("chat.placeholder"));
15394
15527
  const sendLabel = computed36(() => props.sendText || t("chat.send"));
15395
15528
  const emptyLabel = computed36(() => props.emptyText || t("chat.empty"));
@@ -15398,7 +15531,7 @@ var chat_default = {
15398
15531
  const el = listRef.value;
15399
15532
  if (el) el.scrollTop = el.scrollHeight;
15400
15533
  }
15401
- watch36(
15534
+ watch37(
15402
15535
  () => props.messages.length,
15403
15536
  () => nextTick15(scrollToBottom)
15404
15537
  );
@@ -15511,7 +15644,7 @@ var chat_default = {
15511
15644
  };
15512
15645
 
15513
15646
  // src/components/org-chart/index.js
15514
- import { ref as ref49, computed as computed37, watch as watch37 } from "vue";
15647
+ import { ref as ref50, computed as computed37, watch as watch38 } from "vue";
15515
15648
  var org_chart_default = {
15516
15649
  name: "DjmOrgChart",
15517
15650
  components: { DjmAvatar: avatar_default, DjmIcon: icon_default },
@@ -15544,8 +15677,8 @@ var org_chart_default = {
15544
15677
  walk(node);
15545
15678
  return keys;
15546
15679
  }
15547
- const collapsed = ref49(props.defaultExpandAll ? [] : collapsedByDefault(props.data));
15548
- watch37(() => props.data, (data) => {
15680
+ const collapsed = ref50(props.defaultExpandAll ? [] : collapsedByDefault(props.data));
15681
+ watch38(() => props.data, (data) => {
15549
15682
  collapsed.value = props.defaultExpandAll ? [] : collapsedByDefault(data);
15550
15683
  });
15551
15684
  const layout = computed37(() => {
@@ -15938,7 +16071,7 @@ var components = [
15938
16071
  org_chart_default,
15939
16072
  page_tabs_default
15940
16073
  ];
15941
- var version = "0.72.0";
16074
+ var version = "0.73.0";
15942
16075
  function install(app, options = {}) {
15943
16076
  if (options.locale) setLocale(options.locale);
15944
16077
  components.forEach((component) => app.component(component.name, component));
@@ -16060,6 +16193,7 @@ export {
16060
16193
  djmMessage,
16061
16194
  djmMessages,
16062
16195
  getLocale,
16196
+ glass,
16063
16197
  hasPermission,
16064
16198
  initTheme,
16065
16199
  install,
@@ -16069,6 +16203,7 @@ export {
16069
16203
  primaryColor,
16070
16204
  resetPrimaryColor,
16071
16205
  sanitizeHtml,
16206
+ setGlass,
16072
16207
  setLocale,
16073
16208
  setPermissions,
16074
16209
  setPrimaryColor,