@ozdao/martyrs 0.2.432 → 0.2.434
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builder.js +3 -2
- package/dist/builder.mjs +3 -2
- package/dist/martyrs/src/components/Menu/{Menu.vue2.cjs → Menu.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +1 -0
- package/dist/martyrs/src/components/Menu/{Menu.vue2.js → Menu.vue.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs → Tab.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs.map → Tab.vue2.js.map} +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/landing.client.cjs +0 -6
- package/dist/martyrs/src/modules/landing/landing.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/landing.client.js +0 -6
- package/dist/martyrs/src/modules/landing/landing.client.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/layouts/NotificationsLayout.vue.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/components/layouts/NotificationsLayout.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/layouts/NotificationsLayout.vue.js +1 -1
- package/dist/martyrs/src/modules/notifications/components/layouts/NotificationsLayout.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.cjs +248 -135
- package/dist/martyrs/src/modules/notifications/notifications.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js +248 -135
- package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
- package/dist/style.css +4 -92
- package/package.json +1 -1
- package/src/builder/webpack/webpack.config.base.js +0 -1
- package/src/builder/webpack/webpack.config.client.js +4 -0
- package/src/builder/webpack/webpack.config.ssr.js +0 -1
- package/src/modules/landing/landing.client.js +6 -6
- package/src/modules/notifications/components/layouts/NotificationsLayout.vue +2 -0
- package/src/modules/notifications/notifications.client.js +351 -167
- package/src/modules/notifications/notifications2.client.js +256 -0
- package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs +0 -101
- package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js +0 -101
- package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js.map +0 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.cjs +0 -85
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js +0 -85
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js.map +0 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.cjs +0 -97
- package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.js +0 -97
- package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.js.map +0 -1
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { watch, toRefs } from "vue";
|
|
2
|
+
import routerNotifications from './router/notifications.router.js';
|
|
3
|
+
import * as storeNotifications from './store/notifications.store.js';
|
|
4
|
+
import * as auth from '@martyrs/src/modules/auth/views/store/auth';
|
|
5
|
+
import globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';
|
|
6
|
+
import NotificationsLayout from './components/layouts/NotificationsLayout.vue';
|
|
7
|
+
import NotificationsList from './components/sections/NotificationsList.vue';
|
|
8
|
+
import NotificationPreferences from './components/sections/NotificationPreferences.vue';
|
|
9
|
+
import Notifications from './components/pages/Notifications.vue';
|
|
10
|
+
import NotificationBadge from './components/elements/NotificationBadge.vue';
|
|
11
|
+
import NotificationItem from './components/blocks/NotificationItem.vue';
|
|
12
|
+
|
|
13
|
+
// WebSocket notification handlers
|
|
14
|
+
const wsNotificationHandlers = {
|
|
15
|
+
connect: (store, userId, options = {}) => {
|
|
16
|
+
if (typeof window === 'undefined' || !userId) return Promise.resolve(false);
|
|
17
|
+
|
|
18
|
+
return globalWebSocket.connect(userId).then(() => {
|
|
19
|
+
const moduleName = 'notifications';
|
|
20
|
+
const listeners = [];
|
|
21
|
+
|
|
22
|
+
const addListener = (event, handler) => {
|
|
23
|
+
listeners.push(globalWebSocket.addEventListener(event, handler, { module: moduleName }));
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
addListener('notification', (data) => {
|
|
27
|
+
if (!data || !data.data) return;
|
|
28
|
+
const notification = data.data;
|
|
29
|
+
|
|
30
|
+
store.notifications.actions.addLocalNotification({
|
|
31
|
+
_id: notification._id,
|
|
32
|
+
title: notification.title,
|
|
33
|
+
body: notification.body,
|
|
34
|
+
type: notification.type || 'info',
|
|
35
|
+
metadata: notification.metadata || {},
|
|
36
|
+
status: 'unread',
|
|
37
|
+
createdAt: notification.createdAt || new Date().toISOString(),
|
|
38
|
+
updatedAt: notification.updatedAt || new Date().toISOString()
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
addListener('notification_read', (data) => {
|
|
43
|
+
store.notifications.actions.syncNotificationStatus(data.notificationId, 'read');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
return { listeners, moduleName };
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
disconnect: (moduleName, listeners) => {
|
|
51
|
+
if (listeners) {
|
|
52
|
+
globalWebSocket.removeModuleListeners(moduleName);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// Capacitor Push Notification handlers
|
|
58
|
+
const pushNotificationHandlers = {
|
|
59
|
+
initialize: async () => {
|
|
60
|
+
if (typeof window === 'undefined') return false;
|
|
61
|
+
|
|
62
|
+
try {
|
|
63
|
+
const { Capacitor } = await import('@capacitor/core');
|
|
64
|
+
const { PushNotifications } = await import('@capacitor/push-notifications');
|
|
65
|
+
const { Device } = await import('@capacitor/device');
|
|
66
|
+
|
|
67
|
+
if (!Capacitor.isNativePlatform()) return false;
|
|
68
|
+
|
|
69
|
+
return { pushNotifications: PushNotifications, device: Device };
|
|
70
|
+
} catch (error) {
|
|
71
|
+
console.error('Error importing Capacitor plugins:', error);
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
requestPermissions: async (store) => {
|
|
77
|
+
if (typeof window === 'undefined') return false;
|
|
78
|
+
|
|
79
|
+
const plugins = await pushNotificationHandlers.initialize();
|
|
80
|
+
if (!plugins) return false;
|
|
81
|
+
|
|
82
|
+
const { pushNotifications, device } = plugins;
|
|
83
|
+
|
|
84
|
+
const permissionResult = await pushNotifications.requestPermissions();
|
|
85
|
+
if (permissionResult.receive !== 'granted') {
|
|
86
|
+
console.log('Push notification permission denied');
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const setupListeners = () => {
|
|
91
|
+
pushNotifications.addListener('registration', async (token) => {
|
|
92
|
+
try {
|
|
93
|
+
const deviceInfo = await device.getInfo();
|
|
94
|
+
const deviceId = await device.getId();
|
|
95
|
+
|
|
96
|
+
const deviceData = {
|
|
97
|
+
deviceId: deviceId.uuid,
|
|
98
|
+
deviceType: deviceInfo.platform.toLowerCase(),
|
|
99
|
+
deviceToken: token.value
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
await store.notifications.actions.registerDevice(deviceData);
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.error('Error handling push registration:', error);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
pushNotifications.addListener('pushNotificationReceived', (notification) => {
|
|
109
|
+
store.notifications.actions.addLocalNotification({
|
|
110
|
+
title: notification.title,
|
|
111
|
+
body: notification.body,
|
|
112
|
+
data: notification.data || {}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
pushNotifications.addListener('pushNotificationActionPerformed', (actionData) => {
|
|
117
|
+
if (actionData.notification && actionData.notification.data) {
|
|
118
|
+
store.notifications.actions.handleNotificationAction(actionData.notification.data);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
setupListeners();
|
|
124
|
+
await pushNotifications.register();
|
|
125
|
+
return true;
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
removeListeners: (pushNotifications) => {
|
|
129
|
+
if (typeof window === 'undefined' || !pushNotifications) return;
|
|
130
|
+
pushNotifications.removeAllListeners();
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// Notification utilities
|
|
135
|
+
const notificationUtils = {
|
|
136
|
+
initialize: async (store, options = {}) => {
|
|
137
|
+
if (typeof window === 'undefined') return;
|
|
138
|
+
|
|
139
|
+
const userId = store.auth.state.user?._id;
|
|
140
|
+
if (!userId) {
|
|
141
|
+
console.warn('Cannot initialize notifications: No user ID found in auth store');
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
let wsListeners = null;
|
|
146
|
+
if (options.enablePush !== false) {
|
|
147
|
+
await pushNotificationHandlers.requestPermissions(store);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
wsListeners = await wsNotificationHandlers.connect(store, userId, options);
|
|
151
|
+
|
|
152
|
+
await store.notifications.actions.getNotifications(userId);
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
disconnect: () => {
|
|
156
|
+
wsNotificationHandlers.disconnect(wsListeners?.moduleName, wsListeners?.listeners);
|
|
157
|
+
pushNotificationHandlers.removeListeners(globalThis.pushNotifications);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
prefetchForSSR: async (store, context) => {
|
|
163
|
+
try {
|
|
164
|
+
const userId = store.auth.state.user?._id;
|
|
165
|
+
if (userId) {
|
|
166
|
+
await store.notifications.actions.getNotifications(userId);
|
|
167
|
+
}
|
|
168
|
+
} catch (error) {
|
|
169
|
+
console.error('Error pre-fetching notifications for SSR:', error);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
// Main initialization function
|
|
175
|
+
const initializeNotifications = (app, store, router, options = {}) => {
|
|
176
|
+
const route = options.route || 'User Profile Root';
|
|
177
|
+
router.addRoute(route, routerNotifications);
|
|
178
|
+
store.addStore('notifications', storeNotifications);
|
|
179
|
+
|
|
180
|
+
if (options.wsUrl) {
|
|
181
|
+
globalWebSocket.initialize({ wsUrl: options.wsUrl });
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const isServer = typeof window === 'undefined';
|
|
185
|
+
const autoInit = !isServer && options.autoInit !== false;
|
|
186
|
+
|
|
187
|
+
let notificationManager = null;
|
|
188
|
+
|
|
189
|
+
if (autoInit) {
|
|
190
|
+
const initNotifications = async () => {
|
|
191
|
+
if (store.auth.state.isAuthenticated && store.auth.state.user?._id) {
|
|
192
|
+
notificationManager = await notificationUtils.initialize(store, {
|
|
193
|
+
enablePush: options.enablePush !== false,
|
|
194
|
+
maxReconnectAttempts: options.maxReconnectAttempts || 5,
|
|
195
|
+
reconnectDelay: options.reconnectDelay || 3000,
|
|
196
|
+
pingInterval: options.pingInterval || 30000
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
watch(() => store.auth.state.isAuthenticated, (isAuthenticated) => {
|
|
202
|
+
if (isAuthenticated) {
|
|
203
|
+
initNotifications();
|
|
204
|
+
} else if (notificationManager) {
|
|
205
|
+
notificationManager.disconnect();
|
|
206
|
+
store.notifications.mutations.resetNotifications();
|
|
207
|
+
notificationManager = null;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
if (store.auth.state.isAuthenticated) {
|
|
212
|
+
initNotifications();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
app.provide('useNotifications', () => ({
|
|
217
|
+
...toRefs(store.notifications.state),
|
|
218
|
+
...store.notifications.actions,
|
|
219
|
+
...store.notifications.mutations,
|
|
220
|
+
init: () => notificationUtils.initialize(store, options),
|
|
221
|
+
disconnect: () => notificationManager?.disconnect(),
|
|
222
|
+
isServer
|
|
223
|
+
}));
|
|
224
|
+
|
|
225
|
+
return {
|
|
226
|
+
SSR: { prefetchNotifications: notificationUtils.prefetchForSSR }
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const ModuleNotifications = {
|
|
231
|
+
initialize: initializeNotifications,
|
|
232
|
+
views: {
|
|
233
|
+
store: { storeNotifications },
|
|
234
|
+
router: { routerNotifications },
|
|
235
|
+
components: {
|
|
236
|
+
NotificationBadge,
|
|
237
|
+
NotificationItem,
|
|
238
|
+
NotificationsList,
|
|
239
|
+
NotificationPreferences,
|
|
240
|
+
Notifications,
|
|
241
|
+
NotificationsLayout
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
export {
|
|
247
|
+
NotificationBadge,
|
|
248
|
+
NotificationItem,
|
|
249
|
+
NotificationsList,
|
|
250
|
+
NotificationPreferences,
|
|
251
|
+
Notifications,
|
|
252
|
+
NotificationsLayout,
|
|
253
|
+
notificationUtils as SSRUtils
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
export default ModuleNotifications;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.vue.js","sources":["../../../../../src/components/Tab/Tab.vue"],"sourcesContent":["<template>\n <div class=\"flex-nowrap flex-v-center flex pos-relative\">\n <button \n v-for=\"(tab, index) in tabs\" \n :key=\"index\" \n @click=\"handleTabClick(index, tab)\" \n class=\"z-index-1 t-center cursor-pointer\"\n :style=\"isSelected(index, tab) ? 'background: rgb(var(--main)) !important' : ''\"\n :class=\"[\n isSelected(index, tab) ? 'bg-main' : '',\n tabClass ? tabClass : 'pd-small pd-r-medium pd-l-medium w-max pd-small radius-small'\n ]\"\n >\n {{tab.name || tab.label}}\n </button>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue'\n\nconst emit = defineEmits(['update:selected', 'tab-click']);\n\nconst props = defineProps({\n tabs: Array,\n tabClass: String,\n selected: [String, Number],\n modelValue: [String, Number],\n callback: Function\n})\n\nconst selectedTab = ref(0)\n\n// Handle both v-model and selected prop for backward compatibility\nconst updateSelectedIndex = () => {\n if (props.modelValue !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.modelValue)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n } else if (props.selected !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.selected)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n }\n}\n\n// Initial setup\nupdateSelectedIndex()\n\n// Watch for changes in selected or modelValue props\nwatch(() => props.selected, updateSelectedIndex)\nwatch(() => props.modelValue, updateSelectedIndex)\n\n// Check if tab is selected\nconst isSelected = (index, tab) => {\n if (props.modelValue !== undefined) {\n return tab.value === props.modelValue\n } else if (props.selected !== undefined) {\n return tab.value === props.selected\n }\n return index === selectedTab.value\n}\n\n// Handle tab click\nfunction handleTabClick(index, tab) {\n selectedTab.value = index\n \n // Emit both events for flexibility\n emit('update:selected', tab.value)\n emit('tab-click', { index, tab })\n \n // For v-model support\n if (props.modelValue !== undefined) {\n emit('update:modelValue', tab.value)\n }\n \n // Call callback if provided\n if (props.callback) props.callback(tab)\n}\n</script>\n\n<style lang=\"scss\">\n.tab-selector {\n position: absolute;\n width: 50%;\n height: 100%;\n left: 0;\n top: 0;\n z-index: 0;\n transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;AAqBA,UAAM,OAAO;AAEb,UAAM,QAAQ;AAQd,UAAM,cAAc,IAAI,CAAC;AAGzB,UAAM,sBAAsB,MAAM;AAChC,UAAI,MAAM,eAAe,QAAW;AAClC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,UAAU;AAChF,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QAC1B;AAAA,MACA,WAAa,MAAM,aAAa,QAAW;AACvC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,QAAQ;AAC9E,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QAC1B;AAAA,MACA;AAAA,IACA;AAGA,wBAAmB;AAGnB,UAAM,MAAM,MAAM,UAAU,mBAAmB;AAC/C,UAAM,MAAM,MAAM,YAAY,mBAAmB;AAGjD,UAAM,aAAa,CAAC,OAAO,QAAQ;AACjC,UAAI,MAAM,eAAe,QAAW;AAClC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC/B,WAAa,MAAM,aAAa,QAAW;AACvC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC/B;AACE,aAAO,UAAU,YAAY;AAAA,IAC/B;AAGA,aAAS,eAAe,OAAO,KAAK;AAClC,kBAAY,QAAQ;AAGpB,WAAK,mBAAmB,IAAI,KAAK;AACjC,WAAK,aAAa,EAAE,OAAO,IAAK,CAAA;AAGhC,UAAI,MAAM,eAAe,QAAW;AAClC,aAAK,qBAAqB,IAAI,KAAK;AAAA,MACvC;AAGE,UAAI,MAAM,SAAU,OAAM,SAAS,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const vue = require("vue");
|
|
4
|
-
const vueI18n = require("vue-i18n");
|
|
5
|
-
;/* empty css */
|
|
6
|
-
const _hoisted_1 = {
|
|
7
|
-
id: "howtobuy",
|
|
8
|
-
class: "section"
|
|
9
|
-
};
|
|
10
|
-
const _hoisted_2 = { class: "mn-b-big t-center title" };
|
|
11
|
-
const _hoisted_3 = { class: "mn-b-small" };
|
|
12
|
-
const _hoisted_4 = { class: "w-m-60r mn-b-big mn-auto t-transp p-big" };
|
|
13
|
-
const _hoisted_5 = { class: "cols-3 gap-thin" };
|
|
14
|
-
const _hoisted_6 = ["src"];
|
|
15
|
-
const _hoisted_7 = { class: "mn-b-medium" };
|
|
16
|
-
const _hoisted_8 = { class: "t-transp" };
|
|
17
|
-
const _sfc_main = {
|
|
18
|
-
__name: "SectionFeaturesImages",
|
|
19
|
-
props: {
|
|
20
|
-
title: String,
|
|
21
|
-
textData: {
|
|
22
|
-
type: Object,
|
|
23
|
-
default: () => ({
|
|
24
|
-
messages: {
|
|
25
|
-
en: {
|
|
26
|
-
title: "What is Weeder Token?",
|
|
27
|
-
subtitle: "WDT – the foundation of the Weeder community. It serves as a currency, a DAO instrument, and for many other purposes:",
|
|
28
|
-
features: [
|
|
29
|
-
{
|
|
30
|
-
image: "/images/howitworks/step1.png",
|
|
31
|
-
title: "Currency",
|
|
32
|
-
text: "WDT can be used as a digital currency within the Weeder ecosystem, allowing users to purchase products such as cannabis, advertising spaces, and other premium features on the platform."
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
image: "/images/howitworks/step2.png",
|
|
36
|
-
title: "Instument",
|
|
37
|
-
text: "As a DAO (Decentralized Autonomous Organization) instrument, WDT enables community governance and decision-making, allowing token holders to propose, discuss, and vote on various initiatives and developments within the Weeder ecosystem."
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
image: "/images/howitworks/step3.png",
|
|
41
|
-
title: "Invesment",
|
|
42
|
-
text: "Holding WDT tokens can provide potential investment returns as the Weeder ecosystem grows and gains value. Additionally, WDT serves for dividend distribution – those who stake their tokens earn income from the platform."
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
},
|
|
46
|
-
ru: {
|
|
47
|
-
title: "Что такое Weeder Token?",
|
|
48
|
-
subtitle: "WDT – основа сообщества Weeder. Он выступает в качестве валюты, инструмента DAO и многих других целей:",
|
|
49
|
-
features: [
|
|
50
|
-
{
|
|
51
|
-
image: "/images/howitworks/step1.png",
|
|
52
|
-
title: "Валюта",
|
|
53
|
-
text: "WDT можно использовать как цифровую валюту в экосистеме Weeder, позволяя пользователям покупать товары, такие как марихуана, рекламные места и другие премиальные возможности на платформе."
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
image: "/images/howitworks/step2.png",
|
|
57
|
-
title: "Инструмент",
|
|
58
|
-
text: "В качестве инструмента DAO (Децентрализованной Автономной Организации), WDT позволяет управлять сообществом и принимать решения, давая держателям токенов возможность предлагать, обсуждать и голосовать за различные инициативы и развитие в рамках экосистемы Weeder."
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
image: "/images/howitworks/step3.png",
|
|
62
|
-
title: "Инвестиции",
|
|
63
|
-
text: "Хранение токенов WDT может обеспечить потенциальный инвестиционный доход по мере роста и увеличения стоимости экосистемы Weeder. Кроме того, WDT служит для распределения дивидендов – те, кто стейкают свои токены, получают доход с платформы."
|
|
64
|
-
}
|
|
65
|
-
]
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
setup(__props) {
|
|
72
|
-
const props = __props;
|
|
73
|
-
const { t, tm } = vueI18n.useI18n(props.textData);
|
|
74
|
-
return (_ctx, _cache) => {
|
|
75
|
-
return vue.openBlock(), vue.createElementBlock("section", _hoisted_1, [
|
|
76
|
-
vue.createElementVNode("div", _hoisted_2, [
|
|
77
|
-
vue.createElementVNode("h2", _hoisted_3, vue.toDisplayString(vue.unref(t)("title")), 1),
|
|
78
|
-
vue.createElementVNode("p", _hoisted_4, vue.toDisplayString(vue.unref(t)("subtitle")), 1)
|
|
79
|
-
]),
|
|
80
|
-
vue.createElementVNode("div", _hoisted_5, [
|
|
81
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(tm)("features"), (feature) => {
|
|
82
|
-
return vue.openBlock(), vue.createElementBlock("div", {
|
|
83
|
-
key: feature.title,
|
|
84
|
-
class: "w-100 pd-medium bg-light radius-medium"
|
|
85
|
-
}, [
|
|
86
|
-
vue.createElementVNode("img", {
|
|
87
|
-
loading: "lazy",
|
|
88
|
-
class: "radius-medium bg-light h-max-20r object-fit-cover w-100 mn-b-medium",
|
|
89
|
-
src: feature.image
|
|
90
|
-
}, null, 8, _hoisted_6),
|
|
91
|
-
vue.createElementVNode("h3", _hoisted_7, vue.toDisplayString(feature.title), 1),
|
|
92
|
-
vue.createElementVNode("p", _hoisted_8, vue.toDisplayString(feature.text), 1)
|
|
93
|
-
]);
|
|
94
|
-
}), 128))
|
|
95
|
-
])
|
|
96
|
-
]);
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
exports.default = _sfc_main;
|
|
101
|
-
//# sourceMappingURL=SectionFeaturesImages.vue.cjs.map
|
package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SectionFeaturesImages.vue.cjs","sources":["../../../../../../../src/modules/landing/components/sections/SectionFeaturesImages.vue"],"sourcesContent":["<template>\n <section id=\"howtobuy\" class=\"section\">\n\n <div class=\"mn-b-big t-center title\">\n <h2 class=\"mn-b-small\">{{t('title')}}</h2>\n <p class=\"w-m-60r mn-b-big mn-auto t-transp p-big\">\n {{t('subtitle')}}\n </p>\n </div>\n\n <div class=\"cols-3 gap-thin\">\n\n <div \n v-for=\"feature in tm('features')\" \n :key=\"feature.title\" \n class=\"w-100 pd-medium bg-light radius-medium\"\n >\n <img loading=\"lazy\" \n class=\"radius-medium bg-light h-max-20r object-fit-cover w-100 mn-b-medium\" \n :src=\"feature.image\"\n > \n <h3 class=\"mn-b-medium\">{{feature.title}}</h3>\n <p class=\"t-transp\">{{feature.text}}</p>\n </div>\n\n </div>\n\n </section>\n</template>\n\n\n<script setup>\nimport { useI18n } from 'vue-i18n'\n \nconst props = defineProps({\n title: String,\n textData: {\n type: Object,\n default: () => ({\n messages: {\n en: {\n title: 'What is Weeder Token?',\n subtitle: 'WDT – the foundation of the Weeder community. It serves as a currency, a DAO instrument, and for many other purposes:',\n features: [\n {\n image: '/images/howitworks/step1.png',\n title: 'Currency',\n text: 'WDT can be used as a digital currency within the Weeder ecosystem, allowing users to purchase products such as cannabis, advertising spaces, and other premium features on the platform.',\n },\n {\n image: '/images/howitworks/step2.png',\n title: 'Instument',\n text: 'As a DAO (Decentralized Autonomous Organization) instrument, WDT enables community governance and decision-making, allowing token holders to propose, discuss, and vote on various initiatives and developments within the Weeder ecosystem.',\n },\n {\n image: '/images/howitworks/step3.png',\n title: 'Invesment',\n text: 'Holding WDT tokens can provide potential investment returns as the Weeder ecosystem grows and gains value. Additionally, WDT serves for dividend distribution – those who stake their tokens earn income from the platform.'\n },\n ]\n },\n ru: {\n title: 'Что такое Weeder Token?',\n subtitle: 'WDT – основа сообщества Weeder. Он выступает в качестве валюты, инструмента DAO и многих других целей:',\n features: [\n {\n image: '/images/howitworks/step1.png',\n title: 'Валюта',\n text: 'WDT можно использовать как цифровую валюту в экосистеме Weeder, позволяя пользователям покупать товары, такие как марихуана, рекламные места и другие премиальные возможности на платформе.',\n },\n {\n image: '/images/howitworks/step2.png',\n title: 'Инструмент',\n text: 'В качестве инструмента DAO (Децентрализованной Автономной Организации), WDT позволяет управлять сообществом и принимать решения, давая держателям токенов возможность предлагать, обсуждать и голосовать за различные инициативы и развитие в рамках экосистемы Weeder.',\n },\n {\n image: '/images/howitworks/step3.png',\n title: 'Инвестиции',\n text: 'Хранение токенов WDT может обеспечить потенциальный инвестиционный доход по мере роста и увеличения стоимости экосистемы Weeder. Кроме того, WDT служит для распределения дивидендов – те, кто стейкают свои токены, получают доход с платформы.',\n },\n ]\n }\n }\n })\n }\n })\n const { t, tm } = useI18n(props.textData)\n</script>\n\n<style lang=\"scss\">\n\n#grid2 {\n transition: 500ms;\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 3px;\n background: crimson;\n}\n\n:where(.left, .center, .right) {\n background: navajowhite;\n transition: 300ms;\n}\n\n:where(.left, .center, .right):hover {\n background: crimson;\n}\n\n#grid2:has(.left:hover) {\n grid-template-columns: 2fr 0.5fr 0.5fr;\n padding: 3rem;\n}\n\n#grid2:has(.center:hover) {\n grid-template-columns: 0.5fr 2fr 0.5fr;\n padding: 3rem;\n}\n#grid2:has(.right:hover) {\n grid-template-columns: 0.5fr 0.5fr 2fr;\n padding: 3rem;\n}\n</style>\n"],"names":["useI18n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,UAAM,QAAQ;AAoDZ,UAAM,EAAE,GAAG,GAAI,IAAGA,QAAO,QAAC,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { createElementBlock, openBlock, createElementVNode, toDisplayString, unref, Fragment, renderList } from "vue";
|
|
2
|
-
import { useI18n } from "vue-i18n";
|
|
3
|
-
/* empty css */
|
|
4
|
-
const _hoisted_1 = {
|
|
5
|
-
id: "howtobuy",
|
|
6
|
-
class: "section"
|
|
7
|
-
};
|
|
8
|
-
const _hoisted_2 = { class: "mn-b-big t-center title" };
|
|
9
|
-
const _hoisted_3 = { class: "mn-b-small" };
|
|
10
|
-
const _hoisted_4 = { class: "w-m-60r mn-b-big mn-auto t-transp p-big" };
|
|
11
|
-
const _hoisted_5 = { class: "cols-3 gap-thin" };
|
|
12
|
-
const _hoisted_6 = ["src"];
|
|
13
|
-
const _hoisted_7 = { class: "mn-b-medium" };
|
|
14
|
-
const _hoisted_8 = { class: "t-transp" };
|
|
15
|
-
const _sfc_main = {
|
|
16
|
-
__name: "SectionFeaturesImages",
|
|
17
|
-
props: {
|
|
18
|
-
title: String,
|
|
19
|
-
textData: {
|
|
20
|
-
type: Object,
|
|
21
|
-
default: () => ({
|
|
22
|
-
messages: {
|
|
23
|
-
en: {
|
|
24
|
-
title: "What is Weeder Token?",
|
|
25
|
-
subtitle: "WDT – the foundation of the Weeder community. It serves as a currency, a DAO instrument, and for many other purposes:",
|
|
26
|
-
features: [
|
|
27
|
-
{
|
|
28
|
-
image: "/images/howitworks/step1.png",
|
|
29
|
-
title: "Currency",
|
|
30
|
-
text: "WDT can be used as a digital currency within the Weeder ecosystem, allowing users to purchase products such as cannabis, advertising spaces, and other premium features on the platform."
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
image: "/images/howitworks/step2.png",
|
|
34
|
-
title: "Instument",
|
|
35
|
-
text: "As a DAO (Decentralized Autonomous Organization) instrument, WDT enables community governance and decision-making, allowing token holders to propose, discuss, and vote on various initiatives and developments within the Weeder ecosystem."
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
image: "/images/howitworks/step3.png",
|
|
39
|
-
title: "Invesment",
|
|
40
|
-
text: "Holding WDT tokens can provide potential investment returns as the Weeder ecosystem grows and gains value. Additionally, WDT serves for dividend distribution – those who stake their tokens earn income from the platform."
|
|
41
|
-
}
|
|
42
|
-
]
|
|
43
|
-
},
|
|
44
|
-
ru: {
|
|
45
|
-
title: "Что такое Weeder Token?",
|
|
46
|
-
subtitle: "WDT – основа сообщества Weeder. Он выступает в качестве валюты, инструмента DAO и многих других целей:",
|
|
47
|
-
features: [
|
|
48
|
-
{
|
|
49
|
-
image: "/images/howitworks/step1.png",
|
|
50
|
-
title: "Валюта",
|
|
51
|
-
text: "WDT можно использовать как цифровую валюту в экосистеме Weeder, позволяя пользователям покупать товары, такие как марихуана, рекламные места и другие премиальные возможности на платформе."
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
image: "/images/howitworks/step2.png",
|
|
55
|
-
title: "Инструмент",
|
|
56
|
-
text: "В качестве инструмента DAO (Децентрализованной Автономной Организации), WDT позволяет управлять сообществом и принимать решения, давая держателям токенов возможность предлагать, обсуждать и голосовать за различные инициативы и развитие в рамках экосистемы Weeder."
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
image: "/images/howitworks/step3.png",
|
|
60
|
-
title: "Инвестиции",
|
|
61
|
-
text: "Хранение токенов WDT может обеспечить потенциальный инвестиционный доход по мере роста и увеличения стоимости экосистемы Weeder. Кроме того, WDT служит для распределения дивидендов – те, кто стейкают свои токены, получают доход с платформы."
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
setup(__props) {
|
|
70
|
-
const props = __props;
|
|
71
|
-
const { t, tm } = useI18n(props.textData);
|
|
72
|
-
return (_ctx, _cache) => {
|
|
73
|
-
return openBlock(), createElementBlock("section", _hoisted_1, [
|
|
74
|
-
createElementVNode("div", _hoisted_2, [
|
|
75
|
-
createElementVNode("h2", _hoisted_3, toDisplayString(unref(t)("title")), 1),
|
|
76
|
-
createElementVNode("p", _hoisted_4, toDisplayString(unref(t)("subtitle")), 1)
|
|
77
|
-
]),
|
|
78
|
-
createElementVNode("div", _hoisted_5, [
|
|
79
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(tm)("features"), (feature) => {
|
|
80
|
-
return openBlock(), createElementBlock("div", {
|
|
81
|
-
key: feature.title,
|
|
82
|
-
class: "w-100 pd-medium bg-light radius-medium"
|
|
83
|
-
}, [
|
|
84
|
-
createElementVNode("img", {
|
|
85
|
-
loading: "lazy",
|
|
86
|
-
class: "radius-medium bg-light h-max-20r object-fit-cover w-100 mn-b-medium",
|
|
87
|
-
src: feature.image
|
|
88
|
-
}, null, 8, _hoisted_6),
|
|
89
|
-
createElementVNode("h3", _hoisted_7, toDisplayString(feature.title), 1),
|
|
90
|
-
createElementVNode("p", _hoisted_8, toDisplayString(feature.text), 1)
|
|
91
|
-
]);
|
|
92
|
-
}), 128))
|
|
93
|
-
])
|
|
94
|
-
]);
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
export {
|
|
99
|
-
_sfc_main as default
|
|
100
|
-
};
|
|
101
|
-
//# sourceMappingURL=SectionFeaturesImages.vue.js.map
|
package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SectionFeaturesImages.vue.js","sources":["../../../../../../../src/modules/landing/components/sections/SectionFeaturesImages.vue"],"sourcesContent":["<template>\n <section id=\"howtobuy\" class=\"section\">\n\n <div class=\"mn-b-big t-center title\">\n <h2 class=\"mn-b-small\">{{t('title')}}</h2>\n <p class=\"w-m-60r mn-b-big mn-auto t-transp p-big\">\n {{t('subtitle')}}\n </p>\n </div>\n\n <div class=\"cols-3 gap-thin\">\n\n <div \n v-for=\"feature in tm('features')\" \n :key=\"feature.title\" \n class=\"w-100 pd-medium bg-light radius-medium\"\n >\n <img loading=\"lazy\" \n class=\"radius-medium bg-light h-max-20r object-fit-cover w-100 mn-b-medium\" \n :src=\"feature.image\"\n > \n <h3 class=\"mn-b-medium\">{{feature.title}}</h3>\n <p class=\"t-transp\">{{feature.text}}</p>\n </div>\n\n </div>\n\n </section>\n</template>\n\n\n<script setup>\nimport { useI18n } from 'vue-i18n'\n \nconst props = defineProps({\n title: String,\n textData: {\n type: Object,\n default: () => ({\n messages: {\n en: {\n title: 'What is Weeder Token?',\n subtitle: 'WDT – the foundation of the Weeder community. It serves as a currency, a DAO instrument, and for many other purposes:',\n features: [\n {\n image: '/images/howitworks/step1.png',\n title: 'Currency',\n text: 'WDT can be used as a digital currency within the Weeder ecosystem, allowing users to purchase products such as cannabis, advertising spaces, and other premium features on the platform.',\n },\n {\n image: '/images/howitworks/step2.png',\n title: 'Instument',\n text: 'As a DAO (Decentralized Autonomous Organization) instrument, WDT enables community governance and decision-making, allowing token holders to propose, discuss, and vote on various initiatives and developments within the Weeder ecosystem.',\n },\n {\n image: '/images/howitworks/step3.png',\n title: 'Invesment',\n text: 'Holding WDT tokens can provide potential investment returns as the Weeder ecosystem grows and gains value. Additionally, WDT serves for dividend distribution – those who stake their tokens earn income from the platform.'\n },\n ]\n },\n ru: {\n title: 'Что такое Weeder Token?',\n subtitle: 'WDT – основа сообщества Weeder. Он выступает в качестве валюты, инструмента DAO и многих других целей:',\n features: [\n {\n image: '/images/howitworks/step1.png',\n title: 'Валюта',\n text: 'WDT можно использовать как цифровую валюту в экосистеме Weeder, позволяя пользователям покупать товары, такие как марихуана, рекламные места и другие премиальные возможности на платформе.',\n },\n {\n image: '/images/howitworks/step2.png',\n title: 'Инструмент',\n text: 'В качестве инструмента DAO (Децентрализованной Автономной Организации), WDT позволяет управлять сообществом и принимать решения, давая держателям токенов возможность предлагать, обсуждать и голосовать за различные инициативы и развитие в рамках экосистемы Weeder.',\n },\n {\n image: '/images/howitworks/step3.png',\n title: 'Инвестиции',\n text: 'Хранение токенов WDT может обеспечить потенциальный инвестиционный доход по мере роста и увеличения стоимости экосистемы Weeder. Кроме того, WDT служит для распределения дивидендов – те, кто стейкают свои токены, получают доход с платформы.',\n },\n ]\n }\n }\n })\n }\n })\n const { t, tm } = useI18n(props.textData)\n</script>\n\n<style lang=\"scss\">\n\n#grid2 {\n transition: 500ms;\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 3px;\n background: crimson;\n}\n\n:where(.left, .center, .right) {\n background: navajowhite;\n transition: 300ms;\n}\n\n:where(.left, .center, .right):hover {\n background: crimson;\n}\n\n#grid2:has(.left:hover) {\n grid-template-columns: 2fr 0.5fr 0.5fr;\n padding: 3rem;\n}\n\n#grid2:has(.center:hover) {\n grid-template-columns: 0.5fr 2fr 0.5fr;\n padding: 3rem;\n}\n#grid2:has(.right:hover) {\n grid-template-columns: 0.5fr 0.5fr 2fr;\n padding: 3rem;\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,UAAM,QAAQ;AAoDZ,UAAM,EAAE,GAAG,GAAI,IAAG,QAAQ,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const vue = require("vue");
|
|
4
|
-
require("vue-router");
|
|
5
|
-
const vueI18n = require("vue-i18n");
|
|
6
|
-
const AnimatedGrid = require("../elements/AnimatedGrid.vue.cjs");
|
|
7
|
-
;/* empty css */
|
|
8
|
-
const _hoisted_1 = {
|
|
9
|
-
id: "heroGovernance",
|
|
10
|
-
class: "pos-relative bg-black o-hidden t-white t-center pd-extra flex-column flex-center flex"
|
|
11
|
-
};
|
|
12
|
-
const _hoisted_2 = { class: "sheen h-5r mn-b-small radius-extra o-hidden pos-relative" };
|
|
13
|
-
const _hoisted_3 = ["src"];
|
|
14
|
-
const _hoisted_4 = ["innerHTML"];
|
|
15
|
-
const _hoisted_5 = ["innerHTML"];
|
|
16
|
-
const _hoisted_6 = { class: "t-white gap-thin z-index-1 cols-2" };
|
|
17
|
-
const _sfc_main = {
|
|
18
|
-
__name: "SectionHeroToken",
|
|
19
|
-
props: {
|
|
20
|
-
textData: {
|
|
21
|
-
type: Object,
|
|
22
|
-
default: () => ({
|
|
23
|
-
messages: {
|
|
24
|
-
en: {
|
|
25
|
-
TITLE: "Smoke Weed Every Day &<b> Get A Slice Of The Pie</b>",
|
|
26
|
-
DESCRIPTION: "Earn Weeder Token and Get part of the profits of Weeder Delivery. The more tokens you have, the bigger your cut of the profits will be. So what are you waiting for?",
|
|
27
|
-
ACTION: "Open Marketplace →",
|
|
28
|
-
SUBACTION: "Sign Up To Start"
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
})
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
setup(__props) {
|
|
35
|
-
const props = __props;
|
|
36
|
-
const { t } = vueI18n.useI18n(props.textData);
|
|
37
|
-
return (_ctx, _cache) => {
|
|
38
|
-
const _component_router_link = vue.resolveComponent("router-link");
|
|
39
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
40
|
-
vue.createElementVNode("div", _hoisted_2, [
|
|
41
|
-
vue.createElementVNode("img", {
|
|
42
|
-
loading: "lazy",
|
|
43
|
-
src: (_ctx.FILE_SERVER_URL || "") + "/logo/token.svg",
|
|
44
|
-
class: "w-100 h-100"
|
|
45
|
-
}, null, 8, _hoisted_3)
|
|
46
|
-
]),
|
|
47
|
-
vue.createElementVNode("h1", {
|
|
48
|
-
class: "w-max-50r mn-b-medium",
|
|
49
|
-
innerHTML: vue.unref(t)("TITLE")
|
|
50
|
-
}, null, 8, _hoisted_4),
|
|
51
|
-
vue.createElementVNode("p", {
|
|
52
|
-
class: "w-max-50r mn-b-big t-transp p-big",
|
|
53
|
-
innerHTML: vue.unref(t)("DESCRIPTION")
|
|
54
|
-
}, null, 8, _hoisted_5),
|
|
55
|
-
vue.createElementVNode("div", _hoisted_6, [
|
|
56
|
-
vue.createVNode(_component_router_link, {
|
|
57
|
-
to: {
|
|
58
|
-
name: "Sign In"
|
|
59
|
-
},
|
|
60
|
-
class: "w-100 bg-light t-dark br-light button"
|
|
61
|
-
}, {
|
|
62
|
-
default: vue.withCtx(() => [
|
|
63
|
-
vue.createTextVNode(vue.toDisplayString(vue.unref(t)("SUBACTION")), 1)
|
|
64
|
-
]),
|
|
65
|
-
_: 1
|
|
66
|
-
}),
|
|
67
|
-
vue.createVNode(_component_router_link, {
|
|
68
|
-
to: {
|
|
69
|
-
name: "Marketplace"
|
|
70
|
-
},
|
|
71
|
-
class: "w-100 bg-dark t-white button"
|
|
72
|
-
}, {
|
|
73
|
-
default: vue.withCtx(() => [
|
|
74
|
-
vue.createTextVNode(vue.toDisplayString(vue.unref(t)("ACTION")), 1)
|
|
75
|
-
]),
|
|
76
|
-
_: 1
|
|
77
|
-
})
|
|
78
|
-
]),
|
|
79
|
-
vue.createVNode(AnimatedGrid.default, { class: "w-100 h-100 pos-absolute pos-t-0 pos-r-0 z-index-0" })
|
|
80
|
-
]);
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
exports.default = _sfc_main;
|
|
85
|
-
//# sourceMappingURL=SectionHeroToken.vue.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SectionHeroToken.vue.cjs","sources":["../../../../../../../src/modules/landing/components/sections/SectionHeroToken.vue"],"sourcesContent":["<script setup>\n\timport { useRouter } from 'vue-router'\n\timport { useI18n } from 'vue-i18n'\n\n\timport AnimatedGrid from '@martyrs/src/modules/landing/components/elements/AnimatedGrid.vue'\n\n\tconst props = defineProps({\n\t textData: {\n\t type: Object,\n\t default: () => ({\n\t messages: {\n\t \ten: {\n\t\t\t\t TITLE: \"Smoke Weed Every Day &<b> Get A Slice Of The Pie</b>\",\n\t\t\t\t DESCRIPTION: \"Earn Weeder Token and Get part of the profits of Weeder Delivery. The more tokens you have, the bigger your cut of the profits will be. So what are you waiting for?\",\n\t\t\t\t ACTION: \"Open Marketplace →\",\n\t\t\t\t SUBACTION: \"Sign Up To Start\"\n\t\t\t }\n\t\t\t }\n\t\t\t})\n\t\t}\n\t})\n\n\tconst { t } = useI18n(props.textData)\n</script>\n\n\n<template>\n\t<div\n\t\tid=\"heroGovernance\" \n\t\tclass=\"pos-relative bg-black o-hidden t-white t-center pd-extra flex-column flex-center flex\"\n\t>\n\t\t<div class=\"sheen h-5r mn-b-small radius-extra o-hidden pos-relative \">\n\t \t<img loading=\"lazy\" :src=\"(FILE_SERVER_URL || '') + '/logo/token.svg'\" class=\"w-100 h-100\">\n\t </div>\n\n\t\t<h1 \n\t\t\tclass=\"w-max-50r mn-b-medium\" \n\t\t\tv-html=\"t('TITLE')\"\n\t\t/>\n\n\t\t<p \n\t\t\tclass=\"w-max-50r mn-b-big t-transp p-big\" \n\t\t\tv-html=\"t('DESCRIPTION')\"\n\t\t/>\n\n\t\t<div \n\t\t\tclass=\"t-white gap-thin z-index-1 cols-2\"\n\t\t>\n\t\t\t<router-link \n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'Sign In'\n\t\t\t\t}\"\n\t\t\t\tclass=\"w-100 bg-light t-dark br-light button\"\n\t\t\t>\n\t\t\t\t{{t('SUBACTION')}}\n\t\t\t</router-link>\n\n\t\t\t<router-link \n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'Marketplace'\n\t\t\t\t}\"\n\t\t\t\tclass=\"w-100 bg-dark t-white button\"\n\t\t\t>\n\t\t\t\t{{t('ACTION')}}\n\t\t\t</router-link>\n\t\t</div>\n\n\t\t<AnimatedGrid class=\"w-100 h-100 pos-absolute pos-t-0 pos-r-0 z-index-0\" />\n\n\t</div>\n</template>\n\n<style lang=\"scss\">\n\t.sheen:after {\n\t\tcontent:'';\n\t top:0;\n\t left: -25%;\n\t\ttransform:translateX(100%);\n\t\twidth:100%;\n\t\theight:220px;\n\t\tposition: absolute;\n\t\tz-index:1;\n\t\tanimation: slide 3s infinite;\n\t\t \n\t /* \n\t CSS Gradient - complete browser support from http://www.colorzilla.com/gradient-editor/ \n\t */\n\t background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.8) 50%, rgba(128,186,232,0) 99%, rgba(125,185,232,0) 100%); /* FF3.6+ */\n\t\tbackground: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(255,255,255,0)), color-stop(50%,rgba(255,255,255,0.8)), color-stop(99%,rgba(128,186,232,0)), color-stop(100%,rgba(125,185,232,0))); /* Chrome,Safari4+ */\n\t\tbackground: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%,rgba(255,255,255,0.8) 50%,rgba(128,186,232,0) 99%,rgba(125,185,232,0) 100%); /* Chrome10+,Safari5.1+ */\n\t\tbackground: -o-linear-gradient(left, rgba(255,255,255,0) 0%,rgba(255,255,255,0.8) 50%,rgba(128,186,232,0) 99%,rgba(125,185,232,0) 100%); /* Opera 11.10+ */\n\t\tbackground: -ms-linear-gradient(left, rgba(255,255,255,0) 0%,rgba(255,255,255,0.8) 50%,rgba(128,186,232,0) 99%,rgba(125,185,232,0) 100%); /* IE10+ */\n\t\tbackground: linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,0.8) 50%,rgba(128,186,232,0) 99%,rgba(125,185,232,0) 100%); /* W3C */\n\t\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#007db9e8',GradientType=1 ); /* IE6-9 */\n\t}\n\n\t@keyframes slide {\n\t\t0% {\t\n\t\t\ttransform:translateX(-00%); \n\t\t\topacity: 0;\n\t\t}\n\t\t20% {\n\t\t\topacity: 1\n\t\t}\n\t\t80% {\n\t\t\topacity: 1\n\t\t}\n\t\t100% {\n\t\t\ttransform:translateX(100%); \n\t\t\t\topacity: 0\n\t\t}\n\t}\n</style>"],"names":["useI18n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMC,UAAM,QAAQ;AAgBd,UAAM,EAAE,EAAC,IAAKA,QAAO,QAAC,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|