@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.
- package/LICENSE +21 -0
- package/README.md +172 -0
- package/dist/css/main.css +11542 -0
- package/dist/fonts/Delivery/Delivery_W_Bd.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_BdIt.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_CdBlk.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_CdLt.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_It.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_Lt.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_LtIt.woff2 +0 -0
- package/dist/fonts/Delivery/Delivery_W_Rg.woff2 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.1 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.2 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.1 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.2 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2.1 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.1 +0 -0
- package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.2 +0 -0
- package/dist/fonts/google/6aez4K2oVqwIvtE2H68T.woff2 +0 -0
- package/dist/fonts/google/6aez4K2oVqwIvtU2Hw.woff2 +0 -0
- package/dist/fonts/google/6aez4K2oVqwIvtY2H68T.woff2 +0 -0
- package/dist/fonts/google/6aez4K2oVqwIvtg2H68T.woff2 +0 -0
- package/dist/fonts/google/6aez4K2oVqwIvto2H68T.woff2 +0 -0
- package/dist/fonts/google/6aez4K2oVqwIvts2H68T.woff2 +0 -0
- package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nejog.woff2 +0 -0
- package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nijogp5.woff2 +0 -0
- package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nmjogp5.woff2 +0 -0
- package/dist/fonts/google/PN_xRfK9oXHga0XdZ8g_vT0.woff2 +0 -0
- package/dist/fonts/google/PN_xRfK9oXHga0XdZsg_.woff2 +0 -0
- package/dist/fonts/google/PN_xRfK9oXHga0XdaMg_vT0.woff2 +0 -0
- package/dist/fonts/google/TK3tWkYFABsmjsphPho.woff2 +0 -0
- package/dist/fonts/google/TK3tWkYFABsmjspuPho7vA.woff2 +0 -0
- package/dist/fonts/google/TK3tWkYFABsmjspvPho7vA.woff2 +0 -0
- package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjTYJwQj.woff2 +0 -0
- package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjXYJwQj.woff2 +0 -0
- package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6Vj_YJwQj.woff2 +0 -0
- package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjbYJwQj.woff2 +0 -0
- package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjvYJw.woff2 +0 -0
- package/dist/fonts/google/fonts-tracklist.txt +48 -0
- package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbBjM4.woff2 +0 -0
- package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbOjM7sfA.woff2 +0 -0
- package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbPjM7sfA.woff2 +0 -0
- package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfLtrftV.woff2 +0 -0
- package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfXtrftV.woff2 +0 -0
- package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfbtrQ.woff2 +0 -0
- package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfjtrftV.woff2 +0 -0
- package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfntrftV.woff2 +0 -0
- package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfrtrftV.woff2 +0 -0
- package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfvtrftV.woff2 +0 -0
- package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_B-bnBeA.woff2 +0 -0
- package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_C-bk.woff2 +0 -0
- package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_G-bnBeA.woff2 +0 -0
- package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_M-bnBeA.woff2 +0 -0
- package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_N-bnBeA.woff2 +0 -0
- package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_P-bnBeA.woff2 +0 -0
- package/package.json +60 -0
- package/snippets/alerts.html +281 -0
- package/snippets/badges.html +212 -0
- package/snippets/buttons.html +287 -0
- package/snippets/cards.html +393 -0
- package/snippets/checkbox-lists.html +490 -0
- package/snippets/code.html +225 -0
- package/snippets/command-palette.html +210 -0
- package/snippets/comparison.html +428 -0
- package/snippets/customization.html +142 -0
- package/snippets/forms.html +477 -0
- package/snippets/grid.html +338 -0
- package/snippets/layout.html +598 -0
- package/snippets/lists.html +232 -0
- package/snippets/loaders.html +183 -0
- package/snippets/manifest.json +388 -0
- package/snippets/modal-dialogs.html +411 -0
- package/snippets/modals.html +310 -0
- package/snippets/popconfirm.html +253 -0
- package/snippets/profile.html +264 -0
- package/snippets/tables.html +317 -0
- package/snippets/tabs.html +930 -0
- package/snippets/timeline.html +364 -0
- package/snippets/toasts.html +154 -0
- package/snippets/tooltips.html +411 -0
- package/snippets/typography.html +101 -0
- package/snippets/utilities.html +595 -0
- package/snippets/virtual-scroll.html +322 -0
- package/snippets/web-daterangepicker.html +634 -0
- package/snippets/web-multiselect.html +362 -0
- package/src/scss/.claude/settings.local.json +11 -0
- package/src/scss/_base-css-variables.scss +348 -0
- package/src/scss/_core.scss +99 -0
- package/src/scss/_fonts.scss +67 -0
- package/src/scss/_purecss-grid-responsive.scss +138 -0
- package/src/scss/_purecss-grid.scss +58 -0
- package/src/scss/_variables.scss +14 -0
- package/src/scss/core-components/_alerts.scss +212 -0
- package/src/scss/core-components/_badges.scss +16 -0
- package/src/scss/core-components/_base.scss +124 -0
- package/src/scss/core-components/_buttons.scss +473 -0
- package/src/scss/core-components/_cards.scss +285 -0
- package/src/scss/core-components/_checkbox-lists.scss +289 -0
- package/src/scss/core-components/_code.scss +141 -0
- package/src/scss/core-components/_command-palette.scss +518 -0
- package/src/scss/core-components/_comparison.scss +172 -0
- package/src/scss/core-components/_file-selector.scss +780 -0
- package/src/scss/core-components/_forms.scss +16 -0
- package/src/scss/core-components/_grid.scss +264 -0
- package/src/scss/core-components/_layout.scss +15 -0
- package/src/scss/core-components/_lists.scss +211 -0
- package/src/scss/core-components/_loaders.scss +277 -0
- package/src/scss/core-components/_logic-tree.scss +280 -0
- package/src/scss/core-components/_modals.scss +209 -0
- package/src/scss/core-components/_notifications.scss +253 -0
- package/src/scss/core-components/_pagers.scss +141 -0
- package/src/scss/core-components/_popconfirm.scss +170 -0
- package/src/scss/core-components/_profile.scss +281 -0
- package/src/scss/core-components/_settings-panel.scss +128 -0
- package/src/scss/core-components/_statistics.scss +200 -0
- package/src/scss/core-components/_tables.scss +555 -0
- package/src/scss/core-components/_tabs.scss +438 -0
- package/src/scss/core-components/_timeline.scss +589 -0
- package/src/scss/core-components/_toasts.scss +281 -0
- package/src/scss/core-components/_tooltips.scss +503 -0
- package/src/scss/core-components/_utilities.scss +241 -0
- package/src/scss/core-components/_web-components-theme.scss +294 -0
- package/src/scss/core-components/badges/_badge-base.scss +131 -0
- package/src/scss/core-components/badges/_badge-group.scss +25 -0
- package/src/scss/core-components/badges/_composite-badge-variants.scss +396 -0
- package/src/scss/core-components/badges/_composite-badge.scss +70 -0
- package/src/scss/core-components/badges/_index.scss +10 -0
- package/src/scss/core-components/badges/_labels.scss +155 -0
- package/src/scss/core-components/forms/_checkboxes-radios.scss +205 -0
- package/src/scss/core-components/forms/_form-inputs.scss +100 -0
- package/src/scss/core-components/forms/_form-layout.scss +66 -0
- package/src/scss/core-components/forms/_form-states.scss +89 -0
- package/src/scss/core-components/forms/_index.scss +12 -0
- package/src/scss/core-components/forms/_input-groups.scss +149 -0
- package/src/scss/core-components/forms/_input-wrapper.scss +89 -0
- package/src/scss/core-components/forms/_query-editor.scss +313 -0
- package/src/scss/core-components/layout/_index.scss +11 -0
- package/src/scss/core-components/layout/_layout-container.scss +105 -0
- package/src/scss/core-components/layout/_layout-responsive.scss +100 -0
- package/src/scss/core-components/layout/_navbar-elements.scss +238 -0
- package/src/scss/core-components/layout/_navbar.scss +71 -0
- package/src/scss/core-components/layout/_sidebar-states.scss +228 -0
- package/src/scss/core-components/layout/_sidebar.scss +177 -0
- package/src/scss/main.scss +7 -0
- package/src/scss/themes/_dark-base.scss +207 -0
- package/src/scss/themes/audi-light.scss +311 -0
- package/src/scss/themes/audi.scss +288 -0
- package/src/scss/themes/corporate.scss +203 -0
- package/src/scss/themes/dark-blue.scss +152 -0
- package/src/scss/themes/dark-green.scss +156 -0
- package/src/scss/themes/dark-red.scss +160 -0
- package/src/scss/themes/dark.scss +145 -0
- package/src/scss/themes/express.scss +281 -0
- package/src/scss/themes/minimal.scss +121 -0
- package/src/scss/utilities.scss +481 -0
- package/src/scss/variables/_base.scss +81 -0
- package/src/scss/variables/_colors.scss +148 -0
- package/src/scss/variables/_components.scss +509 -0
- package/src/scss/variables/_index.scss +13 -0
- package/src/scss/variables/_layout.scss +65 -0
- package/src/scss/variables/_spacing.scss +66 -0
- package/src/scss/variables/_system.scss +80 -0
- 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>© 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
|
+
-->
|