@keenmate/pure-admin-core 1.0.0-rc03 → 1.0.0-rc05

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.
@@ -7,8 +7,8 @@
7
7
  // Cards
8
8
  .pa-card {
9
9
  background: var(--pa-card-bg);
10
- border: $border-width-base solid var(--pa-border-color);
11
- border-radius: $border-radius-lg;
10
+ border: $card-border-width solid var(--pa-border-color);
11
+ border-radius: $card-border-radius;
12
12
  margin-bottom: $spacing-base;
13
13
  box-shadow: $shadow-sm;
14
14
  transition: box-shadow $transition-fast $easing-snappy;
@@ -22,8 +22,8 @@
22
22
  &__header {
23
23
  padding: $card-header-padding-v $card-header-padding-h;
24
24
  min-height: $card-header-min-height;
25
- border-top-left-radius: $border-radius-lg;
26
- border-top-right-radius: $border-radius-lg;
25
+ border-top-left-radius: $card-border-radius;
26
+ border-top-right-radius: $card-border-radius;
27
27
  border-bottom: $border-width-base solid var(--pa-border-color);
28
28
  background: var(--pa-card-header-bg);
29
29
  display: flex;
@@ -60,6 +60,12 @@
60
60
  color: var(--pa-text-primary);
61
61
  font-size: $font-size-base;
62
62
  }
63
+
64
+ // Buttons in card headers - negative margin to prevent header height growth
65
+ .pa-btn {
66
+ margin-top: -0.25rem;
67
+ margin-bottom: -0.25rem;
68
+ }
63
69
  }
64
70
 
65
71
  &__title {
@@ -241,6 +247,36 @@
241
247
  display: block;
242
248
  }
243
249
  }
250
+
251
+ // Inline tabs in header (for side-by-side card alignment)
252
+ &__tabs--inline {
253
+ display: flex;
254
+ gap: $spacing-xs;
255
+ margin: -$card-header-padding-v 0; // Negative margin to fill header height
256
+ border-bottom: none;
257
+ background: none;
258
+
259
+ .pa-card__tab {
260
+ padding: $card-tab-inline-padding-v $card-tab-inline-padding-h;
261
+ border: none;
262
+ border-radius: $border-radius;
263
+ font-size: $font-size-sm;
264
+ background: transparent;
265
+ color: var(--pa-text-secondary);
266
+ cursor: pointer;
267
+ transition: all $transition-fast $easing-snappy;
268
+
269
+ &:hover {
270
+ background-color: rgba($accent-color, $card-tab-hover-opacity);
271
+ color: var(--pa-text-primary);
272
+ }
273
+
274
+ &--active {
275
+ background: var(--pa-accent);
276
+ color: var(--pa-btn-primary-text);
277
+ }
278
+ }
279
+ }
244
280
  }
245
281
 
246
282
  // Clickable cards (anchor-wrapped)
