@lukso/core 0.1.0-dev.0f1bea5
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/LICENSE +201 -0
- package/README.md +159 -0
- package/dist/chunk-3WGYJTN4.js +19 -0
- package/dist/chunk-3WGYJTN4.js.map +1 -0
- package/dist/chunk-4TNWG4ME.js +106 -0
- package/dist/chunk-4TNWG4ME.js.map +1 -0
- package/dist/chunk-AMRGSLR5.cjs +1 -0
- package/dist/chunk-AMRGSLR5.cjs.map +1 -0
- package/dist/chunk-CC3LFUYY.cjs +19 -0
- package/dist/chunk-CC3LFUYY.cjs.map +1 -0
- package/dist/chunk-DFMMMF62.cjs +1 -0
- package/dist/chunk-DFMMMF62.cjs.map +1 -0
- package/dist/chunk-DKEXQFNE.js +1 -0
- package/dist/chunk-DKEXQFNE.js.map +1 -0
- package/dist/chunk-DKXHVRHM.js +84 -0
- package/dist/chunk-DKXHVRHM.js.map +1 -0
- package/dist/chunk-FR74YPGJ.cjs +87 -0
- package/dist/chunk-FR74YPGJ.cjs.map +1 -0
- package/dist/chunk-LEL6VWU4.js +1 -0
- package/dist/chunk-LEL6VWU4.js.map +1 -0
- package/dist/chunk-MBIRTPNM.cjs +84 -0
- package/dist/chunk-MBIRTPNM.cjs.map +1 -0
- package/dist/chunk-NJQVWIZL.cjs +49 -0
- package/dist/chunk-NJQVWIZL.cjs.map +1 -0
- package/dist/chunk-RM42NG7E.cjs +106 -0
- package/dist/chunk-RM42NG7E.cjs.map +1 -0
- package/dist/chunk-SV4TVR2K.js +87 -0
- package/dist/chunk-SV4TVR2K.js.map +1 -0
- package/dist/chunk-X2QNFZU7.js +49 -0
- package/dist/chunk-X2QNFZU7.js.map +1 -0
- package/dist/index.cjs +37 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mixins/device.cjs +8 -0
- package/dist/mixins/device.cjs.map +1 -0
- package/dist/mixins/device.d.cts +34 -0
- package/dist/mixins/device.d.ts +34 -0
- package/dist/mixins/device.js +8 -0
- package/dist/mixins/device.js.map +1 -0
- package/dist/mixins/index.cjs +14 -0
- package/dist/mixins/index.cjs.map +1 -0
- package/dist/mixins/index.d.cts +3 -0
- package/dist/mixins/index.d.ts +3 -0
- package/dist/mixins/index.js +14 -0
- package/dist/mixins/index.js.map +1 -0
- package/dist/mixins/intl.cjs +8 -0
- package/dist/mixins/intl.cjs.map +1 -0
- package/dist/mixins/intl.d.cts +37 -0
- package/dist/mixins/intl.d.ts +37 -0
- package/dist/mixins/intl.js +8 -0
- package/dist/mixins/intl.js.map +1 -0
- package/dist/services/device.cjs +7 -0
- package/dist/services/device.cjs.map +1 -0
- package/dist/services/device.d.cts +71 -0
- package/dist/services/device.d.ts +71 -0
- package/dist/services/device.js +7 -0
- package/dist/services/device.js.map +1 -0
- package/dist/services/index.cjs +20 -0
- package/dist/services/index.cjs.map +1 -0
- package/dist/services/index.d.cts +4 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.js +20 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/intl.cjs +15 -0
- package/dist/services/intl.cjs.map +1 -0
- package/dist/services/intl.d.cts +170 -0
- package/dist/services/intl.d.ts +170 -0
- package/dist/services/intl.js +15 -0
- package/dist/services/intl.js.map +1 -0
- package/dist/utils/index.cjs +11 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +32 -0
- package/dist/utils/index.d.ts +32 -0
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +114 -0
- package/src/index.ts +10 -0
- package/src/mixins/__tests__/device.spec.ts +119 -0
- package/src/mixins/__tests__/intl.spec.ts +198 -0
- package/src/mixins/device.ts +48 -0
- package/src/mixins/index.ts +8 -0
- package/src/mixins/intl.ts +112 -0
- package/src/services/__tests__/device.spec.ts +36 -0
- package/src/services/__tests__/intl.spec.ts +536 -0
- package/src/services/device.ts +121 -0
- package/src/services/index.ts +17 -0
- package/src/services/intl.ts +326 -0
- package/src/utils/__tests__/browserInfo.spec.ts +310 -0
- package/src/utils/__tests__/slug.spec.ts +26 -0
- package/src/utils/browserInfo.ts +102 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/slug.ts +13 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkRM42NG7Ecjs = require('./chunk-RM42NG7E.cjs');
|
|
7
|
+
|
|
8
|
+
// src/mixins/intl.ts
|
|
9
|
+
var _signalscore = require('@preact/signals-core');
|
|
10
|
+
|
|
11
|
+
// ../translations/en_US.json
|
|
12
|
+
var en_US_default = {
|
|
13
|
+
connect_modal_try_again: "Try again",
|
|
14
|
+
connect_modal_title: "Let\u2019s log you in",
|
|
15
|
+
connect_modal_qr_code_title: "Scan to log in",
|
|
16
|
+
connect_modal_qr_code_description: "Scan the below QR code with the Universal Profile mobile app to log in",
|
|
17
|
+
connect_modal_other_connectors: "Connect Wallet",
|
|
18
|
+
connect_modal_or_info: "Log in with a different wallet",
|
|
19
|
+
connect_modal_or: "Or",
|
|
20
|
+
connect_modal_installed: "INSTALLED",
|
|
21
|
+
connect_modal_failed_to_load: "Failed to load...",
|
|
22
|
+
connect_modal_eoa_title: "Connect your Wallet",
|
|
23
|
+
connect_modal_description: "Log in with your Universal Profile",
|
|
24
|
+
connect_modal_connectors_up_mobile: "Mobile Application",
|
|
25
|
+
connect_modal_connectors_up_browser_extension: "Browser Extension",
|
|
26
|
+
connect_modal_connectors_passkey_wallet: "Passkey Wallet"
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/mixins/intl.ts
|
|
30
|
+
function withIntlService(Base) {
|
|
31
|
+
class Mixin extends Base {
|
|
32
|
+
constructor() {
|
|
33
|
+
super(...arguments);
|
|
34
|
+
this.unsubscribeIntl = void 0;
|
|
35
|
+
}
|
|
36
|
+
connectedCallback() {
|
|
37
|
+
super.connectedCallback();
|
|
38
|
+
let intl = _chunkRM42NG7Ecjs.getIntlService.call(void 0, );
|
|
39
|
+
if (!intl) {
|
|
40
|
+
intl = _nullishCoalesce(this.setupLocalIntl(), () => ( null));
|
|
41
|
+
}
|
|
42
|
+
if (intl) {
|
|
43
|
+
this.unsubscribeIntl = _signalscore.effect.call(void 0, () => {
|
|
44
|
+
_optionalChain([intl, 'optionalAccess', _ => _.localeChanged, 'access', _2 => _2.value]);
|
|
45
|
+
this.requestUpdate();
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
_optionalChain([intl, 'optionalAccess', _3 => _3.setFallbackTranslations, 'call', _4 => _4(en_US_default)]);
|
|
49
|
+
}
|
|
50
|
+
disconnectedCallback() {
|
|
51
|
+
super.disconnectedCallback();
|
|
52
|
+
if (typeof this.unsubscribeIntl === "function") {
|
|
53
|
+
this.unsubscribeIntl();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Setup a local intl service with default configuration
|
|
58
|
+
* Subclasses can override this to customize initialization
|
|
59
|
+
*/
|
|
60
|
+
setupLocalIntl() {
|
|
61
|
+
const intlService = _chunkRM42NG7Ecjs.createIntlService.call(void 0,
|
|
62
|
+
Object.assign(_chunkRM42NG7Ecjs.defaultConfig, {
|
|
63
|
+
messages: en_US_default
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
_chunkRM42NG7Ecjs.setIntlService.call(void 0, intlService);
|
|
67
|
+
return intlService;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Format message using the intl service
|
|
71
|
+
*/
|
|
72
|
+
formatMessage(key, options) {
|
|
73
|
+
if (!key) {
|
|
74
|
+
console.warn("No translation key provided to formatMessage");
|
|
75
|
+
return "";
|
|
76
|
+
}
|
|
77
|
+
const intl = _chunkRM42NG7Ecjs.getIntlService.call(void 0, );
|
|
78
|
+
return _nullishCoalesce(_optionalChain([intl, 'optionalAccess', _5 => _5.formatMessage, 'call', _6 => _6(key, options)]), () => ( key));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return Mixin;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
exports.withIntlService = withIntlService;
|
|
87
|
+
//# sourceMappingURL=chunk-FR74YPGJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-FR74YPGJ.cjs","../src/mixins/intl.ts","../../translations/en_US.json"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACDA,mDAAuB;ADGvB;AACA;AEVA,IAAA,cAAA,EAAA;AAAA,EACE,uBAAA,EAA2B,WAAA;AAAA,EAC3B,mBAAA,EAAuB,uBAAA;AAAA,EACvB,2BAAA,EAA+B,gBAAA;AAAA,EAC/B,iCAAA,EAAqC,wEAAA;AAAA,EACrC,8BAAA,EAAkC,gBAAA;AAAA,EAClC,qBAAA,EAAyB,gCAAA;AAAA,EACzB,gBAAA,EAAoB,IAAA;AAAA,EACpB,uBAAA,EAA2B,WAAA;AAAA,EAC3B,4BAAA,EAAgC,mBAAA;AAAA,EAChC,uBAAA,EAA2B,qBAAA;AAAA,EAC3B,yBAAA,EAA6B,oCAAA;AAAA,EAC7B,kCAAA,EAAsC,oBAAA;AAAA,EACtC,6CAAA,EAAiD,mBAAA;AAAA,EACjD,uCAAA,EAA2C;AAC7C,CAAA;AFYA;AACA;ACgBO,SAAS,eAAA,CAA6C,IAAA,EAAc;AAAA,EAEzE,MAAM,MAAA,QAAe,KAAa;AAAA,IAAlC,WAAA,CAAA,EAAA;AAAA,MAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACE,MAAA,IAAA,CAAU,gBAAA,EAA4C,KAAA,CAAA;AAAA,IAAA;AAAA,IAEtD,iBAAA,CAAA,EAA0B;AACxB,MAAA,KAAA,CAAM,iBAAA,CAAkB,CAAA;AAGxB,MAAA,IAAI,KAAA,EAA2B,8CAAA,CAAe;AAG9C,MAAA,GAAA,CAAI,CAAC,IAAA,EAAM;AACT,QAAA,KAAA,mBAAO,IAAA,CAAK,cAAA,CAAe,CAAA,UAAK,MAAA;AAAA,MAClC;AAEA,MAAA,GAAA,CAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,gBAAA,EAAkB,iCAAA,CAAO,EAAA,GAAM;AAElC,0BAAA,IAAA,2BAAM,aAAA,qBAAc,OAAA;AACpB,UAAA,IAAA,CAAK,aAAA,CAAc,CAAA;AAAA,QACrB,CAAC,CAAA;AAAA,MACH;AAGA,sBAAA,IAAA,6BAAM,uBAAA,mBAAwB,aAA0B,GAAA;AAAA,IAC1D;AAAA,IAEA,oBAAA,CAAA,EAA6B;AAC3B,MAAA,KAAA,CAAM,oBAAA,CAAqB,CAAA;AAG3B,MAAA,GAAA,CAAI,OAAO,IAAA,CAAK,gBAAA,IAAoB,UAAA,EAAY;AAC9C,QAAA,IAAA,CAAK,eAAA,CAAgB,CAAA;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMU,cAAA,CAAA,EAA0C;AAClD,MAAA,MAAM,YAAA,EAAc,iDAAA;AAAA,QAClB,MAAA,CAAO,MAAA,CAAO,+BAAA,EAAe;AAAA,UAC3B,QAAA,EAAU;AAAA,QACZ,CAAC;AAAA,MACH,CAAA;AACA,MAAA,8CAAA,WAA0B,CAAA;AAC1B,MAAA,OAAO,WAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA,CAAc,GAAA,EAAc,OAAA,EAA0C;AACpE,MAAA,GAAA,CAAI,CAAC,GAAA,EAAK;AACR,QAAA,OAAA,CAAQ,IAAA,CAAK,8CAA8C,CAAA;AAC3D,QAAA,OAAO,EAAA;AAAA,MACT;AAEA,MAAA,MAAM,KAAA,EAAO,8CAAA,CAAe;AAC5B,MAAA,wCAAO,IAAA,6BAAM,aAAA,mBAAc,GAAA,EAAK,OAAO,GAAA,UAAK,KAAA;AAAA,IAC9C;AAAA,EACF;AAGA,EAAA,OAAO,KAAA;AACT;AD7BA;AACA;AACE;AACF,0CAAC","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-FR74YPGJ.cjs","sourcesContent":[null,"/**\n * Internationalization Mixin\n *\n * Mixin to add internationalization service to a Lit component\n */\n\nimport { effect } from '@preact/signals-core'\nimport type { LitElement } from 'lit'\nimport englishTranslations from '../../../translations/en_US.json'\nimport {\n createIntlService,\n defaultConfig,\n getIntlService,\n type IntlService,\n setIntlService,\n} from '../services/intl.js'\n\n/**\n * Mixin to add internationalization service to a Lit component\n *\n * Provides access to the global intl service with reactive locale changes.\n * Automatically subscribes to locale changes and triggers re-renders.\n *\n * The component will use the global intl service if available, or create a local one.\n * This follows the singleton pattern for the global service while allowing flexibility.\n *\n * @typeParam T - The Lit component class being extended\n * @returns Extended class with intl service capabilities\n *\n * @example\n * ```typescript\n * import { LitElement, html } from 'lit';\n * import { customElement } from 'lit/decorators.js';\n * import { withIntlService } from '@lukso/core/mixins';\n *\n * @customElement('my-component')\n * export class MyComponent extends withIntlService(LitElement) {\n * render() {\n * return html\\`<p>\\${this.formatMessage('app.welcome')}</p>\\`;\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withIntlService<T extends typeof LitElement>(Base: T): any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n class Mixin extends (Base as any) {\n protected unsubscribeIntl: (() => void) | undefined = undefined\n\n connectedCallback(): void {\n super.connectedCallback()\n\n // Subscribe to intl changes via signal\n let intl: IntlService | null = getIntlService()\n\n // When no intl is provided by host app we initialize our own\n if (!intl) {\n intl = this.setupLocalIntl() ?? null\n }\n\n if (intl) {\n this.unsubscribeIntl = effect(() => {\n // Access the signal to track changes\n intl?.localeChanged.value\n this.requestUpdate()\n })\n }\n\n // Set fallback for missing translations\n intl?.setFallbackTranslations(englishTranslations as any)\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n\n // Unsubscribe from intl changes\n if (typeof this.unsubscribeIntl === 'function') {\n this.unsubscribeIntl()\n }\n }\n\n /**\n * Setup a local intl service with default configuration\n * Subclasses can override this to customize initialization\n */\n protected setupLocalIntl(): IntlService | undefined {\n const intlService = createIntlService(\n Object.assign(defaultConfig, {\n messages: englishTranslations,\n })\n )\n setIntlService(intlService)\n return intlService\n }\n\n /**\n * Format message using the intl service\n */\n formatMessage(key?: string, options?: Record<string, string>): string {\n if (!key) {\n console.warn('No translation key provided to formatMessage')\n return ''\n }\n\n const intl = getIntlService()\n return intl?.formatMessage(key, options) ?? key\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Mixin as any\n}\n","{\n \"connect_modal_try_again\": \"Try again\",\n \"connect_modal_title\": \"Let’s log you in\",\n \"connect_modal_qr_code_title\": \"Scan to log in\",\n \"connect_modal_qr_code_description\": \"Scan the below QR code with the Universal Profile mobile app to log in\",\n \"connect_modal_other_connectors\": \"Connect Wallet\",\n \"connect_modal_or_info\": \"Log in with a different wallet\",\n \"connect_modal_or\": \"Or\",\n \"connect_modal_installed\": \"INSTALLED\",\n \"connect_modal_failed_to_load\": \"Failed to load...\",\n \"connect_modal_eoa_title\": \"Connect your Wallet\",\n \"connect_modal_description\": \"Log in with your Universal Profile\",\n \"connect_modal_connectors_up_mobile\": \"Mobile Application\",\n \"connect_modal_connectors_up_browser_extension\": \"Browser Extension\",\n \"connect_modal_connectors_passkey_wallet\": \"Passkey Wallet\"\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-LEL6VWU4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/utils/browserInfo.ts
|
|
2
|
+
var EXTENSION_STORE_LINKS = {
|
|
3
|
+
chrome: "https://chrome.google.com/webstore/detail/universal-profiles-testin/abpickdkkbnbcoepogfhkhennhfhehfn",
|
|
4
|
+
brave: "https://chrome.google.com/webstore/detail/universal-profiles-testin/abpickdkkbnbcoepogfhkhennhfhehfn",
|
|
5
|
+
edge: "https://chrome.google.com/webstore/detail/universal-profiles-testin/abpickdkkbnbcoepogfhkhennhfhehfn",
|
|
6
|
+
opera: "",
|
|
7
|
+
safari: "",
|
|
8
|
+
firefox: ""
|
|
9
|
+
};
|
|
10
|
+
var browserInfo = (deviceService) => {
|
|
11
|
+
const browserInfoDefaults = {
|
|
12
|
+
id: "chrome",
|
|
13
|
+
name: "",
|
|
14
|
+
icon: ""
|
|
15
|
+
};
|
|
16
|
+
const detectBrowser = () => {
|
|
17
|
+
const { isChrome, isBrave, isFirefox, isSafari, isEdge, isOpera } = deviceService;
|
|
18
|
+
if (isBrave) {
|
|
19
|
+
return {
|
|
20
|
+
id: "brave",
|
|
21
|
+
name: "Brave",
|
|
22
|
+
icon: "logo-brave",
|
|
23
|
+
storeLink: EXTENSION_STORE_LINKS.brave
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (isEdge) {
|
|
27
|
+
return {
|
|
28
|
+
id: "edge",
|
|
29
|
+
name: "Edge",
|
|
30
|
+
icon: "logo-edge",
|
|
31
|
+
storeLink: EXTENSION_STORE_LINKS.edge
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (isOpera) {
|
|
35
|
+
return {
|
|
36
|
+
id: "opera",
|
|
37
|
+
name: "Opera",
|
|
38
|
+
icon: "logo-opera",
|
|
39
|
+
storeLink: EXTENSION_STORE_LINKS.opera
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (isChrome) {
|
|
43
|
+
return {
|
|
44
|
+
id: "chrome",
|
|
45
|
+
name: "Chrome",
|
|
46
|
+
icon: "logo-chrome",
|
|
47
|
+
storeLink: EXTENSION_STORE_LINKS.chrome
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (isFirefox) {
|
|
51
|
+
return {
|
|
52
|
+
id: "firefox",
|
|
53
|
+
name: "Firefox",
|
|
54
|
+
icon: "logo-firefox",
|
|
55
|
+
storeLink: EXTENSION_STORE_LINKS.firefox
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (isSafari) {
|
|
59
|
+
return {
|
|
60
|
+
id: "safari",
|
|
61
|
+
name: "Safari",
|
|
62
|
+
icon: "logo-safari",
|
|
63
|
+
storeLink: EXTENSION_STORE_LINKS.safari
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const browserInfo2 = { ...browserInfoDefaults, ...detectBrowser() };
|
|
68
|
+
return browserInfo2;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// src/utils/slug.ts
|
|
72
|
+
var slug = (value) => {
|
|
73
|
+
if (!value) {
|
|
74
|
+
return "";
|
|
75
|
+
}
|
|
76
|
+
return value.toLowerCase().replace(/\s+/g, "-");
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
exports.EXTENSION_STORE_LINKS = EXTENSION_STORE_LINKS; exports.browserInfo = browserInfo; exports.slug = slug;
|
|
84
|
+
//# sourceMappingURL=chunk-MBIRTPNM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-MBIRTPNM.cjs","../src/utils/browserInfo.ts","../src/utils/slug.ts"],"names":["browserInfo"],"mappings":"AAAA;ACkBO,IAAM,sBAAA,EAAwB;AAAA,EACnC,MAAA,EACE,sGAAA;AAAA,EACF,KAAA,EACE,sGAAA;AAAA,EACF,IAAA,EAAM,sGAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AACX,CAAA;AAKO,IAAM,YAAA,EAAc,CAAC,aAAA,EAAA,GAA8C;AACxE,EAAA,MAAM,oBAAA,EAAsB;AAAA,IAC1B,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM,EAAA;AAAA,IACN,IAAA,EAAM;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,cAAA,EAAgB,CAAA,EAAA,GAA+B;AACnD,IAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,QAAQ,EAAA,EAC9D,aAAA;AAEF,IAAA,GAAA,CAAI,OAAA,EAAS;AACX,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,OAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,YAAA;AAAA,QACN,SAAA,EAAW,qBAAA,CAAsB;AAAA,MACnC,CAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,MAAA,EAAQ;AACV,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,MAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,WAAA;AAAA,QACN,SAAA,EAAW,qBAAA,CAAsB;AAAA,MACnC,CAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,OAAA,EAAS;AACX,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,OAAA;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,YAAA;AAAA,QACN,SAAA,EAAW,qBAAA,CAAsB;AAAA,MACnC,CAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,QAAA,EAAU;AACZ,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,QAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,aAAA;AAAA,QACN,SAAA,EAAW,qBAAA,CAAsB;AAAA,MACnC,CAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,SAAA,EAAW;AACb,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,qBAAA,CAAsB;AAAA,MACnC,CAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,QAAA,EAAU;AACZ,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,QAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,aAAA;AAAA,QACN,SAAA,EAAW,qBAAA,CAAsB;AAAA,MACnC,CAAA;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAMA,aAAAA,EAAc,EAAE,GAAG,mBAAA,EAAqB,GAAG,aAAA,CAAc,EAAE,CAAA;AAEjE,EAAA,OAAOA,YAAAA;AACT,CAAA;ADhCA;AACA;AEhEO,IAAM,KAAA,EAAO,CAAC,KAAA,EAAA,GAAmB;AACtC,EAAA,GAAA,CAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA,CAAM,WAAA,CAAY,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAChD,CAAA;AFiEA;AACA;AACE;AACA;AACA;AACF,8GAAC","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-MBIRTPNM.cjs","sourcesContent":[null,"import type { DeviceService } from '../services'\n\nexport type BrowserName =\n | 'chrome'\n | 'safari'\n | 'firefox'\n | 'edge'\n | 'opera'\n | 'brave'\n\nexport type BrowserInfo = {\n id: BrowserName\n name: string\n icon: string\n storeLink: string\n}\n\n// extension store links (all webkit based browsers use chrome web store installation)\nexport const EXTENSION_STORE_LINKS = {\n chrome:\n 'https://chrome.google.com/webstore/detail/universal-profiles-testin/abpickdkkbnbcoepogfhkhennhfhehfn',\n brave:\n 'https://chrome.google.com/webstore/detail/universal-profiles-testin/abpickdkkbnbcoepogfhkhennhfhehfn',\n edge: 'https://chrome.google.com/webstore/detail/universal-profiles-testin/abpickdkkbnbcoepogfhkhennhfhehfn',\n opera: '',\n safari: '',\n firefox: '',\n}\n\n/**\n * Expose browser info to the app\n */\nexport const browserInfo = (deviceService: DeviceService): BrowserInfo => {\n const browserInfoDefaults = {\n id: 'chrome',\n name: '',\n icon: '',\n } as BrowserInfo\n\n const detectBrowser = (): BrowserInfo | undefined => {\n const { isChrome, isBrave, isFirefox, isSafari, isEdge, isOpera } =\n deviceService\n\n if (isBrave) {\n return {\n id: 'brave',\n name: 'Brave',\n icon: 'logo-brave',\n storeLink: EXTENSION_STORE_LINKS.brave,\n }\n }\n\n if (isEdge) {\n return {\n id: 'edge',\n name: 'Edge',\n icon: 'logo-edge',\n storeLink: EXTENSION_STORE_LINKS.edge,\n }\n }\n\n if (isOpera) {\n return {\n id: 'opera',\n name: 'Opera',\n icon: 'logo-opera',\n storeLink: EXTENSION_STORE_LINKS.opera,\n }\n }\n\n if (isChrome) {\n return {\n id: 'chrome',\n name: 'Chrome',\n icon: 'logo-chrome',\n storeLink: EXTENSION_STORE_LINKS.chrome,\n }\n }\n\n if (isFirefox) {\n return {\n id: 'firefox',\n name: 'Firefox',\n icon: 'logo-firefox',\n storeLink: EXTENSION_STORE_LINKS.firefox,\n }\n }\n\n if (isSafari) {\n return {\n id: 'safari',\n name: 'Safari',\n icon: 'logo-safari',\n storeLink: EXTENSION_STORE_LINKS.safari,\n }\n }\n }\n\n const browserInfo = { ...browserInfoDefaults, ...detectBrowser() }\n\n return browserInfo\n}\n","/**\n * Make slug from text\n *\n * @param value\n * @returns\n */\nexport const slug = (value?: string) => {\n if (!value) {\n return ''\n }\n\n return value.toLowerCase().replace(/\\s+/g, '-') // convert spaces to hyphens\n}\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/services/device.ts
|
|
2
|
+
var _signalscore = require('@preact/signals-core');
|
|
3
|
+
var _uaparserjs = require('ua-parser-js');
|
|
4
|
+
function deviceService(navigator) {
|
|
5
|
+
const userAgent = _nullishCoalesce(_optionalChain([navigator, 'optionalAccess', _ => _.userAgent]), () => ( ""));
|
|
6
|
+
const parser = new (0, _uaparserjs.UAParser)(userAgent);
|
|
7
|
+
const result = parser.getResult();
|
|
8
|
+
const initialized = _signalscore.signal.call(void 0, 1);
|
|
9
|
+
const deviceType = result.device.type;
|
|
10
|
+
const isMobile = deviceType === "mobile";
|
|
11
|
+
const isTablet = deviceType === "tablet";
|
|
12
|
+
const isDesktop = !deviceType;
|
|
13
|
+
const osName = result.os.name || "";
|
|
14
|
+
const isIOS = osName.includes("iOS") || osName.includes("Mac OS");
|
|
15
|
+
const isAndroid = osName === "Android";
|
|
16
|
+
const isWindows = osName === "Windows";
|
|
17
|
+
const isMacOS = osName === "Mac OS";
|
|
18
|
+
const isLinux = osName === "Linux";
|
|
19
|
+
const browserName = result.browser.name || "";
|
|
20
|
+
const isChrome = browserName === "Chrome";
|
|
21
|
+
const isSafari = browserName === "Safari";
|
|
22
|
+
const isFirefox = browserName === "Firefox";
|
|
23
|
+
const isEdge = browserName === "Edge";
|
|
24
|
+
const isOpera = browserName === "Opera";
|
|
25
|
+
const isBrave = _optionalChain([navigator, 'optionalAccess', _2 => _2.brave]) !== void 0;
|
|
26
|
+
return {
|
|
27
|
+
isMobile,
|
|
28
|
+
isTablet,
|
|
29
|
+
isDesktop,
|
|
30
|
+
isIOS,
|
|
31
|
+
isAndroid,
|
|
32
|
+
isWindows,
|
|
33
|
+
isMacOS,
|
|
34
|
+
isLinux,
|
|
35
|
+
isChrome,
|
|
36
|
+
isSafari,
|
|
37
|
+
isFirefox,
|
|
38
|
+
isEdge,
|
|
39
|
+
isOpera,
|
|
40
|
+
isBrave,
|
|
41
|
+
getRaw: () => result,
|
|
42
|
+
initialized
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
exports.deviceService = deviceService;
|
|
49
|
+
//# sourceMappingURL=chunk-NJQVWIZL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-NJQVWIZL.cjs","../src/services/device.ts"],"names":[],"mappings":"AAAA;ACMA,mDAAuB;AACvB,0CAAyB;AAkElB,SAAS,aAAA,CAAc,SAAA,EAA8C;AAC1E,EAAA,MAAM,UAAA,mCAAY,SAAA,2BAAW,WAAA,UAAa,IAAA;AAC1C,EAAA,MAAM,OAAA,EAAS,IAAI,yBAAA,CAAS,SAAS,CAAA;AACrC,EAAA,MAAM,OAAA,EAAS,MAAA,CAAO,SAAA,CAAU,CAAA;AAChC,EAAA,MAAM,YAAA,EAAc,iCAAA,CAAQ,CAAA;AAG5B,EAAA,MAAM,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,IAAA;AACjC,EAAA,MAAM,SAAA,EAAW,WAAA,IAAe,QAAA;AAChC,EAAA,MAAM,SAAA,EAAW,WAAA,IAAe,QAAA;AAChC,EAAA,MAAM,UAAA,EAAY,CAAC,UAAA;AAGnB,EAAA,MAAM,OAAA,EAAS,MAAA,CAAO,EAAA,CAAG,KAAA,GAAQ,EAAA;AACjC,EAAA,MAAM,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,KAAK,EAAA,GAAK,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAChE,EAAA,MAAM,UAAA,EAAY,OAAA,IAAW,SAAA;AAC7B,EAAA,MAAM,UAAA,EAAY,OAAA,IAAW,SAAA;AAC7B,EAAA,MAAM,QAAA,EAAU,OAAA,IAAW,QAAA;AAC3B,EAAA,MAAM,QAAA,EAAU,OAAA,IAAW,OAAA;AAG3B,EAAA,MAAM,YAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,KAAA,GAAQ,EAAA;AAC3C,EAAA,MAAM,SAAA,EAAW,YAAA,IAAgB,QAAA;AACjC,EAAA,MAAM,SAAA,EAAW,YAAA,IAAgB,QAAA;AACjC,EAAA,MAAM,UAAA,EAAY,YAAA,IAAgB,SAAA;AAClC,EAAA,MAAM,OAAA,EAAS,YAAA,IAAgB,MAAA;AAC/B,EAAA,MAAM,QAAA,EAAU,YAAA,IAAgB,OAAA;AAChC,EAAA,MAAM,QAAA,kBAAU,SAAA,6BAAW,QAAA,IAAU,KAAA,CAAA;AAErC,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA,EAAQ,CAAA,EAAA,GAAM,MAAA;AAAA,IACd;AAAA,EACF,CAAA;AACF;AD5EA;AACA;AACE;AACF,sCAAC","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-NJQVWIZL.cjs","sourcesContent":[null,"/**\n * Device Detection Service\n *\n * Provides device type, OS, and browser detection using ua-parser-js\n */\n\nimport { signal } from '@preact/signals-core'\nimport { UAParser } from 'ua-parser-js'\n\n/**\n * Device detection flags and utilities\n */\nexport interface DeviceService {\n /**\n * Device type detection flags\n */\n isMobile: boolean\n isTablet: boolean\n isDesktop: boolean\n\n /**\n * Operating system detection flags\n */\n isIOS: boolean\n isAndroid: boolean\n isWindows: boolean\n isMacOS: boolean\n isLinux: boolean\n\n /**\n * Browser detection flags\n */\n isChrome: boolean\n isSafari: boolean\n isFirefox: boolean\n isEdge: boolean\n isOpera: boolean\n isBrave: boolean\n\n /**\n * Get raw parser result for additional details\n * @returns Full UAParser result object\n */\n getRaw: () => ReturnType<UAParser['getResult']>\n\n /**\n * Signal that tracks device detector initialization\n * Useful for reactivity in web components\n */\n initialized: { value: number }\n}\n\nexport interface NavigatorExtended extends Navigator {\n brave?: unknown\n}\n\n/**\n * Create a new device detector instance\n *\n * @param navigator - Optional custom navigator object (uses global navigator by default)\n * @returns DeviceService instance with device/OS/browser detection\n *\n * @example\n * ```typescript\n * import { deviceService } from '@lukso/core/services/device';\n *\n * const device = deviceService();\n *\n * if (device.isMobile) {\n * console.log('User is on mobile');\n * }\n * ```\n */\nexport function deviceService(navigator?: NavigatorExtended): DeviceService {\n const userAgent = navigator?.userAgent ?? ''\n const parser = new UAParser(userAgent)\n const result = parser.getResult()\n const initialized = signal(1)\n\n // Determine device type\n const deviceType = result.device.type as 'mobile' | 'tablet' | undefined\n const isMobile = deviceType === 'mobile'\n const isTablet = deviceType === 'tablet'\n const isDesktop = !deviceType\n\n // Operating system detection\n const osName = result.os.name || ''\n const isIOS = osName.includes('iOS') || osName.includes('Mac OS')\n const isAndroid = osName === 'Android'\n const isWindows = osName === 'Windows'\n const isMacOS = osName === 'Mac OS'\n const isLinux = osName === 'Linux'\n\n // Browser detection\n const browserName = result.browser.name || ''\n const isChrome = browserName === 'Chrome'\n const isSafari = browserName === 'Safari'\n const isFirefox = browserName === 'Firefox'\n const isEdge = browserName === 'Edge'\n const isOpera = browserName === 'Opera'\n const isBrave = navigator?.brave !== undefined\n\n return {\n isMobile,\n isTablet,\n isDesktop,\n isIOS,\n isAndroid,\n isWindows,\n isMacOS,\n isLinux,\n isChrome,\n isSafari,\n isFirefox,\n isEdge,\n isOpera,\n isBrave,\n getRaw: () => result,\n initialized,\n }\n}\n"]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/services/intl.ts
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _intl = require('@formatjs/intl');
|
|
5
|
+
var _signalscore = require('@preact/signals-core');
|
|
6
|
+
var formatNumberDefaultOptions = {
|
|
7
|
+
maximumFractionDigits: 18
|
|
8
|
+
};
|
|
9
|
+
var defaultConfig = {
|
|
10
|
+
locale: "en-US",
|
|
11
|
+
messages: {},
|
|
12
|
+
formats: {}
|
|
13
|
+
};
|
|
14
|
+
var intlService = null;
|
|
15
|
+
function createIntlService(config = defaultConfig) {
|
|
16
|
+
let currentConfig = { ...defaultConfig, ...config };
|
|
17
|
+
let intl = _intl.createIntl.call(void 0, { ...currentConfig, defaultLocale: "en-US" });
|
|
18
|
+
const localeChanged = _signalscore.signal.call(void 0, 0);
|
|
19
|
+
let fallbackMessages = {};
|
|
20
|
+
return {
|
|
21
|
+
formatMessage: (key, options) => {
|
|
22
|
+
try {
|
|
23
|
+
const result = intl.formatMessage({ id: key }, options);
|
|
24
|
+
if (result && result !== key) {
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
if (fallbackMessages[key]) {
|
|
28
|
+
return fallbackMessages[key];
|
|
29
|
+
}
|
|
30
|
+
return key;
|
|
31
|
+
} catch (e) {
|
|
32
|
+
return fallbackMessages[key] || key;
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
formatNumber: (value, options = {}) => {
|
|
36
|
+
if (value === null || value === void 0) {
|
|
37
|
+
return "0";
|
|
38
|
+
}
|
|
39
|
+
const _value = typeof value === "string" ? Number.parseFloat(value) : value;
|
|
40
|
+
const mergedOptions = {
|
|
41
|
+
...formatNumberDefaultOptions,
|
|
42
|
+
...options
|
|
43
|
+
};
|
|
44
|
+
return intl.formatNumber(_value, mergedOptions) || "";
|
|
45
|
+
},
|
|
46
|
+
formatDate: (date) => {
|
|
47
|
+
return intl.formatDate(date);
|
|
48
|
+
},
|
|
49
|
+
formatTime: (date) => {
|
|
50
|
+
return intl.formatTime(date);
|
|
51
|
+
},
|
|
52
|
+
formatTimestamp: (timestamp, options) => {
|
|
53
|
+
if (!timestamp) return "";
|
|
54
|
+
const time = typeof timestamp === "string" ? Number(timestamp) : timestamp;
|
|
55
|
+
const date = time < 1e10 ? new Date(time * 1e3) : new Date(time);
|
|
56
|
+
if (typeof options === "string") {
|
|
57
|
+
const dateTimeOptions = _optionalChain([currentConfig, 'access', _ => _.formats, 'optionalAccess', _2 => _2.date, 'optionalAccess', _3 => _3[options]]);
|
|
58
|
+
if (dateTimeOptions) {
|
|
59
|
+
return new Intl.DateTimeFormat(
|
|
60
|
+
currentConfig.locale,
|
|
61
|
+
dateTimeOptions
|
|
62
|
+
).format(date);
|
|
63
|
+
}
|
|
64
|
+
return intl.formatDate(date) || "";
|
|
65
|
+
}
|
|
66
|
+
return intl.formatDate(date, options) || "";
|
|
67
|
+
},
|
|
68
|
+
setLocale: (locale, messages) => {
|
|
69
|
+
currentConfig = {
|
|
70
|
+
...currentConfig,
|
|
71
|
+
locale,
|
|
72
|
+
messages: messages || currentConfig.messages
|
|
73
|
+
};
|
|
74
|
+
intl = _intl.createIntl.call(void 0, {
|
|
75
|
+
...currentConfig,
|
|
76
|
+
defaultLocale: "en-US"
|
|
77
|
+
});
|
|
78
|
+
localeChanged.value += 1;
|
|
79
|
+
},
|
|
80
|
+
getLocale: () => {
|
|
81
|
+
return currentConfig.locale;
|
|
82
|
+
},
|
|
83
|
+
setFallbackTranslations: (fallbackMessagesInput) => {
|
|
84
|
+
fallbackMessages = fallbackMessagesInput;
|
|
85
|
+
},
|
|
86
|
+
localeChanged
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function setIntlService(service) {
|
|
90
|
+
intlService = service;
|
|
91
|
+
}
|
|
92
|
+
function getIntlService() {
|
|
93
|
+
return intlService;
|
|
94
|
+
}
|
|
95
|
+
function clearIntlService() {
|
|
96
|
+
intlService = null;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
exports.defaultConfig = defaultConfig; exports.createIntlService = createIntlService; exports.setIntlService = setIntlService; exports.getIntlService = getIntlService; exports.clearIntlService = clearIntlService;
|
|
106
|
+
//# sourceMappingURL=chunk-RM42NG7E.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-RM42NG7E.cjs","../src/services/intl.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-RM42NG7E.cjs","sourcesContent":[null,"/**\n * Internationalization Service\n *\n * Provides locale-aware formatting for messages, numbers, dates, and times.\n */\n\nimport {\n createIntl,\n type FormatNumberOptions,\n type IntlConfig,\n} from '@formatjs/intl'\nimport { signal } from '@preact/signals-core'\n\n/**\n * Translation messages object type\n * Maps translation keys to their corresponding string values\n */\nexport type IntlMessages = Record<string, string>\n\n/**\n * Default format number options\n * @see https://github.com/formatjs/formatjs/blob/main/packages/ecma402-abstract/types/number.ts\n */\nconst formatNumberDefaultOptions = {\n maximumFractionDigits: 18,\n}\n\n/**\n * Intl service interface\n */\nexport interface IntlService {\n /**\n * Translate a string based on the key\n *\n * @param key - translation key\n * @param options - optional options for formatMessage (for variable interpolation)\n * @returns - translated string\n */\n formatMessage: (key: string, options?: Record<string, string>) => string\n\n /**\n * Number formatting based on the locale\n *\n * @param value - number to format\n * @param options - options for formatNumber\n * @returns - formatted number\n */\n formatNumber: (\n value: number | string | bigint,\n options?: FormatNumberOptions\n ) => string\n\n /**\n * Date formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted date\n */\n formatDate: (date?: string | number | Date) => string | undefined\n\n /**\n * Time formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted time\n */\n formatTime: (date?: string | number | Date) => string | undefined\n\n /**\n * Timestamp formatting based on the locale\n *\n * @param timestamp - UNIX timestamp in seconds or milliseconds\n * @param options - formatting options (predefined format name or custom Intl.DateTimeFormat options)\n * @returns - formatted date & time string\n *\n * @example\n * ```typescript\n * const intl = getIntlService();\n *\n * // Use predefined shortDateTime format\n * intl.formatTimestamp(1733251200, 'shortDateTime'); // \"Wed, Dec 3, 2025, 16:07\"\n *\n * // Use custom format options\n * intl.formatTimestamp(1733251200, { year: '2-digit', month: '2-digit', day: '2-digit' });\n * // \"12/03/25\"\n *\n * // No options (basic format)\n * intl.formatTimestamp(1733251200);\n * ```\n */\n formatTimestamp: (\n timestamp?: number | string,\n options?: Intl.DateTimeFormatOptions | string\n ) => string\n\n /**\n * Change the locale and optionally update messages\n *\n * @param locale - new locale code (e.g., 'en-US', 'de-DE')\n * @param messages - optional new messages object for the locale\n */\n setLocale: (locale: string, messages?: IntlMessages) => void\n\n /**\n * Get the current locale\n *\n * @returns - current locale code (e.g., 'en-US', 'de-DE')\n */\n getLocale: () => string\n\n /**\n * Set fallback translations to use when a translation key is missing\n * Useful when the host app's intl service doesn't have all translations\n *\n * @param fallbackMessages - translations to use as fallback\n *\n * @example\n * ```typescript\n * // After intl service is initialized by host app\n * intl.setFallbackTranslations(defaultMessages);\n * ```\n */\n setFallbackTranslations: (fallbackMessages: IntlMessages) => void\n\n /**\n * Signal that tracks locale changes\n * Use this signal to reactively update UI when locale changes\n */\n localeChanged: { value: number }\n}\n\n/**\n * Default configuration for intl\n */\nexport const defaultConfig: IntlConfig = {\n locale: 'en-US',\n messages: {},\n formats: {},\n}\n\n/**\n * Global intl service instance\n */\nlet intlService: IntlService | null = null\n\n/**\n * Create a new intl service instance\n *\n * @param config - intl configuration with locale and messages\n * @returns IntlService instance with formatting methods\n *\n * @example\n * ```typescript\n * import { createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService({\n * locale: 'en-US',\n * messages: customMessages,\n * });\n *\n * const translated = intl.formatMessage('app.title');\n * const formatted = intl.formatNumber(1234.56);\n * const currentLocale = intl.getLocale(); // 'en-US'\n *\n * // Change locale\n * intl.setLocale('de-DE', germanMessages);\n * console.log(intl.getLocale()); // 'de-DE'\n * ```\n */\nexport function createIntlService(\n config: IntlConfig = defaultConfig\n): IntlService {\n let currentConfig = { ...defaultConfig, ...config }\n let intl = createIntl({ ...currentConfig, defaultLocale: 'en-US' })\n const localeChanged = signal(0)\n let fallbackMessages: IntlMessages = {}\n\n return {\n formatMessage: (key: string, options?: Record<string, string>): string => {\n try {\n const result = intl.formatMessage({ id: key }, options)\n\n if (result && result !== key) {\n return result\n }\n\n // If no translation found, check fallback\n if (fallbackMessages[key]) {\n return fallbackMessages[key]\n }\n\n return key\n } catch {\n // On error, try fallback\n return fallbackMessages[key] || key\n }\n },\n\n formatNumber: (\n value: number | string | bigint,\n options: FormatNumberOptions = {}\n ): string => {\n if (value === null || value === undefined) {\n return '0'\n }\n\n const _value =\n typeof value === 'string' ? Number.parseFloat(value) : value\n\n const mergedOptions = {\n ...formatNumberDefaultOptions,\n ...options,\n }\n\n return intl.formatNumber(_value as number, mergedOptions) || ''\n },\n\n formatDate: (date?: string | number | Date): string => {\n return intl.formatDate(date)\n },\n\n formatTime: (date?: string | number | Date): string => {\n return intl.formatTime(date)\n },\n\n formatTimestamp: (\n timestamp?: number | string,\n options?: Intl.DateTimeFormatOptions | string\n ): string => {\n if (!timestamp) return ''\n\n const time = typeof timestamp === 'string' ? Number(timestamp) : timestamp\n const date =\n time < 10_000_000_000\n ? new Date(time * 1000) // seconds\n : new Date(time) // milliseconds\n\n // Handle predefined format\n if (typeof options === 'string') {\n const dateTimeOptions = currentConfig.formats?.date?.[\n options\n ] as Intl.DateTimeFormatOptions\n\n if (dateTimeOptions) {\n return new Intl.DateTimeFormat(\n currentConfig.locale,\n dateTimeOptions\n ).format(date)\n }\n\n // Fallback to default format if predefined format not found\n return intl.formatDate(date) || ''\n }\n\n // For normal @formatjs/intl options\n return intl.formatDate(date, options) || ''\n },\n\n setLocale: (locale: string, messages?: IntlMessages): void => {\n currentConfig = {\n ...currentConfig,\n locale,\n messages: messages || currentConfig.messages,\n }\n intl = createIntl({\n ...currentConfig,\n defaultLocale: 'en-US',\n })\n localeChanged.value += 1\n },\n\n getLocale: (): string => {\n return currentConfig.locale\n },\n\n setFallbackTranslations: (fallbackMessagesInput: IntlMessages): void => {\n fallbackMessages = fallbackMessagesInput\n },\n\n localeChanged,\n }\n}\n\n/**\n * Set the global intl service\n * Call this once from your app initialization\n *\n * @param service - IntlService instance\n *\n * @example\n * ```typescript\n * import { setIntlService, createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService(config);\n * setIntlService(intl);\n * ```\n */\nexport function setIntlService(service: IntlService): void {\n intlService = service\n}\n\n/**\n * Get the current global intl service\n * Returns null if no service has been set\n *\n * @example\n * ```typescript\n * import { getIntlService } from '@lukso/core/services/intl';\n *\n * const intl = getIntlService();\n * if (intl) {\n * console.log(intl.getLocale());\n * }\n * ```\n */\nexport function getIntlService(): IntlService | null {\n return intlService\n}\n\n/**\n * Clear the global intl service\n * Useful for testing or cleanup\n */\nexport function clearIntlService(): void {\n intlService = null\n}\n"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createIntlService,
|
|
3
|
+
defaultConfig,
|
|
4
|
+
getIntlService,
|
|
5
|
+
setIntlService
|
|
6
|
+
} from "./chunk-4TNWG4ME.js";
|
|
7
|
+
|
|
8
|
+
// src/mixins/intl.ts
|
|
9
|
+
import { effect } from "@preact/signals-core";
|
|
10
|
+
|
|
11
|
+
// ../translations/en_US.json
|
|
12
|
+
var en_US_default = {
|
|
13
|
+
connect_modal_try_again: "Try again",
|
|
14
|
+
connect_modal_title: "Let\u2019s log you in",
|
|
15
|
+
connect_modal_qr_code_title: "Scan to log in",
|
|
16
|
+
connect_modal_qr_code_description: "Scan the below QR code with the Universal Profile mobile app to log in",
|
|
17
|
+
connect_modal_other_connectors: "Connect Wallet",
|
|
18
|
+
connect_modal_or_info: "Log in with a different wallet",
|
|
19
|
+
connect_modal_or: "Or",
|
|
20
|
+
connect_modal_installed: "INSTALLED",
|
|
21
|
+
connect_modal_failed_to_load: "Failed to load...",
|
|
22
|
+
connect_modal_eoa_title: "Connect your Wallet",
|
|
23
|
+
connect_modal_description: "Log in with your Universal Profile",
|
|
24
|
+
connect_modal_connectors_up_mobile: "Mobile Application",
|
|
25
|
+
connect_modal_connectors_up_browser_extension: "Browser Extension",
|
|
26
|
+
connect_modal_connectors_passkey_wallet: "Passkey Wallet"
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/mixins/intl.ts
|
|
30
|
+
function withIntlService(Base) {
|
|
31
|
+
class Mixin extends Base {
|
|
32
|
+
constructor() {
|
|
33
|
+
super(...arguments);
|
|
34
|
+
this.unsubscribeIntl = void 0;
|
|
35
|
+
}
|
|
36
|
+
connectedCallback() {
|
|
37
|
+
super.connectedCallback();
|
|
38
|
+
let intl = getIntlService();
|
|
39
|
+
if (!intl) {
|
|
40
|
+
intl = this.setupLocalIntl() ?? null;
|
|
41
|
+
}
|
|
42
|
+
if (intl) {
|
|
43
|
+
this.unsubscribeIntl = effect(() => {
|
|
44
|
+
intl?.localeChanged.value;
|
|
45
|
+
this.requestUpdate();
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
intl?.setFallbackTranslations(en_US_default);
|
|
49
|
+
}
|
|
50
|
+
disconnectedCallback() {
|
|
51
|
+
super.disconnectedCallback();
|
|
52
|
+
if (typeof this.unsubscribeIntl === "function") {
|
|
53
|
+
this.unsubscribeIntl();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Setup a local intl service with default configuration
|
|
58
|
+
* Subclasses can override this to customize initialization
|
|
59
|
+
*/
|
|
60
|
+
setupLocalIntl() {
|
|
61
|
+
const intlService = createIntlService(
|
|
62
|
+
Object.assign(defaultConfig, {
|
|
63
|
+
messages: en_US_default
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
setIntlService(intlService);
|
|
67
|
+
return intlService;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Format message using the intl service
|
|
71
|
+
*/
|
|
72
|
+
formatMessage(key, options) {
|
|
73
|
+
if (!key) {
|
|
74
|
+
console.warn("No translation key provided to formatMessage");
|
|
75
|
+
return "";
|
|
76
|
+
}
|
|
77
|
+
const intl = getIntlService();
|
|
78
|
+
return intl?.formatMessage(key, options) ?? key;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return Mixin;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export {
|
|
85
|
+
withIntlService
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=chunk-SV4TVR2K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mixins/intl.ts","../../translations/en_US.json"],"sourcesContent":["/**\n * Internationalization Mixin\n *\n * Mixin to add internationalization service to a Lit component\n */\n\nimport { effect } from '@preact/signals-core'\nimport type { LitElement } from 'lit'\nimport englishTranslations from '../../../translations/en_US.json'\nimport {\n createIntlService,\n defaultConfig,\n getIntlService,\n type IntlService,\n setIntlService,\n} from '../services/intl.js'\n\n/**\n * Mixin to add internationalization service to a Lit component\n *\n * Provides access to the global intl service with reactive locale changes.\n * Automatically subscribes to locale changes and triggers re-renders.\n *\n * The component will use the global intl service if available, or create a local one.\n * This follows the singleton pattern for the global service while allowing flexibility.\n *\n * @typeParam T - The Lit component class being extended\n * @returns Extended class with intl service capabilities\n *\n * @example\n * ```typescript\n * import { LitElement, html } from 'lit';\n * import { customElement } from 'lit/decorators.js';\n * import { withIntlService } from '@lukso/core/mixins';\n *\n * @customElement('my-component')\n * export class MyComponent extends withIntlService(LitElement) {\n * render() {\n * return html\\`<p>\\${this.formatMessage('app.welcome')}</p>\\`;\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withIntlService<T extends typeof LitElement>(Base: T): any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n class Mixin extends (Base as any) {\n protected unsubscribeIntl: (() => void) | undefined = undefined\n\n connectedCallback(): void {\n super.connectedCallback()\n\n // Subscribe to intl changes via signal\n let intl: IntlService | null = getIntlService()\n\n // When no intl is provided by host app we initialize our own\n if (!intl) {\n intl = this.setupLocalIntl() ?? null\n }\n\n if (intl) {\n this.unsubscribeIntl = effect(() => {\n // Access the signal to track changes\n intl?.localeChanged.value\n this.requestUpdate()\n })\n }\n\n // Set fallback for missing translations\n intl?.setFallbackTranslations(englishTranslations as any)\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n\n // Unsubscribe from intl changes\n if (typeof this.unsubscribeIntl === 'function') {\n this.unsubscribeIntl()\n }\n }\n\n /**\n * Setup a local intl service with default configuration\n * Subclasses can override this to customize initialization\n */\n protected setupLocalIntl(): IntlService | undefined {\n const intlService = createIntlService(\n Object.assign(defaultConfig, {\n messages: englishTranslations,\n })\n )\n setIntlService(intlService)\n return intlService\n }\n\n /**\n * Format message using the intl service\n */\n formatMessage(key?: string, options?: Record<string, string>): string {\n if (!key) {\n console.warn('No translation key provided to formatMessage')\n return ''\n }\n\n const intl = getIntlService()\n return intl?.formatMessage(key, options) ?? key\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Mixin as any\n}\n","{\n \"connect_modal_try_again\": \"Try again\",\n \"connect_modal_title\": \"Let’s log you in\",\n \"connect_modal_qr_code_title\": \"Scan to log in\",\n \"connect_modal_qr_code_description\": \"Scan the below QR code with the Universal Profile mobile app to log in\",\n \"connect_modal_other_connectors\": \"Connect Wallet\",\n \"connect_modal_or_info\": \"Log in with a different wallet\",\n \"connect_modal_or\": \"Or\",\n \"connect_modal_installed\": \"INSTALLED\",\n \"connect_modal_failed_to_load\": \"Failed to load...\",\n \"connect_modal_eoa_title\": \"Connect your Wallet\",\n \"connect_modal_description\": \"Log in with your Universal Profile\",\n \"connect_modal_connectors_up_mobile\": \"Mobile Application\",\n \"connect_modal_connectors_up_browser_extension\": \"Browser Extension\",\n \"connect_modal_connectors_passkey_wallet\": \"Passkey Wallet\"\n}"],"mappings":";;;;;;;;AAMA,SAAS,cAAc;;;ACNvB;AAAA,EACE,yBAA2B;AAAA,EAC3B,qBAAuB;AAAA,EACvB,6BAA+B;AAAA,EAC/B,mCAAqC;AAAA,EACrC,gCAAkC;AAAA,EAClC,uBAAyB;AAAA,EACzB,kBAAoB;AAAA,EACpB,yBAA2B;AAAA,EAC3B,8BAAgC;AAAA,EAChC,yBAA2B;AAAA,EAC3B,2BAA6B;AAAA,EAC7B,oCAAsC;AAAA,EACtC,+CAAiD;AAAA,EACjD,yCAA2C;AAC7C;;;AD6BO,SAAS,gBAA6C,MAAc;AAAA,EAEzE,MAAM,cAAe,KAAa;AAAA,IAAlC;AAAA;AACE,WAAU,kBAA4C;AAAA;AAAA,IAEtD,oBAA0B;AACxB,YAAM,kBAAkB;AAGxB,UAAI,OAA2B,eAAe;AAG9C,UAAI,CAAC,MAAM;AACT,eAAO,KAAK,eAAe,KAAK;AAAA,MAClC;AAEA,UAAI,MAAM;AACR,aAAK,kBAAkB,OAAO,MAAM;AAElC,gBAAM,cAAc;AACpB,eAAK,cAAc;AAAA,QACrB,CAAC;AAAA,MACH;AAGA,YAAM,wBAAwB,aAA0B;AAAA,IAC1D;AAAA,IAEA,uBAA6B;AAC3B,YAAM,qBAAqB;AAG3B,UAAI,OAAO,KAAK,oBAAoB,YAAY;AAC9C,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMU,iBAA0C;AAClD,YAAM,cAAc;AAAA,QAClB,OAAO,OAAO,eAAe;AAAA,UAC3B,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,qBAAe,WAAW;AAC1B,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,cAAc,KAAc,SAA0C;AACpE,UAAI,CAAC,KAAK;AACR,gBAAQ,KAAK,8CAA8C;AAC3D,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,eAAe;AAC5B,aAAO,MAAM,cAAc,KAAK,OAAO,KAAK;AAAA,IAC9C;AAAA,EACF;AAGA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// src/services/device.ts
|
|
2
|
+
import { signal } from "@preact/signals-core";
|
|
3
|
+
import { UAParser } from "ua-parser-js";
|
|
4
|
+
function deviceService(navigator) {
|
|
5
|
+
const userAgent = navigator?.userAgent ?? "";
|
|
6
|
+
const parser = new UAParser(userAgent);
|
|
7
|
+
const result = parser.getResult();
|
|
8
|
+
const initialized = signal(1);
|
|
9
|
+
const deviceType = result.device.type;
|
|
10
|
+
const isMobile = deviceType === "mobile";
|
|
11
|
+
const isTablet = deviceType === "tablet";
|
|
12
|
+
const isDesktop = !deviceType;
|
|
13
|
+
const osName = result.os.name || "";
|
|
14
|
+
const isIOS = osName.includes("iOS") || osName.includes("Mac OS");
|
|
15
|
+
const isAndroid = osName === "Android";
|
|
16
|
+
const isWindows = osName === "Windows";
|
|
17
|
+
const isMacOS = osName === "Mac OS";
|
|
18
|
+
const isLinux = osName === "Linux";
|
|
19
|
+
const browserName = result.browser.name || "";
|
|
20
|
+
const isChrome = browserName === "Chrome";
|
|
21
|
+
const isSafari = browserName === "Safari";
|
|
22
|
+
const isFirefox = browserName === "Firefox";
|
|
23
|
+
const isEdge = browserName === "Edge";
|
|
24
|
+
const isOpera = browserName === "Opera";
|
|
25
|
+
const isBrave = navigator?.brave !== void 0;
|
|
26
|
+
return {
|
|
27
|
+
isMobile,
|
|
28
|
+
isTablet,
|
|
29
|
+
isDesktop,
|
|
30
|
+
isIOS,
|
|
31
|
+
isAndroid,
|
|
32
|
+
isWindows,
|
|
33
|
+
isMacOS,
|
|
34
|
+
isLinux,
|
|
35
|
+
isChrome,
|
|
36
|
+
isSafari,
|
|
37
|
+
isFirefox,
|
|
38
|
+
isEdge,
|
|
39
|
+
isOpera,
|
|
40
|
+
isBrave,
|
|
41
|
+
getRaw: () => result,
|
|
42
|
+
initialized
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export {
|
|
47
|
+
deviceService
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=chunk-X2QNFZU7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/device.ts"],"sourcesContent":["/**\n * Device Detection Service\n *\n * Provides device type, OS, and browser detection using ua-parser-js\n */\n\nimport { signal } from '@preact/signals-core'\nimport { UAParser } from 'ua-parser-js'\n\n/**\n * Device detection flags and utilities\n */\nexport interface DeviceService {\n /**\n * Device type detection flags\n */\n isMobile: boolean\n isTablet: boolean\n isDesktop: boolean\n\n /**\n * Operating system detection flags\n */\n isIOS: boolean\n isAndroid: boolean\n isWindows: boolean\n isMacOS: boolean\n isLinux: boolean\n\n /**\n * Browser detection flags\n */\n isChrome: boolean\n isSafari: boolean\n isFirefox: boolean\n isEdge: boolean\n isOpera: boolean\n isBrave: boolean\n\n /**\n * Get raw parser result for additional details\n * @returns Full UAParser result object\n */\n getRaw: () => ReturnType<UAParser['getResult']>\n\n /**\n * Signal that tracks device detector initialization\n * Useful for reactivity in web components\n */\n initialized: { value: number }\n}\n\nexport interface NavigatorExtended extends Navigator {\n brave?: unknown\n}\n\n/**\n * Create a new device detector instance\n *\n * @param navigator - Optional custom navigator object (uses global navigator by default)\n * @returns DeviceService instance with device/OS/browser detection\n *\n * @example\n * ```typescript\n * import { deviceService } from '@lukso/core/services/device';\n *\n * const device = deviceService();\n *\n * if (device.isMobile) {\n * console.log('User is on mobile');\n * }\n * ```\n */\nexport function deviceService(navigator?: NavigatorExtended): DeviceService {\n const userAgent = navigator?.userAgent ?? ''\n const parser = new UAParser(userAgent)\n const result = parser.getResult()\n const initialized = signal(1)\n\n // Determine device type\n const deviceType = result.device.type as 'mobile' | 'tablet' | undefined\n const isMobile = deviceType === 'mobile'\n const isTablet = deviceType === 'tablet'\n const isDesktop = !deviceType\n\n // Operating system detection\n const osName = result.os.name || ''\n const isIOS = osName.includes('iOS') || osName.includes('Mac OS')\n const isAndroid = osName === 'Android'\n const isWindows = osName === 'Windows'\n const isMacOS = osName === 'Mac OS'\n const isLinux = osName === 'Linux'\n\n // Browser detection\n const browserName = result.browser.name || ''\n const isChrome = browserName === 'Chrome'\n const isSafari = browserName === 'Safari'\n const isFirefox = browserName === 'Firefox'\n const isEdge = browserName === 'Edge'\n const isOpera = browserName === 'Opera'\n const isBrave = navigator?.brave !== undefined\n\n return {\n isMobile,\n isTablet,\n isDesktop,\n isIOS,\n isAndroid,\n isWindows,\n isMacOS,\n isLinux,\n isChrome,\n isSafari,\n isFirefox,\n isEdge,\n isOpera,\n isBrave,\n getRaw: () => result,\n initialized,\n }\n}\n"],"mappings":";AAMA,SAAS,cAAc;AACvB,SAAS,gBAAgB;AAkElB,SAAS,cAAc,WAA8C;AAC1E,QAAM,YAAY,WAAW,aAAa;AAC1C,QAAM,SAAS,IAAI,SAAS,SAAS;AACrC,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,cAAc,OAAO,CAAC;AAG5B,QAAM,aAAa,OAAO,OAAO;AACjC,QAAM,WAAW,eAAe;AAChC,QAAM,WAAW,eAAe;AAChC,QAAM,YAAY,CAAC;AAGnB,QAAM,SAAS,OAAO,GAAG,QAAQ;AACjC,QAAM,QAAQ,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS,QAAQ;AAChE,QAAM,YAAY,WAAW;AAC7B,QAAM,YAAY,WAAW;AAC7B,QAAM,UAAU,WAAW;AAC3B,QAAM,UAAU,WAAW;AAG3B,QAAM,cAAc,OAAO,QAAQ,QAAQ;AAC3C,QAAM,WAAW,gBAAgB;AACjC,QAAM,WAAW,gBAAgB;AACjC,QAAM,YAAY,gBAAgB;AAClC,QAAM,SAAS,gBAAgB;AAC/B,QAAM,UAAU,gBAAgB;AAChC,QAAM,UAAU,WAAW,UAAU;AAErC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,MAAM;AAAA,IACd;AAAA,EACF;AACF;","names":[]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-AMRGSLR5.cjs');
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkCC3LFUYYcjs = require('./chunk-CC3LFUYY.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkFR74YPGJcjs = require('./chunk-FR74YPGJ.cjs');
|
|
8
|
+
require('./chunk-DFMMMF62.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var _chunkNJQVWIZLcjs = require('./chunk-NJQVWIZL.cjs');
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var _chunkRM42NG7Ecjs = require('./chunk-RM42NG7E.cjs');
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
var _chunkMBIRTPNMcjs = require('./chunk-MBIRTPNM.cjs');
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
exports.EXTENSION_STORE_LINKS = _chunkMBIRTPNMcjs.EXTENSION_STORE_LINKS; exports.browserInfo = _chunkMBIRTPNMcjs.browserInfo; exports.clearIntlService = _chunkRM42NG7Ecjs.clearIntlService; exports.createIntlService = _chunkRM42NG7Ecjs.createIntlService; exports.defaultConfig = _chunkRM42NG7Ecjs.defaultConfig; exports.deviceService = _chunkNJQVWIZLcjs.deviceService; exports.getIntlService = _chunkRM42NG7Ecjs.getIntlService; exports.setIntlService = _chunkRM42NG7Ecjs.setIntlService; exports.slug = _chunkMBIRTPNMcjs.slug; exports.withDeviceService = _chunkCC3LFUYYcjs.withDeviceService; exports.withIntlService = _chunkFR74YPGJcjs.withIntlService;
|
|
37
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/index.cjs"],"names":[],"mappings":"AAAA,yGAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,0oBAAC","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/index.cjs"}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { withDeviceService } from './mixins/device.cjs';
|
|
2
|
+
export { withIntlService } from './mixins/intl.cjs';
|
|
3
|
+
export { DeviceService, NavigatorExtended, deviceService } from './services/device.cjs';
|
|
4
|
+
export { IntlMessages, IntlService, clearIntlService, createIntlService, defaultConfig, getIntlService, setIntlService } from './services/intl.cjs';
|
|
5
|
+
export { BrowserInfo, BrowserName, EXTENSION_STORE_LINKS, browserInfo, slug } from './utils/index.cjs';
|
|
6
|
+
import 'lit';
|
|
7
|
+
import 'ua-parser-js';
|
|
8
|
+
import '@formatjs/intl';
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { withDeviceService } from './mixins/device.js';
|
|
2
|
+
export { withIntlService } from './mixins/intl.js';
|
|
3
|
+
export { DeviceService, NavigatorExtended, deviceService } from './services/device.js';
|
|
4
|
+
export { IntlMessages, IntlService, clearIntlService, createIntlService, defaultConfig, getIntlService, setIntlService } from './services/intl.js';
|
|
5
|
+
export { BrowserInfo, BrowserName, EXTENSION_STORE_LINKS, browserInfo, slug } from './utils/index.js';
|
|
6
|
+
import 'lit';
|
|
7
|
+
import 'ua-parser-js';
|
|
8
|
+
import '@formatjs/intl';
|