@keenmate/pure-admin-core 2.4.0 → 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 (44) hide show
  1. package/README.md +11 -6
  2. package/dist/css/main.css +47 -130
  3. package/package.json +1 -1
  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/_tables.scss +2 -134
  44. package/src/scss/variables/_components.scss +17 -2
@@ -1,11 +1,23 @@
1
- <!-- ========================================
2
- Checkbox Lists & Custom Checkbox Component
3
- Comprehensive examples of checkbox patterns
4
- ======================================== -->
1
+ <!-- ================================
2
+ CHECKBOX LISTS & CUSTOM CHECKBOX COMPONENT
3
+ Pure Admin Visual Framework
4
+
5
+ Two layers in play:
6
+ 1. .pa-checkbox (the custom tri-state component from
7
+ _checkboxes-radios.scss; see forms.html for full reference)
8
+ 2. .pa-checkbox-list (a list layout that hosts either native
9
+ <input type="checkbox"> or the .pa-checkbox component inside
10
+ its items)
11
+
12
+ The .pa-checkbox-list__checkbox class is a legacy helper for plain
13
+ native inputs. Prefer nesting the full .pa-checkbox component
14
+ inside .pa-checkbox-list__label for new markup — the custom
15
+ component gives you tri-state, sizes, --x, and consistent styling.
16
+ ================================ -->
5
17
 
6
18
  <!-- ========================================
7
19
  CUSTOM TRI-STATE CHECKBOX COMPONENT
8
- Fully styled checkboxes with 3 states
20
+ Quick reference full docs live in forms.html
9
21
  ======================================== -->
10
22
 
11
23
  <!-- Basic Custom Checkbox (Three States) -->
@@ -134,8 +146,20 @@
134
146
  </li>
135
147
  </ul>
136
148
 
137
- <!-- Item States (Clickable, Disabled, Locked) -->
149
+ <!--
150
+ Item States (Selected, Clickable, Disabled, Locked)
151
+ - --selected: accent-light background; indicates active selection
152
+ - --disabled: opacity: 0.5, not-allowed cursor
153
+ - --locked: not-allowed cursor; text inside turns warning-coloured and
154
+ gets a 🔒 emoji via ::before on .pa-checkbox-list__text
155
+ -->
138
156
  <ul class="pa-checkbox-list pa-checkbox-list--bordered">
157
+ <li class="pa-checkbox-list__item pa-checkbox-list__item--selected">
158
+ <label class="pa-checkbox-list__label">
159
+ <input type="checkbox" class="pa-checkbox-list__checkbox" id="state0" checked>
160
+ <span class="pa-checkbox-list__text">Selected (accent-light background)</span>
161
+ </label>
162
+ </li>
139
163
  <li class="pa-checkbox-list__item">
140
164
  <label class="pa-checkbox-list__label">
141
165
  <input type="checkbox" class="pa-checkbox-list__checkbox" id="state1">
@@ -145,7 +169,7 @@
145
169
  <li class="pa-checkbox-list__item pa-checkbox-list__item--disabled">
146
170
  <label class="pa-checkbox-list__label">
147
171
  <input type="checkbox" class="pa-checkbox-list__checkbox" id="state2" disabled>
148
- <span class="pa-checkbox-list__text">Disabled - feature not available</span>
172
+ <span class="pa-checkbox-list__text">Disabled feature not available</span>
149
173
  </label>
150
174
  </li>
151
175
  <li class="pa-checkbox-list__item pa-checkbox-list__item--locked">
@@ -156,27 +180,40 @@
156
180
  </li>
157
181
  </ul>
158
182
 
159
- <!-- Checkbox List with Descriptions -->
183
+ <!--
184
+ Checkbox List with Descriptions
185
+ IMPORTANT: .pa-checkbox-list__label is display: flex — so a bare
186
+ __description span alongside the title text would sit next to it, not
187
+ below. Wrap the title + description in a .pa-checkbox-list__text
188
+ (flex: 1) block; then __description (display: block) stacks correctly
189
+ beneath the title.
190
+ -->
160
191
  <ul class="pa-checkbox-list">
161
192
  <li class="pa-checkbox-list__item">
