@lukso/core 1.1.0-dev.5ea12c5 → 1.1.0-dev.c21633f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +55 -0
  2. package/dist/chains/index.cjs +1 -0
  3. package/dist/chains/index.cjs.map +1 -1
  4. package/dist/chains/index.js +1 -0
  5. package/dist/chunk-CUDG6NPH.cjs +111 -0
  6. package/dist/chunk-CUDG6NPH.cjs.map +1 -0
  7. package/dist/chunk-DWXFDFMM.cjs +1 -0
  8. package/dist/chunk-DWXFDFMM.cjs.map +1 -0
  9. package/dist/chunk-EUXUH3YW.js +15 -0
  10. package/dist/chunk-GFLV5EJV.js +159 -0
  11. package/dist/chunk-GFLV5EJV.js.map +1 -0
  12. package/dist/chunk-JEE6C34P.js +1 -0
  13. package/dist/chunk-JEE6C34P.js.map +1 -0
  14. package/dist/chunk-LQIOVPBE.js +111 -0
  15. package/dist/chunk-LQIOVPBE.js.map +1 -0
  16. package/dist/chunk-QU6NUTY6.cjs +159 -0
  17. package/dist/chunk-QU6NUTY6.cjs.map +1 -0
  18. package/dist/chunk-ZBDE64SD.cjs +15 -0
  19. package/dist/chunk-ZBDE64SD.cjs.map +1 -0
  20. package/dist/config.cjs +1 -0
  21. package/dist/config.cjs.map +1 -1
  22. package/dist/config.js +1 -0
  23. package/dist/index.cjs +14 -5
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +2 -1
  26. package/dist/index.d.ts +2 -1
  27. package/dist/index.js +13 -4
  28. package/dist/mixins/device.cjs +1 -0
  29. package/dist/mixins/device.cjs.map +1 -1
  30. package/dist/mixins/device.js +1 -0
  31. package/dist/mixins/index.cjs +7 -2
  32. package/dist/mixins/index.cjs.map +1 -1
  33. package/dist/mixins/index.d.cts +1 -0
  34. package/dist/mixins/index.d.ts +1 -0
  35. package/dist/mixins/index.js +7 -2
  36. package/dist/mixins/intl.cjs +1 -0
  37. package/dist/mixins/intl.cjs.map +1 -1
  38. package/dist/mixins/intl.js +1 -0
  39. package/dist/mixins/theme.cjs +8 -0
  40. package/dist/mixins/theme.cjs.map +1 -0
  41. package/dist/mixins/theme.d.cts +45 -0
  42. package/dist/mixins/theme.d.ts +45 -0
  43. package/dist/mixins/theme.js +8 -0
  44. package/dist/mixins/theme.js.map +1 -0
  45. package/dist/services/device.cjs +1 -0
  46. package/dist/services/device.cjs.map +1 -1
  47. package/dist/services/device.js +1 -0
  48. package/dist/services/index.cjs +1 -0
  49. package/dist/services/index.cjs.map +1 -1
  50. package/dist/services/index.js +1 -0
  51. package/dist/services/intl.cjs +1 -0
  52. package/dist/services/intl.cjs.map +1 -1
  53. package/dist/services/intl.js +1 -0
  54. package/dist/utils/index.cjs +7 -2
  55. package/dist/utils/index.cjs.map +1 -1
  56. package/dist/utils/index.d.cts +34 -1
  57. package/dist/utils/index.d.ts +34 -1
  58. package/dist/utils/index.js +6 -1
  59. package/package.json +7 -1
  60. package/src/mixins/__tests__/theme.spec.ts +478 -0
  61. package/src/mixins/index.ts +1 -0
  62. package/src/mixins/theme.ts +172 -0
  63. package/src/utils/index.ts +1 -0
  64. package/src/utils/url-resolver.ts +93 -0
  65. package/dist/chunk-AMRGSLR5.cjs +0 -1
  66. package/dist/chunk-AMRGSLR5.cjs.map +0 -1
  67. package/dist/chunk-DKEXQFNE.js +0 -1
  68. package/dist/chunk-DKXHVRHM.js +0 -84
  69. package/dist/chunk-DKXHVRHM.js.map +0 -1
  70. package/dist/chunk-MBIRTPNM.cjs +0 -84
  71. package/dist/chunk-MBIRTPNM.cjs.map +0 -1
  72. /package/dist/{chunk-DKEXQFNE.js.map → chunk-EUXUH3YW.js.map} +0 -0
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Theme Mixin
3
+ *
4
+ * Mixin to add theme detection and management to a Lit component
5
+ */
6
+
7
+ import type { LitElement } from 'lit'
8
+ import { property, state } from 'lit/decorators.js'
9
+
10
+ export type Theme = 'light' | 'dark' | 'auto'
11
+
12
+ /**
13
+ * Mixin to add theme management to a Lit component
14
+ *
15
+ * Provides a `theme` property and `isDark` state that automatically handles:
16
+ * - Manual theme selection ('light' or 'dark')
17
+ * - Auto theme detection based on system preferences
18
+ * - Reactive updates when system theme changes
19
+ * - Automatically wraps all rendered content in a themed div with 'dark' class when dark mode is active
20
+ *
21
+ * All content rendered by the component will be inside a theme-root div that receives the dark class.
22
+ * Components can use render() normally - no changes needed.
23
+ *
24
+ * @typeParam T - The Lit component class being extended
25
+ * @returns Extended class with theme management capabilities
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { LitElement, html } from 'lit';
30
+ * import { customElement } from 'lit/decorators.js';
31
+ * import { withTheme } from '@lukso/core/mixins';
32
+ *
33
+ * @customElement('my-component')
34
+ * export class MyComponent extends withTheme(LitElement) {
35
+ * render() {
36
+ * return html`
37
+ * <div class="text-neutral-20 dark:text-neutral-100">
38
+ * Current theme: ${this.theme}
39
+ * </div>
40
+ * `;
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ export function withTheme<T extends typeof LitElement>(Base: T): any {
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ class Mixin extends (Base as any) {
49
+ /**
50
+ * Theme mode: 'light', 'dark', or 'auto' (follows system preference)
51
+ */
52
+ @property({ type: String, reflect: true })
53
+ theme: Theme = 'light'
54
+
55
+ /**
56
+ * Computed state indicating if dark mode is active
57
+ */
58
+ @state()
59
+ protected isDark = false
60
+
61
+ /**
62
+ * The theme root element that wraps all rendered content and receives the dark class
63
+ */
64
+ private themeRoot!: HTMLDivElement
65
+
66
+ private mediaQueryList: MediaQueryList | null = null
67
+
68
+ connectedCallback(): void {
69
+ super.connectedCallback()
70
+ this.updateTheme()
71
+ this.updateHostClass()
72
+
73
+ // Listen for system theme changes when in 'auto' mode
74
+ if (this.theme === 'auto') {
75
+ this.mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)')
76
+ this.mediaQueryList.addEventListener(
77
+ 'change',
78
+ this.handleMediaQueryChange
79
+ )
80
+ }
81
+ }
82
+
83
+ disconnectedCallback(): void {
84
+ super.disconnectedCallback()
85
+
86
+ if (this.mediaQueryList) {
87
+ this.mediaQueryList.removeEventListener(
88
+ 'change',
89
+ this.handleMediaQueryChange
90
+ )
91
+ }
92
+ }
93
+
94
+ updated(changedProperties: Map<string, any>): void {
95
+ super.updated(changedProperties)
96
+
97
+ // Handle theme changes
98
+ if (changedProperties.has('theme')) {
99
+ this.updateTheme()
100
+
101
+ // Update media query listener when theme mode changes
102
+ if (this.theme === 'auto' && !this.mediaQueryList) {
103
+ this.mediaQueryList = window.matchMedia(
104
+ '(prefers-color-scheme: dark)'
105
+ )
106
+ this.mediaQueryList.addEventListener(
107
+ 'change',
108
+ this.handleMediaQueryChange
109
+ )
110
+ } else if (this.theme !== 'auto' && this.mediaQueryList) {
111
+ this.mediaQueryList.removeEventListener(
112
+ 'change',
113
+ this.handleMediaQueryChange
114
+ )
115
+ this.mediaQueryList = null
116
+ }
117
+ }
118
+
119
+ // Update host class when isDark changes
120
+ if (changedProperties.has('isDark')) {
121
+ this.updateHostClass()
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Handle system theme changes
127
+ *
128
+ * @param event - Media query list event
129
+ */
130
+ private handleMediaQueryChange = (event: MediaQueryListEvent): void => {
131
+ this.isDark = event.matches
132
+ }
133
+
134
+ /**
135
+ * Update isDark state based on theme property
136
+ */
137
+ protected updateTheme(): void {
138
+ if (this.theme === 'auto') {
139
+ this.isDark = window.matchMedia('(prefers-color-scheme: dark)').matches
140
+ } else {
141
+ this.isDark = this.theme === 'dark'
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Create the render root with a themed wrapper div
147
+ */
148
+ createRenderRoot(): Element | ShadowRoot {
149
+ const root = super.createRenderRoot()
150
+
151
+ this.themeRoot = document.createElement('div')
152
+ this.themeRoot.setAttribute('data-theme-root', '')
153
+
154
+ root.appendChild(this.themeRoot)
155
+ return this.themeRoot
156
+ }
157
+
158
+ /**
159
+ * Update the host element's class based on isDark state
160
+ */
161
+ private updateHostClass(): void {
162
+ if (this.isDark) {
163
+ this.themeRoot.classList.add('dark')
164
+ } else {
165
+ this.themeRoot.classList.remove('dark')
166
+ }
167
+ }
168
+ }
169
+
170
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
+ return Mixin as any
172
+ }
@@ -2,3 +2,4 @@ export type { BrowserInfo, BrowserName } from './browserInfo.js'
2
2
  export { browserInfo, EXTENSION_STORE_LINKS } from './browserInfo.js'
3
3
 
4
4
  export { slug } from './slug.js'
5
+ export { UrlConverter, UrlResolver } from './url-resolver.js'
@@ -0,0 +1,93 @@
1
+ export class UrlConverter {
2
+ private destination: URL
3
+ /**
4
+ * It will relatively append pathname or hostname to the destination URL
5
+ *
6
+ * For example:
7
+ * destination=https://some.api.gateway/something/ipfs
8
+ * url=ipfs://QmSomeHash
9
+ * output=https://some.api.gateway/something/ipfs/QmSomeHash
10
+ *
11
+ * destination=https://some.api.gateway/something/ipfs
12
+ * url=https://something.com/somewhere
13
+ * output=https://some.api.gateway/something/ipfs/somewhere
14
+ *
15
+ * @param destination destination string | URL
16
+ */
17
+ constructor(destination: string | URL) {
18
+ this.destination = new URL(destination)
19
+ if (this.destination.pathname.at(-1) !== '/') {
20
+ this.destination.pathname += '/'
21
+ }
22
+ }
23
+
24
+ resolveUrl(url: string): string {
25
+ // Parse and convert to javascript URL objects
26
+ // this will manage / and relative paths for us.
27
+ const source = new URL(url)
28
+ // extract the relative path. For URLs with a pathname prepend "." to make it ./ (i.e. relative)
29
+ // for anything that only has a hostname we prepend ./ to make it relative
30
+ // the pathname is at least slash for https urls, but '' for ipfs for example
31
+ const relativePath = source.pathname
32
+ ? `./${source.hostname}${source.pathname}` // pathname always starts with at least a slash
33
+ : `./${source.hostname}`
34
+ // Construct relative URL on destination using the relative pathname.
35
+ const out = new URL(relativePath, this.destination)
36
+ out.pathname = out.pathname.replaceAll(/\/\/+/g, '/')
37
+ return out.toString()
38
+ }
39
+ }
40
+
41
+ export class UrlResolver {
42
+ private converters: Array<{
43
+ match: string | RegExp
44
+ converter: UrlConverter
45
+ }> = []
46
+ constructor(converters: Array<[string | RegExp, UrlConverter | string]>) {
47
+ for (const item of converters) {
48
+ const [match, _converter] = item
49
+ if (match == null) {
50
+ throw new TypeError('Match criteria not defined')
51
+ }
52
+ const converter =
53
+ typeof _converter === 'string'
54
+ ? new UrlConverter(_converter)
55
+ : _converter
56
+ if (!(converter instanceof UrlConverter)) {
57
+ throw new TypeError('Invalid converter')
58
+ }
59
+ this.converters.push({ match, converter })
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Resolves a URL to a gateway URL.
65
+ * Supports possible multiple converters transforming the URL
66
+ * in sequence until no converter matches.
67
+ *
68
+ * @param {string} url to resolve
69
+ * @returns {string} resolved url (if resolver is found, otherwise the parameter url is returned)
70
+ */
71
+ resolveUrl(url_: string): string {
72
+ let url = url_
73
+ const current = new Set<{
74
+ match: string | RegExp
75
+ converter: UrlConverter
76
+ }>(this.converters)
77
+ let found = true
78
+ while (found) {
79
+ found = false
80
+ for (const entry of current) {
81
+ const { match, converter } = entry
82
+ if (match instanceof RegExp ? match.test(url) : url.startsWith(match)) {
83
+ url = converter.resolveUrl(url)
84
+ // This converter matches, so don't use it again.
85
+ current.delete(entry)
86
+ found = true
87
+ break
88
+ }
89
+ }
90
+ }
91
+ return url
92
+ }
93
+ }
@@ -1 +0,0 @@
1
- "use strict";//# sourceMappingURL=chunk-AMRGSLR5.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-AMRGSLR5.cjs"],"names":[],"mappings":"AAAA","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-AMRGSLR5.cjs"}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-DKEXQFNE.js.map
@@ -1,84 +0,0 @@
1
- // 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
- export {
80
- EXTENSION_STORE_LINKS,
81
- browserInfo,
82
- slug
83
- };
84
- //# sourceMappingURL=chunk-DKXHVRHM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/browserInfo.ts","../src/utils/slug.ts"],"sourcesContent":["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"],"mappings":";AAkBO,IAAM,wBAAwB;AAAA,EACnC,QACE;AAAA,EACF,OACE;AAAA,EACF,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AACX;AAKO,IAAM,cAAc,CAAC,kBAA8C;AACxE,QAAM,sBAAsB;AAAA,IAC1B,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAEA,QAAM,gBAAgB,MAA+B;AACnD,UAAM,EAAE,UAAU,SAAS,WAAW,UAAU,QAAQ,QAAQ,IAC9D;AAEF,QAAI,SAAS;AACX,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,sBAAsB;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,sBAAsB;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,SAAS;AACX,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,sBAAsB;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,UAAU;AACZ,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,sBAAsB;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,WAAW;AACb,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,sBAAsB;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,UAAU;AACZ,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,sBAAsB;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,QAAMA,eAAc,EAAE,GAAG,qBAAqB,GAAG,cAAc,EAAE;AAEjE,SAAOA;AACT;;;AC/FO,IAAM,OAAO,CAAC,UAAmB;AACtC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,YAAY,EAAE,QAAQ,QAAQ,GAAG;AAChD;","names":["browserInfo"]}
@@ -1,84 +0,0 @@
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
@@ -1 +0,0 @@
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"]}