@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/README.md +92 -0
- package/dist/css/main.css +1100 -205
- package/package.json +1 -1
- package/snippets/badges.html +7 -6
- package/snippets/buttons.html +15 -13
- package/snippets/modals.html +43 -4
- package/snippets/profile.html +67 -2
- package/snippets/tables.html +8 -6
- package/snippets/tabs.html +47 -17
- package/snippets/tooltips.html +69 -1
- package/src/scss/core-components/_buttons.scss +6 -54
- package/src/scss/core-components/_cards.scss +40 -4
- package/src/scss/core-components/_profile.scss +27 -13
- package/src/scss/core-components/_tables.scss +37 -13
- package/src/scss/core-components/_tabs.scss +135 -83
- package/src/scss/core-components/_tooltips.scss +40 -0
- package/src/scss/core-components/badges/_badge-base.scss +0 -21
- package/src/scss/core-components/forms/_form-inputs.scss +7 -1
- package/src/scss/themes/audi-light.scss +5 -1
- package/src/scss/themes/audi.scss +5 -3
- package/src/scss/utilities.scss +197 -0
- package/src/scss/variables/_components.scss +65 -27
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keenmate/pure-admin-core",
|
|
3
|
-
"version": "1.0.0-
|
|
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": {
|
package/snippets/badges.html
CHANGED
|
@@ -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
|
|
78
|
-
<span class="pa-badge pa-badge--primary
|
|
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
|
|
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
|
|
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
|
|
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
|
package/snippets/buttons.html
CHANGED
|
@@ -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 (
|
|
113
|
-
<div class="pa-btn-group
|
|
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 (
|
|
127
|
-
<div class="pa-btn-group
|
|
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
|
|
238
|
-
<button class="pa-btn pa-btn--primary
|
|
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
|
|
244
|
-
<button class="pa-btn pa-btn--success
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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>
|
package/snippets/modals.html
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
});
|
package/snippets/profile.html
CHANGED
|
@@ -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
|
|
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
|
package/snippets/tables.html
CHANGED
|
@@ -100,8 +100,8 @@
|
|
|
100
100
|
</tbody>
|
|
101
101
|
</table>
|
|
102
102
|
|
|
103
|
-
<!--
|
|
104
|
-
<table class="pa-table pa-table--
|
|
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
|
-
<!--
|
|
120
|
-
<table class="pa-table pa-table--
|
|
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--
|
|
298
|
-
- pa-table--
|
|
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)
|
package/snippets/tabs.html
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
571
|
-
<button class="pa-tabs__item
|
|
572
|
-
<button class="pa-tabs__item
|
|
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
|
|
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
|
|
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
|
|
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 (
|
|
897
|
-
-
|
|
898
|
-
-
|
|
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)
|
package/snippets/tooltips.html
CHANGED
|
@@ -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
|
|
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;
|