162
193
  <input type="checkbox" class="pa-checkbox-list__checkbox" id="feature1">
163
194
  <label class="pa-checkbox-list__label" for="feature1">
164
- Email Notifications
165
- <span class="pa-checkbox-list__description">Receive updates via email</span>
195
+ <span class="pa-checkbox-list__text">
196
+ Email Notifications
197
+ <span class="pa-checkbox-list__description">Receive updates via email</span>
198
+ </span>
166
199
  </label>
167
200
  </li>
168
201
  <li class="pa-checkbox-list__item">
169
202
  <input type="checkbox" class="pa-checkbox-list__checkbox" id="feature2" checked>
170
203
  <label class="pa-checkbox-list__label" for="feature2">
171
- SMS Alerts
172
- <span class="pa-checkbox-list__description">Get urgent alerts via SMS</span>
204
+ <span class="pa-checkbox-list__text">
205
+ SMS Alerts
206
+ <span class="pa-checkbox-list__description">Get urgent alerts via SMS</span>
207
+ </span>
173
208
  </label>
174
209
  </li>
175
210
  <li class="pa-checkbox-list__item">
176
211
  <input type="checkbox" class="pa-checkbox-list__checkbox" id="feature3">
177
212
  <label class="pa-checkbox-list__label" for="feature3">
178
- Push Notifications
179
- <span class="pa-checkbox-list__description">Browser push notifications</span>
213
+ <span class="pa-checkbox-list__text">
214
+ Push Notifications
215
+ <span class="pa-checkbox-list__description">Browser push notifications</span>
216
+ </span>
180
217
  </label>
181
218
  </li>
182
219
  </ul>
@@ -433,58 +470,155 @@
433
470
  </tbody>
434
471
  </table>
435
472
 