@@ -88,7 +88,7 @@
88
88
  &__header {
89
89
  padding: $spacing-lg;
90
90
  background-color: var(--pa-header-bg);
91
- border-bottom: 1px solid var(--pa-text-primary);
91
+ border-bottom: 1px solid var(--pa-border-color);
92
92
  display: flex;
93
93
  align-items: flex-start;
94
94
  gap: $spacing-base;
@@ -115,7 +115,7 @@
115
115
 
116
116
  &__avatar-icon {
117
117
  font-size: $font-size-4xl;
118
- color: $accent-color;
118
+ color: var(--pa-accent);
119
119
  }
120
120
 
121
121
  &__info {
@@ -186,7 +186,7 @@
186
186
 
187
187
  &__body {
188
188
  flex: 1;
189
- padding: $spacing-lg;
189
+ padding: $spacing-lg 0; // Vertical only - items handle horizontal
190
190
  display: flex;
191
191
  flex-direction: column;
192
192
  gap: $profile-section-gap;
@@ -231,7 +231,10 @@
231
231
  &__nav-icon {
232
232
  font-size: $font-size-base;
233
233
  width: $sidebar-icon-size;
234
- text-align: center;
234
+ height: $sidebar-icon-size;
235
+ display: flex;
236
+ align-items: center;
237
+ justify-content: center;
235
238
  }
236
239
 
237
240
  &__actions {
@@ -239,11 +242,23 @@
239
242
  flex-direction: column;
240
243
  gap: $spacing-md;
241
244
  margin-top: auto;
245
+ padding: 0 $profile-panel-content-padding;
246
+ }
247
+
248
+ // Fixed footer - always visible at bottom, content scrolls above
249
+ &__footer {
250
+ flex-shrink: 0;
251
+ padding: $spacing-lg; // Matches header padding
252
+ border-top: $border-width-base solid var(--pa-border-color);
253
+ background-color: var(--pa-card-bg);
254
+ display: flex;
255
+ flex-direction: column;
256
+ gap: $spacing-md;
242
257
  }
243
258
 
244
259
  // Tabs section
245
260
  &__tabs {
246
- padding: 0 $spacing-lg;
261
+ padding: 0 $profile-panel-content-padding;
247
262
  border-bottom: $border-width-base solid var(--pa-border-color);
248
263
  background-color: var(--pa-header-bg);
249
264
 
@@ -258,7 +273,7 @@
258
273
 
259
274
  &:hover {
260
275
  color: var(--pa-header-text);
261
- background-color: rgba(255, 255, 255, 0.1);
276
+ background-color: var(--pa-accent-light);
262
277
  }
263
278
 
264
279
  &--active {
@@ -270,10 +285,6 @@
270
285
 
271
286
  // Favorites section
272
287
  &__favorites {
273
- display: flex;
274
- flex-direction: column;
275
- gap: $spacing-sm;
276
-
277
288
  ul {
278
289
  list-style: none;
279
290
  margin: 0;
@@ -312,7 +323,10 @@
312
323
  &__favorite-icon {
313
324
  font-size: $font-size-base;
314
325
  width: $sidebar-icon-size;
315
- text-align: center;
326
+ height: $sidebar-icon-size;
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
316
330
  }
317
331
 
318
332
  &__favorite-label {
@@ -325,7 +339,7 @@
325
339
  margin-left: auto;
326
340
  background: none;
327
341
  border: none;
328
- padding: $spacing-sm;
342
+ padding: $spacing-xs;
329
343
  color: var(--pa-text-secondary);
330
344
  cursor: pointer;
331
345
  border-radius: $border-radius;
@@ -348,7 +362,7 @@
348
362
 
349
363
  &__favorites-add {
350
364
  margin-top: auto;
351
- padding-top: $spacing-md;
365
+ padding: $spacing-md $profile-panel-content-padding 0;
352
366
  }
353
367
  }
354
368
 
@@ -40,6 +40,7 @@
40
40
  td {
41
41
  color: var(--pa-text-primary);
42
42
  background-color: var(--pa-table-bg);
43
+ height: $table-cell-height;
43
44
 
44
45
  // Buttons in table cells - negative margin to prevent row height growth
45
46
  .pa-btn {
@@ -62,28 +63,51 @@
62
63
  }
63
64
  }
64
65
 
65
- // 2x spacing variant - comfortable padding (calculated from base)
66
- &--2x {
67
- th,
66
+ // Size variants - synchronized with button/input sizes
67
+ &--xs {
68
+ th, td {
69
+ padding: $table-padding-xs-v $table-padding-xs-h;
70
+ }
68
71
  td {
69
- padding: ($table-padding-base-v * $table-spacing-2x-multiplier)
70
- ($table-padding-base-h * $table-spacing-2x-multiplier);
72
+ height: $table-cell-height-xs;
71
73
  }
72
74
  }
73
75
 
74
- // 3x spacing variant - spacious padding (calculated from base)
75
- &--3x {
76
- th,
76
+ &--sm {
77
+ th, td {
78
+ padding: $table-padding-sm-v $table-padding-sm-h;
79
+ }
77
80
  td {
78
- padding: ($table-padding-base-v * $table-spacing-3x-multiplier)
79
- ($table-padding-base-h * $table-spacing-3x-multiplier);
81
+ height: $table-cell-height-sm;
82
+ }
83
+ }
84
+
85
+ &--lg {
86
+ th, td {
87
+ padding: $table-padding-lg-v $table-padding-lg-h;
88
+ }
89
+ td {
90
+ height: $table-cell-height-lg;
91
+ }
92
+ }
93
+
94
+ &--xl {
95
+ th, td {
96
+ padding: $table-padding-xl-v $table-padding-xl-h;
97
+ }
98
+ td {
99
+ height: $table-cell-height-xl;
80
100
  }
81
101
  }
82
102
 
83
103
  // Hover effects
84
- tbody tr {
85
- // Setup for hover accent border
86
- @if $table-hover-accent-width > 0 {
104
+ @if $table-hover-accent-width > 0 {
105
+ // Header alignment - add padding-left instead of border
106
+ th:first-child {
107
+ padding-left: $table-hover-accent-width + $table-padding-base-h;
108
+ }
109
+
110
+ tbody tr {
87
111
  border-#{$table-hover-accent-position}: #{$table-hover-accent-width} solid transparent;
88
112
  transition: border-color $transition-normal $easing-smooth;
89
113
  }
@@ -275,6 +275,22 @@
275
275
  }
276
276
  }
277
277
 
278
+ // Border top variant - active indicator on top instead of bottom
279
+ &--border-top {
280
+ border-bottom: none;
281
+ border-top: $border-width-base solid var(--pa-border-color);
282
+
283
+ .pa-tabs__item {
284
+ border-bottom: none;
285
+ border-top: $border-width-medium solid transparent;
286
+
287
+ &--active {
288
+ border-top-color: $accent-color;
289
+ border-bottom-color: transparent;
290
+ }
291
+ }
292
+ }
293
+
278
294
  // Size variants
279
295
  &--sm {
280
296
  .pa-tabs__item {
@@ -320,6 +336,125 @@
320
336
  padding-top: $spacing-md;
321
337
  }
322
338
  }
339
+
340
+ // Card variant - tabs act as card header (same height as pa-card__header)
341
+ &--card {
342
+ position: relative; // For dropdown positioning
343
+ border: $card-border-width solid var(--pa-border-color);
344
+ border-radius: $card-border-radius;
345
+ background-color: var(--pa-card-bg);
346
+ box-shadow: $shadow-sm;
347
+
348
+ .pa-tabs {
349
+ height: $card-header-min-height;
350
+ padding: $card-header-padding-v $card-header-padding-h;
351
+ background: var(--pa-card-header-bg);
352
+ border-bottom: $border-width-base solid var(--pa-border-color);
353
+ box-sizing: border-box;
354
+ border-top-left-radius: $card-border-radius;
355
+ border-top-right-radius: $card-border-radius;
356
+ margin-bottom: 0;
357
+ align-items: center;
358
+ gap: $spacing-xs;
359
+ flex-wrap: nowrap;
360
+ overflow: visible; // Allow dropdown to overflow
361
+ }
362
+
363
+ .pa-tabs__content {
364
+ padding: $card-body-padding-v $card-body-padding-h;
365
+ }
366
+
367
+ .pa-tabs__panel {
368
+ padding-top: 0;
369
+ }
370
+
371
+ // Overflow toggle for tabs that don't fit
372
+ .pa-tabs__overflow {
373
+ position: relative;
374
+ margin-left: auto;
375
+ flex-shrink: 0;
376
+ }
377
+
378
+ .pa-tabs__overflow-toggle {
379
+ position: relative;
380
+ display: flex;
381
+ align-items: center;
382
+ justify-content: center;
383
+ width: $card-header-min-height;
384
+ height: 100%;
385
+ padding: 0;
386
+ border: none;
387
+ background: transparent;
388
+ color: var(--pa-text-secondary);
389
+ cursor: pointer;
390
+ transition: all $transition-fast $easing-snappy;
391
+ border-left: $border-width-base solid var(--pa-border-color);
392
+ margin: (-$card-header-padding-v) (-$card-header-padding-h) (-$card-header-padding-v) 0;
393
+ box-sizing: content-box;
394
+ height: $card-header-min-height;
395
+
396
+ &:hover {
397
+ background-color: rgba($accent-color, $card-tab-hover-opacity);
398
+ color: var(--pa-text-primary);
399
+ }
400
+
401
+ // When overflow contains the active tab
402
+ &--has-active {
403
+ color: var(--pa-accent);
404
+
405
+ &::after {
406
+ content: '';
407
+ position: absolute;
408
+ bottom: 0;
409
+ left: 0;
410
+ right: 0;
411
+ height: $border-width-medium;
412
+ background: var(--pa-accent);
413
+ }
414
+ }
415
+
416
+ i {
417
+ font-size: $font-size-sm;
418
+ }
419
+ }
420
+
421
+ .pa-tabs__overflow-menu {
422
+ position: absolute;
423
+ top: $card-header-min-height;
424
+ right: 0;
425
+ min-width: 15rem;
426
+ background: var(--pa-card-bg);
427
+ border: $card-border-width solid var(--pa-border-color);
428
+ border-radius: $border-radius;
429
+ box-shadow: $shadow-lg;
430
+ z-index: $z-index-dropdown;
431
+ display: none;
432
+ flex-direction: column;
433
+ padding: $spacing-xs 0;
434
+
435
+ &--open {
436
+ display: flex;
437
+ }
438
+
439
+ .pa-tabs__item {
440
+ padding: $spacing-sm $spacing-base;
441
+ border: none;
442
+ border-bottom: none;
443
+ border-radius: 0;
444
+ text-align: left;
445
+ white-space: nowrap;
446
+
447
+ &:hover {
448
+ background-color: rgba($accent-color, $card-tab-hover-opacity);
449
+ }
450
+
451
+ &--active {
452
+ background-color: rgba($accent-color, 0.1);
453
+ border-bottom: none;
454
+ }
455
+ }
456
+ }
457
+ }
323
458
  }
324
459
 
325
460
  // Vertical tabs layout wrapper (for proper spacing with content)
@@ -352,87 +487,4 @@
352
487
  }
353
488
  }
354
489
 
355
- // Fixed width tab items - multipliers of 1rem
356
- .pa-tabs__item {
357
- &--w-1x {
358
- min-width: 1rem;
359
- }
360
-
361
- &--w-2x {
362
- min-width: 2rem;
363
- }
364
-
365
- &--w-3x {
366
- min-width: 3rem;
367
- }
368
-
369
- &--w-4x {
370
- min-width: 4rem;
371
- }
372
-
373
- &--w-5x {
374
- min-width: 5rem;
375
- }
376
-
377
- &--w-6x {
378
- min-width: 6rem;
379
- }
380
-
381
- &--w-7x {
382
- min-width: 7rem;
383
- }
384
-
385
- &--w-8x {
386
- min-width: 8rem;
387
- }
388
-
389
- &--w-9x {
390
- min-width: 9rem;
391
- }
392
-
393
- &--w-10x {
394
- min-width: 10rem;
395
- }
396
-
397
- // Fixed height tab items - multipliers of 1rem
398
- &--h-1x {
399
- min-height: 1rem;
400
- }
401
-
402
- &--h-2x {
403
- min-height: 2rem;
404
- }
405
-
406
- &--h-3x {
407
- min-height: 3rem;
408
- }
409
-
410
- &--h-4x {
411
- min-height: 4rem;
412
- }
413
-
414
- &--h-5x {
415
- min-height: 5rem;
416
- }
417
-
418
- &--h-6x {
419
- min-height: 6rem;
420
- }
421
-
422
- &--h-7x {
423
- min-height: 7rem;
424
- }
425
-
426
- &--h-8x {
427
- min-height: 8rem;
428
- }
429
-
430
- &--h-9x {
431
- min-height: 9rem;
432
- }
433
-
434
- &--h-10x {
435
- min-height: 10rem;
436
- }
437
- }
438
490
  }
@@ -237,6 +237,29 @@
237
237
  border-left-color: var(--pa-btn-danger-bg);
238
238
  }
239
239
 
240
+ // Numbered color variants (color-1 through color-9)
241
+ // These use theme-customizable colors from --pa-color-* CSS variables
242
+ @for $i from 1 through 9 {
243
+ &--color-#{$i}::before {
244
+ background-color: var(--pa-color-#{$i});
245
+ }
246
+ &--color-#{$i}::after {
247
+ border-top-color: var(--pa-color-#{$i});
248
+ }
249
+ &--color-#{$i}.pa-tooltip--right::after {
250
+ border-top-color: transparent;
251
+ border-right-color: var(--pa-color-#{$i});
252
+ }
253
+ &--color-#{$i}.pa-tooltip--bottom::after {
254
+ border-top-color: transparent;
255
+ border-bottom-color: var(--pa-color-#{$i});
256
+ }
257
+ &--color-#{$i}.pa-tooltip--left::after {
258
+ border-top-color: transparent;
259
+ border-left-color: var(--pa-color-#{$i});
260
+ }
261
+ }
262
+
240
263
  // Smart positioning - collision detection adjustments
241
264
  // Applied dynamically by JavaScript based on viewport boundaries
242
265
 
@@ -390,6 +413,7 @@
390
413
  font-size: $font-size-sm;
391
414
  line-height: $line-height-base;
392
415
  color: var(--pa-text-primary);
416
+ text-align: left; // Reset inherited alignment for rich content
393
417
 
394
418
  p {
395
419
  margin: 0 0 $spacing-sm 0;
@@ -454,6 +478,15 @@
454
478
  min-width: $popover-lg-min-width;
455
479
  max-width: $popover-lg-max-width;
456
480
  }
481
+
482
+ // Alignment variants
483
+ &--center &__body {
484
+ text-align: center;
485
+ }
486
+
487
+ &--right &__body {
488
+ text-align: right;
489
+ }
457
490
  }
458
491
 
459
492
  // ========================================
@@ -500,4 +533,11 @@
500
533
  background-color: var(--pa-btn-danger-bg);
501
534
  color: var(--pa-btn-danger-text);
502
535
  }
536
+
537
+ // Numbered color variants (color-1 through color-9)
538
+ @for $i from 1 through 9 {
539
+ &.pa-tooltip--color-#{$i} {
540
+ background-color: var(--pa-color-#{$i});
541
+ }
542
+ }
503
543
  }
@@ -102,27 +102,6 @@
102
102
  border-color: var(--pa-btn-dark-bg);
103
103
  }
104
104
 
105
- // Fixed-width badges with ellipsis
106
- &--w-1x { min-width: 1.6rem; max-width: 1.6rem; }
107
- &--w-2x { min-width: 3.2rem; max-width: 3.2rem; }
108
- &--w-3x { min-width: 4.8rem; max-width: 4.8rem; }
109
- &--w-4x { min-width: 6.4rem; max-width: 6.4rem; }
110
- &--w-5x { min-width: 8rem; max-width: 8rem; }
111
- &--w-6x { min-width: 9.6rem; max-width: 9.6rem; }
112
- &--w-7x { min-width: 11.2rem; max-width: 11.2rem; }
113
- &--w-8x { min-width: 12.8rem; max-width: 12.8rem; }
114
- &--w-9x { min-width: 14.4rem; max-width: 14.4rem; }
115
- &--w-10x { min-width: 16rem; max-width: 16rem; }
116
-
117
- // Apply ellipsis to fixed-width badges
118
- &[class*="--w-"] {
119
- display: inline-block;
120
- overflow: hidden;
121
- text-overflow: ellipsis;
122
- white-space: nowrap;
123
- vertical-align: middle;
124
- }
125
-
126
105
  // Left-side ellipsis for paths/hierarchies where end is important
127
106
  &--ellipsis-left {
128
107
  direction: rtl;
@@ -6,6 +6,7 @@
6
6
 
7
7
  .pa-input {
8
8
  width: 100%;
9
+ height: #{$base-input-size-md-height}rem;
9
10
  padding: $input-padding-v $input-padding-h;
10
11
  border: $border-width-base solid var(--pa-border-color);
11
12
  border-radius: $border-radius;
@@ -23,6 +24,7 @@
23
24
 
24
25
  .pa-select {
25
26
  width: 100%;
27
+ height: #{$base-input-size-md-height}rem;
26
28
  padding: $select-padding-v $select-padding-h;
27
29
  border: $border-width-base solid var(--pa-border-color);
28
30
  border-radius: $border-radius;
@@ -61,27 +63,31 @@
61
63
  }
62
64
  }
63
65
 
64
- // Input Sizes
66
+ // Input Sizes - heights aligned with $base-input-size-* variables
65
67
  .pa-input--xs,
66
68
  .pa-select--xs {
69
+ height: #{$base-input-size-xs-height}rem;
67
70
  padding: $input-padding-xs-v $input-padding-h;
68
71
  font-size: $font-size-xs;
69
72
  }
70
73
 
71
74
  .pa-input--sm,
72
75
  .pa-select--sm {
76
+ height: #{$base-input-size-sm-height}rem;
73
77
  padding: $input-padding-v $input-padding-h;
74
78
  font-size: $font-size-sm;
75
79
  }
76
80
 
77
81
  .pa-input--lg,
78
82
  .pa-select--lg {
83
+ height: #{$base-input-size-lg-height}rem;
79
84
  padding: $input-padding-v $input-padding-h;
80
85
  font-size: $font-size-base;
81
86
  }
82
87
 
83
88
  .pa-input--xl,
84
89
  .pa-select--xl {
90
+ height: #{$base-input-size-xl-height}rem;
85
91
  padding: $input-padding-v $input-padding-h;
86
92
  font-size: $font-size-lg;
87
93
  }
@@ -90,7 +90,7 @@ $table-header-bg: $audi-gray-100;
90
90
  $table-hover-bg: $audi-gray-50;
91
91
 
92
92
  // Enable red accent on table row hover (Audi signature detail)
93
- $table-hover-accent-width: 3px;
93
+ $table-hover-accent-width: 0.3rem; // 3px in 10px base
94
94
  $table-hover-accent-color: $accent-color;
95
95
  $table-hover-accent-position: left;
96
96
 
@@ -200,6 +200,10 @@ $danger-bg-light: rgba(255, 0, 0, 0.1);
200
200
  // Set body font
201
201
  $body-font-family: "Fira Sans Condensed", "Arial Narrow", "Arial", sans-serif;
202
202
 
203
+ // Card styling - thicker border for Audi design language
204
+ $card-border-width: $border-width-medium;
205
+ $card-border-radius: 0; // Sharp edges
206
+
203
207
  // Import core styles with overridden variables
204
208
  @import '../core';
205
209
  @import '../utilities';
@@ -107,7 +107,7 @@ $table-header-bg: $audi-black;
107
107
  $table-hover-bg: $audi-gray-light;
108
108
 
109
109
  // Enable red accent on table row hover (Audi signature detail)
110
- $table-hover-accent-width: 3px;
110
+ $table-hover-accent-width: 0.3rem; // 3px in 10px base
111
111
  $table-hover-accent-color: $accent-color; // Uses the red #ff0000
112
112
  $table-hover-accent-position: left;
113
113
 
@@ -220,6 +220,10 @@ $danger-bg-light: rgba(255, 0, 0, 0.25);
220
220
  // 4. Override font family SCSS variable after fonts are defined
221
221
  $body-font-family: "Fira Sans Condensed", "Arial Narrow", "Arial", sans-serif;
222
222
 
223
+ // Card styling - thicker border for Audi design language
224
+ $card-border-width: $border-width-medium;
225
+ $card-border-radius: 0; // Sharp edges
226
+
223
227
  // 5. Import core framework styles (will use all our SCSS variables)
224
228
  @import '../core';
225
229
 
@@ -256,8 +260,6 @@ $body-font-family: "Fira Sans Condensed", "Arial Narrow", "Arial", sans-serif;
256
260
  }
257
261
 
258
262
  .pa-card {
259
- border-radius: 0 !important; // Sharp edges
260
- border: $border-width-medium solid $border-color;
261
263
  box-shadow: 0 $spacing-xs ($spacing-sm * 2) rgba($audi-black, 0.8);
262
264
  }
263
265