@keenmate/pure-admin-core 2.3.6 → 2.5.0

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 (47) hide show
  1. package/README.md +23 -29
  2. package/dist/css/main.css +68 -148
  3. package/package.json +1 -5
  4. package/snippets/AUDIT.md +94 -0
  5. package/snippets/alerts.html +264 -89
  6. package/snippets/badges.html +193 -61
  7. package/snippets/buttons.html +178 -0
  8. package/snippets/callouts.html +210 -129
  9. package/snippets/cards.html +383 -200
  10. package/snippets/checkbox-lists.html +199 -65
  11. package/snippets/code.html +55 -11
  12. package/snippets/command-palette.html +401 -111
  13. package/snippets/comparison.html +144 -93
  14. package/snippets/customization.html +311 -104
  15. package/snippets/data-display.html +584 -0
  16. package/snippets/detail-panel.html +470 -138
  17. package/snippets/filter-card.html +246 -0
  18. package/snippets/forms.html +408 -308
  19. package/snippets/grid.html +253 -141
  20. package/snippets/layout.html +379 -480
  21. package/snippets/lists.html +144 -47
  22. package/snippets/loaders.html +64 -39
  23. package/snippets/manifest.json +330 -280
  24. package/snippets/modal-dialogs.html +137 -64
  25. package/snippets/modals.html +221 -151
  26. package/snippets/notifications.html +285 -0
  27. package/snippets/popconfirm.html +213 -19
  28. package/snippets/profile.html +290 -330
  29. package/snippets/statistics.html +247 -0
  30. package/snippets/tables.html +359 -150
  31. package/snippets/tabs.html +129 -45
  32. package/snippets/timeline.html +123 -56
  33. package/snippets/toasts.html +179 -31
  34. package/snippets/tooltips.html +199 -81
  35. package/snippets/typography.html +183 -58
  36. package/snippets/utilities.html +511 -415
  37. package/snippets/virtual-scroll.html +201 -75
  38. package/snippets/web-daterangepicker.html +369 -189
  39. package/snippets/web-multiselect.html +360 -124
  40. package/src/scss/core-components/_alerts.scss +51 -12
  41. package/src/scss/core-components/_pagers.scss +1 -1
  42. package/src/scss/core-components/_popconfirm.scss +35 -13
  43. package/src/scss/core-components/_profile.scss +18 -8
  44. package/src/scss/core-components/_statistics.scss +12 -12
  45. package/src/scss/core-components/_tables.scss +2 -134
  46. package/src/scss/variables/_components.scss +17 -2
  47. package/scripts/download-themes.js +0 -351
@@ -62,30 +62,35 @@
62
62
 
63
63
  <!-- ================================
64
64
  ICON LISTS
65
+ --icon alone = green ✓ (success). Combine with --danger / --info /
66
+ --warning to swap the ::before icon + colour. Those semantic
67
+ modifiers ONLY do anything when --icon is also present — they
68
+ style the pseudo-element, which doesn't exist without --icon.
69
+ (No --success modifier exists because success is the default.)
65
70
  ================================ -->
66
71
 
67
- <!-- Success (checkmarks) -->
72
+ <!-- Default icon list — green ✓ (implicit success) -->
68
73
  <ul class="pa-list-basic pa-list-basic--icon">
69
74
  <li>SSL/TLS encryption enabled</li>
70
75
  <li>Automatic daily backups</li>
71
76
  <li>99.9% uptime SLA guarantee</li>
72
77
  </ul>
73
78
 
74
- <!-- Danger (X marks) -->
79
+ <!-- Danger (red ) -->
75
80
  <ul class="pa-list-basic pa-list-basic--icon pa-list-basic--danger">
76
81
  <li>Deprecated API endpoint</li>
77
82
  <li>Unsupported browser version</li>
78
83
  <li>Missing required permissions</li>
79
84
  </ul>
80
85
 