436
- <!-- ========================================
437
- Available Classes Reference
438
- ======================================== -->
439
-
440
- <!-- Custom Checkbox Component:
441
- .pa-checkbox - Wrapper label for custom checkbox
442
- .pa-checkbox__box - Visual checkbox replacement (hidden native input)
443
- .pa-checkbox__label - Label text
444
-
445
- Checkbox Size Modifiers:
446
- .pa-checkbox--xs - Extra small checkbox
447
- .pa-checkbox--sm - Small checkbox
448
- (default) - Default size
449
- .pa-checkbox--lg - Large checkbox
450
- .pa-checkbox--xl - Extra large checkbox
451
-
452
- Checkbox State Modifiers:
453
- .pa-checkbox--x - Shows X mark instead of checkmark when checked
454
- .pa-checkbox--disabled - Disabled styling (add disabled attribute to input)
455
-
456
- Indeterminate State:
457
- Set via JavaScript: checkbox.indeterminate = true
458
- CSS :indeterminate pseudo-class handles styling (shows dash)
459
- -->
460
-
461
- <!-- Checkbox List Base Classes:
462
- .pa-checkbox-list - Base checkbox list container
463
- .pa-checkbox-list__item - Individual list item
464
- .pa-checkbox-list__checkbox - Checkbox input (native style)
465
- .pa-checkbox-list__label - Label text
466
- .pa-checkbox-list__text - Text wrapper (use with custom checkbox)
467
- .pa-checkbox-list__description - Optional description/metadata
468
- .pa-checkbox-list__actions - Optional action buttons container
469
- -->
473
+ <!-- ================================
474
+ COMPONENT REFERENCE
475
+ ================================ -->
476
+
477
+ <!--
478
+ CUSTOM CHECKBOX COMPONENT (pa-checkbox see forms.html for full docs):
479
+ - .pa-checkbox Wrapper <label>; hides the native input,
480
+ renders a custom __box + __label.
481
+ - .pa-checkbox__box The drawn-in-CSS checkbox square.
482
+ - .pa-checkbox__label Visible label text.
483
+ - .pa-checkbox--xs / --sm Smaller sizes.
484
+ - (default) Default size.
485
+ - .pa-checkbox--lg / --xl Larger sizes.
486
+ - .pa-checkbox--x Swap the checkmark for an X.
487
+ - .pa-checkbox--disabled Explicit disabled style
488
+ (also auto-applied via :has(input:disabled)).
489
+ - Indeterminate: set via JS — `el.indeterminate = true`. The HTML
490
+ attribute alone does nothing.
491
+
492
+ CHECKBOX LIST (.pa-checkbox-list):
493
+
494
+ Base + items:
495
+ - .pa-checkbox-list List container (flex column; list-style reset).
496
+ - .pa-checkbox-list__item Row; has a bottom border between siblings
497
+ (dropped on :last-child); hover background.
498
+ - .pa-checkbox-list__label Clickable <label>; flex, padding — this is
499
+ what makes the whole row a hitbox.
500
+
501
+ Input flavours (pick one):
502
+ - .pa-checkbox-list__checkbox LEGACY native-style input. Keep for plain
503
+ checkboxes where you don't need tri-state.
504
+ - .pa-checkbox (nested inside __label) The custom
505
+ component. Preferred for new markup.
506
+
507
+ Optional children (inside __label):
508
+ - .pa-checkbox-list__text Wrap the title here so the description
509
+ stacks below it instead of alongside.
510
+ - .pa-checkbox-list__description Muted caption; display: block.
511
+ - .pa-checkbox-list__actions Absolutely positioned button group on
512
+ the inline-end side (pointer-events: none
513
+ on wrapper; the buttons themselves
514
+ re-enable pointer-events). Auto-padding
515
+ on __label keeps text clear of the
516
+ buttons via
517
+ __item:has(__actions) __label {
518
+ padding-inline-end: 6rem
519
+ }.
520
+
521
+ List layout modifiers (compose with base):
522
+ - .pa-checkbox-list--compact Tighter padding (spacing-xs/-sm).
523
+ - .pa-checkbox-list--bordered Border + radius around the whole list.
524
+ - .pa-checkbox-list--striped Zebra stripes on even items.
525
+ - .pa-checkbox-list--inline Flex-wrap chips — items get their own
526
+ border + radius and sit horizontally.
527
+ - .pa-checkbox-list--grid CSS grid: auto-fill columns with a
528
+ minimum 320px column width (1fr max).
529
+ Items get individual borders.
530
+ - .pa-checkbox-list--2col Two equal columns (no gap; vertical
531
+ divider after odd items).
532
+ - .pa-checkbox-list--3col Three equal columns (vertical dividers
533
+ after all but every 3rd item).
534
+
535
+ Item state modifiers:
536
+ - .pa-checkbox-list__item--selected Accent-light background (active).
537
+ - .pa-checkbox-list__item--disabled opacity: 0.5; not-allowed cursor.
538
+ Hover background suppressed.
539
+ (No explicit text-colour change —
540
+ matches the native disabled look.)
541
+ - .pa-checkbox-list__item--locked not-allowed cursor; text inside
542
+ .pa-checkbox-list__text turns
543
+ warning colour and gets a 🔒 emoji
544
+ via ::before. The inner checkbox
545
+ gets opacity: 0.5. Use for
546
+ "requires permission" scenarios —
547
+ distinct from --disabled which
548
+ signals "feature unavailable".
549
+
550
+ TABLE INTEGRATION (rules live in _checkbox-lists.scss):
551
+ - .pa-table__checkbox-col <th>/<td> helper; width: 1%,
552
+ white-space: nowrap, text-align: center.
553
+ - .pa-table__row--selected Accent-light background on the row.
554
+ - th/td .pa-checkbox Implicit rules zero the gap and
555
+ hide .pa-checkbox__label, so you
556
+ can drop a custom checkbox into a
557
+ table cell without extra markup.
558
+ - th/td .pa-checkbox-list__checkbox Legacy native checkbox in cells
559
+ (cursor: pointer, no margin).
560
+ Or just use a plain <input
561
+ type="checkbox"> — the same
562
+ margin/cursor rules apply.
563
+
564
+ STRUCTURE PATTERNS:
565
+
566
+ Basic list (legacy native inputs):
567
+ <ul class="pa-checkbox-list">
568
+ <li class="pa-checkbox-list__item">
569
+ <input type="checkbox" class="pa-checkbox-list__checkbox" id="a">
570
+ <label class="pa-checkbox-list__label" for="a">Option A</label>
571
+ </li>
572
+ </ul>
470
573
 
