@keenmate/pure-admin-core 2.5.0 → 2.7.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.
Files changed (32) hide show
  1. package/README.md +25 -14
  2. package/dist/css/main.css +379 -297
  3. package/package.json +1 -1
  4. package/src/scss/_base-css-variables.scss +157 -32
  5. package/src/scss/core-components/_alerts.scss +2 -2
  6. package/src/scss/core-components/_base.scss +19 -2
  7. package/src/scss/core-components/_buttons.scss +12 -8
  8. package/src/scss/core-components/_callouts.scss +1 -1
  9. package/src/scss/core-components/_cards.scss +4 -4
  10. package/src/scss/core-components/_checkbox-lists.scss +2 -2
  11. package/src/scss/core-components/_comparison.scss +7 -4
  12. package/src/scss/core-components/_data-display.scss +24 -15
  13. package/src/scss/core-components/_data-viz.scss +140 -132
  14. package/src/scss/core-components/_file-selector.scss +34 -34
  15. package/src/scss/core-components/_lists.scss +4 -4
  16. package/src/scss/core-components/_logic-tree.scss +2 -2
  17. package/src/scss/core-components/_modals.scss +69 -0
  18. package/src/scss/core-components/_notifications.scss +17 -17
  19. package/src/scss/core-components/_popconfirm.scss +1 -1
  20. package/src/scss/core-components/_statistics.scss +40 -37
  21. package/src/scss/core-components/_tabs.scss +12 -12
  22. package/src/scss/core-components/_timeline.scss +30 -30
  23. package/src/scss/core-components/badges/_composite-badge-variants.scss +7 -7
  24. package/src/scss/core-components/badges/_composite-badge.scss +1 -1
  25. package/src/scss/core-components/badges/_labels.scss +6 -6
  26. package/src/scss/core-components/forms/_input-wrapper.scss +1 -1
  27. package/src/scss/core-components/forms/_query-editor.scss +10 -10
  28. package/src/scss/core-components/layout/_sidebar-states.scss +1 -0
  29. package/src/scss/core-components/layout/_sidebar.scss +1 -0
  30. package/src/scss/variables/_base.scss +15 -3
  31. package/src/scss/variables/_colors.scss +1 -0
  32. package/src/scss/variables/_components.scss +26 -14
@@ -11,7 +11,7 @@
11
11
  .pa-progress {
12
12
  width: 100%;
13
13
  height: $progress-height;
14
- background: $progress-bg;
14
+ background: var(--pa-surface-track);
15
15
  border-radius: var(--pa-border-radius);
16
16
  overflow: hidden;
17
17
  position: relative;
@@ -20,7 +20,7 @@
20
20
  &__fill {
21
21
  height: 100%;
22
22
  width: var(--value, 0%);
23
- background: $accent-color;
23
+ background: var(--pa-accent);
24
24
  border-radius: inherit;
25
25
  transition: width $transition-medium $easing-smooth;
26
26
  }
@@ -53,10 +53,10 @@
53
53
  }
54
54
 
55
55
  // Color variants
56
- &--success > .pa-progress__fill { background: $success-bg; }
57
- &--warning > .pa-progress__fill { background: $warning-bg; }
58
- &--danger > .pa-progress__fill { background: $danger-bg; }
59
- &--info > .pa-progress__fill { background: $info-bg; }
56
+ &--success > .pa-progress__fill { background: var(--pa-success); }
57
+ &--warning > .pa-progress__fill { background: var(--pa-warning); }
58
+ &--danger > .pa-progress__fill { background: var(--pa-danger); }
59
+ &--info > .pa-progress__fill { background: var(--pa-info); }
60
60
 
61
61
  // Rounded (pill shape)