81
- <!-- Info (arrows) -->
86
+ <!-- Info (blue →) -->
82
87
  <ul class="pa-list-basic pa-list-basic--icon pa-list-basic--info">
83
88
  <li>Navigate to Settings panel</li>
84
89
  <li>Select Integration options</li>
85
90
  <li>Choose your provider</li>
86
91
  </ul>
87
92
 
88
- <!-- Warning (exclamation) -->
93
+ <!-- Warning (yellow !) -->
89
94
  <ul class="pa-list-basic pa-list-basic--icon pa-list-basic--warning">
90
95
  <li>Rate limit approaching threshold</li>
91
96
  <li>Certificate expires in 30 days</li>
@@ -152,6 +157,10 @@
152
157
 
153
158
  <!-- ================================
154
159
  COMPLEX LISTS (with avatars)
160
+ The sub-elements are flex-aware, so the container + items can be
161
+ <div>s (as below) or semantic <ul>/<li> — the CSS doesn't care.
162
+ Prefer <ul>/<li> when the list is genuinely enumerative so screen
163
+ readers announce it as one.
155
164
  ================================ -->
156
165
 
157
166
  <div class="pa-list">
@@ -181,52 +190,140 @@
181
190
  </div>
182
191
  </div>
183
192
 
193
+ <!-- Same structure using semantic markup -->
194
+ <ul class="pa-list pa-list-basic--unstyled">
195
+ <li class="pa-list__item">
196
+ <div class="pa-list__avatar">🔔</div>
197
+ <div class="pa-list__content">
198
+ <div class="pa-list__title">New comment on "Q3 Roadmap"</div>
199
+ <div class="pa-list__subtitle">Sarah: "Looks good, shipping Monday"</div>
200
+ <div class="pa-list__meta">5 minutes ago</div>
201
+ </div>
202
+ </li>
203
+ <li class="pa-list__item">
204
+ <div class="pa-list__avatar">📦</div>
205
+ <div class="pa-list__content">
206
+ <div class="pa-list__title">Deploy succeeded</div>
207
+ <div class="pa-list__subtitle">web-api · build #2341</div>
208
+ <div class="pa-list__meta">1 hour ago</div>
209
+ </div>
210
+ </li>
211
+ </ul>
212
+
184
213
 
185
214
  <!-- ================================
186
- CSS CLASSES REFERENCE
215
+ COMPONENT REFERENCE
187
216
  ================================ -->
188
217
 
189
218
  <!--
