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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keenmate/pure-admin-core",
3
- "version": "1.0.0-rc02",
3
+ "version": "1.0.0-rc04",
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": {
@@ -73,18 +73,19 @@
73
73
 
74
74
 
75
75
  <!-- FIXED WIDTH BADGES -->
76
+ <!-- Use wr-*/minwr-*/maxwr-* utilities with text-truncate for ellipsis -->
76
77
 
77
- <!-- Fixed Width 5x -->
78
- <span class="pa-badge pa-badge--primary pa-badge--w-5x">Status</span>
78
+ <!-- Fixed Width 8rem -->
79
+ <span class="pa-badge pa-badge--primary minwr-8 maxwr-8 text-truncate">Status</span>
79
80
 
80
- <!-- Fixed Width 8x with Ellipsis -->
81
+ <!-- Fixed Width 15rem with Ellipsis -->
81
82
  <span class="pa-tooltip pa-tooltip--bottom" data-tooltip="Very Long Badge Text That Needs Truncation">
82
- <span class="pa-badge pa-badge--info pa-badge--w-8x">Very Long Badge Text That Needs Truncation</span>
83
+ <span class="pa-badge pa-badge--info minwr-15 maxwr-15 text-truncate">Very Long Badge Text That Needs Truncation</span>
83
84
  </span>
84
85
 
85
86
  <!-- Fixed Width with Left Ellipsis (for paths, breadcrumbs) -->
86
87
  <span class="pa-tooltip pa-tooltip--bottom pa-tooltip--multiline" data-tooltip="Settings > User Preferences > Notifications > Email">
87
- <span class="pa-badge pa-badge--secondary pa-badge--w-6x pa-badge--ellipsis-left">Settings > User Preferences > Notifications > Email</span>
88
+ <span class="pa-badge pa-badge--secondary minwr-10 maxwr-10 text-truncate pa-badge--ellipsis-left">Settings > User Preferences > Notifications > Email</span>
88
89
  </span>
89
90
 
90
91
 
@@ -185,8 +186,8 @@ SIZES:
185
186
 
186
187
  MODIFIERS:
187
188
  - .pa-badge--pill: Rounded pill shape
188
- - .pa-badge--w-1x through .pa-badge--w-10x: Fixed widths (1rem to 10rem)
189
189
  - .pa-badge--ellipsis-left: Truncate from left instead of right
190
+ - Use utilities for fixed width: minwr-* maxwr-* text-truncate
190
191
 
191
192
  ELEMENTS:
192
193
  - .pa-badge__icon: Icon container inside badge
@@ -108,23 +108,24 @@
108
108
 
109
109
 
110
110
  <!-- BUTTON GROUP GAP VARIANTS -->
111
+ <!-- Use gap-* utility classes to adjust spacing -->
111
112
 
112
- <!-- Compact Gap (tight spacing) -->
113
- <div class="pa-btn-group pa-btn-group--compact">
113
+ <!-- Compact Gap (2px) -->
114
+ <div class="pa-btn-group gap-2">
114
115
  <button class="pa-btn pa-btn--primary">A</button>
115
116
  <button class="pa-btn pa-btn--primary">B</button>
116
117
  <button class="pa-btn pa-btn--primary">C</button>
117
118
  </div>
118
119
 
119
- <!-- Default Gap -->
120
+ <!-- Default Gap (3px) -->
120
121
  <div class="pa-btn-group">
121
122
  <button class="pa-btn pa-btn--primary">A</button>
122
123
  <button class="pa-btn pa-btn--primary">B</button>
123
124
  <button class="pa-btn pa-btn--primary">C</button>
124
125
  </div>
125
126
 
126
- <!-- Loose Gap (spacious) -->
127
- <div class="pa-btn-group pa-btn-group--loose">
127
+ <!-- Loose Gap (8px) -->
128
+ <div class="pa-btn-group gap-8">
128
129
  <button class="pa-btn pa-btn--primary">A</button>
