djm-ui 0.72.0 → 0.73.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +6 -4
- package/dist/djm-ui.cjs +628 -487
- package/dist/djm-ui.cjs.map +3 -3
- package/dist/djm-ui.css +320 -5
- package/dist/djm-ui.esm.js +451 -312
- package/dist/djm-ui.esm.js.map +3 -3
- package/dist/djm-ui.esm.min.js +171 -121
- package/dist/djm-ui.min.cjs +176 -126
- package/dist/djm-ui.min.css +6 -2
- package/dist/djm-ui.umd.js +166 -28
- package/dist/djm-ui.umd.min.js +170 -120
- package/dist/mcp/manifest.json +122 -17
- package/dist/mcp/server.js +5 -0
- 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 +90 -0
- package/src/styles/components/layout.css +5 -0
- package/src/styles/components/spin.css +156 -4
- package/src/styles/index.css +1 -0
- package/src/styles/theme-dark.css +7 -0
- package/src/styles/tokens.css +13 -0
- package/src/theme/index.js +22 -0
- package/types/index.d.ts +9 -0
package/dist/djm-ui.css
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
/*!
|
|
1
|
+
/*!
|
|
2
|
+
* DJM UI v0.73.1 · 企业级中后台 Vue 3 组件库
|
|
3
|
+
* Copyright (c) 2026 上海多聚米科技有限公司. All rights reserved.
|
|
4
|
+
* MIT License · https://ui.duojumi.com · Build 2026-10-26
|
|
5
|
+
*/
|
|
2
6
|
|
|
3
7
|
/* ---- tokens.css ---- */
|
|
4
8
|
|
|
@@ -43,6 +47,19 @@
|
|
|
43
47
|
--djm-hover: #eef3f9;
|
|
44
48
|
--djm-brand-soft: #eaf3fd;
|
|
45
49
|
--djm-glass: rgba(248, 250, 253, 0.96);
|
|
50
|
+
/* 毛玻璃:默认关闭,data-djm-glass="on" 或 .djm-glass 时生效 */
|
|
51
|
+
--djm-glass-bg: rgba(255, 255, 255, 0.72);
|
|
52
|
+
/* 弹窗、抽屉这类大面积阅读面用更实的底色,表单不发灰 */
|
|
53
|
+
--djm-glass-bg-strong: rgba(255, 255, 255, 0.8);
|
|
54
|
+
--djm-glass-border: rgba(255, 255, 255, 0.72);
|
|
55
|
+
--djm-glass-highlight: rgba(255, 255, 255, 0.92);
|
|
56
|
+
--djm-glass-divider: rgba(16, 40, 70, 0.08);
|
|
57
|
+
/* 开了毛玻璃后遮罩压淡,页面颜色才透得出来 */
|
|
58
|
+
--djm-glass-mask: rgba(18, 34, 54, 0.22);
|
|
59
|
+
--djm-glass-blur: 16px;
|
|
60
|
+
/* 弹窗、抽屉用更大的模糊半径,背后的表格不会糊成条纹 */
|
|
61
|
+
--djm-glass-blur-strong: 24px;
|
|
62
|
+
--djm-glass-shadow: 0 10px 30px -12px rgba(16, 40, 70, 0.28);
|
|
46
63
|
--djm-loading-mask: rgba(255, 255, 255, 0.74);
|
|
47
64
|
--djm-border: #dde6f0;
|
|
48
65
|
--djm-border-strong: #cbd7e5;
|
|
@@ -154,6 +171,13 @@
|
|
|
154
171
|
--djm-hover: #262e38;
|
|
155
172
|
--djm-brand-soft: #1a3049;
|
|
156
173
|
--djm-glass: rgba(20, 25, 31, 0.94);
|
|
174
|
+
--djm-glass-bg: rgba(25, 31, 38, 0.72);
|
|
175
|
+
--djm-glass-bg-strong: rgba(30, 37, 46, 0.86);
|
|
176
|
+
--djm-glass-border: rgba(255, 255, 255, 0.14);
|
|
177
|
+
--djm-glass-highlight: rgba(255, 255, 255, 0.08);
|
|
178
|
+
--djm-glass-divider: rgba(255, 255, 255, 0.1);
|
|
179
|
+
--djm-glass-mask: rgba(0, 0, 0, 0.5);
|
|
180
|
+
--djm-glass-shadow: 0 12px 30px -10px rgba(0, 0, 0, 0.6);
|
|
157
181
|
--djm-loading-mask: rgba(25, 31, 38, 0.78);
|
|
158
182
|
--djm-border: #2b333d;
|
|
159
183
|
--djm-border-strong: #3c4652;
|
|
@@ -3252,12 +3276,19 @@ button.djm-breadcrumb-text {
|
|
|
3252
3276
|
|
|
3253
3277
|
/* DJM UI · 加载中 */
|
|
3254
3278
|
|
|
3279
|
+
.djm-spin {
|
|
3280
|
+
display: inline-flex;
|
|
3281
|
+
align-items: center;
|
|
3282
|
+
color: var(--djm-brand-600);
|
|
3283
|
+
}
|
|
3284
|
+
|
|
3285
|
+
/* 包裹模式:内容上方盖一层遮罩 */
|
|
3255
3286
|
.djm-spin-wrap {
|
|
3256
3287
|
position: relative;
|
|
3288
|
+
display: block;
|
|
3257
3289
|
min-height: 60px;
|
|
3258
3290
|
}
|
|
3259
3291
|
|
|
3260
|
-
/* 遮罩铺满被包裹内容,圆角跟随容器 */
|
|
3261
3292
|
.djm-spin-mask {
|
|
3262
3293
|
position: absolute;
|
|
3263
3294
|
inset: 0;
|
|
@@ -3269,13 +3300,35 @@ button.djm-breadcrumb-text {
|
|
|
3269
3300
|
gap: 8px;
|
|
3270
3301
|
border-radius: inherit;
|
|
3271
3302
|
background: var(--djm-loading-mask);
|
|
3272
|
-
backdrop-filter: blur(
|
|
3303
|
+
-webkit-backdrop-filter: blur(2px);
|
|
3304
|
+
backdrop-filter: blur(2px);
|
|
3305
|
+
}
|
|
3306
|
+
|
|
3307
|
+
/* 内联模式:指示器与文字并排,不铺底 */
|
|
3308
|
+
.djm-spin-inline .djm-spin-mask {
|
|
3309
|
+
position: static;
|
|
3310
|
+
flex-direction: row;
|
|
3311
|
+
gap: 8px;
|
|
3312
|
+
border-radius: 0;
|
|
3313
|
+
background: none;
|
|
3314
|
+
-webkit-backdrop-filter: none;
|
|
3315
|
+
backdrop-filter: none;
|
|
3316
|
+
}
|
|
3317
|
+
|
|
3318
|
+
/* 全屏模式:遮罩铺满视口 */
|
|
3319
|
+
.djm-spin-fullscreen {
|
|
3320
|
+
position: fixed;
|
|
3321
|
+
inset: 0;
|
|
3322
|
+
z-index: var(--djm-z-toast);
|
|
3323
|
+
display: flex;
|
|
3273
3324
|
}
|
|
3274
3325
|
|
|
3275
|
-
.djm-spin-
|
|
3326
|
+
.djm-spin-indicator {
|
|
3276
3327
|
display: inline-flex;
|
|
3277
3328
|
align-items: center;
|
|
3278
|
-
|
|
3329
|
+
justify-content: center;
|
|
3330
|
+
gap: 4px;
|
|
3331
|
+
color: inherit;
|
|
3279
3332
|
}
|
|
3280
3333
|
|
|
3281
3334
|
.djm-spin-tip {
|
|
@@ -3283,6 +3336,8 @@ button.djm-breadcrumb-text {
|
|
|
3283
3336
|
color: var(--djm-text-2);
|
|
3284
3337
|
}
|
|
3285
3338
|
|
|
3339
|
+
/* ---------------- 尺寸 ---------------- */
|
|
3340
|
+
|
|
3286
3341
|
.djm-spin-sm .djm-spinner {
|
|
3287
3342
|
width: 11px;
|
|
3288
3343
|
height: 11px;
|
|
@@ -3295,6 +3350,127 @@ button.djm-breadcrumb-text {
|
|
|
3295
3350
|
border-width: 2.5px;
|
|
3296
3351
|
}
|
|
3297
3352
|
|
|
3353
|
+
/* ---------------- 形态 ---------------- */
|
|
3354
|
+
|
|
3355
|
+
/* 环形:颜色跟随 color 属性 */
|
|
3356
|
+
.djm-spin-ring .djm-spinner {
|
|
3357
|
+
border-top-color: currentColor;
|
|
3358
|
+
}
|
|
3359
|
+
|
|
3360
|
+
/* 点状:三点依次弹起 */
|
|
3361
|
+
.djm-spin-dots i {
|
|
3362
|
+
width: 6px;
|
|
3363
|
+
height: 6px;
|
|
3364
|
+
border-radius: 50%;
|
|
3365
|
+
background: currentColor;
|
|
3366
|
+
animation: djm-spin-dot 1s ease-in-out infinite;
|
|
3367
|
+
}
|
|
3368
|
+
|
|
3369
|
+
.djm-spin-dots i:nth-child(2) {
|
|
3370
|
+
animation-delay: 0.15s;
|
|
3371
|
+
}
|
|
3372
|
+
|
|
3373
|
+
.djm-spin-dots i:nth-child(3) {
|
|
3374
|
+
animation-delay: 0.3s;
|
|
3375
|
+
}
|
|
3376
|
+
|
|
3377
|
+
.djm-spin-sm .djm-spin-dots i {
|
|
3378
|
+
width: 4px;
|
|
3379
|
+
height: 4px;
|
|
3380
|
+
}
|
|
3381
|
+
|
|
3382
|
+
.djm-spin-lg .djm-spin-dots i {
|
|
3383
|
+
width: 8px;
|
|
3384
|
+
height: 8px;
|
|
3385
|
+
}
|
|
3386
|
+
|
|
3387
|
+
@keyframes djm-spin-dot {
|
|
3388
|
+
0%,
|
|
3389
|
+
80%,
|
|
3390
|
+
100% {
|
|
3391
|
+
transform: scale(0.55);
|
|
3392
|
+
opacity: 0.45;
|
|
3393
|
+
}
|
|
3394
|
+
40% {
|
|
3395
|
+
transform: scale(1);
|
|
3396
|
+
opacity: 1;
|
|
3397
|
+
}
|
|
3398
|
+
}
|
|
3399
|
+
|
|
3400
|
+
/* 柱状:四根竖条错峰伸缩 */
|
|
3401
|
+
.djm-spin-bars i {
|
|
3402
|
+
width: 3px;
|
|
3403
|
+
height: 14px;
|
|
3404
|
+
border-radius: 2px;
|
|
3405
|
+
background: currentColor;
|
|
3406
|
+
animation: djm-spin-bar 1s ease-in-out infinite;
|
|
3407
|
+
}
|
|
3408
|
+
|
|
3409
|
+
.djm-spin-bars i:nth-child(2) {
|
|
3410
|
+
animation-delay: 0.12s;
|
|
3411
|
+
}
|
|
3412
|
+
|
|
3413
|
+
.djm-spin-bars i:nth-child(3) {
|
|
3414
|
+
animation-delay: 0.24s;
|
|
3415
|
+
}
|
|
3416
|
+
|
|
3417
|
+
.djm-spin-bars i:nth-child(4) {
|
|
3418
|
+
animation-delay: 0.36s;
|
|
3419
|
+
}
|
|
3420
|
+
|
|
3421
|
+
.djm-spin-sm .djm-spin-bars i {
|
|
3422
|
+
width: 2.5px;
|
|
3423
|
+
height: 10px;
|
|
3424
|
+
}
|
|
3425
|
+
|
|
3426
|
+
.djm-spin-lg .djm-spin-bars i {
|
|
3427
|
+
width: 4px;
|
|
3428
|
+
height: 18px;
|
|
3429
|
+
}
|
|
3430
|
+
|
|
3431
|
+
@keyframes djm-spin-bar {
|
|
3432
|
+
0%,
|
|
3433
|
+
100% {
|
|
3434
|
+
transform: scaleY(0.45);
|
|
3435
|
+
opacity: 0.5;
|
|
3436
|
+
}
|
|
3437
|
+
50% {
|
|
3438
|
+
transform: scaleY(1);
|
|
3439
|
+
opacity: 1;
|
|
3440
|
+
}
|
|
3441
|
+
}
|
|
3442
|
+
|
|
3443
|
+
/* 脉冲:实心圆呼吸 */
|
|
3444
|
+
.djm-spin-pulse .djm-spin-core {
|
|
3445
|
+
width: 16px;
|
|
3446
|
+
height: 16px;
|
|
3447
|
+
border-radius: 50%;
|
|
3448
|
+
background: currentColor;
|
|
3449
|
+
animation: djm-spin-pulse 1.2s ease-in-out infinite;
|
|
3450
|
+
}
|
|
3451
|
+
|
|
3452
|
+
.djm-spin-sm .djm-spin-pulse .djm-spin-core {
|
|
3453
|
+
width: 12px;
|
|
3454
|
+
height: 12px;
|
|
3455
|
+
}
|
|
3456
|
+
|
|
3457
|
+
.djm-spin-lg .djm-spin-pulse .djm-spin-core {
|
|
3458
|
+
width: 22px;
|
|
3459
|
+
height: 22px;
|
|
3460
|
+
}
|
|
3461
|
+
|
|
3462
|
+
@keyframes djm-spin-pulse {
|
|
3463
|
+
0%,
|
|
3464
|
+
100% {
|
|
3465
|
+
transform: scale(0.65);
|
|
3466
|
+
opacity: 0.45;
|
|
3467
|
+
}
|
|
3468
|
+
50% {
|
|
3469
|
+
transform: scale(1);
|
|
3470
|
+
opacity: 1;
|
|
3471
|
+
}
|
|
3472
|
+
}
|
|
3473
|
+
|
|
3298
3474
|
/* ---- components/popconfirm.css ---- */
|
|
3299
3475
|
|
|
3300
3476
|
/* DJM UI · 气泡确认 */
|
|
@@ -5971,6 +6147,52 @@ input[type="date"] {
|
|
|
5971
6147
|
background: var(--djm-amber);
|
|
5972
6148
|
}
|
|
5973
6149
|
|
|
6150
|
+
/* 环形进度:SVG 逆时针起点在顶部,进度用 dashoffset 控制 */
|
|
6151
|
+
.djm-progress-circle {
|
|
6152
|
+
position: relative;
|
|
6153
|
+
display: inline-flex;
|
|
6154
|
+
align-items: center;
|
|
6155
|
+
justify-content: center;
|
|
6156
|
+
}
|
|
6157
|
+
|
|
6158
|
+
.djm-progress-circle svg {
|
|
6159
|
+
width: 100%;
|
|
6160
|
+
height: 100%;
|
|
6161
|
+
transform: rotate(-90deg);
|
|
6162
|
+
}
|
|
6163
|
+
|
|
6164
|
+
.djm-progress-circle-track {
|
|
6165
|
+
stroke: var(--djm-border);
|
|
6166
|
+
}
|
|
6167
|
+
|
|
6168
|
+
.djm-progress-circle-bar {
|
|
6169
|
+
stroke: var(--djm-brand-600);
|
|
6170
|
+
transition: stroke-dashoffset 0.3s;
|
|
6171
|
+
}
|
|
6172
|
+
|
|
6173
|
+
.djm-progress-circle.djm-is-success .djm-progress-circle-bar {
|
|
6174
|
+
stroke: var(--djm-green-strong);
|
|
6175
|
+
}
|
|
6176
|
+
|
|
6177
|
+
.djm-progress-circle.djm-is-error .djm-progress-circle-bar {
|
|
6178
|
+
stroke: var(--djm-red-strong);
|
|
6179
|
+
}
|
|
6180
|
+
|
|
6181
|
+
.djm-progress-circle.djm-is-warning .djm-progress-circle-bar {
|
|
6182
|
+
stroke: var(--djm-amber);
|
|
6183
|
+
}
|
|
6184
|
+
|
|
6185
|
+
.djm-progress-circle-label {
|
|
6186
|
+
position: absolute;
|
|
6187
|
+
inset: 0;
|
|
6188
|
+
display: flex;
|
|
6189
|
+
align-items: center;
|
|
6190
|
+
justify-content: center;
|
|
6191
|
+
color: var(--djm-text);
|
|
6192
|
+
font-weight: 600;
|
|
6193
|
+
font-variant-numeric: tabular-nums;
|
|
6194
|
+
}
|
|
6195
|
+
|
|
5974
6196
|
/* 骨架屏组件:头像 + 正文的行结构 */
|
|
5975
6197
|
.djm-skeleton-block {
|
|
5976
6198
|
display: flex;
|
|
@@ -12550,3 +12772,96 @@ input[type="date"] {
|
|
|
12550
12772
|
color: var(--djm-green);
|
|
12551
12773
|
font-size: 10px;
|
|
12552
12774
|
}
|
|
12775
|
+
|
|
12776
|
+
/* ---- components/glass.css ---- */
|
|
12777
|
+
|
|
12778
|
+
/* DJM UI · 毛玻璃 */
|
|
12779
|
+
|
|
12780
|
+
/* 工具类:直接加在任意容器上 */
|
|
12781
|
+
.djm-glass {
|
|
12782
|
+
background: var(--djm-glass-bg);
|
|
12783
|
+
border: 1px solid var(--djm-glass-border);
|
|
12784
|
+
box-shadow: var(--djm-glass-shadow);
|
|
12785
|
+
-webkit-backdrop-filter: blur(var(--djm-glass-blur)) saturate(1.4);
|
|
12786
|
+
backdrop-filter: blur(var(--djm-glass-blur)) saturate(1.4);
|
|
12787
|
+
}
|
|
12788
|
+
|
|
12789
|
+
/* 模糊半径两档 */
|
|
12790
|
+
.djm-glass-strong {
|
|
12791
|
+
--djm-glass-blur: 26px;
|
|
12792
|
+
}
|
|
12793
|
+
|
|
12794
|
+
.djm-glass-soft {
|
|
12795
|
+
--djm-glass-blur: 8px;
|
|
12796
|
+
}
|
|
12797
|
+
|
|
12798
|
+
/* 弹窗 / 抽屉:面积大、要读表单,底色更实,并加一道顶边高光 */
|
|
12799
|
+
.djm-modal.djm-is-glass,
|
|
12800
|
+
.djm-drawer.djm-is-glass,
|
|
12801
|
+
:root[data-djm-glass='on'] .djm-modal,
|
|
12802
|
+
:root[data-djm-glass='on'] .djm-drawer {
|
|
12803
|
+
background: var(--djm-glass-bg-strong);
|
|
12804
|
+
border: 1px solid var(--djm-glass-border);
|
|
12805
|
+
box-shadow: var(--djm-glass-shadow), inset 0 1px 0 var(--djm-glass-highlight);
|
|
12806
|
+
-webkit-backdrop-filter: blur(var(--djm-glass-blur-strong)) saturate(1.4);
|
|
12807
|
+
backdrop-filter: blur(var(--djm-glass-blur-strong)) saturate(1.4);
|
|
12808
|
+
}
|
|
12809
|
+
|
|
12810
|
+
/* 浮层与面板:面积小,透一点更好看 */
|
|
12811
|
+
:root[data-djm-glass='on'] .djm-popover-panel,
|
|
12812
|
+
:root[data-djm-glass='on'] .djm-dropdown-menu,
|
|
12813
|
+
:root[data-djm-glass='on'] .djm-panel,
|
|
12814
|
+
:root[data-djm-glass='on'] .djm-card {
|
|
12815
|
+
background: var(--djm-glass-bg);
|
|
12816
|
+
border-color: var(--djm-glass-border);
|
|
12817
|
+
box-shadow: var(--djm-glass-shadow), inset 0 1px 0 var(--djm-glass-highlight);
|
|
12818
|
+
-webkit-backdrop-filter: blur(var(--djm-glass-blur)) saturate(1.4);
|
|
12819
|
+
backdrop-filter: blur(var(--djm-glass-blur)) saturate(1.4);
|
|
12820
|
+
}
|
|
12821
|
+
|
|
12822
|
+
/* 玻璃容器里的头尾不再另起底色,和主体连成一片 */
|
|
12823
|
+
.djm-modal.djm-is-glass .djm-modal-head,
|
|
12824
|
+
:root[data-djm-glass='on'] .djm-modal .djm-modal-head,
|
|
12825
|
+
.djm-drawer.djm-is-glass .djm-drawer-head,
|
|
12826
|
+
:root[data-djm-glass='on'] .djm-drawer .djm-drawer-head {
|
|
12827
|
+
border-bottom-color: var(--djm-glass-divider);
|
|
12828
|
+
}
|
|
12829
|
+
|
|
12830
|
+
.djm-modal.djm-is-glass .djm-modal-foot,
|
|
12831
|
+
:root[data-djm-glass='on'] .djm-modal .djm-modal-foot,
|
|
12832
|
+
.djm-drawer.djm-is-glass .djm-drawer-foot,
|
|
12833
|
+
:root[data-djm-glass='on'] .djm-drawer .djm-drawer-foot {
|
|
12834
|
+
background: transparent;
|
|
12835
|
+
border-top-color: var(--djm-glass-divider);
|
|
12836
|
+
}
|
|
12837
|
+
|
|
12838
|
+
/* 遮罩压淡,页面颜色透上来,玻璃才像玻璃而不是灰板 */
|
|
12839
|
+
:root[data-djm-glass='on'] .djm-modal-mask,
|
|
12840
|
+
:root[data-djm-glass='on'] .djm-drawer-mask {
|
|
12841
|
+
background: var(--djm-glass-mask);
|
|
12842
|
+
}
|
|
12843
|
+
|
|
12844
|
+
/* 浏览器不支持 backdrop-filter 时退回实心底,保证内容可读 */
|
|
12845
|
+
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
12846
|
+
.djm-glass,
|
|
12847
|
+
.djm-modal.djm-is-glass,
|
|
12848
|
+
.djm-drawer.djm-is-glass,
|
|
12849
|
+
:root[data-djm-glass='on'] .djm-modal,
|
|
12850
|
+
:root[data-djm-glass='on'] .djm-drawer,
|
|
12851
|
+
:root[data-djm-glass='on'] .djm-popover-panel,
|
|
12852
|
+
:root[data-djm-glass='on'] .djm-dropdown-menu,
|
|
12853
|
+
:root[data-djm-glass='on'] .djm-panel,
|
|
12854
|
+
:root[data-djm-glass='on'] .djm-card {
|
|
12855
|
+
background: var(--djm-surface);
|
|
12856
|
+
}
|
|
12857
|
+
|
|
12858
|
+
:root[data-djm-glass='on'] .djm-modal-mask,
|
|
12859
|
+
:root[data-djm-glass='on'] .djm-drawer-mask {
|
|
12860
|
+
background: var(--djm-mask);
|
|
12861
|
+
}
|
|
12862
|
+
|
|
12863
|
+
:root[data-djm-glass='on'] .djm-modal .djm-modal-foot,
|
|
12864
|
+
.djm-modal.djm-is-glass .djm-modal-foot {
|
|
12865
|
+
background: var(--djm-surface-2);
|
|
12866
|
+
}
|
|
12867
|
+
}
|