190
- UNORDERED LISTS:
191
- - pa-list-basic Base unordered list with bullets
192
- - pa-list-basic--compact Reduced spacing between items
193
- - pa-list-basic--spacious Increased spacing between items
194
- - pa-list-basic--unstyled No bullets, no padding
195
- - pa-list-basic--inline Horizontal layout with flex
196
- - pa-list-basic--bordered Border between each item
197
- - pa-list-basic--striped Zebra striping (even rows)
198
- - pa-list-basic--icon Checkmarks (success icons)
199
- - pa-list-basic--icon pa-list-basic--danger X marks (danger icons)
200
- - pa-list-basic--icon pa-list-basic--info Arrows (info icons)
201
- - pa-list-basic--icon pa-list-basic--warning Exclamation marks (warning icons)
202
-
203
- ORDERED LISTS:
204
- - pa-list-ordered Base ordered list (1, 2, 3...)
205
- - pa-list-ordered--roman Roman numerals (I, II, III...)
206
- - pa-list-ordered--alpha Lowercase letters (a, b, c...)
207
-
208
- DEFINITION LISTS:
209
- - pa-list-definition Standard definition list (dt/dd)
210
- - pa-list-definition--inline Horizontal key-value pairs
211
-
212
- COMPLEX LISTS:
213
- - pa-list Container for complex list items
214
- - pa-list__item Individual list item with avatar/content
215
- - pa-list__avatar Avatar/icon container (circular)
216
- - pa-list__content Content wrapper
217
- - pa-list__title Primary text (bold)
218
- - pa-list__subtitle Secondary text (gray, smaller)
219
- - pa-list__meta Metadata text (gray, smallest)
220
-
221
- USAGE NOTES:
222
- Use pa-list-basic for simple content lists
223
- Use pa-list-basic--icon for feature lists or checklists
224
- Use pa-list-basic--bordered for menu-like lists
225
- Use pa-list-basic--inline for navigation or tags
226
- ✅ Use pa-list-ordered for step-by-step instructions
227
- Use pa-list-definition for glossaries or specifications
228
- ✅ Use pa-list (complex) for user lists, activity feeds, notifications
229
- ✅ All lists have proper line-height (1.6) for readability
230
- ✅ Icon lists use semantic colors (success, danger, info, warning)
231
- Complex lists work great in card bodies with pa-card__body--no-padding
219
+ UNORDERED LISTS (.pa-list-basic — apply to <ul> or <ol>):
220
+
221
+ Spacing:
222
+ - .pa-list-basic Default (bullet list, li-margin: $spacing-sm, line-height 1.6)
223
+ - .pa-list-basic--compact li-margin: $spacing-xs
224
+ - .pa-list-basic--spacious li-margin: $spacing-base
225
+
226
+ Presentation:
227
+ - .pa-list-basic--unstyled No bullets, padding-inline-start: 0
228
+ - .pa-list-basic--inline Flex horizontal, gap: $spacing-base, no bullets
229
+ - .pa-list-basic--bordered Divider between items (last has none)
230
+ - .pa-list-basic--striped Alternating background on :nth-child(even)
231
+
232
+ Icon lists (pseudo-element ::before on each li):
233
+ - .pa-list-basic--icon Green (default / implicit success)
234
+ - .pa-list-basic--icon.pa-list-basic--danger Red
235
+ - .pa-list-basic--icon.pa-list-basic--info Blue
236
+ - .pa-list-basic--icon.pa-list-basic--warning Yellow !
237
+
238
+ Note: --danger / --info / --warning ONLY do anything when combined
239
+ with --icon they style the ::before pseudo that --icon creates.
240
+ There's no standalone --danger list style. And --success doesn't
241
+ exist because success IS the default of --icon.
242
+
243
+ ORDERED LISTS (.pa-list-ordered apply to <ol>):
244
+ - .pa-list-ordered Default numeric (1, 2, 3…)
245
+ - .pa-list-ordered--roman Upper-roman (I, II, III…)
246
+ - .pa-list-ordered--alpha Lower-alpha (a, b, c…)
247
+
248
+ DEFINITION LISTS (.pa-list-definition apply to <dl>):
249
+ - .pa-list-definition Stacked dt/dd
250
+ dt: bold, $spacing-base margin-top
251
+ dd: indented $spacing-lg, muted text
252
+ - .pa-list-definition--inline dt and dd on one line; dt gets a `: `
253
+ suffix via ::after; each dd ends in a
254
+ block-level line break (so pairs stack).
255
+
256
+ COMPLEX LISTS (.pa-list container + sub-elements):
257
+
258
+ .pa-list
259
+ .pa-list__item
260
+ .pa-list__avatar (circular btn-icon-only-size; flex-centred)
261
+ .pa-list__content (flex: 1)
262
+ .pa-list__title (medium weight, text-color-1)
263
+ .pa-list__subtitle (muted, font-size-sm)
264
+ .pa-list__meta (muted, font-size-xs — smallest)
265
+
266
+ Automatic behaviour:
267
+ - .pa-list__item has flex, gap: $spacing-md, card-footer padding, and
268
+ a bottom border between items (last-child has none).
269
+ - .pa-list__item:hover gets var(--pa-main-bg) — signals interactivity.
270
+ Don't use bare .pa-list for passive read-only content if the hover
271
+ would be misleading.
272
+ - Any block element works for .pa-list + .pa-list__item; semantic
273
+ <ul>/<li> (combined with .pa-list-basic--unstyled on the ul to kill
274
+ bullets) is preferred for screen readers when the items form a
275
+ genuine enumerative list.
276
+
277
+ RTL HANDLING (all list types):
278
+ - padding-inline-start / margin-inline-start used throughout, so
279
+ bullets, definition indent, and RTL hanging indents flip correctly
280
+ under [dir="rtl"] without any extra classes.
281
+
282
+ WHEN TO USE WHICH:
283
+ - pa-list-basic Content lists, feature lists, inline nav
284
+ - pa-list-basic--icon Checklists, feature comparisons
285
+ - pa-list-basic--bordered Menu-like lists, settings toggles
286
+ - pa-list-basic--striped Dense key/value-ish content
287
+ - pa-list-ordered Step-by-step instructions, numbered procedures
288
+ - pa-list-definition Glossaries, specs, API reference
289
+ - pa-list (complex) User lists, activity feeds, notifications
290
+
291
+ STRUCTURE PATTERNS:
292
+
293
+ Feature checklist:
294
+ <ul class="pa-list-basic pa-list-basic--icon">
295
+ <li>SSL/TLS encryption enabled</li>
296
+ <li>Automatic daily backups</li>
297
+ </ul>
298
+
299
+ Bordered menu:
300
+ <ul class="pa-list-basic pa-list-basic--bordered">
301
+ <li>Overview</li>
302
+ <li>Settings</li>
303
+ <li>Billing</li>
304
+ </ul>
305
+
306
+ Inline navigation:
307
+ <ul class="pa-list-basic pa-list-basic--inline">
308
+ <li><a href="#">Home</a></li>
309
+ <li><a href="#">About</a></li>
310
+ </ul>
311
+
312
+ Inline key-value:
313
+ <dl class="pa-list-definition pa-list-definition--inline">
314
+ <dt>Status</dt><dd>Active</dd>
315
+ <dt>Owner</dt><dd>John Doe</dd>
316
+ </dl>
317
+
318
+ Complex user row with hover feedback:
319
+ <ul class="pa-list pa-list-basic--unstyled">
320
+ <li class="pa-list__item">
321
+ <div class="pa-list__avatar">👤</div>
322
+ <div class="pa-list__content">
323
+ <div class="pa-list__title">Sarah Johnson</div>
324
+ <div class="pa-list__subtitle">Product Manager</div>
325
+ <div class="pa-list__meta">Last active: 2h ago</div>
326
+ </div>
327
+ </li>
328
+ </ul>
232
329
  -->
