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

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-rc03",
3
+ "version": "1.0.0-rc05",
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>
@@ -8,6 +8,7 @@ MODAL WRAPPER CLASSES:
8
8
  - pa-modal: Base modal wrapper
9
9
  - pa-modal--show: Show the modal (add/remove via JavaScript)
10
10
  - pa-modal--top: Position modal near top instead of center (useful for search/command interfaces)
11
+ - pa-modal--static: Prevent closing via ESC key or backdrop click (must use explicit button)
11
12
  - pa-modal--primary: Primary themed modal (blue header)
12
13
  - pa-modal--success: Success themed modal (green header)
13
14
  - pa-modal--warning: Warning themed modal (orange header)
@@ -75,6 +76,42 @@ HEADER THEME CLASSES (alternative to modal-level themes):
75
76
  </div>
76
77
 
77
78
 
79
+ <!-- STATIC MODAL (No ESC, No Backdrop Click) -->
80
+
81
+ <!--
82
+ Static modals cannot be closed by:
83
+ - Pressing the Escape key
84
+ - Clicking the backdrop
85
+
86
+ User MUST click an explicit button to close.
87
+ Use for: license agreements, critical confirmations, required actions.
88
+
89
+ Implementation:
90
+ 1. Add pa-modal--static class to the modal wrapper
91
+ 2. Do NOT add onclick to the backdrop
92
+ 3. Optionally remove the X close button from header
93
+ 4. JavaScript must check for --static class before closing on ESC
94
+ -->
95
+
96
+ <div class="pa-modal pa-modal--static" id="staticModal">
97
+ <div class="pa-modal__backdrop"></div><!-- No onclick here! -->
98
+ <div class="pa-modal__container pa-modal__container--sm">
99
+ <div class="pa-modal__header pa-modal__header--warning">
100
+ <h3 class="pa-modal__title">License Agreement</h3>
101
+ <!-- No X close button - user must use footer buttons -->
102
+ </div>
103
+ <div class="pa-modal__body">
104
+ <p>You must accept the terms to continue.</p>
105
+ <p>This modal cannot be dismissed with ESC or by clicking outside.</p>
106
+ </div>
107
+ <div class="pa-modal__footer">
108
+ <button class="pa-btn pa-btn--secondary" onclick="closeModal('staticModal')">Decline</button>
109
+ <button class="pa-btn pa-btn--warning" onclick="closeModal('staticModal')">Accept</button>
110
+ </div>
111
+ </div>
112
+ </div>
113
+
114
+
78
115
  <!-- MODAL SIZES -->
79
116
 
80
117
  <!-- Small Modal -->
@@ -278,21 +315,23 @@ function closeModal(modalId) {
278
315
  }
279
316
  }
280
317
 
