@keenmate/pure-admin-core 1.0.0 → 1.1.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/README.md +85 -7
- package/dist/css/main.css +970 -434
- package/package.json +1 -1
- package/snippets/customization.html +1 -1
- package/snippets/forms.html +65 -8
- package/snippets/layout.html +4 -4
- package/snippets/manifest.json +329 -219
- package/snippets/profile.html +51 -3
- package/src/scss/_base-css-variables.scss +432 -422
- package/src/scss/_core.scss +105 -105
- package/src/scss/_fonts.scss +0 -14
- package/src/scss/_variables.scss +12 -14
- package/src/scss/core-components/_alerts.scss +7 -7
- package/src/scss/core-components/_base.scss +3 -3
- package/src/scss/core-components/_buttons.scss +425 -425
- package/src/scss/core-components/_callouts.scss +139 -139
- package/src/scss/core-components/_cards.scss +321 -321
- package/src/scss/core-components/_checkbox-lists.scss +2 -2
- package/src/scss/core-components/_code.scss +4 -4
- package/src/scss/core-components/_command-palette.scss +518 -518
- package/src/scss/core-components/_comparison.scss +3 -3
- package/src/scss/core-components/_file-selector.scss +780 -780
- package/src/scss/core-components/_forms.scss +16 -16
- package/src/scss/core-components/_layout.scss +15 -15
- package/src/scss/core-components/_lists.scss +7 -7
- package/src/scss/core-components/_logic-tree.scss +280 -280
- package/src/scss/core-components/_modals.scss +2 -2
- package/src/scss/core-components/_notifications.scss +7 -7
- package/src/scss/core-components/_pagers.scss +3 -3
- package/src/scss/core-components/_popconfirm.scss +1 -1
- package/src/scss/core-components/_profile.scss +400 -389
- package/src/scss/core-components/_scrollbars.scss +40 -40
- package/src/scss/core-components/_settings-panel.scss +5 -5
- package/src/scss/core-components/_statistics.scss +6 -6
- package/src/scss/core-components/_tables.scss +566 -566
- package/src/scss/core-components/_tabs.scss +493 -493
- package/src/scss/core-components/_timeline.scss +15 -15
- package/src/scss/core-components/_toasts.scss +4 -4
- package/src/scss/core-components/_tooltips.scss +8 -8
- package/src/scss/core-components/_utilities.scss +11 -30
- package/src/scss/core-components/_web-components-theme.scss +294 -294
- package/src/scss/core-components/badges/_composite-badge-variants.scss +3 -3
- package/src/scss/core-components/badges/_labels.scss +1 -1
- package/src/scss/core-components/forms/_checkboxes-radios.scss +2 -2
- package/src/scss/core-components/forms/_form-inputs.scss +33 -4
- package/src/scss/core-components/forms/_form-layout.scss +2 -2
- package/src/scss/core-components/forms/_form-states.scss +27 -1
- package/src/scss/core-components/forms/_input-wrapper.scss +1 -1
- package/src/scss/core-components/forms/_query-editor.scss +17 -17
- package/src/scss/core-components/layout/_layout-container.scss +1 -1
- package/src/scss/core-components/layout/_navbar-elements.scss +1 -1
- package/src/scss/core-components/layout/_sidebar.scss +5 -5
- package/src/scss/utilities.scss +24 -0
- package/src/scss/variables/_base.scss +20 -10
- package/src/scss/variables/_colors.scss +7 -6
- package/src/scss/variables/_components.scss +8 -11
- package/src/scss/variables/_index.scss +11 -7
- package/src/scss/variables/_spacing.scss +12 -0
- package/src/scss/variables/_typography.scss +2 -2
- package/dist/fonts/Delivery/Delivery_W_Bd.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_BdIt.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_CdBlk.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_CdLt.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_It.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_Lt.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_LtIt.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_Rg.woff2 +0 -0
- package/src/scss/themes/_dark-base.scss +0 -207
- package/src/scss/themes/audi-light.scss +0 -341
- package/src/scss/themes/audi.scss +0 -303
- package/src/scss/themes/corporate.scss +0 -229
- package/src/scss/themes/dark-blue.scss +0 -165
- package/src/scss/themes/dark-green.scss +0 -169
- package/src/scss/themes/dark-red.scss +0 -173
- package/src/scss/themes/dark.scss +0 -158
- package/src/scss/themes/express.scss +0 -294
- package/src/scss/themes/minimal.scss +0 -134
|
@@ -1,566 +1,566 @@
|
|
|
1
|
-
/* ========================================
|
|
2
|
-
Table Components
|
|
3
|
-
Tables, virtual tables, with striped, hover, and spacing variants
|
|
4
|
-
======================================== */
|
|
5
|
-
@use '../variables' as *;
|
|
6
|
-
|
|
7
|
-
// Duplicate alert definition removed - consolidated above with theme-aware colors
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
// Tables
|
|
11
|
-
.pa-table-container {
|
|
12
|
-
overflow-x: auto;
|
|
13
|
-
border-radius: $border-radius;
|
|
14
|
-
border: $border-width-base solid var(--pa-border-color);
|
|
15
|
-
background-color: var(--pa-table-bg);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.pa-table {
|
|
19
|
-
width: 100%;
|
|
20
|
-
border-collapse: collapse;
|
|
21
|
-
font-size: $font-size-sm;
|
|
22
|
-
background-color: var(--pa-table-bg);
|
|
23
|
-
|
|
24
|
-
th,
|
|
25
|
-
td {
|
|
26
|
-
padding: $table-padding-base-v $table-padding-base-h;
|
|
27
|
-
text-align: left;
|
|
28
|
-
border-bottom: $border-width-base solid var(--pa-border-color);
|
|
29
|
-
vertical-align: middle;
|
|
30
|
-
line-height: $line-height-tight;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
th {
|
|
34
|
-
background-color: var(--pa-table-header-bg);
|
|
35
|
-
font-weight: $font-weight-semibold;
|
|
36
|
-
color: var(--pa-text-
|
|
37
|
-
border-bottom: $border-width-medium solid var(--pa-border-color);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
td {
|
|
41
|
-
color: var(--pa-text-
|
|
42
|
-
background-color: var(--pa-table-bg);
|
|
43
|
-
height: $table-cell-height;
|
|
44
|
-
|
|
45
|
-
// Buttons in table cells - negative margin to prevent row height growth
|
|
46
|
-
.pa-btn {
|
|
47
|
-
margin-top: -0.25rem;
|
|
48
|
-
margin-bottom: -0.25rem;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
&:not(&--responsive) {
|
|
53
|
-
// Remove bottom border from last row
|
|
54
|
-
tbody tr:last-child td {
|
|
55
|
-
border-bottom: none;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Striped variant
|
|
60
|
-
&--striped {
|
|
61
|
-
tbody tr:nth-child(even) td {
|
|
62
|
-
background-color: var(--pa-table-stripe);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Size variants - synchronized with button/input sizes
|
|
67
|
-
&--xs {
|
|
68
|
-
th, td {
|
|
69
|
-
padding: $table-padding-xs-v $table-padding-xs-h;
|
|
70
|
-
}
|
|
71
|
-
td {
|
|
72
|
-
height: $table-cell-height-xs;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
&--sm {
|
|
77
|
-
th, td {
|
|
78
|
-
padding: $table-padding-sm-v $table-padding-sm-h;
|
|
79
|
-
}
|
|
80
|
-
td {
|
|
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;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Hover effects
|
|
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 {
|
|
111
|
-
border-#{$table-hover-accent-position}: #{$table-hover-accent-width} solid transparent;
|
|
112
|
-
transition: border-color $transition-normal $easing-smooth;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
tbody tr:hover {
|
|
117
|
-
background-color: var(--pa-table-hover-bg);
|
|
118
|
-
|
|
119
|
-
// Apply hover accent if enabled
|
|
120
|
-
@if $table-hover-accent-width > 0 {
|
|
121
|
-
border-#{$table-hover-accent-position}-color: var(--pa-table-hover-accent-color);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
tbody tr:hover td {
|
|
126
|
-
background-color: var(--pa-table-hover-bg);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Remove margin from button groups inside table cells
|
|
130
|
-
td .pa-btn-group {
|
|
131
|
-
margin-bottom: 0;
|
|
132
|
-
flex-wrap: nowrap; // Keep buttons in a row, don't stack vertically
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Column width helper - auto-width columns that shrink to content
|
|
136
|
-
.col-auto {
|
|
137
|
-
width: 1%;
|
|
138
|
-
white-space: nowrap;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Pager
|
|
143
|
-
.pa-pager {
|
|
144
|
-
display: flex;
|
|
145
|
-
margin: $pager-button-margin 0;
|
|
146
|
-
|
|
147
|
-
// Remove margins when first/last child in card body
|
|
148
|
-
.pa-card__body &:first-child {
|
|
149
|
-
margin-top: 0;
|
|
150
|
-
}
|
|
151
|
-
.pa-card__body &:last-child {
|
|
152
|
-
margin-bottom: 0;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Default center alignment
|
|
156
|
-
justify-content: center;
|
|
157
|
-
|
|
158
|
-
// Positioning modifiers
|
|
159
|
-
&--left {
|
|
160
|
-
justify-content: flex-start;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
&--center {
|
|
164
|
-
justify-content: center;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
&--right {
|
|
168
|
-
justify-content: flex-end;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
&__container {
|
|
172
|
-
display: flex;
|
|
173
|
-
align-items: center;
|
|
174
|
-
gap: $spacing-sm;
|
|
175
|
-
white-space: nowrap;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
&__controls {
|
|
179
|
-
display: flex;
|
|
180
|
-
gap: $pager-controls-gap;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
&__info {
|
|
184
|
-
display: flex;
|
|
185
|
-
align-items: center;
|
|
186
|
-
gap: $spacing-sm;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
&__input {
|
|
190
|
-
width: $pager-input-width !important;
|
|
191
|
-
text-align: center;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
&__text {
|
|
195
|
-
color: var(--pa-text-
|
|
196
|
-
font-size: $font-size-sm;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Load More
|
|
201
|
-
.pa-load-more {
|
|
202
|
-
display: flex;
|
|
203
|
-
margin: $spacing-base 0;
|
|
204
|
-
|
|
205
|
-
// Remove margins when first/last child in card body
|
|
206
|
-
.pa-card__body &:first-child {
|
|
207
|
-
margin-top: 0;
|
|
208
|
-
}
|
|
209
|
-
.pa-card__body &:last-child {
|
|
210
|
-
margin-bottom: 0;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Default center alignment
|
|
214
|
-
justify-content: center;
|
|
215
|
-
|
|
216
|
-
// Positioning modifiers
|
|
217
|
-
&--left {
|
|
218
|
-
justify-content: flex-start;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
&--center {
|
|
222
|
-
justify-content: center;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
&--right {
|
|
226
|
-
justify-content: flex-end;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
&__button {
|
|
230
|
-
display: flex;
|
|
231
|
-
align-items: center;
|
|
232
|
-
gap: $spacing-sm;
|
|
233
|
-
padding: $btn-padding-v $btn-padding-h;
|
|
234
|
-
background-color: transparent;
|
|
235
|
-
border: $border-width-base solid var(--pa-border-color);
|
|
236
|
-
border-radius: $border-radius;
|
|
237
|
-
color: var(--pa-text-
|
|
238
|
-
font-size: $font-size-sm;
|
|
239
|
-
cursor: pointer;
|
|
240
|
-
transition: all $transition-fast $easing-snappy;
|
|
241
|
-
|
|
242
|
-
&:hover {
|
|
243
|
-
border-color: var(--pa-accent);
|
|
244
|
-
color: var(--pa-accent);
|
|
245
|
-
background-color: var(--pa-accent-light);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
&--loading {
|
|
249
|
-
pointer-events: none;
|
|
250
|
-
opacity: 0.7;
|
|
251
|
-
|
|
252
|
-
.pa-load-more__spinner {
|
|
253
|
-
animation: pa-spin 1s linear infinite;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
&__spinner {
|
|
259
|
-
width: $spinner-size;
|
|
260
|
-
height: $spinner-size;
|
|
261
|
-
border: $spinner-border-width solid var(--pa-border-color);
|
|
262
|
-
border-top: $spinner-border-width solid var(--pa-accent);
|
|
263
|
-
border-radius: 50%;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
&__text {
|
|
267
|
-
color: inherit;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
&__count {
|
|
271
|
-
color: var(--pa-text-
|
|
272
|
-
font-size: $font-size-xs;
|
|
273
|
-
margin-left: $spacing-xs;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// Virtual Table Styles
|
|
278
|
-
.pa-virtual-table {
|
|
279
|
-
border: $border-width-base solid var(--pa-border-color);
|
|
280
|
-
border-radius: $border-radius;
|
|
281
|
-
height: $chart-height;
|
|
282
|
-
overflow: auto;
|
|
283
|
-
position: relative;
|
|
284
|
-
background-color: var(--pa-table-bg);
|
|
285
|
-
font-size: $font-size-sm; // Match pa-table font size
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
.pa-virtual-table__header {
|
|
289
|
-
display: grid;
|
|
290
|
-
grid-template-columns: $dashboard-grid-col-sm 1fr 1fr $dashboard-grid-col-lg $dashboard-grid-col-md $dashboard-grid-col-md;
|
|
291
|
-
background: var(--pa-table-header-bg);
|
|
292
|
-
border-bottom: $border-width-medium solid var(--pa-border-color);
|
|
293
|
-
position: sticky;
|
|
294
|
-
top: 0;
|
|
295
|
-
z-index: 10;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
.pa-virtual-table__header-cell {
|
|
299
|
-
padding: $virtual-table-cell-padding-v $virtual-table-cell-padding-h;
|
|
300
|
-
font-weight: $font-weight-semibold;
|
|
301
|
-
border-right: $border-width-base solid var(--pa-border-color);
|
|
302
|
-
background: var(--pa-table-header-bg);
|
|
303
|
-
color: var(--pa-text-
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
.pa-virtual-table__header-cell:last-child {
|
|
307
|
-
border-right: none;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
.pa-virtual-table__body {
|
|
311
|
-
position: relative;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
.pa-virtual-table__row {
|
|
315
|
-
display: grid;
|
|
316
|
-
grid-template-columns: $dashboard-grid-col-sm 1fr 1fr $dashboard-grid-col-lg $dashboard-grid-col-md $dashboard-grid-col-md;
|
|
317
|
-
border-bottom: $border-width-base solid var(--pa-border-color);
|
|
318
|
-
background: var(--pa-table-bg);
|
|
319
|
-
|
|
320
|
-
// Setup for hover accent border (same as pa-table)
|
|
321
|
-
@if $table-hover-accent-width > 0 {
|
|
322
|
-
border-#{$table-hover-accent-position}: #{$table-hover-accent-width} solid transparent;
|
|
323
|
-
transition: border-color $transition-normal $easing-smooth;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
.pa-virtual-table__row:nth-child(even) {
|
|
328
|
-
background: var(--pa-table-stripe);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
.pa-virtual-table__row:hover {
|
|
332
|
-
background: var(--pa-table-hover-bg);
|
|
333
|
-
|
|
334
|
-
// Apply hover accent if enabled (same as pa-table)
|
|
335
|
-
@if $table-hover-accent-width > 0 {
|
|
336
|
-
border-#{$table-hover-accent-position}-color: var(--pa-table-hover-accent-color);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
.pa-virtual-table__cell {
|
|
341
|
-
padding: $virtual-table-cell-padding-v $virtual-table-cell-padding-h;
|
|
342
|
-
border-right: $border-width-base solid var(--pa-border-color);
|
|
343
|
-
overflow: hidden;
|
|
344
|
-
text-overflow: ellipsis;
|
|
345
|
-
white-space: nowrap;
|
|
346
|
-
color: var(--pa-text-
|
|
347
|
-
background-color: inherit;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
.pa-virtual-table__cell:last-child {
|
|
351
|
-
border-right: none;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
// Responsive Tables - Stackable Layout
|
|
355
|
-
.pa-table--responsive {
|
|
356
|
-
// Between tablet and mobile: Enable horizontal scrolling
|
|
357
|
-
@media (max-width: $tablet-breakpoint) and (min-width: $table-responsive-breakpoint + 1) {
|
|
358
|
-
// Table becomes scrollable but maintains desktop layout
|
|
359
|
-
overflow-x: auto;
|
|
360
|
-
-webkit-overflow-scrolling: touch; // Smooth scrolling on iOS
|
|
361
|
-
|
|
362
|
-
// Show subtle scroll hint with border
|
|
363
|
-
border-left: $border-width-base solid var(--pa-border-color);
|
|
364
|
-
border-right: $border-width-base solid var(--pa-border-color);
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// Mobile: Stack into cards
|
|
368
|
-
@media (max-width: $table-responsive-breakpoint) {
|
|
369
|
-
// Hide table headers
|
|
370
|
-
thead {
|
|
371
|
-
display: none;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
// Make each row a card
|
|
375
|
-
tbody tr {
|
|
376
|
-
display: block;
|
|
377
|
-
margin-bottom: $table-responsive-card-margin;
|
|
378
|
-
border: $border-width-base solid var(--pa-border-color);
|
|
379
|
-
border-radius: $border-radius;
|
|
380
|
-
overflow: hidden;
|
|
381
|
-
|
|
382
|
-
// Reset hover accent border for mobile
|
|
383
|
-
@if $table-hover-accent-width > 0 {
|
|
384
|
-
border-#{$table-hover-accent-position}: $border-width-base solid var(--pa-border-color) !important;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
&:last-child {
|
|
388
|
-
margin-bottom: 0;
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
// Make each cell a row within the card
|
|
393
|
-
tbody td {
|
|
394
|
-
display: block;
|
|
395
|
-
text-align: right;
|
|
396
|
-
padding: $table-responsive-card-padding;
|
|
397
|
-
position: relative;
|
|
398
|
-
border-bottom: $border-width-base solid var(--pa-border-color);
|
|
399
|
-
|
|
400
|
-
// Last cell in row has no border
|
|
401
|
-
&:last-child {
|
|
402
|
-
border-bottom: none;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
// Label before content
|
|
406
|
-
&::before {
|
|
407
|
-
content: attr(data-label);
|
|
408
|
-
position: absolute;
|
|
409
|
-
left: $table-responsive-card-padding;
|
|
410
|
-
top: $table-responsive-card-padding;
|
|
411
|
-
font-weight: $table-responsive-label-font-weight;
|
|
412
|
-
text-align: left;
|
|
413
|
-
width: $table-responsive-label-width;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
// Value aligned to the right
|
|
417
|
-
padding-left: calc($table-responsive-label-width + $table-responsive-card-padding * 2);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
// Disable col-auto effect in responsive view
|
|
421
|
-
.col-auto {
|
|
422
|
-
width: auto;
|
|
423
|
-
white-space: normal;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
// Striped variant - apply background to entire row (card)
|
|
427
|
-
&.pa-table--striped tbody tr:nth-child(even) {
|
|
428
|
-
background-color: var(--pa-table-stripe);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
// Ensure cells inside striped rows have transparent background
|
|
432
|
-
&.pa-table--striped tbody tr:nth-child(even) td {
|
|
433
|
-
background-color: transparent;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
// Hover effect on the card
|
|
437
|
-
tbody tr:hover {
|
|
438
|
-
background-color: transparent;
|
|
439
|
-
box-shadow: $shadow-sm;
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
tbody tr:hover td {
|
|
443
|
-
background-color: transparent;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
// Responsive Tables - CSS Grid Layout
|
|
449
|
-
// Allows custom grid layouts on mobile instead of simple stacking
|
|
450
|
-
.pa-table--responsive-grid {
|
|
451
|
-
// Between tablet and mobile: Enable horizontal scrolling
|
|
452
|
-
@media (max-width: $tablet-breakpoint) and (min-width: $table-responsive-breakpoint + 1) {
|
|
453
|
-
display: block;
|
|
454
|
-
overflow-x: auto;
|
|
455
|
-
-webkit-overflow-scrolling: touch;
|
|
456
|
-
border-left: $border-width-base solid var(--pa-border-color);
|
|
457
|
-
border-right: $border-width-base solid var(--pa-border-color);
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
// Mobile: CSS Grid layout
|
|
461
|
-
@media (max-width: $table-responsive-breakpoint) {
|
|
462
|
-
thead {
|
|
463
|
-
display: none;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
tbody tr {
|
|
467
|
-
display: block;
|
|
468
|
-
margin-bottom: $table-responsive-card-margin;
|
|
469
|
-
border: $border-width-base solid var(--pa-border-color);
|
|
470
|
-
border-radius: $border-radius;
|
|
471
|
-
overflow: hidden;
|
|
472
|
-
|
|
473
|
-
&:last-child {
|
|
474
|
-
margin-bottom: 0;
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
tbody td {
|
|
479
|
-
display: block;
|
|
480
|
-
padding: $table-responsive-card-padding;
|
|
481
|
-
border-bottom: $border-width-base solid var(--pa-border-color);
|
|
482
|
-
|
|
483
|
-
&:last-child {
|
|
484
|
-
border-bottom: none;
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
// Label above content (block layout by default)
|
|
488
|
-
&::before {
|
|
489
|
-
content: attr(data-label);
|
|
490
|
-
display: block;
|
|
491
|
-
font-weight: $table-responsive-label-font-weight;
|
|
492
|
-
color: var(--pa-text-
|
|
493
|
-
font-size: $font-size-xs;
|
|
494
|
-
margin-bottom: $spacing-xs;
|
|
495
|
-
text-transform: uppercase;
|
|
496
|
-
letter-spacing: 0.5px;
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// Grid container modifier - apply to tbody tr
|
|
501
|
-
// Usage: Add data-grid class to <tr> elements that need custom grid
|
|
502
|
-
tbody tr[data-grid] {
|
|
503
|
-
display: grid;
|
|
504
|
-
padding: $table-responsive-card-padding;
|
|
505
|
-
gap: $table-responsive-card-padding;
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
// Grid cell modifier - cells within grid container
|
|
509
|
-
tbody tr[data-grid] td {
|
|
510
|
-
padding: 0;
|
|
511
|
-
border: none;
|
|
512
|
-
|
|
513
|
-
&::before {
|
|
514
|
-
margin-bottom: $spacing-xs;
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
// Predefined grid layouts
|
|
519
|
-
// 2-column grid: data-grid="2"
|
|
520
|
-
tbody tr[data-grid="2"] {
|
|
521
|
-
grid-template-columns: 1fr 1fr;
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
// 3-column grid: data-grid="3"
|
|
525
|
-
tbody tr[data-grid="3"] {
|
|
526
|
-
grid-template-columns: 1fr 1fr 1fr;
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
// Span helpers for custom layouts
|
|
530
|
-
// Use data-span="2" on td to span 2 columns
|
|
531
|
-
tbody tr[data-grid] td[data-span="2"] {
|
|
532
|
-
grid-column: span 2;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
tbody tr[data-grid] td[data-span="3"] {
|
|
536
|
-
grid-column: span 3;
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
tbody tr[data-grid] td[data-span="full"] {
|
|
540
|
-
grid-column: 1 / -1; // Span all columns
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
// Disable col-auto effect in responsive view
|
|
544
|
-
.col-auto {
|
|
545
|
-
width: auto;
|
|
546
|
-
white-space: normal;
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
// Striped variant - apply background to entire row (card)
|
|
550
|
-
&.pa-table--striped tbody tr:nth-child(even) {
|
|
551
|
-
background-color: var(--pa-table-stripe);
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
// Ensure cells inside striped rows have transparent background
|
|
555
|
-
&.pa-table--striped tbody tr:nth-child(even) td {
|
|
556
|
-
background-color: transparent;
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
// Hover effect
|
|
560
|
-
tbody tr:hover {
|
|
561
|
-
background-color: transparent;
|
|
562
|
-
box-shadow: $shadow-sm;
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
|
|
1
|
+
/* ========================================
|
|
2
|
+
Table Components
|
|
3
|
+
Tables, virtual tables, with striped, hover, and spacing variants
|
|
4
|
+
======================================== */
|
|
5
|
+
@use '../variables' as *;
|
|
6
|
+
|
|
7
|
+
// Duplicate alert definition removed - consolidated above with theme-aware colors
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
// Tables
|
|
11
|
+
.pa-table-container {
|
|
12
|
+
overflow-x: auto;
|
|
13
|
+
border-radius: $border-radius;
|
|
14
|
+
border: $border-width-base solid var(--pa-border-color);
|
|
15
|
+
background-color: var(--pa-table-bg);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.pa-table {
|
|
19
|
+
width: 100%;
|
|
20
|
+
border-collapse: collapse;
|
|
21
|
+
font-size: $font-size-sm;
|
|
22
|
+
background-color: var(--pa-table-bg);
|
|
23
|
+
|
|
24
|
+
th,
|
|
25
|
+
td {
|
|
26
|
+
padding: $table-padding-base-v $table-padding-base-h;
|
|
27
|
+
text-align: left;
|
|
28
|
+
border-bottom: $border-width-base solid var(--pa-border-color);
|
|
29
|
+
vertical-align: middle;
|
|
30
|
+
line-height: $line-height-tight;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
th {
|
|
34
|
+
background-color: var(--pa-table-header-bg);
|
|
35
|
+
font-weight: $font-weight-semibold;
|
|
36
|
+
color: var(--pa-text-color-1);
|
|
37
|
+
border-bottom: $border-width-medium solid var(--pa-border-color);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
td {
|
|
41
|
+
color: var(--pa-text-color-1);
|
|
42
|
+
background-color: var(--pa-table-bg);
|
|
43
|
+
height: $table-cell-height;
|
|
44
|
+
|
|
45
|
+
// Buttons in table cells - negative margin to prevent row height growth
|
|
46
|
+
.pa-btn {
|
|
47
|
+
margin-top: -0.25rem;
|
|
48
|
+
margin-bottom: -0.25rem;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&:not(&--responsive) {
|
|
53
|
+
// Remove bottom border from last row
|
|
54
|
+
tbody tr:last-child td {
|
|
55
|
+
border-bottom: none;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Striped variant
|
|
60
|
+
&--striped {
|
|
61
|
+
tbody tr:nth-child(even) td {
|
|
62
|
+
background-color: var(--pa-table-stripe);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Size variants - synchronized with button/input sizes
|
|
67
|
+
&--xs {
|
|
68
|
+
th, td {
|
|
69
|
+
padding: $table-padding-xs-v $table-padding-xs-h;
|
|
70
|
+
}
|
|
71
|
+
td {
|
|
72
|
+
height: $table-cell-height-xs;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&--sm {
|
|
77
|
+
th, td {
|
|
78
|
+
padding: $table-padding-sm-v $table-padding-sm-h;
|
|
79
|
+
}
|
|
80
|
+
td {
|
|
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;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Hover effects
|
|
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 {
|
|
111
|
+
border-#{$table-hover-accent-position}: #{$table-hover-accent-width} solid transparent;
|
|
112
|
+
transition: border-color $transition-normal $easing-smooth;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
tbody tr:hover {
|
|
117
|
+
background-color: var(--pa-table-hover-bg);
|
|
118
|
+
|
|
119
|
+
// Apply hover accent if enabled
|
|
120
|
+
@if $table-hover-accent-width > 0 {
|
|
121
|
+
border-#{$table-hover-accent-position}-color: var(--pa-table-hover-accent-color);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
tbody tr:hover td {
|
|
126
|
+
background-color: var(--pa-table-hover-bg);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Remove margin from button groups inside table cells
|
|
130
|
+
td .pa-btn-group {
|
|
131
|
+
margin-bottom: 0;
|
|
132
|
+
flex-wrap: nowrap; // Keep buttons in a row, don't stack vertically
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Column width helper - auto-width columns that shrink to content
|
|
136
|
+
.col-auto {
|
|
137
|
+
width: 1%;
|
|
138
|
+
white-space: nowrap;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Pager
|
|
143
|
+
.pa-pager {
|
|
144
|
+
display: flex;
|
|
145
|
+
margin: $pager-button-margin 0;
|
|
146
|
+
|
|
147
|
+
// Remove margins when first/last child in card body
|
|
148
|
+
.pa-card__body &:first-child {
|
|
149
|
+
margin-top: 0;
|
|
150
|
+
}
|
|
151
|
+
.pa-card__body &:last-child {
|
|
152
|
+
margin-bottom: 0;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Default center alignment
|
|
156
|
+
justify-content: center;
|
|
157
|
+
|
|
158
|
+
// Positioning modifiers
|
|
159
|
+
&--left {
|
|
160
|
+
justify-content: flex-start;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
&--center {
|
|
164
|
+
justify-content: center;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
&--right {
|
|
168
|
+
justify-content: flex-end;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
&__container {
|
|
172
|
+
display: flex;
|
|
173
|
+
align-items: center;
|
|
174
|
+
gap: $spacing-sm;
|
|
175
|
+
white-space: nowrap;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
&__controls {
|
|
179
|
+
display: flex;
|
|
180
|
+
gap: $pager-controls-gap;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
&__info {
|
|
184
|
+
display: flex;
|
|
185
|
+
align-items: center;
|
|
186
|
+
gap: $spacing-sm;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
&__input {
|
|
190
|
+
width: $pager-input-width !important;
|
|
191
|
+
text-align: center;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
&__text {
|
|
195
|
+
color: var(--pa-text-color-2);
|
|
196
|
+
font-size: $font-size-sm;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Load More
|
|
201
|
+
.pa-load-more {
|
|
202
|
+
display: flex;
|
|
203
|
+
margin: $spacing-base 0;
|
|
204
|
+
|
|
205
|
+
// Remove margins when first/last child in card body
|
|
206
|
+
.pa-card__body &:first-child {
|
|
207
|
+
margin-top: 0;
|
|
208
|
+
}
|
|
209
|
+
.pa-card__body &:last-child {
|
|
210
|
+
margin-bottom: 0;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Default center alignment
|
|
214
|
+
justify-content: center;
|
|
215
|
+
|
|
216
|
+
// Positioning modifiers
|
|
217
|
+
&--left {
|
|
218
|
+
justify-content: flex-start;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
&--center {
|
|
222
|
+
justify-content: center;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
&--right {
|
|
226
|
+
justify-content: flex-end;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
&__button {
|
|
230
|
+
display: flex;
|
|
231
|
+
align-items: center;
|
|
232
|
+
gap: $spacing-sm;
|
|
233
|
+
padding: $btn-padding-v $btn-padding-h;
|
|
234
|
+
background-color: transparent;
|
|
235
|
+
border: $border-width-base solid var(--pa-border-color);
|
|
236
|
+
border-radius: $border-radius;
|
|
237
|
+
color: var(--pa-text-color-1);
|
|
238
|
+
font-size: $font-size-sm;
|
|
239
|
+
cursor: pointer;
|
|
240
|
+
transition: all $transition-fast $easing-snappy;
|
|
241
|
+
|
|
242
|
+
&:hover {
|
|
243
|
+
border-color: var(--pa-accent);
|
|
244
|
+
color: var(--pa-accent);
|
|
245
|
+
background-color: var(--pa-accent-light);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
&--loading {
|
|
249
|
+
pointer-events: none;
|
|
250
|
+
opacity: 0.7;
|
|
251
|
+
|
|
252
|
+
.pa-load-more__spinner {
|
|
253
|
+
animation: pa-spin 1s linear infinite;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
&__spinner {
|
|
259
|
+
width: $spinner-size;
|
|
260
|
+
height: $spinner-size;
|
|
261
|
+
border: $spinner-border-width solid var(--pa-border-color);
|
|
262
|
+
border-top: $spinner-border-width solid var(--pa-accent);
|
|
263
|
+
border-radius: 50%;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
&__text {
|
|
267
|
+
color: inherit;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
&__count {
|
|
271
|
+
color: var(--pa-text-color-2);
|
|
272
|
+
font-size: $font-size-xs;
|
|
273
|
+
margin-left: $spacing-xs;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Virtual Table Styles
|
|
278
|
+
.pa-virtual-table {
|
|
279
|
+
border: $border-width-base solid var(--pa-border-color);
|
|
280
|
+
border-radius: $border-radius;
|
|
281
|
+
height: $chart-height;
|
|
282
|
+
overflow: auto;
|
|
283
|
+
position: relative;
|
|
284
|
+
background-color: var(--pa-table-bg);
|
|
285
|
+
font-size: $font-size-sm; // Match pa-table font size
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.pa-virtual-table__header {
|
|
289
|
+
display: grid;
|
|
290
|
+
grid-template-columns: $dashboard-grid-col-sm 1fr 1fr $dashboard-grid-col-lg $dashboard-grid-col-md $dashboard-grid-col-md;
|
|
291
|
+
background: var(--pa-table-header-bg);
|
|
292
|
+
border-bottom: $border-width-medium solid var(--pa-border-color);
|
|
293
|
+
position: sticky;
|
|
294
|
+
top: 0;
|
|
295
|
+
z-index: 10;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.pa-virtual-table__header-cell {
|
|
299
|
+
padding: $virtual-table-cell-padding-v $virtual-table-cell-padding-h;
|
|
300
|
+
font-weight: $font-weight-semibold;
|
|
301
|
+
border-right: $border-width-base solid var(--pa-border-color);
|
|
302
|
+
background: var(--pa-table-header-bg);
|
|
303
|
+
color: var(--pa-text-color-1);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.pa-virtual-table__header-cell:last-child {
|
|
307
|
+
border-right: none;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.pa-virtual-table__body {
|
|
311
|
+
position: relative;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.pa-virtual-table__row {
|
|
315
|
+
display: grid;
|
|
316
|
+
grid-template-columns: $dashboard-grid-col-sm 1fr 1fr $dashboard-grid-col-lg $dashboard-grid-col-md $dashboard-grid-col-md;
|
|
317
|
+
border-bottom: $border-width-base solid var(--pa-border-color);
|
|
318
|
+
background: var(--pa-table-bg);
|
|
319
|
+
|
|
320
|
+
// Setup for hover accent border (same as pa-table)
|
|
321
|
+
@if $table-hover-accent-width > 0 {
|
|
322
|
+
border-#{$table-hover-accent-position}: #{$table-hover-accent-width} solid transparent;
|
|
323
|
+
transition: border-color $transition-normal $easing-smooth;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.pa-virtual-table__row:nth-child(even) {
|
|
328
|
+
background: var(--pa-table-stripe);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.pa-virtual-table__row:hover {
|
|
332
|
+
background: var(--pa-table-hover-bg);
|
|
333
|
+
|
|
334
|
+
// Apply hover accent if enabled (same as pa-table)
|
|
335
|
+
@if $table-hover-accent-width > 0 {
|
|
336
|
+
border-#{$table-hover-accent-position}-color: var(--pa-table-hover-accent-color);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.pa-virtual-table__cell {
|
|
341
|
+
padding: $virtual-table-cell-padding-v $virtual-table-cell-padding-h;
|
|
342
|
+
border-right: $border-width-base solid var(--pa-border-color);
|
|
343
|
+
overflow: hidden;
|
|
344
|
+
text-overflow: ellipsis;
|
|
345
|
+
white-space: nowrap;
|
|
346
|
+
color: var(--pa-text-color-1);
|
|
347
|
+
background-color: inherit;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
.pa-virtual-table__cell:last-child {
|
|
351
|
+
border-right: none;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Responsive Tables - Stackable Layout
|
|
355
|
+
.pa-table--responsive {
|
|
356
|
+
// Between tablet and mobile: Enable horizontal scrolling
|
|
357
|
+
@media (max-width: $tablet-breakpoint) and (min-width: $table-responsive-breakpoint + 1) {
|
|
358
|
+
// Table becomes scrollable but maintains desktop layout
|
|
359
|
+
overflow-x: auto;
|
|
360
|
+
-webkit-overflow-scrolling: touch; // Smooth scrolling on iOS
|
|
361
|
+
|
|
362
|
+
// Show subtle scroll hint with border
|
|
363
|
+
border-left: $border-width-base solid var(--pa-border-color);
|
|
364
|
+
border-right: $border-width-base solid var(--pa-border-color);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// Mobile: Stack into cards
|
|
368
|
+
@media (max-width: $table-responsive-breakpoint) {
|
|
369
|
+
// Hide table headers
|
|
370
|
+
thead {
|
|
371
|
+
display: none;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// Make each row a card
|
|
375
|
+
tbody tr {
|
|
376
|
+
display: block;
|
|
377
|
+
margin-bottom: $table-responsive-card-margin;
|
|
378
|
+
border: $border-width-base solid var(--pa-border-color);
|
|
379
|
+
border-radius: $border-radius;
|
|
380
|
+
overflow: hidden;
|
|
381
|
+
|
|
382
|
+
// Reset hover accent border for mobile
|
|
383
|
+
@if $table-hover-accent-width > 0 {
|
|
384
|
+
border-#{$table-hover-accent-position}: $border-width-base solid var(--pa-border-color) !important;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
&:last-child {
|
|
388
|
+
margin-bottom: 0;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// Make each cell a row within the card
|
|
393
|
+
tbody td {
|
|
394
|
+
display: block;
|
|
395
|
+
text-align: right;
|
|
396
|
+
padding: $table-responsive-card-padding;
|
|
397
|
+
position: relative;
|
|
398
|
+
border-bottom: $border-width-base solid var(--pa-border-color);
|
|
399
|
+
|
|
400
|
+
// Last cell in row has no border
|
|
401
|
+
&:last-child {
|
|
402
|
+
border-bottom: none;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Label before content
|
|
406
|
+
&::before {
|
|
407
|
+
content: attr(data-label);
|
|
408
|
+
position: absolute;
|
|
409
|
+
left: $table-responsive-card-padding;
|
|
410
|
+
top: $table-responsive-card-padding;
|
|
411
|
+
font-weight: $table-responsive-label-font-weight;
|
|
412
|
+
text-align: left;
|
|
413
|
+
width: $table-responsive-label-width;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// Value aligned to the right
|
|
417
|
+
padding-left: calc($table-responsive-label-width + $table-responsive-card-padding * 2);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// Disable col-auto effect in responsive view
|
|
421
|
+
.col-auto {
|
|
422
|
+
width: auto;
|
|
423
|
+
white-space: normal;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Striped variant - apply background to entire row (card)
|
|
427
|
+
&.pa-table--striped tbody tr:nth-child(even) {
|
|
428
|
+
background-color: var(--pa-table-stripe);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Ensure cells inside striped rows have transparent background
|
|
432
|
+
&.pa-table--striped tbody tr:nth-child(even) td {
|
|
433
|
+
background-color: transparent;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Hover effect on the card
|
|
437
|
+
tbody tr:hover {
|
|
438
|
+
background-color: transparent;
|
|
439
|
+
box-shadow: $shadow-sm;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
tbody tr:hover td {
|
|
443
|
+
background-color: transparent;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// Responsive Tables - CSS Grid Layout
|
|
449
|
+
// Allows custom grid layouts on mobile instead of simple stacking
|
|
450
|
+
.pa-table--responsive-grid {
|
|
451
|
+
// Between tablet and mobile: Enable horizontal scrolling
|
|
452
|
+
@media (max-width: $tablet-breakpoint) and (min-width: $table-responsive-breakpoint + 1) {
|
|
453
|
+
display: block;
|
|
454
|
+
overflow-x: auto;
|
|
455
|
+
-webkit-overflow-scrolling: touch;
|
|
456
|
+
border-left: $border-width-base solid var(--pa-border-color);
|
|
457
|
+
border-right: $border-width-base solid var(--pa-border-color);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// Mobile: CSS Grid layout
|
|
461
|
+
@media (max-width: $table-responsive-breakpoint) {
|
|
462
|
+
thead {
|
|
463
|
+
display: none;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
tbody tr {
|
|
467
|
+
display: block;
|
|
468
|
+
margin-bottom: $table-responsive-card-margin;
|
|
469
|
+
border: $border-width-base solid var(--pa-border-color);
|
|
470
|
+
border-radius: $border-radius;
|
|
471
|
+
overflow: hidden;
|
|
472
|
+
|
|
473
|
+
&:last-child {
|
|
474
|
+
margin-bottom: 0;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
tbody td {
|
|
479
|
+
display: block;
|
|
480
|
+
padding: $table-responsive-card-padding;
|
|
481
|
+
border-bottom: $border-width-base solid var(--pa-border-color);
|
|
482
|
+
|
|
483
|
+
&:last-child {
|
|
484
|
+
border-bottom: none;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Label above content (block layout by default)
|
|
488
|
+
&::before {
|
|
489
|
+
content: attr(data-label);
|
|
490
|
+
display: block;
|
|
491
|
+
font-weight: $table-responsive-label-font-weight;
|
|
492
|
+
color: var(--pa-text-color-2);
|
|
493
|
+
font-size: $font-size-xs;
|
|
494
|
+
margin-bottom: $spacing-xs;
|
|
495
|
+
text-transform: uppercase;
|
|
496
|
+
letter-spacing: 0.5px;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// Grid container modifier - apply to tbody tr
|
|
501
|
+
// Usage: Add data-grid class to <tr> elements that need custom grid
|
|
502
|
+
tbody tr[data-grid] {
|
|
503
|
+
display: grid;
|
|
504
|
+
padding: $table-responsive-card-padding;
|
|
505
|
+
gap: $table-responsive-card-padding;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// Grid cell modifier - cells within grid container
|
|
509
|
+
tbody tr[data-grid] td {
|
|
510
|
+
padding: 0;
|
|
511
|
+
border: none;
|
|
512
|
+
|
|
513
|
+
&::before {
|
|
514
|
+
margin-bottom: $spacing-xs;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
// Predefined grid layouts
|
|
519
|
+
// 2-column grid: data-grid="2"
|
|
520
|
+
tbody tr[data-grid="2"] {
|
|
521
|
+
grid-template-columns: 1fr 1fr;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// 3-column grid: data-grid="3"
|
|
525
|
+
tbody tr[data-grid="3"] {
|
|
526
|
+
grid-template-columns: 1fr 1fr 1fr;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
// Span helpers for custom layouts
|
|
530
|
+
// Use data-span="2" on td to span 2 columns
|
|
531
|
+
tbody tr[data-grid] td[data-span="2"] {
|
|
532
|
+
grid-column: span 2;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
tbody tr[data-grid] td[data-span="3"] {
|
|
536
|
+
grid-column: span 3;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
tbody tr[data-grid] td[data-span="full"] {
|
|
540
|
+
grid-column: 1 / -1; // Span all columns
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// Disable col-auto effect in responsive view
|
|
544
|
+
.col-auto {
|
|
545
|
+
width: auto;
|
|
546
|
+
white-space: normal;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Striped variant - apply background to entire row (card)
|
|
550
|
+
&.pa-table--striped tbody tr:nth-child(even) {
|
|
551
|
+
background-color: var(--pa-table-stripe);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// Ensure cells inside striped rows have transparent background
|
|
555
|
+
&.pa-table--striped tbody tr:nth-child(even) td {
|
|
556
|
+
background-color: transparent;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
// Hover effect
|
|
560
|
+
tbody tr:hover {
|
|
561
|
+
background-color: transparent;
|
|
562
|
+
box-shadow: $shadow-sm;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
|