@@ -5,17 +5,17 @@
5
5
 
6
6
  <!-- SPINNER COMPONENT -->
7
7
 
8
- <!-- Basic Spinner -->
8
+ <!-- Basic Spinner (default size — $spinner-size, 16px default) -->
9
9
  <div class="pa-spinner"></div>
10
10
 
11
- <!-- Spinner Sizes -->
11
+ <!-- Extra-Small Spinner (uses $loader-dot-size, 12px default) -->
12
12
  <div class="pa-spinner pa-spinner--xs"></div>
13
- <div class="pa-spinner pa-spinner--sm"></div>
14
- <div class="pa-spinner"></div>
15
- <div class="pa-spinner pa-spinner--md"></div>
16
- <div class="pa-spinner pa-spinner--lg"></div>
17
- <div class="pa-spinner pa-spinner--xl"></div>
18
- <div class="pa-spinner pa-spinner--2xl"></div>
13
+
14
+ <!--
15
+ Note: the spinner only ships two sizes — the default and --xs. For
16
+ other sizes, override $spinner-size in SCSS before the framework
17
+ import, or set width/height inline.
18
+ -->
19
19
 
20
20
  <!-- Colored Spinners -->
21
21
  <div class="pa-spinner pa-spinner--primary"></div>
@@ -28,7 +28,11 @@
28
28
 
29
29
  <!-- ADVANCED LOADERS -->
30
30
 