62
62
  &--rounded {
@@ -108,7 +108,7 @@
108
108
  height: $stacked-bar-height;
109
109
  border-radius: var(--pa-border-radius);
110
110
  overflow: hidden;
111
- background: $progress-bg;
111
+ background: var(--pa-surface-track);
112
112
 
113
113
  &__segment {
114
114
  height: 100%;
@@ -116,13 +116,13 @@
116
116
  transition: width $transition-medium $easing-smooth;
117
117
 
118
118
  // Default color
119
- background: $accent-color;
119
+ background: var(--pa-accent);
120
120
 
121
- &--success { background: $success-bg; }
122
- &--warning { background: $warning-bg; }
123
- &--danger { background: $danger-bg; }
124
- &--info { background: $info-bg; }
125
- &--secondary { background: $btn-secondary-bg; }
121
+ &--success { background: var(--pa-success); }
122
+ &--warning { background: var(--pa-warning); }
123
+ &--danger { background: var(--pa-danger); }
124
+ &--info { background: var(--pa-info); }
125
+ &--secondary { background: var(--pa-btn-secondary-bg); }
126
126
  }
127
127
 
128
128
  // Legend
@@ -147,12 +147,12 @@
147
147
  border-radius: var(--pa-border-radius-sm);
148
148
  flex-shrink: 0;
149
149
 
150
- &--primary { background: $accent-color; }
151
- &--success { background: $success-bg; }
152
- &--warning { background: $warning-bg; }
153
- &--danger { background: $danger-bg; }
154
- &--info { background: $info-bg; }
155
- &--secondary { background: $btn-secondary-bg; }
150
+ &--primary { background: var(--pa-accent); }
151
+ &--success { background: var(--pa-success); }
152
+ &--warning { background: var(--pa-warning); }
153
+ &--danger { background: var(--pa-danger); }
154
+ &--info { background: var(--pa-info); }
155
+ &--secondary { background: var(--pa-btn-secondary-bg); }
156
156
  }
157
157
 
158
158
  // Size variants
@@ -173,8 +173,8 @@
173
173
  height: $progress-ring-size;
174
174
  border-radius: 50%;
175
175
  background: conic-gradient(
176
- $accent-color calc(var(--value, 0) * 3.6deg),
177
- $progress-ring-track-color 0deg
176
+ var(--pa-accent) calc(var(--value, 0) * 3.6deg),
177
+ var(--pa-surface-track) 0deg
178
178
  );
179
179
  display: flex;
180
180
  align-items: center;
@@ -185,7 +185,7 @@
185
185
  width: 70%;
186
186
  height: 70%;
187
187
  border-radius: 50%;
188
- background: $card-bg;
188
+ background: var(--pa-card-bg);
189
189
  display: flex;
190
190
  flex-direction: column;
191
191
  align-items: center;
@@ -235,29 +235,29 @@
235
235
  // Color variants
236
236
  &--success {
237
237
  background: conic-gradient(
238
- $success-bg calc(var(--value, 0) * 3.6deg),
239
- $progress-ring-track-color 0deg
238
+ var(--pa-success) calc(var(--value, 0) * 3.6deg),
239
+ var(--pa-surface-track) 0deg
240
240
  );
241
241
  }
242
242
 
243
243
  &--warning {
244
244
  background: conic-gradient(
245
- $warning-bg calc(var(--value, 0) * 3.6deg),
246
- $progress-ring-track-color 0deg
245
+ var(--pa-warning) calc(var(--value, 0) * 3.6deg),
246
+ var(--pa-surface-track) 0deg
247
247
  );
248
248
  }
249
249
 
250
250
  &--danger {
251
251
  background: conic-gradient(
252
- $danger-bg calc(var(--value, 0) * 3.6deg),
253
- $progress-ring-track-color 0deg
252
+ var(--pa-danger) calc(var(--value, 0) * 3.6deg),
253
+ var(--pa-surface-track) 0deg
254
254
  );
255
255
  }
256
256
 