471
- <!-- List Modifiers:
472
- .pa-checkbox-list--compact - Less padding
473
- .pa-checkbox-list--bordered - Border around entire list
474
- .pa-checkbox-list--striped - Alternating row colors
475
- .pa-checkbox-list--inline - Horizontal wrapping layout
476
- .pa-checkbox-list--grid - Grid layout (auto-fill)
477
- .pa-checkbox-list--2col - Two-column layout
478
- .pa-checkbox-list--3col - Three-column layout
479
- -->
574
+ Modern pattern with the custom component nested inside the label:
575
+ <ul class="pa-checkbox-list">
576
+ <li class="pa-checkbox-list__item">
577
+ <label class="pa-checkbox-list__label">
578
+ <span class="pa-checkbox">
579
+ <input type="checkbox">
580
+ <span class="pa-checkbox__box"></span>
581
+ </span>
582
+ <span class="pa-checkbox-list__text">Option A</span>
583
+ </label>
584
+ </li>
585
+ </ul>
480
586
 
481
- <!-- Item State Modifiers:
482
- .pa-checkbox-list__item--selected - Selected state styling
483
- .pa-checkbox-list__item--disabled - Disabled state styling (feature unavailable - 50% opacity, muted color)
484
- .pa-checkbox-list__item--locked - Locked state styling (requires permission - 70% opacity, warning color, lock icon)
587
+ With description (title + description must live inside __text):
588
+ <li class="pa-checkbox-list__item">
589
+ <input type="checkbox" class="pa-checkbox-list__checkbox" id="n1">
590
+ <label class="pa-checkbox-list__label" for="n1">
591
+ <span class="pa-checkbox-list__text">
592
+ Email Notifications
593
+ <span class="pa-checkbox-list__description">Receive updates via email</span>
594
+ </span>
595
+ </label>
596
+ </li>
597
+
598
+ With action buttons (the auto-padding on __label keeps text clear):
599
+ <li class="pa-checkbox-list__item">
600
+ <input type="checkbox" class="pa-checkbox-list__checkbox" id="t1">
601
+ <label class="pa-checkbox-list__label" for="t1">Task title</label>
602
+ <div class="pa-checkbox-list__actions">
603
+ <button class="pa-btn pa-btn--xs pa-btn--icon-only pa-btn--secondary">✏️</button>
604
+ <button class="pa-btn pa-btn--xs pa-btn--icon-only pa-btn--danger">🗑️</button>
605
+ </div>
606
+ </li>
607
+
608
+ Table with select-all + row checkboxes:
609
+ <table class="pa-table">
610
+ <thead>
611
+ <tr>
612
+ <th class="pa-table__checkbox-col"><input type="checkbox"></th>
613
+ <th>Name</th>
614
+ </tr>
615
+ </thead>
616
+ <tbody>
617
+ <tr class="pa-table__row--selected">
618
+ <td class="pa-table__checkbox-col"><input type="checkbox" checked></td>
619
+ <td>…</td>
620
+ </tr>
621
+ </tbody>
622
+ </table>
485
623
  -->
486
624
 
487
- <!-- Table Classes:
488
- .pa-table__checkbox-col - Checkbox column (width: 1%, centered)
489
- .pa-table__row--selected - Selected row styling
490
- -->
@@ -141,6 +141,39 @@ app.listen(3000);</pre>
141
141
  <pre class="pa-code pa-code--compact pa-code--python">print("Hello World")</pre>
142
142
 
143
143
 