31
- <!-- Dots Loader (requires 3 span children) -->
31
+ <!--
32
+ Dots Loader — convention is 3 <span> children. SCSS sets staggered
33
+ animation delays on nth-child(1) and (2); extra spans still work, they
34
+ just start in phase.
35
+ -->
32
36
  <div class="pa-loader-dots">
33
37
  <span></span>
34
38
  <span></span>
@@ -42,7 +46,10 @@
42
46
  <span></span>
43
47
  </div>
44
48
 
45
- <!-- Bars Loader (requires 5 span children) -->
49
+ <!--
50
+ Bars Loader — requires 5 <span> children. SCSS stagger targets
51
+ nth-child(1) through (5) explicitly.
52
+ -->
46
53
  <div class="pa-loader-bars">
47
54
  <span></span>
48
55
  <span></span>
@@ -66,13 +73,13 @@
66
73
  <!-- Pulse Loader - Large -->
67
74
  <div class="pa-loader-pulse pa-loader-pulse--lg"></div>
68
75
 
69
- <!-- Ring Loader (CSS-only, no children needed) -->
76
+ <!-- Ring Loader (CSS-only, uses ::after pseudo-element) -->
70
77
  <div class="pa-loader-ring"></div>
71
78
 
72
79
  <!-- Ring Loader - Large -->
73
80
  <div class="pa-loader-ring pa-loader-ring--lg"></div>
74
81
 
75
- <!-- Wave Loader (requires 5 span children) -->
82
+ <!-- Wave Loader 5 <span> children (same stagger as bars) -->
76
83
  <div class="pa-loader-wave">
77
84
  <span></span>
78
85
  <span></span>
@@ -100,13 +107,17 @@
100
107
 
101
108
  <!-- Centered Loader with Text -->
102
109
  <div class="pa-loader-center">
103
- <div class="pa-spinner pa-spinner--lg pa-spinner--primary"></div>
110
+ <div class="pa-spinner pa-spinner--primary"></div>
104
111
  <p>Loading your data...</p>
105
112
  </div>
106
113
 
107
- <!-- Overlay Loader (covers entire screen) -->
114
+ <!--
115
+ Overlay Loader — absolutely positioned, so the parent must have
116
+ position: relative (or similar) to contain it. Background uses
117
+ var(--pa-loader-overlay-bg).
118
+ -->
108
119
  <div class="pa-loader-overlay">
109
- <div class="pa-spinner pa-spinner--lg"></div>
120
+ <div class="pa-spinner"></div>
110
121
  </div>
111
122
 
112
123
 
@@ -114,13 +125,17 @@
114
125
 
115
126
  <!-- Inline Loading Text -->
116
127
  <p>
117
- Loading data <span class="pa-spinner pa-spinner--sm"></span>
128
+ Loading data <span class="pa-spinner pa-spinner--xs"></span>
118
129
  </p>
119
130
 
120
131
 
121
132
  <!-- BUTTON WITH SPINNER -->
122
133
 
123
- <!-- Loading Button -->
134
+ <!--
135
+ Loading button — pa-btn--loading hides the label (text-fill transparent)
136
+ and positions the internal .pa-btn__spinner centered over the button.
137
+ Keep the label text so the button preserves its width.
138
+ -->
124
139
  <button class="pa-btn pa-btn--primary pa-btn--loading">
125
140
  <span class="pa-btn__spinner"></span>
126
141
  Loading...
@@ -133,12 +148,12 @@
133
148
  <div class="pa-card">
134
149
  <div class="pa-card__body">
135
150
  <div class="pa-loader-center" style="min-height: 200px;">
136
- <div class="pa-loader-dots pa-loader-dots--lg" style="color: var(--accent-color);">
151
+ <div class="pa-loader-dots pa-loader-dots--lg" style="color: var(--pa-accent);">
137
152
  <span></span>
138
153
  <span></span>
139
154
  <span></span>
140
155
  </div>
