@mundogamernetwork/shared-ui 1.8.6 → 1.8.7
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.
|
@@ -172,7 +172,7 @@ const detailRoute = computed(() =>
|
|
|
172
172
|
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 16 17" fill="none">
|
|
173
173
|
<path d="M13.3333 4.1112L12.8666 3.64453L11.9333 4.57786L10.9333 3.64453L8.33329 4.1112L2.66663 9.77786L7.19996 14.3112L12.8666 8.64453L13.3333 6.04453L12.4 5.1112L13.3333 4.1112ZM12.6 6.24453L12.2666 8.3112L7.19996 13.3779L3.59996 9.77786L8.66663 4.7112L10.7333 4.3112L11.4666 5.04453L11 5.5112L10.5333 5.04453L9.99996 5.57786L11.4 6.97786L11.8666 6.5112L11.4 6.04453L11.8666 5.57786L12.6 6.24453Z" fill="#D297FF"/>
|
|
174
174
|
</svg>
|
|
175
|
-
{{ card.type }}
|
|
175
|
+
{{ typeof card.type === "string" ? card.type : card.type.name }}
|
|
176
176
|
</span>
|
|
177
177
|
</div>
|
|
178
178
|
</div>
|
package/package.json
CHANGED
|
@@ -130,7 +130,9 @@
|
|
|
130
130
|
<div
|
|
131
131
|
class="keys-badge"
|
|
132
132
|
v-if="card.available_count > 0 && card.user_can_access && !card.isExpired && !card.isUpcoming"
|
|
133
|
+
:title="$t('keys.campaigns.keys_left', { n: card.available_count })"
|
|
133
134
|
>
|
|
135
|
+
<i class="fa-solid fa-key" />
|
|
134
136
|
{{ card.available_count }}
|
|
135
137
|
</div>
|
|
136
138
|
|
|
@@ -221,10 +223,6 @@
|
|
|
221
223
|
+{{ card.platforms.length - 4 }}
|
|
222
224
|
</span>
|
|
223
225
|
</div>
|
|
224
|
-
<div v-if="card.available_count > 0 && card.user_can_access && !card.isExpired && !card.isUpcoming" class="card-availability">
|
|
225
|
-
{{ $t("keys.campaigns.keys_left", { n: card.available_count }) }}
|
|
226
|
-
</div>
|
|
227
|
-
<div v-if="card.gameName && card.gameName !== card.text" class="card-campaign-name">{{ card.text }}</div>
|
|
228
226
|
|
|
229
227
|
<div class="buttons">
|
|
230
228
|
<template v-if="!card.user_can_access">
|
|
@@ -1237,7 +1235,7 @@ onUnmounted(() => {
|
|
|
1237
1235
|
}
|
|
1238
1236
|
|
|
1239
1237
|
.text {
|
|
1240
|
-
min-height:
|
|
1238
|
+
min-height: 170px;
|
|
1241
1239
|
|
|
1242
1240
|
.card-name {
|
|
1243
1241
|
font-size: 16px;
|
|
@@ -1254,18 +1252,6 @@ onUnmounted(() => {
|
|
|
1254
1252
|
gap: 6px;
|
|
1255
1253
|
}
|
|
1256
1254
|
|
|
1257
|
-
.card-availability {
|
|
1258
|
-
font-size: 12px;
|
|
1259
|
-
color: var(--key-accent, var(--primary, #D297FF));
|
|
1260
|
-
font-weight: 600;
|
|
1261
|
-
}
|
|
1262
|
-
|
|
1263
|
-
.card-campaign-name {
|
|
1264
|
-
font-size: 13px;
|
|
1265
|
-
font-weight: 400;
|
|
1266
|
-
color: var(--secondary-info-fg);
|
|
1267
|
-
}
|
|
1268
|
-
|
|
1269
1255
|
.card-meta-row {
|
|
1270
1256
|
display: flex;
|
|
1271
1257
|
align-items: center;
|
|
@@ -98,6 +98,14 @@ const PLATFORM_LABEL: Record<string, string> = {
|
|
|
98
98
|
linkedin: 'LinkedIn', bluesky: 'Bluesky',
|
|
99
99
|
};
|
|
100
100
|
|
|
101
|
+
// Font Awesome brand icon per platform — no entry means no official FA glyph
|
|
102
|
+
// exists yet (e.g. Kick), the template falls back to the 2-letter label.
|
|
103
|
+
const PLATFORM_ICON: Record<string, string> = {
|
|
104
|
+
instagram: 'fa-instagram', tiktok: 'fa-tiktok', youtube: 'fa-youtube', twitch: 'fa-twitch',
|
|
105
|
+
x: 'fa-x-twitter', facebook: 'fa-facebook', discord: 'fa-discord', telegram: 'fa-telegram',
|
|
106
|
+
linkedin: 'fa-linkedin', bluesky: 'fa-bluesky',
|
|
107
|
+
};
|
|
108
|
+
|
|
101
109
|
const socials = computed(() => {
|
|
102
110
|
const s = streamer.value?.social_links || {};
|
|
103
111
|
return Object.entries(s).filter(([, v]) => v).map(([k, v]) => ({ platform: k, url: v as string }));
|
|
@@ -110,6 +118,14 @@ const scheduleByDay = computed(() => {
|
|
|
110
118
|
return [0, 1, 2, 3, 4, 5, 6].map((d) => ({ d, key: DOW[d], slot: map[d] || null }));
|
|
111
119
|
});
|
|
112
120
|
|
|
121
|
+
// Sidebar "hire" CTA jumps to the rates tab — on mobile the tabs are further
|
|
122
|
+
// down the stacked layout, so switching activeTab alone can leave the change
|
|
123
|
+
// off-screen; scroll it into view too.
|
|
124
|
+
function goToRates() {
|
|
125
|
+
activeTab.value = 1;
|
|
126
|
+
document.getElementById('mk-tabs')?.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
127
|
+
}
|
|
128
|
+
|
|
113
129
|
// ── Tabs: template picks which one opens first, casting-details-style ──
|
|
114
130
|
const TAB_KEYS = ['profile', 'rates', 'performance'] as const;
|
|
115
131
|
const TEMPLATE_DEFAULT_TAB: Record<string, number> = {
|
|
@@ -284,7 +300,8 @@ function onDownload() {
|
|
|
284
300
|
</div>
|
|
285
301
|
|
|
286
302
|
<div class="mk-actions no-print">
|
|
287
|
-
<a class="kit-btn kit-btn-primary" @click="
|
|
303
|
+
<a v-if="!isOwnKit" class="kit-btn kit-btn-primary" @click="goToRates">{{ $t('kit.media.hire') }}</a>
|
|
304
|
+
<a class="kit-btn" :class="isOwnKit ? 'kit-btn-primary' : 'kit-btn-ghost'" @click="onDownload">{{ $t('kit.media.download_pdf') }}</a>
|
|
288
305
|
<a v-if="streamer.contact_email" class="kit-btn kit-btn-ghost" :href="`mailto:${streamer.contact_email}`" @click="track('contact')">{{ $t('kit.media.contact') }}</a>
|
|
289
306
|
</div>
|
|
290
307
|
|
|
@@ -314,16 +331,17 @@ function onDownload() {
|
|
|
314
331
|
|
|
315
332
|
<div v-if="socials.length" class="mk-socials no-print">
|
|
316
333
|
<a v-for="s in socials" :key="s.platform" class="mk-soc" :href="s.url" target="_blank" rel="noopener" :title="PLATFORM_LABEL[s.platform] || s.platform" @click="track('click')">
|
|
317
|
-
|
|
334
|
+
<i v-if="PLATFORM_ICON[s.platform]" class="fa-brands" :class="PLATFORM_ICON[s.platform]" />
|
|
335
|
+
<span v-else class="mk-soc-fallback">{{ (PLATFORM_LABEL[s.platform] || s.platform).slice(0, 2).toUpperCase() }}</span>
|
|
318
336
|
</a>
|
|
319
337
|
</div>
|
|
320
338
|
</aside>
|
|
321
339
|
|
|
322
340
|
<!-- ══════════════ MAIN: TABS ══════════════ -->
|
|
323
341
|
<main class="mk-main">
|
|
324
|
-
<div class="mk-tabs no-print">
|
|
342
|
+
<div id="mk-tabs" class="mk-tabs no-print">
|
|
325
343
|
<button class="mk-tab" :class="{ active: activeTab === 0 }" @click="activeTab = 0">{{ $t('kit.media.tab_profile') }}</button>
|
|
326
|
-
<button
|
|
344
|
+
<button class="mk-tab" :class="{ active: activeTab === 1 }" @click="activeTab = 1">{{ $t('kit.media.tab_rates') }}</button>
|
|
327
345
|
<button v-if="hasPerformanceTab" class="mk-tab" :class="{ active: activeTab === 2 }" @click="activeTab = 2">{{ $t('kit.media.tab_performance') }}</button>
|
|
328
346
|
</div>
|
|
329
347
|
|
|
@@ -452,8 +470,12 @@ function onDownload() {
|
|
|
452
470
|
</div>
|
|
453
471
|
|
|
454
472
|
<!-- ── TAB: RATE CARDS ── -->
|
|
455
|
-
<div
|
|
456
|
-
<div class="mk-rc-
|
|
473
|
+
<div class="mk-tabpanel" :class="{ active: activeTab === 1 }" data-print-tab="rates">
|
|
474
|
+
<div v-if="!hasRatesTab" class="mk-rc-empty">
|
|
475
|
+
<p>{{ isOwnKit ? $t('kit.media.rates_empty_own') : $t('kit.media.rates_empty_viewer') }}</p>
|
|
476
|
+
<a v-if="!isOwnKit && streamer.contact_email" class="kit-btn kit-btn-primary" :href="`mailto:${streamer.contact_email}`" @click="track('contact')">{{ $t('kit.media.contact') }}</a>
|
|
477
|
+
</div>
|
|
478
|
+
<div v-else class="mk-rc-layout">
|
|
457
479
|
<div class="mk-rc-main">
|
|
458
480
|
<div v-if="bundles.length" class="mk-rc-group">
|
|
459
481
|
<h2>{{ $t('kit.media.rates_bundles') }}</h2>
|
|
@@ -715,11 +737,12 @@ function onDownload() {
|
|
|
715
737
|
display: flex; align-items: center; justify-content: center;
|
|
716
738
|
border: 1px solid var(--kit-line);
|
|
717
739
|
color: var(--kit-muted);
|
|
718
|
-
font-size:
|
|
740
|
+
font-size: 15px;
|
|
719
741
|
text-decoration: none;
|
|
720
742
|
|
|
721
743
|
&:hover { border-color: var(--kit-accent); color: var(--kit-accent); }
|
|
722
744
|
}
|
|
745
|
+
.mk-soc-fallback { font-size: 11px; font-weight: 700; }
|
|
723
746
|
|
|
724
747
|
/* Buttons (shared) */
|
|
725
748
|
.kit-btn {
|
|
@@ -909,6 +932,15 @@ function onDownload() {
|
|
|
909
932
|
}
|
|
910
933
|
|
|
911
934
|
/* Rate cards / builder */
|
|
935
|
+
.mk-rc-empty {
|
|
936
|
+
display: flex;
|
|
937
|
+
flex-direction: column;
|
|
938
|
+
align-items: center;
|
|
939
|
+
gap: 16px;
|
|
940
|
+
text-align: center;
|
|
941
|
+
padding: 60px 24px;
|
|
942
|
+
color: var(--kit-muted);
|
|
943
|
+
}
|
|
912
944
|
.mk-rc-layout { display: grid; grid-template-columns: 1fr 260px; gap: 20px; align-items: start; }
|
|
913
945
|
@media (max-width: 760px) { .mk-rc-layout { grid-template-columns: 1fr; } }
|
|
914
946
|
.mk-rc-group { display: flex; flex-direction: column; gap: 1px; background: var(--kit-line); margin-bottom: 24px; }
|