129
130
  <button class="pa-btn pa-btn--primary">B</button>
130
131
  <button class="pa-btn pa-btn--primary">C</button>
@@ -233,15 +234,16 @@
233
234
 
234
235
 
235
236
  <!-- FIXED WIDTH BUTTONS -->
237
+ <!-- Use minwr-* utilities for min-width in rem -->
236
238
 
237
- <!-- Fixed Width 6x -->
238
- <button class="pa-btn pa-btn--primary pa-btn--w-6x">
239
+ <!-- Fixed Width 6rem -->
240
+ <button class="pa-btn pa-btn--primary minwr-6">
239
241
  <span class="pa-btn__icon">✓</span>
240
242
  OK
241
243
  </button>
242
244
 
243
- <!-- Fixed Width 8x -->
244
- <button class="pa-btn pa-btn--success pa-btn--w-8x">
245
+ <!-- Fixed Width 8rem -->
246
+ <button class="pa-btn pa-btn--success minwr-8">
245
247
  <span class="pa-btn__icon">→</span>
246
248
  Continue
247
249
  </button>
@@ -250,25 +252,25 @@
250
252
  <!-- BUTTON ALIGNMENT -->
251
253
 
252
254
  <!-- Left Aligned (icon flush to left) -->
253
- <button class="pa-btn pa-btn--primary pa-btn--w-8x pa-btn--align-left">
255
+ <button class="pa-btn pa-btn--primary minwr-8 pa-btn--align-left">
254
256
  <span class="pa-btn__icon">✓</span>
255
257
  Save
256
258
  </button>
257
259
 
258
260
  <!-- Right Aligned (icon flush to right) -->
259
- <button class="pa-btn pa-btn--primary pa-btn--w-8x pa-btn--align-right">
261
+ <button class="pa-btn pa-btn--primary minwr-8 pa-btn--align-right">
260
262
  Save
261
263
  <span class="pa-btn__icon">✓</span>
262
264
  </button>
263
265
 
264
266
  <!-- Center Aligned -->
265
- <button class="pa-btn pa-btn--primary pa-btn--w-8x pa-btn--align-center">
267
+ <button class="pa-btn pa-btn--primary minwr-8 pa-btn--align-center">
266
268
  <span class="pa-btn__icon">✓</span>
267
269
  Save
268
270
  </button>
269
271
 
270
272
  <!-- Justified (space-between) -->
271
- <button class="pa-btn pa-btn--primary pa-btn--w-8x pa-btn--align-justify">
273
+ <button class="pa-btn pa-btn--primary minwr-8 pa-btn--align-justify">
272
274
  <span class="pa-btn__icon">✓</span>
273
275
  Save
274
276
  </button>