144
+ <!-- ========================================
145
+ LINE-NUMBERED VARIANT
146
+ pa-code--numbered draws a gutter on the inline-start side. It uses
147
+ a CSS counter, so rendered line numbers come from each top-level
148
+ child element — the simplest approach is one <span> per logical
149
+ line. No counter-increment classes needed; the SCSS reset wires
150
+ the counter automatically for direct children.
151
+ ======================================== -->
152
+
153
+ <!-- Numbered code block -->
154
+ <pre class="pa-code pa-code--numbered pa-code--javascript">function greet(name) {
155
+ return `Hello, ${name}!`;
156
+ }
157
+
158
+ greet('World');</pre>
159
+
160
+
161
+ <!-- ========================================
162
+ SYNTAX HIGHLIGHTING (manual)
163
+ Wrap tokens in <span class="pa-code-<token>"> inside a <pre>. These
164
+ classes are colour-only — you still have to tokenize the source
165
+ yourself (or via a highlighter that emits these class names).
166
+ ======================================== -->
167
+
168
+ <pre class="pa-code pa-code--javascript"><span class="pa-code-comment">// Greet the user</span>
169
+ <span class="pa-code-keyword">function</span> <span class="pa-code-function">greet</span>(name) {
170
+ <span class="pa-code-keyword">return</span> <span class="pa-code-string">`Hello, ${name}!`</span>;
171
+ }
172
+
173
+ <span class="pa-code-keyword">const</span> answer = <span class="pa-code-number">42</span>;
174
+ <span class="pa-code-function">console</span>.<span class="pa-code-property">log</span>(answer);</pre>
175
+
176
+
144
177
  <!-- ========================================
145
178
  ALL LANGUAGE VARIANTS
146
179
  ======================================== -->
@@ -196,30 +229,41 @@ function copyCode(button) {
196
229
 
197
230
  <!--
198
231
  INLINE CODE:
199
- - <code> - Inline code element with light background
232
+ - <code> - Inline code element with accent-light background (bare element, no class)
200
233
 
201
234
  CODE BLOCKS:
202
- - .pa-code - Basic code block (pre element)
235
+ - .pa-code - Basic code block (use on <pre>); white-space: pre, overflow-x: auto
203
236
  - .pa-code--compact - Smaller padding and font size
204
- - .pa-code--javascript - Yellow left border
205
- - .pa-code--json - Orange left border
206
- - .pa-code--html - Red left border
207
- - .pa-code--css - Blue left border
208
- - .pa-code--bash - Green left border
209
- - .pa-code--sql - Teal left border
210
- - .pa-code--python - Blue left border
237
+ - .pa-code--numbered - Line-number gutter on the inline-start side (RTL-aware)
238
+ - .pa-code--javascript - Yellow left border (#f0db4f)
239
+ - .pa-code--json - Amber/orange left border (#f59e0b)
240
+ - .pa-code--html - Red-orange left border (#e34c26)
241
+ - .pa-code--css - Blue left border (#264de4)
242
+ - .pa-code--bash - Green left border (#4eaa25)
243
+ - .pa-code--sql - Teal left border (#00758f)
244
+ - .pa-code--python - Blue left border (#3776ab)
211
245
 
212
246
  CODE BLOCK WITH HEADER:
213
247
  - .pa-code-block - Container with border
214
- - .pa-code-block__header - Header with title and actions
248
+ - .pa-code-block__header - Header row (title + actions)
215
249
  - .pa-code-block__title - Filename or description
216
- - .pa-code-block__body - Body containing .pa-code
250
+ - .pa-code-block__body - Body wrapping .pa-code (strips its border/radius)
251
+
252
+ SYNTAX HIGHLIGHTING (manual token classes — colour only):
253
+ - .pa-code-keyword - Keywords (blue, medium weight)
254
+ - .pa-code-string - String literals (green)
255
+ - .pa-code-number - Numeric literals (orange)
256
+ - .pa-code-comment - Comments (muted text color, italic)
257
+ - .pa-code-function - Function names (purple)
258
+ - .pa-code-property - Property names (pink-red)
217
259
 
218
260
  COMBINE MODIFIERS:
219
261
  <pre class="pa-code pa-code--compact pa-code--javascript">
262
+ <pre class="pa-code pa-code--numbered pa-code--python">
220
263
 
221
264
  USAGE:
222
265
  Inline: <code>code here</code>
223
266
  Block: <pre class="pa-code">code here</pre>
224
267
  With language: <pre class="pa-code pa-code--json">{"key": "value"}</pre>
268
+ With highlighting: wrap tokens in <span class="pa-code-keyword">…</span> inside a <pre>.
225
269
  -->