@keenmate/pure-admin-core 1.0.0-rc02 → 1.0.0-rc04

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.
@@ -0,0 +1,139 @@
1
+ /* ========================================
2
+ Callout Components
3
+ Documentation-style callouts with left border accent
4
+ For tips, notes, warnings in content areas
5
+ ======================================== */
6
+ @use '../variables' as *;
7
+
8
+ // Callout base
9
+ .pa-callout {
10
+ position: relative;
11
+ padding: $card-footer-padding-v $card-footer-padding-h;
12
+ margin-bottom: $spacing-base;
13
+ border-left: $callout-border-width solid var(--pa-border-color);
14
+ border-radius: $border-radius;
15
+ font-size: $font-size-sm;
16
+ background-color: var(--pa-card-bg);
17
+
18
+ // Remove margins when first/last child in card body
19
+ .pa-card__body &:first-child {
20
+ margin-top: 0;
21
+ }
22
+ .pa-card__body &:last-child {
23
+ margin-bottom: 0;
24
+ }
25
+
26
+ // Callout variants
27
+ &--primary {
28
+ border-left-color: var(--pa-accent);
29
+ background-color: rgba($accent-color, $opacity-subtle);
30
+ }
31
+
32
+ &--secondary {
33
+ border-left-color: var(--pa-text-secondary);
34
+ background-color: color-mix(in srgb, var(--pa-text-secondary) 5%, transparent);
35
+ }
36
+
37
+ &--success {
38
+ border-left-color: var(--pa-success-bg);
39
+ background-color: var(--pa-success-bg-subtle);
40
+ }
41
+
42
+ &--danger {
43
+ border-left-color: var(--pa-danger-bg);
44
+ background-color: var(--pa-danger-bg-subtle);
45
+ }
46
+
47
+ &--warning {
48
+ border-left-color: var(--pa-warning-bg);
49
+ background-color: var(--pa-warning-bg-subtle);
50
+ }
51
+
52
+ &--info {
53
+ border-left-color: var(--pa-info-bg);
54
+ background-color: var(--pa-info-bg-subtle);
55
+ }
56
+
57
+ // Callout sizes
58
+ &--sm {
59
+ padding: $spacing-sm $spacing-md;
60
+ font-size: $font-size-xs;
61
+ }
62
+
63
+ &--lg {
64
+ padding: $spacing-lg $spacing-xl;
65
+ font-size: $font-size-base;
66
+ }
67
+
68
+ // Callout components
69
+ &__icon {
70
+ float: left;
71
+ margin-right: $spacing-sm;
72
+ font-size: $font-size-lg;
73
+ line-height: 1;
74
+ }
75
+
76
+ &__heading {
77
+ margin: 0 0 $spacing-sm 0;
78
+ font-size: $font-size-base;
79
+ font-weight: $font-weight-semibold;
80
+ }
81
+
82
+ &__content {
83
+ // Clearfix for floated icon
84
+ &::after {
85
+ content: '';
86
+ display: table;
87
+ clear: both;
88
+ }
89
+ }
90
+
91
+ // Remove margin from last child
92
+ > *:last-child {
93
+ margin-bottom: 0;
94
+ }
95
+
96
+ // Paragraphs inside callouts
97
+ p {
98
+ margin: 0 0 $spacing-sm 0;
99
+
100
+ &:last-child {
101
+ margin-bottom: 0;
102
+ }
103
+ }
104
+
105
+ // Lists inside callouts
106
+ ul, ol {
107
+ margin: $spacing-sm 0;
108
+ padding-left: $spacing-lg;
109
+
110
+ &:last-child {
111
+ margin-bottom: 0;
112
+ }
113
+ }
114
+
115
+ // Code inside callouts
116
+ code {
117
+ background-color: rgba(0, 0, 0, $opacity-subtle);
118
+ padding: 0.1em 0.3em;
119
+ border-radius: $border-radius-sm;
120
+ font-size: 0.9em;
121
+ }
122
+
123
+ // Links styling
124
+ a {
125
+ color: inherit;
126
+ text-decoration: underline;
127
+ font-weight: $font-weight-medium;
128
+
129
+ &:hover {
130
+ text-decoration: none;
131
+ }
132
+ }
133
+
134
+ // Headings inside callouts
135
+ h1, h2, h3, h4, h5, h6 {
136
+ color: inherit;
137
+ margin-top: 0;
138
+ }
139
+ }
@@ -88,11 +88,18 @@
88
88
  &__header {
89
89
  padding: $spacing-lg;
90
90
  background-color: var(--pa-header-bg);
91
- border-bottom: $border-width-base solid var(--pa-border-color);
91
+ border-bottom: 1px solid var(--pa-border-color);
92
92
  display: flex;
93
93
  align-items: flex-start;
94
94
  gap: $spacing-base;
95
95
  position: relative;
96
+
97
+ // No-avatar variant for corporate apps without user photos
98
+ &--no-avatar {
99
+ .pa-profile-panel__avatar {
100
+ display: none;
101
+ }
102
+ }
96
103
  }
