@keenmate/pure-admin-core 2.3.2 → 2.3.3

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 CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  Lightweight, data-focused CSS/SCSS admin framework with Corporate theme as default.
4
4
 
5
+ ## What's New in 2.3.3
6
+
7
+ - **Command palette rewrite** — Multi-step command wizards (`/deploy`, `/assign`, `/go`, `/theme`), context search (`:p`, `:u`, `:o`), global search, inline/tokens display modes matching keen-pure-admin
8
+ - **Dark theme fixes** — Command palette loading overlay, key badges, and item badges all use CSS variables instead of SCSS defaults stuck on light mode
9
+
5
10
  ## What's New in 2.3.2
6
11
 
7
12
  - **Themeable border-radius via CSS variables** — All components now use `var(--pa-border-radius)`. Themes override in `:root` (same pattern as colors). Fixes long-standing issue where `@use` module isolation prevented theme control of border-radius
@@ -9,12 +14,6 @@ Lightweight, data-focused CSS/SCSS admin framework with Corporate theme as defau
9
14
  - **Split button dropdown rework** — Two-container pattern (`__menu` + `__menu-inner`) matching web-multiselect. New `__item-row` element for rows with action buttons. Container handles `overflow: hidden` + `border-radius`
10
15
  - **Removed hover lift** — `translateY(-1px)` removed from buttons and stat cards for consistency
11
16
 
12
- ## What's New in 2.3.0
13
-
14
- - **Toast action buttons** — New `pa-toast__actions` element for action buttons inside toasts, separated by a border-top. Toast service supports `actions: [{ label, variant, onClick }]` with auto-dismiss on click
15
- - **Toast service improvements** — `filled`, `progressColor`, and `maxWidth` options. Container width ratchets up to the widest toast shown, preventing layout jitter when toasts dismiss
16
- - **Toast progress bar** — More visible: 5px height, 0.6 opacity (was 3px / 0.3)
17
-
18
17
  ## Installation
19
18
 