@@ -0,0 +1,129 @@
1
+ <!-- ========================================
2
+ Callout Components
3
+ Documentation-style callouts with left border accent
4
+ ======================================== -->
5
+
6
+ <!-- BASIC CALLOUTS -->
7
+
8
+ <!-- Info Callout -->
9
+ <div class="pa-callout pa-callout--info">
10
+ <strong>Note:</strong> This is an informational callout for documentation tips and notes.
11
+ </div>
12
+
13
+ <!-- Success Callout -->
14
+ <div class="pa-callout pa-callout--success">
15
+ <strong>Success:</strong> Operation completed successfully. Your changes have been saved.
16
+ </div>
17
+
18
+ <!-- Warning Callout -->
19
+ <div class="pa-callout pa-callout--warning">
20
+ <strong>Warning:</strong> This action cannot be undone. Please proceed with caution.
21
+ </div>
22
+
23
+ <!-- Danger Callout -->
24
+ <div class="pa-callout pa-callout--danger">
25
+ <strong>Important:</strong> This feature is deprecated and will be removed in the next version.
26
+ </div>
27
+
28
+ <!-- Primary Callout -->
29
+ <div class="pa-callout pa-callout--primary">
30
+ <strong>Pro Tip:</strong> You can use keyboard shortcuts to speed up your workflow.
31
+ </div>
32
+
33
+ <!-- Secondary Callout -->
34
+ <div class="pa-callout pa-callout--secondary">
35
+ <strong>Note:</strong> This is a secondary callout with neutral styling.
36
+ </div>
37
+
38
+ <!-- ========================================
39
+ CALLOUTS WITH ICONS
40
+ ======================================== -->
41
+
42
+ <!-- Info with Icon -->
43
+ <div class="pa-callout pa-callout--info">
44
+ <span class="pa-callout__icon">💡</span>
45
+ <div class="pa-callout__content">
46
+ <div class="pa-callout__heading">Did you know?</div>
47
+ <p>You can hover over any element to see its tooltip. Tooltips provide additional context without cluttering the interface.</p>
48
+ </div>
49
+ </div>
50
+
51
+ <!-- Warning with Icon -->
52
+ <div class="pa-callout pa-callout--warning">
53
+ <span class="pa-callout__icon">⚠️</span>
54
+ <div class="pa-callout__content">
55
+ <div class="pa-callout__heading">Breaking Change</div>
56
+ <p>The <code>getData()</code> method now returns a Promise. Update your code to use <code>await</code> or <code>.then()</code>.</p>
57
+ </div>
58
+ </div>
59
+
60
+ <!-- Danger with Icon -->
61
+ <div class="pa-callout pa-callout--danger">
62
+ <span class="pa-callout__icon">🚨</span>
63
+ <div class="pa-callout__content">
64
+ <div class="pa-callout__heading">Security Notice</div>
65
+ <p>Never commit API keys or secrets to version control. Use environment variables instead.</p>
66
+ </div>
67
+ </div>
68
+
69
+ <!-- Success with Icon -->
70
+ <div class="pa-callout pa-callout--success">
71
+ <span class="pa-callout__icon">✅</span>
72
+ <div class="pa-callout__content">
73
+ <div class="pa-callout__heading">Best Practice</div>
74
+ <p>Always validate user input on both client and server side for maximum security.</p>
75
+ </div>
76
+ </div>
77
+
78
+ <!-- ========================================
79
+ CALLOUT SIZES
80
+ ======================================== -->
81
+
82
+ <!-- Small Callout -->
83
+ <div class="pa-callout pa-callout--info pa-callout--sm">
84
+ <strong>Note:</strong> This is a small callout for compact spaces.
85
+ </div>
86
+
87
+ <!-- Default Callout -->
88
+ <div class="pa-callout pa-callout--info">
89
+ <strong>Note:</strong> This is a default-sized callout.
90
+ </div>
91
+
92
+ <!-- Large Callout -->
93
+ <div class="pa-callout pa-callout--info pa-callout--lg">
94
+ <strong>Note:</strong> This is a large callout for prominent notices.
95
+ </div>
96
+
97
+ <!-- ========================================
98
+ CALLOUTS WITH LISTS
99
+ ======================================== -->
100
+
101
+ <!-- Callout with Unordered List -->
102
+ <div class="pa-callout pa-callout--info">
103
+ <div class="pa-callout__heading">Requirements</div>
104
+ <ul>
105
+ <li>Node.js version 16 or higher</li>
106
+ <li>npm version 8 or higher</li>
107
+ <li>A modern web browser</li>
108
+ </ul>
109
+ </div>
110
+
111
+ <!-- Callout with Ordered List -->
112
+ <div class="pa-callout pa-callout--warning">
113
+ <div class="pa-callout__heading">Migration Steps</div>
114
+ <ol>
115
+ <li>Backup your database</li>
116
+ <li>Update dependencies with <code>npm update</code></li>
117
+ <li>Run migrations with <code>npm run migrate</code></li>
118
+ <li>Verify the application starts correctly</li>
119
+ </ol>
120
+ </div>
121
+
122
+ <!-- ========================================
123
+ CALLOUTS WITH CODE
124
+ ======================================== -->
125
+
126
+ <!-- Callout with Inline Code -->
127
+ <div class="pa-callout pa-callout--primary">
128
+ <strong>Tip:</strong> Use <code>console.table()</code> instead of <code>console.log()</code> for arrays and objects to get a nicely formatted table output.
129
+ </div>
@@ -25,6 +25,7 @@
25
25
  ================================ -->
