@keenmate/pure-admin-core 2.3.1 → 2.3.2

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 (69) hide show
  1. package/README.md +5 -5
  2. package/dist/css/main.css +187 -178
  3. package/package.json +1 -1
  4. package/snippets/buttons.html +375 -365
  5. package/src/scss/_base-css-variables.scss +8 -0
  6. package/src/scss/_core.scss +121 -121
  7. package/src/scss/core-components/_alerts.scss +227 -227
  8. package/src/scss/core-components/_badges.scss +16 -16
  9. package/src/scss/core-components/_base.scss +125 -125
  10. package/src/scss/core-components/_buttons.scss +31 -16
  11. package/src/scss/core-components/_callouts.scss +152 -152
  12. package/src/scss/core-components/_cards.scss +488 -488
  13. package/src/scss/core-components/_checkbox-lists.scss +289 -289
  14. package/src/scss/core-components/_code.scss +141 -141
  15. package/src/scss/core-components/_command-palette.scss +509 -509
  16. package/src/scss/core-components/_comparison.scss +172 -172
  17. package/src/scss/core-components/_data-display.scss +9 -9
  18. package/src/scss/core-components/_data-viz.scss +9 -9
  19. package/src/scss/core-components/_detail-panel.scss +1 -1
  20. package/src/scss/core-components/_file-selector.scss +780 -780
  21. package/src/scss/core-components/_filter-card.scss +58 -58
  22. package/src/scss/core-components/_forms.scss +16 -16
  23. package/src/scss/core-components/_grid.scss +293 -293
  24. package/src/scss/core-components/_layout.scss +15 -15
  25. package/src/scss/core-components/_lists.scss +211 -211
  26. package/src/scss/core-components/_loaders.scss +277 -277
  27. package/src/scss/core-components/_logic-tree.scss +280 -280
  28. package/src/scss/core-components/_modals.scss +203 -203
  29. package/src/scss/core-components/_notifications.scss +320 -320
  30. package/src/scss/core-components/_pagers.scss +141 -141
  31. package/src/scss/core-components/_popconfirm.scss +170 -170
  32. package/src/scss/core-components/_profile.scss +405 -405
  33. package/src/scss/core-components/_scrollbars.scss +40 -40
  34. package/src/scss/core-components/_settings-panel.scss +141 -141
  35. package/src/scss/core-components/_statistics.scss +200 -201
  36. package/src/scss/core-components/_tables.scss +900 -900
  37. package/src/scss/core-components/_tabs.scss +504 -504
  38. package/src/scss/core-components/_timeline.scss +589 -589
  39. package/src/scss/core-components/_toasts.scss +425 -425
  40. package/src/scss/core-components/_tooltips.scss +605 -605
  41. package/src/scss/core-components/_utilities.scss +1 -1
  42. package/src/scss/core-components/_web-components-theme.scss +21 -21
  43. package/src/scss/core-components/badges/_badge-base.scss +121 -121
  44. package/src/scss/core-components/badges/_badge-group.scss +25 -25
  45. package/src/scss/core-components/badges/_composite-badge-variants.scss +396 -396
  46. package/src/scss/core-components/badges/_composite-badge.scss +70 -70
  47. package/src/scss/core-components/badges/_index.scss +10 -10
  48. package/src/scss/core-components/badges/_labels.scss +155 -155
  49. package/src/scss/core-components/forms/_checkboxes-radios.scss +205 -205
  50. package/src/scss/core-components/forms/_form-inputs.scss +3 -3
  51. package/src/scss/core-components/forms/_form-layout.scss +66 -66
  52. package/src/scss/core-components/forms/_form-states.scss +115 -115
  53. package/src/scss/core-components/forms/_index.scss +12 -12
  54. package/src/scss/core-components/forms/_input-groups.scss +154 -154
  55. package/src/scss/core-components/forms/_input-wrapper.scss +89 -89
  56. package/src/scss/core-components/forms/_query-editor.scss +313 -313
  57. package/src/scss/core-components/layout/_index.scss +11 -11
  58. package/src/scss/core-components/layout/_layout-container.scss +168 -168
  59. package/src/scss/core-components/layout/_layout-responsive.scss +99 -99
  60. package/src/scss/core-components/layout/_navbar-elements.scss +250 -250
  61. package/src/scss/core-components/layout/_navbar.scss +83 -83
  62. package/src/scss/core-components/layout/_sidebar-states.scss +237 -237
  63. package/src/scss/core-components/layout/_sidebar.scss +234 -234
  64. package/src/scss/main.scss +7 -7
  65. package/src/scss/utilities.scss +740 -740
  66. package/src/scss/variables/_base.scss +228 -228
  67. package/src/scss/variables/_components.scss +748 -748
  68. package/src/scss/variables/_layout.scss +65 -65
  69. package/src/scss/variables/_typography.scss +37 -37
