@awes-io/ui 2.142.3 → 2.144.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/assets/css/components/_index.css +7 -1
  2. package/assets/css/components/action-card.css +1 -0
  3. package/assets/css/components/action-icon.css +2 -2
  4. package/assets/css/components/alert.css +28 -22
  5. package/assets/css/components/animation.css +52 -32
  6. package/assets/css/components/badge.css +1 -0
  7. package/assets/css/components/banner-text.css +15 -4
  8. package/assets/css/components/card.css +0 -1
  9. package/assets/css/components/content-placeholder.css +104 -0
  10. package/assets/css/components/dropdown.css +20 -7
  11. package/assets/css/components/empty-container.css +69 -1
  12. package/assets/css/components/filter-chosen.css +6 -0
  13. package/assets/css/components/filter-date-range.css +17 -1
  14. package/assets/css/components/filter-month.css +23 -17
  15. package/assets/css/components/filter-select.css +11 -0
  16. package/assets/css/components/icon-menu-item.css +12 -7
  17. package/assets/css/components/layout.css +1 -32
  18. package/assets/css/components/mobile-menu-nav.css +8 -4
  19. package/assets/css/components/modal.css +1 -1
  20. package/assets/css/components/number.css +12 -0
  21. package/assets/css/components/page-aside.css +54 -0
  22. package/assets/css/components/text-field.css +4 -0
  23. package/assets/js/css.js +1 -1
  24. package/assets/js/icons/mono.js +59 -91
  25. package/assets/js/icons/multicolor.js +1 -31
  26. package/components/1_atoms/AwActionIcon.vue +11 -2
  27. package/components/1_atoms/AwContentPlaceholder.vue +60 -0
  28. package/components/1_atoms/AwFlow.vue +37 -49
  29. package/components/1_atoms/AwGrid.vue +11 -3
  30. package/components/1_atoms/AwIcon/AwIcon.vue +5 -3
  31. package/components/1_atoms/AwIcon/AwIconSystemMono.vue +3 -2
  32. package/components/1_atoms/AwInput.vue +2 -2
  33. package/components/1_atoms/AwLabel.vue +1 -1
  34. package/components/1_atoms/AwList.vue +3 -1
  35. package/components/1_atoms/AwRadio.vue +1 -1
  36. package/components/1_atoms/AwSlider.vue +15 -1
  37. package/components/1_atoms/AwTag.vue +6 -1
  38. package/components/2_molecules/AwAlert.vue +63 -42
  39. package/components/2_molecules/AwBadge.vue +1 -1
  40. package/components/2_molecules/AwBannerText.vue +8 -2
  41. package/components/2_molecules/AwButton.vue +1 -1
  42. package/components/2_molecules/AwDescriptionInput.vue +19 -1
  43. package/components/2_molecules/AwEmptyContainer.vue +74 -72
  44. package/components/2_molecules/AwNumber.vue +180 -0
  45. package/components/2_molecules/AwSelect.vue +11 -4
  46. package/components/3_organisms/AwBottomBar.vue +22 -4
  47. package/components/3_organisms/AwFilterChosen.vue +73 -0
  48. package/components/3_organisms/AwFilterDateRange.vue +177 -0
  49. package/components/3_organisms/AwFilterMonth.vue +37 -40
  50. package/components/3_organisms/AwFilterSelect.vue +368 -0
  51. package/components/3_organisms/AwMultiBlockBuilder.vue +1 -1
  52. package/components/3_organisms/AwSubnav.vue +11 -1
  53. package/components/3_organisms/AwTable/AwTableBuilder.vue +20 -60
  54. package/components/3_organisms/AwTable/_AwTableCellDropdown.vue +6 -1
  55. package/components/3_organisms/AwTable/_AwTableRow.vue +2 -1
  56. package/components/4_pages/AwPage.vue +1 -0
  57. package/components/4_pages/AwPageAside.vue +108 -0
  58. package/components/5_layouts/AwLayoutCenter.vue +3 -8
  59. package/components/5_layouts/_AwMenuItemIcon.vue +9 -2
  60. package/components/5_layouts/_AwMobileMenuItem.vue +5 -3
  61. package/components/5_layouts/_AwUserMenu.vue +1 -1
  62. package/components/_config.js +26 -1
  63. package/docs/_template.md +80 -0
  64. package/docs/components/atoms/aw-accordion-fold.md +129 -0
  65. package/docs/components/atoms/aw-action-card-body.md +99 -0
  66. package/docs/components/atoms/aw-action-card.md +130 -0
  67. package/docs/components/atoms/aw-action-icon.md +126 -0
  68. package/docs/components/atoms/aw-avatar.md +106 -0
  69. package/docs/components/atoms/aw-card.md +137 -0
  70. package/docs/components/atoms/aw-checkbox.md +288 -0
  71. package/docs/components/atoms/aw-content-placeholder.md +147 -0
  72. package/docs/components/atoms/aw-description.md +83 -0
  73. package/docs/components/atoms/aw-dock.md +90 -0
  74. package/docs/components/atoms/aw-dropdown-button.md +94 -0
  75. package/docs/components/atoms/aw-dropdown.md +178 -0
  76. package/docs/components/atoms/aw-file.md +73 -0
  77. package/docs/components/atoms/aw-flow.md +140 -0
  78. package/docs/components/atoms/aw-grid.md +109 -0
  79. package/docs/components/atoms/aw-headline.md +71 -0
  80. package/docs/components/atoms/aw-icon-system-color.md +122 -0
  81. package/docs/components/atoms/aw-icon-system-mono.md +206 -0
  82. package/docs/components/atoms/aw-icon.md +235 -0
  83. package/docs/components/atoms/aw-info.md +123 -0
  84. package/docs/components/atoms/aw-input.md +212 -0
  85. package/docs/components/atoms/aw-label.md +136 -0
  86. package/docs/components/atoms/aw-link.md +151 -0
  87. package/docs/components/atoms/aw-list.md +152 -0
  88. package/docs/components/atoms/aw-progress.md +119 -0
  89. package/docs/components/atoms/aw-radio.md +182 -0
  90. package/docs/components/atoms/aw-refresh-wrapper.md +81 -0
  91. package/docs/components/atoms/aw-select-native.md +234 -0
  92. package/docs/components/atoms/aw-slider.md +189 -0
  93. package/docs/components/atoms/aw-sub-headline.md +73 -0
  94. package/docs/components/atoms/aw-switcher.md +192 -0
  95. package/docs/components/atoms/aw-tag.md +144 -0
  96. package/docs/components/atoms/aw-title.md +70 -0
  97. package/docs/components/atoms/aw-toggler.md +90 -0
  98. package/docs/components/layouts/aw-layout-center.md +168 -0
  99. package/docs/components/layouts/aw-layout-error.md +153 -0
  100. package/docs/components/layouts/aw-layout-provider.md +238 -0
  101. package/docs/components/layouts/aw-layout.md +88 -0
  102. package/docs/components/molecules/aw-action-button.md +138 -0
  103. package/docs/components/molecules/aw-alert.md +191 -0
  104. package/docs/components/molecules/aw-badge.md +129 -0
  105. package/docs/components/molecules/aw-banner-text.md +156 -0
  106. package/docs/components/molecules/aw-button-nav.md +111 -0
  107. package/docs/components/molecules/aw-button.md +193 -0
  108. package/docs/components/molecules/aw-description-input.md +124 -0
  109. package/docs/components/molecules/aw-empty-container.md +235 -0
  110. package/docs/components/molecules/aw-island.md +506 -0
  111. package/docs/components/molecules/aw-number.md +138 -0
  112. package/docs/components/molecules/aw-select-object.md +401 -0
  113. package/docs/components/molecules/aw-select.md +215 -0
  114. package/docs/components/molecules/aw-tab-nav.md +108 -0
  115. package/docs/components/molecules/aw-tel.md +129 -0
  116. package/docs/components/molecules/aw-textarea.md +83 -0
  117. package/docs/components/molecules/aw-userpic.md +115 -0
  118. package/docs/components/organisms/aw-address-block.md +64 -0
  119. package/docs/components/organisms/aw-address.md +132 -0
  120. package/docs/components/organisms/aw-birthday-picker.md +73 -0
  121. package/docs/components/organisms/aw-bottom-bar.md +66 -0
  122. package/docs/components/organisms/aw-calendar-days.md +115 -0
  123. package/docs/components/organisms/aw-calendar-nav.md +98 -0
  124. package/docs/components/organisms/aw-calendar-view.md +98 -0
  125. package/docs/components/organisms/aw-calendar.md +166 -0
  126. package/docs/components/organisms/aw-chart.md +154 -0
  127. package/docs/components/organisms/aw-chip-select.md +164 -0
  128. package/docs/components/organisms/aw-chip.md +126 -0
  129. package/docs/components/organisms/aw-code-snippet.md +94 -0
  130. package/docs/components/organisms/aw-code.md +132 -0
  131. package/docs/components/organisms/aw-context-menu.md +117 -0
  132. package/docs/components/organisms/aw-cropper.md +151 -0
  133. package/docs/components/organisms/aw-date.md +161 -0
  134. package/docs/components/organisms/aw-display-date.md +33 -0
  135. package/docs/components/organisms/aw-download-link.md +46 -0
  136. package/docs/components/organisms/aw-fetch-data.md +161 -0
  137. package/docs/components/organisms/aw-filter-chosen.md +226 -0
  138. package/docs/components/organisms/aw-filter-date-range.md +205 -0
  139. package/docs/components/organisms/aw-filter-month.md +43 -0
  140. package/docs/components/organisms/aw-filter-select.md +239 -0
  141. package/docs/components/organisms/aw-form.md +174 -0
  142. package/docs/components/organisms/aw-gmap-marker.md +86 -0
  143. package/docs/components/organisms/aw-gmap.md +90 -0
  144. package/docs/components/organisms/aw-image-upload.md +56 -0
  145. package/docs/components/organisms/aw-island-avatar.md +87 -0
  146. package/docs/components/organisms/aw-markdown-editor.md +104 -0
  147. package/docs/components/organisms/aw-modal-buttons.md +57 -0
  148. package/docs/components/organisms/aw-modal.md +246 -0
  149. package/docs/components/organisms/aw-model-edit.md +74 -0
  150. package/docs/components/organisms/aw-money.md +53 -0
  151. package/docs/components/organisms/aw-multi-block-builder.md +165 -0
  152. package/docs/components/organisms/aw-pagination.md +121 -0
  153. package/docs/components/organisms/aw-password.md +103 -0
  154. package/docs/components/organisms/aw-preview-card.md +45 -0
  155. package/docs/components/organisms/aw-search.md +116 -0
  156. package/docs/components/organisms/aw-subnav.md +122 -0
  157. package/docs/components/organisms/aw-table-builder.md +165 -0
  158. package/docs/components/organisms/aw-table-col.md +123 -0
  159. package/docs/components/organisms/aw-table-head.md +92 -0
  160. package/docs/components/organisms/aw-table-row.md +91 -0
  161. package/docs/components/organisms/aw-table.md +172 -0
  162. package/docs/components/organisms/aw-tags.md +54 -0
  163. package/docs/components/organisms/aw-toggle-show-aside.md +43 -0
  164. package/docs/components/organisms/aw-uploader-files.md +125 -0
  165. package/docs/components/organisms/aw-uploader.md +163 -0
  166. package/docs/components/organisms/aw-user-menu.md +87 -0
  167. package/docs/components/pages/aw-page-aside.md +296 -0
  168. package/docs/components/pages/aw-page-menu-buttons.md +172 -0
  169. package/docs/components/pages/aw-page-modal.md +198 -0
  170. package/docs/components/pages/aw-page-single.md +300 -0
  171. package/docs/components/pages/aw-page.md +194 -0
  172. package/docs/configuration.md +493 -0
  173. package/docs/cookbook/advanced-patterns.md +1388 -0
  174. package/docs/cookbook/common-patterns.md +965 -0
  175. package/docs/cookbook/index.md +786 -0
  176. package/docs/getting-started.md +596 -0
  177. package/docs/guides/best-practices.md +1106 -0
  178. package/docs/guides/data-fetching.md +852 -0
  179. package/docs/guides/error-handling.md +1172 -0
  180. package/docs/guides/forms-guide.md +1329 -0
  181. package/docs/guides/mobile-subnavigation.md +359 -0
  182. package/docs/guides/page-patterns/aside-pages.md +1418 -0
  183. package/docs/guides/page-patterns/dashboard-pages.md +990 -0
  184. package/docs/guides/page-patterns/detail-pages.md +1556 -0
  185. package/docs/guides/page-patterns/list-pages.md +1242 -0
  186. package/docs/index.md +263 -1
  187. package/docs/integrations.md +870 -0
  188. package/docs/reference/colors.md +232 -0
  189. package/docs/reference/icons.md +163 -0
  190. package/docs/reference/menu.md +462 -0
  191. package/docs/reference/plugins.md +970 -0
  192. package/docs/reference/troubleshooting.md +964 -0
  193. package/nuxt/awes.config.js +9 -8
  194. package/nuxt/index.js +2 -2
  195. package/nuxt/pages/more.vue +1 -1
  196. package/package.json +5 -3
  197. package/readme.md +171 -1
  198. package/store/awesIo.js +11 -0
  199. package/CHANGELOG.md +0 -4520
  200. package/docs/aw-accordion-fold.md +0 -46
  201. package/docs/aw-address.md +0 -44
  202. package/docs/aw-avatar.md +0 -51
  203. package/docs/aw-badge.md +0 -32
  204. package/docs/aw-button-nav.md +0 -44
  205. package/docs/aw-button.md +0 -50
  206. package/docs/aw-calendar-days.md +0 -46
  207. package/docs/aw-calendar-nav.md +0 -25
  208. package/docs/aw-calendar-view.md +0 -12
  209. package/docs/aw-calendar.md +0 -59
  210. package/docs/aw-card.md +0 -48
  211. package/docs/aw-chart.md +0 -51
  212. package/docs/aw-checkbox.md +0 -56
  213. package/docs/aw-chip-select.md +0 -46
  214. package/docs/aw-chip.md +0 -53
  215. package/docs/aw-code-snippet.md +0 -18
  216. package/docs/aw-code.md +0 -56
  217. package/docs/aw-content-wrapper.md +0 -40
  218. package/docs/aw-context-menu.md +0 -31
  219. package/docs/aw-cropper.md +0 -60
  220. package/docs/aw-dashboard-card.md +0 -37
  221. package/docs/aw-dashboard-donut.md +0 -30
  222. package/docs/aw-dashboard-line.md +0 -20
  223. package/docs/aw-dashboard-progress.md +0 -33
  224. package/docs/aw-dashboard-section.md +0 -32
  225. package/docs/aw-dashboard-speed.md +0 -30
  226. package/docs/aw-date.md +0 -52
  227. package/docs/aw-dropdown-button.md +0 -31
  228. package/docs/aw-dropdown.md +0 -69
  229. package/docs/aw-fetch-data.md +0 -45
  230. package/docs/aw-form.md +0 -52
  231. package/docs/aw-grid.md +0 -48
  232. package/docs/aw-icon.md +0 -50
  233. package/docs/aw-info.md +0 -53
  234. package/docs/aw-input.md +0 -55
  235. package/docs/aw-layout-default.md +0 -30
  236. package/docs/aw-layout-frame-center.md +0 -29
  237. package/docs/aw-layout-simple.md +0 -49
  238. package/docs/aw-link.md +0 -54
  239. package/docs/aw-markdown-editor.md +0 -51
  240. package/docs/aw-modal.md +0 -63
  241. package/docs/aw-multi-block-builder.md +0 -66
  242. package/docs/aw-page.md +0 -36
  243. package/docs/aw-pagination.md +0 -54
  244. package/docs/aw-password.md +0 -48
  245. package/docs/aw-radio.md +0 -54
  246. package/docs/aw-search.md +0 -49
  247. package/docs/aw-select.md +0 -93
  248. package/docs/aw-slider.md +0 -40
  249. package/docs/aw-svg-image.md +0 -19
  250. package/docs/aw-switcher.md +0 -51
  251. package/docs/aw-tab-nav.md +0 -55
  252. package/docs/aw-table-builder.md +0 -58
  253. package/docs/aw-table-col.md +0 -33
  254. package/docs/aw-table-head.md +0 -28
  255. package/docs/aw-table-row.md +0 -33
  256. package/docs/aw-table.md +0 -59
  257. package/docs/aw-tel.md +0 -47
  258. package/docs/aw-textarea.md +0 -47
  259. package/docs/aw-toggler.md +0 -41
  260. package/docs/aw-uploader-files.md +0 -20
  261. package/docs/aw-uploader.md +0 -60
  262. package/docs/aw-user-menu.md +0 -34
  263. package/docs/aw-userpic.md +0 -34
  264. /package/components/{3_organisms → 2_molecules}/AwTel.vue +0 -0
