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

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
+ }
@@ -83,12 +83,12 @@
83
83
  color: var(--pa-text-primary);
84
84
  font-size: $font-size-base;
85
85
  font-weight: $font-weight-semibold;
86
+ line-height: 1;
86
87
  }
87
88
  }
88
89
 
89
90
  &__body {
90
- padding: $card-body-padding $card-body-padding $card-body-padding
91
- $card-body-padding;
91
+ padding: $card-body-padding-v $card-body-padding-h;
92
92
  flex: 1;
93
93
 
94
94
  // Remove top margin from first child to avoid double spacing with padding
@@ -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-text-primary);
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 {
@@ -114,6 +121,7 @@
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 {
@@ -196,8 +208,8 @@
196
208
  &__nav-item {
197
209
  display: flex;
198
210
  align-items: center;
199
- gap: $spacing-md;
200
- padding: $card-footer-padding-v $card-footer-padding-h;
211
+ gap: $sidebar-item-gap;
212
+ padding: $sidebar-padding;
201
213
  color: var(--pa-text-primary);
202
214
  text-decoration: none;
203
215
  border-radius: $border-radius;
@@ -217,8 +229,8 @@
217
229
  }
218
230
 
219
231
  &__nav-icon {
220
- font-size: $font-size-lg;
221
- width: $profile-nav-icon-width;
232
+ font-size: $font-size-base;
233
+ width: $sidebar-icon-size;
222
234
  text-align: center;
223
235
  }
224
236
 
@@ -228,54 +240,126 @@
228
240
  gap: $spacing-md;
229
241
  margin-top: auto;
230
242
  }
231
- }
232
243
 
