@keenmate/pure-admin-core 1.0.0-rc01

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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -0
  3. package/dist/css/main.css +11542 -0
  4. package/dist/fonts/Delivery/Delivery_W_Bd.woff2 +0 -0
  5. package/dist/fonts/Delivery/Delivery_W_BdIt.woff2 +0 -0
  6. package/dist/fonts/Delivery/Delivery_W_CdBlk.woff2 +0 -0
  7. package/dist/fonts/Delivery/Delivery_W_CdLt.woff2 +0 -0
  8. package/dist/fonts/Delivery/Delivery_W_It.woff2 +0 -0
  9. package/dist/fonts/Delivery/Delivery_W_Lt.woff2 +0 -0
  10. package/dist/fonts/Delivery/Delivery_W_LtIt.woff2 +0 -0
  11. package/dist/fonts/Delivery/Delivery_W_Rg.woff2 +0 -0
  12. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2 +0 -0
  13. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.1 +0 -0
  14. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.2 +0 -0
  15. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2 +0 -0
  16. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.1 +0 -0
  17. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.2 +0 -0
  18. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2 +0 -0
  19. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2.1 +0 -0
  20. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2 +0 -0
  21. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.1 +0 -0
  22. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.2 +0 -0
  23. package/dist/fonts/google/6aez4K2oVqwIvtE2H68T.woff2 +0 -0
  24. package/dist/fonts/google/6aez4K2oVqwIvtU2Hw.woff2 +0 -0
  25. package/dist/fonts/google/6aez4K2oVqwIvtY2H68T.woff2 +0 -0
  26. package/dist/fonts/google/6aez4K2oVqwIvtg2H68T.woff2 +0 -0
  27. package/dist/fonts/google/6aez4K2oVqwIvto2H68T.woff2 +0 -0
  28. package/dist/fonts/google/6aez4K2oVqwIvts2H68T.woff2 +0 -0
  29. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nejog.woff2 +0 -0
  30. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nijogp5.woff2 +0 -0
  31. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nmjogp5.woff2 +0 -0
  32. package/dist/fonts/google/PN_xRfK9oXHga0XdZ8g_vT0.woff2 +0 -0
  33. package/dist/fonts/google/PN_xRfK9oXHga0XdZsg_.woff2 +0 -0
  34. package/dist/fonts/google/PN_xRfK9oXHga0XdaMg_vT0.woff2 +0 -0
  35. package/dist/fonts/google/TK3tWkYFABsmjsphPho.woff2 +0 -0
  36. package/dist/fonts/google/TK3tWkYFABsmjspuPho7vA.woff2 +0 -0
  37. package/dist/fonts/google/TK3tWkYFABsmjspvPho7vA.woff2 +0 -0
  38. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjTYJwQj.woff2 +0 -0
  39. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjXYJwQj.woff2 +0 -0
  40. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6Vj_YJwQj.woff2 +0 -0
  41. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjbYJwQj.woff2 +0 -0
  42. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjvYJw.woff2 +0 -0
  43. package/dist/fonts/google/fonts-tracklist.txt +48 -0
  44. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbBjM4.woff2 +0 -0
  45. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbOjM7sfA.woff2 +0 -0
  46. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbPjM7sfA.woff2 +0 -0
  47. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfLtrftV.woff2 +0 -0
  48. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfXtrftV.woff2 +0 -0
  49. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfbtrQ.woff2 +0 -0
  50. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfjtrftV.woff2 +0 -0
  51. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfntrftV.woff2 +0 -0
  52. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfrtrftV.woff2 +0 -0
  53. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfvtrftV.woff2 +0 -0
  54. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_B-bnBeA.woff2 +0 -0
  55. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_C-bk.woff2 +0 -0
  56. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_G-bnBeA.woff2 +0 -0
  57. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_M-bnBeA.woff2 +0 -0
  58. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_N-bnBeA.woff2 +0 -0
  59. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_P-bnBeA.woff2 +0 -0
  60. package/package.json +60 -0
  61. package/snippets/alerts.html +281 -0
  62. package/snippets/badges.html +212 -0
  63. package/snippets/buttons.html +287 -0
  64. package/snippets/cards.html +393 -0
  65. package/snippets/checkbox-lists.html +490 -0
  66. package/snippets/code.html +225 -0
  67. package/snippets/command-palette.html +210 -0
  68. package/snippets/comparison.html +428 -0
  69. package/snippets/customization.html +142 -0
  70. package/snippets/forms.html +477 -0
  71. package/snippets/grid.html +338 -0
  72. package/snippets/layout.html +598 -0
  73. package/snippets/lists.html +232 -0
  74. package/snippets/loaders.html +183 -0
  75. package/snippets/manifest.json +388 -0
  76. package/snippets/modal-dialogs.html +411 -0
  77. package/snippets/modals.html +310 -0
  78. package/snippets/popconfirm.html +253 -0
  79. package/snippets/profile.html +264 -0
  80. package/snippets/tables.html +317 -0
  81. package/snippets/tabs.html +930 -0
  82. package/snippets/timeline.html +364 -0
  83. package/snippets/toasts.html +154 -0
  84. package/snippets/tooltips.html +411 -0
  85. package/snippets/typography.html +101 -0
  86. package/snippets/utilities.html +595 -0
  87. package/snippets/virtual-scroll.html +322 -0
  88. package/snippets/web-daterangepicker.html +634 -0
  89. package/snippets/web-multiselect.html +362 -0
  90. package/src/scss/.claude/settings.local.json +11 -0
  91. package/src/scss/_base-css-variables.scss +348 -0
  92. package/src/scss/_core.scss +99 -0
  93. package/src/scss/_fonts.scss +67 -0
  94. package/src/scss/_purecss-grid-responsive.scss +138 -0
  95. package/src/scss/_purecss-grid.scss +58 -0
  96. package/src/scss/_variables.scss +14 -0
  97. package/src/scss/core-components/_alerts.scss +212 -0
  98. package/src/scss/core-components/_badges.scss +16 -0
  99. package/src/scss/core-components/_base.scss +124 -0
  100. package/src/scss/core-components/_buttons.scss +473 -0
  101. package/src/scss/core-components/_cards.scss +285 -0
  102. package/src/scss/core-components/_checkbox-lists.scss +289 -0
  103. package/src/scss/core-components/_code.scss +141 -0
  104. package/src/scss/core-components/_command-palette.scss +518 -0
  105. package/src/scss/core-components/_comparison.scss +172 -0
  106. package/src/scss/core-components/_file-selector.scss +780 -0
  107. package/src/scss/core-components/_forms.scss +16 -0
  108. package/src/scss/core-components/_grid.scss +264 -0
  109. package/src/scss/core-components/_layout.scss +15 -0
  110. package/src/scss/core-components/_lists.scss +211 -0
  111. package/src/scss/core-components/_loaders.scss +277 -0
  112. package/src/scss/core-components/_logic-tree.scss +280 -0
  113. package/src/scss/core-components/_modals.scss +209 -0
  114. package/src/scss/core-components/_notifications.scss +253 -0
  115. package/src/scss/core-components/_pagers.scss +141 -0
  116. package/src/scss/core-components/_popconfirm.scss +170 -0
  117. package/src/scss/core-components/_profile.scss +281 -0
  118. package/src/scss/core-components/_settings-panel.scss +128 -0
  119. package/src/scss/core-components/_statistics.scss +200 -0
  120. package/src/scss/core-components/_tables.scss +555 -0
  121. package/src/scss/core-components/_tabs.scss +438 -0
  122. package/src/scss/core-components/_timeline.scss +589 -0
  123. package/src/scss/core-components/_toasts.scss +281 -0
  124. package/src/scss/core-components/_tooltips.scss +503 -0
  125. package/src/scss/core-components/_utilities.scss +241 -0
  126. package/src/scss/core-components/_web-components-theme.scss +294 -0
  127. package/src/scss/core-components/badges/_badge-base.scss +131 -0
  128. package/src/scss/core-components/badges/_badge-group.scss +25 -0
  129. package/src/scss/core-components/badges/_composite-badge-variants.scss +396 -0
  130. package/src/scss/core-components/badges/_composite-badge.scss +70 -0
  131. package/src/scss/core-components/badges/_index.scss +10 -0
  132. package/src/scss/core-components/badges/_labels.scss +155 -0
  133. package/src/scss/core-components/forms/_checkboxes-radios.scss +205 -0
  134. package/src/scss/core-components/forms/_form-inputs.scss +100 -0
  135. package/src/scss/core-components/forms/_form-layout.scss +66 -0
  136. package/src/scss/core-components/forms/_form-states.scss +89 -0
  137. package/src/scss/core-components/forms/_index.scss +12 -0
  138. package/src/scss/core-components/forms/_input-groups.scss +149 -0
  139. package/src/scss/core-components/forms/_input-wrapper.scss +89 -0
  140. package/src/scss/core-components/forms/_query-editor.scss +313 -0
  141. package/src/scss/core-components/layout/_index.scss +11 -0
  142. package/src/scss/core-components/layout/_layout-container.scss +105 -0
  143. package/src/scss/core-components/layout/_layout-responsive.scss +100 -0
  144. package/src/scss/core-components/layout/_navbar-elements.scss +238 -0
  145. package/src/scss/core-components/layout/_navbar.scss +71 -0
  146. package/src/scss/core-components/layout/_sidebar-states.scss +228 -0
  147. package/src/scss/core-components/layout/_sidebar.scss +177 -0
  148. package/src/scss/main.scss +7 -0
  149. package/src/scss/themes/_dark-base.scss +207 -0
  150. package/src/scss/themes/audi-light.scss +311 -0
  151. package/src/scss/themes/audi.scss +288 -0
  152. package/src/scss/themes/corporate.scss +203 -0
  153. package/src/scss/themes/dark-blue.scss +152 -0
  154. package/src/scss/themes/dark-green.scss +156 -0
  155. package/src/scss/themes/dark-red.scss +160 -0
  156. package/src/scss/themes/dark.scss +145 -0
  157. package/src/scss/themes/express.scss +281 -0
  158. package/src/scss/themes/minimal.scss +121 -0
  159. package/src/scss/utilities.scss +481 -0
  160. package/src/scss/variables/_base.scss +81 -0
  161. package/src/scss/variables/_colors.scss +148 -0
  162. package/src/scss/variables/_components.scss +509 -0
  163. package/src/scss/variables/_index.scss +13 -0
  164. package/src/scss/variables/_layout.scss +65 -0
  165. package/src/scss/variables/_spacing.scss +66 -0
  166. package/src/scss/variables/_system.scss +80 -0
  167. package/src/scss/variables/_typography.scss +37 -0
