@ziyarago/ui 0.0.0-stage → 0.1.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.
- package/CHANGELOG.md +46 -0
- package/LICENSE +25 -0
- package/README.md +121 -2
- package/THIRD_PARTY_NOTICES.md +12 -0
- package/assets/3d/_sheet.png +0 -0
- package/assets/3d/archive.png +0 -0
- package/assets/3d/bag.png +0 -0
- package/assets/3d/cameraoff.png +0 -0
- package/assets/3d/comment.png +0 -0
- package/assets/3d/crowd.png +0 -0
- package/assets/3d/firstaid.png +0 -0
- package/assets/3d/flag.png +0 -0
- package/assets/3d/grain.png +0 -0
- package/assets/3d/guide.png +0 -0
- package/assets/3d/hotel.png +0 -0
- package/assets/3d/kaaba.png +0 -0
- package/assets/3d/logo.png +0 -0
- package/assets/3d/luggage.png +0 -0
- package/assets/3d/map.png +0 -0
- package/assets/3d/mosque.png +0 -0
- package/assets/3d/plane.png +0 -0
- package/assets/3d/profile.png +0 -0
- package/assets/3d/restaurant.png +0 -0
- package/assets/3d/ring360.png +0 -0
- package/assets/3d/shoes.png +0 -0
- package/assets/3d/star.png +0 -0
- package/assets/3d/store.png +0 -0
- package/assets/3d/taxi.png +0 -0
- package/assets/3d/threads.png +0 -0
- package/assets/3d/tour360.png +0 -0
- package/assets/3d/trash.png +0 -0
- package/assets/3d/umbrella.png +0 -0
- package/assets/3d/video.png +0 -0
- package/assets/3d/water.png +0 -0
- package/assets/brand/mark.png +0 -0
- package/assets/brand/ziyarago-logo-light.svg +21 -0
- package/assets/brand/ziyarago-logo.svg +21 -0
- package/assets/brand/ziyarago-mark-light.svg +13 -0
- package/assets/brand/ziyarago-mark.svg +13 -0
- package/assets/fonts/thmanyah/thmanyahsans-Black.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahsans-Bold.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahsans-Light.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahsans-Medium.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahsans-Regular.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahserifdisplay-Black.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahserifdisplay-Bold.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahserifdisplay-Light.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahserifdisplay-Medium.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahserifdisplay-Regular.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahseriftext-Black.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahseriftext-Bold.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahseriftext-Light.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahseriftext-Medium.otf +0 -0
- package/assets/fonts/thmanyah/thmanyahseriftext-Regular.otf +0 -0
- package/dist/llms-full.txt +2293 -0
- package/dist/llms.txt +239 -0
- package/dist/manifest.json +10254 -0
- package/dist/style.css +1357 -0
- package/dist/tokens.css +48 -0
- package/package.json +118 -4
- package/src/catalog.js +4 -0
- package/src/core/components.js +124 -0
- package/src/core/components2.js +163 -0
- package/src/core/components3.js +35 -0
- package/src/core/components4.js +58 -0
- package/src/core/components6.js +48 -0
- package/src/core/components7.js +42 -0
- package/src/core/dialog.js +65 -0
- package/src/core/index.js +9 -0
- package/src/core/pages.js +51 -0
- package/src/meta/README.md +29 -0
- package/src/meta/actions.js +161 -0
- package/src/meta/data.js +327 -0
- package/src/meta/domain.js +212 -0
- package/src/meta/feedback.js +153 -0
- package/src/meta/forms.js +453 -0
- package/src/meta/groups.js +16 -0
- package/src/meta/index.js +14 -0
- package/src/meta/layout.js +159 -0
- package/src/meta/media.js +104 -0
- package/src/meta/navigation.js +99 -0
- package/src/meta/overlay.js +264 -0
- package/src/meta/pages.js +229 -0
- package/src/meta/templates.json +2422 -0
- package/src/meta/typography.js +58 -0
- package/src/nuxt/module.mjs +29 -0
- package/src/nuxt/plugin.mjs +9 -0
- package/src/react/index.js +31 -0
- package/src/styles/components.css +162 -0
- package/src/styles/components2.css +68 -0
- package/src/styles/components3.css +29 -0
- package/src/styles/components4.css +18 -0
- package/src/styles/components5.css +5 -0
- package/src/styles/components6.css +19 -0
- package/src/styles/components7.css +44 -0
- package/src/styles/components8.css +47 -0
- package/src/styles/effects.css +43 -0
- package/src/styles/fonts.css +17 -0
- package/src/styles/index.css +21 -0
- package/src/styles/sizes/actions.css +126 -0
- package/src/styles/sizes/data.css +161 -0
- package/src/styles/sizes/domain.css +35 -0
- package/src/styles/sizes/feedback.css +69 -0
- package/src/styles/sizes/forms.css +122 -0
- package/src/styles/sizes/layout.css +15 -0
- package/src/styles/sizes/media.css +28 -0
- package/src/styles/sizes/navigation.css +146 -0
- package/src/styles/sizes/overlay.css +79 -0
- package/src/styles/sizes/typography.css +12 -0
- package/src/styles/tokens.css +47 -0
- package/src/theme.js +52 -0
- package/src/vue/index.js +29 -0
- package/tokens/tokens.json +9 -0
- package/types/core.d.ts +4 -0
- package/types/nuxt.d.ts +11 -0
- package/types/react.d.ts +189 -0
- package/types/shared.d.ts +18 -0
- package/types/theme.d.ts +6 -0
- package/types/vue.d.ts +192 -0
|
@@ -0,0 +1,2422 @@
|
|
|
1
|
+
{
|
|
2
|
+
"shell": [
|
|
3
|
+
{
|
|
4
|
+
"id": "brand",
|
|
5
|
+
"title": "Brand",
|
|
6
|
+
"desc": "Logo and name in the top-left corner. In a narrow sidebar only the mark stays.",
|
|
7
|
+
"accepts": [
|
|
8
|
+
"img",
|
|
9
|
+
"svg",
|
|
10
|
+
"Text"
|
|
11
|
+
],
|
|
12
|
+
"props": [
|
|
13
|
+
{
|
|
14
|
+
"name": "brand",
|
|
15
|
+
"type": "VNode",
|
|
16
|
+
"desc": "Any node, up to 180 px wide"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"use": "<img src=\"/logo.svg\" alt=\"ZiyaraGo\" />"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "nav",
|
|
23
|
+
"title": "Navigation",
|
|
24
|
+
"desc": "App sections. The menu type is set by the nav prop: top is a pill on top (up to 8 items), side is a sidebar with groups and a collapse mode.",
|
|
25
|
+
"accepts": [
|
|
26
|
+
"TopNav",
|
|
27
|
+
"SideNav"
|
|
28
|
+
],
|
|
29
|
+
"props": [
|
|
30
|
+
{
|
|
31
|
+
"name": "items",
|
|
32
|
+
"type": "{value,label,icon,badge?,group?}[]",
|
|
33
|
+
"desc": "Items; group is a group heading in the sidebar"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "modelValue",
|
|
37
|
+
"type": "string",
|
|
38
|
+
"desc": "Active item"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "nav",
|
|
42
|
+
"type": "\"top\" | \"side\"",
|
|
43
|
+
"desc": "Menu type"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "collapsed",
|
|
47
|
+
"type": "boolean",
|
|
48
|
+
"desc": "side only: 76 px narrow mode"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"use": "<UiAppShell nav=\"side\" :items=\"nav\" v-model=\"page\" collapsible />"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "pagefooter",
|
|
55
|
+
"title": "Page footer",
|
|
56
|
+
"desc": "Copyright on the left, links on the right: help, policy, terms. One for all shell pages.",
|
|
57
|
+
"accepts": [
|
|
58
|
+
"Footer"
|
|
59
|
+
],
|
|
60
|
+
"props": [
|
|
61
|
+
{
|
|
62
|
+
"name": "copyright",
|
|
63
|
+
"type": "string",
|
|
64
|
+
"desc": ""
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "links",
|
|
68
|
+
"type": "{label,href}[]",
|
|
69
|
+
"desc": ""
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"use": "<UiFooter copyright=\"© 2026 ZiyaraGo\" :links=\"links\" />"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "actions",
|
|
76
|
+
"title": "Header actions",
|
|
77
|
+
"desc": "Top bar on the right: search, notifications, profile. In side mode it moves to the row above the content.",
|
|
78
|
+
"accepts": [
|
|
79
|
+
"IconButton",
|
|
80
|
+
"NotificationBell",
|
|
81
|
+
"Avatar",
|
|
82
|
+
"Dropdown",
|
|
83
|
+
"Switch"
|
|
84
|
+
],
|
|
85
|
+
"props": [
|
|
86
|
+
{
|
|
87
|
+
"name": "actions",
|
|
88
|
+
"type": "VNode",
|
|
89
|
+
"desc": "Right-aligned block, 8 px gap"
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"use": "<UiNotificationBell :items=\"alerts\" />\n<UiAvatar name=\"Shodiya\" :size=\"36\" />"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"footer": {
|
|
96
|
+
"id": "footer",
|
|
97
|
+
"title": "Sidebar bottom",
|
|
98
|
+
"desc": "side mode only: profile and shift. When the sidebar is collapsed, only the avatar stays.",
|
|
99
|
+
"accepts": [
|
|
100
|
+
"Avatar",
|
|
101
|
+
"Badge",
|
|
102
|
+
"Button"
|
|
103
|
+
],
|
|
104
|
+
"props": [
|
|
105
|
+
{
|
|
106
|
+
"name": "footer",
|
|
107
|
+
"type": "VNode",
|
|
108
|
+
"desc": "Pinned to the bottom, above the \"collapse\" button"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"use": "<UiAvatar name=\"Shodiya\" /> <UiBadge tone=\"success\" dot>Online</UiBadge>"
|
|
112
|
+
},
|
|
113
|
+
"pages": [
|
|
114
|
+
{
|
|
115
|
+
"key": "dashboard",
|
|
116
|
+
"route": "dashboard",
|
|
117
|
+
"label": "Dashboard",
|
|
118
|
+
"icon": "layout-dashboard",
|
|
119
|
+
"desc": "Sales and occupancy summary: greeting with plan, KPI, occupancy chart, funnel, top hotels and an activity feed.",
|
|
120
|
+
"component": "PageDashboard",
|
|
121
|
+
"tpl": "TplDashboard",
|
|
122
|
+
"shell": true,
|
|
123
|
+
"slots": [
|
|
124
|
+
{
|
|
125
|
+
"id": "header",
|
|
126
|
+
"title": "Page heading",
|
|
127
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
128
|
+
"accepts": [
|
|
129
|
+
"PageHeader",
|
|
130
|
+
"Breadcrumbs",
|
|
131
|
+
"Button",
|
|
132
|
+
"SegmentedControl"
|
|
133
|
+
],
|
|
134
|
+
"props": [
|
|
135
|
+
{
|
|
136
|
+
"name": "title",
|
|
137
|
+
"type": "string",
|
|
138
|
+
"desc": "H1, up to 60 characters"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"name": "subtitle",
|
|
142
|
+
"type": "string?",
|
|
143
|
+
"desc": "Gray caption below the heading"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"name": "crumbs",
|
|
147
|
+
"type": "{label,href?}[]",
|
|
148
|
+
"desc": "Breadcrumbs"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "actions",
|
|
152
|
+
"type": "VNode",
|
|
153
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "hero",
|
|
160
|
+
"title": "Greeting and plan",
|
|
161
|
+
"desc": "Large block: who it is addressed to, monthly plan progress and one main action. The only \"gold\" accent on the page.",
|
|
162
|
+
"accepts": [
|
|
163
|
+
"Card variant=\"inverse\"",
|
|
164
|
+
"Ring",
|
|
165
|
+
"Button"
|
|
166
|
+
],
|
|
167
|
+
"props": [
|
|
168
|
+
{
|
|
169
|
+
"name": "planPct",
|
|
170
|
+
"type": "number 0–100",
|
|
171
|
+
"desc": "Plan completion; drawn as a Ring"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"name": "name",
|
|
175
|
+
"type": "string",
|
|
176
|
+
"desc": "Username"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "cta",
|
|
180
|
+
"type": "VNode",
|
|
181
|
+
"desc": "One button"
|
|
182
|
+
}
|
|
183
|
+
],
|
|
184
|
+
"use": "<UiCard variant=\"inverse\">\n <UiRing :value=\"72\" label=\"plan\" />\n</UiCard>"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "kpis",
|
|
188
|
+
"title": "KPI",
|
|
189
|
+
"desc": "Four key figures for the period. One tile can be variant=\"brand\".",
|
|
190
|
+
"accepts": [
|
|
191
|
+
"KpiTile",
|
|
192
|
+
"StatsCard",
|
|
193
|
+
"KpiInline"
|
|
194
|
+
],
|
|
195
|
+
"props": [
|
|
196
|
+
{
|
|
197
|
+
"name": "label",
|
|
198
|
+
"type": "string",
|
|
199
|
+
"desc": "What we measure"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"name": "value",
|
|
203
|
+
"type": "string",
|
|
204
|
+
"desc": "Already formatted (SAR 1 200)"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"name": "delta",
|
|
208
|
+
"type": "string?",
|
|
209
|
+
"desc": "+12% / -3%, color follows the sign"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"name": "sub",
|
|
213
|
+
"type": "string?",
|
|
214
|
+
"desc": "Comparison period"
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
"use": "<UiKpiTile label=\"Bookings\" value=\"1 248\" delta=\"+12%\" sub=\"vs last week\" />"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"id": "occupancy",
|
|
221
|
+
"title": "Occupancy chart",
|
|
222
|
+
"desc": "Columns per day. Values above 90% are highlighted in the brand color.",
|
|
223
|
+
"accepts": [
|
|
224
|
+
"OccupancyChart",
|
|
225
|
+
"MiniChart",
|
|
226
|
+
"BarChart"
|
|
227
|
+
],
|
|
228
|
+
"props": [
|
|
229
|
+
{
|
|
230
|
+
"name": "values",
|
|
231
|
+
"type": "number[] 0–100",
|
|
232
|
+
"desc": "Percentage per day"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "labels",
|
|
236
|
+
"type": "string[]",
|
|
237
|
+
"desc": "X-axis labels"
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
"use": "<UiOccupancyChart :values=\"[62,74,88,95]\" :labels=\"days\" />"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"id": "funnel",
|
|
244
|
+
"title": "Funnel",
|
|
245
|
+
"desc": "Funnel from inquiry to payment with absolute numbers.",
|
|
246
|
+
"accepts": [
|
|
247
|
+
"SalesFunnel",
|
|
248
|
+
"FunnelBars"
|
|
249
|
+
],
|
|
250
|
+
"props": [
|
|
251
|
+
{
|
|
252
|
+
"name": "steps",
|
|
253
|
+
"type": "{label,value}[]",
|
|
254
|
+
"desc": "Wide to narrow; the last step is the brand"
|
|
255
|
+
}
|
|
256
|
+
],
|
|
257
|
+
"use": "<UiSalesFunnel :steps=\"steps\" />"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"id": "top",
|
|
261
|
+
"title": "Top hotels",
|
|
262
|
+
"desc": "Revenue leaderboard with a share bar.",
|
|
263
|
+
"accepts": [
|
|
264
|
+
"DataTable",
|
|
265
|
+
"Progress",
|
|
266
|
+
"Leaderboard"
|
|
267
|
+
],
|
|
268
|
+
"props": [
|
|
269
|
+
{
|
|
270
|
+
"name": "rows",
|
|
271
|
+
"type": "{id,name,city,sar,share}[]",
|
|
272
|
+
"desc": "No more than 5 rows"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"name": "columns",
|
|
276
|
+
"type": "Column[]",
|
|
277
|
+
"desc": "name, city, share (Progress), sar (num)"
|
|
278
|
+
}
|
|
279
|
+
],
|
|
280
|
+
"use": "<UiDataTable :columns=\"cols\" :rows=\"top5\" />"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"id": "activity",
|
|
284
|
+
"title": "Activity feed",
|
|
285
|
+
"desc": "Recent actions: payment, status change, note. Newest on top.",
|
|
286
|
+
"accepts": [
|
|
287
|
+
"Timeline",
|
|
288
|
+
"ActivityFeed"
|
|
289
|
+
],
|
|
290
|
+
"props": [
|
|
291
|
+
{
|
|
292
|
+
"name": "items",
|
|
293
|
+
"type": "{title,text?,time}[]",
|
|
294
|
+
"desc": "No more than 6, the rest under \"Show all\""
|
|
295
|
+
}
|
|
296
|
+
],
|
|
297
|
+
"use": "<UiTimeline :items=\"events\" />"
|
|
298
|
+
}
|
|
299
|
+
]
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"key": "crm",
|
|
303
|
+
"route": "crm",
|
|
304
|
+
"label": "CRM",
|
|
305
|
+
"icon": "kanban",
|
|
306
|
+
"desc": "Lead funnel on a board: filters, summary, kanban by stage and a call queue.",
|
|
307
|
+
"component": "PageCrm",
|
|
308
|
+
"tpl": "TplCrm",
|
|
309
|
+
"shell": true,
|
|
310
|
+
"slots": [
|
|
311
|
+
{
|
|
312
|
+
"id": "header",
|
|
313
|
+
"title": "Page heading",
|
|
314
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
315
|
+
"accepts": [
|
|
316
|
+
"PageHeader",
|
|
317
|
+
"Breadcrumbs",
|
|
318
|
+
"Button",
|
|
319
|
+
"SegmentedControl"
|
|
320
|
+
],
|
|
321
|
+
"props": [
|
|
322
|
+
{
|
|
323
|
+
"name": "title",
|
|
324
|
+
"type": "string",
|
|
325
|
+
"desc": "H1, up to 60 characters"
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"name": "subtitle",
|
|
329
|
+
"type": "string?",
|
|
330
|
+
"desc": "Gray caption below the heading"
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"name": "crumbs",
|
|
334
|
+
"type": "{label,href?}[]",
|
|
335
|
+
"desc": "Breadcrumbs"
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"name": "actions",
|
|
339
|
+
"type": "VNode",
|
|
340
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
341
|
+
}
|
|
342
|
+
],
|
|
343
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"id": "summary",
|
|
347
|
+
"title": "Summary",
|
|
348
|
+
"desc": "Four tiles above the board: leads, amount in progress, conversion, overdue.",
|
|
349
|
+
"accepts": [
|
|
350
|
+
"StatsCard",
|
|
351
|
+
"KpiTile"
|
|
352
|
+
],
|
|
353
|
+
"props": [
|
|
354
|
+
{
|
|
355
|
+
"name": "label",
|
|
356
|
+
"type": "string",
|
|
357
|
+
"desc": ""
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"name": "value",
|
|
361
|
+
"type": "string",
|
|
362
|
+
"desc": ""
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"name": "icon",
|
|
366
|
+
"type": "string",
|
|
367
|
+
"desc": "Lucide icon"
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"name": "delta",
|
|
371
|
+
"type": "string?",
|
|
372
|
+
"desc": ""
|
|
373
|
+
}
|
|
374
|
+
],
|
|
375
|
+
"use": "<UiStatsCard label=\"In progress\" value=\"$42k\" icon=\"wallet\" />"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"id": "filters",
|
|
379
|
+
"title": "Filters",
|
|
380
|
+
"desc": "Status tabs, search and period mode. State is stored in the URL.",
|
|
381
|
+
"accepts": [
|
|
382
|
+
"Tabs",
|
|
383
|
+
"SearchInput",
|
|
384
|
+
"SegmentedControl",
|
|
385
|
+
"FilterChips"
|
|
386
|
+
],
|
|
387
|
+
"props": [
|
|
388
|
+
{
|
|
389
|
+
"name": "tab",
|
|
390
|
+
"type": "string",
|
|
391
|
+
"desc": "all | hot | won | lost"
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"name": "query",
|
|
395
|
+
"type": "string",
|
|
396
|
+
"desc": "Search by name and code"
|
|
397
|
+
}
|
|
398
|
+
],
|
|
399
|
+
"use": "<UiTabs v-model=\"tab\" :items=\"tabs\" />"
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"id": "board",
|
|
403
|
+
"title": "Board",
|
|
404
|
+
"desc": "Stage columns with deal cards. Drag and drop changes the stage.",
|
|
405
|
+
"accepts": [
|
|
406
|
+
"PipelineBoard",
|
|
407
|
+
"KanbanColumn",
|
|
408
|
+
"DealCard"
|
|
409
|
+
],
|
|
410
|
+
"props": [
|
|
411
|
+
{
|
|
412
|
+
"name": "stages",
|
|
413
|
+
"type": "{id,title,cards[]}[]",
|
|
414
|
+
"desc": "Card: title, amount, probability, owner, due"
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
"name": "onMove",
|
|
418
|
+
"type": "(cardId, stageId) => void",
|
|
419
|
+
"desc": "After drop"
|
|
420
|
+
}
|
|
421
|
+
],
|
|
422
|
+
"use": "<UiPipelineBoard :stages=\"stages\" @move=\"onMove\" />"
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
"id": "calls",
|
|
426
|
+
"title": "Calls",
|
|
427
|
+
"desc": "Queue of recent calls: status, duration, call back.",
|
|
428
|
+
"accepts": [
|
|
429
|
+
"CallRow",
|
|
430
|
+
"CallCard",
|
|
431
|
+
"IncomingCall"
|
|
432
|
+
],
|
|
433
|
+
"props": [
|
|
434
|
+
{
|
|
435
|
+
"name": "name",
|
|
436
|
+
"type": "string",
|
|
437
|
+
"desc": ""
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"name": "status",
|
|
441
|
+
"type": "\"Answered\" | \"Missed\"",
|
|
442
|
+
"desc": ""
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"name": "duration",
|
|
446
|
+
"type": "seconds | NaN",
|
|
447
|
+
"desc": "NaN is shown as \"—\""
|
|
448
|
+
}
|
|
449
|
+
],
|
|
450
|
+
"use": "<UiCallRow name=\"Zaynab\" status=\"Answered\" :duration=\"65\" />"
|
|
451
|
+
}
|
|
452
|
+
]
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
"key": "bookings",
|
|
456
|
+
"route": "bookings",
|
|
457
|
+
"label": "Bookings",
|
|
458
|
+
"icon": "calendar-check",
|
|
459
|
+
"desc": "Bookings table: summary, search and filter bar, bulk actions on row selection, pagination.",
|
|
460
|
+
"component": "PageBookings",
|
|
461
|
+
"tpl": "TplBookings",
|
|
462
|
+
"shell": true,
|
|
463
|
+
"slots": [
|
|
464
|
+
{
|
|
465
|
+
"id": "header",
|
|
466
|
+
"title": "Page heading",
|
|
467
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
468
|
+
"accepts": [
|
|
469
|
+
"PageHeader",
|
|
470
|
+
"Breadcrumbs",
|
|
471
|
+
"Button",
|
|
472
|
+
"SegmentedControl"
|
|
473
|
+
],
|
|
474
|
+
"props": [
|
|
475
|
+
{
|
|
476
|
+
"name": "title",
|
|
477
|
+
"type": "string",
|
|
478
|
+
"desc": "H1, up to 60 characters"
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"name": "subtitle",
|
|
482
|
+
"type": "string?",
|
|
483
|
+
"desc": "Gray caption below the heading"
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
"name": "crumbs",
|
|
487
|
+
"type": "{label,href?}[]",
|
|
488
|
+
"desc": "Breadcrumbs"
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
"name": "actions",
|
|
492
|
+
"type": "VNode",
|
|
493
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
494
|
+
}
|
|
495
|
+
],
|
|
496
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
"id": "stats",
|
|
500
|
+
"title": "Summary",
|
|
501
|
+
"desc": "Four booking figures for the period.",
|
|
502
|
+
"accepts": [
|
|
503
|
+
"StatsCard"
|
|
504
|
+
],
|
|
505
|
+
"props": [
|
|
506
|
+
{
|
|
507
|
+
"name": "label",
|
|
508
|
+
"type": "string",
|
|
509
|
+
"desc": ""
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"name": "value",
|
|
513
|
+
"type": "string",
|
|
514
|
+
"desc": ""
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"name": "trend",
|
|
518
|
+
"type": "\"up\" | \"down\"",
|
|
519
|
+
"desc": "Delta color and arrow"
|
|
520
|
+
}
|
|
521
|
+
],
|
|
522
|
+
"use": "<UiStatsCard label=\"Confirmed\" value=\"86\" delta=\"12%\" />"
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
"id": "toolbar",
|
|
526
|
+
"title": "Toolbar",
|
|
527
|
+
"desc": "Search, quick filters and an export menu. Always above the table.",
|
|
528
|
+
"accepts": [
|
|
529
|
+
"SearchInput",
|
|
530
|
+
"FilterChips",
|
|
531
|
+
"Dropdown"
|
|
532
|
+
],
|
|
533
|
+
"props": [
|
|
534
|
+
{
|
|
535
|
+
"name": "query",
|
|
536
|
+
"type": "string",
|
|
537
|
+
"desc": ""
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
"name": "status",
|
|
541
|
+
"type": "string",
|
|
542
|
+
"desc": "all | confirmed | pending | cancelled"
|
|
543
|
+
}
|
|
544
|
+
],
|
|
545
|
+
"use": "<UiSearchInput v-model=\"q\" />\n<UiFilterChips v-model=\"status\" :items=\"statuses\" />"
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
"id": "bulk",
|
|
549
|
+
"title": "Bulk actions",
|
|
550
|
+
"desc": "Appears when at least one row is selected: counter and actions.",
|
|
551
|
+
"accepts": [
|
|
552
|
+
"Alert",
|
|
553
|
+
"Button",
|
|
554
|
+
"Badge"
|
|
555
|
+
],
|
|
556
|
+
"props": [
|
|
557
|
+
{
|
|
558
|
+
"name": "selected",
|
|
559
|
+
"type": "id[]",
|
|
560
|
+
"desc": "Hidden when nothing is selected"
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
"name": "actions",
|
|
564
|
+
"type": "VNode",
|
|
565
|
+
"desc": "Confirm, message on Telegram, cancel"
|
|
566
|
+
}
|
|
567
|
+
],
|
|
568
|
+
"use": "<UiAlert tone=\"info\" title=\"2 selected\">…</UiAlert>"
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"id": "table",
|
|
572
|
+
"title": "Table",
|
|
573
|
+
"desc": "Sorting in the header, checkboxes, responsive width. Numbers are monospaced, amounts right-aligned.",
|
|
574
|
+
"accepts": [
|
|
575
|
+
"DataTable",
|
|
576
|
+
"Avatar",
|
|
577
|
+
"Badge"
|
|
578
|
+
],
|
|
579
|
+
"props": [
|
|
580
|
+
{
|
|
581
|
+
"name": "columns",
|
|
582
|
+
"type": "{key,label,sortable?,num?,render?}[]",
|
|
583
|
+
"desc": ""
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"name": "rows",
|
|
587
|
+
"type": "Row[] with id",
|
|
588
|
+
"desc": ""
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
"name": "selected",
|
|
592
|
+
"type": "id[]",
|
|
593
|
+
"desc": "v-model:selected"
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"name": "sortKey/sortDir",
|
|
597
|
+
"type": "string",
|
|
598
|
+
"desc": ""
|
|
599
|
+
}
|
|
600
|
+
],
|
|
601
|
+
"use": "<UiDataTable :columns=\"cols\" :rows=\"rows\" v-model:selected=\"sel\" />"
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
"id": "pager",
|
|
605
|
+
"title": "Pagination",
|
|
606
|
+
"desc": "Page numbers below the table.",
|
|
607
|
+
"accepts": [
|
|
608
|
+
"Pagination"
|
|
609
|
+
],
|
|
610
|
+
"props": [
|
|
611
|
+
{
|
|
612
|
+
"name": "page",
|
|
613
|
+
"type": "number",
|
|
614
|
+
"desc": "From 1"
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
"name": "pages",
|
|
618
|
+
"type": "number",
|
|
619
|
+
"desc": ""
|
|
620
|
+
}
|
|
621
|
+
],
|
|
622
|
+
"use": "<UiPagination v-model:page=\"page\" :pages=\"6\" />"
|
|
623
|
+
}
|
|
624
|
+
]
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
"key": "list",
|
|
628
|
+
"route": "catalog",
|
|
629
|
+
"label": "List + filters",
|
|
630
|
+
"icon": "building-2",
|
|
631
|
+
"desc": "Hotel catalog: filters on the left, a panel and card grid on the right.",
|
|
632
|
+
"component": "PageCatalog",
|
|
633
|
+
"tpl": "TplCatalog",
|
|
634
|
+
"shell": true,
|
|
635
|
+
"slots": [
|
|
636
|
+
{
|
|
637
|
+
"id": "header",
|
|
638
|
+
"title": "Page heading",
|
|
639
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
640
|
+
"accepts": [
|
|
641
|
+
"PageHeader",
|
|
642
|
+
"Breadcrumbs",
|
|
643
|
+
"Button",
|
|
644
|
+
"SegmentedControl"
|
|
645
|
+
],
|
|
646
|
+
"props": [
|
|
647
|
+
{
|
|
648
|
+
"name": "title",
|
|
649
|
+
"type": "string",
|
|
650
|
+
"desc": "H1, up to 60 characters"
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
"name": "subtitle",
|
|
654
|
+
"type": "string?",
|
|
655
|
+
"desc": "Gray caption below the heading"
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
"name": "crumbs",
|
|
659
|
+
"type": "{label,href?}[]",
|
|
660
|
+
"desc": "Breadcrumbs"
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"name": "actions",
|
|
664
|
+
"type": "VNode",
|
|
665
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
666
|
+
}
|
|
667
|
+
],
|
|
668
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
"id": "filters",
|
|
672
|
+
"title": "Filters",
|
|
673
|
+
"desc": "Price, rating, trip type and services. On phones they open in a Drawer.",
|
|
674
|
+
"accepts": [
|
|
675
|
+
"Slider",
|
|
676
|
+
"Rating",
|
|
677
|
+
"RadioGroup",
|
|
678
|
+
"Checkbox"
|
|
679
|
+
],
|
|
680
|
+
"props": [
|
|
681
|
+
{
|
|
682
|
+
"name": "price",
|
|
683
|
+
"type": "[min,max]",
|
|
684
|
+
"desc": "SAR per night"
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
"name": "rating",
|
|
688
|
+
"type": "number 1–5",
|
|
689
|
+
"desc": ""
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
"name": "tags",
|
|
693
|
+
"type": "string[]",
|
|
694
|
+
"desc": "360°, Haram view…"
|
|
695
|
+
}
|
|
696
|
+
],
|
|
697
|
+
"use": "<UiSlider v-model=\"price\" label=\"Price\" />\n<UiCheckbox label=\"360° tour\" />"
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
"id": "toolbar",
|
|
701
|
+
"title": "Catalog panel",
|
|
702
|
+
"desc": "Search, view switch and sorting.",
|
|
703
|
+
"accepts": [
|
|
704
|
+
"SearchInput",
|
|
705
|
+
"ToggleGroup",
|
|
706
|
+
"Select"
|
|
707
|
+
],
|
|
708
|
+
"props": [
|
|
709
|
+
{
|
|
710
|
+
"name": "view",
|
|
711
|
+
"type": "\"grid\" | \"list\" | \"map\"",
|
|
712
|
+
"desc": ""
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
"name": "sort",
|
|
716
|
+
"type": "string",
|
|
717
|
+
"desc": "walk | price | rating"
|
|
718
|
+
}
|
|
719
|
+
],
|
|
720
|
+
"use": "<UiToggleGroup v-model=\"view\" :options=\"views\" />"
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
"id": "grid",
|
|
724
|
+
"title": "Card grid",
|
|
725
|
+
"desc": "Responsive grid; the card shows photo, stars, walking distance, rating and price.",
|
|
726
|
+
"accepts": [
|
|
727
|
+
"HotelCard",
|
|
728
|
+
"TourCard"
|
|
729
|
+
],
|
|
730
|
+
"props": [
|
|
731
|
+
{
|
|
732
|
+
"name": "name",
|
|
733
|
+
"type": "string",
|
|
734
|
+
"desc": ""
|
|
735
|
+
},
|
|
736
|
+
{
|
|
737
|
+
"name": "stars",
|
|
738
|
+
"type": "1–5",
|
|
739
|
+
"desc": ""
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
"name": "distance",
|
|
743
|
+
"type": "string",
|
|
744
|
+
"desc": "«300 m to the Haram»"
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
"name": "rating",
|
|
748
|
+
"type": "string",
|
|
749
|
+
"desc": "«9.2/10»"
|
|
750
|
+
},
|
|
751
|
+
{
|
|
752
|
+
"name": "price",
|
|
753
|
+
"type": "number",
|
|
754
|
+
"desc": "SAR per night"
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
"name": "tags",
|
|
758
|
+
"type": "string[]",
|
|
759
|
+
"desc": "Top pick, 360°"
|
|
760
|
+
},
|
|
761
|
+
{
|
|
762
|
+
"name": "image",
|
|
763
|
+
"type": "url?",
|
|
764
|
+
"desc": "Cover"
|
|
765
|
+
}
|
|
766
|
+
],
|
|
767
|
+
"use": "<UiHotelCard v-for=\"h in hotels\" v-bind=\"h\" />"
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
"id": "pager",
|
|
771
|
+
"title": "Pagination",
|
|
772
|
+
"desc": "At the bottom of the catalog.",
|
|
773
|
+
"accepts": [
|
|
774
|
+
"Pagination"
|
|
775
|
+
],
|
|
776
|
+
"props": [
|
|
777
|
+
{
|
|
778
|
+
"name": "page",
|
|
779
|
+
"type": "number",
|
|
780
|
+
"desc": ""
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"name": "pages",
|
|
784
|
+
"type": "number",
|
|
785
|
+
"desc": ""
|
|
786
|
+
}
|
|
787
|
+
],
|
|
788
|
+
"use": "<UiPagination :pages=\"6\" />"
|
|
789
|
+
}
|
|
790
|
+
]
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"key": "detail",
|
|
794
|
+
"route": "detail",
|
|
795
|
+
"label": "Detail",
|
|
796
|
+
"icon": "file-text",
|
|
797
|
+
"desc": "Hotel page: gallery, summary and price, tabs with description and a booking side card.",
|
|
798
|
+
"component": "PageDetail",
|
|
799
|
+
"tpl": "TplDetail",
|
|
800
|
+
"shell": true,
|
|
801
|
+
"slots": [
|
|
802
|
+
{
|
|
803
|
+
"id": "header",
|
|
804
|
+
"title": "Page heading",
|
|
805
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
806
|
+
"accepts": [
|
|
807
|
+
"PageHeader",
|
|
808
|
+
"Breadcrumbs",
|
|
809
|
+
"Button",
|
|
810
|
+
"SegmentedControl"
|
|
811
|
+
],
|
|
812
|
+
"props": [
|
|
813
|
+
{
|
|
814
|
+
"name": "title",
|
|
815
|
+
"type": "string",
|
|
816
|
+
"desc": "H1, up to 60 characters"
|
|
817
|
+
},
|
|
818
|
+
{
|
|
819
|
+
"name": "subtitle",
|
|
820
|
+
"type": "string?",
|
|
821
|
+
"desc": "Gray caption below the heading"
|
|
822
|
+
},
|
|
823
|
+
{
|
|
824
|
+
"name": "crumbs",
|
|
825
|
+
"type": "{label,href?}[]",
|
|
826
|
+
"desc": "Breadcrumbs"
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
"name": "actions",
|
|
830
|
+
"type": "VNode",
|
|
831
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
832
|
+
}
|
|
833
|
+
],
|
|
834
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
835
|
+
},
|
|
836
|
+
{
|
|
837
|
+
"id": "gallery",
|
|
838
|
+
"title": "Gallery",
|
|
839
|
+
"desc": "Main 16:10 photo and a thumbnail strip. The \"360°\" badge opens the tour.",
|
|
840
|
+
"accepts": [
|
|
841
|
+
"Gallery",
|
|
842
|
+
"Carousel",
|
|
843
|
+
"LazyImage"
|
|
844
|
+
],
|
|
845
|
+
"props": [
|
|
846
|
+
{
|
|
847
|
+
"name": "images",
|
|
848
|
+
"type": "url[]",
|
|
849
|
+
"desc": "4-12 photos"
|
|
850
|
+
},
|
|
851
|
+
{
|
|
852
|
+
"name": "alt",
|
|
853
|
+
"type": "string",
|
|
854
|
+
"desc": ""
|
|
855
|
+
}
|
|
856
|
+
],
|
|
857
|
+
"use": "<UiGallery :images=\"photos\" alt=\"Hotel\" />"
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
"id": "summary",
|
|
861
|
+
"title": "Summary",
|
|
862
|
+
"desc": "Name, stars, rating, badges and distance to the Haram.",
|
|
863
|
+
"accepts": [
|
|
864
|
+
"Card",
|
|
865
|
+
"Badge",
|
|
866
|
+
"Rating"
|
|
867
|
+
],
|
|
868
|
+
"props": [
|
|
869
|
+
{
|
|
870
|
+
"name": "name",
|
|
871
|
+
"type": "string",
|
|
872
|
+
"desc": ""
|
|
873
|
+
},
|
|
874
|
+
{
|
|
875
|
+
"name": "badges",
|
|
876
|
+
"type": "string[]",
|
|
877
|
+
"desc": "Top pick, 360°, Haram view"
|
|
878
|
+
}
|
|
879
|
+
],
|
|
880
|
+
"use": "<UiCard title=\"Hilton Suites\">…</UiCard>"
|
|
881
|
+
},
|
|
882
|
+
{
|
|
883
|
+
"id": "tabs",
|
|
884
|
+
"title": "Tabs",
|
|
885
|
+
"desc": "Description, amenities, reviews. Content is a key-value table.",
|
|
886
|
+
"accepts": [
|
|
887
|
+
"Tabs",
|
|
888
|
+
"Descriptions",
|
|
889
|
+
"Accordion"
|
|
890
|
+
],
|
|
891
|
+
"props": [
|
|
892
|
+
{
|
|
893
|
+
"name": "tab",
|
|
894
|
+
"type": "string",
|
|
895
|
+
"desc": "about | rooms | reviews"
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
"name": "items",
|
|
899
|
+
"type": "{label,value}[]",
|
|
900
|
+
"desc": ""
|
|
901
|
+
}
|
|
902
|
+
],
|
|
903
|
+
"use": "<UiTabs v-model=\"tab\" :items=\"tabs\" />\n<UiDescriptions :items=\"facts\" />"
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
"id": "booking",
|
|
907
|
+
"title": "Booking",
|
|
908
|
+
"desc": "Sticky card on the right: dates, guests, price and CTA. On phones, a bottom bar.",
|
|
909
|
+
"accepts": [
|
|
910
|
+
"Card",
|
|
911
|
+
"Select",
|
|
912
|
+
"NumberInput",
|
|
913
|
+
"Button"
|
|
914
|
+
],
|
|
915
|
+
"props": [
|
|
916
|
+
{
|
|
917
|
+
"name": "dates",
|
|
918
|
+
"type": "[from,to]",
|
|
919
|
+
"desc": ""
|
|
920
|
+
},
|
|
921
|
+
{
|
|
922
|
+
"name": "guests",
|
|
923
|
+
"type": "number",
|
|
924
|
+
"desc": ""
|
|
925
|
+
},
|
|
926
|
+
{
|
|
927
|
+
"name": "price",
|
|
928
|
+
"type": "number",
|
|
929
|
+
"desc": "Total in SAR"
|
|
930
|
+
}
|
|
931
|
+
],
|
|
932
|
+
"use": "<UiCard title=\"Book\">…<UiButton variant=\"primary\" block>Reserve</UiButton></UiCard>"
|
|
933
|
+
},
|
|
934
|
+
{
|
|
935
|
+
"id": "history",
|
|
936
|
+
"title": "History",
|
|
937
|
+
"desc": "What changed: status, notes, price.",
|
|
938
|
+
"accepts": [
|
|
939
|
+
"Timeline"
|
|
940
|
+
],
|
|
941
|
+
"props": [
|
|
942
|
+
{
|
|
943
|
+
"name": "items",
|
|
944
|
+
"type": "{title,text?,time}[]",
|
|
945
|
+
"desc": ""
|
|
946
|
+
}
|
|
947
|
+
],
|
|
948
|
+
"use": "<UiTimeline :items=\"history\" />"
|
|
949
|
+
}
|
|
950
|
+
]
|
|
951
|
+
},
|
|
952
|
+
{
|
|
953
|
+
"key": "settings",
|
|
954
|
+
"route": "settings",
|
|
955
|
+
"label": "Settings",
|
|
956
|
+
"icon": "settings",
|
|
957
|
+
"desc": "Account settings: submenu, profile, notifications, integrations and danger zone.",
|
|
958
|
+
"component": "PageSettings",
|
|
959
|
+
"tpl": "TplSettings",
|
|
960
|
+
"shell": true,
|
|
961
|
+
"slots": [
|
|
962
|
+
{
|
|
963
|
+
"id": "header",
|
|
964
|
+
"title": "Page heading",
|
|
965
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
966
|
+
"accepts": [
|
|
967
|
+
"PageHeader",
|
|
968
|
+
"Breadcrumbs",
|
|
969
|
+
"Button",
|
|
970
|
+
"SegmentedControl"
|
|
971
|
+
],
|
|
972
|
+
"props": [
|
|
973
|
+
{
|
|
974
|
+
"name": "title",
|
|
975
|
+
"type": "string",
|
|
976
|
+
"desc": "H1, up to 60 characters"
|
|
977
|
+
},
|
|
978
|
+
{
|
|
979
|
+
"name": "subtitle",
|
|
980
|
+
"type": "string?",
|
|
981
|
+
"desc": "Gray caption below the heading"
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
"name": "crumbs",
|
|
985
|
+
"type": "{label,href?}[]",
|
|
986
|
+
"desc": "Breadcrumbs"
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
"name": "actions",
|
|
990
|
+
"type": "VNode",
|
|
991
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
992
|
+
}
|
|
993
|
+
],
|
|
994
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
995
|
+
},
|
|
996
|
+
{
|
|
997
|
+
"id": "subnav",
|
|
998
|
+
"title": "Submenu",
|
|
999
|
+
"desc": "Settings sections on the left; tabs on a narrow screen.",
|
|
1000
|
+
"accepts": [
|
|
1001
|
+
"SubNav",
|
|
1002
|
+
"Tabs"
|
|
1003
|
+
],
|
|
1004
|
+
"props": [
|
|
1005
|
+
{
|
|
1006
|
+
"name": "items",
|
|
1007
|
+
"type": "{value,label,icon,badge?}[]",
|
|
1008
|
+
"desc": ""
|
|
1009
|
+
},
|
|
1010
|
+
{
|
|
1011
|
+
"name": "value",
|
|
1012
|
+
"type": "string",
|
|
1013
|
+
"desc": ""
|
|
1014
|
+
}
|
|
1015
|
+
],
|
|
1016
|
+
"use": "<UiSubNav v-model=\"tab\" :items=\"sections\" />"
|
|
1017
|
+
},
|
|
1018
|
+
{
|
|
1019
|
+
"id": "profile",
|
|
1020
|
+
"title": "Profile",
|
|
1021
|
+
"desc": "Section: description on the left, fields on the right. Saved with the button at the bottom.",
|
|
1022
|
+
"accepts": [
|
|
1023
|
+
"SettingsSection",
|
|
1024
|
+
"TextField",
|
|
1025
|
+
"PhoneInput"
|
|
1026
|
+
],
|
|
1027
|
+
"props": [
|
|
1028
|
+
{
|
|
1029
|
+
"name": "title",
|
|
1030
|
+
"type": "string",
|
|
1031
|
+
"desc": ""
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
"name": "description",
|
|
1035
|
+
"type": "string?",
|
|
1036
|
+
"desc": ""
|
|
1037
|
+
},
|
|
1038
|
+
{
|
|
1039
|
+
"name": "default slot",
|
|
1040
|
+
"type": "VNode",
|
|
1041
|
+
"desc": "Form fields"
|
|
1042
|
+
}
|
|
1043
|
+
],
|
|
1044
|
+
"use": "<UiSettingsSection title=\"Profile\">\n <UiTextField label=\"Name\" />\n</UiSettingsSection>"
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"id": "notifications",
|
|
1048
|
+
"title": "Notifications",
|
|
1049
|
+
"desc": "Delivery channels. Telegram is primary.",
|
|
1050
|
+
"accepts": [
|
|
1051
|
+
"SettingsSection",
|
|
1052
|
+
"Switch"
|
|
1053
|
+
],
|
|
1054
|
+
"props": [
|
|
1055
|
+
{
|
|
1056
|
+
"name": "telegram",
|
|
1057
|
+
"type": "boolean",
|
|
1058
|
+
"desc": ""
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
"name": "email",
|
|
1062
|
+
"type": "boolean",
|
|
1063
|
+
"desc": "Email reports"
|
|
1064
|
+
},
|
|
1065
|
+
{
|
|
1066
|
+
"name": "sms",
|
|
1067
|
+
"type": "boolean",
|
|
1068
|
+
"desc": ""
|
|
1069
|
+
}
|
|
1070
|
+
],
|
|
1071
|
+
"use": "<UiSwitch v-model=\"tg\" label=\"Telegram\" />"
|
|
1072
|
+
},
|
|
1073
|
+
{
|
|
1074
|
+
"id": "integrations",
|
|
1075
|
+
"title": "Integrations",
|
|
1076
|
+
"desc": "Service cards: connected, not linked, error.",
|
|
1077
|
+
"accepts": [
|
|
1078
|
+
"IntegrationCard"
|
|
1079
|
+
],
|
|
1080
|
+
"props": [
|
|
1081
|
+
{
|
|
1082
|
+
"name": "name",
|
|
1083
|
+
"type": "string",
|
|
1084
|
+
"desc": ""
|
|
1085
|
+
},
|
|
1086
|
+
{
|
|
1087
|
+
"name": "status",
|
|
1088
|
+
"type": "\"connected\" | \"off\" | \"error\"",
|
|
1089
|
+
"desc": ""
|
|
1090
|
+
},
|
|
1091
|
+
{
|
|
1092
|
+
"name": "onToggle",
|
|
1093
|
+
"type": "() => void",
|
|
1094
|
+
"desc": ""
|
|
1095
|
+
}
|
|
1096
|
+
],
|
|
1097
|
+
"use": "<UiIntegrationCard name=\"Telegram\" status=\"off\" />"
|
|
1098
|
+
},
|
|
1099
|
+
{
|
|
1100
|
+
"id": "danger",
|
|
1101
|
+
"title": "Danger zone",
|
|
1102
|
+
"desc": "Irreversible actions: red button, confirmation via ConfirmDialog.",
|
|
1103
|
+
"accepts": [
|
|
1104
|
+
"Alert",
|
|
1105
|
+
"Button",
|
|
1106
|
+
"ConfirmDialog"
|
|
1107
|
+
],
|
|
1108
|
+
"props": [
|
|
1109
|
+
{
|
|
1110
|
+
"name": "onDelete",
|
|
1111
|
+
"type": "() => void",
|
|
1112
|
+
"desc": "After confirmation"
|
|
1113
|
+
}
|
|
1114
|
+
],
|
|
1115
|
+
"use": "<UiPopconfirm label=\"Delete account\" title=\"Sure?\" />"
|
|
1116
|
+
}
|
|
1117
|
+
]
|
|
1118
|
+
},
|
|
1119
|
+
{
|
|
1120
|
+
"key": "login",
|
|
1121
|
+
"route": "login",
|
|
1122
|
+
"label": "Sign in",
|
|
1123
|
+
"icon": "log-in",
|
|
1124
|
+
"desc": "Sign-in page without the shell: logo, form, links and a decorative background. Always dark theme.",
|
|
1125
|
+
"component": "PageAuth",
|
|
1126
|
+
"tpl": "TplLogin",
|
|
1127
|
+
"shell": false,
|
|
1128
|
+
"slots": [
|
|
1129
|
+
{
|
|
1130
|
+
"id": "background",
|
|
1131
|
+
"title": "Background",
|
|
1132
|
+
"desc": "Decorative brand and light blue glows. No photo or text.",
|
|
1133
|
+
"accepts": [
|
|
1134
|
+
"div",
|
|
1135
|
+
"svg",
|
|
1136
|
+
"canvas"
|
|
1137
|
+
],
|
|
1138
|
+
"props": [
|
|
1139
|
+
{
|
|
1140
|
+
"name": "intensity",
|
|
1141
|
+
"type": "number",
|
|
1142
|
+
"desc": "Blur 100-140 px"
|
|
1143
|
+
}
|
|
1144
|
+
],
|
|
1145
|
+
"use": "<div class=\"auth-glow\" />"
|
|
1146
|
+
},
|
|
1147
|
+
{
|
|
1148
|
+
"id": "logo",
|
|
1149
|
+
"title": "Logo",
|
|
1150
|
+
"desc": "Above the heading, 56 px.",
|
|
1151
|
+
"accepts": [
|
|
1152
|
+
"img",
|
|
1153
|
+
"svg"
|
|
1154
|
+
],
|
|
1155
|
+
"props": [
|
|
1156
|
+
{
|
|
1157
|
+
"name": "logo",
|
|
1158
|
+
"type": "VNode",
|
|
1159
|
+
"desc": ""
|
|
1160
|
+
}
|
|
1161
|
+
],
|
|
1162
|
+
"use": "<UiAuthLayout><template #logo>…</template></UiAuthLayout>"
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
"id": "form",
|
|
1166
|
+
"title": "Form",
|
|
1167
|
+
"desc": "Login or phone, password, \"remember me\", forgot password, button. Errors use an Alert above the fields.",
|
|
1168
|
+
"accepts": [
|
|
1169
|
+
"LoginForm",
|
|
1170
|
+
"PasswordInput",
|
|
1171
|
+
"Alert"
|
|
1172
|
+
],
|
|
1173
|
+
"props": [
|
|
1174
|
+
{
|
|
1175
|
+
"name": "onSubmit",
|
|
1176
|
+
"type": "({email,password,remember}) => void",
|
|
1177
|
+
"desc": ""
|
|
1178
|
+
},
|
|
1179
|
+
{
|
|
1180
|
+
"name": "error",
|
|
1181
|
+
"type": "string?",
|
|
1182
|
+
"desc": ""
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"name": "loading",
|
|
1186
|
+
"type": "boolean",
|
|
1187
|
+
"desc": "Disables the button"
|
|
1188
|
+
},
|
|
1189
|
+
{
|
|
1190
|
+
"name": "onForgot",
|
|
1191
|
+
"type": "() => void",
|
|
1192
|
+
"desc": ""
|
|
1193
|
+
}
|
|
1194
|
+
],
|
|
1195
|
+
"use": "<UiLoginForm :loading=\"busy\" :error=\"err\" @submit=\"signIn\" />"
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
"id": "footer",
|
|
1199
|
+
"title": "Bottom links",
|
|
1200
|
+
"desc": "Help, policy, language.",
|
|
1201
|
+
"accepts": [
|
|
1202
|
+
"a",
|
|
1203
|
+
"Dropdown"
|
|
1204
|
+
],
|
|
1205
|
+
"props": [
|
|
1206
|
+
{
|
|
1207
|
+
"name": "links",
|
|
1208
|
+
"type": "{label,href}[]",
|
|
1209
|
+
"desc": ""
|
|
1210
|
+
}
|
|
1211
|
+
],
|
|
1212
|
+
"use": "<a href=\"/help\">Help</a>"
|
|
1213
|
+
}
|
|
1214
|
+
]
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
"key": "patterns",
|
|
1218
|
+
"route": "patterns",
|
|
1219
|
+
"label": "Card patterns",
|
|
1220
|
+
"icon": "layout-grid",
|
|
1221
|
+
"desc": "Twelve recurring Vuexy dashboard cards in our style. Any dashboard is built from them.",
|
|
1222
|
+
"component": "PagePatterns",
|
|
1223
|
+
"tpl": "TplPatterns",
|
|
1224
|
+
"shell": true,
|
|
1225
|
+
"slots": [
|
|
1226
|
+
{
|
|
1227
|
+
"id": "header",
|
|
1228
|
+
"title": "Page heading",
|
|
1229
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
1230
|
+
"accepts": [
|
|
1231
|
+
"PageHeader",
|
|
1232
|
+
"Breadcrumbs",
|
|
1233
|
+
"Button",
|
|
1234
|
+
"SegmentedControl"
|
|
1235
|
+
],
|
|
1236
|
+
"props": [
|
|
1237
|
+
{
|
|
1238
|
+
"name": "title",
|
|
1239
|
+
"type": "string",
|
|
1240
|
+
"desc": "H1, up to 60 characters"
|
|
1241
|
+
},
|
|
1242
|
+
{
|
|
1243
|
+
"name": "subtitle",
|
|
1244
|
+
"type": "string?",
|
|
1245
|
+
"desc": "Gray caption below the heading"
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
"name": "crumbs",
|
|
1249
|
+
"type": "{label,href?}[]",
|
|
1250
|
+
"desc": "Breadcrumbs"
|
|
1251
|
+
},
|
|
1252
|
+
{
|
|
1253
|
+
"name": "actions",
|
|
1254
|
+
"type": "VNode",
|
|
1255
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
1256
|
+
}
|
|
1257
|
+
],
|
|
1258
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
"id": "hero",
|
|
1262
|
+
"title": "Hero / greeting",
|
|
1263
|
+
"desc": "Large banner: heading, amount, one button, optional 3D icon on the right.",
|
|
1264
|
+
"accepts": [
|
|
1265
|
+
"HeroBanner"
|
|
1266
|
+
],
|
|
1267
|
+
"props": [
|
|
1268
|
+
{
|
|
1269
|
+
"name": "title",
|
|
1270
|
+
"type": "string",
|
|
1271
|
+
"desc": ""
|
|
1272
|
+
},
|
|
1273
|
+
{
|
|
1274
|
+
"name": "value",
|
|
1275
|
+
"type": "string?",
|
|
1276
|
+
"desc": "Large amount"
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
"name": "cta",
|
|
1280
|
+
"type": "string?",
|
|
1281
|
+
"desc": "One button"
|
|
1282
|
+
},
|
|
1283
|
+
{
|
|
1284
|
+
"name": "image",
|
|
1285
|
+
"type": "url?",
|
|
1286
|
+
"desc": "3D icon from the set"
|
|
1287
|
+
}
|
|
1288
|
+
],
|
|
1289
|
+
"use": "<UiHeroBanner title=\"Congratulations, Shodiya\" value=\"$42 800\" cta=\"View sales\" />"
|
|
1290
|
+
},
|
|
1291
|
+
{
|
|
1292
|
+
"id": "strip",
|
|
1293
|
+
"title": "Metrics bar",
|
|
1294
|
+
"desc": "One card, 4 metrics with vertical dividers and icons in tonal tiles.",
|
|
1295
|
+
"accepts": [
|
|
1296
|
+
"StatStrip",
|
|
1297
|
+
"IconTile"
|
|
1298
|
+
],
|
|
1299
|
+
"props": [
|
|
1300
|
+
{
|
|
1301
|
+
"name": "items",
|
|
1302
|
+
"type": "{icon,tone,value,label}[]",
|
|
1303
|
+
"desc": "3-4 metrics"
|
|
1304
|
+
}
|
|
1305
|
+
],
|
|
1306
|
+
"use": "<UiStatStrip :items=\"metrics\" />"
|
|
1307
|
+
},
|
|
1308
|
+
{
|
|
1309
|
+
"id": "statlines",
|
|
1310
|
+
"title": "Stat with bottom line",
|
|
1311
|
+
"desc": "Icon in a tile, number, label and delta. The colored line at the bottom encodes the tone.",
|
|
1312
|
+
"accepts": [
|
|
1313
|
+
"StatLine"
|
|
1314
|
+
],
|
|
1315
|
+
"props": [
|
|
1316
|
+
{
|
|
1317
|
+
"name": "tone",
|
|
1318
|
+
"type": "brand|sky|success|warning|danger",
|
|
1319
|
+
"desc": ""
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
"name": "value",
|
|
1323
|
+
"type": "string",
|
|
1324
|
+
"desc": ""
|
|
1325
|
+
},
|
|
1326
|
+
{
|
|
1327
|
+
"name": "delta",
|
|
1328
|
+
"type": "string?",
|
|
1329
|
+
"desc": "+12% / -3%"
|
|
1330
|
+
}
|
|
1331
|
+
],
|
|
1332
|
+
"use": "<UiStatLine tone=\"success\" icon=\"wallet\" value=\"$214k\" label=\"Revenue\" delta=\"+8%\" />"
|
|
1333
|
+
},
|
|
1334
|
+
{
|
|
1335
|
+
"id": "chartcard",
|
|
1336
|
+
"title": "Chart card",
|
|
1337
|
+
"desc": "Heading, subheading, ⋮ menu on the right and a tonal period select.",
|
|
1338
|
+
"accepts": [
|
|
1339
|
+
"ChartCard",
|
|
1340
|
+
"PillSelect",
|
|
1341
|
+
"OccupancyChart",
|
|
1342
|
+
"MiniChart"
|
|
1343
|
+
],
|
|
1344
|
+
"props": [
|
|
1345
|
+
{
|
|
1346
|
+
"name": "title",
|
|
1347
|
+
"type": "string",
|
|
1348
|
+
"desc": ""
|
|
1349
|
+
},
|
|
1350
|
+
{
|
|
1351
|
+
"name": "subtitle",
|
|
1352
|
+
"type": "string?",
|
|
1353
|
+
"desc": ""
|
|
1354
|
+
},
|
|
1355
|
+
{
|
|
1356
|
+
"name": "menu",
|
|
1357
|
+
"type": "string[]",
|
|
1358
|
+
"desc": "View more · Delete"
|
|
1359
|
+
}
|
|
1360
|
+
],
|
|
1361
|
+
"use": "<UiChartCard title=\"Occupancy\" :menu=\"['View more','Delete']\" />"
|
|
1362
|
+
},
|
|
1363
|
+
{
|
|
1364
|
+
"id": "listrows",
|
|
1365
|
+
"title": "List rows",
|
|
1366
|
+
"desc": "Tile → title and caption → value and delta.",
|
|
1367
|
+
"accepts": [
|
|
1368
|
+
"StatRow"
|
|
1369
|
+
],
|
|
1370
|
+
"props": [
|
|
1371
|
+
{
|
|
1372
|
+
"name": "icon",
|
|
1373
|
+
"type": "string",
|
|
1374
|
+
"desc": ""
|
|
1375
|
+
},
|
|
1376
|
+
{
|
|
1377
|
+
"name": "title",
|
|
1378
|
+
"type": "string",
|
|
1379
|
+
"desc": ""
|
|
1380
|
+
},
|
|
1381
|
+
{
|
|
1382
|
+
"name": "value",
|
|
1383
|
+
"type": "string",
|
|
1384
|
+
"desc": ""
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
"name": "delta",
|
|
1388
|
+
"type": "string?",
|
|
1389
|
+
"desc": ""
|
|
1390
|
+
}
|
|
1391
|
+
],
|
|
1392
|
+
"use": "<UiStatRow icon=\"wallet\" title=\"Transactions\" value=\"$4 600\" delta=\"+8%\" />"
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
"id": "countries",
|
|
1396
|
+
"title": "Country list",
|
|
1397
|
+
"desc": "Country code in a circle, amount, name and percentage.",
|
|
1398
|
+
"accepts": [
|
|
1399
|
+
"CountryRow"
|
|
1400
|
+
],
|
|
1401
|
+
"props": [
|
|
1402
|
+
{
|
|
1403
|
+
"name": "code",
|
|
1404
|
+
"type": "string",
|
|
1405
|
+
"desc": "UZ · SA · RU"
|
|
1406
|
+
},
|
|
1407
|
+
{
|
|
1408
|
+
"name": "amount",
|
|
1409
|
+
"type": "string",
|
|
1410
|
+
"desc": ""
|
|
1411
|
+
},
|
|
1412
|
+
{
|
|
1413
|
+
"name": "pct",
|
|
1414
|
+
"type": "string?",
|
|
1415
|
+
"desc": ""
|
|
1416
|
+
}
|
|
1417
|
+
],
|
|
1418
|
+
"use": "<UiCountryRow code=\"UZ\" amount=\"$8 700\" name=\"Uzbekistan\" pct=\"+25%\" />"
|
|
1419
|
+
},
|
|
1420
|
+
{
|
|
1421
|
+
"id": "tiles",
|
|
1422
|
+
"title": "Tile tabs",
|
|
1423
|
+
"desc": "Icon + name; active has a brand border; dashed \"+\" tile.",
|
|
1424
|
+
"accepts": [
|
|
1425
|
+
"TabTiles"
|
|
1426
|
+
],
|
|
1427
|
+
"props": [
|
|
1428
|
+
{
|
|
1429
|
+
"name": "items",
|
|
1430
|
+
"type": "{value,icon,label}[]",
|
|
1431
|
+
"desc": ""
|
|
1432
|
+
},
|
|
1433
|
+
{
|
|
1434
|
+
"name": "addable",
|
|
1435
|
+
"type": "boolean",
|
|
1436
|
+
"desc": "Dashed \"+\""
|
|
1437
|
+
}
|
|
1438
|
+
],
|
|
1439
|
+
"use": "<UiTabTiles v-model=\"tab\" :items=\"tabs\" addable />"
|
|
1440
|
+
},
|
|
1441
|
+
{
|
|
1442
|
+
"id": "versus",
|
|
1443
|
+
"title": "VS comparison",
|
|
1444
|
+
"desc": "Two values and a two-color share bar.",
|
|
1445
|
+
"accepts": [
|
|
1446
|
+
"VersusBar"
|
|
1447
|
+
],
|
|
1448
|
+
"props": [
|
|
1449
|
+
{
|
|
1450
|
+
"name": "left",
|
|
1451
|
+
"type": "{label,value}",
|
|
1452
|
+
"desc": "Brand"
|
|
1453
|
+
},
|
|
1454
|
+
{
|
|
1455
|
+
"name": "right",
|
|
1456
|
+
"type": "{label,value}",
|
|
1457
|
+
"desc": "Light blue"
|
|
1458
|
+
}
|
|
1459
|
+
],
|
|
1460
|
+
"use": "<UiVersusBar :left=\"orders\" :right=\"visits\" />"
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"id": "segbar",
|
|
1464
|
+
"title": "Segmented bar",
|
|
1465
|
+
"desc": "Composition of a whole in one bar with a legend.",
|
|
1466
|
+
"accepts": [
|
|
1467
|
+
"SegBar"
|
|
1468
|
+
],
|
|
1469
|
+
"props": [
|
|
1470
|
+
{
|
|
1471
|
+
"name": "segments",
|
|
1472
|
+
"type": "{label,value,color?}[]",
|
|
1473
|
+
"desc": ""
|
|
1474
|
+
}
|
|
1475
|
+
],
|
|
1476
|
+
"use": "<UiSegBar :segments=\"fleet\" />"
|
|
1477
|
+
},
|
|
1478
|
+
{
|
|
1479
|
+
"id": "activity",
|
|
1480
|
+
"title": "Activity feed",
|
|
1481
|
+
"desc": "Dots, time and attachments.",
|
|
1482
|
+
"accepts": [
|
|
1483
|
+
"Timeline"
|
|
1484
|
+
],
|
|
1485
|
+
"props": [
|
|
1486
|
+
{
|
|
1487
|
+
"name": "items",
|
|
1488
|
+
"type": "{title,text?,time}[]",
|
|
1489
|
+
"desc": ""
|
|
1490
|
+
}
|
|
1491
|
+
],
|
|
1492
|
+
"use": "<UiTimeline :items=\"events\" />"
|
|
1493
|
+
},
|
|
1494
|
+
{
|
|
1495
|
+
"id": "actioncard",
|
|
1496
|
+
"title": "Card with actions",
|
|
1497
|
+
"desc": "Three icons: collapse, refresh (overlay with a 2 s spinner), close.",
|
|
1498
|
+
"accepts": [
|
|
1499
|
+
"ActionCard"
|
|
1500
|
+
],
|
|
1501
|
+
"props": [
|
|
1502
|
+
{
|
|
1503
|
+
"name": "title",
|
|
1504
|
+
"type": "string",
|
|
1505
|
+
"desc": ""
|
|
1506
|
+
},
|
|
1507
|
+
{
|
|
1508
|
+
"name": "onRefresh",
|
|
1509
|
+
"type": "() => Promise",
|
|
1510
|
+
"desc": "Overlay until done"
|
|
1511
|
+
}
|
|
1512
|
+
],
|
|
1513
|
+
"use": "<UiActionCard title=\"Weekly report\">…</UiActionCard>"
|
|
1514
|
+
}
|
|
1515
|
+
]
|
|
1516
|
+
},
|
|
1517
|
+
{
|
|
1518
|
+
"key": "userlist",
|
|
1519
|
+
"route": "user-list",
|
|
1520
|
+
"label": "List + drawer",
|
|
1521
|
+
"icon": "users",
|
|
1522
|
+
"desc": "Table page: KPI, filters, toolbar, table with component cells and a right \"Add\" panel.",
|
|
1523
|
+
"component": "PageUserList",
|
|
1524
|
+
"tpl": "TplUserList",
|
|
1525
|
+
"shell": true,
|
|
1526
|
+
"slots": [
|
|
1527
|
+
{
|
|
1528
|
+
"id": "header",
|
|
1529
|
+
"title": "Page heading",
|
|
1530
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
1531
|
+
"accepts": [
|
|
1532
|
+
"PageHeader",
|
|
1533
|
+
"Breadcrumbs",
|
|
1534
|
+
"Button",
|
|
1535
|
+
"SegmentedControl"
|
|
1536
|
+
],
|
|
1537
|
+
"props": [
|
|
1538
|
+
{
|
|
1539
|
+
"name": "title",
|
|
1540
|
+
"type": "string",
|
|
1541
|
+
"desc": "H1, up to 60 characters"
|
|
1542
|
+
},
|
|
1543
|
+
{
|
|
1544
|
+
"name": "subtitle",
|
|
1545
|
+
"type": "string?",
|
|
1546
|
+
"desc": "Gray caption below the heading"
|
|
1547
|
+
},
|
|
1548
|
+
{
|
|
1549
|
+
"name": "crumbs",
|
|
1550
|
+
"type": "{label,href?}[]",
|
|
1551
|
+
"desc": "Breadcrumbs"
|
|
1552
|
+
},
|
|
1553
|
+
{
|
|
1554
|
+
"name": "actions",
|
|
1555
|
+
"type": "VNode",
|
|
1556
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
1557
|
+
}
|
|
1558
|
+
],
|
|
1559
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
1560
|
+
},
|
|
1561
|
+
{
|
|
1562
|
+
"id": "stats",
|
|
1563
|
+
"title": "KPI",
|
|
1564
|
+
"desc": "Four figures above the table in one bar.",
|
|
1565
|
+
"accepts": [
|
|
1566
|
+
"StatStrip"
|
|
1567
|
+
],
|
|
1568
|
+
"props": [
|
|
1569
|
+
{
|
|
1570
|
+
"name": "items",
|
|
1571
|
+
"type": "{icon,tone,value,label}[]",
|
|
1572
|
+
"desc": ""
|
|
1573
|
+
}
|
|
1574
|
+
],
|
|
1575
|
+
"use": "<UiStatStrip :items=\"kpi\" />"
|
|
1576
|
+
},
|
|
1577
|
+
{
|
|
1578
|
+
"id": "filters",
|
|
1579
|
+
"title": "Filters",
|
|
1580
|
+
"desc": "Three selects in a card. They update the table immediately.",
|
|
1581
|
+
"accepts": [
|
|
1582
|
+
"Select"
|
|
1583
|
+
],
|
|
1584
|
+
"props": [
|
|
1585
|
+
{
|
|
1586
|
+
"name": "role",
|
|
1587
|
+
"type": "string",
|
|
1588
|
+
"desc": ""
|
|
1589
|
+
},
|
|
1590
|
+
{
|
|
1591
|
+
"name": "plan",
|
|
1592
|
+
"type": "string",
|
|
1593
|
+
"desc": ""
|
|
1594
|
+
},
|
|
1595
|
+
{
|
|
1596
|
+
"name": "status",
|
|
1597
|
+
"type": "string",
|
|
1598
|
+
"desc": ""
|
|
1599
|
+
}
|
|
1600
|
+
],
|
|
1601
|
+
"use": "<UiSelect v-model=\"role\" label=\"Role\" :options=\"roles\" />"
|
|
1602
|
+
},
|
|
1603
|
+
{
|
|
1604
|
+
"id": "toolbar",
|
|
1605
|
+
"title": "Toolbar",
|
|
1606
|
+
"desc": "\"Show N\", search, export (tonal), primary \"+ Add\".",
|
|
1607
|
+
"accepts": [
|
|
1608
|
+
"Select",
|
|
1609
|
+
"SearchInput",
|
|
1610
|
+
"Button"
|
|
1611
|
+
],
|
|
1612
|
+
"props": [
|
|
1613
|
+
{
|
|
1614
|
+
"name": "pageSize",
|
|
1615
|
+
"type": "number",
|
|
1616
|
+
"desc": "10 · 25 · 50"
|
|
1617
|
+
}
|
|
1618
|
+
],
|
|
1619
|
+
"use": "<UiButton variant=\"primary\" icon=\"plus\">Add user</UiButton>"
|
|
1620
|
+
},
|
|
1621
|
+
{
|
|
1622
|
+
"id": "table",
|
|
1623
|
+
"title": "Table",
|
|
1624
|
+
"desc": "Checkboxes, user, role, plan, status chip, actions.",
|
|
1625
|
+
"accepts": [
|
|
1626
|
+
"DataTable",
|
|
1627
|
+
"UserCell",
|
|
1628
|
+
"Chip",
|
|
1629
|
+
"IconButton"
|
|
1630
|
+
],
|
|
1631
|
+
"props": [
|
|
1632
|
+
{
|
|
1633
|
+
"name": "rows",
|
|
1634
|
+
"type": "Row[]",
|
|
1635
|
+
"desc": ""
|
|
1636
|
+
},
|
|
1637
|
+
{
|
|
1638
|
+
"name": "selected",
|
|
1639
|
+
"type": "id[]",
|
|
1640
|
+
"desc": ""
|
|
1641
|
+
}
|
|
1642
|
+
],
|
|
1643
|
+
"use": "<UiDataTable :columns=\"cols\" :rows=\"users\" />"
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
"id": "drawer",
|
|
1647
|
+
"title": "Drawer «Add user»",
|
|
1648
|
+
"desc": "Right panel 380-400 px: one field per row, Submit and Cancel at the bottom. Esc, ×, and a click on the backdrop close it.",
|
|
1649
|
+
"accepts": [
|
|
1650
|
+
"Drawer",
|
|
1651
|
+
"TextField",
|
|
1652
|
+
"Select",
|
|
1653
|
+
"Button"
|
|
1654
|
+
],
|
|
1655
|
+
"props": [
|
|
1656
|
+
{
|
|
1657
|
+
"name": "open",
|
|
1658
|
+
"type": "boolean",
|
|
1659
|
+
"desc": ""
|
|
1660
|
+
},
|
|
1661
|
+
{
|
|
1662
|
+
"name": "title",
|
|
1663
|
+
"type": "string",
|
|
1664
|
+
"desc": ""
|
|
1665
|
+
}
|
|
1666
|
+
],
|
|
1667
|
+
"use": "<UiDrawer :open=\"open\" title=\"Add user\">…</UiDrawer>"
|
|
1668
|
+
}
|
|
1669
|
+
]
|
|
1670
|
+
},
|
|
1671
|
+
{
|
|
1672
|
+
"key": "userview",
|
|
1673
|
+
"route": "profile",
|
|
1674
|
+
"label": "Profile",
|
|
1675
|
+
"icon": "user-round",
|
|
1676
|
+
"desc": "User or customer page: cover with avatar, pill tabs and two columns of cards.",
|
|
1677
|
+
"component": "PageProfile",
|
|
1678
|
+
"tpl": "TplProfile",
|
|
1679
|
+
"shell": true,
|
|
1680
|
+
"slots": [
|
|
1681
|
+
{
|
|
1682
|
+
"id": "profile",
|
|
1683
|
+
"title": "Profile header",
|
|
1684
|
+
"desc": "220 px cover, 104 px avatar with a background-colored border, name, meta with icons, button.",
|
|
1685
|
+
"accepts": [
|
|
1686
|
+
"ProfileHeader",
|
|
1687
|
+
"Avatar",
|
|
1688
|
+
"Chip"
|
|
1689
|
+
],
|
|
1690
|
+
"props": [
|
|
1691
|
+
{
|
|
1692
|
+
"name": "name",
|
|
1693
|
+
"type": "string",
|
|
1694
|
+
"desc": ""
|
|
1695
|
+
},
|
|
1696
|
+
{
|
|
1697
|
+
"name": "cover",
|
|
1698
|
+
"type": "url?",
|
|
1699
|
+
"desc": ""
|
|
1700
|
+
},
|
|
1701
|
+
{
|
|
1702
|
+
"name": "meta",
|
|
1703
|
+
"type": "{icon,label}[]",
|
|
1704
|
+
"desc": "Role · city · date"
|
|
1705
|
+
}
|
|
1706
|
+
],
|
|
1707
|
+
"use": "<UiProfileHeader name=\"Shodiya Karimova\" :meta=\"meta\" />"
|
|
1708
|
+
},
|
|
1709
|
+
{
|
|
1710
|
+
"id": "tabs",
|
|
1711
|
+
"title": "Pill tabs",
|
|
1712
|
+
"desc": "Active tab fills with the brand color and a shadow. Horizontal above the content or vertical on the left.",
|
|
1713
|
+
"accepts": [
|
|
1714
|
+
"PillTabs"
|
|
1715
|
+
],
|
|
1716
|
+
"props": [
|
|
1717
|
+
{
|
|
1718
|
+
"name": "items",
|
|
1719
|
+
"type": "{value,icon?,label}[]",
|
|
1720
|
+
"desc": ""
|
|
1721
|
+
},
|
|
1722
|
+
{
|
|
1723
|
+
"name": "vertical",
|
|
1724
|
+
"type": "boolean",
|
|
1725
|
+
"desc": ""
|
|
1726
|
+
}
|
|
1727
|
+
],
|
|
1728
|
+
"use": "<UiPillTabs v-model=\"tab\" :items=\"tabs\" />"
|
|
1729
|
+
},
|
|
1730
|
+
{
|
|
1731
|
+
"id": "about",
|
|
1732
|
+
"title": "About block",
|
|
1733
|
+
"desc": "13 px uppercase labels and key-value pairs with icons.",
|
|
1734
|
+
"accepts": [
|
|
1735
|
+
"Card",
|
|
1736
|
+
"Descriptions"
|
|
1737
|
+
],
|
|
1738
|
+
"props": [
|
|
1739
|
+
{
|
|
1740
|
+
"name": "items",
|
|
1741
|
+
"type": "{label,value}[]",
|
|
1742
|
+
"desc": ""
|
|
1743
|
+
}
|
|
1744
|
+
],
|
|
1745
|
+
"use": "<UiDescriptions :items=\"about\" />"
|
|
1746
|
+
},
|
|
1747
|
+
{
|
|
1748
|
+
"id": "activity",
|
|
1749
|
+
"title": "Activity",
|
|
1750
|
+
"desc": "User activity feed.",
|
|
1751
|
+
"accepts": [
|
|
1752
|
+
"Timeline"
|
|
1753
|
+
],
|
|
1754
|
+
"props": [
|
|
1755
|
+
{
|
|
1756
|
+
"name": "items",
|
|
1757
|
+
"type": "{title,text?,time}[]",
|
|
1758
|
+
"desc": ""
|
|
1759
|
+
}
|
|
1760
|
+
],
|
|
1761
|
+
"use": "<UiTimeline :items=\"events\" />"
|
|
1762
|
+
},
|
|
1763
|
+
{
|
|
1764
|
+
"id": "plan",
|
|
1765
|
+
"title": "Plan",
|
|
1766
|
+
"desc": "Current plan card and an upgrade button.",
|
|
1767
|
+
"accepts": [
|
|
1768
|
+
"Card",
|
|
1769
|
+
"Badge",
|
|
1770
|
+
"Progress",
|
|
1771
|
+
"Button"
|
|
1772
|
+
],
|
|
1773
|
+
"props": [
|
|
1774
|
+
{
|
|
1775
|
+
"name": "plan",
|
|
1776
|
+
"type": "string",
|
|
1777
|
+
"desc": ""
|
|
1778
|
+
},
|
|
1779
|
+
{
|
|
1780
|
+
"name": "days",
|
|
1781
|
+
"type": "number",
|
|
1782
|
+
"desc": "Days left"
|
|
1783
|
+
}
|
|
1784
|
+
],
|
|
1785
|
+
"use": "<UiCard title=\"Plan\">…</UiCard>"
|
|
1786
|
+
}
|
|
1787
|
+
]
|
|
1788
|
+
},
|
|
1789
|
+
{
|
|
1790
|
+
"key": "form",
|
|
1791
|
+
"route": "form",
|
|
1792
|
+
"label": "Form 8 + 4",
|
|
1793
|
+
"icon": "file-pen",
|
|
1794
|
+
"desc": "Create page: main column 8/12 and side column 4/12, actions at the top right.",
|
|
1795
|
+
"component": "PageForm",
|
|
1796
|
+
"tpl": "TplForm",
|
|
1797
|
+
"shell": true,
|
|
1798
|
+
"slots": [
|
|
1799
|
+
{
|
|
1800
|
+
"id": "header",
|
|
1801
|
+
"title": "Page heading",
|
|
1802
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
1803
|
+
"accepts": [
|
|
1804
|
+
"PageHeader",
|
|
1805
|
+
"Breadcrumbs",
|
|
1806
|
+
"Button",
|
|
1807
|
+
"SegmentedControl"
|
|
1808
|
+
],
|
|
1809
|
+
"props": [
|
|
1810
|
+
{
|
|
1811
|
+
"name": "title",
|
|
1812
|
+
"type": "string",
|
|
1813
|
+
"desc": "H1, up to 60 characters"
|
|
1814
|
+
},
|
|
1815
|
+
{
|
|
1816
|
+
"name": "subtitle",
|
|
1817
|
+
"type": "string?",
|
|
1818
|
+
"desc": "Gray caption below the heading"
|
|
1819
|
+
},
|
|
1820
|
+
{
|
|
1821
|
+
"name": "crumbs",
|
|
1822
|
+
"type": "{label,href?}[]",
|
|
1823
|
+
"desc": "Breadcrumbs"
|
|
1824
|
+
},
|
|
1825
|
+
{
|
|
1826
|
+
"name": "actions",
|
|
1827
|
+
"type": "VNode",
|
|
1828
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
1829
|
+
}
|
|
1830
|
+
],
|
|
1831
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
1832
|
+
},
|
|
1833
|
+
{
|
|
1834
|
+
"id": "main",
|
|
1835
|
+
"title": "Main column",
|
|
1836
|
+
"desc": "Cards: info, photos, options. Fields have labels on top.",
|
|
1837
|
+
"accepts": [
|
|
1838
|
+
"Card",
|
|
1839
|
+
"TextField",
|
|
1840
|
+
"Textarea",
|
|
1841
|
+
"FileUpload"
|
|
1842
|
+
],
|
|
1843
|
+
"props": [
|
|
1844
|
+
{
|
|
1845
|
+
"name": "fields",
|
|
1846
|
+
"type": "Field[]",
|
|
1847
|
+
"desc": ""
|
|
1848
|
+
}
|
|
1849
|
+
],
|
|
1850
|
+
"use": "<UiCard title=\"Hotel information\">…</UiCard>"
|
|
1851
|
+
},
|
|
1852
|
+
{
|
|
1853
|
+
"id": "media",
|
|
1854
|
+
"title": "Photos",
|
|
1855
|
+
"desc": "Dropzone with a dashed border; thumbnail preview.",
|
|
1856
|
+
"accepts": [
|
|
1857
|
+
"FileUpload",
|
|
1858
|
+
"Gallery"
|
|
1859
|
+
],
|
|
1860
|
+
"props": [
|
|
1861
|
+
{
|
|
1862
|
+
"name": "accept",
|
|
1863
|
+
"type": "string",
|
|
1864
|
+
"desc": "image/*"
|
|
1865
|
+
},
|
|
1866
|
+
{
|
|
1867
|
+
"name": "multiple",
|
|
1868
|
+
"type": "boolean",
|
|
1869
|
+
"desc": ""
|
|
1870
|
+
}
|
|
1871
|
+
],
|
|
1872
|
+
"use": "<UiFileUpload title=\"Drop photos\" multiple />"
|
|
1873
|
+
},
|
|
1874
|
+
{
|
|
1875
|
+
"id": "side",
|
|
1876
|
+
"title": "Side column",
|
|
1877
|
+
"desc": "Price and organization: price, discount, status, tags.",
|
|
1878
|
+
"accepts": [
|
|
1879
|
+
"Card",
|
|
1880
|
+
"NumberInput",
|
|
1881
|
+
"Select",
|
|
1882
|
+
"ChipInput"
|
|
1883
|
+
],
|
|
1884
|
+
"props": [
|
|
1885
|
+
{
|
|
1886
|
+
"name": "price",
|
|
1887
|
+
"type": "number",
|
|
1888
|
+
"desc": "SAR"
|
|
1889
|
+
},
|
|
1890
|
+
{
|
|
1891
|
+
"name": "status",
|
|
1892
|
+
"type": "string",
|
|
1893
|
+
"desc": ""
|
|
1894
|
+
}
|
|
1895
|
+
],
|
|
1896
|
+
"use": "<UiNumberInput label=\"Price\" v-model=\"price\" />"
|
|
1897
|
+
},
|
|
1898
|
+
{
|
|
1899
|
+
"id": "actions",
|
|
1900
|
+
"title": "Actions",
|
|
1901
|
+
"desc": "Discard (red tonal), Save draft (gray), Publish (primary).",
|
|
1902
|
+
"accepts": [
|
|
1903
|
+
"Button"
|
|
1904
|
+
],
|
|
1905
|
+
"props": [
|
|
1906
|
+
{
|
|
1907
|
+
"name": "onPublish",
|
|
1908
|
+
"type": "() => void",
|
|
1909
|
+
"desc": ""
|
|
1910
|
+
}
|
|
1911
|
+
],
|
|
1912
|
+
"use": "<UiButton variant=\"primary\">Publish</UiButton>"
|
|
1913
|
+
}
|
|
1914
|
+
]
|
|
1915
|
+
},
|
|
1916
|
+
{
|
|
1917
|
+
"key": "order",
|
|
1918
|
+
"route": "order",
|
|
1919
|
+
"label": "Order / booking",
|
|
1920
|
+
"icon": "receipt",
|
|
1921
|
+
"desc": "Booking details: header with statuses, items table with totals, activity and side cards.",
|
|
1922
|
+
"component": "PageOrder",
|
|
1923
|
+
"tpl": "TplOrder",
|
|
1924
|
+
"shell": true,
|
|
1925
|
+
"slots": [
|
|
1926
|
+
{
|
|
1927
|
+
"id": "header",
|
|
1928
|
+
"title": "Page heading",
|
|
1929
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
1930
|
+
"accepts": [
|
|
1931
|
+
"PageHeader",
|
|
1932
|
+
"Breadcrumbs",
|
|
1933
|
+
"Button",
|
|
1934
|
+
"SegmentedControl"
|
|
1935
|
+
],
|
|
1936
|
+
"props": [
|
|
1937
|
+
{
|
|
1938
|
+
"name": "title",
|
|
1939
|
+
"type": "string",
|
|
1940
|
+
"desc": "H1, up to 60 characters"
|
|
1941
|
+
},
|
|
1942
|
+
{
|
|
1943
|
+
"name": "subtitle",
|
|
1944
|
+
"type": "string?",
|
|
1945
|
+
"desc": "Gray caption below the heading"
|
|
1946
|
+
},
|
|
1947
|
+
{
|
|
1948
|
+
"name": "crumbs",
|
|
1949
|
+
"type": "{label,href?}[]",
|
|
1950
|
+
"desc": "Breadcrumbs"
|
|
1951
|
+
},
|
|
1952
|
+
{
|
|
1953
|
+
"name": "actions",
|
|
1954
|
+
"type": "VNode",
|
|
1955
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
1956
|
+
}
|
|
1957
|
+
],
|
|
1958
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
1959
|
+
},
|
|
1960
|
+
{
|
|
1961
|
+
"id": "status",
|
|
1962
|
+
"title": "Statuses",
|
|
1963
|
+
"desc": "Payment and fulfillment chips next to the number.",
|
|
1964
|
+
"accepts": [
|
|
1965
|
+
"Chip"
|
|
1966
|
+
],
|
|
1967
|
+
"props": [
|
|
1968
|
+
{
|
|
1969
|
+
"name": "tone",
|
|
1970
|
+
"type": "success|warning|danger",
|
|
1971
|
+
"desc": ""
|
|
1972
|
+
}
|
|
1973
|
+
],
|
|
1974
|
+
"use": "<UiChip tone=\"success\" pill>Paid</UiChip>"
|
|
1975
|
+
},
|
|
1976
|
+
{
|
|
1977
|
+
"id": "items",
|
|
1978
|
+
"title": "Items",
|
|
1979
|
+
"desc": "Services table with totals on the right.",
|
|
1980
|
+
"accepts": [
|
|
1981
|
+
"DataTable"
|
|
1982
|
+
],
|
|
1983
|
+
"props": [
|
|
1984
|
+
{
|
|
1985
|
+
"name": "rows",
|
|
1986
|
+
"type": "{service,qty,price}[]",
|
|
1987
|
+
"desc": ""
|
|
1988
|
+
}
|
|
1989
|
+
],
|
|
1990
|
+
"use": "<UiDataTable :columns=\"cols\" :rows=\"items\" />"
|
|
1991
|
+
},
|
|
1992
|
+
{
|
|
1993
|
+
"id": "shipping",
|
|
1994
|
+
"title": "Activity",
|
|
1995
|
+
"desc": "Vertical line with dots and attachments.",
|
|
1996
|
+
"accepts": [
|
|
1997
|
+
"Timeline"
|
|
1998
|
+
],
|
|
1999
|
+
"props": [
|
|
2000
|
+
{
|
|
2001
|
+
"name": "items",
|
|
2002
|
+
"type": "Event[]",
|
|
2003
|
+
"desc": ""
|
|
2004
|
+
}
|
|
2005
|
+
],
|
|
2006
|
+
"use": "<UiTimeline :items=\"log\" />"
|
|
2007
|
+
},
|
|
2008
|
+
{
|
|
2009
|
+
"id": "side",
|
|
2010
|
+
"title": "Side cards",
|
|
2011
|
+
"desc": "Customer, address, payment with a \"Change\" button.",
|
|
2012
|
+
"accepts": [
|
|
2013
|
+
"UserCell",
|
|
2014
|
+
"Descriptions",
|
|
2015
|
+
"Button"
|
|
2016
|
+
],
|
|
2017
|
+
"props": [
|
|
2018
|
+
{
|
|
2019
|
+
"name": "onEdit",
|
|
2020
|
+
"type": "() => void",
|
|
2021
|
+
"desc": "Opens a dialog"
|
|
2022
|
+
}
|
|
2023
|
+
],
|
|
2024
|
+
"use": "<UiCard title=\"Customer\">…</UiCard>"
|
|
2025
|
+
}
|
|
2026
|
+
]
|
|
2027
|
+
},
|
|
2028
|
+
{
|
|
2029
|
+
"key": "auth",
|
|
2030
|
+
"route": "auth",
|
|
2031
|
+
"label": "Authentication (6)",
|
|
2032
|
+
"icon": "lock-keyhole",
|
|
2033
|
+
"desc": "Six sign-in screens in two layouts: centered card and split with a side panel. Always dark theme.",
|
|
2034
|
+
"component": "PageAuth",
|
|
2035
|
+
"tpl": "TplAuth",
|
|
2036
|
+
"shell": false,
|
|
2037
|
+
"slots": [
|
|
2038
|
+
{
|
|
2039
|
+
"id": "aside",
|
|
2040
|
+
"title": "Panel (split)",
|
|
2041
|
+
"desc": "Left half: brand, large text, illustration. Hidden on screens narrower than 820 px.",
|
|
2042
|
+
"accepts": [
|
|
2043
|
+
"AuthSplit",
|
|
2044
|
+
"IconTile"
|
|
2045
|
+
],
|
|
2046
|
+
"props": [
|
|
2047
|
+
{
|
|
2048
|
+
"name": "aside",
|
|
2049
|
+
"type": "VNode",
|
|
2050
|
+
"desc": ""
|
|
2051
|
+
}
|
|
2052
|
+
],
|
|
2053
|
+
"use": "<UiAuthSplit><template #aside>…</template></UiAuthSplit>"
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
"id": "logo",
|
|
2057
|
+
"title": "Logo",
|
|
2058
|
+
"desc": "Above the heading.",
|
|
2059
|
+
"accepts": [
|
|
2060
|
+
"img"
|
|
2061
|
+
],
|
|
2062
|
+
"props": [
|
|
2063
|
+
{
|
|
2064
|
+
"name": "logo",
|
|
2065
|
+
"type": "VNode",
|
|
2066
|
+
"desc": ""
|
|
2067
|
+
}
|
|
2068
|
+
],
|
|
2069
|
+
"use": "<img src=\"/logo.svg\" />"
|
|
2070
|
+
},
|
|
2071
|
+
{
|
|
2072
|
+
"id": "form",
|
|
2073
|
+
"title": "Form",
|
|
2074
|
+
"desc": "Full-width fields and primary button. Errors appear below the field.",
|
|
2075
|
+
"accepts": [
|
|
2076
|
+
"TextField",
|
|
2077
|
+
"PasswordInput",
|
|
2078
|
+
"CodeInput",
|
|
2079
|
+
"Button"
|
|
2080
|
+
],
|
|
2081
|
+
"props": [
|
|
2082
|
+
{
|
|
2083
|
+
"name": "variant",
|
|
2084
|
+
"type": "login|register|verify|forgot|reset|otp",
|
|
2085
|
+
"desc": ""
|
|
2086
|
+
},
|
|
2087
|
+
{
|
|
2088
|
+
"name": "error",
|
|
2089
|
+
"type": "string?",
|
|
2090
|
+
"desc": ""
|
|
2091
|
+
}
|
|
2092
|
+
],
|
|
2093
|
+
"use": "<UiLoginForm @submit=\"signIn\" />"
|
|
2094
|
+
},
|
|
2095
|
+
{
|
|
2096
|
+
"id": "footer",
|
|
2097
|
+
"title": "Bottom links",
|
|
2098
|
+
"desc": "Navigation between screens: \"Create account\", \"Back to login\", \"Resend\".",
|
|
2099
|
+
"accepts": [
|
|
2100
|
+
"a",
|
|
2101
|
+
"Button variant=\"text\""
|
|
2102
|
+
],
|
|
2103
|
+
"props": [
|
|
2104
|
+
{
|
|
2105
|
+
"name": "links",
|
|
2106
|
+
"type": "{label,to}[]",
|
|
2107
|
+
"desc": ""
|
|
2108
|
+
}
|
|
2109
|
+
],
|
|
2110
|
+
"use": "<a href=\"/register\">Create an account</a>"
|
|
2111
|
+
}
|
|
2112
|
+
]
|
|
2113
|
+
},
|
|
2114
|
+
{
|
|
2115
|
+
"key": "status",
|
|
2116
|
+
"route": "status",
|
|
2117
|
+
"label": "Utility pages (4)",
|
|
2118
|
+
"icon": "octagon-alert",
|
|
2119
|
+
"desc": "404, 401, maintenance, coming soon: centered text, one button. Always dark theme.",
|
|
2120
|
+
"component": "PageStatus",
|
|
2121
|
+
"tpl": "TplStatus",
|
|
2122
|
+
"shell": false,
|
|
2123
|
+
"slots": [
|
|
2124
|
+
{
|
|
2125
|
+
"id": "code",
|
|
2126
|
+
"title": "Code / icon",
|
|
2127
|
+
"desc": "Large 404 / 401 number in the brand color or an icon in a tile.",
|
|
2128
|
+
"accepts": [
|
|
2129
|
+
"StatusPage",
|
|
2130
|
+
"IconTile"
|
|
2131
|
+
],
|
|
2132
|
+
"props": [
|
|
2133
|
+
{
|
|
2134
|
+
"name": "kind",
|
|
2135
|
+
"type": "404|401|maintenance|soon",
|
|
2136
|
+
"desc": ""
|
|
2137
|
+
}
|
|
2138
|
+
],
|
|
2139
|
+
"use": "<UiStatusPage kind=\"404\" />"
|
|
2140
|
+
},
|
|
2141
|
+
{
|
|
2142
|
+
"id": "message",
|
|
2143
|
+
"title": "Message",
|
|
2144
|
+
"desc": "24 px heading and a single line of description.",
|
|
2145
|
+
"accepts": [
|
|
2146
|
+
"Text"
|
|
2147
|
+
],
|
|
2148
|
+
"props": [
|
|
2149
|
+
{
|
|
2150
|
+
"name": "title",
|
|
2151
|
+
"type": "string",
|
|
2152
|
+
"desc": ""
|
|
2153
|
+
},
|
|
2154
|
+
{
|
|
2155
|
+
"name": "description",
|
|
2156
|
+
"type": "string",
|
|
2157
|
+
"desc": ""
|
|
2158
|
+
}
|
|
2159
|
+
],
|
|
2160
|
+
"use": "<UiStatusPage title=\"…\" description=\"…\" />"
|
|
2161
|
+
},
|
|
2162
|
+
{
|
|
2163
|
+
"id": "action",
|
|
2164
|
+
"title": "Action",
|
|
2165
|
+
"desc": "One primary button; on \"coming soon\", email and \"Notify me\".",
|
|
2166
|
+
"accepts": [
|
|
2167
|
+
"Button",
|
|
2168
|
+
"TextField"
|
|
2169
|
+
],
|
|
2170
|
+
"props": [
|
|
2171
|
+
{
|
|
2172
|
+
"name": "onAction",
|
|
2173
|
+
"type": "() => void",
|
|
2174
|
+
"desc": ""
|
|
2175
|
+
}
|
|
2176
|
+
],
|
|
2177
|
+
"use": "<UiButton variant=\"primary\">Back to home</UiButton>"
|
|
2178
|
+
}
|
|
2179
|
+
]
|
|
2180
|
+
},
|
|
2181
|
+
{
|
|
2182
|
+
"key": "account",
|
|
2183
|
+
"route": "account",
|
|
2184
|
+
"label": "Account settings",
|
|
2185
|
+
"icon": "settings-2",
|
|
2186
|
+
"desc": "Pill tabs on top: account, security, payment, notifications.",
|
|
2187
|
+
"component": "PageAccount",
|
|
2188
|
+
"tpl": "TplAccount",
|
|
2189
|
+
"shell": true,
|
|
2190
|
+
"slots": [
|
|
2191
|
+
{
|
|
2192
|
+
"id": "header",
|
|
2193
|
+
"title": "Page heading",
|
|
2194
|
+
"desc": "Breadcrumbs, heading, caption and action buttons on the right.",
|
|
2195
|
+
"accepts": [
|
|
2196
|
+
"PageHeader",
|
|
2197
|
+
"Breadcrumbs",
|
|
2198
|
+
"Button",
|
|
2199
|
+
"SegmentedControl"
|
|
2200
|
+
],
|
|
2201
|
+
"props": [
|
|
2202
|
+
{
|
|
2203
|
+
"name": "title",
|
|
2204
|
+
"type": "string",
|
|
2205
|
+
"desc": "H1, up to 60 characters"
|
|
2206
|
+
},
|
|
2207
|
+
{
|
|
2208
|
+
"name": "subtitle",
|
|
2209
|
+
"type": "string?",
|
|
2210
|
+
"desc": "Gray caption below the heading"
|
|
2211
|
+
},
|
|
2212
|
+
{
|
|
2213
|
+
"name": "crumbs",
|
|
2214
|
+
"type": "{label,href?}[]",
|
|
2215
|
+
"desc": "Breadcrumbs"
|
|
2216
|
+
},
|
|
2217
|
+
{
|
|
2218
|
+
"name": "actions",
|
|
2219
|
+
"type": "VNode",
|
|
2220
|
+
"desc": "Buttons on the right; wrap below on a narrow screen"
|
|
2221
|
+
}
|
|
2222
|
+
],
|
|
2223
|
+
"use": "<UiPageHeader title=\"Dashboard\" :crumbs=\"crumbs\">\n <template #actions><UiButton variant=\"primary\">Export</UiButton></template>\n</UiPageHeader>"
|
|
2224
|
+
},
|
|
2225
|
+
{
|
|
2226
|
+
"id": "tabs",
|
|
2227
|
+
"title": "Tabs",
|
|
2228
|
+
"desc": "Five sections. Each has its own URL.",
|
|
2229
|
+
"accepts": [
|
|
2230
|
+
"PillTabs"
|
|
2231
|
+
],
|
|
2232
|
+
"props": [
|
|
2233
|
+
{
|
|
2234
|
+
"name": "value",
|
|
2235
|
+
"type": "account|security|billing|notifications",
|
|
2236
|
+
"desc": ""
|
|
2237
|
+
}
|
|
2238
|
+
],
|
|
2239
|
+
"use": "<UiPillTabs v-model=\"tab\" :items=\"tabs\" />"
|
|
2240
|
+
},
|
|
2241
|
+
{
|
|
2242
|
+
"id": "panel",
|
|
2243
|
+
"title": "Section panel",
|
|
2244
|
+
"desc": "Section cards; switching tabs replaces the content.",
|
|
2245
|
+
"accepts": [
|
|
2246
|
+
"Card",
|
|
2247
|
+
"SettingsSection",
|
|
2248
|
+
"Switch",
|
|
2249
|
+
"TextField"
|
|
2250
|
+
],
|
|
2251
|
+
"props": [
|
|
2252
|
+
{
|
|
2253
|
+
"name": "tab",
|
|
2254
|
+
"type": "string",
|
|
2255
|
+
"desc": ""
|
|
2256
|
+
}
|
|
2257
|
+
],
|
|
2258
|
+
"use": "<UiSettingsSection title=\"Profile\">…</UiSettingsSection>"
|
|
2259
|
+
}
|
|
2260
|
+
]
|
|
2261
|
+
},
|
|
2262
|
+
{
|
|
2263
|
+
"key": "faq",
|
|
2264
|
+
"route": "faq",
|
|
2265
|
+
"label": "FAQ",
|
|
2266
|
+
"icon": "circle-help",
|
|
2267
|
+
"desc": "Help page: search, categories on the left, accordion on the right and a \"still have questions\" block.",
|
|
2268
|
+
"component": "PageFaq",
|
|
2269
|
+
"tpl": "TplFaq",
|
|
2270
|
+
"shell": true,
|
|
2271
|
+
"slots": [
|
|
2272
|
+
{
|
|
2273
|
+
"id": "search",
|
|
2274
|
+
"title": "Search",
|
|
2275
|
+
"desc": "Large search field for questions.",
|
|
2276
|
+
"accepts": [
|
|
2277
|
+
"SearchInput"
|
|
2278
|
+
],
|
|
2279
|
+
"props": [
|
|
2280
|
+
{
|
|
2281
|
+
"name": "query",
|
|
2282
|
+
"type": "string",
|
|
2283
|
+
"desc": ""
|
|
2284
|
+
}
|
|
2285
|
+
],
|
|
2286
|
+
"use": "<UiSearchInput v-model=\"q\" />"
|
|
2287
|
+
},
|
|
2288
|
+
{
|
|
2289
|
+
"id": "cats",
|
|
2290
|
+
"title": "Categories",
|
|
2291
|
+
"desc": "Vertical pill tabs. The selected tab replaces the accordion.",
|
|
2292
|
+
"accepts": [
|
|
2293
|
+
"PillTabs"
|
|
2294
|
+
],
|
|
2295
|
+
"props": [
|
|
2296
|
+
{
|
|
2297
|
+
"name": "items",
|
|
2298
|
+
"type": "{value,icon,label}[]",
|
|
2299
|
+
"desc": ""
|
|
2300
|
+
},
|
|
2301
|
+
{
|
|
2302
|
+
"name": "vertical",
|
|
2303
|
+
"type": "boolean",
|
|
2304
|
+
"desc": "true"
|
|
2305
|
+
}
|
|
2306
|
+
],
|
|
2307
|
+
"use": "<UiPillTabs vertical v-model=\"cat\" :items=\"cats\" />"
|
|
2308
|
+
},
|
|
2309
|
+
{
|
|
2310
|
+
"id": "answers",
|
|
2311
|
+
"title": "Questions",
|
|
2312
|
+
"desc": "Accordion with one item expanded.",
|
|
2313
|
+
"accepts": [
|
|
2314
|
+
"Accordion"
|
|
2315
|
+
],
|
|
2316
|
+
"props": [
|
|
2317
|
+
{
|
|
2318
|
+
"name": "items",
|
|
2319
|
+
"type": "{id,title,body}[]",
|
|
2320
|
+
"desc": ""
|
|
2321
|
+
}
|
|
2322
|
+
],
|
|
2323
|
+
"use": "<UiAccordion :items=\"faq\" />"
|
|
2324
|
+
},
|
|
2325
|
+
{
|
|
2326
|
+
"id": "contact",
|
|
2327
|
+
"title": "Still have questions",
|
|
2328
|
+
"desc": "Two contact cards: Telegram and email.",
|
|
2329
|
+
"accepts": [
|
|
2330
|
+
"Card",
|
|
2331
|
+
"IconTile",
|
|
2332
|
+
"Button"
|
|
2333
|
+
],
|
|
2334
|
+
"props": [
|
|
2335
|
+
{
|
|
2336
|
+
"name": "channels",
|
|
2337
|
+
"type": "{icon,title,text}[]",
|
|
2338
|
+
"desc": ""
|
|
2339
|
+
}
|
|
2340
|
+
],
|
|
2341
|
+
"use": "<UiCard title=\"Still have questions?\">…</UiCard>"
|
|
2342
|
+
}
|
|
2343
|
+
]
|
|
2344
|
+
},
|
|
2345
|
+
{
|
|
2346
|
+
"key": "pricing",
|
|
2347
|
+
"route": "pricing",
|
|
2348
|
+
"label": "Pricing",
|
|
2349
|
+
"icon": "badge-dollar-sign",
|
|
2350
|
+
"desc": "Month/year switch, three pricing cards and an FAQ.",
|
|
2351
|
+
"component": "PagePricing",
|
|
2352
|
+
"tpl": "TplPricing",
|
|
2353
|
+
"shell": true,
|
|
2354
|
+
"slots": [
|
|
2355
|
+
{
|
|
2356
|
+
"id": "toggle",
|
|
2357
|
+
"title": "Period",
|
|
2358
|
+
"desc": "Monthly / Annually switch with a \"Save up to 10%\" badge.",
|
|
2359
|
+
"accepts": [
|
|
2360
|
+
"Switch",
|
|
2361
|
+
"Chip"
|
|
2362
|
+
],
|
|
2363
|
+
"props": [
|
|
2364
|
+
{
|
|
2365
|
+
"name": "annual",
|
|
2366
|
+
"type": "boolean",
|
|
2367
|
+
"desc": ""
|
|
2368
|
+
}
|
|
2369
|
+
],
|
|
2370
|
+
"use": "<UiSwitch v-model=\"annual\" label=\"Annually\" />"
|
|
2371
|
+
},
|
|
2372
|
+
{
|
|
2373
|
+
"id": "plans",
|
|
2374
|
+
"title": "Pricing",
|
|
2375
|
+
"desc": "Three cards; the popular one has a brand border and a badge.",
|
|
2376
|
+
"accepts": [
|
|
2377
|
+
"PricingCard"
|
|
2378
|
+
],
|
|
2379
|
+
"props": [
|
|
2380
|
+
{
|
|
2381
|
+
"name": "name",
|
|
2382
|
+
"type": "string",
|
|
2383
|
+
"desc": ""
|
|
2384
|
+
},
|
|
2385
|
+
{
|
|
2386
|
+
"name": "price",
|
|
2387
|
+
"type": "string",
|
|
2388
|
+
"desc": ""
|
|
2389
|
+
},
|
|
2390
|
+
{
|
|
2391
|
+
"name": "features",
|
|
2392
|
+
"type": "string[]",
|
|
2393
|
+
"desc": ""
|
|
2394
|
+
},
|
|
2395
|
+
{
|
|
2396
|
+
"name": "featured",
|
|
2397
|
+
"type": "boolean",
|
|
2398
|
+
"desc": ""
|
|
2399
|
+
}
|
|
2400
|
+
],
|
|
2401
|
+
"use": "<UiPricingCard name=\"Plus\" price=\"$4.99\" featured />"
|
|
2402
|
+
},
|
|
2403
|
+
{
|
|
2404
|
+
"id": "faq",
|
|
2405
|
+
"title": "FAQ",
|
|
2406
|
+
"desc": "Accordion with 3-6 questions.",
|
|
2407
|
+
"accepts": [
|
|
2408
|
+
"Accordion"
|
|
2409
|
+
],
|
|
2410
|
+
"props": [
|
|
2411
|
+
{
|
|
2412
|
+
"name": "items",
|
|
2413
|
+
"type": "{id,title,body}[]",
|
|
2414
|
+
"desc": ""
|
|
2415
|
+
}
|
|
2416
|
+
],
|
|
2417
|
+
"use": "<UiAccordion :items=\"faq\" />"
|
|
2418
|
+
}
|
|
2419
|
+
]
|
|
2420
|
+
}
|
|
2421
|
+
]
|
|
2422
|
+
}
|