@keenmate/pure-admin-core 1.4.0 → 1.4.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/dist/css/main.css CHANGED
@@ -5340,6 +5340,7 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5340
5340
  display: flex;
5341
5341
  justify-content: space-between;
5342
5342
  align-items: center;
5343
+ gap: 1.6rem;
5343
5344
  min-width: 0;
5344
5345
  }
5345
5346
  .pa-card__header h1,
@@ -5368,9 +5369,40 @@ body:not(.sidebar-hidden) .pa-layout__sidebar--icon-collapse .pa-sidebar__icon {
5368
5369
  color: var(--pa-text-color-1);
5369
5370
  font-size: 1.6rem;
5370
5371
  }
5372
+ .pa-card__header > h1,
5373
+ .pa-card__header > h2,
5374
+ .pa-card__header > h3,
5375
+ .pa-card__header > h4,
5376
+ .pa-card__header > h5,
5377
+ .pa-card__header > h6 {
5378
+ flex-shrink: 0;
5379
+ }
5380
+ .pa-card__header > p {
5381
+ flex: 1;
5382
+ min-width: 0;
5383
+ overflow: hidden;
5384
+ text-overflow: ellipsis;
5385
+ white-space: nowrap;
5386
+ color: var(--pa-text-color-2);
5387
+ font-size: 1.4rem;
5388
+ }
5389
+ .pa-card__header .pa-card__actions,
5390
+ .pa-card__header .pa-btn-group {
5391
+ flex-shrink: 0;
5392
+ }
5371
5393
  .pa-card__header .pa-btn {
5372
5394
  margin-top: -0.25rem;
5373
5395
  margin-bottom: -0.25rem;
5396
+ flex-shrink: 0;
5397
+ }
5398
+ .pa-card__header--wrap {
5399
+ flex-wrap: wrap;
5400
+ }
5401
+ .pa-card__header--wrap > p {
5402
+ white-space: normal;
5403
+ flex-basis: 100%;
5404
+ order: 1;
5405
+ margin-top: 0.4rem;
5374
5406
  }