26
26
 
27
27
  <!-- Complete Profile Panel (place before closing </body> tag) -->
28
+ <!-- Note: Use title attributes on name/email for tooltips when text may be truncated -->
28
29
  <div class="pa-profile-panel" id="profilePanel">
29
30
  <div class="pa-profile-panel__overlay" onclick="closeProfilePanel()"></div>
30
31
  <div class="pa-profile-panel__content">
@@ -33,8 +34,8 @@
33
34
  <span class="pa-profile-panel__avatar-icon">👤</span>
34
35
  </div>
35
36
  <div class="pa-profile-panel__info">
36
- <h3 class="pa-profile-panel__name">John Doe</h3>
37
- <p class="pa-profile-panel__email">john.doe@company.com</p>
37
+ <h3 class="pa-profile-panel__name" title="John Doe">John Doe</h3>
38
+ <p class="pa-profile-panel__email" title="john.doe@company.com">john.doe@company.com</p>
38
39
  <span class="pa-profile-panel__role">Administrator</span>
39
40
  </div>
40
41
  <button class="pa-profile-panel__close" onclick="closeProfilePanel()" aria-label="Close Profile">
@@ -81,6 +82,112 @@
81
82
  </div>
82
83
 
83
84
 
85
+ <!-- ================================
86
+ PROFILE PANEL - WITH FIXED FOOTER
87
+ Actions fixed at bottom, content scrolls above
88
+ ================================ -->
89
+
90
+ <div class="pa-profile-panel" id="profilePanel">
91
+ <div class="pa-profile-panel__overlay" onclick="closeProfilePanel()"></div>
92
+ <div class="pa-profile-panel__content">
93
+ <div class="pa-profile-panel__header">
94
+ <div class="pa-profile-panel__avatar">
95
+ <span class="pa-profile-panel__avatar-icon">👤</span>
96
+ </div>
97
+ <div class="pa-profile-panel__info">
98
+ <h3 class="pa-profile-panel__name" title="John Doe">John Doe</h3>
99
+ <p class="pa-profile-panel__email" title="john.doe@company.com">john.doe@company.com</p>
100
+ <span class="pa-profile-panel__role">Administrator</span>
101
+ </div>
102
+ <button class="pa-profile-panel__close" onclick="closeProfilePanel()" aria-label="Close Profile">
103
+
104
+ </button>
105
+ </div>
106
+
107
+ <div class="pa-profile-panel__body">
108
+ <!-- Body content scrolls -->
109
+ <nav class="pa-profile-panel__nav">
110
+ <ul>
111
+ <li><a href="#profile" class="pa-profile-panel__nav-item">
112
+ <span class="pa-profile-panel__nav-icon">👤</span>
113
+ Profile Settings
114
+ </a></li>
115
+ <li><a href="#security" class="pa-profile-panel__nav-item">
116
+ <span class="pa-profile-panel__nav-icon">🔒</span>
117
+ Security
118
+ </a></li>
119
+ <li><a href="#notifications" class="pa-profile-panel__nav-item">
120
+ <span class="pa-profile-panel__nav-icon">🔔</span>
121
+ Notifications
122
+ </a></li>
123
+ <li><a href="#preferences" class="pa-profile-panel__nav-item">
124
+ <span class="pa-profile-panel__nav-icon">⚙️</span>
125
+ Preferences
126
+ </a></li>
127
+ <li><a href="#help" class="pa-profile-panel__nav-item">
128
+ <span class="pa-profile-panel__nav-icon">❓</span>
129
+ Help & Support
130
+ </a></li>
131
+ </ul>
132
+ </nav>
133
+ <!-- NO __actions here - they go in __footer -->
134
+ </div>
135
+
136
+ <!-- Fixed footer - always visible at bottom -->
137
+ <div class="pa-profile-panel__footer">
138
+ <button class="pa-btn pa-btn--secondary pa-btn--block">
139
+ Switch Account
140
+ </button>
141
+ <button class="pa-btn pa-btn--danger pa-btn--block">
142
+ Sign Out
143
+ </button>
144
+ </div>
145
+ </div>
146
+ </div>
147
+
148
+
149
+ <!-- ================================
150
+ PROFILE PANEL - NO AVATAR (CORPORATE)
151
+ For apps without user photos
152
+ ================================ -->
153
+
154
+ <!-- Profile Panel without avatar (for corporate apps that don't have user photos) -->
155
+ <!-- Add --no-avatar modifier to header to hide the avatar -->
156
+ <div class="pa-profile-panel" id="profilePanel">
157
+ <div class="pa-profile-panel__overlay" onclick="closeProfilePanel()"></div>
158
+ <div class="pa-profile-panel__content">
159
+ <div class="pa-profile-panel__header pa-profile-panel__header--no-avatar">
160
+ <div class="pa-profile-panel__avatar">
161
+ <span class="pa-profile-panel__avatar-icon">👤</span>
162
+ </div>
163
+ <div class="pa-profile-panel__info">
164
+ <h3 class="pa-profile-panel__name" title="John Doe">John Doe</h3>
165
+ <p class="pa-profile-panel__email" title="john.doe@company.com">john.doe@company.com</p>
166
+ <span class="pa-profile-panel__role">Administrator</span>
167
+ </div>
168
+ <button class="pa-profile-panel__close" onclick="closeProfilePanel()" aria-label="Close Profile">
169
+
170
+ </button>
171
+ </div>
172
+
173
+ <div class="pa-profile-panel__body">
174
+ <nav class="pa-profile-panel__nav">
175
+ <ul>
176
+ <li><a href="#profile" class="pa-profile-panel__nav-item">
177
+ <span class="pa-profile-panel__nav-icon">👤</span>
178
+ Profile Settings
179
+ </a></li>
180
+ <li><a href="#logout" class="pa-profile-panel__nav-item">
181
+ <span class="pa-profile-panel__nav-icon">🚪</span>
182
+ Sign Out
183
+ </a></li>
184
+ </ul>
185
+ </nav>
186
+ </div>
187
+ </div>
188
+ </div>
189
+
190
+
84
191
  <!-- ================================
85
192
  PROFILE PANEL - WITH TABS (PROFILE + FAVORITES)
86
193
  ================================ -->
@@ -383,11 +490,12 @@ PROFILE PANEL STRUCTURE:
383
490
 
384
491
  PANEL HEADER:
385
492
  - .pa-profile-panel__header - Header container
493
+ - .pa-profile-panel__header--no-avatar - Modifier to hide avatar (for corporate apps)
386
494
  - .pa-profile-panel__avatar - Avatar container
387
495
  - .pa-profile-panel__avatar-icon - Avatar icon/image
388
496
  - .pa-profile-panel__info - User info container
389
- - .pa-profile-panel__name - User name
390
- - .pa-profile-panel__email - User email
497
+ - .pa-profile-panel__name - User name (truncates with ellipsis, add title for tooltip)
498
+ - .pa-profile-panel__email - User email (truncates with ellipsis, add title for tooltip)
391
499
  - .pa-profile-panel__role - User role badge
392
500
  - .pa-profile-panel__close - Close button
393
501
 
@@ -398,11 +506,12 @@ PANEL TABS (optional):
398
506
  - [data-profile-panel] - Tab panel attribute
399
507
 
400
508
  PANEL BODY:
401
- - .pa-profile-panel__body - Body container
509
+ - .pa-profile-panel__body - Body container (scrollable)
402
510
  - .pa-profile-panel__nav - Navigation menu
403
511
  - .pa-profile-panel__nav-item - Navigation link
404
512
  - .pa-profile-panel__nav-icon - Navigation icon
405
- - .pa-profile-panel__actions - Action buttons container
513
+ - .pa-profile-panel__actions - Action buttons (inside body, scrolls with content)
514
+ - .pa-profile-panel__footer - Fixed footer (outside body, always visible at bottom)
406
515
 
407
516
  FAVORITES SECTION:
408
517
  - .pa-profile-panel__favorites - Favorites container
@@ -149,6 +149,39 @@
149
149
  </div>
150
150
 
151
151
 
152
+ <!-- BORDER TOP TABS -->
153
+
154
+ <!-- Border Top Tabs - active indicator on top instead of bottom -->
155
+ <div class="pa-tabs pa-tabs--border-top">
156
+ <button class="pa-tabs__item pa-tabs__item--active">Profile</button>
157
+ <button class="pa-tabs__item">Favorites</button>
158
+ <button class="pa-tabs__item">Settings</button>
159
+ </div>
160
+ <div class="pa-tabs__content">
161
+ <div class="pa-tabs__panel pa-tabs__panel--active" id="border-top-1">
162
+ Profile content
163
+ </div>
164
+ <div class="pa-tabs__panel" id="border-top-2">
165
+ Favorites content
166
+ </div>
167
+ <div class="pa-tabs__panel" id="border-top-3">
168
+ Settings content
169
+ </div>
170
+ </div>
171
+
172
+ <!-- Border Top + Full Width (profile panel style) -->
173
+ <div class="pa-tabs pa-tabs--border-top pa-tabs--full">
174
+ <button class="pa-tabs__item pa-tabs__item--active">
175
+ <i class="fa-solid fa-user"></i>
176
+ <span>Profile</span>
177
+ </button>
178
+ <button class="pa-tabs__item">
179
+ <i class="fa-solid fa-star"></i>
180
+ <span>Favorites</span>
181
+ </button>
182
+ </div>
183
+
184
+
152
185
  <!-- VERTICAL TABS -->
153
186
 
154
187
  <!-- Vertical Tabs with Icons (use vertical layout wrapper) -->
@@ -539,13 +572,13 @@
539
572
  <!-- Vertical Icon-Only Tabs (use vertical layout wrapper, centered for icon-only, square 3x3) -->
540
573
  <div class="pa-tabs__vertical-layout">
541
574
  <div class="pa-tabs pa-tabs--vertical pa-tabs--centered">
542
- <button class="pa-tabs__item pa-tabs__item--w-3x pa-tabs__item--h-3x pa-tabs__item--active pa-tooltip" data-tooltip="Home">
575
+ <button class="pa-tabs__item minwr-3 minhr-3 pa-tabs__item--active pa-tooltip" data-tooltip="Home">
543
576
  <i class="fa-solid fa-house"></i>
544
577
  </button>
545
- <button class="pa-tabs__item pa-tabs__item--w-3x pa-tabs__item--h-3x pa-tooltip" data-tooltip="Profile">
578
+ <button class="pa-tabs__item minwr-3 minhr-3 pa-tooltip" data-tooltip="Profile">
546
579
  <i class="fa-solid fa-user"></i>
547
580
  </button>
548
- <button class="pa-tabs__item pa-tabs__item--w-3x pa-tabs__item--h-3x pa-tooltip" data-tooltip="Messages">
581
+ <button class="pa-tabs__item minwr-3 minhr-3 pa-tooltip" data-tooltip="Messages">
549
582
  <i class="fa-solid fa-envelope"></i>
550
583
  </button>
551
584
  </div>
@@ -564,12 +597,13 @@
564
597
 
565
598
 
566
599
  <!-- FIXED WIDTH TABS -->
600
+ <!-- Use minwr-* utilities for min-width in rem -->
567
601
 
568
602
  <!-- Fixed Width Tab Items (6rem each) -->
569
603
  <div class="pa-tabs">
570
- <button class="pa-tabs__item pa-tabs__item--w-6x pa-tabs__item--active">View</button>
571
- <button class="pa-tabs__item pa-tabs__item--w-6x">Edit</button>
572
- <button class="pa-tabs__item pa-tabs__item--w-6x">Delete</button>
604
+ <button class="pa-tabs__item minwr-6 pa-tabs__item--active">View</button>
605
+ <button class="pa-tabs__item minwr-6">Edit</button>
606
+ <button class="pa-tabs__item minwr-6">Delete</button>
573
607
  </div>
574
608
  <div class="pa-tabs__content">
575
609
  <div class="pa-tabs__panel pa-tabs__panel--active" id="fixed-1">
@@ -585,15 +619,15 @@
585
619
 
586
620
  <!-- Fixed Width with Icons (8rem each) -->
587
621
  <div class="pa-tabs">
588
- <button class="pa-tabs__item pa-tabs__item--w-8x pa-tabs__item--active">
622
+ <button class="pa-tabs__item minwr-8 pa-tabs__item--active">
589
623
  <i class="fa-solid fa-chart-line"></i>
590
624
  <span>Dashboard</span>
591
625
  </button>
592
- <button class="pa-tabs__item pa-tabs__item--w-8x">
626
+ <button class="pa-tabs__item minwr-8">
593
627
  <i class="fa-solid fa-chart-bar"></i>
594
628
  <span>Analytics</span>
595
629
  </button>
596
- <button class="pa-tabs__item pa-tabs__item--w-8x">
630
+ <button class="pa-tabs__item minwr-8">
597
631
  <i class="fa-solid fa-file-lines"></i>
598
632
  <span>Reports</span>
599
633
  </button>
@@ -893,16 +927,12 @@ SIZES:
893
927
  - (no class) (default size)
894
928
  - pa-tabs--lg (large tabs with generous padding)
895
929
 
896
- FIXED WIDTH (for individual tab items):
897
- - pa-tabs__item--w-1x through pa-tabs__item--w-10x (1rem to 10rem min-width)
898
- - Examples: pa-tabs__item--w-6x (6rem), pa-tabs__item--w-8x (8rem)
930
+ FIXED WIDTH/HEIGHT (use utility classes):
931
+ - minwr-1 through minwr-25 (min-width in rem)
932
+ - minhr-1 through minhr-25 (min-height in rem)
933
+ - Examples: minwr-6 (6rem), minwr-8 (8rem), minhr-3 (3rem)
899
934
  - Use for consistent tab sizing across navigation
900
935
 
901
- FIXED HEIGHT (for individual tab items):
902
- - pa-tabs__item--h-1x through pa-tabs__item--h-10x (1rem to 10rem min-height)
903
- - Examples: pa-tabs__item--h-3x (3rem), pa-tabs__item--h-4x (4rem)
904
- - Useful for vertical tabs with consistent heights
905
-
906
936
  LAYOUT WRAPPERS:
907
937
  - pa-tabs__container (wrapper for horizontal tabs + content)
908
938
  - pa-tabs__container--bordered (card-like border around entire tabs system)
@@ -154,7 +154,7 @@
154
154
 
155
155
  <!-- Badge with Truncated Text and Tooltip -->
156
156
  <span class="pa-tooltip pa-tooltip--bottom" data-tooltip="Very Long Badge Text That Needs Truncation">
157
- <span class="pa-badge pa-badge--info pa-badge--w-8x">Very Long Badge Text That Needs Truncation</span>
157
+ <span class="pa-badge pa-badge--info minwr-8 maxwr-8 text-truncate">Very Long Badge Text That Needs Truncation</span>
158
158
  </span>
159
159
 
160
160
 
@@ -405,4 +405,18 @@
405
405
  --pa-multiselect-option-hover-bg: #{$multiselect-option-hover-bg};
406
406
  --pa-multiselect-pill-bg: #{$multiselect-pill-bg};
407
407
  --pa-multiselect-pill-border: #{$multiselect-pill-border};
408
+
409
+ // =========================================================================
410
+ // CUSTOM THEME COLORS (1-9)
411
+ // Themes can override $color-1 through $color-9 to define branded colors
412
+ // =========================================================================
413
+ --pa-color-1: #{$color-1};
414
+ --pa-color-2: #{$color-2};
415
+ --pa-color-3: #{$color-3};
416
+ --pa-color-4: #{$color-4};
417
+ --pa-color-5: #{$color-5};
418
+ --pa-color-6: #{$color-6};
419
+ --pa-color-7: #{$color-7};
420
+ --pa-color-8: #{$color-8};
421
+ --pa-color-9: #{$color-9};
408
422
  }
