@quvel-kit/core 1.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.
Files changed (285) hide show
  1. package/README.md +670 -0
  2. package/dist/auth/boot/defineAuthGuard.d.ts +54 -0
  3. package/dist/auth/boot/defineAuthGuard.d.ts.map +1 -0
  4. package/dist/auth/boot/defineAuthGuard.js +72 -0
  5. package/dist/auth/enums/AuthStatusEnum.d.ts +13 -0
  6. package/dist/auth/enums/AuthStatusEnum.d.ts.map +1 -0
  7. package/dist/auth/enums/AuthStatusEnum.js +13 -0
  8. package/dist/auth/index.d.ts +13 -0
  9. package/dist/auth/index.d.ts.map +1 -0
  10. package/dist/auth/index.js +13 -0
  11. package/dist/auth/services/AuthGuard.d.ts +58 -0
  12. package/dist/auth/services/AuthGuard.d.ts.map +1 -0
  13. package/dist/auth/services/AuthGuard.js +51 -0
  14. package/dist/auth/services/AuthService.d.ts +52 -0
  15. package/dist/auth/services/AuthService.d.ts.map +1 -0
  16. package/dist/auth/services/AuthService.js +67 -0
  17. package/dist/auth/services/PasswordResetService.d.ts +34 -0
  18. package/dist/auth/services/PasswordResetService.d.ts.map +1 -0
  19. package/dist/auth/services/PasswordResetService.js +45 -0
  20. package/dist/auth/services/TwoFactorChallengeService.d.ts +22 -0
  21. package/dist/auth/services/TwoFactorChallengeService.d.ts.map +1 -0
  22. package/dist/auth/services/TwoFactorChallengeService.js +29 -0
  23. package/dist/auth/services/TwoFactorService.d.ts +64 -0
  24. package/dist/auth/services/TwoFactorService.d.ts.map +1 -0
  25. package/dist/auth/services/TwoFactorService.js +68 -0
  26. package/dist/auth/services/index.d.ts +8 -0
  27. package/dist/auth/services/index.d.ts.map +1 -0
  28. package/dist/auth/services/index.js +5 -0
  29. package/dist/auth/types/auth-meta.d.ts +54 -0
  30. package/dist/auth/types/auth-meta.d.ts.map +1 -0
  31. package/dist/auth/types/auth-meta.js +6 -0
  32. package/dist/auth/types/index.d.ts +5 -0
  33. package/dist/auth/types/index.d.ts.map +1 -0
  34. package/dist/auth/types/index.js +4 -0
  35. package/dist/auth/utils/auth-meta.d.ts +75 -0
  36. package/dist/auth/utils/auth-meta.d.ts.map +1 -0
  37. package/dist/auth/utils/auth-meta.js +93 -0
  38. package/dist/boot/quvel.d.ts +26 -0
  39. package/dist/boot/quvel.d.ts.map +1 -0
  40. package/dist/boot/quvel.js +38 -0
  41. package/dist/build/index.d.ts +9 -0
  42. package/dist/build/index.d.ts.map +1 -0
  43. package/dist/build/index.js +8 -0
  44. package/dist/build/loadEnv.d.ts +14 -0
  45. package/dist/build/loadEnv.d.ts.map +1 -0
  46. package/dist/build/loadEnv.js +33 -0
  47. package/dist/build/quasarConfig.d.ts +67 -0
  48. package/dist/build/quasarConfig.d.ts.map +1 -0
  49. package/dist/build/quasarConfig.js +126 -0
  50. package/dist/components/Common/TaskErrors.vue +47 -0
  51. package/dist/components/Inputs/BaseInput.vue +88 -0
  52. package/dist/components/Misc/ClientOnly.vue +22 -0
  53. package/dist/components/Transitions/FadeInOut.vue +9 -0
  54. package/dist/components/Transitions/SlowExpand.vue +13 -0
  55. package/dist/components/WebSocketChannelManager.vue +634 -0
  56. package/dist/components/index.d.ts +12 -0
  57. package/dist/components/index.d.ts.map +1 -0
  58. package/dist/components/index.js +16 -0
  59. package/dist/composables/index.d.ts +19 -0
  60. package/dist/composables/index.d.ts.map +1 -0
  61. package/dist/composables/index.js +16 -0
  62. package/dist/composables/useClient.d.ts +16 -0
  63. package/dist/composables/useClient.d.ts.map +1 -0
  64. package/dist/composables/useClient.js +28 -0
  65. package/dist/composables/useMetaConfig.d.ts +14 -0
  66. package/dist/composables/useMetaConfig.d.ts.map +1 -0
  67. package/dist/composables/useMetaConfig.js +77 -0
  68. package/dist/composables/useQueryMessageHandler.d.ts +44 -0
  69. package/dist/composables/useQueryMessageHandler.d.ts.map +1 -0
  70. package/dist/composables/useQueryMessageHandler.js +74 -0
  71. package/dist/composables/useQuvel.d.ts +15 -0
  72. package/dist/composables/useQuvel.d.ts.map +1 -0
  73. package/dist/composables/useQuvel.js +38 -0
  74. package/dist/composables/useRecaptcha.d.ts +35 -0
  75. package/dist/composables/useRecaptcha.d.ts.map +1 -0
  76. package/dist/composables/useRecaptcha.js +87 -0
  77. package/dist/composables/useScopedService.d.ts +18 -0
  78. package/dist/composables/useScopedService.d.ts.map +1 -0
  79. package/dist/composables/useScopedService.js +25 -0
  80. package/dist/composables/useScript.d.ts +25 -0
  81. package/dist/composables/useScript.d.ts.map +1 -0
  82. package/dist/composables/useScript.js +106 -0
  83. package/dist/composables/useUrlQueryHandler.d.ts +38 -0
  84. package/dist/composables/useUrlQueryHandler.d.ts.map +1 -0
  85. package/dist/composables/useUrlQueryHandler.js +76 -0
  86. package/dist/composables/useWebSockets.d.ts +18 -0
  87. package/dist/composables/useWebSockets.d.ts.map +1 -0
  88. package/dist/composables/useWebSockets.js +55 -0
  89. package/dist/composables/useWindowEvent.d.ts +16 -0
  90. package/dist/composables/useWindowEvent.d.ts.map +1 -0
  91. package/dist/composables/useWindowEvent.js +27 -0
  92. package/dist/composables/useXsrf.d.ts +29 -0
  93. package/dist/composables/useXsrf.d.ts.map +1 -0
  94. package/dist/composables/useXsrf.js +59 -0
  95. package/dist/config/QuasarConfigBuilder.d.ts +100 -0
  96. package/dist/config/QuasarConfigBuilder.d.ts.map +1 -0
  97. package/dist/config/QuasarConfigBuilder.js +98 -0
  98. package/dist/config/i18n.d.ts +23 -0
  99. package/dist/config/i18n.d.ts.map +1 -0
  100. package/dist/config/i18n.js +43 -0
  101. package/dist/config/index.d.ts +8 -0
  102. package/dist/config/index.d.ts.map +1 -0
  103. package/dist/config/index.js +7 -0
  104. package/dist/config/moduleTransformer.d.ts +18 -0
  105. package/dist/config/moduleTransformer.d.ts.map +1 -0
  106. package/dist/config/moduleTransformer.js +76 -0
  107. package/dist/config/quvel.d.ts +40 -0
  108. package/dist/config/quvel.d.ts.map +1 -0
  109. package/dist/config/quvel.js +59 -0
  110. package/dist/config/quvel.types.d.ts +59 -0
  111. package/dist/config/quvel.types.d.ts.map +1 -0
  112. package/dist/config/quvel.types.js +6 -0
  113. package/dist/container/ServiceContainer.d.ts +107 -0
  114. package/dist/container/ServiceContainer.d.ts.map +1 -0
  115. package/dist/container/ServiceContainer.js +201 -0
  116. package/dist/container/types/vue.d.ts +9 -0
  117. package/dist/container/types.d.ts +81 -0
  118. package/dist/container/types.d.ts.map +1 -0
  119. package/dist/container/types.js +1 -0
  120. package/dist/i18n/en-US/common.d.ts +19 -0
  121. package/dist/i18n/en-US/common.d.ts.map +1 -0
  122. package/dist/i18n/en-US/common.js +17 -0
  123. package/dist/i18n/en-US/index.d.ts +21 -0
  124. package/dist/i18n/en-US/index.d.ts.map +1 -0
  125. package/dist/i18n/en-US/index.js +4 -0
  126. package/dist/i18n/es-MX/common.d.ts +19 -0
  127. package/dist/i18n/es-MX/common.d.ts.map +1 -0
  128. package/dist/i18n/es-MX/common.js +17 -0
  129. package/dist/i18n/es-MX/index.d.ts +21 -0
  130. package/dist/i18n/es-MX/index.d.ts.map +1 -0
  131. package/dist/i18n/es-MX/index.js +4 -0
  132. package/dist/index.d.ts +54 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +67 -0
  135. package/dist/models/User.d.ts +32 -0
  136. package/dist/models/User.d.ts.map +1 -0
  137. package/dist/models/User.js +48 -0
  138. package/dist/module.d.ts +21 -0
  139. package/dist/module.d.ts.map +1 -0
  140. package/dist/module.js +45 -0
  141. package/dist/modules/helpers.d.ts +30 -0
  142. package/dist/modules/helpers.d.ts.map +1 -0
  143. package/dist/modules/helpers.js +45 -0
  144. package/dist/modules/index.d.ts +8 -0
  145. package/dist/modules/index.d.ts.map +1 -0
  146. package/dist/modules/index.js +6 -0
  147. package/dist/modules/types.d.ts +141 -0
  148. package/dist/modules/types.d.ts.map +1 -0
  149. package/dist/modules/types.js +7 -0
  150. package/dist/pages/ErrorNotFound.vue +300 -0
  151. package/dist/pages/index.d.ts +7 -0
  152. package/dist/pages/index.d.ts.map +1 -0
  153. package/dist/pages/index.js +6 -0
  154. package/dist/services/ApiService.d.ts +90 -0
  155. package/dist/services/ApiService.d.ts.map +1 -0
  156. package/dist/services/ApiService.js +159 -0
  157. package/dist/services/I18nService.d.ts +67 -0
  158. package/dist/services/I18nService.d.ts.map +1 -0
  159. package/dist/services/I18nService.js +92 -0
  160. package/dist/services/LogService.d.ts +31 -0
  161. package/dist/services/LogService.d.ts.map +1 -0
  162. package/dist/services/LogService.js +49 -0
  163. package/dist/services/Service.d.ts +10 -0
  164. package/dist/services/Service.d.ts.map +1 -0
  165. package/dist/services/Service.js +8 -0
  166. package/dist/services/TaskService.d.ts +64 -0
  167. package/dist/services/TaskService.d.ts.map +1 -0
  168. package/dist/services/TaskService.js +188 -0
  169. package/dist/services/ThemeService.d.ts +28 -0
  170. package/dist/services/ThemeService.d.ts.map +1 -0
  171. package/dist/services/ThemeService.js +77 -0
  172. package/dist/services/ValidationService.d.ts +55 -0
  173. package/dist/services/ValidationService.d.ts.map +1 -0
  174. package/dist/services/ValidationService.js +81 -0
  175. package/dist/services/WebSocketService.d.ts +59 -0
  176. package/dist/services/WebSocketService.d.ts.map +1 -0
  177. package/dist/services/WebSocketService.js +148 -0
  178. package/dist/services/logger/BaseLogger.d.ts +35 -0
  179. package/dist/services/logger/BaseLogger.d.ts.map +1 -0
  180. package/dist/services/logger/BaseLogger.js +66 -0
  181. package/dist/services/logger/ConsoleLogger.d.ts +21 -0
  182. package/dist/services/logger/ConsoleLogger.d.ts.map +1 -0
  183. package/dist/services/logger/ConsoleLogger.js +60 -0
  184. package/dist/services/logger/NullLogger.d.ts +10 -0
  185. package/dist/services/logger/NullLogger.d.ts.map +1 -0
  186. package/dist/services/logger/NullLogger.js +10 -0
  187. package/dist/stores/plugins/serviceContainer.d.ts +10 -0
  188. package/dist/stores/plugins/serviceContainer.d.ts.map +1 -0
  189. package/dist/stores/plugins/serviceContainer.js +14 -0
  190. package/dist/stores/sessionStore.d.ts +71 -0
  191. package/dist/stores/sessionStore.d.ts.map +1 -0
  192. package/dist/stores/sessionStore.js +125 -0
  193. package/dist/types/app.types.d.ts +202 -0
  194. package/dist/types/app.types.d.ts.map +1 -0
  195. package/dist/types/app.types.js +6 -0
  196. package/dist/types/config.types.d.ts +2 -0
  197. package/dist/types/config.types.d.ts.map +1 -0
  198. package/dist/types/config.types.js +1 -0
  199. package/dist/types/global.d.ts +33 -0
  200. package/dist/types/i18n.types.d.ts +21 -0
  201. package/dist/types/i18n.types.d.ts.map +1 -0
  202. package/dist/types/i18n.types.js +6 -0
  203. package/dist/types/laravel.types.d.ts +167 -0
  204. package/dist/types/laravel.types.d.ts.map +1 -0
  205. package/dist/types/laravel.types.js +6 -0
  206. package/dist/types/logging.types.d.ts +81 -0
  207. package/dist/types/logging.types.d.ts.map +1 -0
  208. package/dist/types/logging.types.js +22 -0
  209. package/dist/types/pinia.d.ts +24 -0
  210. package/dist/types/scripts.types.d.ts +31 -0
  211. package/dist/types/scripts.types.d.ts.map +1 -0
  212. package/dist/types/scripts.types.js +6 -0
  213. package/dist/types/ssr.d.ts +11 -0
  214. package/dist/types/task.types.d.ts +121 -0
  215. package/dist/types/task.types.d.ts.map +1 -0
  216. package/dist/types/task.types.js +7 -0
  217. package/dist/types/theme.types.d.ts +13 -0
  218. package/dist/types/theme.types.d.ts.map +1 -0
  219. package/dist/types/theme.types.js +17 -0
  220. package/dist/types/user.types.d.ts +24 -0
  221. package/dist/types/user.types.d.ts.map +1 -0
  222. package/dist/types/user.types.js +1 -0
  223. package/dist/types/vue-shim.d.ts +11 -0
  224. package/dist/types/websocket.types.d.ts +62 -0
  225. package/dist/types/websocket.types.d.ts.map +1 -0
  226. package/dist/types/websocket.types.js +6 -0
  227. package/dist/utils/apiInterceptors.d.ts +76 -0
  228. package/dist/utils/apiInterceptors.d.ts.map +1 -0
  229. package/dist/utils/apiInterceptors.js +149 -0
  230. package/dist/utils/assets.d.ts +40 -0
  231. package/dist/utils/assets.d.ts.map +1 -0
  232. package/dist/utils/assets.js +340 -0
  233. package/dist/utils/axios.d.ts +19 -0
  234. package/dist/utils/axios.d.ts.map +1 -0
  235. package/dist/utils/axios.js +113 -0
  236. package/dist/utils/config.d.ts +16 -0
  237. package/dist/utils/config.d.ts.map +1 -0
  238. package/dist/utils/config.js +48 -0
  239. package/dist/utils/container.d.ts +12 -0
  240. package/dist/utils/container.d.ts.map +1 -0
  241. package/dist/utils/container.js +11 -0
  242. package/dist/utils/deepMerge.d.ts +28 -0
  243. package/dist/utils/deepMerge.d.ts.map +1 -0
  244. package/dist/utils/deepMerge.js +59 -0
  245. package/dist/utils/envConfig.d.ts +73 -0
  246. package/dist/utils/envConfig.d.ts.map +1 -0
  247. package/dist/utils/envConfig.js +161 -0
  248. package/dist/utils/error.d.ts +44 -0
  249. package/dist/utils/error.d.ts.map +1 -0
  250. package/dist/utils/error.js +67 -0
  251. package/dist/utils/headers.d.ts +36 -0
  252. package/dist/utils/headers.d.ts.map +1 -0
  253. package/dist/utils/headers.js +54 -0
  254. package/dist/utils/i18n.d.ts +26 -0
  255. package/dist/utils/i18n.d.ts.map +1 -0
  256. package/dist/utils/i18n.js +56 -0
  257. package/dist/utils/index.d.ts +14 -0
  258. package/dist/utils/index.d.ts.map +1 -0
  259. package/dist/utils/index.js +13 -0
  260. package/dist/utils/loading.d.ts +29 -0
  261. package/dist/utils/loading.d.ts.map +1 -0
  262. package/dist/utils/loading.js +46 -0
  263. package/dist/utils/logging.d.ts +20 -0
  264. package/dist/utils/logging.d.ts.map +1 -0
  265. package/dist/utils/logging.js +54 -0
  266. package/dist/utils/notify.d.ts +15 -0
  267. package/dist/utils/notify.d.ts.map +1 -0
  268. package/dist/utils/notify.js +30 -0
  269. package/dist/utils/object.d.ts +28 -0
  270. package/dist/utils/object.d.ts.map +1 -0
  271. package/dist/utils/object.js +48 -0
  272. package/dist/utils/pagination.d.ts +60 -0
  273. package/dist/utils/pagination.d.ts.map +1 -0
  274. package/dist/utils/pagination.js +252 -0
  275. package/dist/utils/paths.d.ts +54 -0
  276. package/dist/utils/paths.d.ts.map +1 -0
  277. package/dist/utils/paths.js +48 -0
  278. package/dist/utils/platform.d.ts +25 -0
  279. package/dist/utils/platform.d.ts.map +1 -0
  280. package/dist/utils/platform.js +64 -0
  281. package/dist/utils/scripts.d.ts +20 -0
  282. package/dist/utils/scripts.d.ts.map +1 -0
  283. package/dist/utils/scripts.js +39 -0
  284. package/global.d.ts +29 -0
  285. package/package.json +119 -0