@@ -0,0 +1,225 @@
1
+ <!-- CODE COMPONENT SNIPPETS -->
2
+
3
+ <!-- ========================================
4
+ INLINE CODE
5
+ ======================================== -->
6
+
7
+ <!-- Basic inline code -->
8
+ <p>Use the <code>&lt;code&gt;</code> element for inline code.</p>
9
+
10
+ <!-- Inline code in sentences -->
11
+ <p>Install packages with <code>npm install</code> and run with <code>npm start</code>.</p>
12
+
13
+
14
+ <!-- ========================================
15
+ BASIC CODE BLOCKS
16
+ ======================================== -->
17
+
18
+ <!-- Plain code block -->
19
+ <pre class="pa-code">function example() {
20
+ return 'Plain code block';
21
+ }</pre>
22
+
23
+ <!-- JavaScript code block -->
24
+ <pre class="pa-code pa-code--javascript">function greet(name) {
25
+ return `Hello, ${name}!`;
26
+ }
27
+
28
+ const result = greet('World');
29
+ console.log(result);</pre>
30
+
31
+ <!-- JSON code block -->
32
+ <pre class="pa-code pa-code--json">{
33
+ "name": "Pure Admin",
34
+ "version": "1.0.0",
35
+ "theme": "corporate",
36
+ "features": [
37
+ "responsive",
38
+ "themeable",
39
+ "lightweight"
40
+ ]
41
+ }</pre>
42
+
43
+ <!-- HTML code block -->
44
+ <pre class="pa-code pa-code--html">&lt;div class="pa-card"&gt;
45
+ &lt;div class="pa-card__header"&gt;
46
+ &lt;h3&gt;Card Title&lt;/h3&gt;
47
+ &lt;/div&gt;
48
+ &lt;div class="pa-card__body"&gt;
49
+ Content here
50
+ &lt;/div&gt;
51
+ &lt;/div&gt;</pre>
52
+
53
+ <!-- CSS code block -->
54
+ <pre class="pa-code pa-code--css">.pa-btn {
55
+ padding: 0.5rem 0.75rem;
56
+ border-radius: 0.25rem;
57
+ font-size: 0.875rem;
58
+ background-color: #3b82f6;
59
+ color: #ffffff;
60
+ }</pre>
61
+
62
+ <!-- Bash/Terminal code block -->
63
+ <pre class="pa-code pa-code--bash">$ npm install
64
+ $ npm run build
65
+ $ npm start
66
+
67
+ Server running on port 3000...</pre>
68
+
69
+ <!-- SQL code block -->
70
+ <pre class="pa-code pa-code--sql">SELECT users.name, orders.total
71
+ FROM users
72
+ INNER JOIN orders
73
+ ON users.id = orders.user_id
74
+ WHERE orders.status = 'completed'
75
+ ORDER BY orders.total DESC;</pre>
76
+
77
+ <!-- Python code block -->
78
+ <pre class="pa-code pa-code--python">def fibonacci(n):
79
+ if n <= 1:
80
+ return n
81
+ return fibonacci(n-1) + fibonacci(n-2)
82
+
83
+ print(fibonacci(10))</pre>
84
+
85
+
86
+ <!-- ========================================
87
+ CODE BLOCK WITH HEADER
88
+ ======================================== -->
89
+
90
+ <!-- Code block with filename and copy button -->
91
+ <div class="pa-code-block">
92
+ <div class="pa-code-block__header">
93
+ <span class="pa-code-block__title">server.js</span>
94
+ <button class="pa-btn pa-btn--xs pa-btn--secondary" onclick="copyCode(this)">
95
+ <span class="pa-btn__icon">📋</span>
96
+ Copy
97
+ </button>
98
+ </div>
99
+ <div class="pa-code-block__body">
100
+ <pre class="pa-code">const express = require('express');
101
+ const app = express();
102
+
103
+ app.get('/', (req, res) => {
104
+ res.send('Hello World!');
105
+ });
106
+
107
+ app.listen(3000);</pre>
108
+ </div>
109
+ </div>
110
+
111
+ <!-- JSON config file -->
112
+ <div class="pa-code-block">
113
+ <div class="pa-code-block__header">
114
+ <span class="pa-code-block__title">package.json</span>
115
+ <button class="pa-btn pa-btn--xs pa-btn--secondary" onclick="copyCode(this)">
116
+ <span class="pa-btn__icon">📋</span>
117
+ Copy
118
+ </button>
119
+ </div>
120
+ <div class="pa-code-block__body">
121
+ <pre class="pa-code pa-code--json">{
122
+ "name": "my-app",
123
+ "version": "1.0.0",
124
+ "scripts": {
125
+ "start": "node server.js",
126
+ "dev": "nodemon server.js"
127
+ }
128
+ }</pre>
129
+ </div>
130
+ </div>
131
+
132
+
133
+ <!-- ========================================
134
+ COMPACT VARIANT
135
+ ======================================== -->
136
+
137
+ <!-- Compact code block -->
138
+ <pre class="pa-code pa-code--compact">const x = 42;</pre>
139
+
140
+ <!-- Compact with language variant -->
141
+ <pre class="pa-code pa-code--compact pa-code--python">print("Hello World")</pre>
142
+
143
+
144
+ <!-- ========================================
145
+ ALL LANGUAGE VARIANTS
146
+ ======================================== -->
147
+
148
+ <!-- JavaScript - Yellow accent -->
149
+ <pre class="pa-code pa-code--javascript">console.log('JavaScript');</pre>
150
+
151
+ <!-- JSON - Orange accent -->
152
+ <pre class="pa-code pa-code--json">{"language": "JSON"}</pre>
153
+
154
+ <!-- HTML - Red accent -->
155
+ <pre class="pa-code pa-code--html">&lt;div&gt;HTML&lt;/div&gt;</pre>
156
+
157
+ <!-- CSS - Blue accent -->
158
+ <pre class="pa-code pa-code--css">.class { color: blue; }</pre>
159
+
160
+ <!-- Bash - Green accent -->
161
+ <pre class="pa-code pa-code--bash">$ echo "Bash"</pre>
162
+
163
+ <!-- SQL - Teal accent -->
164
+ <pre class="pa-code pa-code--sql">SELECT * FROM table;</pre>
165
+
166
+ <!-- Python - Blue accent -->
167
+ <pre class="pa-code pa-code--python">print("Python")</pre>
168
+
169
+
170
+ <!-- ========================================
171
+ JAVASCRIPT FOR COPY FUNCTIONALITY
172
+ ======================================== -->
173
+
174
+ <script>
175
+ function copyCode(button) {
176
+ const codeBlock = button.closest('.pa-code-block');
177
+ const code = codeBlock.querySelector('.pa-code').textContent;
178
+
179
+ navigator.clipboard.writeText(code).then(() => {
180
+ const originalText = button.innerHTML;
181
+ button.innerHTML = '<span class="pa-btn__icon">✓</span> Copied!';
182
+ button.classList.add('pa-btn--success');
183
+
184
+ setTimeout(() => {
185
+ button.innerHTML = originalText;
186
+ button.classList.remove('pa-btn--success');
187
+ }, 2000);
188
+ });
189
+ }
190
+ </script>
191
+
192
+
193
+ <!-- ========================================
194
+ COMPONENT REFERENCE
195
+ ======================================== -->
196
+
197
+ <!--
198
+ INLINE CODE:
199
+ - <code> - Inline code element with light background
200
+
201
+ CODE BLOCKS:
202
+ - .pa-code - Basic code block (pre element)
203
+ - .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
211
+
212
+ CODE BLOCK WITH HEADER:
213
+ - .pa-code-block - Container with border
214
+ - .pa-code-block__header - Header with title and actions
215
+ - .pa-code-block__title - Filename or description
216
+ - .pa-code-block__body - Body containing .pa-code
217
+
218
+ COMBINE MODIFIERS:
219
+ <pre class="pa-code pa-code--compact pa-code--javascript">
220
+
221
+ USAGE:
222
+ Inline: <code>code here</code>
223
+ Block: <pre class="pa-code">code here</pre>
224
+ With language: <pre class="pa-code pa-code--json">{"key": "value"}</pre>
225
+ -->
@@ -0,0 +1,210 @@
1
+ <!-- ========================================
2
+ Command Palette Component
3
+ macOS Spotlight-style global search
4
+ ======================================== -->
5
+
6
+ <!--
7
+ USAGE:
8
+ - Include this HTML in your layout (globally available)
9
+ - Include /dist/js/command-palette.js for functionality
10
+ - Press Ctrl+K or Cmd+K to open
11
+ - Use /p, /o, /u, /i prefixes for context switching
12
+ -->
13
+
14
+ <!-- Command Palette Modal -->
15
+ <div class="pa-command-palette" id="commandPalette">
16
+ <!-- Backdrop overlay -->
17
+ <div class="pa-command-palette__backdrop" id="commandPaletteBackdrop"></div>
18
+
19
+ <!-- Main container -->
20
+ <div class="pa-command-palette__container">
21
+ <!-- Search input -->
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>
33
+ </div>
34
+
35
+ <!-- Results container -->
36
+ <div class="pa-command-palette__results" id="commandPaletteResults">
37
+ <!-- Empty state (default) -->
38
+ <div class="pa-command-palette__empty">
39
+ Type to search or use /p for products, /o for orders, /u for users, /i for invoices
40
+ </div>
41
+ </div>
42
+
43
+ <!-- Footer with keyboard hints -->
44
+ <div class="pa-command-palette__footer">
45
+ <div class="pa-command-palette__hint">
46
+ <span class="pa-command-palette__key">↑↓</span>
47
+ <span>Navigate</span>
48
+ </div>
49
+ <div class="pa-command-palette__hint">
50
+ <span class="pa-command-palette__key">←→</span>
51
+ <span>Pages</span>
52
+ </div>
53
+ <div class="pa-command-palette__hint">
54
+ <span class="pa-command-palette__key">↵</span>
55
+ <span>Select</span>
56
+ </div>
57
+ <div class="pa-command-palette__hint">
58
+ <span class="pa-command-palette__key">Esc</span>
59
+ <span>Close</span>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+
65
+ <!-- ========================================
66
+ JavaScript States
67
+ ======================================== -->
68
+
69
+ <!-- Loader state (shown during search) -->
70
+ <div class="pa-command-palette__loader">
71
+ <div class="pa-spinner pa-spinner--sm pa-spinner--primary"></div>
72
+ <span>Searching...</span>
73
+ </div>
74
+
75
+ <!-- Result item (generated dynamically) -->
76
+ <div class="pa-command-palette__item">
77
+ <div class="pa-command-palette__item-icon">💻</div>
78
+ <div class="pa-command-palette__item-content">
79
+ <div class="pa-command-palette__item-title">MacBook Pro 16"</div>
80
+ <div class="pa-command-palette__item-meta">SKU: MBP-16-001 • $2,499.00</div>
81
+ </div>
82
+ <div class="pa-command-palette__item-badge">In Stock</div>
83
+ </div>
84
+
85
+ <!-- Active result item -->
86
+ <div class="pa-command-palette__item pa-command-palette__item--active">
87
+ <div class="pa-command-palette__item-icon">📱</div>
88
+ <div class="pa-command-palette__item-content">
89
+ <div class="pa-command-palette__item-title">iPhone 15 Pro</div>
90
+ <div class="pa-command-palette__item-meta">SKU: IP15P-256 • $999.00</div>
91
+ </div>
92
+ <div class="pa-command-palette__item-badge">New</div>
93
+ </div>
94
+
95
+ <!-- Result with highlighted search match -->
96
+ <div class="pa-command-palette__item">
97
+ <div class="pa-command-palette__item-icon">🎧</div>
98
+ <div class="pa-command-palette__item-content">
99
+ <div class="pa-command-palette__item-title">Air<mark>Pods</mark> Pro</div>
100
+ <div class="pa-command-palette__item-meta">SKU: APP-GEN2 • $249.00</div>
101
+ </div>
102
+ <div class="pa-command-palette__item-badge">Popular</div>
103
+ </div>
104
+
105
+ <!-- Pagination indicator (shown when multiple pages) -->
106
+ <div class="pa-command-palette__pagination">
107
+ Page 1 of 3 • 24 results
108
+ </div>
109
+
110
+ <!-- Section header (for grouping results) -->
111
+ <div class="pa-command-palette__section">
112
+ Recent Searches
113
+ </div>
114
+
115
+ <!-- ========================================
116
+ CSS Modifiers
117
+ ======================================== -->
118
+
119
+ <!-- Active state (shows the palette) -->
120
+ <div class="pa-command-palette pa-command-palette--active">
121
+ <!-- ... -->
122
+ </div>
123
+
124
+ <!-- Context label visible -->
125
+ <div class="pa-command-palette__context pa-command-palette__context--visible">
126
+ Searching in Products
127
+ </div>
128
+
129
+ <!-- Results in loading state (shows overlay) -->
130
+ <div class="pa-command-palette__results pa-command-palette__results--loading">
131
+ <!-- ... -->
132
+ </div>
133
+
134
+ <!-- ========================================
135
+ JavaScript API
136
+ ======================================== -->
137
+
138
+ <!--
139
+ // Open palette
140
+ document.getElementById('commandPalette').classList.add('pa-command-palette--active');
141
+ document.getElementById('commandPaletteInput').focus();
142
+
143
+ // Close palette
144
+ document.getElementById('commandPalette').classList.remove('pa-command-palette--active');
145
+ document.getElementById('commandPaletteInput').value = '';
146
+
147
+ // Open with pre-filled query
148
+ const input = document.getElementById('commandPaletteInput');
149
+ input.value = '/p laptop';
150
+ input.dispatchEvent(new Event('input'));
151
+ -->
152
+
153
+ <!-- ========================================
154
+ Context Prefixes
155
+ ======================================== -->
156
+
157
+ <!--
158
+ /p → Products → "Searching in Products"
159
+ /o → Orders → "Searching in Orders"
160
+ /u → Users → "Searching in Users"
161
+ /i → Invoices → "Searching in Invoices"
162
+ -->
163
+
164
+ <!-- ========================================
165
+ Keyboard Shortcuts
166
+ ======================================== -->
167
+
168
+ <!--
169
+ Ctrl+K / Cmd+K → Open/close palette
170
+ ↑ ↓ → Navigate between results
171
+ ← → → Navigate between pages
172
+ Enter → Select highlighted result
173
+ Esc → Close palette
174
+ -->
175
+
176
+ <!-- ========================================
177
+ SCSS Variables (for customization)
178
+ ======================================== -->
179
+
180
+ <!--
181
+ $command-palette-width: 38rem
182
+ $command-palette-offset-top: 8rem
183
+ $command-palette-border-radius: $border-radius
184
+ $command-palette-backdrop-bg: rgba(0, 0, 0, 0.5)
185
+ $command-palette-backdrop-blur: 4px
186
+ $command-palette-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.3)
187
+ $command-palette-input-padding-v: $spacing-base
188
+ $command-palette-input-padding-h: $spacing-lg
189
+ $command-palette-input-font-size: $font-size-lg
190
+ $command-palette-results-max-height: 24rem
191
+ $command-palette-empty-padding-v: $spacing-2xl
192
+ $command-palette-item-padding-v: $spacing-sm
193
+ $command-palette-item-hover-bg: rgba($accent-color, 0.05)
194
+ $command-palette-item-active-bg: rgba($accent-color, 0.1)
195
+ $command-palette-item-icon-size: 2rem
196
+ $command-palette-highlight-bg: rgba($accent-color, 0.2)
197
+ $command-palette-highlight-text: $accent-color
198
+ -->
199
+
200
+ <!-- ========================================
201
+ Implementation Files
202
+ ======================================== -->
203
+
204
+ <!--
205
+ SCSS: src/scss/core-components/_command-palette.scss
206
+ Variables: src/scss/_variables.scss (17 variables)
207
+ JavaScript: dist/js/command-palette.js
208
+ HTML: views/layout.mustache (included globally)
209
+ Demo: /command-palette
210
+ -->