97
104
 
98
105
  &__avatar {
@@ -108,12 +115,13 @@
108
115
 
109
116
  &__avatar-icon {
110
117
  font-size: $font-size-4xl;
111
- color: $accent-color;
118
+ color: var(--pa-accent);
112
119
  }
113
120
 
114
121
  &__info {
115
122
  flex: 1;
116
123
  min-width: 0;
124
+ padding-right: $profile-close-size; // Space for close button
117
125
  }
118
126
 
119
127
  &__name {
@@ -121,6 +129,10 @@
121
129
  font-size: $font-size-lg;
122
130
  font-weight: $font-weight-semibold;
123
131
  color: var(--pa-text-primary);
132
+ // Truncate long names
133
+ overflow: hidden;
134
+ text-overflow: ellipsis;
135
+ white-space: nowrap;
124
136
  }
125
137
 
126
138
  &__email {
@@ -174,7 +186,7 @@
174
186
 
175
187
  &__body {
176
188
  flex: 1;
177
- padding: $spacing-lg;
189
+ padding: $spacing-lg 0; // Vertical only - items handle horizontal
178
190
  display: flex;
179
191
  flex-direction: column;
180
192
  gap: $profile-section-gap;
@@ -219,7 +231,10 @@
219
231
  &__nav-icon {
220
232
  font-size: $font-size-base;
221
233
  width: $sidebar-icon-size;
222
- text-align: center;
234
+ height: $sidebar-icon-size;
235
+ display: flex;
236
+ align-items: center;
237
+ justify-content: center;
223
238
  }
224
239
 
225
240
  &__actions {
@@ -227,11 +242,23 @@
227
242
  flex-direction: column;
228
243
  gap: $spacing-md;
229
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;
230
257
  }
231
258
 
232
259
  // Tabs section
233
260
  &__tabs {
234
- padding: 0 $spacing-lg;
261
+ padding: 0 $profile-panel-content-padding;
235
262
  border-bottom: $border-width-base solid var(--pa-border-color);
236
263
  background-color: var(--pa-header-bg);
237
264
 
@@ -246,7 +273,7 @@
246
273
 
247
274
  &:hover {
248
275
  color: var(--pa-header-text);
249
- background-color: rgba(255, 255, 255, 0.1);
276
+ background-color: var(--pa-accent-light);
250
277
  }
251
278
 
252
279
  &--active {
@@ -258,10 +285,6 @@
258
285
 
259
286
  // Favorites section
260
287
  &__favorites {
261
- display: flex;
262
- flex-direction: column;
263
- gap: $spacing-sm;
264
-
265
288
  ul {
266
289
  list-style: none;
267
290
  margin: 0;
@@ -300,7 +323,10 @@
300
323
  &__favorite-icon {
301
324
  font-size: $font-size-base;
302
325
  width: $sidebar-icon-size;
303
- text-align: center;
326
+ height: $sidebar-icon-size;
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
304
330
  }
305
331
 
306
332
  &__favorite-label {
@@ -313,7 +339,7 @@
313
339
  margin-left: auto;
314
340
  background: none;
315
341
  border: none;
316
- padding: $spacing-sm;
342
+ padding: $spacing-xs;
317
343
  color: var(--pa-text-secondary);
318
344
  cursor: pointer;
319
345
  border-radius: $border-radius;
@@ -336,7 +362,7 @@
336
362
 
337
363
  &__favorites-add {
338
364
  margin-top: auto;
339
- padding-top: $spacing-md;
365
+ padding: $spacing-md $profile-panel-content-padding 0;
340
366
  }
341
367
  }
342
368
 
@@ -540,16 +540,3 @@
540
540
  }
541
541
  }
542
542
 
543
- // Text utilities for tables
544
- .text-success {
545
- color: var(--pa-success-bg);
546
- }
547
-
548
- .text-danger {
549
- color: var(--pa-danger-bg);
550
- }
551
-
552
- .text-warning {
553
- color: var(--pa-warning-bg);
554
- }
555
-
@@ -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 {
@@ -352,87 +368,4 @@
352
368
  }
353
369
  }
354
370
 
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
371
  }
@@ -195,6 +195,59 @@ html.font-size-4xl {
195
195
  }
196
196
  }
197
197
 
198
+ // Gap utilities (10px rem base)
199
+ // Semantic gap classes using spacing variables
200
+ .gap-0 { gap: 0; }
201
+ .gap-xs { gap: $spacing-xs; } // 0.25rem = 2.5px
202
+ .gap-sm { gap: $spacing-sm; } // 0.5rem = 5px
203
+ .gap-md { gap: $spacing-md; } // 0.75rem = 7.5px
204
+ .gap-base { gap: $spacing-base; } // 1rem = 10px
205
+ .gap-lg { gap: $spacing-lg; } // 1.5rem = 15px
206
+ .gap-xl { gap: $spacing-xl; } // 2rem = 20px
207
+ .gap-2xl { gap: $spacing-2xl; } // 3rem = 30px
208
+
209
+ // Numeric gap classes (in 10px rem units)
210
+ .gap-1 { gap: 0.1rem; } // 1px
211
+ .gap-2 { gap: 0.2rem; } // 2px
212
+ .gap-3 { gap: 0.3rem; } // 3px
213
+ .gap-4 { gap: 0.4rem; } // 4px
214
+ .gap-5 { gap: 0.5rem; } // 5px
215
+ .gap-6 { gap: 0.6rem; } // 6px
216
+ .gap-8 { gap: 0.8rem; } // 8px
217
+ .gap-10 { gap: 1rem; } // 10px
218
+ .gap-12 { gap: 1.2rem; } // 12px
219
+ .gap-15 { gap: 1.5rem; } // 15px
220
+ .gap-20 { gap: 2rem; } // 20px
221
+
222
+ // Row gap utilities
223
+ .row-gap-0 { row-gap: 0; }
224
+ .row-gap-xs { row-gap: $spacing-xs; }
225
+ .row-gap-sm { row-gap: $spacing-sm; }
226
+ .row-gap-md { row-gap: $spacing-md; }
227
+ .row-gap-base { row-gap: $spacing-base; }
228
+ .row-gap-lg { row-gap: $spacing-lg; }
229
+
230
+ // Column gap utilities
231
+ .column-gap-0 { column-gap: 0; }
232
+ .column-gap-xs { column-gap: $spacing-xs; }
233
+ .column-gap-sm { column-gap: $spacing-sm; }
234
+ .column-gap-md { column-gap: $spacing-md; }
235
+ .column-gap-base { column-gap: $spacing-base; }
236
+ .column-gap-lg { column-gap: $spacing-lg; }
237
+
238
+ // Font-size utilities (10px rem base)
239
+ // Direct font-size classes using typography variables
240
+ .text-2xs { font-size: $font-size-2xs; } // 1rem = 10px
241
+ .text-xs { font-size: $font-size-xs; } // 1.2rem = 12px
242
+ .text-sm { font-size: $font-size-sm; } // 1.4rem = 14px
243
+ .text-md { font-size: $font-size-md; } // 1.5rem = 15px
244
+ .text-base { font-size: $font-size-base; } // 1.6rem = 16px
245
+ .text-lg { font-size: $font-size-lg; } // 1.8rem = 18px
246
+ .text-xl { font-size: $font-size-xl; } // 2rem = 20px
247
+ .text-2xl { font-size: $font-size-2xl; } // 2.4rem = 24px
248
+ .text-3xl { font-size: $font-size-3xl; } // 2.8rem = 28px
249
+ .text-4xl { font-size: $font-size-4xl; } // 3.2rem = 32px
250
+
198
251
  // Component showcase styling
199
252
  .component-showcase {
200
253
  display: flex;
@@ -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;