@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,598 @@
1
+ <!-- ================================
2
+ LAYOUT & SIDEBAR SNIPPETS
3
+ Pure Admin Visual Framework
4
+ ================================ -->
5
+
6
+ <!-- ================================
7
+ BASIC LAYOUT STRUCTURE
8
+ ================================ -->
9
+
10
+ <!-- Navbar (outside layout container) -->
11
+ <nav class="pa-navbar">
12
+ <div class="pa-navbar__inner">
13
+ <!-- Navbar content uses pa-header__ classes for elements -->
14
+ <!-- Burger menu, brand, navigation, page title, profile -->
15
+ <!-- See HEADER/NAVBAR section below for complete example -->
16
+ </div>
17
+ </nav>
18
+
19
+ <!-- Layout Container (below navbar) -->
20
+ <div class="pa-layout">
21
+ <!-- Layout Inner: Sidebar + Content -->
22
+ <div class="pa-layout__inner">
23
+ <!-- Sidebar -->
24
+ <aside class="pa-layout__sidebar">
25
+ <nav class="pa-sidebar__nav">
26
+ <ul>
27
+ <!-- Sidebar menu items here -->
28
+ <!-- See SIDEBAR sections below for complete examples -->
29
+ </ul>
30
+ </nav>
31
+ </aside>
32
+
33
+ <!-- Layout Content: Main only -->
34
+ <div class="pa-layout__content">
35
+ <!-- Main Content -->
36
+ <main class="pa-layout__main">
37
+ <div class="pa-layout__main__inner">
38
+ <!-- Your page content here -->
39
+ </div>
40
+ </main>
41
+ </div>
42
+ </div>
43
+
44
+ <!-- Footer (outside inner, inside layout) -->
45
+ <footer class="pa-layout__footer">
46
+ <div class="pa-layout__footer__content">
47
+ <p>&copy; 2024 Pure Admin Framework</p>
48
+ </div>
49
+ </footer>
50
+ </div>
51
+
52
+
53
+ <!-- ================================
54
+ LAYOUT WIDTH VARIANTS
55
+ Width is controlled by body classes, not div classes
56
+ ================================ -->
57
+
58
+ <!-- Fluid Layout (Full Width) - Default -->
59
+ <body>
60
+ <div class="pa-layout">
61
+ <!-- Content -->
62
+ </div>
63
+ </body>
64
+
65
+ <!-- Small Container (768px) -->
66
+ <body class="pa-container-sm">
67
+ <div class="pa-layout">
68
+ <!-- Content -->
69
+ </div>
70
+ </body>
71
+
72
+ <!-- Medium Container (1024px) -->
73
+ <body class="pa-container-md">
74
+ <div class="pa-layout">
75
+ <!-- Content -->
76
+ </div>
77
+ </body>
78
+
79
+ <!-- Large Container (1280px) -->
80
+ <body class="pa-container-lg">
81
+ <div class="pa-layout">
82
+ <!-- Content -->
83
+ </div>
84
+ </body>
85
+
86
+ <!-- Extra Large Container (1600px) -->
87
+ <body class="pa-container-xl">
88
+ <div class="pa-layout">
89
+ <!-- Content -->
90
+ </div>
91
+ </body>
92
+
93
+ <!-- 2X Large Container (1920px) -->
94
+ <body class="pa-container-2xl">
95
+ <div class="pa-layout">
96
+ <!-- Content -->
97
+ </div>
98
+ </body>
99
+
100
+
101
+ <!-- ================================
102
+ SIDEBAR - BASIC MENU
103
+ ================================ -->
104
+
105
+ <!-- Sidebar with Simple Links -->
106
+ <aside class="pa-layout__sidebar">
107
+ <nav class="pa-sidebar__nav">
108
+ <ul>
109
+ <li class="pa-sidebar__item">
110
+ <a href="/" class="pa-sidebar__link pa-sidebar__link--active">
111
+ <span class="pa-sidebar__icon">📊</span>
112
+ <span class="pa-sidebar__label">Dashboard</span>
113
+ </a>
114
+ </li>
115
+
116
+ <li class="pa-sidebar__item">
117
+ <a href="/components" class="pa-sidebar__link">
118
+ <span class="pa-sidebar__icon">🧩</span>
119
+ <span class="pa-sidebar__label">Components</span>
120
+ </a>
121
+ </li>
122
+
123
+ <li class="pa-sidebar__item">
124
+ <a href="/forms" class="pa-sidebar__link">
125
+ <span class="pa-sidebar__icon">📝</span>
126
+ <span class="pa-sidebar__label">Forms</span>
127
+ </a>
128
+ </li>
129
+
130
+ <li class="pa-sidebar__item">
131
+ <a href="/tables" class="pa-sidebar__link">
132
+ <span class="pa-sidebar__icon">📋</span>
133
+ <span class="pa-sidebar__label">Tables</span>
134
+ </a>
135
+ </li>
136
+ </ul>
137
+ </nav>
138
+ </aside>
139
+
140
+
141
+ <!-- ================================
142
+ SIDEBAR - WITH FONT AWESOME ICONS
143
+ ================================ -->
144
+
145
+ <!-- Sidebar with Font Awesome Icons -->
146
+ <aside class="pa-layout__sidebar">
147
+ <nav class="pa-sidebar__nav">
148
+ <ul>
149
+ <li class="pa-sidebar__item">
150
+ <a href="/" class="pa-sidebar__link pa-sidebar__link--active">
151
+ <span class="pa-sidebar__icon"><i class="fa-solid fa-chart-line"></i></span>
152
+ <span class="pa-sidebar__label">Dashboard</span>
153
+ </a>
154
+ </li>
155
+
156
+ <li class="pa-sidebar__item">
157
+ <a href="/users" class="pa-sidebar__link">
158
+ <span class="pa-sidebar__icon"><i class="fa-solid fa-users"></i></span>
159
+ <span class="pa-sidebar__label">Users</span>
160
+ </a>
161
+ </li>
162
+
163
+ <li class="pa-sidebar__item">
164
+ <a href="/settings" class="pa-sidebar__link">
165
+ <span class="pa-sidebar__icon"><i class="fa-solid fa-gear"></i></span>
166
+ <span class="pa-sidebar__label">Settings</span>
167
+ </a>
168
+ </li>
169
+ </ul>
170
+ </nav>
171
+ </aside>
172
+
173
+
174
+ <!-- ================================
175
+ SIDEBAR - WITH COLLAPSIBLE SUBMENU
176
+ ================================ -->
177
+
178
+ <!-- Sidebar with Submenu (Two Levels) -->
179
+ <aside class="pa-layout__sidebar">
180
+ <nav class="pa-sidebar__nav">
181
+ <ul>
182
+ <!-- Regular link -->
183
+ <li class="pa-sidebar__item">
184
+ <a href="/" class="pa-sidebar__link">
185
+ <span class="pa-sidebar__icon">📊</span>
186
+ <span class="pa-sidebar__label">Dashboard</span>
187
+ </a>
188
+ </li>
189
+
190
+ <!-- Collapsible submenu -->
191
+ <li class="pa-sidebar__item">
192
+ <button class="pa-sidebar__toggle" onclick="toggleSubmenu(this)">
193
+ <span class="pa-sidebar__icon">📋</span>
194
+ <span class="pa-sidebar__label">Tables</span>
195
+ <span class="pa-sidebar__chevron">›</span>
196
+ </button>
197
+ <ul class="pa-sidebar__submenu">
198
+ <li class="pa-sidebar__item">
199
+ <a href="/tables" class="pa-sidebar__link">
200
+ <span class="pa-sidebar__icon">📊</span>
201
+ <span class="pa-sidebar__label">Standard Tables</span>
202
+ </a>
203
+ </li>
204
+ <li class="pa-sidebar__item">
205
+ <a href="/tables-lazy" class="pa-sidebar__link">
206
+ <span class="pa-sidebar__icon">⚡</span>
207
+ <span class="pa-sidebar__label">Lazy Loading</span>
208
+ </a>
209
+ </li>
210
+ </ul>
211
+ </li>
212
+ </ul>
213
+ </nav>
214
+ </aside>
215
+
216
+
217
+ <!-- ================================
218
+ SIDEBAR - THREE-LEVEL NESTED MENU
219
+ ================================ -->
220
+
221
+ <!-- Sidebar with Three-Level Nesting -->
222
+ <aside class="pa-layout__sidebar">
223
+ <nav class="pa-sidebar__nav">
224
+ <ul>
225
+ <!-- Level 1 -->
226
+ <li class="pa-sidebar__item">
227
+ <button class="pa-sidebar__toggle" onclick="toggleSubmenu(this)">
228
+ <span class="pa-sidebar__icon">⚙️</span>
229
+ <span class="pa-sidebar__label">Settings</span>
230
+ <span class="pa-sidebar__chevron">›</span>
231
+ </button>
232
+ <ul class="pa-sidebar__submenu">
233
+ <!-- Level 2 -->
234
+ <li class="pa-sidebar__item">
235
+ <button class="pa-sidebar__toggle" onclick="toggleSubmenu(this)">
236
+ <span class="pa-sidebar__icon">🔧</span>
237
+ <span class="pa-sidebar__label">Advanced</span>
238
+ <span class="pa-sidebar__chevron">›</span>
239
+ </button>
240
+ <ul class="pa-sidebar__submenu">
241
+ <!-- Level 3 -->
242
+ <li class="pa-sidebar__item">
243
+ <a href="/settings/advanced/security" class="pa-sidebar__link">
244
+ <span class="pa-sidebar__icon">•</span>
245
+ <span class="pa-sidebar__label">Security</span>
246
+ </a>
247
+ </li>
248
+ <li class="pa-sidebar__item">
249
+ <a href="/settings/advanced/performance" class="pa-sidebar__link">
250
+ <span class="pa-sidebar__icon">•</span>
251
+ <span class="pa-sidebar__label">Performance</span>
252
+ </a>
253
+ </li>
254
+ </ul>
255
+ </li>
256
+ </ul>
257
+ </li>
258
+ </ul>
259
+ </nav>
260
+ </aside>
261
+
262
+
263
+ <!-- ================================
264
+ SIDEBAR - COMPLETE EXAMPLE
265
+ ================================ -->
266
+
267
+ <!-- Full Sidebar with Mixed Links and Submenus -->
268
+ <aside class="pa-layout__sidebar">
269
+ <nav class="pa-sidebar__nav">
270
+ <ul>
271
+ <li class="pa-sidebar__item">
272
+ <a href="/" class="pa-sidebar__link pa-sidebar__link--active">
273
+ <span class="pa-sidebar__icon">📊</span>
274
+ <span class="pa-sidebar__label">Dashboard</span>
275
+ </a>
276
+ </li>
277
+
278
+ <li class="pa-sidebar__item">
279
+ <a href="/components" class="pa-sidebar__link">
280
+ <span class="pa-sidebar__icon">🧩</span>
281
+ <span class="pa-sidebar__label">Components</span>
282
+ </a>
283
+ </li>
284
+
285
+ <li class="pa-sidebar__item">
286
+ <a href="/forms" class="pa-sidebar__link">
287
+ <span class="pa-sidebar__icon">📝</span>
288
+ <span class="pa-sidebar__label">Forms</span>
289
+ </a>
290
+ </li>
291
+
292
+ <li class="pa-sidebar__item">
293
+ <a href="/buttons" class="pa-sidebar__link">
294
+ <span class="pa-sidebar__icon">🔘</span>
295
+ <span class="pa-sidebar__label">Buttons</span>
296
+ </a>
297
+ </li>
298
+
299
+ <li class="pa-sidebar__item">
300
+ <a href="/cards" class="pa-sidebar__link">
301
+ <span class="pa-sidebar__icon">🃏</span>
302
+ <span class="pa-sidebar__label">Cards</span>
303
+ </a>
304
+ </li>
305
+
306
+ <li class="pa-sidebar__item">
307
+ <a href="/badges" class="pa-sidebar__link">
308
+ <span class="pa-sidebar__icon">🏷️</span>
309
+ <span class="pa-sidebar__label">Badges</span>
310
+ </a>
311
+ </li>
312
+
313
+ <li class="pa-sidebar__item">
314
+ <a href="/modals" class="pa-sidebar__link">
315
+ <span class="pa-sidebar__icon">🪟</span>
316
+ <span class="pa-sidebar__label">Modals</span>
317
+ </a>
318
+ </li>
319
+
320
+ <li class="pa-sidebar__item">
321
+ <a href="/alerts" class="pa-sidebar__link">
322
+ <span class="pa-sidebar__icon">⚠️</span>
323
+ <span class="pa-sidebar__label">Alerts</span>
324
+ </a>
325
+ </li>
326
+
327
+ <!-- Tables submenu -->
328
+ <li class="pa-sidebar__item">
329
+ <button class="pa-sidebar__toggle" onclick="toggleSubmenu(this)">
330
+ <span class="pa-sidebar__icon">📋</span>
331
+ <span class="pa-sidebar__label">Tables</span>
332
+ <span class="pa-sidebar__chevron">›</span>
333
+ </button>
334
+ <ul class="pa-sidebar__submenu">
335
+ <li class="pa-sidebar__item">
336
+ <a href="/tables" class="pa-sidebar__link">
337
+ <span class="pa-sidebar__icon">📊</span>
338
+ <span class="pa-sidebar__label">Standard Tables</span>
339
+ </a>
340
+ </li>
341
+ <li class="pa-sidebar__item">
342
+ <a href="/tables-lazy" class="pa-sidebar__link">
343
+ <span class="pa-sidebar__icon">⚡</span>
344
+ <span class="pa-sidebar__label">Lazy Loading</span>
345
+ </a>
346
+ </li>
347
+ </ul>
348
+ </li>
349
+ </ul>
350
+ </nav>
351
+ </aside>
352
+
353
+
354
+ <!-- ================================
355
+ SIDEBAR MODES
356
+ ================================ -->
357
+
358
+ <!-- Sticky Sidebar (stays fixed while content scrolls) -->
359
+ <aside class="pa-layout__sidebar pa-layout__sidebar--sticky">
360
+ <!-- Nav content -->
361
+ </aside>
362
+
363
+ <!-- Icon-collapse Sidebar (collapses to icon bar instead of hiding) -->
364
+ <aside class="pa-layout__sidebar pa-layout__sidebar--icon-collapse">
365
+ <!-- Nav content -->
366
+ </aside>
367
+
368
+
369
+ <!-- ================================
370
+ NAVBAR/HEADER (with burger menu and navigation)
371
+ ================================ -->
372
+
373
+ <!-- Complete Navbar Example (hybrid: pa-navbar wrapper, pa-header__ elements) -->
374
+ <nav class="pa-navbar">
375
+ <div class="pa-navbar__inner">
376
+ <!-- Hamburger Menu (burger) -->
377
+ <button class="pa-header__burger burger-menu" onclick="toggleSidebar()" aria-label="Toggle sidebar">
378
+ <span></span>
379
+ <span></span>
380
+ <span></span>
381
+ </button>
382
+
383
+ <!-- Brand -->
384
+ <div class="pa-header__brand">
385
+ <h1>Pure Admin</h1>
386
+ </div>
387
+
388
+ <!-- Left Navigation Links -->
389
+ <nav class="pa-header__nav pa-header__nav--left">
390
+ <ul>
391
+ <li><a href="/">📊 Dashboard</a></li>
392
+ <li><a href="/components">🧩 Components</a></li>
393
+ <li><a href="/forms">📝 Forms</a></li>
394
+ </ul>
395
+ </nav>
396
+
397
+ <!-- Page Title (flexible, with ellipsis) -->
398
+ <div class="pa-header__title">
399
+ <h2>Dashboard</h2>
400
+ </div>
401
+
402
+ <!-- Right Navigation Links -->
403
+ <nav class="pa-header__nav pa-header__nav--right">
404
+ <ul>
405
+ <li><a href="/alerts">⚠️ Alerts</a></li>
406
+ <li><a href="/tables">📋 Tables</a></li>
407
+ </ul>
408
+ </nav>
409
+
410
+ <!-- Profile Button -->
411
+ <button class="pa-header__profile-btn" onclick="toggleProfilePanel()" aria-label="User Profile">
412
+ <span class="pa-btn__icon">👤</span>
413
+ <span class="pa-header__profile-name">John Doe</span>
414
+ </button>
415
+ </div>
416
+ </nav>
417
+
418
+
419
+ <!-- ================================
420
+ JAVASCRIPT - BURGER MENU TOGGLE
421
+ ================================ -->
422
+
423
+ <script>
424
+ /**
425
+ * Toggle sidebar visibility (burger menu)
426
+ */
427
+ function toggleSidebar() {
428
+ const body = document.body;
429
+ const burgerMenu = document.querySelector('.burger-menu');
430
+ const isMobile = window.innerWidth <= 768;
431
+
432
+ if (isMobile) {
433
+ // Mobile: Toggle sidebar visibility
434
+ body.classList.toggle('sidebar-visible');
435
+ burgerMenu.classList.toggle('active');
436
+ } else {
437
+ // Desktop: Toggle sidebar hidden state
438
+ body.classList.toggle('sidebar-hidden');
439
+ burgerMenu.classList.toggle('active');
440
+ const isHidden = body.classList.contains('sidebar-hidden');
441
+ localStorage.setItem('sidebar-hidden', isHidden);
442
+ }
443
+ }
444
+ </script>
445
+
446
+
447
+ <!-- ================================
448
+ JAVASCRIPT - SUBMENU TOGGLE
449
+ ================================ -->
450
+
451
+ <script>
452
+ /**
453
+ * Toggle sidebar submenu open/closed
454
+ * Saves state to localStorage for persistence
455
+ *
456
+ * @param {HTMLElement} button - The .pa-sidebar__toggle button element
457
+ */
458
+ function toggleSubmenu(button) {
459
+ const parentItem = button.closest('.pa-sidebar__item');
460
+ const submenu = parentItem.querySelector('.pa-sidebar__submenu');
461
+
462
+ if (!submenu) return;
463
+
464
+ const isOpen = parentItem.classList.contains('pa-sidebar__item--open');
465
+
466
+ // Toggle current submenu
467
+ if (isOpen) {
468
+ parentItem.classList.remove('pa-sidebar__item--open');
469
+ submenu.classList.remove('pa-sidebar__submenu--open');
470
+ } else {
471
+ parentItem.classList.add('pa-sidebar__item--open');
472
+ submenu.classList.add('pa-sidebar__submenu--open');
473
+ }
474
+
475
+ // Save state to localStorage (optional)
476
+ const submenuId = button.querySelector('.pa-sidebar__label').textContent.toLowerCase().replace(/\s+/g, '-');
477
+ localStorage.setItem(`submenu-${submenuId}`, !isOpen ? 'open' : 'closed');
478
+ }
479
+
480
+ /**
481
+ * Restore submenu states from localStorage on page load (optional)
482
+ */
483
+ document.addEventListener('DOMContentLoaded', function() {
484
+ document.querySelectorAll('.pa-sidebar__toggle').forEach(button => {
485
+ const label = button.querySelector('.pa-sidebar__label');
486
+ if (!label) return;
487
+
488
+ const submenuId = label.textContent.toLowerCase().replace(/\s+/g, '-');
489
+ const savedState = localStorage.getItem(`submenu-${submenuId}`);
490
+
491
+ if (savedState === 'open') {
492
+ const parentItem = button.closest('.pa-sidebar__item');
493
+ const submenu = parentItem.querySelector('.pa-sidebar__submenu');
494
+ if (submenu) {
495
+ parentItem.classList.add('pa-sidebar__item--open');
496
+ submenu.classList.add('pa-sidebar__submenu--open');
497
+ }
498
+ }
499
+ });
500
+ });
501
+ </script>
502
+
503
+
504
+ <!-- ================================
505
+ USAGE NOTES
506
+ ================================ -->
507
+
508
+ <!--
509
+ LAYOUT STRUCTURE (HYBRID NAMING):
510
+ The framework uses a hybrid naming approach:
511
+ - Navbar wrapper: .pa-navbar + .pa-navbar__inner
512
+ - Navbar elements inside use: .pa-header__ classes (burger, brand, nav, title, profile)
513
+ - Layout wrapper: .pa-layout + .pa-layout__inner
514
+ - Sidebar container: .pa-layout__sidebar
515
+ - Sidebar nav elements use: .pa-sidebar__ classes
516
+
517
+ NAVBAR CLASSES:
518
+ - .pa-navbar - Navbar outer wrapper (outside layout container)
519
+ - .pa-navbar__inner - Navbar inner container
520
+
521
+ HEADER/NAVBAR ELEMENT CLASSES (inside pa-navbar__inner):
522
+ - .pa-header__burger - Burger menu button
523
+ - .burger-menu - Burger menu class (same as __burger)
524
+ - .pa-header__brand - Brand/logo area
525
+ - .pa-header__nav - Navigation container
526
+ - .pa-header__nav--left/right - Navigation alignment
527
+ - .pa-header__title - Page title area (flexible, with ellipsis)
528
+ - .pa-header__profile-btn - Profile button
529
+ - .pa-header__profile-name - Profile name text
530
+
531
+ LAYOUT CLASSES:
532
+ - .pa-layout - Main layout wrapper (below navbar)
533
+ - .pa-layout__inner - Inner wrapper for sidebar + content
534
+ - .pa-layout__sidebar - Sidebar container
535
+ - .pa-layout__content - Content wrapper
536
+ - .pa-layout__main - Main content area
537
+ - .pa-layout__main__inner - Main content inner wrapper
538
+ - .pa-layout__footer - Footer container
539
+ - .pa-layout__footer__content - Footer content wrapper
540
+
541
+ LAYOUT WIDTH VARIANTS (applied to body tag):
542
+ - No class - Fluid layout (full width)
543
+ - .pa-container-sm - Small (768px)
544
+ - .pa-container-md - Medium (1024px)
545
+ - .pa-container-lg - Large (1280px)
546
+ - .pa-container-xl - Extra Large (1600px)
547
+ - .pa-container-2xl - 2X Large (1920px)
548
+
549
+ SIDEBAR STRUCTURE:
550
+ - .pa-layout__sidebar - Sidebar container
551
+ - .pa-sidebar__nav - Navigation wrapper
552
+ - .pa-sidebar__item - Menu item container
553
+ - .pa-sidebar__link - Regular menu link
554
+ - .pa-sidebar__toggle - Collapsible menu toggle button
555
+ - .pa-sidebar__icon - Icon container (fixed width)
556
+ - .pa-sidebar__label - Text label
557
+ - .pa-sidebar__chevron - Expand/collapse indicator
558
+ - .pa-sidebar__submenu - Submenu container
559
+ - .pa-sidebar__link--active - Active link state
560
+ - .pa-sidebar__item--open - Open submenu state
561
+ - .pa-sidebar__submenu--open - Open submenu state
562
+
563
+ SIDEBAR MODES (modifiers on .pa-layout__sidebar):
564
+ - Default - Sidebar scrolls with content
565
+ - .pa-layout__sidebar--sticky - Sidebar stays fixed while content scrolls
566
+ - .pa-layout__sidebar--icon-collapse - Sidebar collapses to icon bar instead of hiding
567
+
568
+ BURGER MENU:
569
+ - .burger-menu - Burger menu button (same as .pa-header__burger)
570
+ - Three <span> elements inside for the three lines
571
+ - .active - Active state (X shape when clicked)
572
+
573
+ BURGER MENU ANIMATION:
574
+ - NO .active class → ☰ (3 bars) → Sidebar is visible
575
+ - WITH .active class → ✕ (X shape) → Sidebar is hidden
576
+ - JavaScript toggles .active class on click
577
+ - CSS animates the transition in 150ms (ease-out)
578
+ - Animation details:
579
+ - Top bar: Rotates 45° and translates down/right
580
+ - Middle bar: Fades out (opacity: 0)
581
+ - Bottom bar: Rotates -45° and translates up/right
582
+ - Customizable via SCSS variables:
583
+ - $burger-width: 1.5rem
584
+ - $burger-height: 1.5rem
585
+ - $burger-bar-height: 2px
586
+ - $burger-transform-offset: 3px
587
+ - $transition-normal: 0.15s
588
+ - $easing-snappy: ease-out
589
+
590
+ BODY CLASSES (for sidebar state):
591
+ - .sidebar-hidden - Desktop: Sidebar is hidden
592
+ - .sidebar-visible - Mobile: Sidebar is visible (overlay)
593
+
594
+ JAVASCRIPT:
595
+ - toggleSidebar() - Toggle sidebar visibility (burger menu)
596
+ - toggleSubmenu(button) - Toggle submenu open/closed
597
+ - Stores state in localStorage for persistence across page loads
598
+ -->