@@ -47,6 +47,9 @@
47
47
  // Alert components
48
48
  @use 'core-components/alerts' as *;
49
49
 
50
+ // Callout components (documentation-style)
51
+ @use 'core-components/callouts' as *;
52
+
50
53
  // Form elements
51
54
  @use 'core-components/forms' as *;
52
55
 
@@ -48,25 +48,21 @@
48
48
  &--xs {
49
49
  padding: $btn-padding-xs-v $btn-padding-xs-h;
50
50
  font-size: $font-size-xs;
51
- min-height: 2.8rem; // Enforce consistent height
52
51
  }
53
52
 
54
53
  &--sm {
55
54
  padding: $btn-padding-sm-v $btn-padding-sm-h;
56
55
  font-size: $font-size-sm;
57
- min-height: 3.2rem; // Enforce consistent height (~32px)
58
56
  }
59
57
 
60
58
  &--lg {
61
59
  padding: $btn-padding-lg-v $btn-padding-lg-h;
62
60
  font-size: $font-size-base;
63
- min-height: 4rem; // Enforce consistent height
64
61
  }
65
62
 
66
63
  &--xl {
67
64
  padding: $btn-padding-xl-v $btn-padding-xl-h;
68
65
  font-size: $font-size-lg;
69
- min-height: 4.4rem; // Enforce consistent height
70
66
  }