233
- // Responsive adjustments
234
- @media (max-width: $mobile-breakpoint) {
235
- .pa-profile-panel__content {
236
- width: 85vw;
237
- max-width: $profile-panel-mobile-max-width;
244
+ // Tabs section
245
+ &__tabs {
246
+ padding: 0 $spacing-lg;
247
+ border-bottom: $border-width-base solid var(--pa-border-color);
248
+ background-color: var(--pa-header-bg);
249
+
250
+ .pa-tabs {
251
+ border-bottom: none;
252
+ margin-bottom: 0;
253
+ }
254
+
255
+ .pa-tabs__item {
256
+ color: var(--pa-header-text-secondary);
257
+ border-bottom-color: transparent;
258
+
259
+ &:hover {
260
+ color: var(--pa-header-text);
261
+ background-color: rgba(255, 255, 255, 0.1);
262
+ }
263
+
264
+ &--active {
265
+ color: var(--pa-header-text);
266
+ border-bottom-color: var(--pa-accent);
267
+ }
268
+ }
238
269
  }
239
270
 
240
- .pa-header__profile-name {
241
- display: none;
271
+ // Favorites section
272
+ &__favorites {
273
+ display: flex;
274
+ flex-direction: column;
275
+ gap: $spacing-sm;
276
+
277
+ ul {
278
+ list-style: none;
279
+ margin: 0;
280
+ padding: 0;
281
+ }
282
+
283
+ li {
284
+ margin-bottom: $spacing-sm;
285
+ }
242
286
  }
243
- }
244
287
 
245
- // Global scrollbar styling - applies to all content
246
- /* Webkit browsers (Chrome, Safari, Edge) */
247
- *::-webkit-scrollbar {
248
- width: $scrollbar-width;
249
- height: $scrollbar-width;
250
- }
288
+ &__favorite-item {
289
+ display: flex;
290
+ align-items: center;
291
+ gap: $sidebar-item-gap;
292
+ padding: $sidebar-padding;
293
+ color: var(--pa-text-primary);
294
+ text-decoration: none;
295
+ border-radius: $border-radius;
296
+ cursor: pointer;
297
+ transition: background-color $transition-fast $easing-snappy,
298
+ color $transition-fast $easing-snappy;
299
+ font-weight: $font-weight-medium;
251
300
 
252
- *::-webkit-scrollbar-track {
253
- background: var(--pa-primary-bg);
254
- border-radius: $border-radius;
255
- }
301
+ &:hover {
302
+ background-color: var(--pa-accent-light);
303
+ color: var(--pa-accent);
304
+ }
256
305
 
257
- *::-webkit-scrollbar-thumb {
258
- background: $border-color;
259
- border-radius: $border-radius;
260
- border: $border-width-base solid var(--pa-primary-bg);
306
+ &:focus {
307
+ outline: $focus-outline-width solid var(--pa-accent);
308
+ outline-offset: $focus-outline-offset;
309
+ }
310
+ }
261
311
 
262
- &:hover {
263
- background: $accent-color;
264
- border-color: $accent-hover;
312
+ &__favorite-icon {
313
+ font-size: $font-size-base;
314
+ width: $sidebar-icon-size;
315
+ text-align: center;
265
316
  }
266
317
 
267
- &:active {
268
- background: $accent-hover;
318
+ &__favorite-label {
319
+ flex: 1;
269
320
  }
270
- }
271
321
 
272
- *::-webkit-scrollbar-corner {
273
- background: var(--pa-primary-bg);
274
- }
322
+ // Favorite remove button
323
+ &__favorite-remove {
324
+ opacity: 0;
325
+ margin-left: auto;
326
+ background: none;
327
+ border: none;
328
+ padding: $spacing-sm;
329
+ color: var(--pa-text-secondary);
330
+ cursor: pointer;
331
+ border-radius: $border-radius;
332
+ font-size: $font-size-sm;
333
+ line-height: 1;
334
+ transition: opacity $transition-fast $easing-snappy,
335
+ color $transition-fast $easing-snappy,
336
+ background-color $transition-fast $easing-snappy;
337
+
338
+ &:hover {
339
+ color: var(--pa-danger);
340
+ background-color: var(--pa-danger-bg-light);
341
+ }
342
+ }
275
343
 
276
- /* Firefox */
277
- * {
278
- scrollbar-width: auto;
279
- scrollbar-color: var(--pa-border-color) var(--pa-primary-bg);
344
+ // Show remove button on favorite-item hover
345
+ &__favorite-item:hover &__favorite-remove {
346
+ opacity: 1;
347
+ }
348
+
349
+ &__favorites-add {
350
+ margin-top: auto;
351
+ padding-top: $spacing-md;
352
+ }
280
353
  }
281
354
 
355
+ // Responsive adjustments
356
+ @media (max-width: $mobile-breakpoint) {
357
+ .pa-profile-panel__content {
358
+ width: 85vw;
359
+ max-width: $profile-panel-mobile-max-width;
360
+ }
361
+
362
+ .pa-header__profile-name {
363
+ display: none;
364
+ }
365
+ }
@@ -0,0 +1,41 @@
1
+ // ============================================================================
2
+ // SCROLLBARS
3
+ // Global scrollbar styling for consistent appearance across browsers
4
+ // ============================================================================
5
+ @use '../variables' as *;
6
+
7
+ /* Webkit browsers (Chrome, Safari, Edge) */
8
+ *::-webkit-scrollbar {
9
+ width: $scrollbar-width;
10
+ height: $scrollbar-width;
11
+ }
12
+
13
+ *::-webkit-scrollbar-track {
14
+ background: var(--pa-primary-bg);
15
+ border-radius: $scrollbar-border-radius;
16
+ }
17
+
18
+ *::-webkit-scrollbar-thumb {
19
+ background: $border-color;
20
+ border-radius: $scrollbar-border-radius;
21
+ border: $border-width-base solid var(--pa-primary-bg);
22
+
23
+ &:hover {
24
+ background: $accent-color;
25
+ border-color: $accent-hover;
26
+ }
27
+
28
+ &:active {
29
+ background: $accent-hover;
30
+ }
31
+ }
32
+
33
+ *::-webkit-scrollbar-corner {
34
+ background: var(--pa-primary-bg);
35
+ }
36
+
37
+ /* Firefox */
38
+ * {
39
+ scrollbar-width: thin;
40
+ scrollbar-color: var(--pa-border-color) var(--pa-primary-bg);
41
+ }
@@ -75,7 +75,7 @@
75
75
  font-size: $font-size-4xl;
76
76
  font-weight: $font-weight-bold;
77
77
  color: var(--pa-text-primary);
78
- line-height: 1;
78
+ line-height: 1.1;
79
79
  margin-bottom: $spacing-sm;
80
80
  }
81
81
 
@@ -120,7 +120,7 @@
120
120
  .pa-stat__number {
121
121
  font-size: clamp($stat-square-number-min, $stat-square-number-scale, $stat-square-number-max);
122
122
  font-weight: $font-weight-bold;
123
- line-height: 1;
123
+ line-height: 1.1;
124
124
  color: inherit;
125
125
  z-index: $focus-outline-width;
126
126
  position: relative;
@@ -134,7 +134,7 @@
134
134
  .pa-stat__symbol {
135
135
  font-size: clamp($stat-square-symbol-min, $stat-square-symbol-scale, $stat-square-symbol-max);
136
136
  font-weight: $font-weight-bold;
137
- line-height: 1;
137
+ line-height: 1.1;
138
138
  opacity: $stat-symbol-opacity;
139
139
  color: inherit;
140
140
  position: absolute;
@@ -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
-
@@ -304,7 +304,7 @@
304
304
  &--bordered {
305
305
  border: $border-width-base solid var(--pa-border-color);
306
306
  border-radius: $border-radius-lg;
307
- padding: $card-body-padding;
307
+ padding: $card-body-padding-v $card-body-padding-h;
308
308
  background-color: var(--pa-card-bg);
309
309
 
310
310
  // Remove bottom border from tabs since wrapper has border
@@ -337,7 +337,7 @@
337
337
  &--bordered {
338
338
  border: $border-width-base solid var(--pa-border-color);
339
339
  border-radius: $border-radius-lg;
340
- padding: $card-body-padding;
340
+ padding: $card-body-padding-v $card-body-padding-h;
341
341
  background-color: var(--pa-card-bg);
342
342
 
343
343
  // Add divider between tabs and content (gap already provides spacing)
@@ -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;