@@ -0,0 +1,786 @@
1
+ ---
2
+ metaTitle: Component Cookbook | AwesCode UI
3
+ meta:
4
+ - name: description
5
+ content: Common UI patterns and recipes using AwesCode UI components - real-world examples for building applications.
6
+ title: Component Cookbook
7
+ ---
8
+
9
+ # Component Cookbook
10
+
11
+ Real-world patterns and recipes for common UI scenarios.
12
+
13
+ ## Table of Contents
14
+
15
+ - [Authentication](#authentication)
16
+ - [Data Tables](#data-tables)
17
+ - [User Profiles](#user-profiles)
18
+ - [Dashboards](#dashboards)
19
+ - [Lists & Cards](#lists--cards)
20
+ - [Navigation](#navigation)
21
+ - [Notifications](#notifications)
22
+ - [Modals & Dialogs](#modals--dialogs)
23
+
24
+ ## Authentication
25
+
26
+ ### Login Page
27
+
28
+ ```markup
29
+ <template>
30
+ <AwCard class="max-w-md mx-auto">
31
+ <template #title>
32
+ <AwHeadline>Sign In</AwHeadline>
33
+ </template>
34
+
35
+ <form @submit.prevent="onLogin">
36
+ <AwGrid>
37
+ <AwInput
38
+ v-model="formData.email"
39
+ name="email"
40
+ label="Email"
41
+ type="email"
42
+ required
43
+ autofocus
44
+ />
45
+
46
+ <AwPassword
47
+ v-model="formData.password"
48
+ name="password"
49
+ label="Password"
50
+ required
51
+ />
52
+
53
+ <AwFlow justify="between" align="center">
54
+ <AwCheckbox v-model="formData.remember" label="Remember me" />
55
+ <AwLink href="/forgot-password">Forgot password?</AwLink>
56
+ </AwFlow>
57
+
58
+ <AwButton type="submit" size="lg" class="w-full">
59
+ Sign In
60
+ </AwButton>
61
+ </AwGrid>
62
+ </form>
63
+
64
+ <AwDescription tag="div" class="text-center mt-4">
65
+ Don't have an account?
66
+ <AwLink href="/register">Sign up</AwLink>
67
+ </AwDescription>
68
+ </AwCard>
69
+ </template>
70
+
71
+ <script>
72
+ export default {
73
+ layout: 'center',
74
+
75
+ data() {
76
+ return {
77
+ formData: {
78
+ email: '',
79
+ password: '',
80
+ remember: true
81
+ }
82
+ }
83
+ },
84
+
85
+ methods: {
86
+ onLogin() {
87
+ this.$notify({
88
+ title: 'Login successful',
89
+ type: 'success'
90
+ })
91
+ this.$router.push('/dashboard')
92
+ }
93
+ }
94
+ }
95
+ </script>
96
+ ```
97
+
98
+ ### Registration Form
99
+
100
+ ```markup
101
+ <template>
102
+ <AwCard class="max-w-lg mx-auto">
103
+ <template #title>
104
+ <AwHeadline>Create Account</AwHeadline>
105
+ </template>
106
+
107
+ <form @submit.prevent="onRegister">
108
+ <AwGrid>
109
+ <AwGrid :cols="2" :gap="4">
110
+ <AwInput
111
+ v-model="formData.first_name"
112
+ name="first_name"
113
+ label="First Name"
114
+ required
115
+ />
116
+ <AwInput
117
+ v-model="formData.last_name"
118
+ name="last_name"
119
+ label="Last Name"
120
+ required
121
+ />
122
+ </AwGrid>
123
+
124
+ <AwInput
125
+ v-model="formData.email"
126
+ name="email"
127
+ label="Email"
128
+ type="email"
129
+ required
130
+ />
131
+
132
+ <AwPassword
133
+ v-model="formData.password"
134
+ name="password"
135
+ label="Password"
136
+ required
137
+ minlength="8"
138
+ />
139
+
140
+ <AwPassword
141
+ v-model="formData.password_confirmation"
142
+ name="password_confirmation"
143
+ label="Confirm Password"
144
+ required
145
+ />
146
+
147
+ <AwCheckbox v-model="formData.terms" label="I agree to the Terms of Service" required />
148
+
149
+ <AwButton type="submit" size="lg" class="w-full">
150
+ Create Account
151
+ </AwButton>
152
+ </AwGrid>
153
+ </form>
154
+
155
+ <AwDescription tag="div" class="text-center mt-4">
156
+ Already have an account?
157
+ <AwLink href="/login">Sign in</AwLink>
158
+ </AwDescription>
159
+ </AwCard>
160
+ </template>
161
+
162
+ <script>
163
+ export default {
164
+ layout: 'center',
165
+
166
+ data() {
167
+ return {
168
+ formData: {
169
+ first_name: '',
170
+ last_name: '',
171
+ email: '',
172
+ password: '',
173
+ password_confirmation: '',
174
+ terms: false
175
+ }
176
+ }
177
+ },
178
+
179
+ methods: {
180
+ onRegister() {
181
+ this.$notify({
182
+ title: 'Account created successfully',
183
+ type: 'success'
184
+ })
185
+ this.$router.push('/dashboard')
186
+ }
187
+ }
188
+ }
189
+ </script>
190
+ ```
191
+
192
+ ## Data Tables
193
+
194
+ ### User List with Actions
195
+
196
+ ```markup
197
+ <template>
198
+ <AwPage title="Users">
199
+ <template #buttons>
200
+ <AwButton href="/users/create" icon="plus">
201
+ Add User
202
+ </AwButton>
203
+ </template>
204
+
205
+ <AwTableBuilder
206
+ :url="'/api/users'"
207
+ :columns="columns"
208
+ :filters="filters"
209
+ >
210
+ <template #cell(name)="{ row }">
211
+ <AwFlow align="center" :gap="2">
212
+ <AwUserpic :src="row.avatar" :name="row.name" />
213
+ <div>
214
+ <div class="font-medium">{{ row.name }}</div>
215
+ <div class="text-sm text-gray-500">{{ row.email }}</div>
216
+ </div>
217
+ </AwFlow>
218
+ </template>
219
+
220
+ <template #cell(role)="{ value }">
221
+ <AwBadge :color="getRoleColor(value)">
222
+ {{ value }}
223
+ </AwBadge>
224
+ </template>
225
+
226
+ <template #cell(status)="{ value }">
227
+ <AwBadge :color="value === 'active' ? 'success' : 'mono'">
228
+ {{ value }}
229
+ </AwBadge>
230
+ </template>
231
+
232
+ <template #cell(actions)="{ row }">
233
+ <AwContextMenu>
234
+ <AwDropdownButton
235
+ icon="edit"
236
+ :href="`/users/${row.id}/edit`"
237
+ >
238
+ Edit
239
+ </AwDropdownButton>
240
+ <AwDropdownButton
241
+ icon="trash"
242
+ @click="deleteUser(row.id)"
243
+ >
244
+ Delete
245
+ </AwDropdownButton>
246
+ </AwContextMenu>
247
+ </template>
248
+ </AwTableBuilder>
249
+ </AwPage>
250
+ </template>
251
+
252
+ <script>
253
+ export default {
254
+ data() {
255
+ return {
256
+ columns: [
257
+ { name: 'name', label: 'User', sortable: true },
258
+ { name: 'role', label: 'Role', sortable: true },
259
+ { name: 'status', label: 'Status', sortable: true },
260
+ { name: 'created_at', label: 'Joined', sortable: true },
261
+ { name: 'actions', label: '', align: 'right' }
262
+ ],
263
+ filters: [
264
+ { name: 'role', component: 'AwSelect', options: ['Admin', 'User'] },
265
+ { name: 'status', component: 'AwSelect', options: ['Active', 'Inactive'] }
266
+ ]
267
+ }
268
+ },
269
+
270
+ methods: {
271
+ getRoleColor(role) {
272
+ const colors = {
273
+ 'Admin': 'error',
274
+ 'Editor': 'accent',
275
+ 'User': 'mono'
276
+ }
277
+ return colors[role] || 'mono'
278
+ },
279
+
280
+ async deleteUser(id) {
281
+ if (confirm('Are you sure?')) {
282
+ await this.$axios.delete(`/api/users/${id}`)
283
+ this.$refs.table.refresh()
284
+ }
285
+ }
286
+ }
287
+ }
288
+ </script>
289
+ ```
290
+
291
+ ### Sortable & Filterable Table
292
+
293
+ ```markup
294
+ <template>
295
+ <AwCard>
296
+ <template #title>
297
+ <AwFlow justify="between" align="center">
298
+ <AwHeadline>Products</AwHeadline>
299
+ <AwSearch v-model="search" placeholder="Search products..." />
300
+ </AwFlow>
301
+ </template>
302
+
303
+ <AwTable
304
+ :data="filteredProducts"
305
+ :columns="columns"
306
+ @sort="onSort"
307
+ >
308
+ <template #cell(image)="{ row }">
309
+ <img :src="row.image" :alt="row.name" class="w-12 h-12 object-cover rounded" />
310
+ </template>
311
+
312
+ <template #cell(price)="{ value }">
313
+ ${{ value.toFixed(2) }}
314
+ </template>
315
+
316
+ <template #cell(stock)="{ value }">
317
+ <AwLabel :color="value > 10 ? 'success' : 'error'">
318
+ {{ value }} in stock
319
+ </AwLabel>
320
+ </template>
321
+ </AwTable>
322
+
323
+ <AwPagination
324
+ v-model="currentPage"
325
+ :total="totalPages"
326
+ />
327
+ </AwCard>
328
+ </template>
329
+ ```
330
+
331
+ ## User Profiles
332
+
333
+ ### Profile View
334
+
335
+ ```markup
336
+ <template>
337
+ <AwPage :title="user.name">
338
+ <template #buttons>
339
+ <AwButton :href="`/users/${user.id}/edit`" icon="edit">
340
+ Edit Profile
341
+ </AwButton>
342
+ </template>
343
+
344
+ <AwGrid :cols="{ default: 1, lg: 3 }" :gap="6">
345
+ <!-- Profile Info -->
346
+ <div class="lg:col-span-1">
347
+ <AwCard>
348
+ <AwFlow direction="column" align="center" :gap="4">
349
+ <AwUserpic
350
+ :src="user.avatar"
351
+ :name="user.name"
352
+ size="xl"
353
+ />
354
+
355
+ <div class="text-center">
356
+ <div class="text-xl font-bold">{{ user.name }}</div>
357
+ <div class="text-gray-500">{{ user.email }}</div>
358
+ </div>
359
+
360
+ <AwBadge :color="user.status === 'active' ? 'success' : 'mono'">
361
+ {{ user.status }}
362
+ </AwBadge>
363
+ </AwFlow>
364
+ </AwCard>
365
+
366
+ <AwCard title="Details" class="mt-4">
367
+ <AwList>
368
+ <li>
369
+ <AwIcon name="briefcase" />
370
+ <span>{{ user.role }}</span>
371
+ </li>
372
+ <li>
373
+ <AwIcon name="calendar" />
374
+ <span>Joined {{ user.created_at }}</span>
375
+ </li>
376
+ <li>
377
+ <AwIcon name="map-marker" />
378
+ <span>{{ user.location }}</span>
379
+ </li>
380
+ </AwList>
381
+ </AwCard>
382
+ </div>
383
+
384
+ <!-- Activity -->
385
+ <div class="lg:col-span-2">
386
+ <AwTabNav
387
+ v-model="activeTab"
388
+ :items="[
389
+ { value: 'activity', text: 'Activity' },
390
+ { value: 'posts', text: 'Posts' },
391
+ { value: 'settings', text: 'Settings' }
392
+ ]"
393
+ />
394
+
395
+ <div v-show="activeTab === 'activity'" class="mt-4">
396
+ <ActivityFeed :user-id="user.id" />
397
+ </div>
398
+
399
+ <div v-show="activeTab === 'posts'" class="mt-4">
400
+ <UserPosts :user-id="user.id" />
401
+ </div>
402
+
403
+ <div v-show="activeTab === 'settings'" class="mt-4">
404
+ <ProfileSettings :user="user" />
405
+ </div>
406
+ </div>
407
+ </AwGrid>
408
+ </AwPage>
409
+ </template>
410
+ ```
411
+
412
+ ### Profile Edit
413
+
414
+ ```markup
415
+ <template>
416
+ <AwPageSingle
417
+ title="Edit Profile"
418
+ :breadcrumb="{ href: '/profile' }"
419
+ :action="{ text: 'Save Changes', color: 'accent' }"
420
+ @action="saveProfile"
421
+ >
422
+ <AwForm ref="form" url="/api/profile" method="patch" @sended="onSaved">
423
+ <AwCard title="Personal Information">
424
+ <AwGrid :cols="2" :gap="4">
425
+ <AwInput v-model="user.first_name" name="first_name" label="First Name" />
426
+ <AwInput v-model="user.last_name" name="last_name" label="Last Name" />
427
+ </AwGrid>
428
+
429
+ <AwInput v-model="user.email" name="email" label="Email" type="email" />
430
+
431
+ <AwTextarea v-model="user.bio" name="bio" label="Bio" rows="4" />
432
+ </AwCard>
433
+
434
+ <AwCard title="Profile Picture" class="mt-4">
435
+ <AwCropper
436
+ v-model="user.avatar"
437
+ name="avatar"
438
+ :aspect-ratio="1"
439
+ />
440
+ </AwCard>
441
+
442
+ <AwCard title="Contact Information" class="mt-4">
443
+ <AwTel v-model="user.phone" name="phone" label="Phone" />
444
+ <AwAddress v-model="user.address" name="address" label="Address" />
445
+ </AwCard>
446
+ </AwForm>
447
+ </AwPageSingle>
448
+ </template>
449
+
450
+ <script>
451
+ export default {
452
+ data() {
453
+ return {
454
+ user: {}
455
+ }
456
+ },
457
+
458
+ async mounted() {
459
+ const { data } = await this.$axios.get('/api/profile')
460
+ this.user = data
461
+ },
462
+
463
+ methods: {
464
+ saveProfile() {
465
+ this.$refs.form.$el.submit()
466
+ },
467
+
468
+ onSaved() {
469
+ this.$notify({ title: 'Profile updated successfully!' })
470
+ this.$router.push('/profile')
471
+ }
472
+ }
473
+ }
474
+ </script>
475
+ ```
476
+
477
+ ## Dashboards
478
+
479
+ ### Admin Dashboard
480
+
481
+ ```markup
482
+ <template>
483
+ <AwPage title="Dashboard">
484
+ <!-- Stats -->
485
+ <AwGrid :cols="{ default: 1, sm: 2, lg: 4 }" :gap="4">
486
+ <AwCard>
487
+ <AwFlow align="center" justify="between">
488
+ <div>
489
+ <AwDescription>Total Users</AwDescription>
490
+ <div class="text-3xl font-bold">{{ stats.users }}</div>
491
+ </div>
492
+ <AwIcon name="users" class="text-4xl text-accent" />
493
+ </AwFlow>
494
+ </AwCard>
495
+
496
+ <AwCard>
497
+ <AwFlow align="center" justify="between">
498
+ <div>
499
+ <AwDescription>Revenue</AwDescription>
500
+ <div class="text-3xl font-bold">${{ stats.revenue }}</div>
501
+ </div>
502
+ <AwIcon name="dollar" class="text-4xl text-success" />
503
+ </AwFlow>
504
+ </AwCard>
505
+
506
+ <AwCard>
507
+ <AwFlow align="center" justify="between">
508
+ <div>
509
+ <AwDescription>Orders</AwDescription>
510
+ <div class="text-3xl font-bold">{{ stats.orders }}</div>
511
+ </div>
512
+ <AwIcon name="shopping-cart" class="text-4xl text-info" />
513
+ </AwFlow>
514
+ </AwCard>
515
+
516
+ <AwCard>
517
+ <AwFlow align="center" justify="between">
518
+ <div>
519
+ <AwDescription>Growth</AwDescription>
520
+ <div class="text-3xl font-bold">+{{ stats.growth }}%</div>
521
+ </div>
522
+ <AwIcon name="trending-up" class="text-4xl text-success" />
523
+ </AwFlow>
524
+ </AwCard>
525
+ </AwGrid>
526
+
527
+ <!-- Charts -->
528
+ <AwGrid :cols="{ default: 1, lg: 2 }" :gap="4" class="mt-6">
529
+ <AwCard title="Revenue Over Time">
530
+ <AwChart :data="revenueData" type="line" />
531
+ </AwCard>
532
+
533
+ <AwCard title="User Growth">
534
+ <AwChart :data="userGrowthData" type="bar" />
535
+ </AwCard>
536
+ </AwGrid>
537
+
538
+ <!-- Recent Activity -->
539
+ <AwCard title="Recent Orders" class="mt-6">
540
+ <AwTable :data="recentOrders" :columns="orderColumns" />
541
+ </AwCard>
542
+ </AwPage>
543
+ </template>
544
+ ```
545
+
546
+ ## Lists & Cards
547
+
548
+ ### Product Grid
549
+
550
+ ```markup
551
+ <template>
552
+ <AwPage title="Products">
553
+ <template #buttons>
554
+ <AwButton href="/products/create" icon="plus">
555
+ Add Product
556
+ </AwButton>
557
+ </template>
558
+
559
+ <AwGrid :cols="{ default: 1, sm: 2, lg: 3, xl: 4 }" :gap="4">
560
+ <AwCard v-for="product in products" :key="product.id">
561
+ <img
562
+ :src="product.image"
563
+ :alt="product.name"
564
+ class="w-full h-48 object-cover rounded-t"
565
+ />
566
+
567
+ <template #title>
568
+ {{ product.name }}
569
+ </template>
570
+
571
+ <AwDescription>{{ product.description }}</AwDescription>
572
+
573
+ <AwFlow justify="between" align="center" class="mt-4">
574
+ <div class="text-2xl font-bold">${{ product.price }}</div>
575
+ <AwButton size="sm" :href="`/products/${product.id}`">
576
+ View
577
+ </AwButton>
578
+ </AwFlow>
579
+
580
+ <template #footer>
581
+ <AwBadge :color="product.inStock ? 'success' : 'error'">
582
+ {{ product.inStock ? 'In Stock' : 'Out of Stock' }}
583
+ </AwBadge>
584
+ </template>
585
+ </AwCard>
586
+ </AwGrid>
587
+
588
+ <AwPagination
589
+ v-model="page"
590
+ :total="totalPages"
591
+ class="mt-6"
592
+ />
593
+ </AwPage>
594
+ </template>
595
+ ```
596
+
597
+ ### Timeline View
598
+
599
+ ```markup
600
+ <template>
601
+ <AwCard title="Activity Timeline">
602
+ <AwTimelineBuilder :items="activities">
603
+ <template #item="{ item }">
604
+ <AwFlow :gap="3">
605
+ <AwUserpic :src="item.user.avatar" :name="item.user.name" />
606
+
607
+ <div class="flex-1">
608
+ <div>
609
+ <strong>{{ item.user.name }}</strong>
610
+ {{ item.action }}
611
+ </div>
612
+ <AwDescription>{{ item.timestamp }}</AwDescription>
613
+
614
+ <div v-if="item.content" class="mt-2">
615
+ {{ item.content }}
616
+ </div>
617
+ </div>
618
+ </AwFlow>
619
+ </template>
620
+ </AwTimelineBuilder>
621
+ </AwCard>
622
+ </template>
623
+ ```
624
+
625
+ ## Navigation
626
+
627
+ ### Responsive Sidebar
628
+
629
+ Set up navigation menu in `plugins/menu.js`:
630
+
631
+ ```javascript
632
+ // plugins/menu.js
633
+ export default function({ store }) {
634
+ store.commit('awesIo/SET_MENU_ITEMS', {
635
+ main: [
636
+ {
637
+ text: 'Dashboard',
638
+ href: '/dashboard',
639
+ icon: 'dashboard'
640
+ },
641
+ {
642
+ text: 'Users',
643
+ icon: 'users',
644
+ key: 'users',
645
+ href: '/users',
646
+ children: [
647
+ { text: 'All Users', href: '/users' },
648
+ { text: 'Add User', href: '/users/create' },
649
+ { text: 'Roles', href: '/roles' }
650
+ ]
651
+ },
652
+ {
653
+ text: 'Products',
654
+ href: '/products',
655
+ icon: 'box',
656
+ badge: 5
657
+ },
658
+ {
659
+ text: 'Settings',
660
+ href: '/settings',
661
+ icon: 'settings'
662
+ }
663
+ ]
664
+ })
665
+ }
666
+ ```
667
+
668
+ Layout component:
669
+
670
+ ```markup
671
+ <!-- layouts/default.vue -->
672
+ <template>
673
+ <AwLayout>
674
+ <AwPage :title="currentPageTitle">
675
+ <nuxt />
676
+ </AwPage>
677
+ </AwLayout>
678
+ </template>
679
+
680
+ <script>
681
+ export default {
682
+ computed: {
683
+ currentPageTitle() {
684
+ return this.$route.meta.title || 'Dashboard'
685
+ }
686
+ }
687
+ }
688
+ </script>
689
+ ```
690
+
691
+ ## Modals & Dialogs
692
+
693
+ ### Confirmation Dialog
694
+
695
+ ```markup
696
+ <template>
697
+ <AwModal :show="showConfirm" @close="showConfirm = false">
698
+ <template #title>Confirm Delete</template>
699
+
700
+ <AwDescription>
701
+ Are you sure you want to delete this item? This action cannot be undone.
702
+ </AwDescription>
703
+
704
+ <template #buttons>
705
+ <AwButton @click="confirmDelete" color="error">
706
+ Delete
707
+ </AwButton>
708
+ <AwButton @click="showConfirm = false" color="mono">
709
+ Cancel
710
+ </AwButton>
711
+ </template>
712
+ </AwModal>
713
+ </template>
714
+
715
+ <script>
716
+ export default {
717
+ data() {
718
+ return {
719
+ showConfirm: false,
720
+ itemToDelete: null
721
+ }
722
+ },
723
+
724
+ methods: {
725
+ promptDelete(item) {
726
+ this.itemToDelete = item
727
+ this.showConfirm = true
728
+ },
729
+
730
+ async confirmDelete() {
731
+ await this.$axios.delete(`/api/items/${this.itemToDelete.id}`)
732
+ this.showConfirm = false
733
+ this.$notify({ title: 'Item deleted successfully' })
734
+ }
735
+ }
736
+ }
737
+ </script>
738
+ ```
739
+
740
+ ### Form in Modal
741
+
742
+ ```markup
743
+ <template>
744
+ <AwPageModal
745
+ title="Add Comment"
746
+ theme="aside"
747
+ @close="$router.back()"
748
+ >
749
+ <AwForm url="/api/comments" method="post" @sended="onCommentAdded">
750
+ <AwTextarea
751
+ name="content"
752
+ label="Comment"
753
+ rows="6"
754
+ required
755
+ autofocus
756
+ />
757
+
758
+ <AwUploader
759
+ name="attachments"
760
+ label="Attachments"
761
+ multiple
762
+ />
763
+ </AwForm>
764
+
765
+ <template #buttons>
766
+ <AwButton type="submit">Post Comment</AwButton>
767
+ <AwButton @click="$router.back()" color="mono">Cancel</AwButton>
768
+ </template>
769
+ </AwPageModal>
770
+ </template>
771
+ ```
772
+
773
+ ---
774
+
775
+ ## More Examples
776
+
777
+ For more comprehensive patterns and recipes, see:
778
+
779
+ - **[Common Patterns](./common-patterns.md)** - Standard application patterns (list & detail, CRUD, search & filter, bulk actions)
780
+ - **[Advanced Patterns](./advanced-patterns.md)** - Complex patterns (multi-step wizards, nested forms, optimistic updates, real-time data)
781
+
782
+ ## Related Documentation
783
+
784
+ - [Forms Guide](../guides/forms-guide.md) - Form patterns and validation
785
+ - [Page Patterns](../guides/page-patterns/) - List pages, detail pages, dashboards
786
+ - [Component Documentation](../index.md) - Complete component reference