nfx-ui 0.26.0 → 0.27.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/dist/apis/authRefresh.js.map +1 -1
- package/dist/apis/clients.js.map +1 -1
- package/dist/apis/ip.d.ts.map +1 -1
- package/dist/apis/ip.js.map +1 -1
- package/dist/apis/repositories/AssetRepository.d.ts.map +1 -1
- package/dist/apis/repositories/AssetRepository.js.map +1 -1
- package/dist/apis/repositories/AuthRepository.d.ts.map +1 -1
- package/dist/apis/repositories/AuthRepository.js.map +1 -1
- package/dist/config/env.js.map +1 -1
- package/dist/constants/key.d.ts.map +1 -1
- package/dist/constants/key.js.map +1 -1
- package/dist/constants/querykeys.js.map +1 -1
- package/dist/enums/auth.d.ts.map +1 -1
- package/dist/enums/auth.js.map +1 -1
- package/dist/enums/dashboard.d.ts.map +1 -1
- package/dist/enums/dashboard.js.map +1 -1
- package/dist/enums/language.d.ts.map +1 -1
- package/dist/enums/language.js.map +1 -1
- package/dist/enums/layout.d.ts.map +1 -1
- package/dist/enums/layout.js.map +1 -1
- package/dist/enums/theme.d.ts.map +1 -1
- package/dist/enums/theme.js.map +1 -1
- package/dist/events/EventEmitter.d.ts.map +1 -1
- package/dist/events/EventEmitter.js.map +1 -1
- package/dist/events/auth.d.ts.map +1 -1
- package/dist/events/auth.js.map +1 -1
- package/dist/events/query.d.ts.map +1 -1
- package/dist/events/query.js.map +1 -1
- package/dist/events/system.d.ts.map +1 -1
- package/dist/events/system.js.map +1 -1
- package/dist/hooks/asset.d.ts.map +1 -1
- package/dist/hooks/asset.js.map +1 -1
- package/dist/hooks/auth.d.ts.map +1 -1
- package/dist/hooks/auth.js.map +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/preference.d.ts.map +1 -1
- package/dist/hooks/preference.js.map +1 -1
- package/dist/languages/hooks/useLanguageLabel.d.ts.map +1 -1
- package/dist/languages/hooks/useLanguageLabel.js.map +1 -1
- package/dist/languages/hooks/useLayoutLabel.d.ts.map +1 -1
- package/dist/languages/hooks/useLayoutLabel.js.map +1 -1
- package/dist/languages/hooks/usePreferenceLabel.d.ts.map +1 -1
- package/dist/languages/hooks/usePreferenceLabel.js.map +1 -1
- package/dist/languages/hooks/useThemeLabel.d.ts.map +1 -1
- package/dist/languages/hooks/useThemeLabel.js.map +1 -1
- package/dist/languages/languages/i18n.d.ts.map +1 -1
- package/dist/languages/languages/i18n.js.map +1 -1
- package/dist/languages/languages/i18nResources.js.map +1 -1
- package/dist/languages/types/components.d.ts.map +1 -1
- package/dist/languages/types/language.d.ts.map +1 -1
- package/dist/languages/utils/getLocalLanguage.d.ts.map +1 -1
- package/dist/languages/utils/getLocalLanguage.js.map +1 -1
- package/dist/languages/utils/languageStorage.d.ts.map +1 -1
- package/dist/languages/utils/languageStorage.js.map +1 -1
- package/dist/navigations/GuestRoute.js.map +1 -1
- package/dist/navigations/ProtectedRoute.js.map +1 -1
- package/dist/providers/DataProvider/index.d.ts.map +1 -1
- package/dist/providers/DataProvider/index.js.map +1 -1
- package/dist/providers/LanguageProvider/index.d.ts.map +1 -1
- package/dist/providers/LanguageProvider/index.js.map +1 -1
- package/dist/providers/ThemeProvider/index.d.ts.map +1 -1
- package/dist/providers/ThemeProvider/index.js.map +1 -1
- package/dist/schemas/profileEditSchema.d.ts.map +1 -1
- package/dist/schemas/profileEditSchema.js.map +1 -1
- package/dist/schemas/signupSchema.js.map +1 -1
- package/dist/stores/auth.d.ts.map +1 -1
- package/dist/stores/auth.js.map +1 -1
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/layout.js.map +1 -1
- package/dist/stores/preference.d.ts.map +1 -1
- package/dist/stores/preference.js.map +1 -1
- package/dist/themes/hooks/index.d.ts.map +1 -1
- package/dist/themes/hooks/useTheme.d.ts.map +1 -1
- package/dist/themes/hooks/useTheme.js.map +1 -1
- package/dist/themes/index.d.ts.map +1 -1
- package/dist/themes/radix/mappings.d.ts.map +1 -1
- package/dist/themes/radix/mappings.js.map +1 -1
- package/dist/themes/types/components.d.ts.map +1 -1
- package/dist/themes/types/context.d.ts.map +1 -1
- package/dist/themes/types/index.d.ts.map +1 -1
- package/dist/themes/types/theme.d.ts.map +1 -1
- package/dist/types/domain/auth/login.d.ts.map +1 -1
- package/dist/types/domain/auth/profile.d.ts.map +1 -1
- package/dist/types/domain/auth/signup.d.ts.map +1 -1
- package/dist/utils/apiError.d.ts.map +1 -1
- package/dist/utils/apiError.js.map +1 -1
- package/dist/utils/array.d.ts.map +1 -1
- package/dist/utils/array.js.map +1 -1
- package/dist/utils/domain/account.d.ts.map +1 -1
- package/dist/utils/domain/account.js.map +1 -1
- package/dist/utils/domain/buildProfilePatch.d.ts.map +1 -1
- package/dist/utils/domain/buildProfilePatch.js.map +1 -1
- package/dist/utils/domain/images.js.map +1 -1
- package/dist/utils/factory/hooks.d.ts.map +1 -1
- package/dist/utils/factory/hooks.js.map +1 -1
- package/dist/utils/lstorage.d.ts.map +1 -1
- package/dist/utils/lstorage.js.map +1 -1
- package/dist/utils/safe.d.ts.map +1 -1
- package/dist/utils/safe.js.map +1 -1
- package/dist/utils/suspense.d.ts.map +1 -1
- package/dist/utils/suspense.js.map +1 -1
- package/package.json +1 -1
- package/src/apis/authRefresh.ts +4 -4
- package/src/apis/clients.ts +5 -5
- package/src/apis/ip.ts +1 -1
- package/src/apis/repositories/AssetRepository.ts +1 -1
- package/src/apis/repositories/AuthRepository.ts +2 -2
- package/src/config/env.ts +1 -1
- package/src/constants/key.ts +1 -1
- package/src/constants/querykeys.ts +1 -1
- package/src/enums/auth.ts +2 -2
- package/src/enums/dashboard.ts +2 -2
- package/src/enums/language.ts +2 -2
- package/src/enums/layout.ts +2 -2
- package/src/enums/theme.ts +2 -2
- package/src/events/EventEmitter.ts +1 -1
- package/src/events/auth.ts +4 -4
- package/src/events/query.ts +3 -3
- package/src/events/system.ts +3 -3
- package/src/hooks/asset.ts +7 -7
- package/src/hooks/auth.ts +12 -12
- package/src/hooks/index.ts +1 -1
- package/src/hooks/preference.ts +5 -5
- package/src/languages/hooks/useLanguageLabel.ts +1 -1
- package/src/languages/hooks/useLayoutLabel.ts +1 -1
- package/src/languages/hooks/usePreferenceLabel.ts +1 -1
- package/src/languages/hooks/useThemeLabel.ts +1 -1
- package/src/languages/languages/i18n.ts +3 -3
- package/src/languages/languages/i18nResources.ts +1 -1
- package/src/languages/types/components.ts +1 -1
- package/src/languages/types/language.ts +1 -1
- package/src/languages/utils/getLocalLanguage.ts +2 -2
- package/src/languages/utils/languageStorage.ts +3 -3
- package/src/navigations/GuestRoute.tsx +1 -1
- package/src/navigations/ProtectedRoute.tsx +1 -1
- package/src/providers/DataProvider/index.tsx +7 -7
- package/src/providers/LanguageProvider/index.tsx +6 -6
- package/src/providers/ThemeProvider/index.tsx +4 -4
- package/src/schemas/profileEditSchema.ts +4 -4
- package/src/schemas/signupSchema.ts +1 -1
- package/src/stores/auth.ts +3 -3
- package/src/stores/index.ts +1 -1
- package/src/stores/layout.ts +1 -1
- package/src/stores/preference.ts +5 -5
- package/src/themes/hooks/index.ts +1 -1
- package/src/themes/hooks/useTheme.ts +4 -4
- package/src/themes/index.ts +2 -2
- package/src/themes/radix/mappings.ts +2 -2
- package/src/themes/types/components.ts +1 -1
- package/src/themes/types/context.ts +2 -2
- package/src/themes/types/index.ts +1 -1
- package/src/themes/types/theme.ts +1 -1
- package/src/types/domain/auth/login.ts +2 -2
- package/src/types/domain/auth/profile.ts +1 -1
- package/src/types/domain/auth/signup.ts +1 -1
- package/src/utils/apiError.ts +2 -2
- package/src/utils/array.ts +1 -1
- package/src/utils/domain/account.ts +2 -2
- package/src/utils/domain/buildProfilePatch.ts +6 -6
- package/src/utils/domain/images.ts +1 -1
- package/src/utils/factory/hooks.ts +1 -1
- package/src/utils/lstorage.ts +1 -1
- package/src/utils/safe.ts +1 -1
- package/src/utils/suspense.ts +1 -1
package/dist/events/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","names":[],"sources":["../../src/events/query.ts"],"sourcesContent":["import type { EventNamesOf } from \"
|
|
1
|
+
{"version":3,"file":"query.js","names":[],"sources":["../../src/events/query.ts"],"sourcesContent":["import type { EventNamesOf } from \"nfx-ui/events/EventEmitter\";\n\nimport { defineEvents, EventEmitter } from \"nfx-ui/events/EventEmitter\";\nimport { singleton } from \"nfx-ui/utils/singleton\";\n\nexport const queryEvents = defineEvents({\n RESET_ACTIVE_QUERIES: \"QUERY:RESET_ACTIVE_QUERIES\",\n});\n\ntype QueryDomainEvent = EventNamesOf<typeof queryEvents>;\n\nclass QueryDomainEmitter extends EventEmitter<QueryDomainEvent> {\n constructor() {\n super(queryEvents);\n }\n\n resetActiveQueries(onDone?: () => void) {\n this.emit(queryEvents.RESET_ACTIVE_QUERIES, onDone);\n }\n}\n\nexport const queryEventEmitter = new (singleton(QueryDomainEmitter))();\n"],"mappings":";;;AAKA,IAAa,IAAc,EAAa,EACtC,sBAAsB,6BACxB,CAAC,GAcY,IAAoB,KAAK,EAAU,cAVf,EAA+B;CAC9D,cAAc;EACZ,MAAM,CAAW;CACnB;CAEA,mBAAmB,GAAqB;EACtC,KAAK,KAAK,EAAY,sBAAsB,CAAM;CACpD;AACF,CAEkE,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/events/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/events/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAgB,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGxE;;GAEG;AACH,eAAO,MAAM,YAAY;;;EAGvB,CAAC;AAEH,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AAErD,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,MAAM,GACN;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEN,KAAK,gBAAgB,GAAG;IACtB,mBAAmB,EAAE,sBAAsB,CAAC;IAC5C,qBAAqB,EAAE,wBAAwB,CAAC;CACjD,CAAC;AAEF,cAAM,kBAAmB,SAAQ,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC;;IAK1E,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAIzC,WAAW,CAAC,KAAK,EAAE,wBAAwB;CAG5C;AAED,eAAO,MAAM,kBAAkB,oBAAwC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","names":[],"sources":["../../src/events/system.ts"],"sourcesContent":["import type { EventNamesOf } from \"
|
|
1
|
+
{"version":3,"file":"system.js","names":[],"sources":["../../src/events/system.ts"],"sourcesContent":["import type { EventNamesOf } from \"nfx-ui/events/EventEmitter\";\n\nimport { defineEvents, EventEmitter } from \"nfx-ui/events/EventEmitter\";\nimport { singleton } from \"nfx-ui/utils/singleton\";\n\n/**\n * Host-agnostic UI feedback. Package emits; WEB ModalProvider listens.\n */\nexport const systemEvents = defineEvents({\n SHOW_ERROR: \"SYSTEM:SHOW_ERROR\",\n SHOW_SUCCESS: \"SYSTEM:SHOW_SUCCESS\",\n});\n\ntype SystemEvent = EventNamesOf<typeof systemEvents>;\n\nexport type SystemShowErrorPayload = {\n message: string;\n title?: string;\n};\n\nexport type SystemShowSuccessPayload =\n | string\n | {\n message: string;\n title?: string;\n onClick?: () => void;\n };\n\ntype SystemPayloadMap = {\n \"SYSTEM:SHOW_ERROR\": SystemShowErrorPayload;\n \"SYSTEM:SHOW_SUCCESS\": SystemShowSuccessPayload;\n};\n\nclass SystemEventEmitter extends EventEmitter<SystemEvent, SystemPayloadMap> {\n constructor() {\n super(systemEvents);\n }\n\n showError(message: string, title?: string) {\n this.emit(systemEvents.SHOW_ERROR, { message, title });\n }\n\n showSuccess(props: SystemShowSuccessPayload) {\n this.emit(systemEvents.SHOW_SUCCESS, props);\n }\n}\n\nexport const systemEventEmitter = new (singleton(SystemEventEmitter))();\n"],"mappings":";;;AAQA,IAAa,IAAe,EAAa;CACvC,YAAY;CACZ,cAAc;AAChB,CAAC,GAoCY,IAAqB,KAAK,EAAU,cAdhB,EAA4C;CAC3E,cAAc;EACZ,MAAM,CAAY;CACpB;CAEA,UAAU,GAAiB,GAAgB;EACzC,KAAK,KAAK,EAAa,YAAY;GAAE;GAAS;EAAM,CAAC;CACvD;CAEA,YAAY,GAAiC;EAC3C,KAAK,KAAK,EAAa,cAAc,CAAK;CAC5C;AACF,CAEmE,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/hooks/asset.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/hooks/asset.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAU1C,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,gBAAgB;UAGc,KAAK,CAAC,IAAI;YAAU,KAAK,CAAC,OAAO,CAAC,aAAa;WAEzF,CAAC;AAEF,eAAO,MAAM,gBAAgB;UAGc,KAAK,CAAC,IAAI;YAAU,KAAK,CAAC,OAAO,CAAC,aAAa;WAEzF,CAAC;AAEF,eAAO,MAAM,cAAc;UAGY,KAAK,CAAC,IAAI;QAAM,MAAM;WAK5D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM,KAAK,CAAC,IAAI,2GAG7C,CAAC;AAEF,eAAO,MAAM,qBAAqB,4JAKjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,oIASjC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,qBAAqB,4GAW7D,CAAC"}
|
package/dist/hooks/asset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.js","names":[],"sources":["../../src/hooks/asset.ts"],"sourcesContent":["/**\n * Asset upload hooks — 组件勿直接调 apis/asset\n */\nimport type { AxiosError } from \"axios\";\nimport type { Asset } from \"
|
|
1
|
+
{"version":3,"file":"asset.js","names":[],"sources":["../../src/hooks/asset.ts"],"sourcesContent":["/**\n * Asset upload hooks — 组件勿直接调 apis/asset\n */\nimport type { AxiosError } from \"axios\";\nimport type { Asset } from \"nfx-ui/types\";\n\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAssetRepository } from \"nfx-ui/apis/repositories\";\nimport { authEventEmitter, authEvents } from \"nfx-ui/events/auth\";\nimport { systemEventEmitter } from \"nfx-ui/events/system\";\nimport { AuthStore } from \"nfx-ui/stores/auth\";\nimport { getApiErrorMessage } from \"nfx-ui/utils/apiError\";\nimport { useUnifiedQuery } from \"nfx-ui/utils/factory\";\n\nexport type UseDeleteImageOptions = {\n ifShowError?: boolean;\n};\n\nexport const usePrepareUpload = () => {\n const asset = useAssetRepository();\n return useMutation({\n mutationFn: ({ kind, params }: { kind: Asset.Kind; params: Asset.Request.PrepareUpload }) => asset.PrepareUpload(kind, params),\n });\n};\n\nexport const useConfirmUpload = () => {\n const asset = useAssetRepository();\n return useMutation({\n mutationFn: ({ kind, params }: { kind: Asset.Kind; params: Asset.Request.ConfirmUpload }) => asset.ConfirmUpload(kind, params),\n });\n};\n\nexport const useDeleteAsset = () => {\n const asset = useAssetRepository();\n return useMutation({\n mutationFn: ({ kind, id }: { kind: Asset.Kind; id: string }) => asset.Delete(kind, id),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteAsset] error\"));\n },\n });\n};\n\nexport const useListAssets = (kind: Asset.Kind) => {\n const asset = useAssetRepository();\n return useUnifiedQuery(() => asset.List(kind), [\"asset\", \"list\", kind], undefined);\n};\n\nexport const usePrepareImageUpload = () => {\n const asset = useAssetRepository();\n return useMutation<Asset.Response.PrepareUpload, AxiosError, Asset.Request.PrepareUpload>({\n mutationFn: (params) => asset.PrepareUpload(\"images\", params),\n });\n};\n\nexport const useConfirmImageUpload = () => {\n const asset = useAssetRepository();\n const accountId = AuthStore.getState().currentAccountId;\n return useMutation<void, AxiosError, Asset.Request.ConfirmUpload>({\n mutationFn: (params) => asset.ConfirmUpload(\"images\", params),\n onSuccess: () => {\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n },\n });\n};\n\nexport const useDeleteImage = (options?: UseDeleteImageOptions) => {\n const asset = useAssetRepository();\n const ifShowError = options?.ifShowError ?? true;\n return useMutation({\n mutationFn: (id: string) => asset.Delete(\"images\", id),\n onError: (error: AxiosError) => {\n if (ifShowError) {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteImage] error\"));\n }\n },\n });\n};\n"],"mappings":";;;;;;;;AAkBA,IAAa,UAAyB;CACpC,IAAM,IAAQ,EAAmB;CACjC,OAAO,EAAY,EACjB,aAAa,EAAE,SAAM,gBAAwE,EAAM,cAAc,GAAM,CAAM,EAC/H,CAAC;AACH,GAEa,UAAyB;CACpC,IAAM,IAAQ,EAAmB;CACjC,OAAO,EAAY,EACjB,aAAa,EAAE,SAAM,gBAAwE,EAAM,cAAc,GAAM,CAAM,EAC/H,CAAC;AACH,GAEa,UAAuB;CAClC,IAAM,IAAQ,EAAmB;CACjC,OAAO,EAAY;EACjB,aAAa,EAAE,SAAM,YAA2C,EAAM,OAAO,GAAM,CAAE;EACrF,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,wBAAwB,CAAC;EAClF;CACF,CAAC;AACH,GAEa,KAAiB,MAAqB;CACjD,IAAM,IAAQ,EAAmB;CACjC,OAAO,QAAsB,EAAM,KAAK,CAAI,GAAG;EAAC;EAAS;EAAQ;CAAI,GAAG,KAAA,CAAS;AACnF,GAEa,UAA8B;CACzC,IAAM,IAAQ,EAAmB;CACjC,OAAO,EAAmF,EACxF,aAAa,MAAW,EAAM,cAAc,UAAU,CAAM,EAC9D,CAAC;AACH,GAEa,UAA8B;CACzC,IAAM,IAAQ,EAAmB,GAC3B,IAAY,EAAU,SAAS,CAAC,CAAC;CACvC,OAAO,EAA2D;EAChE,aAAa,MAAW,EAAM,cAAc,UAAU,CAAM;EAC5D,iBAAiB;GACf,EAAiB,KAAK,EAAW,wBAAwB,CAAS;EACpE;CACF,CAAC;AACH,GAEa,KAAkB,MAAoC;CACjE,IAAM,IAAQ,EAAmB,GAC3B,IAAc,GAAS,eAAe;CAC5C,OAAO,EAAY;EACjB,aAAa,MAAe,EAAM,OAAO,UAAU,CAAE;EACrD,UAAU,MAAsB;GAC9B,AAAI,KACF,EAAmB,UAAU,EAAmB,GAAO,wBAAwB,CAAC;EAEpF;CACF,CAAC;AACH"}
|
package/dist/hooks/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/hooks/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/hooks/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAMjF,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGrF,OAAO,EACL,SAAS,EAGT,kBAAkB,EAMlB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAQ5B,wBAAgB,iBAAiB;;;;;;EAMhC;AAWD,wBAAgB,iBAAiB,IAAI,oBAAoB,CAkBxD;AAED,eAAO,MAAM,uBAAuB,4IAYnC,CAAC;AAEF,eAAO,MAAM,kBAAkB;gBAQoF,MAAM;;gBADvG,OAAO;8DAuCxB,CAAC;AAEF,eAAO,MAAM,iBAAiB;WAG6B,MAAM;cAAY,MAAM;gBAAc,OAAO;WAsBvG,CAAC;AAEF,eAAO,MAAM,gBAAgB;eAG4B,MAAM;UAAQ,KAAK,CAAC,WAAW;WAqBvF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,kIAgB7D,CAAC;AAEF,eAAO,MAAM,wBAAwB,6IASpC,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,eAAe,EAAE,MAAM,CAAC,uLASjE,CAAC;AAEF,eAAO,MAAM,sBAAsB,wKAYlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,8KAYrC,CAAC;AAEF,eAAO,MAAM,gBAAgB;UAGiB,eAAe;eAAa,MAAM;WAS/E,CAAC;AAEF,eAAO,MAAM,uBAAuB,6IASnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,6GASjC,CAAC;AAEF,eAAO,MAAM,aAAa,qJAMzB,CAAC;AAEF,eAAO,MAAM,aAAa,qJAMzB,CAAC;AAEF,eAAO,MAAM,cAAc,wJAc1B,CAAC;AAEF,eAAO,MAAM,4BAA4B;aAIM,MAAM;WAAS,YAAY;WAQzE,CAAC;AAEF,eAAO,MAAM,cAAc;aAKgC,MAAM;sBAAoB,MAAM;WAU1F,CAAC;AAEF,eAAO,MAAM,cAAc;aAKqB,MAAM;WAAS,MAAM;WASpE,CAAC;AAEF,eAAO,MAAM,kBAAkB,+GAe9B,CAAC;AAEF,eAAO,MAAM,cAAc,+GAc1B,CAAC;AAEF,eAAO,MAAM,qCAAqC,yJAYjD,CAAC;AAEF,eAAO,MAAM,iBAAiB,qIAY7B,CAAC;AAEF,eAAO,MAAM,4BAA4B,kJAaxC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
|
package/dist/hooks/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","names":[],"sources":["../../src/hooks/auth.ts"],"sourcesContent":["/**\n * Auth hooks — 组件勿直接调 apis/auth\n */\nimport type { AxiosError } from \"axios\";\nimport type { CurrentProfileResult, Login, Profile, Signup } from \"@/types\";\n\nimport { useEffect } from \"react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAuthRepository } from \"@/apis/repositories\";\nimport { AUTH_EMAILS, AUTH_ME, AUTH_PHONES, AUTH_PROFILES } from \"@/constants\";\nimport { AuthSignupPlatformEnum, LanguageEnum, ProfileKindEnum } from \"@/enums\";\nimport { authEventEmitter, authEvents } from \"@/events/auth\";\nimport { systemEventEmitter } from \"@/events/system\";\nimport {\n AuthStore,\n clearAuth,\n EMPTY_PROFILE_ID,\n hasSelectedProfile,\n setCurrentAccountId,\n setCurrentProfileId,\n setCurrentProfileKind,\n setIsAuthValid,\n setTokens,\n useAuthStore,\n} from \"@/stores/auth\";\nimport { ensureDeviceIdStorage } from \"@/stores/system\";\nimport { getApiErrorMessage } from \"@/utils/apiError\";\nimport { pickProfile } from \"@/utils/domain/account\";\nimport { useUnifiedQuery } from \"@/utils/factory\";\nimport { safeOr, safeStringable } from \"@/utils/safe\";\nimport { useTranslation } from \"react-i18next\";\n\nexport function useAuthQueryScope() {\n const aID = useAuthStore((s) => s.currentAccountId);\n const pID = useAuthStore((s) => s.currentProfileId);\n const isAuthValid = useAuthStore((s) => s.isAuthValid);\n const kind = useAuthStore((s) => s.currentProfileKind);\n return { aID, pID, isAuthValid, kind, profileScope: kind };\n}\n\nfunction useLogoutOnAuthError(isError: boolean, aID: string) {\n useEffect(() => {\n if (!isError || !AuthStore.getState().isAuthValid) return;\n if (!hasSelectedProfile(AuthStore.getState().currentProfileId)) return;\n authEventEmitter.emit(authEvents.LOGOUT, aID);\n clearAuth();\n }, [isError, aID]);\n}\n\nexport function useCurrentProfile(): CurrentProfileResult {\n const auth = useAuthRepository();\n const { aID, pID, isAuthValid, kind } = useAuthQueryScope();\n const result = useUnifiedQuery(\n ({ kind }: { kind: ProfileKindEnum }) => auth.GetCurrentFullAccountInformationWithProfile(kind),\n AUTH_ME(aID, pID),\n { kind },\n { enabled: isAuthValid && hasSelectedProfile(pID) },\n );\n useLogoutOnAuthError(result.isError, aID);\n return {\n kind,\n data: result.data,\n profile: pickProfile(kind, result.data),\n isLoading: result.isLoading,\n isError: result.isError,\n refetch: result.refetch,\n } as CurrentProfileResult;\n}\n\nexport const useSendVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (params: Signup.Request.SendVerificationCode) => auth.SendVerificationCode(params),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendVerificationCode] error\"));\n },\n });\n};\n\nexport const useSignupWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({\n rememberMe,\n ...params\n }: {\n rememberMe: boolean;\n } & Omit<Signup.Request.SignupWithEmail, \"deviceId\">): Promise<Signup.Response.SignupWithEmail & { profileId?: string }> => {\n const deviceId = await ensureDeviceIdStorage();\n const result = await auth.SignupWithEmail({\n ...params,\n deviceId,\n });\n const first = result.profiles?.find((p) => p.kind === ProfileKindEnum.FORGER) ?? result.profiles?.[0];\n if (!first) return result;\n const selected = await auth.SelectProfile({\n profileId: first.profileId,\n kind: first.kind,\n deviceId,\n });\n return { ...result, accessToken: selected.accessToken, refreshToken: selected.refreshToken, profileId: selected.profileId };\n },\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n if (result.profileId) {\n setCurrentProfileId(result.profileId);\n setCurrentProfileKind(ProfileKindEnum.FORGER);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n } else {\n setCurrentProfileId(EMPTY_PROFILE_ID);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSignup] error\"));\n },\n });\n};\n\nexport const useLoginWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { email: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithEmail({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLogin] error\"));\n },\n });\n};\n\nexport const useSelectProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ profileId, kind }: { profileId: string; kind: Login.ProfileKind }) =>\n auth.SelectProfile({\n profileId,\n kind,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (result?.accessToken) {\n setTokens({\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n });\n setCurrentProfileKind(variables.kind);\n if (result.profileId) setCurrentProfileId(result.profileId);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSelectProfile] error\"));\n },\n });\n};\n\nexport const usePatchProfile = (options?: { silent?: boolean }) => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const silent = safeOr(options?.silent, false);\n const { t } = useTranslation(\"pages.User.Profile.Edit\");\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfile) => auth.PatchProfile(kind, body),\n onSuccess: () => {\n if (!silent) systemEventEmitter.showSuccess(t(\"saveSuccess\", { defaultValue: \"Saved\" }));\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind });\n },\n onError: (error: AxiosError) => {\n if (!silent) systemEventEmitter.showError(getApiErrorMessage(error, \"[usePatchProfile] error\"));\n },\n });\n};\n\nexport const useUpdateProfileSettings = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfileSettings) => auth.PatchProfileSettings(kind, body),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateProfileSettings] error\"));\n },\n });\n};\n\nexport const useListProfiles = <K extends ProfileKindEnum>(kind: K) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.ListProfiles(kind, { limit: 50, offset: 0 }),\n AUTH_PROFILES(aID, kind),\n undefined,\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useCreateForgerProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateForgerProfile) => auth.CreateForgerProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.FORGER });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateForgerProfile] error\"));\n },\n });\n};\n\nexport const useCreateAuthorityProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateAuthorityProfile) => auth.CreateAuthorityProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.AUTHORITY });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateAuthorityProfile] error\"));\n },\n });\n};\n\nexport const useDeleteProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: ({ kind, profileId }: { kind: ProfileKindEnum; profileId: string }) => auth.DeleteProfile(kind, profileId),\n onSuccess: (_void, variables) => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: variables.kind });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteProfile] error\"));\n },\n });\n};\n\nexport const useConfirmProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileAvatar) => auth.ConfirmProfileAvatar(kind, body),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileAvatar] error\"));\n },\n });\n};\n\nexport const useClearProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: () => auth.ClearProfileAvatar(kind),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useClearProfileAvatar] error\"));\n },\n });\n};\n\nexport const useListEmails = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListEmails({ limit: 50, offset: 0 }), AUTH_EMAILS(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useListPhones = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListPhones({ limit: 50, offset: 0 }), AUTH_PHONES(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useCreateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreateEmail) => auth.CreateEmail(body),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"createEmailSuccess\", { defaultValue: \"Email added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateEmail] error\"));\n },\n });\n};\n\nexport const useSendEmailVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, lang }: { emailId: string; lang?: LanguageEnum }) => auth.SendEmailVerificationCode(emailId, { lang }),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendEmailVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, verificationCode }: { emailId: string; verificationCode: string }) =>\n auth.VerifyEmail(emailId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"verifyEmailSuccess\", { defaultValue: \"Email verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyEmail] error\"));\n },\n });\n};\n\nexport const useUpdateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, email }: { emailId: string; email: string }) => auth.UpdateEmail(emailId, { email }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"updateEmailSuccess\", { defaultValue: \"Email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateEmail] error\"));\n },\n });\n};\n\nexport const useSetPrimaryEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.SetPrimaryEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryEmailSuccess\", { defaultValue: \"Primary email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryEmail] error\"));\n },\n });\n};\n\nexport const useDeleteEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.DeleteEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"deleteEmailSuccess\", { defaultValue: \"Email removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteEmail] error\"));\n },\n });\n};\n\nexport const useSendChangePasswordVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.SendChangePasswordVerificationCode = {}) => auth.SendChangePasswordVerificationCode(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendChangePasswordVerificationCode] error\"));\n },\n });\n};\n\nexport const useChangePassword = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.ChangePassword) => auth.ChangePassword(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"changePasswordSuccess\", { defaultValue: \"Password updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useChangePassword] error\"));\n },\n });\n};\n\nexport const useConfirmProfileBackgrounds = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileBackgrounds) => auth.ConfirmProfileBackgrounds(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileBackgrounds] error\"));\n },\n });\n};\n\nexport { hasSelectedProfile, AuthStore, useAuthStore };\nexport { LanguageEnum, AuthSignupPlatformEnum };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","names":[],"sources":["../../src/hooks/auth.ts"],"sourcesContent":["/**\n * Auth hooks — 组件勿直接调 apis/auth\n */\nimport type { AxiosError } from \"axios\";\nimport type { CurrentProfileResult, Login, Profile, Signup } from \"nfx-ui/types\";\n\nimport { useEffect } from \"react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useAuthRepository } from \"nfx-ui/apis/repositories\";\nimport { AUTH_EMAILS, AUTH_ME, AUTH_PHONES, AUTH_PROFILES } from \"nfx-ui/constants\";\nimport { AuthSignupPlatformEnum, LanguageEnum, ProfileKindEnum } from \"nfx-ui/enums\";\nimport { authEventEmitter, authEvents } from \"nfx-ui/events/auth\";\nimport { systemEventEmitter } from \"nfx-ui/events/system\";\nimport {\n AuthStore,\n clearAuth,\n EMPTY_PROFILE_ID,\n hasSelectedProfile,\n setCurrentAccountId,\n setCurrentProfileId,\n setCurrentProfileKind,\n setIsAuthValid,\n setTokens,\n useAuthStore,\n} from \"nfx-ui/stores/auth\";\nimport { ensureDeviceIdStorage } from \"nfx-ui/stores/system\";\nimport { getApiErrorMessage } from \"nfx-ui/utils/apiError\";\nimport { pickProfile } from \"nfx-ui/utils/domain/account\";\nimport { useUnifiedQuery } from \"nfx-ui/utils/factory\";\nimport { safeOr, safeStringable } from \"nfx-ui/utils/safe\";\nimport { useTranslation } from \"react-i18next\";\n\nexport function useAuthQueryScope() {\n const aID = useAuthStore((s) => s.currentAccountId);\n const pID = useAuthStore((s) => s.currentProfileId);\n const isAuthValid = useAuthStore((s) => s.isAuthValid);\n const kind = useAuthStore((s) => s.currentProfileKind);\n return { aID, pID, isAuthValid, kind, profileScope: kind };\n}\n\nfunction useLogoutOnAuthError(isError: boolean, aID: string) {\n useEffect(() => {\n if (!isError || !AuthStore.getState().isAuthValid) return;\n if (!hasSelectedProfile(AuthStore.getState().currentProfileId)) return;\n authEventEmitter.emit(authEvents.LOGOUT, aID);\n clearAuth();\n }, [isError, aID]);\n}\n\nexport function useCurrentProfile(): CurrentProfileResult {\n const auth = useAuthRepository();\n const { aID, pID, isAuthValid, kind } = useAuthQueryScope();\n const result = useUnifiedQuery(\n ({ kind }: { kind: ProfileKindEnum }) => auth.GetCurrentFullAccountInformationWithProfile(kind),\n AUTH_ME(aID, pID),\n { kind },\n { enabled: isAuthValid && hasSelectedProfile(pID) },\n );\n useLogoutOnAuthError(result.isError, aID);\n return {\n kind,\n data: result.data,\n profile: pickProfile(kind, result.data),\n isLoading: result.isLoading,\n isError: result.isError,\n refetch: result.refetch,\n } as CurrentProfileResult;\n}\n\nexport const useSendVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (params: Signup.Request.SendVerificationCode) => auth.SendVerificationCode(params),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendVerificationCode] error\"));\n },\n });\n};\n\nexport const useSignupWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({\n rememberMe,\n ...params\n }: {\n rememberMe: boolean;\n } & Omit<Signup.Request.SignupWithEmail, \"deviceId\">): Promise<Signup.Response.SignupWithEmail & { profileId?: string }> => {\n const deviceId = await ensureDeviceIdStorage();\n const result = await auth.SignupWithEmail({\n ...params,\n deviceId,\n });\n const first = result.profiles?.find((p) => p.kind === ProfileKindEnum.FORGER) ?? result.profiles?.[0];\n if (!first) return result;\n const selected = await auth.SelectProfile({\n profileId: first.profileId,\n kind: first.kind,\n deviceId,\n });\n return { ...result, accessToken: selected.accessToken, refreshToken: selected.refreshToken, profileId: selected.profileId };\n },\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n if (result.profileId) {\n setCurrentProfileId(result.profileId);\n setCurrentProfileKind(ProfileKindEnum.FORGER);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n } else {\n setCurrentProfileId(EMPTY_PROFILE_ID);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSignup] error\"));\n },\n });\n};\n\nexport const useLoginWithEmail = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ rememberMe, ...params }: { email: string; password: string; rememberMe: boolean }) =>\n auth.LoginWithEmail({\n ...params,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (!result?.accessToken) return;\n setCurrentProfileId(EMPTY_PROFILE_ID);\n setTokens(\n {\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n },\n { rememberMe: variables.rememberMe },\n );\n setIsAuthValid(true);\n if (result.accountId) setCurrentAccountId(result.accountId);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useLogin] error\"));\n },\n });\n};\n\nexport const useSelectProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: async ({ profileId, kind }: { profileId: string; kind: Login.ProfileKind }) =>\n auth.SelectProfile({\n profileId,\n kind,\n deviceId: await ensureDeviceIdStorage(),\n }),\n onSuccess: (result, variables) => {\n if (result?.accessToken) {\n setTokens({\n accessToken: result.accessToken,\n refreshToken: safeStringable(result.refreshToken),\n });\n setCurrentProfileKind(variables.kind);\n if (result.profileId) setCurrentProfileId(result.profileId);\n authEventEmitter.emit(authEvents.LOGIN_SUCCESS, result.accountId);\n }\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSelectProfile] error\"));\n },\n });\n};\n\nexport const usePatchProfile = (options?: { silent?: boolean }) => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n const silent = safeOr(options?.silent, false);\n const { t } = useTranslation(\"pages.User.Profile.Edit\");\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfile) => auth.PatchProfile(kind, body),\n onSuccess: () => {\n if (!silent) systemEventEmitter.showSuccess(t(\"saveSuccess\", { defaultValue: \"Saved\" }));\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind });\n },\n onError: (error: AxiosError) => {\n if (!silent) systemEventEmitter.showError(getApiErrorMessage(error, \"[usePatchProfile] error\"));\n },\n });\n};\n\nexport const useUpdateProfileSettings = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.PatchProfileSettings) => auth.PatchProfileSettings(kind, body),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateProfileSettings] error\"));\n },\n });\n};\n\nexport const useListProfiles = <K extends ProfileKindEnum>(kind: K) => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(\n () => auth.ListProfiles(kind, { limit: 50, offset: 0 }),\n AUTH_PROFILES(aID, kind),\n undefined,\n { enabled: isAuthValid && Boolean(aID) },\n );\n};\n\nexport const useCreateForgerProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateForgerProfile) => auth.CreateForgerProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.FORGER });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateForgerProfile] error\"));\n },\n });\n};\n\nexport const useCreateAuthorityProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: (body: Login.Request.CreateAuthorityProfile) => auth.CreateAuthorityProfile(body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: ProfileKindEnum.AUTHORITY });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateAuthorityProfile] error\"));\n },\n });\n};\n\nexport const useDeleteProfile = () => {\n const auth = useAuthRepository();\n return useMutation({\n mutationFn: ({ kind, profileId }: { kind: ProfileKindEnum; profileId: string }) => auth.DeleteProfile(kind, profileId),\n onSuccess: (_void, variables) => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.invalidateProfiles({ aID, kind: variables.kind });\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteProfile] error\"));\n },\n });\n};\n\nexport const useConfirmProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileAvatar) => auth.ConfirmProfileAvatar(kind, body),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileAvatar] error\"));\n },\n });\n};\n\nexport const useClearProfileAvatar = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: () => auth.ClearProfileAvatar(kind),\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useClearProfileAvatar] error\"));\n },\n });\n};\n\nexport const useListEmails = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListEmails({ limit: 50, offset: 0 }), AUTH_EMAILS(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useListPhones = () => {\n const auth = useAuthRepository();\n const { aID, isAuthValid } = useAuthQueryScope();\n return useUnifiedQuery(() => auth.ListPhones({ limit: 50, offset: 0 }), AUTH_PHONES(aID), undefined, {\n enabled: isAuthValid && Boolean(aID),\n });\n};\n\nexport const useCreateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.CreateEmail) => auth.CreateEmail(body),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"createEmailSuccess\", { defaultValue: \"Email added.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useCreateEmail] error\"));\n },\n });\n};\n\nexport const useSendEmailVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, lang }: { emailId: string; lang?: LanguageEnum }) => auth.SendEmailVerificationCode(emailId, { lang }),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendEmailVerificationCode] error\"));\n },\n });\n};\n\nexport const useVerifyEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, verificationCode }: { emailId: string; verificationCode: string }) =>\n auth.VerifyEmail(emailId, { verificationCode }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"verifyEmailSuccess\", { defaultValue: \"Email verified.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useVerifyEmail] error\"));\n },\n });\n};\n\nexport const useUpdateEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: ({ emailId, email }: { emailId: string; email: string }) => auth.UpdateEmail(emailId, { email }),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"updateEmailSuccess\", { defaultValue: \"Email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useUpdateEmail] error\"));\n },\n });\n};\n\nexport const useSetPrimaryEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.SetPrimaryEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, accountId);\n systemEventEmitter.showSuccess(t(\"setPrimaryEmailSuccess\", { defaultValue: \"Primary email updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSetPrimaryEmail] error\"));\n },\n });\n};\n\nexport const useDeleteEmail = () => {\n const auth = useAuthRepository();\n const accountId = AuthStore.getState().currentAccountId;\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (emailId: string) => auth.DeleteEmail(emailId),\n onSuccess: () => {\n authEventEmitter.invalidateEmails(accountId);\n systemEventEmitter.showSuccess(t(\"deleteEmailSuccess\", { defaultValue: \"Email removed.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useDeleteEmail] error\"));\n },\n });\n};\n\nexport const useSendChangePasswordVerificationCode = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.SendChangePasswordVerificationCode = {}) => auth.SendChangePasswordVerificationCode(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"sendVerificationCodeSuccess\", { defaultValue: \"Code sent\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useSendChangePasswordVerificationCode] error\"));\n },\n });\n};\n\nexport const useChangePassword = () => {\n const auth = useAuthRepository();\n const { t } = useTranslation(\"hooks\", { keyPrefix: \"account\" });\n return useMutation({\n mutationFn: (body: Login.Request.ChangePassword) => auth.ChangePassword(body),\n onSuccess: () => {\n systemEventEmitter.showSuccess(t(\"changePasswordSuccess\", { defaultValue: \"Password updated.\" }));\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useChangePassword] error\"));\n },\n });\n};\n\nexport const useConfirmProfileBackgrounds = () => {\n const auth = useAuthRepository();\n const { kind } = useAuthQueryScope();\n return useMutation({\n mutationFn: (body: Profile.Request.ConfirmProfileBackgrounds) => auth.ConfirmProfileBackgrounds(kind, body),\n onSuccess: () => {\n const aID = AuthStore.getState().currentAccountId;\n authEventEmitter.emit(authEvents.UPDATE_ACCOUNT_SUCCESS, aID);\n },\n onError: (error: AxiosError) => {\n systemEventEmitter.showError(getApiErrorMessage(error, \"[useConfirmProfileBackgrounds] error\"));\n },\n });\n};\n\nexport { hasSelectedProfile, AuthStore, useAuthStore };\nexport { LanguageEnum, AuthSignupPlatformEnum };\n"],"mappings":";;;;;;;;;;;;;;;;AAgCA,SAAgB,IAAoB;CAClC,IAAM,IAAM,GAAc,MAAM,EAAE,gBAAgB,GAC5C,IAAM,GAAc,MAAM,EAAE,gBAAgB,GAC5C,IAAc,GAAc,MAAM,EAAE,WAAW,GAC/C,IAAO,GAAc,MAAM,EAAE,kBAAkB;CACrD,OAAO;EAAE;EAAK;EAAK;EAAa;EAAM,cAAc;CAAK;AAC3D;AAEA,SAAS,EAAqB,GAAkB,GAAa;CAC3D,QAAgB;EACV,AAAC,KAAY,EAAU,SAAS,CAAC,CAAC,eACjC,EAAmB,EAAU,SAAS,CAAC,CAAC,gBAAgB,MAC7D,EAAiB,KAAK,EAAW,QAAQ,CAAG,GAC5C,EAAU;CACZ,GAAG,CAAC,GAAS,CAAG,CAAC;AACnB;AAEA,SAAgB,IAA0C;CACxD,IAAM,IAAO,EAAkB,GACzB,EAAE,QAAK,QAAK,gBAAa,YAAS,EAAkB,GACpD,IAAS,GACZ,EAAE,cAAsC,EAAK,4CAA4C,CAAI,GAC9F,EAAQ,GAAK,CAAG,GAChB,EAAE,QAAK,GACP,EAAE,SAAS,KAAe,EAAmB,CAAG,EAAE,CACpD;CAEA,OADA,EAAqB,EAAO,SAAS,CAAG,GACjC;EACL;EACA,MAAM,EAAO;EACb,SAAS,EAAY,GAAM,EAAO,IAAI;EACtC,WAAW,EAAO;EAClB,SAAS,EAAO;EAChB,SAAS,EAAO;CAClB;AACF;AAEA,IAAa,UAAgC;CAC3C,IAAM,IAAO,EAAkB,GACzB,EAAE,MAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,MAAgD,EAAK,qBAAqB,CAAM;EAC7F,iBAAiB;GACf,EAAmB,YAAY,EAAE,+BAA+B,EAAE,cAAc,YAAY,CAAC,CAAC;EAChG;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,iCAAiC,CAAC;EAC3F;CACF,CAAC;AACH,GAEa,UAA2B;CACtC,IAAM,IAAO,EAAkB;CAC/B,OAAO,EAAY;EACjB,YAAY,OAAO,EACjB,eACA,GAAG,QAGuH;GAC1H,IAAM,IAAW,MAAM,EAAsB,GACvC,IAAS,MAAM,EAAK,gBAAgB;IACxC,GAAG;IACH;GACF,CAAC,GACK,IAAQ,EAAO,UAAU,MAAM,MAAM,EAAE,SAAS,EAAgB,MAAM,KAAK,EAAO,WAAW;GACnG,IAAI,CAAC,GAAO,OAAO;GACnB,IAAM,IAAW,MAAM,EAAK,cAAc;IACxC,WAAW,EAAM;IACjB,MAAM,EAAM;IACZ;GACF,CAAC;GACD,OAAO;IAAE,GAAG;IAAQ,aAAa,EAAS;IAAa,cAAc,EAAS;IAAc,WAAW,EAAS;GAAU;EAC5H;EACA,YAAY,GAAQ,MAAc;GAC3B,GAAQ,gBACb,EACE;IACE,aAAa,EAAO;IACpB,cAAc,EAAe,EAAO,YAAY;GAClD,GACA,EAAE,YAAY,EAAU,WAAW,CACrC,GACA,EAAe,EAAI,GACf,EAAO,aAAW,EAAoB,EAAO,SAAS,GACtD,EAAO,aACT,EAAoB,EAAO,SAAS,GACpC,EAAsB,EAAgB,MAAM,GAC5C,EAAiB,KAAK,EAAW,eAAe,EAAO,SAAS,KAEhE,EAAoB,CAAgB;EAExC;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,mBAAmB,CAAC;EAC7E;CACF,CAAC;AACH,GAEa,UAA0B;CACrC,IAAM,IAAO,EAAkB;CAC/B,OAAO,EAAY;EACjB,YAAY,OAAO,EAAE,eAAY,GAAG,QAClC,EAAK,eAAe;GAClB,GAAG;GACH,UAAU,MAAM,EAAsB;EACxC,CAAC;EACH,YAAY,GAAQ,MAAc;GAC3B,GAAQ,gBACb,EAAoB,CAAgB,GACpC,EACE;IACE,aAAa,EAAO;IACpB,cAAc,EAAe,EAAO,YAAY;GAClD,GACA,EAAE,YAAY,EAAU,WAAW,CACrC,GACA,EAAe,EAAI,GACf,EAAO,aAAW,EAAoB,EAAO,SAAS;EAC5D;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,kBAAkB,CAAC;EAC5E;CACF,CAAC;AACH,GAEa,UAAyB;CACpC,IAAM,IAAO,EAAkB;CAC/B,OAAO,EAAY;EACjB,YAAY,OAAO,EAAE,cAAW,cAC9B,EAAK,cAAc;GACjB;GACA;GACA,UAAU,MAAM,EAAsB;EACxC,CAAC;EACH,YAAY,GAAQ,MAAc;GAChC,AAAI,GAAQ,gBACV,EAAU;IACR,aAAa,EAAO;IACpB,cAAc,EAAe,EAAO,YAAY;GAClD,CAAC,GACD,EAAsB,EAAU,IAAI,GAChC,EAAO,aAAW,EAAoB,EAAO,SAAS,GAC1D,EAAiB,KAAK,EAAW,eAAe,EAAO,SAAS;EAEpE;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,0BAA0B,CAAC;EACpF;CACF,CAAC;AACH,GAEa,KAAmB,MAAmC;CACjE,IAAM,IAAO,EAAkB,GACzB,EAAE,YAAS,EAAkB,GAC7B,IAAS,EAAO,GAAS,QAAQ,EAAK,GACtC,EAAE,SAAM,EAAe,yBAAyB;CACtD,OAAO,EAAY;EACjB,aAAa,MAAuC,EAAK,aAAa,GAAM,CAAI;EAChF,iBAAiB;GACf,AAAK,KAAQ,EAAmB,YAAY,EAAE,eAAe,EAAE,cAAc,QAAQ,CAAC,CAAC;GACvF,IAAM,IAAM,EAAU,SAAS,CAAC,CAAC;GACjC,EAAiB,mBAAmB;IAAE;IAAK;GAAK,CAAC;EACnD;EACA,UAAU,MAAsB;GAC9B,AAAK,KAAQ,EAAmB,UAAU,EAAmB,GAAO,yBAAyB,CAAC;EAChG;CACF,CAAC;AACH,GAEa,UAAiC;CAC5C,IAAM,IAAO,EAAkB,GACzB,EAAE,YAAS,EAAkB;CACnC,OAAO,EAAY;EACjB,aAAa,MAA+C,EAAK,qBAAqB,GAAM,CAAI;EAChG,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,kCAAkC,CAAC;EAC5F;CACF,CAAC;AACH,GAEa,KAA8C,MAAY;CACrE,IAAM,IAAO,EAAkB,GACzB,EAAE,QAAK,mBAAgB,EAAkB;CAC/C,OAAO,QACC,EAAK,aAAa,GAAM;EAAE,OAAO;EAAI,QAAQ;CAAE,CAAC,GACtD,EAAc,GAAK,CAAI,GACvB,KAAA,GACA,EAAE,SAAS,KAAe,EAAQ,EAAK,CACzC;AACF,GAEa,UAA+B;CAC1C,IAAM,IAAO,EAAkB;CAC/B,OAAO,EAAY;EACjB,aAAa,MAA4C,EAAK,oBAAoB,CAAI;EACtF,iBAAiB;GACf,IAAM,IAAM,EAAU,SAAS,CAAC,CAAC;GACjC,EAAiB,mBAAmB;IAAE;IAAK,MAAM,EAAgB;GAAO,CAAC;EAC3E;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,gCAAgC,CAAC;EAC1F;CACF,CAAC;AACH,GAEa,UAAkC;CAC7C,IAAM,IAAO,EAAkB;CAC/B,OAAO,EAAY;EACjB,aAAa,MAA+C,EAAK,uBAAuB,CAAI;EAC5F,iBAAiB;GACf,IAAM,IAAM,EAAU,SAAS,CAAC,CAAC;GACjC,EAAiB,mBAAmB;IAAE;IAAK,MAAM,EAAgB;GAAU,CAAC;EAC9E;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,mCAAmC,CAAC;EAC7F;CACF,CAAC;AACH,GAEa,UAAyB;CACpC,IAAM,IAAO,EAAkB;CAC/B,OAAO,EAAY;EACjB,aAAa,EAAE,SAAM,mBAA8D,EAAK,cAAc,GAAM,CAAS;EACrH,YAAY,GAAO,MAAc;GAC/B,IAAM,IAAM,EAAU,SAAS,CAAC,CAAC;GACjC,EAAiB,mBAAmB;IAAE;IAAK,MAAM,EAAU;GAAK,CAAC;EACnE;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,0BAA0B,CAAC;EACpF;CACF,CAAC;AACH,GAEa,UAAgC;CAC3C,IAAM,IAAO,EAAkB,GACzB,EAAE,YAAS,EAAkB;CACnC,OAAO,EAAY;EACjB,aAAa,MAA+C,EAAK,qBAAqB,GAAM,CAAI;EAChG,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,iCAAiC,CAAC;EAC3F;CACF,CAAC;AACH,GAEa,UAA8B;CACzC,IAAM,IAAO,EAAkB,GACzB,EAAE,YAAS,EAAkB;CACnC,OAAO,EAAY;EACjB,kBAAkB,EAAK,mBAAmB,CAAI;EAC9C,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,+BAA+B,CAAC;EACzF;CACF,CAAC;AACH,GAEa,UAAsB;CACjC,IAAM,IAAO,EAAkB,GACzB,EAAE,QAAK,mBAAgB,EAAkB;CAC/C,OAAO,QAAsB,EAAK,WAAW;EAAE,OAAO;EAAI,QAAQ;CAAE,CAAC,GAAG,EAAY,CAAG,GAAG,KAAA,GAAW,EACnG,SAAS,KAAe,EAAQ,EAClC,CAAC;AACH,GAEa,UAAsB;CACjC,IAAM,IAAO,EAAkB,GACzB,EAAE,QAAK,mBAAgB,EAAkB;CAC/C,OAAO,QAAsB,EAAK,WAAW;EAAE,OAAO;EAAI,QAAQ;CAAE,CAAC,GAAG,EAAY,CAAG,GAAG,KAAA,GAAW,EACnG,SAAS,KAAe,EAAQ,EAClC,CAAC;AACH,GAEa,UAAuB;CAClC,IAAM,IAAO,EAAkB,GACzB,IAAY,EAAU,SAAS,CAAC,CAAC,kBACjC,EAAE,SAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,MAAoC,EAAK,YAAY,CAAI;EACtE,iBAAiB;GAEf,AADA,EAAiB,iBAAiB,CAAS,GAC3C,EAAmB,YAAY,EAAE,sBAAsB,EAAE,cAAc,eAAe,CAAC,CAAC;EAC1F;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,wBAAwB,CAAC;EAClF;CACF,CAAC;AACH,GAEa,UAAqC;CAChD,IAAM,IAAO,EAAkB,GACzB,EAAE,MAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,EAAE,YAAS,cAAqD,EAAK,0BAA0B,GAAS,EAAE,QAAK,CAAC;EAC7H,iBAAiB;GACf,EAAmB,YAAY,EAAE,+BAA+B,EAAE,cAAc,YAAY,CAAC,CAAC;EAChG;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,sCAAsC,CAAC;EAChG;CACF,CAAC;AACH,GAEa,UAAuB;CAClC,IAAM,IAAO,EAAkB,GACzB,IAAY,EAAU,SAAS,CAAC,CAAC,kBACjC,EAAE,SAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,EAAE,YAAS,0BACtB,EAAK,YAAY,GAAS,EAAE,oBAAiB,CAAC;EAChD,iBAAiB;GAEf,AADA,EAAiB,iBAAiB,CAAS,GAC3C,EAAmB,YAAY,EAAE,sBAAsB,EAAE,cAAc,kBAAkB,CAAC,CAAC;EAC7F;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,wBAAwB,CAAC;EAClF;CACF,CAAC;AACH,GAEa,UAAuB;CAClC,IAAM,IAAO,EAAkB,GACzB,IAAY,EAAU,SAAS,CAAC,CAAC,kBACjC,EAAE,SAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,EAAE,YAAS,eAAgD,EAAK,YAAY,GAAS,EAAE,SAAM,CAAC;EAC3G,iBAAiB;GAEf,AADA,EAAiB,iBAAiB,CAAS,GAC3C,EAAmB,YAAY,EAAE,sBAAsB,EAAE,cAAc,iBAAiB,CAAC,CAAC;EAC5F;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,wBAAwB,CAAC;EAClF;CACF,CAAC;AACH,GAEa,UAA2B;CACtC,IAAM,IAAO,EAAkB,GACzB,IAAY,EAAU,SAAS,CAAC,CAAC,kBACjC,EAAE,SAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,MAAoB,EAAK,gBAAgB,CAAO;EAC7D,iBAAiB;GAGf,AAFA,EAAiB,iBAAiB,CAAS,GAC3C,EAAiB,KAAK,EAAW,wBAAwB,CAAS,GAClE,EAAmB,YAAY,EAAE,0BAA0B,EAAE,cAAc,yBAAyB,CAAC,CAAC;EACxG;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,4BAA4B,CAAC;EACtF;CACF,CAAC;AACH,GAEa,UAAuB;CAClC,IAAM,IAAO,EAAkB,GACzB,IAAY,EAAU,SAAS,CAAC,CAAC,kBACjC,EAAE,SAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,MAAoB,EAAK,YAAY,CAAO;EACzD,iBAAiB;GAEf,AADA,EAAiB,iBAAiB,CAAS,GAC3C,EAAmB,YAAY,EAAE,sBAAsB,EAAE,cAAc,iBAAiB,CAAC,CAAC;EAC5F;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,wBAAwB,CAAC;EAClF;CACF,CAAC;AACH,GAEa,UAA8C;CACzD,IAAM,IAAO,EAAkB,GACzB,EAAE,MAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,IAAyD,CAAC,MAAM,EAAK,mCAAmC,CAAI;EACzH,iBAAiB;GACf,EAAmB,YAAY,EAAE,+BAA+B,EAAE,cAAc,YAAY,CAAC,CAAC;EAChG;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,+CAA+C,CAAC;EACzG;CACF,CAAC;AACH,GAEa,WAA0B;CACrC,IAAM,IAAO,EAAkB,GACzB,EAAE,MAAM,EAAe,SAAS,EAAE,WAAW,UAAU,CAAC;CAC9D,OAAO,EAAY;EACjB,aAAa,MAAuC,EAAK,eAAe,CAAI;EAC5E,iBAAiB;GACf,EAAmB,YAAY,EAAE,yBAAyB,EAAE,cAAc,oBAAoB,CAAC,CAAC;EAClG;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,2BAA2B,CAAC;EACrF;CACF,CAAC;AACH,GAEa,WAAqC;CAChD,IAAM,IAAO,EAAkB,GACzB,EAAE,YAAS,EAAkB;CACnC,OAAO,EAAY;EACjB,aAAa,MAAoD,EAAK,0BAA0B,GAAM,CAAI;EAC1G,iBAAiB;GACf,IAAM,IAAM,EAAU,SAAS,CAAC,CAAC;GACjC,EAAiB,KAAK,EAAW,wBAAwB,CAAG;EAC9D;EACA,UAAU,MAAsB;GAC9B,EAAmB,UAAU,EAAmB,GAAO,sCAAsC,CAAC;EAChG;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GACd,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GACd,MAAM,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preference.d.ts","sourceRoot":"","sources":["../../src/hooks/preference.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"preference.d.ts","sourceRoot":"","sources":["../../src/hooks/preference.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAa3D,6EAA6E;AAC7E,wBAAgB,qBAAqB,IAAI,eAAe,CAcvD;AAUD,KAAK,gBAAgB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAG5E,0DAA0D;AAC1D,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAE9E;AAED,yCAAyC;AACzC,eAAO,MAAM,wBAAwB,GAAI,MAAM;IAC7C,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC9C,SAWA,CAAC;AAEF,eAAO,MAAM,iBAAiB;4BACG,eAAe;CAS/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preference.js","names":[],"sources":["../../src/hooks/preference.ts"],"sourcesContent":["/**\n * Shared preference hooks — appearance resolve + host-configured server sync.\n */\nimport type { PreferencePatch, ResolvedPreference } from \"
|
|
1
|
+
{"version":3,"file":"preference.js","names":[],"sources":["../../src/hooks/preference.ts"],"sourcesContent":["/**\n * Shared preference hooks — appearance resolve + host-configured server sync.\n */\nimport type { PreferencePatch, ResolvedPreference } from \"nfx-ui/stores/preference\";\nimport type { RadixAppearance } from \"nfx-ui/themes/radix\";\n\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { AppearanceEnum } from \"nfx-ui/enums/theme\";\nimport {\n PreferenceStore,\n replacePreference,\n setPreference,\n usePreferenceStore,\n} from \"nfx-ui/stores/preference\";\nimport { readSystemRadixAppearance, resolveRadixAppearance } from \"nfx-ui/themes/radix\";\n\n/** 将 theme.appearance(含 system)解析为当前生效的 Radix light|dark,并在跟随系统时响应 OS 切换。 */\nexport function useResolvedAppearance(): RadixAppearance {\n const appearance = usePreferenceStore((s) => s.theme.appearance);\n const [systemAppearance, setSystemAppearance] = useState<RadixAppearance>(readSystemRadixAppearance);\n\n useEffect(() => {\n if (appearance !== AppearanceEnum.SYSTEM) return;\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const onChange = () => setSystemAppearance(mq.matches ? AppearanceEnum.DARK : AppearanceEnum.LIGHT);\n onChange();\n mq.addEventListener(\"change\", onChange);\n return () => mq.removeEventListener(\"change\", onChange);\n }, [appearance]);\n\n return appearance === AppearanceEnum.SYSTEM ? systemAppearance : resolveRadixAppearance(appearance);\n}\n\nfunction patchHasServerField(patch: PreferencePatch): boolean {\n if (patch.language !== undefined) return true;\n if (patch.theme && Object.keys(patch.theme).length > 0) return true;\n if (patch.layoutMode !== undefined) return true;\n if (patch.dashboardBackground !== undefined) return true;\n return false;\n}\n\ntype PreferenceSyncFn = (state: ResolvedPreference) => void | Promise<void>;\nlet preferenceSync: PreferenceSyncFn | undefined;\n\n/** Hosts register persistence here — no CityPulso API. */\nexport function configurePreferenceSync(fn: PreferenceSyncFn | undefined): void {\n preferenceSync = fn;\n}\n\n/** 登录后用服务端偏好覆盖本地;无服务端数据时保留本地 persist。 */\nexport const useApplyPreferenceOnLoad = (args: {\n isAuthValid: boolean;\n applyKey?: string | null;\n serverPreference?: ResolvedPreference | null;\n}) => {\n const { isAuthValid, applyKey, serverPreference } = args;\n const lastAppliedKey = useRef<string | null>(null);\n\n useEffect(() => {\n if (!isAuthValid || !serverPreference) return;\n const key = applyKey ?? \"default\";\n if (lastAppliedKey.current === key) return;\n lastAppliedKey.current = key;\n replacePreference(serverPreference);\n }, [isAuthValid, applyKey, serverPreference]);\n};\n\nexport const useSyncPreference = () => {\n const syncPreference = (patch: PreferencePatch) => {\n setPreference(patch);\n if (!patchHasServerField(patch)) return;\n void Promise.resolve(preferenceSync?.(PreferenceStore.getState())).catch((error) => {\n console.error(\"Failed to sync preference:\", error);\n });\n };\n\n return { syncPreference };\n};\n"],"mappings":";;;;;AAkBA,SAAgB,IAAyC;CACvD,IAAM,IAAa,GAAoB,MAAM,EAAE,MAAM,UAAU,GACzD,CAAC,GAAkB,KAAuB,EAA0B,CAAyB;CAWnG,OATA,QAAgB;EACd,IAAI,MAAe,EAAe,QAAQ;EAC1C,IAAM,IAAK,OAAO,WAAW,8BAA8B,GACrD,UAAiB,EAAoB,EAAG,UAAU,EAAe,OAAO,EAAe,KAAK;EAGlG,OAFA,EAAS,GACT,EAAG,iBAAiB,UAAU,CAAQ,SACzB,EAAG,oBAAoB,UAAU,CAAQ;CACxD,GAAG,CAAC,CAAU,CAAC,GAER,MAAe,EAAe,SAAS,IAAmB,EAAuB,CAAU;AACpG;AAEA,SAAS,EAAoB,GAAiC;CAK5D,OADA,GAHI,EAAM,aAAa,KAAA,KACnB,EAAM,SAAS,OAAO,KAAK,EAAM,KAAK,CAAC,CAAC,SAAS,KACjD,EAAM,eAAe,KAAA,KACrB,EAAM,wBAAwB,KAAA;AAEpC;AAGA,IAAI;AAGJ,SAAgB,EAAwB,GAAwC;CAC9E,IAAiB;AACnB;AAGA,IAAa,KAA4B,MAInC;CACJ,IAAM,EAAE,gBAAa,aAAU,wBAAqB,GAC9C,IAAiB,EAAsB,IAAI;CAEjD,QAAgB;EACd,IAAI,CAAC,KAAe,CAAC,GAAkB;EACvC,IAAM,IAAM,KAAY;EACpB,EAAe,YAAY,MAC/B,EAAe,UAAU,GACzB,EAAkB,CAAgB;CACpC,GAAG;EAAC;EAAa;EAAU;CAAgB,CAAC;AAC9C,GAEa,WASJ,EAAE,iBARe,MAA2B;CACjD,EAAc,CAAK,GACd,EAAoB,CAAK,KAC9B,QAAa,QAAQ,IAAiB,EAAgB,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,MAAU;EAClF,QAAQ,MAAM,8BAA8B,CAAK;CACnD,CAAC;AACH,EAEwB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLanguageLabel.d.ts","sourceRoot":"","sources":["../../../src/languages/hooks/useLanguageLabel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"useLanguageLabel.d.ts","sourceRoot":"","sources":["../../../src/languages/hooks/useLanguageLabel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAWxC,wBAAgB,gBAAgB,IAAI;IAClC,sBAAsB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAC;CACxD,CAQA;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAOjE;AAED,iBAAS,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEtD;AAED,wBAAgB,YAAY,IAAI;IAC9B,kBAAkB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC;CAChD,CAEA;AAED,OAAO,EAAE,sBAAsB,IAAI,kBAAkB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLanguageLabel.js","names":[],"sources":["../../../src/languages/hooks/useLanguageLabel.ts"],"sourcesContent":["import i18n from \"i18next\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { BaseEnum } from \"
|
|
1
|
+
{"version":3,"file":"useLanguageLabel.js","names":[],"sources":["../../../src/languages/hooks/useLanguageLabel.ts"],"sourcesContent":["import i18n from \"i18next\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { BaseEnum } from \"nfx-ui/enums/theme\";\nimport { LanguageEnum } from \"../types\";\n\nfunction getLanguageI18nKey(lang: LanguageEnum): string {\n const keyMap: Record<LanguageEnum, string> = {\n [LanguageEnum.EN]: \"languageSwitcher.english\",\n [LanguageEnum.ZH]: \"languageSwitcher.chinese\",\n [LanguageEnum.FR]: \"languageSwitcher.french\",\n };\n return keyMap[lang];\n}\n\nexport function useLanguageLabel(): {\n getLanguageDisplayName: (lang: LanguageEnum) => string;\n} {\n const { t } = useTranslation(\"language\");\n const getLanguageDisplayName = (lang: LanguageEnum): string =>\n t(getLanguageI18nKey(lang), {\n defaultValue: lang,\n });\n\n return { getLanguageDisplayName };\n}\n\nexport function getLanguageDisplayName(lang: LanguageEnum): string {\n const fallbackMap: Record<LanguageEnum, string> = {\n [LanguageEnum.EN]: \"English\",\n [LanguageEnum.ZH]: \"中文\",\n [LanguageEnum.FR]: \"Français\",\n };\n return fallbackMap[lang];\n}\n\nfunction getBaseDisplayNameImpl(base: BaseEnum): string {\n return i18n.t(\"baseSwitcher.\" + base, { ns: \"theme\", defaultValue: base });\n}\n\nexport function useBaseLabel(): {\n getBaseDisplayName: (base: BaseEnum) => string;\n} {\n return { getBaseDisplayName: getBaseDisplayNameImpl };\n}\n\nexport { getBaseDisplayNameImpl as getBaseDisplayName };\n"],"mappings":";;;;AAMA,SAAS,EAAmB,GAA4B;CAMtD,OAAO;GAJJ,EAAa,KAAK;GAClB,EAAa,KAAK;GAClB,EAAa,KAAK;CAEd,EAAO;AAChB;AAEA,SAAgB,IAEd;CACA,IAAM,EAAE,SAAM,EAAe,UAAU;CAMvC,OAAO,EAAE,yBALuB,MAC9B,EAAE,EAAmB,CAAI,GAAG,EAC1B,cAAc,EAChB,CAAC,EAE6B;AAClC;AAEA,SAAgB,EAAuB,GAA4B;CAMjE,OAAO;GAJJ,EAAa,KAAK;GAClB,EAAa,KAAK;GAClB,EAAa,KAAK;CAEd,EAAY;AACrB;AAEA,SAAS,EAAuB,GAAwB;CACtD,OAAO,EAAK,EAAE,kBAAkB,GAAM;EAAE,IAAI;EAAS,cAAc;CAAK,CAAC;AAC3E;AAEA,SAAgB,IAEd;CACA,OAAO,EAAE,oBAAoB,EAAuB;AACtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayoutLabel.d.ts","sourceRoot":"","sources":["../../../src/languages/hooks/useLayoutLabel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"useLayoutLabel.d.ts","sourceRoot":"","sources":["../../../src/languages/hooks/useLayoutLabel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAM1D,iBAAS,wBAAwB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED,wBAAgB,cAAc,IAAI;IAAE,oBAAoB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,MAAM,CAAA;CAAE,CAG3F;AAED,OAAO,EAAE,wBAAwB,IAAI,oBAAoB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayoutLabel.js","names":[],"sources":["../../../src/languages/hooks/useLayoutLabel.ts"],"sourcesContent":["/**\n * 返回 { getLayoutDisplayName },便于扩展;getLayoutDisplayName 可传给 SlideDownSwitcher 的 getDisplayName。\n * Returns { getLayoutDisplayName } for extensibility; pass to SlideDownSwitcher getDisplayName.\n */\nimport type { LayoutModeEnum } from \"
|
|
1
|
+
{"version":3,"file":"useLayoutLabel.js","names":[],"sources":["../../../src/languages/hooks/useLayoutLabel.ts"],"sourcesContent":["/**\n * 返回 { getLayoutDisplayName },便于扩展;getLayoutDisplayName 可传给 SlideDownSwitcher 的 getDisplayName。\n * Returns { getLayoutDisplayName } for extensibility; pass to SlideDownSwitcher getDisplayName.\n */\nimport type { LayoutModeEnum } from \"nfx-ui/enums/layout\";\n\nimport { useCallback, useMemo } from \"react\";\n\nimport i18n from \"../languages/i18n\";\n\nfunction getLayoutDisplayNameImpl(mode: LayoutModeEnum): string {\n return i18n.t(\"layoutSwitcher.\" + mode, { ns: \"layout\", defaultValue: mode });\n}\n\nexport function useLayoutLabel(): { getLayoutDisplayName: (mode: LayoutModeEnum) => string } {\n const getLayoutDisplayName = useCallback(getLayoutDisplayNameImpl, []);\n return useMemo(() => ({ getLayoutDisplayName }), [getLayoutDisplayName]);\n}\n\nexport { getLayoutDisplayNameImpl as getLayoutDisplayName };\n"],"mappings":";;;AAUA,SAAS,EAAyB,GAA8B;CAC9D,OAAO,EAAK,EAAE,oBAAoB,GAAM;EAAE,IAAI;EAAU,cAAc;CAAK,CAAC;AAC9E;AAEA,SAAgB,IAA6E;CAC3F,IAAM,IAAuB,EAAY,GAA0B,CAAC,CAAC;CACrE,OAAO,SAAe,EAAE,wBAAqB,IAAI,CAAC,CAAoB,CAAC;AACzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePreferenceLabel.d.ts","sourceRoot":"","sources":["../../../src/languages/hooks/usePreferenceLabel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"usePreferenceLabel.d.ts","sourceRoot":"","sources":["../../../src/languages/hooks/usePreferenceLabel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAMnD,iBAAS,4BAA4B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAE5D;AAED,wBAAgB,kBAAkB,IAAI;IAAE,wBAAwB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAA;CAAE,CAG7F;AAED,OAAO,EAAE,4BAA4B,IAAI,wBAAwB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePreferenceLabel.js","names":[],"sources":["../../../src/languages/hooks/usePreferenceLabel.ts"],"sourcesContent":["/**\n * 返回 { getPreferenceDisplayName }(Base 展示名),便于扩展;可传给 SlideDownSwitcher 的 getDisplayName。\n * Returns { getPreferenceDisplayName } for extensibility; pass to SlideDownSwitcher getDisplayName.\n */\nimport type { BaseEnum } from \"
|
|
1
|
+
{"version":3,"file":"usePreferenceLabel.js","names":[],"sources":["../../../src/languages/hooks/usePreferenceLabel.ts"],"sourcesContent":["/**\n * 返回 { getPreferenceDisplayName }(Base 展示名),便于扩展;可传给 SlideDownSwitcher 的 getDisplayName。\n * Returns { getPreferenceDisplayName } for extensibility; pass to SlideDownSwitcher getDisplayName.\n */\nimport type { BaseEnum } from \"nfx-ui/enums/theme\";\n\nimport { useCallback, useMemo } from \"react\";\n\nimport i18n from \"../languages/i18n\";\n\nfunction getPreferenceDisplayNameImpl(base: BaseEnum): string {\n return i18n.t(\"baseSwitcher.\" + base, { ns: \"preference\", defaultValue: base });\n}\n\nexport function usePreferenceLabel(): { getPreferenceDisplayName: (base: BaseEnum) => string } {\n const getPreferenceDisplayName = useCallback(getPreferenceDisplayNameImpl, []);\n return useMemo(() => ({ getPreferenceDisplayName }), [getPreferenceDisplayName]);\n}\n\nexport { getPreferenceDisplayNameImpl as getPreferenceDisplayName };\n"],"mappings":";;;AAUA,SAAS,EAA6B,GAAwB;CAC5D,OAAO,EAAK,EAAE,kBAAkB,GAAM;EAAE,IAAI;EAAc,cAAc;CAAK,CAAC;AAChF;AAEA,SAAgB,IAA+E;CAC7F,IAAM,IAA2B,EAAY,GAA8B,CAAC,CAAC;CAC7E,OAAO,SAAe,EAAE,4BAAyB,IAAI,CAAC,CAAwB,CAAC;AACjF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThemeLabel.d.ts","sourceRoot":"","sources":["../../../src/languages/hooks/useThemeLabel.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"useThemeLabel.d.ts","sourceRoot":"","sources":["../../../src/languages/hooks/useThemeLabel.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAM1D,iBAAS,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAEhE;AAED,wBAAgB,aAAa,IAAI;IAAE,mBAAmB,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,CAAA;CAAE,CAG5F;AAED,OAAO,EAAE,uBAAuB,IAAI,mBAAmB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThemeLabel.js","names":[],"sources":["../../../src/languages/hooks/useThemeLabel.ts"],"sourcesContent":["/**\n * Accent / appearance labels for ThemeSettings.\n */\nimport type { AccentColorEnum } from \"
|
|
1
|
+
{"version":3,"file":"useThemeLabel.js","names":[],"sources":["../../../src/languages/hooks/useThemeLabel.ts"],"sourcesContent":["/**\n * Accent / appearance labels for ThemeSettings.\n */\nimport type { AccentColorEnum } from \"nfx-ui/enums/theme\";\n\nimport { useCallback, useMemo } from \"react\";\n\nimport i18n from \"../languages/i18n\";\n\nfunction getThemeDisplayNameImpl(accent: AccentColorEnum): string {\n return i18n.t(\"accent.\" + accent, { ns: \"theme\", defaultValue: accent });\n}\n\nexport function useThemeLabel(): { getThemeDisplayName: (accent: AccentColorEnum) => string } {\n const getThemeDisplayName = useCallback(getThemeDisplayNameImpl, []);\n return useMemo(() => ({ getThemeDisplayName }), [getThemeDisplayName]);\n}\n\nexport { getThemeDisplayNameImpl as getThemeDisplayName };\n"],"mappings":";;;AASA,SAAS,EAAwB,GAAiC;CAChE,OAAO,EAAK,EAAE,YAAY,GAAQ;EAAE,IAAI;EAAS,cAAc;CAAO,CAAC;AACzE;AAEA,SAAgB,IAA8E;CAC5F,IAAM,IAAsB,EAAY,GAAyB,CAAC,CAAC;CACnE,OAAO,SAAe,EAAE,uBAAoB,IAAI,CAAC,CAAmB,CAAC;AACvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/languages/languages/i18n.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAA8C,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5F,OAAO,IAAI,MAAM,SAAS,CAAC;AAI3B,OAAO,EAAE,YAAY,EAAmB,MAAM,
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/languages/languages/i18n.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAA8C,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5F,OAAO,IAAI,MAAM,SAAS,CAAC;AAI3B,OAAO,EAAE,YAAY,EAAmB,MAAM,uBAAuB,CAAC;AAMtE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,GAAG,YAAY,CAGxF;AAkBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAmEvD;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","names":[],"sources":["../../../src/languages/languages/i18n.ts"],"sourcesContent":["/**\n * i18n 初始化与实例:initI18n 由 LanguageProvider 调用。\n * 默认合并 NFX-UI 自带的 theme / language / layout / preference 命名空间。\n */\nimport type { CreateI18nResourcesResult, ExtraBundleItem, InitI18nOptions } from \"../types\";\n\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { LanguageEnum, LANGUAGE_VALUES } from \"
|
|
1
|
+
{"version":3,"file":"i18n.js","names":[],"sources":["../../../src/languages/languages/i18n.ts"],"sourcesContent":["/**\n * i18n 初始化与实例:initI18n 由 LanguageProvider 调用。\n * 默认合并 NFX-UI 自带的 theme / language / layout / preference 命名空间。\n */\nimport type { CreateI18nResourcesResult, ExtraBundleItem, InitI18nOptions } from \"../types\";\n\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { LanguageEnum, LANGUAGE_VALUES } from \"nfx-ui/enums/language\";\nimport { PreferenceStore, setPreference } from \"nfx-ui/stores/preference\";\nimport { safeEnum, safeStringable } from \"nfx-ui/utils/safe\";\n\nimport { getDefaultNfxBundles } from \"../resources\";\n\nexport function toSupportedLanguage(lng: string, fallbackLng: LanguageEnum): LanguageEnum {\n const prefix = safeStringable(lng.split(\"-\")[0]?.toLowerCase());\n return safeEnum<LanguageEnum>(prefix || undefined, LANGUAGE_VALUES, fallbackLng);\n}\n\nfunction applyDocumentLang(lng: string, fallbackLng: LanguageEnum) {\n if (typeof document === \"undefined\") return;\n document.documentElement.lang = toSupportedLanguage(lng, fallbackLng);\n}\n\nlet languagePersistAttached = false;\n\nfunction applyExtraBundles(lng: string, fallbackLng: LanguageEnum, items: ExtraBundleItem[]) {\n const code = toSupportedLanguage(lng, fallbackLng);\n for (const { namespace, bundle } of items) {\n if (namespace && bundle && typeof bundle === \"object\") {\n i18n.addResourceBundle(code, namespace, bundle, true, true);\n }\n }\n}\n\nexport function initI18n(options: InitI18nOptions): void {\n const fallbackLng = options.fallbackLng ?? LanguageEnum.ZH;\n\n if (i18n.isInitialized) {\n applyDocumentLang(i18n.language || fallbackLng, fallbackLng);\n return;\n }\n\n const nfx = getDefaultNfxBundles();\n const user: CreateI18nResourcesResult = options.getBuiltinBundles();\n const RESOURCES = ([LanguageEnum.EN, LanguageEnum.ZH, LanguageEnum.FR] as const).reduce(\n (acc, lang) => ({\n ...acc,\n [lang]: {\n ...(nfx.RESOURCES[lang] ?? {}),\n ...(user.RESOURCES[lang] ?? {}),\n },\n }),\n {} as typeof user.RESOURCES,\n );\n const NAME_SPACES = [...user.NAME_SPACES, ...nfx.NAME_SPACES.filter((n) => !user.NAME_SPACES.includes(n))];\n const initialLng = PreferenceStore.getState().language;\n\n const persistLanguage = (lng: string) => {\n const code = toSupportedLanguage(lng, fallbackLng);\n setPreference({ language: code });\n applyDocumentLang(code, fallbackLng);\n };\n\n if (!languagePersistAttached) {\n i18n.on(\"languageChanged\", persistLanguage);\n languagePersistAttached = true;\n }\n\n i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n compatibilityJSON: \"v4\",\n resources: RESOURCES,\n lng: initialLng,\n fallbackLng,\n supportedLngs: [...LANGUAGE_VALUES],\n load: \"languageOnly\",\n ns: NAME_SPACES,\n defaultNS: NAME_SPACES[0],\n interpolation: { escapeValue: false },\n keySeparator: \".\",\n detection: {\n order: [\"navigator\", \"htmlTag\", \"path\", \"subdomain\"],\n caches: [],\n },\n });\n\n applyDocumentLang(i18n.language || initialLng || fallbackLng, fallbackLng);\n\n const onLoad = options.onLoadExtraBundles;\n if (onLoad) {\n const apply = async (lng: string) => {\n const result = await onLoad(toSupportedLanguage(lng, fallbackLng));\n if (result == null) return;\n const items = Array.isArray(result) ? result : [result];\n applyExtraBundles(lng, fallbackLng, items);\n };\n void apply(i18n.language || fallbackLng);\n i18n.on(\"languageChanged\", (lng) => void apply(lng));\n }\n}\n\nexport default i18n;\n"],"mappings":";;;;;;;;AAgBA,SAAgB,EAAoB,GAAa,GAAyC;CACxF,IAAM,IAAS,EAAe,EAAI,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC;CAC9D,OAAO,EAAuB,KAAU,KAAA,GAAW,GAAiB,CAAW;AACjF;AAEA,SAAS,EAAkB,GAAa,GAA2B;CAC7D,OAAO,WAAa,QACxB,SAAS,gBAAgB,OAAO,EAAoB,GAAK,CAAW;AACtE;AAEA,IAAI,IAA0B;AAE9B,SAAS,EAAkB,GAAa,GAA2B,GAA0B;CAC3F,IAAM,IAAO,EAAoB,GAAK,CAAW;CACjD,KAAK,IAAM,EAAE,cAAW,eAAY,GAClC,AAAI,KAAa,KAAU,OAAO,KAAW,YAC3C,EAAK,kBAAkB,GAAM,GAAW,GAAQ,IAAM,EAAI;AAGhE;AAEA,SAAgB,EAAS,GAAgC;CACvD,IAAM,IAAc,EAAQ,eAAe,EAAa;CAExD,IAAI,EAAK,eAAe;EACtB,EAAkB,EAAK,YAAY,GAAa,CAAW;EAC3D;CACF;CAEA,IAAM,IAAM,EAAqB,GAC3B,IAAkC,EAAQ,kBAAkB,GAC5D,IAAa;EAAC,EAAa;EAAI,EAAa;EAAI,EAAa;CAAE,CAAC,CAAW,QAC9E,GAAK,OAAU;EACd,GAAG;GACF,IAAO;GACN,GAAI,EAAI,UAAU,MAAS,CAAC;GAC5B,GAAI,EAAK,UAAU,MAAS,CAAC;EAC/B;CACF,IACA,CAAC,CACH,GACM,IAAc,CAAC,GAAG,EAAK,aAAa,GAAG,EAAI,YAAY,QAAQ,MAAM,CAAC,EAAK,YAAY,SAAS,CAAC,CAAC,CAAC,GACnG,IAAa,EAAgB,SAAS,CAAC,CAAC;CAiC9C,AAzBA,AAEE,OADA,EAAK,GAAG,oBAPe,MAAgB;EACvC,IAAM,IAAO,EAAoB,GAAK,CAAW;EAEjD,AADA,EAAc,EAAE,UAAU,EAAK,CAAC,GAChC,EAAkB,GAAM,CAAW;CACrC,CAG4C,GAChB,KAG5B,EACG,IAAI,CAAgB,CAAC,CACrB,IAAI,CAAgB,CAAC,CACrB,KAAK;EACJ,mBAAmB;EACnB,WAAW;EACX,KAAK;EACL;EACA,eAAe,CAAC,GAAG,CAAe;EAClC,MAAM;EACN,IAAI;EACJ,WAAW,EAAY;EACvB,eAAe,EAAE,aAAa,GAAM;EACpC,cAAc;EACd,WAAW;GACT,OAAO;IAAC;IAAa;IAAW;IAAQ;GAAW;GACnD,QAAQ,CAAC;EACX;CACF,CAAC,GAEH,EAAkB,EAAK,YAAY,KAAc,GAAa,CAAW;CAEzE,IAAM,IAAS,EAAQ;CACvB,IAAI,GAAQ;EACV,IAAM,IAAQ,OAAO,MAAgB;GACnC,IAAM,IAAS,MAAM,EAAO,EAAoB,GAAK,CAAW,CAAC;GAC7D,KAAU,QAEd,EAAkB,GAAK,GADT,MAAM,QAAQ,CAAM,IAAI,IAAS,CAAC,CAAM,CACb;EAC3C;EAEA,AADA,EAAW,EAAK,YAAY,CAAW,GACvC,EAAK,GAAG,oBAAoB,MAAQ,KAAK,EAAM,CAAG,CAAC;CACrD;AACF;AAEA,IAAA,IAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18nResources.js","names":[],"sources":["../../../src/languages/languages/i18nResources.ts"],"sourcesContent":["/**\n * 文案包工厂:createI18nResources(resources, nameSpacesMap) 供用户自建 JSON 后生成 i18n 所需结构。\n * Bundle factory: createI18nResources(resources, nameSpacesMap) for building i18n structure from user JSON.\n */\nimport type { CreateI18nResourcesResult, LanguageEnum, NameSpacesMap, Resources } from \"../types\";\n\nimport i18n from \"./i18n\";\nimport { setPreference } from \"
|
|
1
|
+
{"version":3,"file":"i18nResources.js","names":[],"sources":["../../../src/languages/languages/i18nResources.ts"],"sourcesContent":["/**\n * 文案包工厂:createI18nResources(resources, nameSpacesMap) 供用户自建 JSON 后生成 i18n 所需结构。\n * Bundle factory: createI18nResources(resources, nameSpacesMap) for building i18n structure from user JSON.\n */\nimport type { CreateI18nResourcesResult, LanguageEnum, NameSpacesMap, Resources } from \"../types\";\n\nimport i18n from \"./i18n\";\nimport { setPreference } from \"nfx-ui/stores/preference\";\n\n/**\n * 由调用方传入 resources 和 nameSpacesMap,生成 i18n 所需的 RESOURCES、NAME_SPACES_MAP、NAME_SPACES。\n * Caller provides resources and nameSpacesMap; returns RESOURCES, NAME_SPACES_MAP, NAME_SPACES for i18n.\n *\n * @param resources - 各语言下的命名空间文案。Bundles per language.\n * @param nameSpacesMap - 命名空间 key → 命名空间字符串。Namespace key to string.\n */\nfunction createI18nResources(resources: Resources, nameSpacesMap: NameSpacesMap): CreateI18nResourcesResult {\n return {\n RESOURCES: resources,\n NAME_SPACES_MAP: nameSpacesMap,\n NAME_SPACES: Object.values(nameSpacesMap),\n };\n}\n\n/** 切换当前语言;唯一真相是 PreferenceStore。 */\nfunction changeLanguage(lng: LanguageEnum): void {\n setPreference({ language: lng });\n void i18n.changeLanguage(lng);\n}\n\nexport { createI18nResources, changeLanguage };\nexport type { CreateI18nResourcesResult, Resources, NameSpacesMap, NamespaceBundle } from \"../types\";\n"],"mappings":";;;AAgBA,SAAS,EAAoB,GAAsB,GAAyD;CAC1G,OAAO;EACL,WAAW;EACX,iBAAiB;EACjB,aAAa,OAAO,OAAO,CAAa;CAC1C;AACF;AAGA,SAAS,EAAe,GAAyB;CAE/C,AADA,EAAc,EAAE,UAAU,EAAI,CAAC,GAC/B,EAAU,eAAe,CAAG;AAC9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/languages/types/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,YAAY,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/languages/types/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../../src/languages/types/language.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../../src/languages/types/language.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLocalLanguage.d.ts","sourceRoot":"","sources":["../../../src/languages/utils/getLocalLanguage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"getLocalLanguage.d.ts","sourceRoot":"","sources":["../../../src/languages/utils/getLocalLanguage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE5E,wBAAgB,gBAAgB,IAAI,YAAY,CAE/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLocalLanguage.js","names":[],"sources":["../../../src/languages/utils/getLocalLanguage.ts"],"sourcesContent":["/**\n * 获取本地语言:PreferenceStore 为唯一真相。\n */\nimport { PreferenceStore } from \"
|
|
1
|
+
{"version":3,"file":"getLocalLanguage.js","names":[],"sources":["../../../src/languages/utils/getLocalLanguage.ts"],"sourcesContent":["/**\n * 获取本地语言:PreferenceStore 为唯一真相。\n */\nimport { PreferenceStore } from \"nfx-ui/stores/preference\";\nimport { DEFAULT_LANGUAGE, type LanguageEnum } from \"nfx-ui/enums/language\";\n\nexport function getLocalLanguage(): LanguageEnum {\n return PreferenceStore.getState().language ?? DEFAULT_LANGUAGE;\n}\n"],"mappings":";;;AAMA,SAAgB,IAAiC;CAC/C,OAAO,EAAgB,SAAS,CAAC,CAAC,YAAA;AACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"languageStorage.d.ts","sourceRoot":"","sources":["../../../src/languages/utils/languageStorage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"languageStorage.d.ts","sourceRoot":"","sources":["../../../src/languages/utils/languageStorage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAmB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGtE,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CAG1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAE5D;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"languageStorage.js","names":[],"sources":["../../../src/languages/utils/languageStorage.ts"],"sourcesContent":["/**\n * Language helpers backed by PreferenceStore (CityPulso: no separate language-storage key).\n */\nimport type { Nilable } from \"
|
|
1
|
+
{"version":3,"file":"languageStorage.js","names":[],"sources":["../../../src/languages/utils/languageStorage.ts"],"sourcesContent":["/**\n * Language helpers backed by PreferenceStore (CityPulso: no separate language-storage key).\n */\nimport type { Nilable } from \"nfx-ui/types/utils\";\n\nimport { LANGUAGE_VALUES, LanguageEnum } from \"nfx-ui/enums/language\";\nimport { PreferenceStore, setPreference } from \"nfx-ui/stores/preference\";\n\nexport function getLanguageStorage(): Nilable<LanguageEnum> {\n const raw = PreferenceStore.getState().language;\n return (LANGUAGE_VALUES as readonly string[]).includes(raw) ? raw : undefined;\n}\n\nexport function setLanguageStorage(value: LanguageEnum): void {\n setPreference({ language: value });\n}\n\nexport function removeLanguageStorage(): void {\n setPreference({ language: LanguageEnum.ZH });\n}\n"],"mappings":";;;AAQA,SAAgB,IAA4C;CAC1D,IAAM,IAAM,EAAgB,SAAS,CAAC,CAAC;CACvC,OAAQ,EAAsC,SAAS,CAAG,IAAI,IAAM,KAAA;AACtE;AAEA,SAAgB,EAAmB,GAA2B;CAC5D,EAAc,EAAE,UAAU,EAAM,CAAC;AACnC;AAEA,SAAgB,IAA8B;CAC5C,EAAc,EAAE,UAAU,EAAa,GAAG,CAAC;AAC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuestRoute.js","names":[],"sources":["../../src/navigations/GuestRoute.tsx"],"sourcesContent":["/**\n * Guest-only outlet — redirects away when session + profile are already selected.\n * Host supplies product home path via `redirectTo`.\n */\nimport { hasSelectedProfile, useAuthStore } from \"
|
|
1
|
+
{"version":3,"file":"GuestRoute.js","names":[],"sources":["../../src/navigations/GuestRoute.tsx"],"sourcesContent":["/**\n * Guest-only outlet — redirects away when session + profile are already selected.\n * Host supplies product home path via `redirectTo`.\n */\nimport { hasSelectedProfile, useAuthStore } from \"nfx-ui/stores/auth\";\nimport { Navigate, Outlet } from \"react-router\";\n\nexport interface GuestRouteProps {\n /** Where to send authenticated users with a selected profile (e.g. ROUTES.HOME). */\n redirectTo: string;\n}\n\nexport function GuestRoute({ redirectTo }: GuestRouteProps) {\n const isAuthValid = useAuthStore((state) => state.isAuthValid);\n const currentProfileId = useAuthStore((state) => state.currentProfileId);\n\n if (isAuthValid && hasSelectedProfile(currentProfileId)) {\n return <Navigate to={redirectTo} replace />;\n }\n\n return <Outlet />;\n}\n\nexport default GuestRoute;\n"],"mappings":";;;;AAYA,SAAgB,EAAW,EAAE,iBAA+B;CAC1D,IAAM,IAAc,GAAc,MAAU,EAAM,WAAW,GACvD,IAAmB,GAAc,MAAU,EAAM,gBAAgB;CAMvE,OAJI,KAAe,EAAmB,CAAgB,IAC7C,kBAAC,GAAD;EAAU,IAAI;EAAY,SAAA;CAAS,CAAA,IAGrC,kBAAC,GAAD,CAAS,CAAA;AAClB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProtectedRoute.js","names":[],"sources":["../../src/navigations/ProtectedRoute.tsx"],"sourcesContent":["/**\n * Auth-gated outlet — redirects to login when session/profile missing.\n * Host supplies product login path via `redirectTo`.\n */\nimport { hasSelectedProfile, useAuthStore } from \"
|
|
1
|
+
{"version":3,"file":"ProtectedRoute.js","names":[],"sources":["../../src/navigations/ProtectedRoute.tsx"],"sourcesContent":["/**\n * Auth-gated outlet — redirects to login when session/profile missing.\n * Host supplies product login path via `redirectTo`.\n */\nimport { hasSelectedProfile, useAuthStore } from \"nfx-ui/stores/auth\";\nimport { Navigate, Outlet, useLocation } from \"react-router\";\n\nexport interface ProtectedRouteProps {\n /** Where to send unauthenticated users (e.g. ROUTES.LOGIN). */\n redirectTo: string;\n}\n\nexport function ProtectedRoute({ redirectTo }: ProtectedRouteProps) {\n const location = useLocation();\n const isAuthValid = useAuthStore((state) => state.isAuthValid);\n const currentProfileId = useAuthStore((state) => state.currentProfileId);\n\n if (!isAuthValid || !hasSelectedProfile(currentProfileId)) {\n return <Navigate to={redirectTo} replace state={{ from: location }} />;\n }\n\n return <Outlet />;\n}\n\nexport default ProtectedRoute;\n"],"mappings":";;;;AAYA,SAAgB,EAAe,EAAE,iBAAmC;CAClE,IAAM,IAAW,EAAY,GACvB,IAAc,GAAc,MAAU,EAAM,WAAW,GACvD,IAAmB,GAAc,MAAU,EAAM,gBAAgB;CAMvE,OAJI,CAAC,KAAe,CAAC,EAAmB,CAAgB,IAC/C,kBAAC,GAAD;EAAU,IAAI;EAAY,SAAA;EAAQ,OAAO,EAAE,MAAM,EAAS;CAAI,CAAA,IAGhE,kBAAC,GAAD,CAAS,CAAA;AAClB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/DataProvider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/DataProvider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAiBvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAyCD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,iBAAiB,+BAUzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/providers/DataProvider/index.tsx"],"sourcesContent":["import type { IdentityRepositories } from \"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/providers/DataProvider/index.tsx"],"sourcesContent":["import type { IdentityRepositories } from \"nfx-ui/apis\";\nimport type { ReactNode } from \"react\";\n\nimport { useEffect, useMemo } from \"react\";\nimport { ApiAssetRepository, ApiAuthRepository, IdentityRepositoriesContext, setIdentityRepositories, useAuthRepository } from \"nfx-ui/apis\";\nimport { scheduleAccessTokenRefresh } from \"nfx-ui/apis/authRefresh\";\nimport { useAuthQueryScope, useCurrentProfile } from \"nfx-ui/hooks/auth\";\nimport { configurePreferenceSync, useApplyPreferenceOnLoad } from \"nfx-ui/hooks/preference\";\nimport { AuthStore, hasSelectedProfile, subscribeAuthStorageSync } from \"nfx-ui/stores/auth\";\nimport { parseServerPreference, toServerPreference } from \"nfx-ui/stores/preference\";\n\nconst defaultIdentityRepositories: IdentityRepositories = {\n auth: new ApiAuthRepository(),\n asset: new ApiAssetRepository(),\n};\n\nsetIdentityRepositories(defaultIdentityRepositories);\n\nexport interface DataProviderProps {\n children: ReactNode;\n repositories?: IdentityRepositories;\n}\n\nfunction AuthSessionBootstrap() {\n useEffect(() => {\n const accessToken = AuthStore.getState().accessToken;\n if (accessToken) scheduleAccessTokenRefresh(accessToken);\n return subscribeAuthStorageSync(() => {\n const next = AuthStore.getState().accessToken;\n if (next) scheduleAccessTokenRefresh(next);\n });\n }, []);\n return null;\n}\n\nfunction AuthPreferenceSync() {\n const auth = useAuthRepository();\n const { kind, isAuthValid, pID } = useAuthQueryScope();\n const { profile } = useCurrentProfile();\n\n useEffect(() => {\n if (!isAuthValid || !hasSelectedProfile(pID)) {\n configurePreferenceSync(undefined);\n return;\n }\n configurePreferenceSync((state) => {\n void auth.UpdatePreference(kind, JSON.stringify(toServerPreference(state)));\n });\n return () => configurePreferenceSync(undefined);\n }, [auth, kind, isAuthValid, pID]);\n\n const serverPreference = useMemo(() => (profile?.preference ? parseServerPreference(profile.preference) : null), [profile?.preference]);\n\n useApplyPreferenceOnLoad({\n isAuthValid: isAuthValid && hasSelectedProfile(pID),\n applyKey: pID,\n serverPreference,\n });\n\n return null;\n}\n\nexport function DataProvider({ children, repositories }: DataProviderProps) {\n const value = repositories ?? defaultIdentityRepositories;\n setIdentityRepositories(value);\n return (\n <IdentityRepositoriesContext.Provider value={value}>\n <AuthSessionBootstrap />\n <AuthPreferenceSync />\n {children}\n </IdentityRepositoriesContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,IAAM,IAAoD;CACxD,MAAM,IAAI,EAAkB;CAC5B,OAAO,IAAI,EAAmB;AAChC;AAEA,EAAwB,CAA2B;AAOnD,SAAS,IAAuB;CAS9B,OARA,QAAgB;EACd,IAAM,IAAc,EAAU,SAAS,CAAC,CAAC;EAEzC,OADI,KAAa,EAA2B,CAAW,GAChD,QAA+B;GACpC,IAAM,IAAO,EAAU,SAAS,CAAC,CAAC;GAClC,AAAI,KAAM,EAA2B,CAAI;EAC3C,CAAC;CACH,GAAG,CAAC,CAAC,GACE;AACT;AAEA,SAAS,IAAqB;CAC5B,IAAM,IAAO,EAAkB,GACzB,EAAE,SAAM,gBAAa,WAAQ,EAAkB,GAC/C,EAAE,eAAY,EAAkB;CAEtC,QAAgB;EACd,IAAI,CAAC,KAAe,CAAC,EAAmB,CAAG,GAAG;GAC5C,EAAwB,KAAA,CAAS;GACjC;EACF;EAIA,OAHA,GAAyB,MAAU;GACjC,EAAU,iBAAiB,GAAM,KAAK,UAAU,EAAmB,CAAK,CAAC,CAAC;EAC5E,CAAC,SACY,EAAwB,KAAA,CAAS;CAChD,GAAG;EAAC;EAAM;EAAM;EAAa;CAAG,CAAC;CAEjC,IAAM,IAAmB,QAAe,GAAS,aAAa,EAAsB,EAAQ,UAAU,IAAI,MAAO,CAAC,GAAS,UAAU,CAAC;CAQtI,OANA,EAAyB;EACvB,aAAa,KAAe,EAAmB,CAAG;EAClD,UAAU;EACV;CACF,CAAC,GAEM;AACT;AAEA,SAAgB,EAAa,EAAE,aAAU,mBAAmC;CAC1E,IAAM,IAAQ,KAAgB;CAE9B,OADA,EAAwB,CAAK,GAE3B,kBAAC,EAA4B,UAA7B;EAA6C;EAA7C,UAAA;GACE,kBAAC,GAAD,CAAuB,CAAA;GACvB,kBAAC,GAAD,CAAqB,CAAA;GACpB;EACmC;;AAE1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/LanguageProvider/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAmB,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/LanguageProvider/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAmB,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,EAAoB,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKxF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;IACnD,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAkCD,QAAA,MAAM,gBAAgB;iHAAgH,qBAAqB;;CAkC1J,CAAC;AAGF,eAAe,gBAAgB,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/providers/LanguageProvider/index.tsx"],"sourcesContent":["/**\n * Shared LanguageProvider — host passes product builtin bundles.\n * Identity error/message namespaces load here (PulsoLink LanguageProvider pattern).\n */\nimport type { CreateI18nResourcesResult, ExtraBundleItem, onLoadExtraBundles } from \"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/providers/LanguageProvider/index.tsx"],"sourcesContent":["/**\n * Shared LanguageProvider — host passes product builtin bundles.\n * Identity error/message namespaces load here (PulsoLink LanguageProvider pattern).\n */\nimport type { CreateI18nResourcesResult, ExtraBundleItem, onLoadExtraBundles } from \"nfx-ui/languages/types\";\nimport type { ReactNode } from \"react\";\n\nimport { useEffect, useRef } from \"react\";\n\nimport { getIdentityRepositories } from \"nfx-ui/apis\";\nimport { DEFAULT_LANGUAGE, LANGUAGE_VALUES, LanguageEnum } from \"nfx-ui/enums/language\";\nimport i18n, { initI18n, toSupportedLanguage } from \"nfx-ui/languages/languages/i18n\";\nimport { PreferenceStore } from \"nfx-ui/stores/preference\";\nimport { ERRORS_NS_IDENTITY, MESSAGES_NS_IDENTITY } from \"nfx-ui/utils/apiError\";\n\nexport interface LanguageProviderProps {\n children: ReactNode;\n getBuiltinBundles: () => CreateI18nResourcesResult;\n fallbackLng?: LanguageEnum;\n identityMockErrors?: Record<string, unknown>;\n identityMockMessages?: Record<string, unknown>;\n onLoadExtraBundles?: onLoadExtraBundles;\n}\n\nasync function loadIdentityExtraBundles(lng: LanguageEnum, identityMockErrors?: Record<string, unknown>, identityMockMessages?: Record<string, unknown>): Promise<ExtraBundleItem[]> {\n if (!LANGUAGE_VALUES.includes(lng)) return [];\n\n if (identityMockErrors != null || identityMockMessages != null) {\n const items: ExtraBundleItem[] = [];\n if (identityMockErrors) items.push({ namespace: ERRORS_NS_IDENTITY, bundle: identityMockErrors });\n if (identityMockMessages) items.push({ namespace: MESSAGES_NS_IDENTITY, bundle: identityMockMessages });\n return items;\n }\n\n try {\n const lang = lng.toString();\n const repos = getIdentityRepositories();\n const [identityErrors, identityMessages] = await Promise.all([\n repos.asset.GetErrorTranslations(lang),\n repos.asset.GetMessageTranslations(lang),\n ]);\n const items: ExtraBundleItem[] = [];\n if (identityErrors) items.push({ namespace: ERRORS_NS_IDENTITY, bundle: identityErrors as Record<string, unknown> });\n if (identityMessages) items.push({ namespace: MESSAGES_NS_IDENTITY, bundle: identityMessages });\n return items;\n } catch (error) {\n console.error(\"Failed to load Identity translation bundles\", error);\n return [];\n }\n}\n\nfunction normalizeExtra(result: Awaited<ReturnType<onLoadExtraBundles>>): ExtraBundleItem[] {\n if (result == null) return [];\n return Array.isArray(result) ? result : [result];\n}\n\nconst LanguageProvider = ({ children, getBuiltinBundles, fallbackLng, identityMockErrors, identityMockMessages, onLoadExtraBundles }: LanguageProviderProps) => {\n const hasInitialized = useRef(false);\n if (!hasInitialized.current) {\n initI18n({\n fallbackLng,\n getBuiltinBundles,\n onLoadExtraBundles: async (lng) => {\n const identity = await loadIdentityExtraBundles(lng, identityMockErrors, identityMockMessages);\n const extra = onLoadExtraBundles ? normalizeExtra(await onLoadExtraBundles(lng)) : [];\n const merged = [...identity, ...extra];\n return merged.length > 0 ? merged : null;\n },\n });\n hasInitialized.current = true;\n }\n\n useEffect(() => {\n const resolvedFallback = fallbackLng ?? DEFAULT_LANGUAGE;\n const apply = (lng: LanguageEnum) => {\n const current = toSupportedLanguage(i18n.language || resolvedFallback, resolvedFallback);\n if (current !== lng) {\n void i18n.changeLanguage(lng);\n }\n };\n\n apply(PreferenceStore.getState().language);\n return PreferenceStore.subscribe((state, prev) => {\n if (state.language !== prev.language) {\n apply(state.language);\n }\n });\n }, [fallbackLng]);\n\n return <>{children}</>;\n};\n\nLanguageProvider.displayName = \"LanguageProvider\";\nexport default LanguageProvider;\n\nexport { LANGUAGE_VALUES };\n"],"mappings":";;;;;;;;AAwBA,eAAe,EAAyB,GAAmB,GAA8C,GAA4E;CACnL,IAAI,CAAC,EAAgB,SAAS,CAAG,GAAG,OAAO,CAAC;CAE5C,IAAI,KAAsB,QAAQ,KAAwB,MAAM;EAC9D,IAAM,IAA2B,CAAC;EAGlC,OAFI,KAAoB,EAAM,KAAK;GAAE,WAAW;GAAoB,QAAQ;EAAmB,CAAC,GAC5F,KAAsB,EAAM,KAAK;GAAE,WAAW;GAAsB,QAAQ;EAAqB,CAAC,GAC/F;CACT;CAEA,IAAI;EACF,IAAM,IAAO,EAAI,SAAS,GACpB,IAAQ,EAAwB,GAChC,CAAC,GAAgB,KAAoB,MAAM,QAAQ,IAAI,CAC3D,EAAM,MAAM,qBAAqB,CAAI,GACrC,EAAM,MAAM,uBAAuB,CAAI,CACzC,CAAC,GACK,IAA2B,CAAC;EAGlC,OAFI,KAAgB,EAAM,KAAK;GAAE,WAAW;GAAoB,QAAQ;EAA0C,CAAC,GAC/G,KAAkB,EAAM,KAAK;GAAE,WAAW;GAAsB,QAAQ;EAAiB,CAAC,GACvF;CACT,SAAS,GAAO;EAEd,OADA,QAAQ,MAAM,+CAA+C,CAAK,GAC3D,CAAC;CACV;AACF;AAEA,SAAS,EAAe,GAAoE;CAE1F,OADI,KAAU,OAAa,CAAC,IACrB,MAAM,QAAQ,CAAM,IAAI,IAAS,CAAC,CAAM;AACjD;AAEA,IAAM,KAAoB,EAAE,aAAU,sBAAmB,gBAAa,uBAAoB,yBAAsB,4BAAgD;CAC9J,IAAM,IAAiB,EAAO,EAAK;CAgCnC,OA/BA,AAWE,EAAe,aAVf,EAAS;EACP;EACA;EACA,oBAAoB,OAAO,MAAQ;GACjC,IAAM,IAAW,MAAM,EAAyB,GAAK,GAAoB,CAAoB,GACvF,IAAQ,IAAqB,EAAe,MAAM,EAAmB,CAAG,CAAC,IAAI,CAAC,GAC9E,IAAS,CAAC,GAAG,GAAU,GAAG,CAAK;GACrC,OAAO,EAAO,SAAS,IAAI,IAAS;EACtC;CACF,CAAC,GACwB,KAG3B,QAAgB;EACd,IAAM,IAAmB,KAAA,MACnB,KAAS,MAAsB;GAEnC,AADgB,EAAoB,EAAK,YAAY,GAAkB,CACnE,MAAY,KACd,EAAU,eAAe,CAAG;EAEhC;EAGA,OADA,EAAM,EAAgB,SAAS,CAAC,CAAC,QAAQ,GAClC,EAAgB,WAAW,GAAO,MAAS;GAChD,AAAI,EAAM,aAAa,EAAK,YAC1B,EAAM,EAAM,QAAQ;EAExB,CAAC;CACH,GAAG,CAAC,CAAW,CAAC,GAET,kBAAA,GAAA,EAAG,YAAW,CAAA;AACvB;AAEA,EAAiB,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ThemeProvider/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ThemeProvider/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,OAAO,yBAAyB,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;CAC5D;AAED,QAAA,MAAM,aAAa;uCAAsC,kBAAkB;;CAwB1E,CAAC;AAGF,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/providers/ThemeProvider/index.tsx"],"sourcesContent":["/**\n * Shared Radix Theme provider — reads unified preference store.\n * Host may pass document side-effects (e.g. favicon) via `onAppearanceChange`.\n */\nimport type { RadixAppearance } from \"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/providers/ThemeProvider/index.tsx"],"sourcesContent":["/**\n * Shared Radix Theme provider — reads unified preference store.\n * Host may pass document side-effects (e.g. favicon) via `onAppearanceChange`.\n */\nimport type { RadixAppearance } from \"nfx-ui/themes/radix\";\nimport type { ReactNode } from \"react\";\n\nimport { useEffect } from \"react\";\nimport { Theme } from \"@radix-ui/themes\";\n\nimport { useResolvedAppearance } from \"nfx-ui/hooks/preference\";\nimport { usePreferenceStore } from \"nfx-ui/stores/preference\";\n\nimport \"nfx-ui/themes/index.css\";\n\nexport interface ThemeProviderProps {\n children: ReactNode;\n onAppearanceChange?: (appearance: RadixAppearance) => void;\n}\n\nconst ThemeProvider = ({ children, onAppearanceChange }: ThemeProviderProps) => {\n const theme = usePreferenceStore((s) => s.theme);\n const resolvedAppearance = useResolvedAppearance();\n\n useEffect(() => {\n document.documentElement.dataset.appearance = resolvedAppearance;\n onAppearanceChange?.(resolvedAppearance);\n }, [onAppearanceChange, resolvedAppearance]);\n\n return (\n <Theme\n appearance={resolvedAppearance}\n accentColor={theme.accent}\n grayColor={theme.gray}\n radius={theme.radius}\n scaling={theme.scaling}\n panelBackground={theme.panelBackground}\n hasBackground\n className=\"radix-app-theme\"\n data-font-family={theme.fontFamily}\n >\n {children}\n </Theme>\n );\n};\n\nThemeProvider.displayName = \"ThemeProvider\";\nexport default ThemeProvider;\n"],"mappings":";;;;;;;AAoBA,IAAM,KAAiB,EAAE,aAAU,4BAA6C;CAC9E,IAAM,IAAQ,GAAoB,MAAM,EAAE,KAAK,GACzC,IAAqB,EAAsB;CAOjD,OALA,QAAgB;EAEd,AADA,SAAS,gBAAgB,QAAQ,aAAa,GAC9C,IAAqB,CAAkB;CACzC,GAAG,CAAC,GAAoB,CAAkB,CAAC,GAGzC,kBAAC,GAAD;EACE,YAAY;EACZ,aAAa,EAAM;EACnB,WAAW,EAAM;EACjB,QAAQ,EAAM;EACd,SAAS,EAAM;EACf,iBAAiB,EAAM;EACvB,eAAA;EACA,WAAU;EACV,oBAAkB,EAAM;EAEvB;CACI,CAAA;AAEX;AAEA,EAAc,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileEditSchema.d.ts","sourceRoot":"","sources":["../../src/schemas/profileEditSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"profileEditSchema.d.ts","sourceRoot":"","sources":["../../src/schemas/profileEditSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAY,YAAY,EAAE,MAAM,cAAc,CAAC;AAKtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,GAAG,uBAAuB,CAc3G;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,SAAS;;;;;;;;;;;;kBAmBvD;AAED,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC,CAAC;AAE9F,wBAAgB,uCAAuC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM;;;mBAStF;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;GAU/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileEditSchema.js","names":[],"sources":["../../src/schemas/profileEditSchema.ts"],"sourcesContent":["import type { TFunction } from \"i18next\";\nimport type { Profile } from \"
|
|
1
|
+
{"version":3,"file":"profileEditSchema.js","names":[],"sources":["../../src/schemas/profileEditSchema.ts"],"sourcesContent":["import type { TFunction } from \"i18next\";\nimport type { Profile } from \"nfx-ui/types\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Language, LanguageEnum } from \"nfx-ui/enums\";\nimport { toDateInputValue } from \"nfx-ui/utils/time\";\nimport { safeStringable } from \"nfx-ui/utils/safe\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { z } from \"zod\";\n\nexport function buildUserProfileEditDefaults(profile: Profile.Response.ProfileBase): UserProfileEditFormData {\n return {\n profileLanguage: Language(profile.profileLanguage),\n displayName: safeStringable(profile.displayName),\n firstName: safeStringable(profile.firstName),\n lastName: safeStringable(profile.lastName),\n country: safeStringable(profile.country),\n city: safeStringable(profile.city),\n gender: safeStringable(profile.gender),\n birthday: toDateInputValue(profile.birthday),\n website: safeStringable(profile.website),\n timezone: safeStringable(profile.timezone),\n bio: safeStringable(profile.bio),\n };\n}\n\nexport function createUserProfileEditSchema(t: TFunction) {\n const optionalString = (max: number) => z.string().trim().max(max, t(\"edit.validation.maxLength\", { max }));\n\n return z.object({\n profileLanguage: z.enum(LanguageEnum),\n displayName: optionalString(150),\n firstName: optionalString(100),\n lastName: optionalString(100),\n country: optionalString(100),\n city: optionalString(100),\n gender: optionalString(100),\n birthday: z\n .string()\n .trim()\n .refine((value) => value === \"\" || /^\\d{4}-\\d{2}-\\d{2}$/.test(value), t(\"edit.validation.birthdayInvalid\")),\n website: optionalString(100).refine((value) => !value || /^https?:\\/\\/.+/i.test(value), t(\"edit.validation.websiteInvalid\")),\n timezone: optionalString(100),\n bio: optionalString(5000),\n });\n}\n\nexport type UserProfileEditFormData = z.infer<ReturnType<typeof createUserProfileEditSchema>>;\n\nexport function createUserProfileBackgroundsFieldSchema(t: TFunction, maxImages: number) {\n return z\n .array(\n z.object({\n imageId: z.string().min(1),\n sortOrder: z.number().int().nonnegative(),\n }),\n )\n .max(maxImages, t(\"backgroundUpload.limitReached\", { max: maxImages }));\n}\n\nexport function useInitUserProfileEditForm(profile: Profile.Response.ProfileBase) {\n const { t } = useTranslation(\"pages.User.Profile.Edit\");\n const schema = createUserProfileEditSchema(t);\n const defaultValues = buildUserProfileEditDefaults(profile);\n\n return useForm<UserProfileEditFormData>({\n resolver: zodResolver(schema),\n mode: \"onChange\",\n defaultValues,\n });\n}\n"],"mappings":";;;;;;;;AAWA,SAAgB,EAA6B,GAAgE;CAC3G,OAAO;EACL,iBAAiB,EAAS,EAAQ,eAAe;EACjD,aAAa,EAAe,EAAQ,WAAW;EAC/C,WAAW,EAAe,EAAQ,SAAS;EAC3C,UAAU,EAAe,EAAQ,QAAQ;EACzC,SAAS,EAAe,EAAQ,OAAO;EACvC,MAAM,EAAe,EAAQ,IAAI;EACjC,QAAQ,EAAe,EAAQ,MAAM;EACrC,UAAU,EAAiB,EAAQ,QAAQ;EAC3C,SAAS,EAAe,EAAQ,OAAO;EACvC,UAAU,EAAe,EAAQ,QAAQ;EACzC,KAAK,EAAe,EAAQ,GAAG;CACjC;AACF;AAEA,SAAgB,EAA4B,GAAc;CACxD,IAAM,KAAkB,MAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAK,EAAE,6BAA6B,EAAE,OAAI,CAAC,CAAC;CAE1G,OAAO,EAAE,OAAO;EACd,iBAAiB,EAAE,KAAK,CAAY;EACpC,aAAa,EAAe,GAAG;EAC/B,WAAW,EAAe,GAAG;EAC7B,UAAU,EAAe,GAAG;EAC5B,SAAS,EAAe,GAAG;EAC3B,MAAM,EAAe,GAAG;EACxB,QAAQ,EAAe,GAAG;EAC1B,UAAU,EACP,OAAO,CAAC,CACR,KAAK,CAAC,CACN,QAAQ,MAAU,MAAU,MAAM,sBAAsB,KAAK,CAAK,GAAG,EAAE,iCAAiC,CAAC;EAC5G,SAAS,EAAe,GAAG,CAAC,CAAC,QAAQ,MAAU,CAAC,KAAS,kBAAkB,KAAK,CAAK,GAAG,EAAE,gCAAgC,CAAC;EAC3H,UAAU,EAAe,GAAG;EAC5B,KAAK,EAAe,GAAI;CAC1B,CAAC;AACH;AAIA,SAAgB,EAAwC,GAAc,GAAmB;CACvF,OAAO,EACJ,MACC,EAAE,OAAO;EACP,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;EACzB,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY;CAC1C,CAAC,CACH,CAAC,CACA,IAAI,GAAW,EAAE,iCAAiC,EAAE,KAAK,EAAU,CAAC,CAAC;AAC1E;AAEA,SAAgB,EAA2B,GAAuC;CAChF,IAAM,EAAE,MAAM,EAAe,yBAAyB,GAChD,IAAS,EAA4B,CAAC,GACtC,IAAgB,EAA6B,CAAO;CAE1D,OAAO,EAAiC;EACtC,UAAU,EAAY,CAAM;EAC5B,MAAM;EACN;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signupSchema.js","names":[],"sources":["../../src/schemas/signupSchema.ts"],"sourcesContent":["import type { TFunction } from \"i18next\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { normalizeVerificationCode, VERIFICATION_CODE_ALPHABET } from \"
|
|
1
|
+
{"version":3,"file":"signupSchema.js","names":[],"sources":["../../src/schemas/signupSchema.ts"],"sourcesContent":["import type { TFunction } from \"i18next\";\n\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { normalizeVerificationCode, VERIFICATION_CODE_ALPHABET } from \"nfx-ui/utils/domain/verificationCode\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { z } from \"zod\";\n\nconst VERIFICATION_CODE_PATTERN = new RegExp(`^[${VERIFICATION_CODE_ALPHABET}]{6}$`);\n\n/** 注册表单;校验文案来自 host `pages.Account.Signup` → `validation.*` */\nexport function createSignupSchema(t: TFunction) {\n return z\n .object({\n email: z.string().min(1, t(\"validation.emailRequired\")).email(t(\"validation.emailInvalid\")),\n verificationCode: z\n .string()\n .min(1, t(\"validation.codeRequired\"))\n .transform((value) => normalizeVerificationCode(value))\n .pipe(z.string().regex(VERIFICATION_CODE_PATTERN, t(\"validation.codeInvalid\"))),\n password: z.string().min(1, t(\"validation.passwordRequired\")).min(8, t(\"validation.passwordMin\")),\n confirmPassword: z.string().min(1, t(\"validation.confirmRequired\")),\n rememberMe: z.boolean().optional(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: t(\"validation.passwordMismatch\"),\n path: [\"confirmPassword\"],\n });\n}\n\nexport type SignupFormData = z.infer<ReturnType<typeof createSignupSchema>>;\n\nexport const useInitSignupForm = () => {\n const { t } = useTranslation(\"pages.Account.Signup\");\n const schema = createSignupSchema(t);\n\n return useForm<SignupFormData>({\n resolver: zodResolver(schema),\n mode: \"onChange\",\n defaultValues: {\n email: \"\",\n verificationCode: \"\",\n password: \"\",\n confirmPassword: \"\",\n rememberMe: false,\n },\n });\n};\n"],"mappings":";;;;;;AAQA,IAAM,IAAgC,OAAO,KAAK,EAA2B,MAAM;AAGnF,SAAgB,EAAmB,GAAc;CAC/C,OAAO,EACJ,OAAO;EACN,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,MAAM,EAAE,yBAAyB,CAAC;EAC1F,kBAAkB,EACf,OAAO,CAAC,CACR,IAAI,GAAG,EAAE,yBAAyB,CAAC,CAAC,CACpC,WAAW,MAAU,EAA0B,CAAK,CAAC,CAAC,CACtD,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM,GAA2B,EAAE,wBAAwB,CAAC,CAAC;EAChF,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,6BAA6B,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,wBAAwB,CAAC;EAChG,iBAAiB,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,4BAA4B,CAAC;EAClE,YAAY,EAAE,QAAQ,CAAC,CAAC,SAAS;CACnC,CAAC,CAAC,CACD,QAAQ,MAAS,EAAK,aAAa,EAAK,iBAAiB;EACxD,SAAS,EAAE,6BAA6B;EACxC,MAAM,CAAC,iBAAiB;CAC1B,CAAC;AACL;AAIA,IAAa,UAA0B;CACrC,IAAM,EAAE,SAAM,EAAe,sBAAsB,GAC7C,IAAS,EAAmB,CAAC;CAEnC,OAAO,EAAwB;EAC7B,UAAU,EAAY,CAAM;EAC5B,MAAM;EACN,eAAe;GACb,OAAO;GACP,kBAAkB;GAClB,UAAU;GACV,iBAAiB;GACjB,YAAY;EACd;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/stores/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/stores/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAqC,eAAe,EAAE,MAAM,cAAc,CAAC;AAGlF;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,eAAe,CAAC;IACpC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,UAAU,WAAW;IACnB,cAAc,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACxF,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,qBAAqB,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAKD,eAAO,MAAM,gBAAgB,yCAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,yCAAyC,CAAC;AAEvE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AAgDD,wBAAgB,aAAa,IAAI,QAAQ,CAAC,SAAS,CAAC,CAgBnD;AAsCD,wBAAgB,yBAAyB,SAExC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,QAErD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7D;AA0BD,QAAA,MAAe,SAAS;;;;;;;;GAAY,YAAY,2DAkC7C,CAAC;AAEJ,QAAA,MAAM,cAAc,gBA9LY,OAAO,KAAK,IA8Lc,CAAC;AAC3D,QAAA,MAAM,SAAS,WA9LO,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,KAAK,IA8LrC,CAAC;AACjD,QAAA,MAAM,mBAAmB,cA9LU,MAAM,KAAK,IA8LsB,CAAC;AACrE,QAAA,MAAM,mBAAmB,cA9LU,MAAM,KAAK,IA8LsB,CAAC;AACrE,QAAA,MAAM,qBAAqB,SA9LK,eAAe,KAAK,IA8LoB,CAAC;AACzE,QAAA,MAAM,SAAS,QA9LI,IA8L6B,CAAC;AAyCjD,wBAAgB,wBAAwB,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CA+B1E;AAED,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,SAAS,EAAE,CAAC;AACjH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC"}
|