@@ -1,293 +1,293 @@
1
- // ============================================================================
2
- // NATIVE GRID SYSTEM
3
- // ============================================================================
4
- // Flexbox-based grid with percentage and fraction columns
5
- // Replaces PureCSS grid dependency
6
- @use '../variables' as *;
7
- //
8
- // Naming convention:
9
- // - .pa-row → flex container
10
- // - .pa-col → auto-equal width column
11
- // - .pa-col-{n} → percentage width in 5% increments (5, 10, 15... 100)
12
- // - .pa-col-{x}-{y} → fraction width (1-2, 1-3, 2-3, 1-4, 3-4, 1-6, 5-6, etc.)
13
- // - .pa-col-{bp}-{n} → responsive variants (sm, md, lg, xl)
14
- // - .pa-offset-{n} → left margin offset
15
- // ============================================================================
16
-
17
- @use "sass:math";
18
-
19
- // Configuration (note: $grid-breakpoints is in _variables.scss for shared use)
20
- $grid-gutter: 0.8rem !default; // 8px gutter on each side (with 10px base), total gap = 16px
21
-
22
- // Column sizes - 5% increments (n*5, n=1-20)
23
- $grid-columns-5: (5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100);
24
-
25
- // Column sizes - fractions (for unintuitive percentages)
26
- $grid-columns-fractions: (
27
- '1-2': 50%,
28
- '1-3': 33.333%,
29
- '2-3': 66.667%,
30
- '1-4': 25%,
31
- '3-4': 75%,
32
- '1-5': 20%,
33
- '2-5': 40%,
34
- '3-5': 60%,
35
- '4-5': 80%,
36
- '1-6': 16.667%,
37
- '5-6': 83.333%,
38
- '1-12': 8.333%,
39
- '5-12': 41.667%,
40
- '7-12': 58.333%,
41
- '11-12': 91.667%
42
- );
43
-
44
- // ============================================================================
45
- // ROW (Container)
46
- // ============================================================================
47
- .pa-row {
48
- display: flex;
49
- flex-wrap: wrap;
50
- margin-inline: -$grid-gutter; // RTL: flips automatically
51
- row-gap: $grid-gutter; // Vertical gap when columns wrap (half the horizontal gutter total)
52
-
53
- // Nested rows reset margins
54
- .pa-row {
55
- margin-inline: 0;
56
- }
57
- }
58
-
59
- // Row modifiers
60
- .pa-row--no-gutter {
61
- margin-inline: 0;
62
-
63
- > [class*="pa-col"] {
64
- padding-inline: 0;
65
- }
66
- }
67
-
68
- .pa-row--center {
69
- justify-content: center;
70
- }
71
-
72
- .pa-row--end {
73
- justify-content: flex-end;
74
- }
75
-
76
- .pa-row--between {
77
- justify-content: space-between;
78
- }
79
-
80
- .pa-row--around {
81
- justify-content: space-around;
82
- }
83
-
84
- .pa-row--stretch {
85
- align-items: stretch;
86
- }
87
-
88
- .pa-row--top {
89
- align-items: flex-start;
90
- }
91
-
92
- .pa-row--middle {
93
- align-items: center;
94
- }
95
-
96
- .pa-row--bottom {
97
- align-items: flex-end;
98
- }
99
-
100
- .pa-row--same-height {
101
- > [class*="pa-col"] {
102
- > .pa-card {
103
- height: 100%;
104
- }
105
- }
106
- }
107
-
108
- // ============================================================================
109
- // COLUMN (Base)
110
- // ============================================================================
111
- .pa-col {
112
- flex: 1;
113
- padding-inline: $grid-gutter; // RTL: flips automatically
114
- min-width: 0; // Prevent content overflow
115
- }
116
-
117
- // Auto-width column
118
- .pa-col-auto {
119
- flex: 0 0 auto;
120
- width: auto;
121
- padding-inline: $grid-gutter;
122
- }
123
-
124
- // ============================================================================
125
- // PERCENTAGE COLUMNS (Base - 5% increments)
126
- // ============================================================================
127
- @each $size in $grid-columns-5 {
128
- .pa-col-#{$size} {
129
- flex: 0 0 math.percentage(math.div($size, 100));
130
- max-width: math.percentage(math.div($size, 100));
131
- padding-inline: $grid-gutter; // RTL: flips automatically
132
- min-width: 0; // Prevent content overflow
133
- }
134
- }
135
-
136
- // ============================================================================
137
- // FRACTION COLUMNS (Base - intuitive naming)
138
- // ============================================================================
139
- @each $name, $width in $grid-columns-fractions {
140
- .pa-col-#{$name} {
141
- flex: 0 0 $width;
142
- max-width: $width;
143
- padding-inline: $grid-gutter; // RTL: flips automatically
144
- min-width: 0; // Prevent content overflow
145
- }
146
- }
147
-
148
- // ============================================================================
149
- // OFFSETS (Base - 5% increments)
150
- // ============================================================================
151
- @each $size in $grid-columns-5 {
152
- @if $size < 100 {
153
- .pa-offset-#{$size} {
154
- margin-inline-start: math.percentage(math.div($size, 100)); // RTL: flips to margin-right
155
- }
156
- }
157
- }
158
-
159
- // ============================================================================
160
- // RESPONSIVE COLUMNS & OFFSETS (Container-query based)
161
- // Requires a containment context ancestor: .pa-layout__main (automatic) or .pa-cq
162
- // ============================================================================
163
- @each $bp, $min-width in $grid-breakpoints {
164
- @container (min-width: #{$min-width}) {
165
- // Responsive percentage columns (5% increments)
166
- @each $size in $grid-columns-5 {
167
- .pa-col-#{$bp}-#{$size} {
168
- flex: 0 0 math.percentage(math.div($size, 100));
169
- max-width: math.percentage(math.div($size, 100));
170
- padding-inline: $grid-gutter; // RTL: flips automatically
171
- min-width: 0; // Prevent content overflow
172
- }
173
- }
174
-
175
- // Responsive fraction columns
176
- @each $name, $width in $grid-columns-fractions {
177
- .pa-col-#{$bp}-#{$name} {
178
- flex: 0 0 $width;
179
- max-width: $width;
180
- padding-inline: $grid-gutter; // RTL: flips automatically
181
- min-width: 0; // Prevent content overflow
182
- }
183
- }
184
-
185
- // Responsive offsets (5% increments)
186
- @each $size in $grid-columns-5 {
187
- @if $size < 100 {
188
- .pa-offset-#{$bp}-#{$size} {
189
- margin-inline-start: math.percentage(math.div($size, 100)); // RTL: flips to margin-right
190
- }
191
- }
192
- }
193
-
194
- // Responsive auto column
195
- .pa-col-#{$bp}-auto {
196
- flex: 0 0 auto;
197
- width: auto;
198
- }
199
- }
200
- }
201
-
202
- // ============================================================================
203
- // COLUMN MODIFIERS
204
- // ============================================================================
205
- .pa-col--no-padding {
206
- padding-inline: 0;
207
- }
208
-
209
- .pa-col--grow {
210
- flex-grow: 1;
211
- }
212
-
213
- .pa-col--shrink {
214
- flex-shrink: 1;
215
- }
216
-
217
- // ============================================================================
218
- // VISIBILITY HELPERS (Responsive)
219
- // ============================================================================
220
- .pa-hide {
221
- display: none !important;
222
- }
223
-
224
- .pa-show {
225
- display: block !important;
226
- }
227
-
228
- @each $bp, $min-width in $grid-breakpoints {
229
- // Hide at breakpoint and up
230
- @media (min-width: $min-width) {
231
- .pa-hide-#{$bp} {
232
- display: none !important;
233
- }
234
-
235
- .pa-show-#{$bp} {
236
- display: block !important;
237
- }
238
- }
239
-
240
- // Hide below breakpoint
241
- @media (max-width: $min-width - 1px) {
242
- .pa-hide-below-#{$bp} {
243
- display: none !important;
244
- }
245
-
246
- .pa-show-below-#{$bp} {
247
- display: block !important;
248
- }
249
- }
250
- }
251
-
252
- // ============================================================================
253
- // REMOVE BOTTOM PADDING IN CARDS
254
- // ============================================================================
255
- // Remove bottom padding from grid columns inside cards to avoid conflicts
256
- .pa-card__body .pa-row > [class*="pa-col"] {
257
- padding-bottom: 0;
258
- }
259
-
260
- // ============================================================================
261
- // AUTO-STACK ON MOBILE
262
- // ============================================================================
263
- // Base percentage/fraction columns auto-stack to 100% on mobile
264
- // Use explicit responsive classes (pa-col-sm-*, pa-col-md-*) to override
265
- @media (max-width: $mobile-breakpoint) {
266
- // Stack percentage columns
267
- @each $size in $grid-columns-5 {
268
- @if $size < 100 {
269
- .pa-col-#{$size} {
270
- flex: 0 0 100%;
271
- max-width: 100%;
272
- }
273
- }
274
- }
275
-
276
- // Stack fraction columns
277
- @each $name, $width in $grid-columns-fractions {
278
- .pa-col-#{$name} {
279
- flex: 0 0 100%;
280
- max-width: 100%;
281
- }
282
- }
283
-
284
- // Reset base offsets when stacking
285
- @each $size in $grid-columns-5 {
286
- @if $size < 100 {
287
- .pa-offset-#{$size} {
288
- margin-inline-start: 0;
289
- }
290
- }
291
- }
292
- }
293
-
1
+ // ============================================================================
2
+ // NATIVE GRID SYSTEM
3
+ // ============================================================================
4
+ // Flexbox-based grid with percentage and fraction columns
5
+ // Replaces PureCSS grid dependency
6
+ @use '../variables' as *;
7
+ //
8
+ // Naming convention:
9
+ // - .pa-row → flex container
10
+ // - .pa-col → auto-equal width column
11
+ // - .pa-col-{n} → percentage width in 5% increments (5, 10, 15... 100)
12
+ // - .pa-col-{x}-{y} → fraction width (1-2, 1-3, 2-3, 1-4, 3-4, 1-6, 5-6, etc.)
13
+ // - .pa-col-{bp}-{n} → responsive variants (sm, md, lg, xl)
14
+ // - .pa-offset-{n} → left margin offset
15
+ // ============================================================================
16
+
17
+ @use "sass:math";
18
+
19
+ // Configuration (note: $grid-breakpoints is in _variables.scss for shared use)
20
+ $grid-gutter: 0.8rem !default; // 8px gutter on each side (with 10px base), total gap = 16px
21
+
22
+ // Column sizes - 5% increments (n*5, n=1-20)
23
+ $grid-columns-5: (5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100);
24
+
25
+ // Column sizes - fractions (for unintuitive percentages)
26
+ $grid-columns-fractions: (
27
+ '1-2': 50%,
28
+ '1-3': 33.333%,
29
+ '2-3': 66.667%,
30
+ '1-4': 25%,
31
+ '3-4': 75%,
32
+ '1-5': 20%,
33
+ '2-5': 40%,
34
+ '3-5': 60%,
35
+ '4-5': 80%,
36
+ '1-6': 16.667%,
37
+ '5-6': 83.333%,
38
+ '1-12': 8.333%,
39
+ '5-12': 41.667%,
40
+ '7-12': 58.333%,
41
+ '11-12': 91.667%
42
+ );
43
+
44
+ // ============================================================================
45
+ // ROW (Container)
46
+ // ============================================================================
47
+ .pa-row {
48
+ display: flex;
49
+ flex-wrap: wrap;
50
+ margin-inline: -$grid-gutter; // RTL: flips automatically
51
+ row-gap: $grid-gutter; // Vertical gap when columns wrap (half the horizontal gutter total)
52
+
53
+ // Nested rows reset margins
54
+ .pa-row {
55
+ margin-inline: 0;
56
+ }
57
+ }
58
+
59
+ // Row modifiers
60
+ .pa-row--no-gutter {
61
+ margin-inline: 0;
62
+
63
+ > [class*="pa-col"] {
64
+ padding-inline: 0;
65
+ }
66
+ }
67
+
68
+ .pa-row--center {
69
+ justify-content: center;
70
+ }
71
+
72
+ .pa-row--end {
73
+ justify-content: flex-end;
74
+ }
75
+
76
+ .pa-row--between {
77
+ justify-content: space-between;
78
+ }
79
+
80
+ .pa-row--around {
81
+ justify-content: space-around;
82
+ }
83
+
84
+ .pa-row--stretch {
85
+ align-items: stretch;
86
+ }
87
+
88
+ .pa-row--top {
89
+ align-items: flex-start;
90
+ }
91
+
92
+ .pa-row--middle {
93
+ align-items: center;
94
+ }
95
+
96
+ .pa-row--bottom {
97
+ align-items: flex-end;
98
+ }
99
+
100
+ .pa-row--same-height {
101
+ > [class*="pa-col"] {
102
+ > .pa-card {
103
+ height: 100%;
104
+ }
105
+ }
106
+ }
107
+
108
+ // ============================================================================
109
+ // COLUMN (Base)
110
+ // ============================================================================
111
+ .pa-col {
112
+ flex: 1;
113
+ padding-inline: $grid-gutter; // RTL: flips automatically
114
+ min-width: 0; // Prevent content overflow
115
+ }
116
+
117
+ // Auto-width column
118
+ .pa-col-auto {
119
+ flex: 0 0 auto;
120
+ width: auto;
121
+ padding-inline: $grid-gutter;
122
+ }
123
+
124
+ // ============================================================================
125
+ // PERCENTAGE COLUMNS (Base - 5% increments)
126
+ // ============================================================================
127
+ @each $size in $grid-columns-5 {
128
+ .pa-col-#{$size} {
129
+ flex: 0 0 math.percentage(math.div($size, 100));
130
+ max-width: math.percentage(math.div($size, 100));
131
+ padding-inline: $grid-gutter; // RTL: flips automatically
132
+ min-width: 0; // Prevent content overflow
133
+ }
134
+ }
135
+
136
+ // ============================================================================
137
+ // FRACTION COLUMNS (Base - intuitive naming)
138
+ // ============================================================================
139
+ @each $name, $width in $grid-columns-fractions {
140
+ .pa-col-#{$name} {
141
+ flex: 0 0 $width;
142
+ max-width: $width;
143
+ padding-inline: $grid-gutter; // RTL: flips automatically
144
+ min-width: 0; // Prevent content overflow
145
+ }
146
+ }
147
+
148
+ // ============================================================================
149
+ // OFFSETS (Base - 5% increments)
150
+ // ============================================================================
151
+ @each $size in $grid-columns-5 {
152
+ @if $size < 100 {
153
+ .pa-offset-#{$size} {
154
+ margin-inline-start: math.percentage(math.div($size, 100)); // RTL: flips to margin-right
155
+ }
156
+ }
157
+ }
158
+
159
+ // ============================================================================
160
+ // RESPONSIVE COLUMNS & OFFSETS (Container-query based)
161
+ // Requires a containment context ancestor: .pa-layout__main (automatic) or .pa-cq
162
+ // ============================================================================
163
+ @each $bp, $min-width in $grid-breakpoints {
164
+ @container (min-width: #{$min-width}) {
165
+ // Responsive percentage columns (5% increments)
166
+ @each $size in $grid-columns-5 {
167
+ .pa-col-#{$bp}-#{$size} {
168
+ flex: 0 0 math.percentage(math.div($size, 100));
169
+ max-width: math.percentage(math.div($size, 100));
170
+ padding-inline: $grid-gutter; // RTL: flips automatically
171
+ min-width: 0; // Prevent content overflow
172
+ }
173
+ }
174
+
175
+ // Responsive fraction columns
176
+ @each $name, $width in $grid-columns-fractions {
177
+ .pa-col-#{$bp}-#{$name} {
178
+ flex: 0 0 $width;
179
+ max-width: $width;
180
+ padding-inline: $grid-gutter; // RTL: flips automatically
181
+ min-width: 0; // Prevent content overflow
182
+ }
183
+ }
184
+
185
+ // Responsive offsets (5% increments)
186
+ @each $size in $grid-columns-5 {
187
+ @if $size < 100 {
188
+ .pa-offset-#{$bp}-#{$size} {
189
+ margin-inline-start: math.percentage(math.div($size, 100)); // RTL: flips to margin-right
190
+ }
191
+ }
192
+ }
193
+
194
+ // Responsive auto column
195
+ .pa-col-#{$bp}-auto {
196
+ flex: 0 0 auto;
197
+ width: auto;
198
+ }
199
+ }
200
+ }
201
+
202
+ // ============================================================================
203
+ // COLUMN MODIFIERS
204
+ // ============================================================================
205
+ .pa-col--no-padding {
206
+ padding-inline: 0;
207
+ }
208
+
209
+ .pa-col--grow {
210
+ flex-grow: 1;
211
+ }
212
+
213
+ .pa-col--shrink {
214
+ flex-shrink: 1;
215
+ }
216
+
217
+ // ============================================================================
218
+ // VISIBILITY HELPERS (Responsive)
219
+ // ============================================================================
220
+ .pa-hide {
221
+ display: none !important;
222
+ }
223
+
224
+ .pa-show {
225
+ display: block !important;
226
+ }
227
+
228
+ @each $bp, $min-width in $grid-breakpoints {
229
+ // Hide at breakpoint and up
230
+ @media (min-width: $min-width) {
231
+ .pa-hide-#{$bp} {
232
+ display: none !important;
233
+ }
234
+
235
+ .pa-show-#{$bp} {
236
+ display: block !important;
237
+ }
238
+ }
239
+
240
+ // Hide below breakpoint
241
+ @media (max-width: $min-width - 1px) {
242
+ .pa-hide-below-#{$bp} {
243
+ display: none !important;
244
+ }
245
+
246
+ .pa-show-below-#{$bp} {
247
+ display: block !important;
248
+ }
249
+ }
250
+ }
251
+
252
+ // ============================================================================
253
+ // REMOVE BOTTOM PADDING IN CARDS
254
+ // ============================================================================
255
+ // Remove bottom padding from grid columns inside cards to avoid conflicts
256
+ .pa-card__body .pa-row > [class*="pa-col"] {
257
+ padding-bottom: 0;
258
+ }
259
+
260
+ // ============================================================================
261
+ // AUTO-STACK ON MOBILE
262
+ // ============================================================================
263
+ // Base percentage/fraction columns auto-stack to 100% on mobile
264
+ // Use explicit responsive classes (pa-col-sm-*, pa-col-md-*) to override
265
+ @media (max-width: $mobile-breakpoint) {
266
+ // Stack percentage columns
267
+ @each $size in $grid-columns-5 {
268
+ @if $size < 100 {
269
+ .pa-col-#{$size} {
270
+ flex: 0 0 100%;
271
+ max-width: 100%;
272
+ }
273
+ }
274
+ }
275
+
276
+ // Stack fraction columns
277
+ @each $name, $width in $grid-columns-fractions {
278
+ .pa-col-#{$name} {
279
+ flex: 0 0 100%;
280
+ max-width: 100%;
281
+ }
282
+ }
283
+
284
+ // Reset base offsets when stacking
285
+ @each $size in $grid-columns-5 {
286
+ @if $size < 100 {
287
+ .pa-offset-#{$size} {
288
+ margin-inline-start: 0;
289
+ }
290
+ }
291
+ }
292
+ }
293
+
@@ -1,15 +1,15 @@
1
- /* ========================================
2
- Layout V2 - Based on Testbench Structure
3
- ======================================== */
4
-
5
- // ============================================================================
6
- // BACKWARD COMPATIBILITY AGGREGATOR
7
- // This file re-exports all layout components from the modular layout/ directory.
8
- // For new code, prefer importing from layout/ directly:
9
- // @use 'layout' as *;
10
- // or specific modules:
11
- // @use 'layout/navbar';
12
- // @use 'layout/sidebar';
13
- // ============================================================================
14
-
15
- @forward 'layout/index';
1
+ /* ========================================
2
+ Layout V2 - Based on Testbench Structure
3
+ ======================================== */
4
+
5
+ // ============================================================================
6
+ // BACKWARD COMPATIBILITY AGGREGATOR
7
+ // This file re-exports all layout components from the modular layout/ directory.
8
+ // For new code, prefer importing from layout/ directly:
9
+ // @use 'layout' as *;
10
+ // or specific modules:
11
+ // @use 'layout/navbar';
12
+ // @use 'layout/sidebar';
13
+ // ============================================================================
14
+
15
+ @forward 'layout/index';