@tapni/auth 1.0.4 → 1.0.6-3.dev
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/README.md +2 -0
- package/dist/.vite/manifest.json +23 -40
- package/dist/.well-known/assetlinks.json +10 -12
- package/dist/.well-known/microsoft-identity-association.json +5 -5
- package/dist/Apps-XNA4_3B4.js +109 -0
- package/dist/Billing-Br0-fHed.js +256 -0
- package/dist/CustomApp-CrlbYDOm.js +83 -0
- package/dist/QR-Bvqb60-E.js +41 -0
- package/dist/TapniAuth.es.js +1 -1
- package/dist/TapniAuth.umd.js +49 -23
- package/dist/{install-BzPu9V_c.js → install-7FOVy8Ol.js} +6328 -4767
- package/dist/site.webmanifest +11 -1
- package/dist/style.css +1 -1
- package/dist/{web-IFGkBi0t.js → web-UrTMimK1.js} +2 -2
- package/package.json +65 -55
- package/src/.prettierrc.json +16 -0
- package/src/App.vue +329 -259
- package/src/eslint.config.js +15 -0
- package/src/index.js +4 -0
- package/src/install.js +9 -10
- package/src/main.js +54 -58
- package/src/mixins/apple.mixin.js +56 -54
- package/src/mixins/auth.mixin.js +3 -2
- package/src/mixins/global.mixin.js +3 -3
- package/src/mixins/google.mixin.js +53 -54
- package/src/mixins/microsoft.mixin.js +2 -8
- package/src/mixins/okta.mixin.js +2 -2
- package/src/mixins/qr-auth.mixin.js +111 -107
- package/src/mixins/saml.mixin.js +82 -45
- package/src/router/index.js +6 -6
- package/src/routes.js +7 -1
- package/src/services/Api.js +56 -58
- package/src/services/AuthService.js +13 -9
- package/src/services/CompanyService.js +10 -10
- package/src/services/DeviceService.js +3 -3
- package/src/services/MetadataService.js +10 -0
- package/src/services/UserService.js +48 -45
- package/src/services/UtilService.js +317 -225
- package/src/store/auth.js +485 -549
- package/src/store/constants.js +2 -2
- package/src/store/event-bus.js +22 -22
- package/src/store/locales/cn.js +476 -458
- package/src/store/locales/de.js +478 -517
- package/src/store/locales/en.js +454 -512
- package/src/store/locales/es.js +477 -524
- package/src/store/locales/fr.js +477 -516
- package/src/store/locales/it.js +477 -514
- package/src/store/locales/ja.js +488 -0
- package/src/store/locales/kr.js +477 -491
- package/src/store/locales/lang.js +51 -43
- package/src/store/locales/pt.js +488 -0
- package/src/store/locales/sr.js +477 -492
- package/src/store/locales/tr.js +477 -487
- package/src/store/store.js +6 -6
- package/src/views/Account.vue +36 -8
- package/src/views/Apps.vue +17 -30
- package/src/views/Billing.vue +538 -0
- package/src/views/Callback.vue +36 -33
- package/src/views/CustomApp.vue +14 -39
- package/src/views/General.vue +151 -184
- package/src/views/Login.vue +173 -161
- package/src/views/Register.vue +2 -12
- package/src/views/Reset.vue +132 -135
- package/src/views/Security.vue +13 -7
- package/src/views/Verify.vue +153 -151
- package/src/views/Welcome.vue +85 -71
- package/dist/Account-zep_QUuI.js +0 -153
- package/dist/Apps-B9XB7Z7q.js +0 -112
- package/dist/CustomApp-BzUsyycz.js +0 -112
- package/dist/General-DkcdjPYQ.js +0 -477
- package/dist/QR-PW6cAG5j.js +0 -41
- package/dist/index.css +0 -193
- package/dist/web-AXRKjAOB.js +0 -92
- package/src/components/DELETE_Language.vue +0 -168
- package/src/components/DELETE_LinkIcon.vue +0 -288
- package/src/components/DELETE_ModalOverlay.vue +0 -68
- package/src/components/DELETE_OTP.vue +0 -105
- package/src/components/SSO.vue +0 -126
- package/src/components/SSOPick.vue +0 -166
- package/src/mixins/DELETE_mfa-auth.mixin.js +0 -53
- package/src/mixins/facebook.mixin.js +0 -78
package/src/App.vue
CHANGED
|
@@ -1,322 +1,392 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { RouterView } from 'vue-router'
|
|
2
|
+
import { RouterView } from 'vue-router';
|
|
3
3
|
// add Buffer globally
|
|
4
4
|
import { Buffer } from 'buffer/';
|
|
5
5
|
window.Buffer = Buffer;
|
|
6
|
-
document.addEventListener('DOMContentLoaded', function() {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
document.addEventListener('DOMContentLoaded', function () {
|
|
7
|
+
const recaptchaScript = document.createElement('script');
|
|
8
|
+
recaptchaScript.src = `https://www.google.com/recaptcha/api.js?render=${import.meta.env.VITE_GOOGLE_RECAPTCHA_SITE_KEY}`;
|
|
9
|
+
document.head.appendChild(recaptchaScript);
|
|
10
10
|
});
|
|
11
11
|
</script>
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
<template>
|
|
15
|
-
|
|
16
|
-
<a v-if="display === 'redirect' || renderView.includes('Auth')" href="/" class="header-logo"><img src="data:image/png;base64,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" onerror="this.onerror=null;this.src='https://cdn.tapni.co/images/logo-dark.png';" class="header-logo-img"></a>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
<img
|
|
45
|
-
src="https://cdn.tapni.co/icons/notification-close.png"
|
|
46
|
-
style="width: 100%;:"
|
|
47
|
-
/>
|
|
48
|
-
</a>
|
|
49
|
-
</p>
|
|
50
|
-
<p class="snack-body" id="successSnack">
|
|
51
|
-
<span id="successMessage"> {{ ssoLang[appLanguage].success }} </span>
|
|
52
|
-
<a
|
|
53
|
-
@click="closeSnacks"
|
|
54
|
-
style="
|
|
55
|
-
position: absolute;
|
|
56
|
-
right: 10px;
|
|
57
|
-
top: 10px;
|
|
58
|
-
width: 50px;
|
|
59
|
-
height: 50px;
|
|
60
|
-
"
|
|
61
|
-
>
|
|
62
|
-
<img
|
|
63
|
-
src="https://cdn.tapni.co/icons/notification-close.png"
|
|
64
|
-
style="width: 100%"
|
|
65
|
-
/>
|
|
66
|
-
</a>
|
|
67
|
-
</p>
|
|
68
|
-
</div>
|
|
69
|
-
</div>
|
|
14
|
+
<div id="ssoapp" :style="containerStyle">
|
|
15
|
+
<a v-if="display === 'redirect' || renderView.includes('Auth')" href="/" class="header-logo"><img :src="headerLogoUrl" class="header-logo-img" /></a>
|
|
16
|
+
|
|
17
|
+
<AuthWelcome v-if="initialized && renderView === 'AuthWelcome'" />
|
|
18
|
+
<AuthLogin v-else-if="initialized && renderView === 'AuthLogin'" :isModal="isModal" />
|
|
19
|
+
<AuthGeneral v-else-if="initialized && renderView === 'AuthGeneral'" :isModal="isModal" @update:viewProp="setView" />
|
|
20
|
+
<AuthAccount v-else-if="initialized && renderView === 'AuthAccount'" :isModal="isModal" @update:viewProp="setView" />
|
|
21
|
+
<AuthRegister v-else-if="initialized && renderView === 'AuthRegister'" :isModal="isModal" />
|
|
22
|
+
<AuthVerify v-else-if="initialized && renderView === 'AuthVerify'" :isModal="isModal" />
|
|
23
|
+
<AuthSecurity v-else-if="initialized && renderView === 'AuthSecurity'" :isModal="isModal" :payload="payload" @update:viewProp="setView" />
|
|
24
|
+
<AuthReset v-else-if="initialized && renderView === 'AuthReset'" />
|
|
25
|
+
<AuthCallback v-else-if="initialized && renderView === 'AuthCallback'" />
|
|
26
|
+
<RouterView v-else-if="display !== 'npm'" />
|
|
27
|
+
|
|
28
|
+
<div class="snackbar snackbar-boxed" id="snackbar">
|
|
29
|
+
<p class="snack-body" id="errorSnack">
|
|
30
|
+
<span id="errorMessage"> {{ ssoLang[appLanguage].error }} </span>
|
|
31
|
+
<a @click="closeSnacks" style="position: absolute; right: 10px; top: 10px; width: 50px; height: 50px">
|
|
32
|
+
<img src="https://cdn.tapni.co/icons/notification-close.png" style="width: 100%" />
|
|
33
|
+
</a>
|
|
34
|
+
</p>
|
|
35
|
+
<p class="snack-body" id="successSnack">
|
|
36
|
+
<span id="successMessage"> {{ ssoLang[appLanguage].success }} </span>
|
|
37
|
+
<a @click="closeSnacks" style="position: absolute; right: 10px; top: 10px; width: 50px; height: 50px">
|
|
38
|
+
<img src="https://cdn.tapni.co/icons/notification-close.png" style="width: 100%" />
|
|
39
|
+
</a>
|
|
40
|
+
</p>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
70
43
|
</template>
|
|
71
44
|
|
|
72
45
|
<script>
|
|
73
|
-
import AuthWelcome from
|
|
74
|
-
import AuthLogin from
|
|
75
|
-
import
|
|
76
|
-
import
|
|
77
|
-
import
|
|
78
|
-
import
|
|
79
|
-
import
|
|
80
|
-
import
|
|
81
|
-
import
|
|
82
|
-
import
|
|
83
|
-
import
|
|
84
|
-
import
|
|
85
|
-
import Language from "@/components/DELETE_Language.vue";
|
|
86
|
-
import ReactiveStorage from '@tapni/capacitor-reactive-localstorage-vue3'
|
|
46
|
+
import AuthWelcome from '@/views/Welcome.vue';
|
|
47
|
+
import AuthLogin from '@/views/Login.vue';
|
|
48
|
+
import AuthAccount from '@/views/Account.vue';
|
|
49
|
+
import AuthRegister from '@/views/Register.vue';
|
|
50
|
+
import AuthVerify from '@/views/Verify.vue';
|
|
51
|
+
import AuthSecurity from '@/views/Security.vue';
|
|
52
|
+
import AuthGeneral from '@/views/General.vue';
|
|
53
|
+
import AuthReset from '@/views/Reset.vue';
|
|
54
|
+
import AuthCallback from '@/views/Callback.vue';
|
|
55
|
+
import { EventBus } from './store/event-bus.js';
|
|
56
|
+
import AuthMixin from '@/mixins/auth.mixin.js';
|
|
57
|
+
import ReactiveStorage from '@tapni/capacitor-reactive-localstorage-vue3';
|
|
87
58
|
import store from './store/auth.js';
|
|
59
|
+
import UtilService from './services/UtilService.js';
|
|
88
60
|
|
|
89
61
|
export default {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
watch: {
|
|
178
|
-
viewProp (nv) {
|
|
179
|
-
this.setView(nv);
|
|
180
|
-
},
|
|
181
|
-
display () {
|
|
182
|
-
this.applyBgStyle()
|
|
183
|
-
},
|
|
184
|
-
'strgReady.value' (nv) {
|
|
185
|
-
if (nv) {
|
|
186
|
-
// Initialize Library after all event listeners & storage are set
|
|
187
|
-
this.$nextTick(() => {
|
|
188
|
-
this.init()
|
|
189
|
-
})
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
'$storex': {
|
|
193
|
-
handler(nv) {
|
|
194
|
-
clearInterval(this.storeInterval);
|
|
195
|
-
this.storeInterval = setTimeout(() => {
|
|
196
|
-
Object.keys(nv).forEach(key => {
|
|
197
|
-
this.strg[key] = nv[key];
|
|
198
|
-
});
|
|
199
|
-
}, 250)
|
|
200
|
-
},
|
|
201
|
-
deep: true
|
|
62
|
+
store,
|
|
63
|
+
name: 'TapniAuth',
|
|
64
|
+
mixins: [ReactiveStorage, AuthMixin],
|
|
65
|
+
data() {
|
|
66
|
+
return {
|
|
67
|
+
storeInterval: null,
|
|
68
|
+
isSetup: false,
|
|
69
|
+
isTapstackOrigin: typeof window !== 'undefined' ? /(^|\.)tapstack\.com$/i.test(new URL(window.location.origin).hostname) : false
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
components: {
|
|
73
|
+
AuthCallback,
|
|
74
|
+
AuthReset,
|
|
75
|
+
AuthVerify,
|
|
76
|
+
AuthSecurity,
|
|
77
|
+
AuthRegister,
|
|
78
|
+
AuthLogin,
|
|
79
|
+
AuthAccount,
|
|
80
|
+
AuthWelcome,
|
|
81
|
+
AuthGeneral
|
|
82
|
+
},
|
|
83
|
+
props: {
|
|
84
|
+
viewProp: {
|
|
85
|
+
type: String,
|
|
86
|
+
default: ''
|
|
87
|
+
},
|
|
88
|
+
isModal: {
|
|
89
|
+
type: Boolean,
|
|
90
|
+
default: false
|
|
91
|
+
},
|
|
92
|
+
payload: {
|
|
93
|
+
type: Object,
|
|
94
|
+
default: {}
|
|
95
|
+
},
|
|
96
|
+
options: {
|
|
97
|
+
type: Object,
|
|
98
|
+
default: {
|
|
99
|
+
token: '',
|
|
100
|
+
refreshTokens: '',
|
|
101
|
+
username: '',
|
|
102
|
+
UserId: '',
|
|
103
|
+
verifyEmail: '',
|
|
104
|
+
subdomain: '',
|
|
105
|
+
localUser: ''
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
computed: {
|
|
110
|
+
initialized() {
|
|
111
|
+
return this.isSetup || this.isModal;
|
|
112
|
+
},
|
|
113
|
+
headerLogoUrl() {
|
|
114
|
+
return this.isTapstackOrigin ? 'https://cdn.tapni.co/company-media/e411a6e5-e8c1-40b3-aa4c-1214cfb43e8a/gallery/image/f910fa207addf7d3f7337faf098c4f82c79f755a3cf0032099655f2204e6a1e6.png' : 'https://cdn.tapni.co/images/logo-dark.png';
|
|
115
|
+
},
|
|
116
|
+
containerStyle() {
|
|
117
|
+
return {
|
|
118
|
+
maxHeight: this.isModal ? '90vh' : 'auto',
|
|
119
|
+
overflowY: this.isModal ? 'auto' : 'hidden'
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
async mounted() {
|
|
124
|
+
// Check for clean=true query parameter and clear storage if present
|
|
125
|
+
this.checkAndClearStorage();
|
|
126
|
+
|
|
127
|
+
this.applyBgStyle();
|
|
128
|
+
this.setView(this.viewProp);
|
|
129
|
+
|
|
130
|
+
// Update metadata based on platform
|
|
131
|
+
this.updateMetadata();
|
|
132
|
+
|
|
133
|
+
EventBus.$on('ssoEvent', this.ssoOutgoingEvent);
|
|
134
|
+
EventBus.$on('ssoLogout', (data) => this.logout(data));
|
|
135
|
+
EventBus.$on('getLoggedInAccounts', () => this.getLoggedInAccounts());
|
|
136
|
+
EventBus.$on('refreshTokenAction', (data) => this.refreshTokenAction({ ...data, storage: this.$storex }));
|
|
137
|
+
EventBus.$on('switchAccount', (data) => this.switchAccount(data));
|
|
138
|
+
EventBus.$on('setToken', (data) => this.setToken(data));
|
|
139
|
+
EventBus.$on('setStorageItem', (data) => this.setStorageItem(data));
|
|
140
|
+
|
|
141
|
+
if (import.meta.env.VITE_APP_COMPARE_LANGUAGE_KEYS === 'true') {
|
|
142
|
+
UtilService.compareLangKeys();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (this.isNative) {
|
|
146
|
+
this.$store.auth.state.allowedOriginsAuth.push('capacitor://localhost');
|
|
202
147
|
}
|
|
203
|
-
|
|
204
|
-
|
|
148
|
+
},
|
|
149
|
+
methods: {
|
|
150
|
+
checkAndClearStorage() {
|
|
151
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
152
|
+
if (urlParams.get('clean') === 'true') {
|
|
153
|
+
// Clear all localStorage
|
|
154
|
+
localStorage.clear();
|
|
155
|
+
|
|
156
|
+
// Clear sessionStorage as well
|
|
157
|
+
sessionStorage.clear();
|
|
158
|
+
|
|
159
|
+
// Remove the clean parameter from URL without page reload
|
|
160
|
+
urlParams.delete('clean');
|
|
161
|
+
const newUrl = window.location.pathname + (urlParams.toString() ? '?' + urlParams.toString() : '') + window.location.hash;
|
|
162
|
+
window.history.replaceState({}, '', newUrl);
|
|
163
|
+
|
|
164
|
+
console.log('Storage cleared due to clean=true parameter');
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
async init() {
|
|
168
|
+
this.$store.commit('auth/setApiRoot', this.$apiRoot || process.env.VITE_APP_API_ROOT);
|
|
169
|
+
|
|
170
|
+
// Set $storage into vuex $storex
|
|
171
|
+
this.setStorage(this.strg);
|
|
172
|
+
|
|
173
|
+
// Make sure the function is called just once
|
|
174
|
+
if (this.isSetup) return;
|
|
175
|
+
this.isSetup = true;
|
|
176
|
+
|
|
177
|
+
await this.getLoggedInAccounts();
|
|
178
|
+
|
|
179
|
+
// Let App know that the auth is ready
|
|
180
|
+
this.$emit('ssoLibraryReady', this.$storex);
|
|
181
|
+
},
|
|
182
|
+
ssoOutgoingEvent(data) {
|
|
183
|
+
this.$emit('ssoEvent', data);
|
|
184
|
+
},
|
|
185
|
+
ssoIncomingEvent(data) {
|
|
186
|
+
EventBus.$emit(data.name, data.data);
|
|
187
|
+
},
|
|
188
|
+
updateMetadata() {
|
|
189
|
+
if (typeof window === 'undefined') return;
|
|
190
|
+
|
|
191
|
+
if (this.isTapstackOrigin) {
|
|
192
|
+
// Tapstack metadata
|
|
193
|
+
document.title = 'Tapstack - The modern stack for interactive docs and tools';
|
|
194
|
+
|
|
195
|
+
// Update meta description
|
|
196
|
+
const metaDescription = document.querySelector('meta[name="description"]');
|
|
197
|
+
if (metaDescription) {
|
|
198
|
+
metaDescription.setAttribute('content', 'The modern stack for interactive docs and tools. Build better documentation and developer experiences with Tapstack.');
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Update Open Graph metadata
|
|
202
|
+
const ogTitle = document.querySelector('meta[property="og:title"]');
|
|
203
|
+
if (ogTitle) {
|
|
204
|
+
ogTitle.setAttribute('content', 'Tapstack - The modern stack for interactive docs and tools');
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const ogDescription = document.querySelector('meta[property="og:description"]');
|
|
208
|
+
if (ogDescription) {
|
|
209
|
+
ogDescription.setAttribute('content', 'The modern stack for interactive docs and tools. Build better documentation and developer experiences.');
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Update Twitter metadata
|
|
213
|
+
const twitterTitle = document.querySelector('meta[property="twitter:title"]');
|
|
214
|
+
if (twitterTitle) {
|
|
215
|
+
twitterTitle.setAttribute('content', 'Tapstack - The modern stack for interactive docs and tools');
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const twitterDescription = document.querySelector('meta[property="twitter:description"]');
|
|
219
|
+
if (twitterDescription) {
|
|
220
|
+
twitterDescription.setAttribute('content', 'The modern stack for interactive docs and tools. Build better documentation and developer experiences with Tapstack.');
|
|
221
|
+
}
|
|
222
|
+
} else {
|
|
223
|
+
// Default Tapni metadata (already set in HTML)
|
|
224
|
+
document.title = 'Tapni - Share everything with just a tap';
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
applyBgStyle() {
|
|
228
|
+
if (this.display === 'redirect') {
|
|
229
|
+
document.getElementsByTagName('html')[0].style = 'background: #dfeefe;';
|
|
230
|
+
} else {
|
|
231
|
+
document.getElementsByTagName('html')[0].style = '';
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
watch: {
|
|
236
|
+
viewProp(nv) {
|
|
237
|
+
this.setView(nv);
|
|
238
|
+
},
|
|
239
|
+
display() {
|
|
240
|
+
this.applyBgStyle();
|
|
241
|
+
},
|
|
242
|
+
'strgReady.value'(nv) {
|
|
243
|
+
if (nv) {
|
|
244
|
+
// Initialize Library after all event listeners & storage are set
|
|
245
|
+
this.$nextTick(() => {
|
|
246
|
+
this.init();
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
$storex: {
|
|
251
|
+
handler(nv) {
|
|
252
|
+
clearInterval(this.storeInterval);
|
|
253
|
+
this.storeInterval = setTimeout(() => {
|
|
254
|
+
Object.keys(nv).forEach((key) => {
|
|
255
|
+
this.strg[key] = nv[key];
|
|
256
|
+
});
|
|
257
|
+
}, 250);
|
|
258
|
+
},
|
|
259
|
+
deep: true
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
};
|
|
205
263
|
</script>
|
|
206
264
|
|
|
207
265
|
<style>
|
|
208
266
|
html * {
|
|
209
|
-
|
|
267
|
+
font-family: 'Inter', sans-serif;
|
|
210
268
|
}
|
|
211
269
|
|
|
212
270
|
#bodyId {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
271
|
+
padding-top: 3%;
|
|
272
|
+
max-width: 667px !important;
|
|
273
|
+
margin: auto;
|
|
274
|
+
height: 95% !important;
|
|
275
|
+
margin-top: 1.5%;
|
|
276
|
+
border-radius: 20px;
|
|
219
277
|
}
|
|
220
278
|
|
|
221
279
|
.action-block-top .default-text,
|
|
222
280
|
.action-block-top .default-text:after {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
281
|
+
border-radius: 50%;
|
|
282
|
+
width: 10em !important;
|
|
283
|
+
height: 10em !important;
|
|
226
284
|
}
|
|
227
285
|
.action-block-top .default-text {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
286
|
+
margin: 10px auto;
|
|
287
|
+
font-size: 3px;
|
|
288
|
+
position: relative;
|
|
289
|
+
text-indent: -9999em;
|
|
290
|
+
/*
|
|
233
291
|
border-left: 0.5em solid #ffffff;
|
|
234
292
|
border-top: 0.5em solid rgba(255, 255, 255, 0.2);
|
|
235
293
|
border-right: 0.5em solid rgba(255, 255, 255, 0.2);
|
|
236
294
|
border-bottom: 0.5em solid rgba(255, 255, 255, 0.2);
|
|
237
295
|
*/
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
296
|
+
border-left: 0.5em solid #000000;
|
|
297
|
+
border-top: 0.5em solid rgba(0, 0, 0, 0.2);
|
|
298
|
+
border-right: 0.5em solid rgba(0, 0, 0, 0.2);
|
|
299
|
+
border-bottom: 0.5em solid rgba(0, 0, 0, 0.2);
|
|
300
|
+
-webkit-transform: translateZ(0);
|
|
301
|
+
-ms-transform: translateZ(0);
|
|
302
|
+
transform: translateZ(0);
|
|
303
|
+
-webkit-animation: load8 1.1s infinite linear;
|
|
304
|
+
animation: load8 1.1s infinite linear;
|
|
247
305
|
}
|
|
248
306
|
@-webkit-keyframes load8 {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
307
|
+
0% {
|
|
308
|
+
-webkit-transform: rotate(0deg);
|
|
309
|
+
transform: rotate(0deg);
|
|
310
|
+
}
|
|
311
|
+
100% {
|
|
312
|
+
-webkit-transform: rotate(360deg);
|
|
313
|
+
transform: rotate(360deg);
|
|
314
|
+
}
|
|
257
315
|
}
|
|
258
316
|
@keyframes load8 {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
317
|
+
0% {
|
|
318
|
+
-webkit-transform: rotate(0deg);
|
|
319
|
+
transform: rotate(0deg);
|
|
320
|
+
}
|
|
321
|
+
100% {
|
|
322
|
+
-webkit-transform: rotate(360deg);
|
|
323
|
+
transform: rotate(360deg);
|
|
324
|
+
}
|
|
267
325
|
}
|
|
268
326
|
.smartbanner-ios {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
327
|
+
background: linear-gradient(to bottom, #f4f4f4, #f4f4f4);
|
|
328
|
+
box-shadow: 0 0px 0px #ffffff;
|
|
329
|
+
border-bottom: 1px solid #dddddd;
|
|
272
330
|
}
|
|
273
331
|
.smartbanner-icon {
|
|
274
|
-
|
|
332
|
+
border-radius: 16px;
|
|
275
333
|
}
|
|
276
334
|
.smartbanner-ios .smartbanner-button {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
335
|
+
font-size: 13px;
|
|
336
|
+
padding: 9px 0px;
|
|
337
|
+
height: 40px;
|
|
338
|
+
border-radius: 13px;
|
|
339
|
+
background: #f4f4f4;
|
|
340
|
+
color: #0a99d2;
|
|
341
|
+
border: none;
|
|
342
|
+
box-shadow: none;
|
|
343
|
+
text-transform: uppercase;
|
|
286
344
|
}
|
|
287
345
|
|
|
288
346
|
.snack-body {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
347
|
+
display: none;
|
|
348
|
+
border-radius: 40px;
|
|
349
|
+
font-size: 15px !important;
|
|
292
350
|
}
|
|
293
351
|
|
|
294
352
|
#errorSnack {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
353
|
+
background-color: #fee3e3 !important;
|
|
354
|
+
border: 2px solid #edd9d9 !important;
|
|
355
|
+
color: #000000;
|
|
298
356
|
}
|
|
299
357
|
|
|
300
358
|
#successSnack {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
359
|
+
background-color: #eff5eb !important;
|
|
360
|
+
border: 2px solid #e3ecd7 !important;
|
|
361
|
+
color: #000000;
|
|
304
362
|
}
|
|
305
363
|
|
|
306
364
|
.grecaptcha-badge {
|
|
307
|
-
|
|
365
|
+
visibility: hidden;
|
|
308
366
|
}
|
|
309
367
|
|
|
310
368
|
.header-logo {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
369
|
+
position: absolute;
|
|
370
|
+
left: 50%;
|
|
371
|
+
transform: translate(-50%, -50%);
|
|
372
|
+
margin-top: 16px;
|
|
373
|
+
z-index: 2;
|
|
316
374
|
}
|
|
317
375
|
|
|
318
376
|
.header-logo-img {
|
|
319
|
-
|
|
320
|
-
|
|
377
|
+
height: 40px;
|
|
378
|
+
margin-top: 10px;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
@media (max-width: 768px) {
|
|
382
|
+
#bodyId {
|
|
383
|
+
margin-top: 0;
|
|
384
|
+
border-radius: 0;
|
|
385
|
+
height: 100% !important;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.header-logo {
|
|
389
|
+
margin-top: 16px;
|
|
390
|
+
}
|
|
321
391
|
}
|
|
322
392
|
</style>
|