20
19
  ```bash
@@ -338,6 +337,28 @@ Works with both `pa-table` and `web-grid` component. First/last columns automati
338
337
  - `.pa-modal__container--sm/md/lg/xl/xxl` - Sizes
339
338
  - `.pa-modal--primary/success/danger/warning` - Themed headers
340
339
 
340
+ ### Command Palette
341
+ - `.pa-command-palette` - Base container (add `--active` to show)
342
+ - `.pa-command-palette__backdrop` - Overlay backdrop
343
+ - `.pa-command-palette__container` - Modal dialog
344
+ - `.pa-command-palette__search` - Search area (input + tokens + context)
345
+ - `.pa-command-palette__tokens` - Token badges container (for token display mode)
346
+ - `.pa-command-palette__input-wrapper` - Wraps input + context label (positioning anchor)
347
+ - `.pa-command-palette__input` - Search input
348
+ - `.pa-command-palette__context` - Context label (e.g., "Assign to User", "Searching in Products")
349
+ - `.pa-command-palette__results` - Scrollable results area
350
+ - `.pa-command-palette__item` - Result row (`--active` for keyboard-highlighted)
351
+ - `.pa-command-palette__item-icon` - Item icon
352
+ - `.pa-command-palette__item-content` - Title + subtitle wrapper
353
+ - `.pa-command-palette__item-title` - Item title (supports `<mark>` for search highlights)
354
+ - `.pa-command-palette__item-meta` - Subtitle/metadata
355
+ - `.pa-command-palette__preview` - Command step preview text
356
+ - `.pa-command-palette__footer` - Keyboard hints bar
357
+ - `.pa-command-palette__key` - Keyboard shortcut badge
358
+ - `.pa-command-palette__token-prompt` - Step prompt text between token badges
359
+ - **Modes:** `/` commands, `:` context search, plain text global search
360
+ - **Display styles:** Inline (everything in input) or Tokens (selections as badges)
361
+
341
362
  ### Toasts
342
363
  - `.pa-toast` - Base toast
343
364
  - `.pa-toast--primary/success/danger/warning/info` - Variants
package/dist/css/main.css CHANGED
@@ -13824,6 +13824,11 @@ code {
13824
13824
  flex-wrap: wrap;
13825
13825
  gap: 0.4rem;
13826
13826
  align-items: center;
13827
+ margin-bottom: 0.8rem;
13828
+ }
13829
+ .pa-command-palette__tokens:empty {
13830
+ display: none;
13831
+ margin-bottom: 0;
13827
13832
  }
13828
13833
  .pa-command-palette__tokens .pa-badge {
13829
13834
  display: inline-flex;
@@ -13845,6 +13850,14 @@ code {
13845
13850
  .pa-command-palette__tokens .pa-badge__remove:hover {
13846
13851
  opacity: 1;
13847
13852
  }
13853
+ .pa-command-palette__token-prompt {
13854
+ font-size: 1.2rem;
13855
+ color: var(--pa-text-color-2);
13856
+ font-style: italic;
13857
+ }
13858
+ .pa-command-palette__input-wrapper {
13859
+ position: relative;
13860
+ }
13848
13861
  .pa-command-palette__input {
13849
13862
  width: 100%;
13850
13863
  height: 3.8rem;
@@ -13867,7 +13880,7 @@ code {
13867
13880
  }
13868
13881
  .pa-command-palette__context {
13869
13882
  position: absolute;
13870
- inset-inline-end: calc(0.8rem + 0.8rem);
13883
+ inset-inline-end: 0.8rem;
13871
13884
  top: 50%;
13872
13885
  transform: translateY(-50%);
13873
13886
  font-size: 1.2rem;
@@ -13892,7 +13905,7 @@ code {
13892
13905
  content: "";
13893
13906
  position: absolute;
13894
13907
  inset: 0;
13895
- background-color: rgba(255, 255, 255, 0.7);
13908
+ background-color: color-mix(in srgb, var(--pa-modal-content-bg) 70%, transparent);
13896
13909
  pointer-events: none;
13897
13910
  z-index: 1;
13898
13911
  }
@@ -13970,14 +13983,6 @@ code {
13970
13983
  overflow: hidden;
13971
13984
  text-overflow: ellipsis;
13972
13985
  }
13973
- .pa-command-palette__item-badge {
13974
- flex-shrink: 0;
13975
- font-size: 1.2rem;
13976
- padding: 2px 0.4rem;
13977
- background-color: #e9ecef;
13978
- color: var(--pa-text-color-2);
13979
- border-radius: var(--pa-border-radius-sm);
13980
- }
13981
13986
  .pa-command-palette__footer {
13982
13987
  border-top: 1px solid var(--pa-border-color);
13983
13988
  padding: 0.8rem 0.8rem;
@@ -13993,7 +13998,8 @@ code {
13993
13998
  }
13994
13999
  .pa-command-palette__key {
13995
14000
  padding: 2px 0.4rem;
13996
- background-color: #e9ecef;
14001
+ background-color: var(--pa-command-palette-key-bg);
14002
+ color: var(--pa-command-palette-key-text);
13997
14003
  border: 1px solid var(--pa-border-color);
13998
14004
  border-radius: var(--pa-border-radius-sm);
13999
14005
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
@@ -14117,7 +14123,7 @@ code {
14117
14123
  font-size: 1rem;
14118
14124
  font-weight: 500;
14119
14125
  color: var(--pa-text-color-2);
14120
- background-color: #e9ecef;
14126
+ background-color: var(--pa-subtle-bg);
14121
14127
  border: 1px solid var(--pa-border-color);
14122
14128
  border-radius: var(--pa-border-radius-sm);
14123
14129
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
@@ -14190,7 +14196,7 @@ code {
14190
14196
  font-size: 1rem;
14191
14197
  font-weight: 500;
14192
14198
  color: var(--pa-text-color-1);
14193
- background-color: #e9ecef;
14199
+ background-color: var(--pa-subtle-bg);
14194
14200
  border: 1px solid var(--pa-border-color);
14195
14201
  border-radius: var(--pa-border-radius-sm);
14196
14202
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keenmate/pure-admin-core",
3
- "version": "2.3.2",
3
+ "version": "2.3.3",
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": {
@@ -20,16 +20,18 @@
20
20
  <div class="pa-command-palette__container">
21
21
  <!-- Search input -->
22
22
  <div class="pa-command-palette__search">
23
- <input
24
- type="text"
25
- class="pa-command-palette__input"
26
- id="commandPaletteInput"
27
- placeholder="Search products, orders, users... (try /p, /o, /u)"
28
- autocomplete="off"
29
- spellcheck="false"
30
- >
31
- <!-- Context label (hidden by default, shown when prefix detected) -->
32
- <div class="pa-command-palette__context" id="commandPaletteContext"></div>
23
+ <div class="pa-command-palette__tokens" id="commandPaletteTokens"></div>
24
+ <div class="pa-command-palette__input-wrapper">
25
+ <input
26
+ type="text"
27
+ class="pa-command-palette__input"
28
+ id="commandPaletteInput"
29
+ placeholder="Type / for commands, : to search, or just start typing..."
30
+ autocomplete="off"
31
+ spellcheck="false"
32
+ >
33
+ <div class="pa-command-palette__context" id="commandPaletteContext"></div>
34
+ </div>
33
35
  </div>
34
36
 
35
37
  <!-- Results container -->
@@ -79,7 +81,7 @@
79
81
  <div class="pa-command-palette__item-title">MacBook Pro 16"</div>
80
82
  <div class="pa-command-palette__item-meta">SKU: MBP-16-001 • $2,499.00</div>
81
83
  </div>
82
- <div class="pa-command-palette__item-badge">In Stock</div>
84
+ <span class="pa-badge">In Stock</span>
83
85
  </div>
84
86
 
85
87
  <!-- Active result item -->
@@ -89,7 +91,7 @@
89
91
  <div class="pa-command-palette__item-title">iPhone 15 Pro</div>
90
92
  <div class="pa-command-palette__item-meta">SKU: IP15P-256 • $999.00</div>
91
93
  </div>
92
- <div class="pa-command-palette__item-badge">New</div>
94
+ <span class="pa-badge">New</span>
93
95
  </div>
94
96
 
95
97
  <!-- Result with highlighted search match -->
@@ -99,7 +101,7 @@
99
101
  <div class="pa-command-palette__item-title">Air<mark>Pods</mark> Pro</div>
100
102
  <div class="pa-command-palette__item-meta">SKU: APP-GEN2 • $249.00</div>
101
103
  </div>
102
- <div class="pa-command-palette__item-badge">Popular</div>
104
+ <span class="pa-badge">Popular</span>
103
105
  </div>
104
106
 
105
107
  <!-- Pagination indicator (shown when multiple pages) -->
@@ -459,6 +459,8 @@
459
459
  --pa-command-palette-item-active-bg: #{$command-palette-item-active-bg};
460
460
  --pa-command-palette-highlight-bg: #{$command-palette-highlight-bg};
461
461
  --pa-command-palette-highlight-text: #{$command-palette-highlight-text};
462
+ --pa-command-palette-key-bg: #{$subtle-bg};
463
+ --pa-command-palette-key-text: #{$text-color-1};
462
464
 
463
465
  // =========================================================================
464
466
  // MULTISELECT COLORS
@@ -51,6 +51,12 @@
51
51
  flex-wrap: wrap;
52
52
  gap: $spacing-xs;
53
53
  align-items: center;
54
+ margin-bottom: $spacing-sm;
55
+
56
+ &:empty {
57
+ display: none;
58
+ margin-bottom: 0;
59
+ }
54
60
 
55
61
  .pa-badge {
56
62
  display: inline-flex;
@@ -77,6 +83,16 @@
77
83
  }
78
84
  }
79
85
 
86
+ &__token-prompt {
87
+ font-size: $font-size-xs;
88
+ color: var(--pa-text-color-2);
89
+ font-style: italic;
90
+ }
91
+
92
+ &__input-wrapper {
93
+ position: relative;
94
+ }
95
+
80
96
  &__input {
81
97
  width: 100%;
82
98
  height: $command-palette-input-height;
@@ -100,10 +116,10 @@
100
116
  }
101
117
  }
102
118
 
103
- // Context label (e.g., "Searching in Products")
119
+ // Context label (e.g., "Searching in Products") — positioned relative to input-wrapper
104
120
  &__context {
105
121
  position: absolute;
106
- inset-inline-end: calc(#{$spacing-sm} + #{$command-palette-input-padding-h}); // RTL: flips to left
122
+ inset-inline-end: $command-palette-input-padding-h; // RTL: flips to left
107
123
  top: 50%;
108
124
  transform: translateY(-50%);
109
125
  font-size: $font-size-xs;
@@ -133,7 +149,7 @@
133
149
  content: '';
134
150
  position: absolute;
135
151
  inset: 0; // RTL: full overlay works in both directions
136
- background-color: rgba($modal-content-bg, 0.7);
152
+ background-color: color-mix(in srgb, var(--pa-modal-content-bg) 70%, transparent);
137
153
  pointer-events: none;
138
154
  z-index: 1;
139
155
  }
@@ -231,14 +247,6 @@
231
247
  }
232
248
 
233
249
  // Item badge (e.g., category, status)
234
- &__item-badge {
235
- flex-shrink: 0;
236
- font-size: $font-size-xs;
237
- padding: 2px $spacing-xs;
238
- background-color: $secondary-light-bg;
239
- color: var(--pa-text-color-2);
240
- border-radius: var(--pa-border-radius-sm);
241
- }
242
250
 
243
251
  // Footer with keyboard hints
244
252
  &__footer {
@@ -258,7 +266,8 @@
258
266
 
259
267
  &__key {
260
268
  padding: 2px $spacing-xs;
261
- background-color: $secondary-light-bg;
269
+ background-color: var(--pa-command-palette-key-bg);
270
+ color: var(--pa-command-palette-key-text);
262
271
  border: $border-width-base solid var(--pa-border-color);
263
272
  border-radius: var(--pa-border-radius-sm);
264
273
  font-family: $body-font-family;
@@ -405,7 +414,7 @@
405
414
  font-size: $font-size-2xs;
406
415
  font-weight: $font-weight-medium;
407
416
  color: var(--pa-text-color-2);
408
- background-color: $secondary-light-bg;
417
+ background-color: var(--pa-subtle-bg);
409
418
  border: $border-width-base solid var(--pa-border-color);
410
419
  border-radius: var(--pa-border-radius-sm);
411
420
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
@@ -486,7 +495,7 @@
486
495
  font-size: $font-size-2xs;
487
496
  font-weight: $font-weight-medium;
488
497
  color: var(--pa-text-color-1);
489
- background-color: $secondary-light-bg;
498
+ background-color: var(--pa-subtle-bg);
490
499
  border: $border-width-base solid var(--pa-border-color);
491
500
  border-radius: var(--pa-border-radius-sm);
492
501
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);