@@ -0,0 +1,300 @@
1
+ <template>
2
+ <div class="ErrorNotFound">
3
+ <div class="ErrorNotFound-Container">
4
+ <div class="ErrorNotFound-Content">
5
+ <!-- Gradient Background Effect -->
6
+ <div class="ErrorNotFound-Glow"></div>
7
+
8
+ <!-- 404 Icon with Glow Effect -->
9
+ <div class="ErrorNotFound-IconContainer SmallGlow">
10
+ <q-icon
11
+ name="search"
12
+ size="80px"
13
+ class="ErrorNotFound-Icon"
14
+ />
15
+ </div>
16
+
17
+ <!-- Error Code -->
18
+ <div class="ErrorNotFound-Code">
19
+ 404
20
+ </div>
21
+
22
+ <!-- Message -->
23
+ <div class="ErrorNotFound-Title">
24
+ {{ $t('common.errors.notFound.title') }}
25
+ </div>
26
+
27
+ <div class="ErrorNotFound-Description">
28
+ {{ $t('common.errors.notFound.description') }}
29
+ </div>
30
+
31
+ <!-- Actions -->
32
+ <div class="ErrorNotFound-Actions">
33
+ <q-btn
34
+ unelevated
35
+ size="md"
36
+ :to="homeRoute"
37
+ class="PrimaryButton GenericBorder ErrorNotFound-HomeButton"
38
+ no-caps
39
+ >
40
+ <q-icon
41
+ name="home"
42
+ size="18px"
43
+ class="q-mr-xs"
44
+ />
45
+ {{ $t('common.errors.notFound.actions.home') }}
46
+ </q-btn>
47
+
48
+ <q-btn
49
+ outline
50
+ size="md"
51
+ @click="goBack"
52
+ class="Button GenericBorder ErrorNotFound-BackButton"
53
+ no-caps
54
+ >
55
+ <q-icon
56
+ name="arrow_back"
57
+ size="18px"
58
+ class="q-mr-xs"
59
+ />
60
+ {{ $t('common.errors.notFound.actions.back') }}
61
+ </q-btn>
62
+ </div>
63
+
64
+ <!-- Help Text -->
65
+ <div class="ErrorNotFound-Help">
66
+ <p class="ErrorNotFound-HelpText">
67
+ {{ $t('common.errors.notFound.help') }}
68
+ </p>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ </div>
73
+ </template>
74
+
75
+ <script setup lang="ts">
76
+ import { computed } from 'vue';
77
+ import { useRouter } from 'vue-router';
78
+ import { useQuvel } from '../composables/useQuvel.js';
79
+
80
+ const router = useRouter();
81
+ const container = useQuvel();
82
+
83
+ // Get home route from config with default fallback
84
+ const homeRoute = computed(() => {
85
+ return container.config.routes?.home || '/' as const;
86
+ });
87
+
88
+ const goBack = () => {
89
+ if (window.history.length > 1) {
90
+ router.go(-1);
91
+ } else {
92
+ void router.push(homeRoute.value);
93
+ }
94
+ };
95
+ </script>
96
+
97
+ <style lang="scss" scoped>
98
+ .ErrorNotFound {
99
+ min-height: 100vh;
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: center;
103
+ position: relative;
104
+ background: linear-gradient(170deg, #f9fafb, #e6e7eb);
105
+
106
+ .dark & {
107
+ background: linear-gradient(150deg, #202b3b, #12171e);
108
+ }
109
+
110
+ &-Container {
111
+ max-width: 32rem;
112
+ margin-left: auto;
113
+ margin-right: auto;
114
+ padding-left: 2rem;
115
+ padding-right: 2rem;
116
+ position: relative;
117
+ z-index: 10;
118
+ }
119
+
120
+ &-Content {
121
+ text-align: center;
122
+ position: relative;
123
+ }
124
+
125
+ &-Glow {
126
+ position: absolute;
127
+ top: 50%;
128
+ left: 50%;
129
+ width: 300px;
130
+ height: 300px;
131
+ transform: translate(-50%, -60%);
132
+ border-radius: 50%;
133
+ background: radial-gradient(circle,
134
+ rgba(59, 130, 246, 0.15) 0%,
135
+ rgba(243, 85, 44, 0.05) 40%,
136
+ rgba(255, 255, 255, 0) 70%);
137
+ opacity: 0.8;
138
+ z-index: -1;
139
+
140
+ .dark & {
141
+ background: radial-gradient(circle,
142
+ rgba(99, 102, 241, 0.2) 0%,
143
+ rgba(253, 106, 42, 0.1) 40%,
144
+ rgba(30, 30, 46, 0) 70%);
145
+ }
146
+ }
147
+
148
+ &-IconContainer {
149
+ margin-bottom: 2rem;
150
+ display: inline-block;
151
+ }
152
+
153
+ &-Icon {
154
+ color: #9ca3af;
155
+
156
+ .dark & {
157
+ color: #6b7280;
158
+ }
159
+ }
160
+
161
+ &-Code {
162
+ font-size: 6rem;
163
+ line-height: 1;
164
+ font-weight: 700;
165
+ margin-bottom: 1.5rem;
166
+ font-family: system-ui, -apple-system, sans-serif;
167
+ background: linear-gradient(135deg,
168
+ rgba(59, 130, 246, 0.8) 0%,
169
+ rgba(243, 85, 44, 0.8) 50%,
170
+ rgba(234, 83, 1, 0.8) 100%);
171
+ background-clip: text;
172
+ -webkit-background-clip: text;
173
+ -webkit-text-fill-color: transparent;
174
+ text-shadow: 0 4px 20px rgba(59, 130, 246, 0.3);
175
+
176
+ .dark & {
177
+ background: linear-gradient(135deg,
178
+ rgba(139, 92, 246, 0.9) 0%,
179
+ rgba(99, 102, 241, 0.9) 50%,
180
+ rgba(59, 130, 246, 0.9) 100%);
181
+ background-clip: text;
182
+ -webkit-background-clip: text;
183
+ -webkit-text-fill-color: transparent;
184
+ text-shadow: 0 4px 20px rgba(139, 92, 246, 0.4);
185
+ }
186
+ }
187
+
188
+ &-Title {
189
+ font-size: 1.5rem;
190
+ line-height: 2rem;
191
+ font-weight: 600;
192
+ color: #111827;
193
+ margin-bottom: 0.75rem;
194
+
195
+ .dark & {
196
+ color: #f3f4f6;
197
+ }
198
+ }
199
+
200
+ &-Description {
201
+ color: #4b5563;
202
+ margin-bottom: 2.5rem;
203
+ line-height: 1.625;
204
+ max-width: 28rem;
205
+ margin-left: auto;
206
+ margin-right: auto;
207
+
208
+ .dark & {
209
+ color: #d1d5db;
210
+ }
211
+ }
212
+
213
+ &-Actions {
214
+ display: flex;
215
+ flex-direction: column;
216
+ gap: 1rem;
217
+ justify-content: center;
218
+ margin-bottom: 2.5rem;
219
+
220
+ @media (min-width: 640px) {
221
+ flex-direction: row;
222
+ }
223
+ }
224
+
225
+ &-HomeButton,
226
+ &-BackButton {
227
+ padding-left: 1.5rem;
228
+ padding-right: 1.5rem;
229
+ padding-top: 0.75rem;
230
+ padding-bottom: 0.75rem;
231
+ font-weight: 500;
232
+ transition-property: all;
233
+ transition-duration: 300ms;
234
+ min-width: 140px;
235
+
236
+ &:hover {
237
+ transform: translateY(-2px);
238
+ box-shadow: 0 8px 25px rgba(59, 130, 246, 0.25);
239
+ }
240
+
241
+ &:active {
242
+ transform: translateY(0);
243
+ }
244
+ }
245
+
246
+ &-BackButton {
247
+ &:hover {
248
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
249
+
250
+ .dark & {
251
+ box-shadow: 0 8px 25px rgba(255, 255, 255, 0.1);
252
+ }
253
+ }
254
+ }
255
+
256
+ &-Help {
257
+ font-size: 0.875rem;
258
+ line-height: 1.25rem;
259
+ }
260
+
261
+ &-HelpText {
262
+ color: #6b7280;
263
+ line-height: 1.625;
264
+
265
+ .dark & {
266
+ color: #9ca3af;
267
+ }
268
+ }
269
+ }
270
+
271
+ @media (max-width: 640px) {
272
+ .ErrorNotFound {
273
+ &-Container {
274
+ padding-left: 1.5rem;
275
+ padding-right: 1.5rem;
276
+ }
277
+
278
+ &-Code {
279
+ font-size: 3.75rem;
280
+ line-height: 1;
281
+ }
282
+
283
+ &-Title {
284
+ font-size: 1.25rem;
285
+ line-height: 1.75rem;
286
+ }
287
+
288
+ &-Actions {
289
+ .q-btn {
290
+ width: 100%;
291
+ }
292
+ }
293
+
294
+ &-Glow {
295
+ width: 200px;
296
+ height: 200px;
297
+ }
298
+ }
299
+ }
300
+ </style>
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Core Pages
3
+ *
4
+ * Reusable page components for the Quvel UI framework
5
+ */
6
+ export { default as ErrorNotFound } from './ErrorNotFound.vue';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core Pages
3
+ *
4
+ * Reusable page components for the Quvel UI framework
5
+ */
6
+ export { default as ErrorNotFound } from './ErrorNotFound.vue';
@@ -0,0 +1,90 @@
1
+ /**
2
+ * API Service
3
+ *
4
+ * Axios wrapper service with request cancellation and session management
5
+ */
6
+ import type { AxiosInstance, AxiosRequestConfig } from 'axios';
7
+ import type { QSsrContext } from '@quasar/app-vite';
8
+ import { Service } from './Service.js';
9
+ import type { AppConfig } from '../types/app.types.js';
10
+ /**
11
+ * Error thrown when a request requires a session cookie, but none exists
12
+ */
13
+ export declare class NoSessionCookieError extends Error {
14
+ constructor(method: string, url: string);
15
+ }
16
+ /**
17
+ * API Service - Manages HTTP requests with cancellation and logging
18
+ */
19
+ export declare class ApiService extends Service {
20
+ private readonly api;
21
+ private abortControllers;
22
+ private requestCounter;
23
+ constructor(config: AppConfig, ssrContext?: QSsrContext | null);
24
+ /**
25
+ * Get the underlying Axios instance
26
+ */
27
+ get instance(): AxiosInstance;
28
+ /**
29
+ * Check if a session cookie exists
30
+ * Returns false if no session cookie, true if valid session cookie exists
31
+ */
32
+ hasSession(): boolean;
33
+ /**
34
+ * Mark that a session now exists (called after successful login/register)
35
+ * Updates the internal flag so hasSession() returns true
36
+ */
37
+ markSessionExists(): void;
38
+ /**
39
+ * Mark that a session no longer exists (called after logout)
40
+ * Updates the internal flag so hasSession() returns false
41
+ */
42
+ markSessionCleared(): void;
43
+ /**
44
+ * Generate unique request ID
45
+ */
46
+ private createRequestId;
47
+ /**
48
+ * Create cancellable request config
49
+ */
50
+ private createCancellableConfig;
51
+ /**
52
+ * Cancel a specific request by ID
53
+ */
54
+ cancelRequest(requestId: string): boolean;
55
+ /**
56
+ * Generic request handler
57
+ */
58
+ private request;
59
+ /**
60
+ * GET request
61
+ */
62
+ get<T>(url: string, config?: AxiosRequestConfig & {
63
+ requiresSessionCookie?: boolean;
64
+ }, requestId?: string): Promise<T>;
65
+ /**
66
+ * POST request
67
+ */
68
+ post<T>(url: string, data?: unknown, config?: AxiosRequestConfig & {
69
+ requiresSessionCookie?: boolean;
70
+ }, requestId?: string): Promise<T>;
71
+ /**
72
+ * PUT request
73
+ */
74
+ put<T>(url: string, data?: unknown, config?: AxiosRequestConfig & {
75
+ requiresSessionCookie?: boolean;
76
+ }, requestId?: string): Promise<T>;
77
+ /**
78
+ * PATCH request
79
+ */
80
+ patch<T>(url: string, data?: unknown, config?: AxiosRequestConfig & {
81
+ requiresSessionCookie?: boolean;
82
+ }, requestId?: string): Promise<T>;
83
+ /**
84
+ * DELETE request
85
+ */
86
+ delete<T>(url: string, config?: AxiosRequestConfig & {
87
+ requiresSessionCookie?: boolean;
88
+ }, requestId?: string): Promise<T>;
89
+ }
90
+ //# sourceMappingURL=ApiService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiService.d.ts","sourceRoot":"","sources":["../../src/services/ApiService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAA6C,MAAM,OAAO,CAAC;AAC1G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKvD;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAIxC;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,OAAO;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,cAAc,CAAK;gBAEf,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI;IAoB9D;;OAEG;IACH,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED;;;OAGG;IACH,UAAU,IAAI,OAAO;IAIrB;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;;OAGG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAczC;;OAEG;YACW,OAAO;IAqDrB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI5H;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAAG;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,EACjE,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,GAAG,CAAC,CAAC,EACT,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAAG;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,EACjE,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,KAAK,CAAC,CAAC,EACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAAG;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,EACjE,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAGhI"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * API Service
3
+ *
4
+ * Axios wrapper service with request cancellation and session management
5
+ */
6
+ import { Service } from './Service.js';
7
+ import { createApiInstance } from '../utils/axios.js';
8
+ import { getTraceIdHeader, getPlatformHeader } from '../utils/headers.js';
9
+ import { detectPlatformTags } from '../utils/platform.js';
10
+ /**
11
+ * Error thrown when a request requires a session cookie, but none exists
12
+ */
13
+ export class NoSessionCookieError extends Error {
14
+ constructor(method, url) {
15
+ super(`Request skipped: ${method} ${url} requires a session cookie but none exists`);
16
+ this.name = 'NoSessionCookieError';
17
+ }
18
+ }
19
+ /**
20
+ * API Service - Manages HTTP requests with cancellation and logging
21
+ */
22
+ export class ApiService extends Service {
23
+ api;
24
+ abortControllers = new Map();
25
+ requestCounter = 0;
26
+ constructor(config, ssrContext) {
27
+ super(config, ssrContext);
28
+ this.api = createApiInstance(ssrContext ?? undefined, config ?? undefined);
29
+ this.api.interceptors.request.use((requestConfig) => {
30
+ const trace = config.trace;
31
+ if (trace?.id) {
32
+ requestConfig.headers.set(getTraceIdHeader(config), trace.id);
33
+ }
34
+ const platformTags = detectPlatformTags();
35
+ if (platformTags) {
36
+ requestConfig.headers.set(getPlatformHeader(config), platformTags);
37
+ }
38
+ return requestConfig;
39
+ });
40
+ }
41
+ /**
42
+ * Get the underlying Axios instance
43
+ */
44
+ get instance() {
45
+ return this.api;
46
+ }
47
+ /**
48
+ * Check if a session cookie exists
49
+ * Returns false if no session cookie, true if valid session cookie exists
50
+ */
51
+ hasSession() {
52
+ return this.api.defaults.hasSessionCookie ?? false;
53
+ }
54
+ /**
55
+ * Mark that a session now exists (called after successful login/register)
56
+ * Updates the internal flag so hasSession() returns true
57
+ */
58
+ markSessionExists() {
59
+ this.api.defaults.hasSessionCookie = true;
60
+ }
61
+ /**
62
+ * Mark that a session no longer exists (called after logout)
63
+ * Updates the internal flag so hasSession() returns false
64
+ */
65
+ markSessionCleared() {
66
+ this.api.defaults.hasSessionCookie = false;
67
+ }
68
+ /**
69
+ * Generate unique request ID
70
+ */
71
+ createRequestId(url, method) {
72
+ this.requestCounter += 1;
73
+ return `${method}:${url}:${this.requestCounter}`;
74
+ }
75
+ /**
76
+ * Create cancellable request config
77
+ */
78
+ createCancellableConfig(requestId, config) {
79
+ this.cancelRequest(requestId);
80
+ const controller = new AbortController();
81
+ this.abortControllers.set(requestId, controller);
82
+ return {
83
+ ...config,
84
+ signal: controller.signal,
85
+ };
86
+ }
87
+ /**
88
+ * Cancel a specific request by ID
89
+ */
90
+ cancelRequest(requestId) {
91
+ const controller = this.abortControllers.get(requestId);
92
+ if (controller) {
93
+ controller.abort();
94
+ this.abortControllers.delete(requestId);
95
+ return true;
96
+ }
97
+ return false;
98
+ }
99
+ async request(method, url, dataOrConfig, configOrRequestId, requestIdOrUndefined) {
100
+ const hasData = method !== 'get' && method !== 'delete';
101
+ const data = hasData ? dataOrConfig : undefined;
102
+ const config = hasData
103
+ ? configOrRequestId
104
+ : dataOrConfig;
105
+ const requestId = hasData
106
+ ? requestIdOrUndefined
107
+ : configOrRequestId;
108
+ if (config?.requiresSessionCookie && !this.hasSession()) {
109
+ throw new NoSessionCookieError(method.toUpperCase(), url);
110
+ }
111
+ const id = requestId || this.createRequestId(url, method.toUpperCase());
112
+ const cancellableConfig = this.createCancellableConfig(id, config);
113
+ try {
114
+ let response;
115
+ if (hasData) {
116
+ response = await this.api[method](url, data, cancellableConfig);
117
+ }
118
+ else {
119
+ response = await this.api[method](url, cancellableConfig);
120
+ }
121
+ this.abortControllers.delete(id);
122
+ return response.data;
123
+ }
124
+ catch (error) {
125
+ this.abortControllers.delete(id);
126
+ throw error;
127
+ }
128
+ }
129
+ /**
130
+ * GET request
131
+ */
132
+ async get(url, config, requestId) {
133
+ return this.request('get', url, config, requestId);
134
+ }
135
+ /**
136
+ * POST request
137
+ */
138
+ async post(url, data, config, requestId) {
139
+ return this.request('post', url, data, config, requestId);
140
+ }
141
+ /**
142
+ * PUT request
143
+ */
144
+ async put(url, data, config, requestId) {
145
+ return this.request('put', url, data, config, requestId);
146
+ }
147
+ /**
148
+ * PATCH request
149
+ */
150
+ async patch(url, data, config, requestId) {
151
+ return this.request('patch', url, data, config, requestId);
152
+ }
153
+ /**
154
+ * DELETE request
155
+ */
156
+ async delete(url, config, requestId) {
157
+ return this.request('delete', url, config, requestId);
158
+ }
159
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * I18n Service
3
+ *
4
+ * Service for managing internationalization with vue-i18n
5
+ */
6
+ import type { QSsrContext } from '@quasar/app-vite';
7
+ import type { ServiceContainer } from '../container/ServiceContainer.js';
8
+ import type { SsrAwareService, RegisterService } from '../container/types.js';
9
+ import type { I18nType, MessageLanguages } from '../types/i18n.types.js';
10
+ import type { AppConfig } from '../types/app.types.js';
11
+ import { Service } from './Service.js';
12
+ /**
13
+ * I18n Service for managing localization
14
+ *
15
+ * IMPORTANT: You must call I18nService.setTranslations() before booting the container
16
+ */
17
+ export declare class I18nService extends Service implements SsrAwareService, RegisterService {
18
+ private static translations;
19
+ private readonly i18n;
20
+ private api;
21
+ private readonly config;
22
+ /**
23
+ * Set translations for all supported locales
24
+ * Must be called before booting the service
25
+ *
26
+ * @param messages - Translation messages keyed by locale (e.g., { 'en-US': {...}, 'es-MX': {...} })
27
+ */
28
+ static setTranslations(messages: Record<string, Record<string, unknown>>): void;
29
+ constructor(config: AppConfig, ssrContext?: QSsrContext | null);
30
+ /**
31
+ * Register with container (called first)
32
+ */
33
+ register({ api }: ServiceContainer): void;
34
+ /**
35
+ * Boot method to set up the API locale header after all services are ready
36
+ */
37
+ boot(): void;
38
+ /**
39
+ * Get the i18n instance
40
+ */
41
+ get instance(): I18nType;
42
+ /**
43
+ * Get current locale
44
+ */
45
+ get locale(): MessageLanguages;
46
+ /**
47
+ * Set current locale
48
+ */
49
+ set locale(value: MessageLanguages);
50
+ /**
51
+ * Sets the locale header for API requests
52
+ */
53
+ setApiLocaleHeader(): void;
54
+ /**
55
+ * Changes the locale and stores it persistently
56
+ */
57
+ changeLocale(locale: string): void;
58
+ /**
59
+ * Translates a message using the current locale
60
+ */
61
+ t(key: string, params?: Record<string, unknown>): string;
62
+ /**
63
+ * Checks if a translation exists
64
+ */
65
+ te(key: string): boolean;
66
+ }
67
+ //# sourceMappingURL=I18nService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"I18nService.d.ts","sourceRoot":"","sources":["../../src/services/I18nService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAKvC;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,OAAQ,YAAW,eAAe,EAAE,eAAe;IAClF,OAAO,CAAC,MAAM,CAAC,YAAY,CAAwD;IACnF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAE7C;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;gBAInE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI;IAO9D;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,gBAAgB,GAAG,IAAI;IAIzC;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED;;OAEG;IACH,IAAI,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAEjC;IAED;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAM1B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUlC;;OAEG;IACH,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM;IAI5D;;OAEG;IACH,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAGzB"}