141
- <p style="margin-top: 1rem; color: var(--text-secondary);">Loading content...</p>
156
+ <p style="margin-top: 1rem; color: var(--pa-text-color-2);">Loading content...</p>
142
157
  </div>
143
158
  </div>
144
159
  </div>
@@ -150,34 +165,44 @@
150
165
 
151
166
  <!--
152
167
  SPINNERS:
153
- - .pa-spinner: Basic spinner (CSS animation)
154
- - .pa-spinner--xs, --sm, --md, --lg, --xl, --2xl: Size variants
155
- - .pa-spinner--primary, --secondary, --success, --danger, --warning, --info: Color variants
156
-
157
- ADVANCED LOADERS:
158
- - .pa-loader-dots: Bouncing dots (requires 3 <span> children)
159
- - .pa-loader-bars: Animated bars (requires 5 <span> children)
160
- - .pa-loader-wave: Wave animation (requires 5 <span> children)
161
- - .pa-loader-pulse: Pulsing circle (CSS-only, no children)
162
- - .pa-loader-ring: Spinning ring (CSS-only, no children)
163
- - All support --lg size variant
168
+ - .pa-spinner: Rotating-border spinner at $spinner-size (16px default)
169
+ - .pa-spinner--xs: Extra-small variant using $loader-dot-size (12px default)
170
+ (No --sm / --md / --lg / --xl / --2xl exist in _loaders.scss. Override
171
+ $spinner-size in SCSS or set inline width/height for other sizes.)
172
+ - Color variants (border-top-color from the $btn-*-bg theme tokens):
173
+ .pa-spinner--primary .pa-spinner--secondary
174
+ .pa-spinner--success .pa-spinner--danger
175
+ .pa-spinner--warning .pa-spinner--info
176
+
177
+ ADVANCED LOADERS (child <span> count matters):
178
+ - .pa-loader-dots — 3 <span>s (only 2 delays defined; 3rd sits in phase)
179
+ - .pa-loader-bars — 5 <span>s (delays on nth-child 1..5)
180
+ - .pa-loader-wave — 5 <span>s (same stagger as bars)
181
+ - .pa-loader-pulse — CSS-only, no children
182
+ - .pa-loader-ring — CSS-only, animates via ::after
183
+ - All five support the --lg size modifier.
184
+
185
+ COLOR:
186
+ - All loaders paint from `currentColor` — set color on the wrapper to
187
+ theme them: <div class="pa-loader-dots" style="color: var(--pa-success-bg);">
164
188
 
165
189
  UTILITIES:
166
- - .pa-loader-center: Center loader in container (flex column, centered)
167
- - .pa-loader-overlay: Full-screen overlay with loader
190
+ - .pa-loader-center flex column, centered; stack a loader + caption
191
+ - .pa-loader-overlay absolute overlay with var(--pa-loader-overlay-bg);
192
+ parent must be positioned (relative/absolute/fixed)
168
193
 
169
194
  BUTTON LOADING:
170
- - .pa-btn--loading: Loading state modifier
171
- - .pa-btn__spinner: Spinner inside button
195
+ - .pa-btn--loading — on the button: hides the label, keeps width
196
+ - .pa-btn__spinner — inside the button: gets positioned + animated
172
197
 
173
198
  STRUCTURE EXAMPLES:
174
- <div class="pa-loader-dots"> <!-- 3 spans required -->
175
- <span></span>
176
- <span></span>
177
- <span></span>
199
+ <div class="pa-loader-dots"> <!-- 3 spans -->
200
+ <span></span><span></span><span></span>
178
201
  </div>
179
202
 
180
- <div class="pa-loader-bars"> <!-- 5 spans required -->
203
+ <div class="pa-loader-bars"> <!-- 5 spans -->
181
204
  <span></span><span></span><span></span><span></span><span></span>
182
205
  </div>
206
+
207
+ <div class="pa-loader-ring"></div> <!-- no children -->
183
208
  -->