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.
- package/CHANGELOG.md +13 -0
- package/README.md +2 -2
- package/dist/djm-ui.cjs +624 -487
- package/dist/djm-ui.cjs.map +3 -3
- package/dist/djm-ui.css +272 -5
- package/dist/djm-ui.esm.js +447 -312
- package/dist/djm-ui.esm.js.map +3 -3
- package/dist/djm-ui.esm.min.js +167 -121
- package/dist/djm-ui.min.cjs +172 -126
- package/dist/djm-ui.min.css +2 -2
- package/dist/djm-ui.umd.js +162 -28
- package/dist/djm-ui.umd.min.js +166 -120
- package/dist/mcp/manifest.json +121 -16
- package/package.json +1 -1
- package/src/components/drawer/index.js +4 -2
- package/src/components/modal/index.js +4 -2
- package/src/components/progress/index.js +72 -3
- package/src/components/spin/index.js +69 -22
- package/src/index.js +2 -1
- package/src/styles/components/feedback.css +46 -0
- package/src/styles/components/glass.css +58 -0
- package/src/styles/components/spin.css +156 -4
- package/src/styles/index.css +1 -0
- package/src/styles/theme-dark.css +3 -0
- package/src/styles/tokens.css +5 -0
- package/src/theme/index.js +22 -0
- package/types/index.d.ts +9 -0
package/dist/djm-ui.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! DJM UI v0.
|
|
1
|
+
/*! DJM UI v0.73.0 · MIT · 2026-10-26 */
|
|
2
2
|
"use strict";
|
|
3
3
|
var DjmUI = (() => {
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1040,6 +1040,7 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
1040
1040
|
djmMessage: () => djmMessage,
|
|
1041
1041
|
djmMessages: () => djmMessages,
|
|
1042
1042
|
getLocale: () => getLocale,
|
|
1043
|
+
glass: () => glass,
|
|
1043
1044
|
hasPermission: () => hasPermission,
|
|
1044
1045
|
initTheme: () => initTheme,
|
|
1045
1046
|
install: () => install,
|
|
@@ -1049,6 +1050,7 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
1049
1050
|
primaryColor: () => primaryColor,
|
|
1050
1051
|
resetPrimaryColor: () => resetPrimaryColor,
|
|
1051
1052
|
sanitizeHtml: () => sanitizeHtml,
|
|
1053
|
+
setGlass: () => setGlass,
|
|
1052
1054
|
setLocale: () => setLocale,
|
|
1053
1055
|
setPermissions: () => setPermissions,
|
|
1054
1056
|
setPrimaryColor: () => setPrimaryColor,
|
|
@@ -4253,12 +4255,18 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
4253
4255
|
name: "DjmProgress",
|
|
4254
4256
|
props: {
|
|
4255
4257
|
percent: { type: Number, default: 0 },
|
|
4258
|
+
// line 横向 / circle 环形
|
|
4259
|
+
type: { type: String, default: "line" },
|
|
4256
4260
|
// '' / success / error / warning
|
|
4257
4261
|
status: { type: String, default: "" },
|
|
4258
4262
|
showText: { type: Boolean, default: true },
|
|
4259
4263
|
strokeWidth: { type: Number, default: 6 },
|
|
4260
4264
|
// 自定义进度色,不传由状态决定
|
|
4261
|
-
color: { type: String, default: "" }
|
|
4265
|
+
color: { type: String, default: "" },
|
|
4266
|
+
// 环形直径(px)
|
|
4267
|
+
size: { type: Number, default: 96 },
|
|
4268
|
+
// 无障碍名称,默认「进度」
|
|
4269
|
+
label: { type: String, default: "" }
|
|
4262
4270
|
},
|
|
4263
4271
|
computed: {
|
|
4264
4272
|
safePercent() {
|
|
@@ -4271,10 +4279,72 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
4271
4279
|
},
|
|
4272
4280
|
trackStyle() {
|
|
4273
4281
|
return { height: this.strokeWidth + "px" };
|
|
4282
|
+
},
|
|
4283
|
+
circleSize() {
|
|
4284
|
+
return Math.max(48, Number(this.size) || 96);
|
|
4285
|
+
},
|
|
4286
|
+
circleRadius() {
|
|
4287
|
+
return (this.circleSize - this.strokeWidth) / 2;
|
|
4288
|
+
},
|
|
4289
|
+
circleLength() {
|
|
4290
|
+
return 2 * Math.PI * this.circleRadius;
|
|
4291
|
+
},
|
|
4292
|
+
circleOffset() {
|
|
4293
|
+
return this.circleLength * (1 - this.safePercent / 100);
|
|
4294
|
+
},
|
|
4295
|
+
circleStyle() {
|
|
4296
|
+
return { width: this.circleSize + "px", height: this.circleSize + "px" };
|
|
4297
|
+
},
|
|
4298
|
+
circleLabelStyle() {
|
|
4299
|
+
return { fontSize: Math.max(12, Math.round(this.circleSize / 5)) + "px" };
|
|
4274
4300
|
}
|
|
4275
4301
|
},
|
|
4276
4302
|
template: `
|
|
4277
|
-
<div
|
|
4303
|
+
<div
|
|
4304
|
+
v-if="type === 'circle'"
|
|
4305
|
+
class="djm-progress-circle"
|
|
4306
|
+
:class="status ? 'djm-is-' + status : ''"
|
|
4307
|
+
:style="circleStyle"
|
|
4308
|
+
role="progressbar"
|
|
4309
|
+
:aria-label="label || '\u8FDB\u5EA6'"
|
|
4310
|
+
:aria-valuenow="safePercent"
|
|
4311
|
+
aria-valuemin="0"
|
|
4312
|
+
aria-valuemax="100"
|
|
4313
|
+
>
|
|
4314
|
+
<svg :viewBox="'0 0 ' + circleSize + ' ' + circleSize" aria-hidden="true">
|
|
4315
|
+
<circle
|
|
4316
|
+
class="djm-progress-circle-track"
|
|
4317
|
+
:cx="circleSize / 2"
|
|
4318
|
+
:cy="circleSize / 2"
|
|
4319
|
+
:r="circleRadius"
|
|
4320
|
+
:stroke-width="strokeWidth"
|
|
4321
|
+
fill="none"
|
|
4322
|
+
/>
|
|
4323
|
+
<circle
|
|
4324
|
+
class="djm-progress-circle-bar"
|
|
4325
|
+
:cx="circleSize / 2"
|
|
4326
|
+
:cy="circleSize / 2"
|
|
4327
|
+
:r="circleRadius"
|
|
4328
|
+
:stroke-width="strokeWidth"
|
|
4329
|
+
fill="none"
|
|
4330
|
+
stroke-linecap="round"
|
|
4331
|
+
:stroke-dasharray="circleLength"
|
|
4332
|
+
:stroke-dashoffset="circleOffset"
|
|
4333
|
+
:style="color ? { stroke: color } : null"
|
|
4334
|
+
/>
|
|
4335
|
+
</svg>
|
|
4336
|
+
<span v-if="showText" class="djm-progress-circle-label" :style="circleLabelStyle">{{ safePercent }}%</span>
|
|
4337
|
+
</div>
|
|
4338
|
+
<div
|
|
4339
|
+
v-else
|
|
4340
|
+
class="djm-progress-line"
|
|
4341
|
+
:class="status ? 'djm-is-' + status : ''"
|
|
4342
|
+
role="progressbar"
|
|
4343
|
+
:aria-label="label || '\u8FDB\u5EA6'"
|
|
4344
|
+
:aria-valuenow="safePercent"
|
|
4345
|
+
aria-valuemin="0"
|
|
4346
|
+
aria-valuemax="100"
|
|
4347
|
+
>
|
|
4278
4348
|
<div class="djm-progress" :style="trackStyle">
|
|
4279
4349
|
<div class="djm-progress-bar" :style="barStyle"></div>
|
|
4280
4350
|
</div>
|
|
@@ -5480,39 +5550,81 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
5480
5550
|
name: "DjmSpin",
|
|
5481
5551
|
props: {
|
|
5482
5552
|
spinning: { type: Boolean, default: true },
|
|
5483
|
-
size: { type: String, default: "md" },
|
|
5484
5553
|
// sm | md | lg
|
|
5485
|
-
|
|
5554
|
+
size: { type: String, default: "md" },
|
|
5555
|
+
// ring 环形 / dots 点状 / bars 柱状 / pulse 脉冲
|
|
5556
|
+
type: { type: String, default: "ring" },
|
|
5557
|
+
tip: { type: String, default: "" },
|
|
5558
|
+
// 延迟多少毫秒后显示,0 表示立即
|
|
5559
|
+
delay: { type: Number, default: 0 },
|
|
5560
|
+
// 全屏加载:遮罩铺满视口
|
|
5561
|
+
fullscreen: { type: Boolean, default: false },
|
|
5562
|
+
// 自定义指示器颜色,默认跟随品牌色
|
|
5563
|
+
color: { type: String, default: "" }
|
|
5564
|
+
},
|
|
5565
|
+
setup(props) {
|
|
5566
|
+
const visible = ref(false);
|
|
5567
|
+
let timer = null;
|
|
5568
|
+
function sync() {
|
|
5569
|
+
window.clearTimeout(timer);
|
|
5570
|
+
timer = null;
|
|
5571
|
+
if (!props.spinning) {
|
|
5572
|
+
visible.value = false;
|
|
5573
|
+
return;
|
|
5574
|
+
}
|
|
5575
|
+
if (props.delay > 0) {
|
|
5576
|
+
timer = window.setTimeout(() => {
|
|
5577
|
+
visible.value = true;
|
|
5578
|
+
}, props.delay);
|
|
5579
|
+
} else {
|
|
5580
|
+
visible.value = true;
|
|
5581
|
+
}
|
|
5582
|
+
}
|
|
5583
|
+
watch(() => [props.spinning, props.delay], sync, { immediate: true });
|
|
5584
|
+
onBeforeUnmount(() => window.clearTimeout(timer));
|
|
5585
|
+
return { visible };
|
|
5486
5586
|
},
|
|
5487
5587
|
computed: {
|
|
5488
|
-
// 有默认插槽即为包裹模式
|
|
5489
5588
|
wrapped() {
|
|
5490
5589
|
return !!this.$slots.default;
|
|
5590
|
+
},
|
|
5591
|
+
rootClass() {
|
|
5592
|
+
return [
|
|
5593
|
+
"djm-spin",
|
|
5594
|
+
"djm-spin-" + this.size,
|
|
5595
|
+
{
|
|
5596
|
+
"djm-spin-wrap": this.wrapped && !this.fullscreen,
|
|
5597
|
+
"djm-spin-inline": !this.wrapped && !this.fullscreen,
|
|
5598
|
+
"djm-spin-fullscreen": this.fullscreen
|
|
5599
|
+
}
|
|
5600
|
+
];
|
|
5491
5601
|
}
|
|
5492
5602
|
},
|
|
5493
5603
|
template: `
|
|
5494
5604
|
<div
|
|
5495
|
-
v-if="wrapped"
|
|
5496
|
-
class="
|
|
5497
|
-
:
|
|
5498
|
-
:
|
|
5605
|
+
v-if="fullscreen || wrapped || visible"
|
|
5606
|
+
:class="rootClass"
|
|
5607
|
+
:aria-busy="String(visible)"
|
|
5608
|
+
:role="visible ? 'status' : undefined"
|
|
5609
|
+
:aria-label="!wrapped && !fullscreen && !tip && visible ? '\u52A0\u8F7D\u4E2D' : undefined"
|
|
5499
5610
|
>
|
|
5500
|
-
<slot />
|
|
5501
|
-
<div v-if="
|
|
5502
|
-
<span class="djm-
|
|
5611
|
+
<slot v-if="wrapped && !fullscreen" />
|
|
5612
|
+
<div v-if="visible" class="djm-spin-mask">
|
|
5613
|
+
<span class="djm-spin-indicator" :class="'djm-spin-' + type" :style="color ? { color } : null">
|
|
5614
|
+
<slot name="indicator">
|
|
5615
|
+
<i v-if="type === 'ring'" class="djm-spinner"></i>
|
|
5616
|
+
<template v-else-if="type === 'dots'">
|
|
5617
|
+
<i></i><i></i><i></i>
|
|
5618
|
+
</template>
|
|
5619
|
+
<template v-else-if="type === 'bars'">
|
|
5620
|
+
<i></i><i></i><i></i><i></i>
|
|
5621
|
+
</template>
|
|
5622
|
+
<i v-else class="djm-spin-core"></i>
|
|
5623
|
+
</slot>
|
|
5624
|
+
</span>
|
|
5503
5625
|
<span v-if="tip" class="djm-spin-tip">{{ tip }}</span>
|
|
5504
5626
|
</div>
|
|
5505
5627
|
</div>
|
|
5506
|
-
<span
|
|
5507
|
-
v-else
|
|
5508
|
-
class="djm-spin-inline"
|
|
5509
|
-
:class="'djm-spin-' + size"
|
|
5510
|
-
role="status"
|
|
5511
|
-
:aria-label="tip ? undefined : '\u52A0\u8F7D\u4E2D'"
|
|
5512
|
-
>
|
|
5513
|
-
<span class="djm-spinner"></span>
|
|
5514
|
-
<span v-if="tip" class="djm-spin-tip">{{ tip }}</span>
|
|
5515
|
-
</span>
|
|
5516
5628
|
`
|
|
5517
5629
|
};
|
|
5518
5630
|
|
|
@@ -6118,7 +6230,9 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
6118
6230
|
// src/theme/index.js
|
|
6119
6231
|
var KEY = "djm-theme";
|
|
6120
6232
|
var COLOR_KEY = "djm-primary";
|
|
6233
|
+
var GLASS_KEY = "djm-glass";
|
|
6121
6234
|
var theme = ref("light");
|
|
6235
|
+
var glass = ref(false);
|
|
6122
6236
|
var PRESET_COLORS = [
|
|
6123
6237
|
{ name: "\u9ED8\u8BA4\u84DD", value: "#1a6fc4" },
|
|
6124
6238
|
{ name: "\u79D1\u6280\u84DD", value: "#2563eb" },
|
|
@@ -6251,6 +6365,15 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
6251
6365
|
function toggleTheme() {
|
|
6252
6366
|
setTheme(theme.value === "dark" ? "light" : "dark");
|
|
6253
6367
|
}
|
|
6368
|
+
function setGlass(enabled) {
|
|
6369
|
+
glass.value = !!enabled;
|
|
6370
|
+
document.documentElement.dataset.djmGlass = glass.value ? "on" : "";
|
|
6371
|
+
try {
|
|
6372
|
+
if (glass.value) localStorage.setItem(GLASS_KEY, "1");
|
|
6373
|
+
else localStorage.removeItem(GLASS_KEY);
|
|
6374
|
+
} catch (error) {
|
|
6375
|
+
}
|
|
6376
|
+
}
|
|
6254
6377
|
function initTheme() {
|
|
6255
6378
|
let saved = "";
|
|
6256
6379
|
try {
|
|
@@ -6270,9 +6393,16 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
6270
6393
|
} catch (error) {
|
|
6271
6394
|
color = "";
|
|
6272
6395
|
}
|
|
6396
|
+
let glassSaved = false;
|
|
6397
|
+
try {
|
|
6398
|
+
glassSaved = localStorage.getItem(GLASS_KEY) === "1";
|
|
6399
|
+
} catch (error) {
|
|
6400
|
+
glassSaved = false;
|
|
6401
|
+
}
|
|
6273
6402
|
if (color) primaryColor.value = color;
|
|
6274
6403
|
const next = param === "dark" || param === "light" ? param : saved || "light";
|
|
6275
6404
|
setTheme(next);
|
|
6405
|
+
setGlass(glassSaved);
|
|
6276
6406
|
}
|
|
6277
6407
|
|
|
6278
6408
|
// src/components/watermark/index.js
|
|
@@ -8167,7 +8297,9 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
8167
8297
|
// 点击遮罩关闭
|
|
8168
8298
|
maskClosable: { type: Boolean, default: true },
|
|
8169
8299
|
showClose: { type: Boolean, default: true },
|
|
8170
|
-
closeOnEsc: { type: Boolean, default: true }
|
|
8300
|
+
closeOnEsc: { type: Boolean, default: true },
|
|
8301
|
+
// 毛玻璃底
|
|
8302
|
+
glass: { type: Boolean, default: false }
|
|
8171
8303
|
},
|
|
8172
8304
|
emits: ["update:modelValue", "open", "close"],
|
|
8173
8305
|
setup(props, { emit }) {
|
|
@@ -8230,7 +8362,7 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
8230
8362
|
<aside
|
|
8231
8363
|
ref="panelRef"
|
|
8232
8364
|
class="djm-drawer"
|
|
8233
|
-
:class="'djm-drawer-' + placement"
|
|
8365
|
+
:class="['djm-drawer-' + placement, { 'djm-is-glass': glass }]"
|
|
8234
8366
|
:style="panelStyle"
|
|
8235
8367
|
role="dialog"
|
|
8236
8368
|
aria-modal="true"
|
|
@@ -8279,7 +8411,9 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
8279
8411
|
// 是否允许 Esc 关闭
|
|
8280
8412
|
closeOnEsc: { type: Boolean, default: true },
|
|
8281
8413
|
// 全屏铺满,适合配置类大表单
|
|
8282
|
-
fullscreen: { type: Boolean, default: false }
|
|
8414
|
+
fullscreen: { type: Boolean, default: false },
|
|
8415
|
+
// 毛玻璃底:需要显示背后页面时使用
|
|
8416
|
+
glass: { type: Boolean, default: false }
|
|
8283
8417
|
},
|
|
8284
8418
|
emits: ["update:modelValue", "open", "close"],
|
|
8285
8419
|
setup(props, { emit }) {
|
|
@@ -8345,7 +8479,7 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
8345
8479
|
<div
|
|
8346
8480
|
ref="dialogRef"
|
|
8347
8481
|
class="djm-modal"
|
|
8348
|
-
:class="{ 'djm-is-fullscreen': fullscreen }"
|
|
8482
|
+
:class="{ 'djm-is-fullscreen': fullscreen, 'djm-is-glass': glass }"
|
|
8349
8483
|
:style="dialogStyle"
|
|
8350
8484
|
role="dialog"
|
|
8351
8485
|
aria-modal="true"
|
|
@@ -16031,7 +16165,7 @@ Minimum version required to store current data is: ` + i + `.
|
|
|
16031
16165
|
org_chart_default,
|
|
16032
16166
|
page_tabs_default
|
|
16033
16167
|
];
|
|
16034
|
-
var version = "0.
|
|
16168
|
+
var version = "0.73.0";
|
|
16035
16169
|
function install(app, options = {}) {
|
|
16036
16170
|
if (options.locale) setLocale(options.locale);
|
|
16037
16171
|
components.forEach((component) => app.component(component.name, component));
|