281
- // Close modal with Escape key
318
+ // Close modal with Escape key (skip static modals)
282
319
  document.addEventListener('keydown', function(e) {
283
320
  if (e.key === 'Escape') {
284
321
  const openModal = document.querySelector('.pa-modal--show');
285
- if (openModal) {
322
+ // Don't close static modals with ESC
323
+ if (openModal && !openModal.classList.contains('pa-modal--static')) {
286
324
  closeModal(openModal.id);
287
325
  }
288
326
  }
289
327
  });
290
328
 
291
- // Close modal when clicking backdrop
329
+ // Close modal when clicking backdrop (skip static modals)
292
330
  document.querySelectorAll('.pa-modal__backdrop').forEach(backdrop => {
293
331
  backdrop.addEventListener('click', function() {
294
332
  const modal = this.closest('.pa-modal');
295
- if (modal) {
333
+ // Don't close static modals on backdrop click
334
+ if (modal && !modal.classList.contains('pa-modal--static')) {
296
335
  closeModal(modal.id);
297
336
  }
298
337
  });
@@ -82,6 +82,70 @@
82
82
  </div>
83
83
 
84
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
+
85
149
  <!-- ================================
86
150
  PROFILE PANEL - NO AVATAR (CORPORATE)
87
151
  For apps without user photos
@@ -442,11 +506,12 @@ PANEL TABS (optional):
442
506
  - [data-profile-panel] - Tab panel attribute
443
507
 
444
508
  PANEL BODY:
445
- - .pa-profile-panel__body - Body container
509
+ - .pa-profile-panel__body - Body container (scrollable)
446
510
  - .pa-profile-panel__nav - Navigation menu
447
511
  - .pa-profile-panel__nav-item - Navigation link
448
512
  - .pa-profile-panel__nav-icon - Navigation icon
449
- - .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)
450
515
 
451
516
  FAVORITES SECTION:
452
517
  - .pa-profile-panel__favorites - Favorites container
@@ -100,8 +100,8 @@
100
100
  </tbody>
101
101
  </table>
102
102
 
103
- <!-- 2x Spacing (comfortable padding) -->
104
- <table class="pa-table pa-table--2x">
103
+ <!-- XS Size (compact, fits button-xs) -->
104
+ <table class="pa-table pa-table--xs">
105
105
  <thead>
106
106
  <tr>
107
107
  <th>Name</th>
@@ -116,8 +116,8 @@
116
116
  </tbody>
117
117
  </table>
118
118
 
119
- <!-- 3x Spacing (spacious padding) -->
120
- <table class="pa-table pa-table--3x">
119
+ <!-- LG Size (spacious, fits button-lg) -->
120
+ <table class="pa-table pa-table--lg">
121
121
  <thead>
122
122
  <tr>
123
123
  <th>Name</th>
@@ -294,8 +294,10 @@ BASE CLASS:
294
294
 
295
295
  MODIFIERS:
296
296
  - pa-table--striped (alternating row colors)
297
- - pa-table--2x (comfortable padding, 2x base)
298
- - pa-table--3x (spacious padding, 3x base)
297
+ - pa-table--xs (compact, fits button-xs)
298
+ - pa-table--sm (slightly wider horizontal padding)
299
+ - pa-table--lg (spacious, fits button-lg)
300
+ - pa-table--xl (extra spacious, fits button-xl)
299
301
 
300
302
  HELPERS:
301
303
  - col-auto (auto-width column that shrinks to content)
@@ -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)
@@ -75,6 +75,20 @@
75
75
  </span>
76
76
 
77
77
 
78
+ <!-- THEME COLOR TOOLTIPS (color-1 to color-9) -->
79
+
80
+ <!-- Theme colors use --pa-color-* CSS variables defined by themes -->
81
+ <span class="pa-tooltip pa-tooltip--color-1" data-tooltip="Color 1">Color 1</span>
82
+ <span class="pa-tooltip pa-tooltip--color-2" data-tooltip="Color 2">Color 2</span>
83
+ <span class="pa-tooltip pa-tooltip--color-3" data-tooltip="Color 3">Color 3</span>
84
+ <span class="pa-tooltip pa-tooltip--color-4" data-tooltip="Color 4">Color 4</span>
85
+ <span class="pa-tooltip pa-tooltip--color-5" data-tooltip="Color 5">Color 5</span>
86
+ <span class="pa-tooltip pa-tooltip--color-6" data-tooltip="Color 6">Color 6</span>
87
+ <span class="pa-tooltip pa-tooltip--color-7" data-tooltip="Color 7">Color 7</span>
88
+ <span class="pa-tooltip pa-tooltip--color-8" data-tooltip="Color 8">Color 8</span>
89
+ <span class="pa-tooltip pa-tooltip--color-9" data-tooltip="Color 9">Color 9</span>
90
+
91
+
78
92
  <!-- CURSOR MODIFIERS -->
79
93
 
80
94
  <!-- Default tooltip (inherits parent cursor - good for clickable elements like buttons, tabs) -->
@@ -154,7 +168,7 @@
154
168
 
155
169
  <!-- Badge with Truncated Text and Tooltip -->
156
170
  <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>
171
+ <span class="pa-badge pa-badge--info minwr-8 maxwr-8 text-truncate">Very Long Badge Text That Needs Truncation</span>
158
172
  </span>
159
173
 
160
174
 
@@ -270,6 +284,55 @@
270
284
  </div>
271
285
 
272
286
 
287
+ <!-- POPOVER ALIGNMENT -->
288
+
289
+ <!-- Left Aligned (default) -->
290
+ <div class="pa-popover" data-placement="bottom">
291
+ <button class="pa-popover__trigger">?</button>
292
+ <div class="pa-popover__content">
293
+ <div class="pa-popover__header">
294
+ <h4>Left Aligned</h4>
295
+ <button class="pa-popover__close">×</button>
296
+ </div>
297
+ <div class="pa-popover__body">
298
+ <p>Default alignment is left.</p>
299
+ <ul>
300
+ <li>Lists look natural</li>
301
+ <li>Easy to read</li>
302
+ </ul>
303
+ </div>
304
+ </div>
305
+ </div>
306
+
307
+ <!-- Center Aligned -->
308
+ <div class="pa-popover pa-popover--center" data-placement="bottom">
309
+ <button class="pa-popover__trigger">?</button>
310
+ <div class="pa-popover__content">
311
+ <div class="pa-popover__header">
312
+ <h4>Centered</h4>
313
+ <button class="pa-popover__close">×</button>
314
+ </div>
315
+ <div class="pa-popover__body">
316
+ <p>Use --center modifier for centered text.</p>
317
+ </div>
318
+ </div>
319
+ </div>
320
+
321
+ <!-- Right Aligned -->
322
+ <div class="pa-popover pa-popover--right" data-placement="bottom">
323
+ <button class="pa-popover__trigger">?</button>
324
+ <div class="pa-popover__content">
325
+ <div class="pa-popover__header">
326
+ <h4>Right Aligned</h4>
327
+ <button class="pa-popover__close">×</button>
328
+ </div>
329
+ <div class="pa-popover__body">
330
+ <p>Use --right modifier for RTL layouts.</p>
331
+ </div>
332
+ </div>
333
+ </div>
334
+
335
+
273
336
  <!-- POPOVER WITH RICH CONTENT -->
274
337
 
275
338
  <!-- Popover with List -->
@@ -346,6 +409,7 @@ VARIANTS:
346
409
  - pa-tooltip--success (success colored background)
347
410
  - pa-tooltip--warning (warning colored background)
348
411
  - pa-tooltip--danger (danger colored background)
412
+ - pa-tooltip--color-1 through pa-tooltip--color-9 (theme-defined colors)
349
413
 
350
414
  MULTILINE:
351
415
  - pa-tooltip--multiline (allows text wrapping)
@@ -363,6 +427,10 @@ SIZES:
363
427
  - pa-popover--sm (small)
364
428
  - pa-popover--lg (large)
365
429
 
430
+ ALIGNMENT:
431
+ - pa-popover--center (centered body text)
432
+ - pa-popover--right (right-aligned body text)
433
+
366
434
  COMPONENTS:
367
435
  - pa-popover__trigger (button/trigger element)
368
436
  - pa-popover__content (popover container)
@@ -7,6 +7,7 @@
7
7
  // Buttons
8
8
  .pa-btn {
9
9
  display: inline-block;
10
+ height: $btn-height-base;
10
11
  padding: $btn-padding-v $btn-padding-h;
11
12
  border: $btn-border-width solid transparent;
12
13
  border-radius: $border-radius;
@@ -46,27 +47,27 @@
46
47
  }
47
48
 
48
49
  &--xs {
50
+ height: $btn-height-xs;
49
51
  padding: $btn-padding-xs-v $btn-padding-xs-h;
50
52
  font-size: $font-size-xs;
51
- min-height: 2.8rem; // Enforce consistent height
52
53
  }
53
54
 
54
55
  &--sm {
56
+ height: $btn-height-sm;
55
57
  padding: $btn-padding-sm-v $btn-padding-sm-h;
56
58
  font-size: $font-size-sm;
57
- min-height: 3.2rem; // Enforce consistent height (~32px)
58
59
  }
59
60
 
60
61
  &--lg {
62
+ height: $btn-height-lg;
61
63
  padding: $btn-padding-lg-v $btn-padding-lg-h;
62
64
  font-size: $font-size-base;
63
- min-height: 4rem; // Enforce consistent height
64
65
  }
65
66
 
66
67
  &--xl {
68
+ height: $btn-height-xl;
67
69
  padding: $btn-padding-xl-v $btn-padding-xl-h;
68
70
  font-size: $font-size-lg;
69
- min-height: 4.4rem; // Enforce consistent height
70
71
  }
71
72
 
72
73
  // Button variants (colors)
@@ -269,6 +270,7 @@
269
270
  display: flex;
270
271
  align-items: center;
271
272
  justify-content: center;
273
+ line-height: 1;
272
274
 
273
275
  // Size-specific icon-only dimensions
274
276
  &.pa-btn--xs {
@@ -324,47 +326,6 @@
324
326
  }
325
327
  }
326
328
 
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
329
  // Content alignment modifiers (position content within button)
369
330
  // Button always keeps its horizontal padding (0.75rem on both sides)
370
331
  // These classes control content position and remove icon padding on aligned sides
@@ -410,15 +371,6 @@
410
371
  flex-wrap: wrap;
411
372
  align-items: center;
412
373
 
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
374
  // === Direction Variants ===
423
375
  &--vertical {
424
376
  flex-direction: column;