1
import { QuasarIconSet } from "./extras/icon-set";
2
import { HasBex, HasCapacitor, HasCordova, HasSsr } from "./feature-flag";
3
import { QuasarLanguage } from "./lang";
5
// We cannot reference directly Capacitor/Cordova types
6
// or they would generate TS errors for Vue CLI users
7
// We also cannot move feature-flags system into `@quasar/app-webpack`/`@quasar/app-vite`
8
// because `QVueGlobals` augmentations won't be transferred to
9
// the `vue/types/vue` augmentation for unknown reason (probably TS limitations)
10
// and the system will just stop working
11
// To workaround these problems we define an empty holder interface
12
// and augment it into `@quasar/app-webpack`/`@quasar/app-vite` with current typings
13
export interface GlobalsTypesHolder {
17
interface QuasarLanguageInstance extends QuasarLanguage {
21
export interface GlobalQuasarLanguage extends QuasarLanguageInstance {
22
set(lang: QuasarLanguage): void;
23
/** Returns undefined when it cannot determine current language or when running on server in SSR mode. */
24
getLocale(): string | undefined;
27
export interface GlobalQuasarLanguageSingleton
28
extends Pick<GlobalQuasarLanguage, "isoName" | "nativeName" | "getLocale">,
30
{ set(lang: QuasarLanguage, ssrContext: any): void },
31
{ set(lang: QuasarLanguage): void }
33
props: QuasarLanguageInstance;
36
export interface GlobalQuasarIconSet extends QuasarIconSet {
37
set(iconSet: QuasarIconSet): void;
40
export interface GlobalQuasarIconSetSingleton
41
extends QuasarIconSet,
43
// QSsrContext interface depends on q/app, making it available into UI package adds complexity without any real benefit
44
{ set(iconSet: QuasarIconSet, ssrContext: any): void },
45
{ set(iconSet: QuasarIconSet): void }
47
iconMapFn: GlobalQuasarIconMapFn;
50
export type GlobalQuasarIconMapFn = (
52
) => { icon: string } | { cls: string; content?: string } | void;
54
// `import { Quasar } from 'quasar'` will contain these types
55
export interface QSingletonGlobals {
57
lang: GlobalQuasarLanguageSingleton;
58
iconSet: GlobalQuasarIconSetSingleton;
61
export interface BaseQGlobals {
63
lang: GlobalQuasarLanguage;
64
iconSet: GlobalQuasarIconSet;
67
// $q object will contain these types
68
export interface QVueGlobals
69
extends HasCapacitor<{ capacitor: any }>,
70
HasBex<{ bex: GlobalsTypesHolder["bex"] }>,
71
HasCordova<{ cordova: GlobalsTypesHolder["cordova"] }>,
73
{ iconMapFn?: GlobalQuasarIconMapFn; onSSRHydrated?: () => void },
74
{ iconMapFn: GlobalQuasarIconMapFn }