71
67
 
72
68
  // Button variants (colors)
@@ -324,47 +320,6 @@
324
320
  }
325
321
  }
326
322
 
327
- // Fixed width buttons - multipliers of 1rem
328
- &--w-1x {
329
- min-width: $spinner-size;
330
- }
331
-
332
- &--w-2x {
333
- min-width: $btn-width-2x;
334
- }
335
-
336
- &--w-3x {
337
- min-width: $btn-width-3x;
338
- }
339
-
340
- &--w-4x {
341
- min-width: $btn-width-4x;
342
- }
343
-
344
- &--w-5x {
345
- min-width: $btn-width-5x;
346
- }
347
-
348
- &--w-6x {
349
- min-width: $btn-width-6x;
350
- }
351
-
352
- &--w-7x {
353
- min-width: $btn-width-7x;
354
- }
355
-
356
- &--w-8x {
357
- min-width: $btn-width-8x;
358
- }
359
-
360
- &--w-9x {
361
- min-width: $btn-width-9x;
362
- }
363
-
364
- &--w-10x {
365
- min-width: $btn-width-10x;
366
- }
367
-
368
323
  // Content alignment modifiers (position content within button)
369
324
  // Button always keeps its horizontal padding (0.75rem on both sides)
370
325
  // These classes control content position and remove icon padding on aligned sides
@@ -410,15 +365,6 @@
410
365
  flex-wrap: wrap;
411
366
  align-items: center;
412
367
 
413
- // === Gap Size Variants ===
414
- &--compact {
415
- gap: $btn-group-gap-compact;
416
- }
417
-
418
- &--loose {
419
- gap: $btn-group-gap-loose;
420
- }
421
-
422
368
  // === Direction Variants ===
423
369
  &--vertical {
424
370
  flex-direction: column;