257
257
  &--info {
258
258
  background: conic-gradient(
259
- $info-bg calc(var(--value, 0) * 3.6deg),
260
- $progress-ring-track-color 0deg
259
+ var(--pa-info) calc(var(--value, 0) * 3.6deg),
260
+ var(--pa-surface-track) 0deg
261
261
  );
262
262
  }
263
263
  }
@@ -268,32 +268,59 @@
268
268
  // ============================================================================
269
269
 
270
270
  .pa-gauge {
271
- width: $gauge-size;
272
- height: calc(#{$gauge-size} / 2);
273
- border-radius: #{$gauge-size} #{$gauge-size} 0 0;
274
- overflow: hidden;
275
- background: conic-gradient(
276
- from 0.75turn,
277
- $accent-color calc(var(--value, 0) * 1.8deg),
278
- $gauge-track-color 0deg
279
- );
271
+ // Single token controls the active fill; colour variants override just this.
272
+ --pa-gauge-fill: var(--pa-accent);
273
+ // Total width of the gauge. Height auto-derives at half the width (the
274
+ // gauge is a top semi-circle, so aspect ratio is fixed 2:1). Override
275
+ // per instance via style="--pa-gauge-size: 16rem".
276
+ --pa-gauge-size: #{$gauge-size};
277
+
278
+ width: var(--pa-gauge-size);
279
+ height: calc(var(--pa-gauge-size) / 2);
280
+ // Reserve room for the absolutely-positioned __min / __max labels that
281
+ // sit below the baseline. Without this, parents see only the half-circle
282
+ // height (gauge-size / 2) and the labels collide with whatever's below.
283
+ margin-bottom: $spacing-base;
280
284
  position: relative;
281
285
  flex-shrink: 0;
282
286
 
283
- // Inner mask (creates the donut shape)
287
+ // Ring is drawn on a pseudo so the mask carves out a true donut hole
288
+ // (transparent center) without affecting child content. The previous
289
+ // technique overlaid an opaque inner element with --pa-card-bg to fake
290
+ // the hole, which only worked when the gauge sat on a --pa-card-bg
291
+ // surface; on any other background the "hole" showed as a coloured fill.
292
+ &::before {
293
+ content: '';
294
+ position: absolute;
295
+ inset: 0;
296
+ border-radius: var(--pa-gauge-size) var(--pa-gauge-size) 0 0;
297
+ // Conic and mask must share the same centre (50% 100% — bottom-centre)
298
+ // so the colour transitions and the ring boundaries are concentric.
299
+ // Without "at 50% 100%" on the conic, its centre defaults to the
300
+ // pseudo's geometric centre (50% 50%), pushing the inner edge upward
301
+ // and producing wedge-thicker bottom corners.
302
+ background: conic-gradient(
303
+ from 0.75turn at 50% 100%,
304
+ var(--pa-gauge-fill) calc(var(--value, 0) * 1.8deg),
305
+ var(--pa-surface-track) 0deg
306
+ );
307
+ -webkit-mask-image: radial-gradient(circle farthest-side at 50% 100%, transparent 0 70%, #000 70%);
308
+ mask-image: radial-gradient(circle farthest-side at 50% 100%, transparent 0 70%, #000 70%);
309
+ }
310
+
311
+ // Content container — holds the value, anchored at the baseline of the
312
+ // donut hole so it visually rests on the arc rather than floating in the
313
+ // middle. The gauge label moved out to the row below (alongside __min /
314
+ // __max), so the value gets the whole interior to itself.
284
315
  &__inner {
285
316
  position: absolute;
286
317
  bottom: 0;
287
318
  left: 15%;
288
319
  right: 15%;
289
320
  height: 70%;
290
- border-radius: #{$gauge-size} #{$gauge-size} 0 0;
291
- background: $card-bg;
292
321
  display: flex;
293
- flex-direction: column;
294
- align-items: center;
295
- justify-content: flex-end;
296
- padding-bottom: $spacing-xs;
322
+ align-items: flex-end;
323
+ justify-content: center;
297
324
  }
298
325
 
299
326
  &__value {
@@ -303,68 +330,49 @@
303
330
  color: var(--pa-text-color-1);
304
331
  }
305
332
 
306
- &__label {
307
- font-size: $gauge-label-font-size;
308
- color: var(--pa-text-color-2);
309
- margin-top: $spacing-xs;
310
- }
311
-
312
- // Min/max labels at arc endpoints
333
+ // Axis row — gauge label (CPU / Memory / Temp / …) plus min/max
334
+ // endpoints all sit on one row just below the baseline. A shared
335
+ // line-height in rem (rather than the unitless 1) gives all three the
336
+ // same line-box height, so their text baselines align even though the
337
+ // gauge label uses a larger font than the min/max endpoints.
338
+ &__label,
313
339
  &__min,
314
340
  &__max {
315
341
  position: absolute;
316
- bottom: 0;
342
+ top: 100%;
343
+ margin-top: $spacing-xs;
317
344
  font-size: $font-size-2xs;
345
+ line-height: 1.2rem;
318
346
  color: var(--pa-text-color-2);
347
+ white-space: nowrap;
319
348
  }
320
349
 
321
- &__min { left: 0; }
322
- &__max { right: 0; }
323
-
324
- // Color variants
325
- &--success {
326
- background: conic-gradient(
327
- from 0.75turn,
328
- $success-bg calc(var(--value, 0) * 1.8deg),
329
- $gauge-track-color 0deg
330
- );
331
- }
332
-
333
- &--warning {
334
- background: conic-gradient(
335
- from 0.75turn,
336
- $warning-bg calc(var(--value, 0) * 1.8deg),
337
- $gauge-track-color 0deg
338
- );
350
+ &__label {
351
+ left: 50%;
352
+ transform: translateX(-50%);
353
+ font-size: $gauge-label-font-size;
339
354
  }
340
355
 
341
- &--danger {
342
- background: conic-gradient(
343
- from 0.75turn,
344
- $danger-bg calc(var(--value, 0) * 1.8deg),
345
- $gauge-track-color 0deg
346
- );
347
- }
356
+ &__min { left: 0; }
357
+ &__max { right: 0; }
348
358
 
349
- &--info {
350
- background: conic-gradient(
351
- from 0.75turn,
352
- $info-bg calc(var(--value, 0) * 1.8deg),
353
- $gauge-track-color 0deg
354
- );
355
- }
359
+ // Colour variants override only the fill token.
360
+ &--success { --pa-gauge-fill: var(--pa-success); }
361
+ &--warning { --pa-gauge-fill: var(--pa-warning); }
362
+ &--danger { --pa-gauge-fill: var(--pa-danger); }
363
+ &--info { --pa-gauge-fill: var(--pa-info); }
356
364
 
357
- // Multi-zone gauge (green/yellow/red)
358
- &--zones {
365
+ // Multi-zone gauge replaces the entire gradient on the pseudo.
366
+ &--zones::before {
359
367
  background: conic-gradient(
360
- from 0.75turn,
361
- $success-bg 0deg,
362
- $success-bg 90deg,
363
- $warning-bg 90deg,
364
- $warning-bg 135deg,
365
- $danger-bg 135deg,
366
- $danger-bg 180deg,
367
- $gauge-track-color 180deg
368
+ from 0.75turn at 50% 100%,
369
+ var(--pa-success) 0deg,
370
+ var(--pa-success) 90deg,
371
+ var(--pa-warning) 90deg,
372
+ var(--pa-warning) 135deg,
373
+ var(--pa-danger) 135deg,
374
+ var(--pa-danger) 180deg,
375
+ var(--pa-surface-track) 180deg
368
376
  );
369
377
  }
370
378
  }
@@ -390,7 +398,7 @@
390
398
  &__track {
391
399
  width: 100%;
392
400
  height: $data-bar-height;
393
- background: $data-bar-bg;
401
+ background: var(--pa-surface-track);
394
402
  border-radius: var(--pa-border-radius-sm);
395
403
  overflow: hidden;
396
404
  }
@@ -398,20 +406,20 @@
398
406
  &__fill {
399
407
  height: 100%;
400
408
  width: var(--value, 0%);
401
- background: $accent-color;
409
+ background: var(--pa-accent);
402
410
  border-radius: inherit;
403
411
  transition: width $transition-medium $easing-smooth;
404
412
  }
405
413
 
406
414
  // Color variants
407
- &--success .pa-data-bar__fill { background: $success-bg; }
408
- &--warning .pa-data-bar__fill { background: $warning-bg; }
409
- &--danger .pa-data-bar__fill { background: $danger-bg; }
410
- &--info .pa-data-bar__fill { background: $info-bg; }
415
+ &--success .pa-data-bar__fill { background: var(--pa-success); }
416
+ &--warning .pa-data-bar__fill { background: var(--pa-warning); }
417
+ &--danger .pa-data-bar__fill { background: var(--pa-danger); }
418
+ &--info .pa-data-bar__fill { background: var(--pa-info); }
411
419
 
412
420
  // Negative variant (red, right-aligned)
413
421
  &--negative .pa-data-bar__fill {
414
- background: $danger-bg;
422
+ background: var(--pa-danger);
415
423
  margin-inline-start: auto;
416
424
  }
417
425
  }
@@ -429,27 +437,27 @@
429
437
 
430
438
  &__cell {
431
439
  border-radius: var(--pa-border-radius-sm);
432
- background: $progress-bg;
440
+ background: var(--pa-surface-track);
433
441
 
434
- &[data-level="1"] { background: rgba($accent-color, 0.2); }
435
- &[data-level="2"] { background: rgba($accent-color, 0.4); }
436
- &[data-level="3"] { background: rgba($accent-color, 0.65); }
437
- &[data-level="4"] { background: $accent-color; }
442
+ &[data-level="1"] { background: color-mix(in srgb, var(--pa-accent) 20%, transparent); }
443
+ &[data-level="2"] { background: color-mix(in srgb, var(--pa-accent) 40%, transparent); }
444
+ &[data-level="3"] { background: color-mix(in srgb, var(--pa-accent) 65%, transparent); }
445
+ &[data-level="4"] { background: var(--pa-accent); }
438
446
  }
439
447
 
440
448
  // Color variants
441
449
  &--success .pa-heatmap__cell {
442
- &[data-level="1"] { background: rgba($success-bg, 0.2); }
443
- &[data-level="2"] { background: rgba($success-bg, 0.4); }
444
- &[data-level="3"] { background: rgba($success-bg, 0.65); }
445
- &[data-level="4"] { background: $success-bg; }
450
+ &[data-level="1"] { background: color-mix(in srgb, var(--pa-success) 20%, transparent); }
451
+ &[data-level="2"] { background: color-mix(in srgb, var(--pa-success) 40%, transparent); }
452
+ &[data-level="3"] { background: color-mix(in srgb, var(--pa-success) 65%, transparent); }
453
+ &[data-level="4"] { background: var(--pa-success); }
446
454
  }
447
455
 
448
456
  &--danger .pa-heatmap__cell {
449
- &[data-level="1"] { background: rgba($danger-bg, 0.2); }
450
- &[data-level="2"] { background: rgba($danger-bg, 0.4); }
451
- &[data-level="3"] { background: rgba($danger-bg, 0.65); }
452
- &[data-level="4"] { background: $danger-bg; }
457
+ &[data-level="1"] { background: color-mix(in srgb, var(--pa-danger) 20%, transparent); }
458
+ &[data-level="2"] { background: color-mix(in srgb, var(--pa-danger) 40%, transparent); }
459
+ &[data-level="3"] { background: color-mix(in srgb, var(--pa-danger) 65%, transparent); }
460
+ &[data-level="4"] { background: var(--pa-danger); }
453
461
  }
454
462
 
455
463
  // Legend
@@ -466,12 +474,12 @@
466
474
  width: $heatmap-cell-size;
467
475
  height: $heatmap-cell-size;
468
476
  border-radius: var(--pa-border-radius-sm);
469
- background: $progress-bg;
477
+ background: var(--pa-surface-track);
470
478
 
471
- &[data-level="1"] { background: rgba($accent-color, 0.2); }
472
- &[data-level="2"] { background: rgba($accent-color, 0.4); }
473
- &[data-level="3"] { background: rgba($accent-color, 0.65); }
474
- &[data-level="4"] { background: $accent-color; }
479
+ &[data-level="1"] { background: color-mix(in srgb, var(--pa-accent) 20%, transparent); }
480
+ &[data-level="2"] { background: color-mix(in srgb, var(--pa-accent) 40%, transparent); }
481
+ &[data-level="3"] { background: color-mix(in srgb, var(--pa-accent) 65%, transparent); }
482
+ &[data-level="4"] { background: var(--pa-accent); }
475
483
  }
476
484
 
477
485
  // Compact variant (smaller cells, for inline use)
@@ -500,17 +508,17 @@
500
508
  &__bar {
501
509
  width: $sparkline-bar-width;
502
510
  height: var(--value, 50%);
503
- background: $accent-color;
511
+ background: var(--pa-accent);
504
512
  border-radius: var(--pa-border-radius-sm) var(--pa-border-radius-sm) 0 0;
505
513
  transition: height $transition-medium $easing-smooth;
506
514
  min-height: 1px;
507
515
  }
508
516
 
509
517
  // Color variants
510
- &--success .pa-sparkline__bar { background: $success-bg; }
511
- &--warning .pa-sparkline__bar { background: $warning-bg; }
512
- &--danger .pa-sparkline__bar { background: $danger-bg; }
513
- &--info .pa-sparkline__bar { background: $info-bg; }
518
+ &--success .pa-sparkline__bar { background: var(--pa-success); }
519
+ &--warning .pa-sparkline__bar { background: var(--pa-warning); }
520
+ &--danger .pa-sparkline__bar { background: var(--pa-danger); }
521
+ &--info .pa-sparkline__bar { background: var(--pa-info); }
514
522
 
515
523
  // Size variants
516
524
  &--sm {
@@ -567,7 +575,7 @@
567
575
  &__bar {
568
576
  width: 100%;
569
577
  height: $bar-list-bar-height;
570
- background: $bar-list-bar-bg;
578
+ background: var(--pa-surface-track);
571
579
  border-radius: var(--pa-border-radius-sm);
572
580
  overflow: hidden;
573
581
 
@@ -576,17 +584,17 @@
576
584
  display: block;
577
585
  height: 100%;
578
586
  width: var(--value, 0%);
579
- background: $accent-color;
587
+ background: var(--pa-accent);
580
588
  border-radius: inherit;
581
589
  transition: width $transition-medium $easing-smooth;
582
590
  }
583
591
  }
584
592
 
585
593
  // Color variants
586
- &--success .pa-bar-list__bar::after { background: $success-bg; }
587
- &--warning .pa-bar-list__bar::after { background: $warning-bg; }
588
- &--danger .pa-bar-list__bar::after { background: $danger-bg; }
589
- &--info .pa-bar-list__bar::after { background: $info-bg; }
594
+ &--success .pa-bar-list__bar::after { background: var(--pa-success); }
595
+ &--warning .pa-bar-list__bar::after { background: var(--pa-warning); }
596
+ &--danger .pa-bar-list__bar::after { background: var(--pa-danger); }
597
+ &--info .pa-bar-list__bar::after { background: var(--pa-info); }
590
598
 
591
599
  // Compact modifier (tighter spacing)
592
600
  &--compact {