5375
5407
  .pa-card__title {
5376
5408
  display: flex;
@@ -10501,6 +10533,10 @@ web-multiselect {
10501
10533
  .pa-table-card:hover {
10502
10534
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
10503
10535
  }
10536
+ .pa-table-card:has(.pa-detail-view) .pa-table-card__body {
10537
+ position: relative;
10538
+ overflow: hidden;
10539
+ }
10504
10540
  .pa-table-card__header {
10505
10541
  padding: 0.5rem 1rem;
10506
10542
  min-height: 4rem;
@@ -10569,6 +10605,27 @@ web-multiselect {
10569
10605
  .pa-table-card__body .pa-table tbody tr:last-child td {
10570
10606
  border-bottom: none;
10571
10607
  }
10608
+ .pa-table-card__body .pa-detail-view {
10609
+ height: 100%;
10610
+ }
10611
+ .pa-table-card__body .pa-detail-view .pa-detail-view__main .pa-table {
10612
+ border-radius: 0;
10613
+ }
10614
+ .pa-table-card__body .pa-detail-view .pa-detail-view__main .pa-table th:first-child,
10615
+ .pa-table-card__body .pa-detail-view .pa-detail-view__main .pa-table td:first-child {
10616
+ padding-inline-start: 1rem;
10617
+ }
10618
+ .pa-table-card__body .pa-detail-view .pa-detail-view__main .pa-table th:last-child,
10619
+ .pa-table-card__body .pa-detail-view .pa-detail-view__main .pa-table td:last-child {
10620
+ padding-inline-end: 1rem;
10621
+ }
10622
+ .pa-table-card__body .pa-detail-view .pa-detail-view__main .pa-table tbody tr:last-child td {
10623
+ border-bottom: none;
10624
+ }
10625
+ .pa-table-card__body .pa-detail-view .pa-detail-view__main web-grid {
10626
+ --wg-cell-padding-left: 1rem;
10627
+ --wg-cell-padding-right: 1rem;
10628
+ }
10572
10629
  .pa-table-card__footer {
10573
10630
  padding: 1.2rem 1rem;
10574
10631
  border-top: 1px solid var(--pa-border-color);
@@ -10724,6 +10781,10 @@ web-multiselect {
10724
10781
  border-radius: 0;
10725
10782
  padding-inline: 0;
10726
10783
  }
10784
+ .pa-table-card--plain .pa-table-card__body:has(.pa-detail-view--overlay) {
10785
+ position: relative;
10786
+ overflow: hidden;
10787
+ }
10727
10788
  .pa-table-card--plain .pa-table-card__footer {
10728
10789
  background: transparent;
10729
10790
  border-top: none;
@@ -13771,14 +13832,17 @@ code {
13771
13832
  top: 0;
13772
13833
  inset-inline-end: 0;
13773
13834
  height: 100%;
13774
- z-index: 2;
13835
+ z-index: 3501;
13836
+ }
13837
+ .pa-detail-view--overlay .pa-detail-view__panel--open {
13838
+ max-width: 100%;
13775
13839
  }
13776
13840
 
13777
13841
  .pa-detail-view__overlay {
13778
13842
  position: absolute;
13779
13843
  inset: 0;
13780
13844
  background-color: var(--pa-detail-panel-overlay-bg);
13781
- z-index: 1;
13845
+ z-index: 3500;
13782
13846
  opacity: 0;
13783
13847
  visibility: hidden;
13784
13848
  cursor: pointer;
@@ -14559,6 +14623,62 @@ html.font-size-xlarge {
14559
14623
  max-height: 50rem;
14560
14624
  }
14561
14625
 
14626
+ .h-full {
14627
+ height: 100%;
14628
+ }
14629
+
14630
+ .h-screen {
14631
+ height: 100vh;
14632
+ }
14633
+
14634
+ .min-h-full {
14635
+ min-height: 100%;
14636
+ }
14637
+
14638
+ .min-h-screen {
14639
+ min-height: 100vh;
14640
+ }
14641
+
14642
+ .max-h-full {
14643
+ max-height: 100%;
14644
+ }
14645
+
14646
+ .max-h-screen {
14647
+ max-height: 100vh;
14648
+ }
14649
+
14650
+ .flex-1 {
14651
+ flex: 1 1 0%;
14652
+ }
14653
+
14654
+ .flex-auto {
14655
+ flex: 1 1 auto;
14656
+ }
14657
+
14658
+ .flex-initial {
14659
+ flex: 0 1 auto;
14660
+ }
14661
+
14662
+ .flex-none {
14663
+ flex: none;
14664
+ }
14665
+
14666
+ .flex-grow {
14667
+ flex-grow: 1;
14668
+ }
14669
+
14670
+ .flex-grow-0 {
14671
+ flex-grow: 0;
14672
+ }
14673
+
14674
+ .flex-shrink {
14675
+ flex-shrink: 1;
14676
+ }
14677
+
14678
+ .flex-shrink-0 {
14679
+ flex-shrink: 0;
14680
+ }
14681
+
14562
14682
  .overflow-auto {
14563
14683
  overflow: auto;
14564
14684
  }
@@ -14594,6 +14714,10 @@ html.font-size-xlarge {
14594
14714
  overflow-x: overlay;
14595
14715
  }
14596
14716
 
14717
+ .pa-scroll-lock {
14718
+ overflow: hidden !important;
14719
+ }
14720
+
14597
14721
  .cursor-pointer {
14598
14722
  cursor: pointer;
14599
14723
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keenmate/pure-admin-core",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Lightweight, data-focused HTML/CSS admin framework built with PureCSS foundation and comprehensive component system",
5
5
  "style": "dist/css/main.css",
6
6
  "exports": {
@@ -38,7 +38,7 @@
38
38
  "components",
39
39
  "ui-kit"
40
40
  ],
41
- "author": "Pure Admin",
41
+ "author": "KeenMate",
42
42
  "license": "MIT",
43
43
  "peerDependencies": {
44
44
  "sass": "^1.0.0"
@@ -48,12 +48,13 @@
48
48
  },
49
49
  "repository": {
50
50
  "type": "git",
51
- "url": "git+https://github.com/pure-admin/core.git"
51
+ "url": "git+https://github.com/KeenMate/pure-admin.git",
52
+ "directory": "packages/core"
52
53
  },
53
54
  "bugs": {
54
- "url": "https://github.com/pure-admin/core/issues"
55
+ "url": "https://github.com/KeenMate/pure-admin/issues"
55
56
  },
56
- "homepage": "https://github.com/pure-admin/core#readme",
57
+ "homepage": "https://github.com/KeenMate/pure-admin#readme",
57
58
  "publishConfig": {
58
59
  "access": "public"
59
60
  }
@@ -29,6 +29,7 @@
29
29
  display: flex;
30
30
  justify-content: space-between;
31
31
  align-items: center;
32
+ gap: $spacing-base; // Gap between header elements (title, description, actions)
32
33
  min-width: 0; // Enable text truncation
33
34
 
34
35
  // Reset margins/paddings for all native elements
@@ -61,10 +62,50 @@
61
62
  font-size: $font-size-base;
62
63
  }
63
64
 
65
+ // Direct heading children - don't shrink (for three-part layout)
66
+ > h1,
67
+ > h2,
68
+ > h3,
69
+ > h4,
70
+ > h5,
71
+ > h6 {
72
+ flex-shrink: 0;
73
+ }
74
+
75
+ // Description paragraphs - flexible middle, truncate with ellipsis
76
+ > p {
77
+ flex: 1;
78
+ min-width: 0;
79
+ overflow: hidden;
80
+ text-overflow: ellipsis;
81
+ white-space: nowrap;
82
+ color: var(--pa-text-color-2);
83
+ font-size: $font-size-sm;
84
+ }
85
+
86
+ // Actions container - fixed, doesn't shrink
87
+ .pa-card__actions,
88
+ .pa-btn-group {
89
+ flex-shrink: 0;
90
+ }
91
+
64
92
  // Buttons in card headers - negative margin to prevent header height growth
65
93
  .pa-btn {
66
94
  margin-top: -0.25rem;
67
95
  margin-bottom: -0.25rem;
96
+ flex-shrink: 0;
97
+ }
98
+
99
+ // Wrap modifier - allow description to wrap (for mobile or long descriptions)
100
+ &--wrap {
101
+ flex-wrap: wrap;
102
+
103
+ > p {
104
+ white-space: normal;
105
+ flex-basis: 100%;
106
+ order: 1;
107
+ margin-top: $spacing-xs;
108
+ }
68
109
  }
69
110
  }
70
111
 
@@ -66,7 +66,12 @@
66
66
  top: 0;
67
67
  inset-inline-end: 0; // RTL: flips to left
68
68
  height: 100%;
69
- z-index: 2;
69
+ z-index: $z-index-detail-panel-card + 1; // 3501 - Below header (4000)
70
+
71
+ // In card overlay mode, constrain panel width to container
72
+ &--open {
73
+ max-width: 100%; // Don't exceed container width
74
+ }
70
75
  }
71
76
  }
72
77
 
@@ -75,7 +80,7 @@
75
80
  position: absolute;
76
81
  inset: 0; // Covers full container
77
82
  background-color: var(--pa-detail-panel-overlay-bg);
78
- z-index: 1;
83
+ z-index: $z-index-detail-panel-card; // 3500 - Below panel and header
79
84
  opacity: 0;
80
85
  visibility: hidden;
81
86
  cursor: pointer;
@@ -79,6 +79,14 @@
79
79
  box-shadow: $shadow-lg;
80
80
  }
81
81
 
82
+ // When containing a detail view, allow body to establish positioning context
83
+ &:has(.pa-detail-view) {
84
+ .pa-table-card__body {
85
+ position: relative;
86
+ overflow: hidden; // Clip detail panel to card boundaries
87
+ }
88
+ }
89
+
82
90
  &__header {
83
91
  padding: $card-header-padding-v $card-header-padding-h;
84
92
  min-height: $card-header-min-height;
@@ -162,6 +170,39 @@
162
170
  border-bottom: none;
163
171
  }
164
172
  }
173
+
174
+ // Detail view inside table card body
175
+ // Supports both inline split-view and overlay modes
176
+ .pa-detail-view {
177
+ height: 100%;
178
+
179
+ // Table inside detail view main area
180
+ .pa-detail-view__main {
181
+ .pa-table {
182
+ border-radius: 0;
183
+
184
+ th:first-child,
185
+ td:first-child {
186
+ padding-inline-start: $card-header-padding-h;
187
+ }
188
+
189
+ th:last-child,
190
+ td:last-child {
191
+ padding-inline-end: $card-header-padding-h;
192
+ }
193
+
194
+ tbody tr:last-child td {
195
+ border-bottom: none;
196
+ }
197
+ }
198
+
199
+ // web-grid inside detail view
200
+ web-grid {
201
+ --wg-cell-padding-left: #{$card-header-padding-h};
202
+ --wg-cell-padding-right: #{$card-header-padding-h};
203
+ }
204
+ }
205
+ }
165
206
  }
166
207
 
167
208
  &__footer {
@@ -263,6 +304,15 @@
263
304
  padding-inline: 0;
264
305
  }
265
306
 
307
+ // Body in plain mode with detail view - ensure proper containment
308
+ .pa-table-card__body {
309
+ // When containing overlay detail view, establish positioning context
310
+ &:has(.pa-detail-view--overlay) {
311
+ position: relative;
312
+ overflow: hidden;
313
+ }
314
+ }
315
+
266
316
  // Footer in plain mode
267
317
  .pa-table-card__footer {
268
318
  background: transparent;
@@ -94,6 +94,24 @@ html.font-size-xlarge {
94
94
  .max-h-40x { max-height: 40rem; } // 640px
95
95
  .max-h-50x { max-height: 50rem; } // 800px
96
96
 
97
+ // Percentage-based height utilities - for filling available space
98
+ .h-full { height: 100%; }
99
+ .h-screen { height: 100vh; }
100
+ .min-h-full { min-height: 100%; }
101
+ .min-h-screen { min-height: 100vh; }
102
+ .max-h-full { max-height: 100%; }
103
+ .max-h-screen { max-height: 100vh; }
104
+
105
+ // Flex utilities - for filling available space in flex containers
106
+ .flex-1 { flex: 1 1 0%; } // Grow and shrink equally, ignore content size
107
+ .flex-auto { flex: 1 1 auto; } // Grow and shrink, based on content size
108
+ .flex-initial { flex: 0 1 auto; } // Shrink but don't grow (default)
109
+ .flex-none { flex: none; } // Don't grow or shrink
110
+ .flex-grow { flex-grow: 1; } // Grow to fill space
111
+ .flex-grow-0 { flex-grow: 0; } // Don't grow
112
+ .flex-shrink { flex-shrink: 1; } // Allow shrinking
113
+ .flex-shrink-0 { flex-shrink: 0; } // Don't shrink
114
+
97
115
  // Overflow utilities - pair with height/max-height for scrollable content
98
116
  .overflow-auto { overflow: auto; }
99
117
  .overflow-y-auto { overflow-y: auto; }
@@ -118,6 +136,12 @@ html.font-size-xlarge {
118
136
  overflow-x: overlay;
119
137
  }
120
138
 
139
+ // Scroll lock - prevents body scrolling when overlays are open
140
+ // Apply to <body> element via JavaScript
141
+ .pa-scroll-lock {
142
+ overflow: hidden !important;
143
+ }
144
+
121
145
  // Cursor utilities
122
146
  .cursor-pointer { cursor: pointer; }
123
147
  .cursor-help { cursor: help; }
@@ -8,6 +8,7 @@ $z-index-base: 0 !default;
8
8
  $z-index-content: 1000 !default;
9
9
  $z-index-sidebar: 2000 !default;
10
10
  $z-index-sidebar-fixed: 3000 !default;
11
+ $z-index-detail-panel-card: 3500 !default; // Card overlay detail panel (below header)
11
12
  $z-index-header: 4000 !default;
12
13
  $z-index-profile-panel: 5000 !default;
13
14
  $z-index-modal-backdrop: 6000 !default;