@kaikybrofc/omnizap-system 2.2.9 → 2.3.0
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 +20 -18
- package/app/config/adminIdentity.js +1 -3
- package/app/connection/socketController.js +10 -20
- package/app/controllers/messageController.js +7 -28
- package/app/modules/aiModule/catCommand.js +29 -192
- package/app/modules/broadcastModule/noticeCommand.js +28 -97
- package/app/modules/gameModule/diceCommand.js +6 -32
- package/app/modules/playModule/playCommand.js +57 -258
- package/app/modules/quoteModule/quoteCommand.js +2 -4
- package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1 -13
- package/app/modules/statsModule/noMessageCommand.js +16 -84
- package/app/modules/statsModule/rankingCommand.js +5 -25
- package/app/modules/statsModule/rankingCommon.js +1 -9
- package/app/modules/stickerModule/convertToWebp.js +4 -27
- package/app/modules/stickerModule/stickerCommand.js +13 -24
- package/app/modules/stickerModule/stickerTextCommand.js +13 -25
- package/app/modules/stickerPackModule/autoPackCollectorService.js +16 -7
- package/app/modules/stickerPackModule/domainEventOutboxRepository.js +20 -36
- package/app/modules/stickerPackModule/domainEvents.js +2 -11
- package/app/modules/stickerPackModule/semanticReclassificationEngine.js +13 -50
- package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +2 -15
- package/app/modules/stickerPackModule/semanticThemeClusterService.js +14 -41
- package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +25 -95
- package/app/modules/stickerPackModule/stickerAssetRepository.js +12 -31
- package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +13 -18
- package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +284 -709
- package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +27 -106
- package/app/modules/stickerPackModule/stickerClassificationService.js +46 -77
- package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +13 -53
- package/app/modules/stickerPackModule/stickerDomainEventBus.js +10 -16
- package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +13 -34
- package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +1 -4
- package/app/modules/stickerPackModule/stickerObjectStorageService.js +26 -26
- package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +32 -187
- package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +6 -15
- package/app/modules/stickerPackModule/stickerPackItemRepository.js +6 -32
- package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +12 -36
- package/app/modules/stickerPackModule/stickerPackMessageService.js +12 -40
- package/app/modules/stickerPackModule/stickerPackRepository.js +23 -66
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +9 -21
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +10 -40
- package/app/modules/stickerPackModule/stickerPackService.js +50 -115
- package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +2 -21
- package/app/modules/stickerPackModule/stickerPackUtils.js +13 -3
- package/app/modules/stickerPackModule/stickerStorageService.js +16 -65
- package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +4 -22
- package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +14 -29
- package/app/modules/systemMetricsModule/pingCommand.js +9 -39
- package/app/modules/tiktokModule/tiktokCommand.js +17 -109
- package/app/modules/userModule/userCommand.js +2 -88
- package/app/observability/metrics.js +5 -16
- package/app/services/captchaService.js +1 -6
- package/app/services/dbWriteQueue.js +3 -18
- package/app/services/featureFlagService.js +2 -8
- package/app/services/newsBroadcastService.js +0 -1
- package/app/services/queueUtils.js +2 -4
- package/app/services/whatsappLoginLinkService.js +7 -9
- package/app/store/premiumUserStore.js +1 -2
- package/app/utils/antiLink/antiLinkModule.js +3 -233
- package/app/utils/logger/loggerModule.js +9 -34
- package/app/utils/systemMetrics/systemMetricsModule.js +1 -4
- package/database/init.js +1 -8
- package/docker-compose.yml +27 -27
- package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +220 -0
- package/docs/seo/satellite-page-template.md +91 -0
- package/docs/seo/satellite-pages-phase1.json +349 -0
- package/eslint.config.js +2 -15
- package/index.js +8 -36
- package/ml/clip_classifier/README.md +4 -6
- package/observability/alert-rules.yml +12 -12
- package/observability/grafana/provisioning/dashboards/dashboards.yml +1 -1
- package/package.json +8 -3
- package/public/api-docs/index.html +224 -141
- package/public/bot-whatsapp-para-grupo/index.html +306 -0
- package/public/bot-whatsapp-sem-programar/index.html +306 -0
- package/public/comandos/index.html +428 -0
- package/public/como-automatizar-avisos-no-whatsapp/index.html +306 -0
- package/public/como-criar-comandos-whatsapp/index.html +306 -0
- package/public/como-evitar-spam-no-whatsapp/index.html +306 -0
- package/public/como-moderar-grupo-whatsapp/index.html +306 -0
- package/public/como-organizar-comunidade-whatsapp/index.html +306 -0
- package/public/css/github-project-panel.css +20 -15
- package/public/css/stickers-admin.css +55 -39
- package/public/css/styles.css +37 -29
- package/public/index.html +1060 -1417
- package/public/js/apps/apiDocsApp.js +36 -153
- package/public/js/apps/createPackApp.js +69 -332
- package/public/js/apps/homeApp.js +201 -434
- package/public/js/apps/loginApp.js +3 -12
- package/public/js/apps/stickersAdminApp.js +190 -181
- package/public/js/apps/stickersApp.js +507 -1366
- package/public/js/catalog.js +11 -74
- package/public/js/github-panel/components/ErrorState.js +1 -8
- package/public/js/github-panel/components/GithubProjectPanel.js +2 -9
- package/public/js/github-panel/components/SkeletonPanel.js +1 -11
- package/public/js/github-panel/components/StatCard.js +1 -7
- package/public/js/github-panel/vendor/react.js +1 -9
- package/public/js/runtime/react-runtime.js +1 -9
- package/public/licenca/index.html +104 -86
- package/public/login/index.html +315 -321
- package/public/melhor-bot-whatsapp-para-grupos/index.html +306 -0
- package/public/sitemap.xml +45 -0
- package/public/stickers/admin/index.html +14 -19
- package/public/stickers/create/index.html +39 -43
- package/public/stickers/index.html +97 -41
- package/public/termos-de-uso/index.html +142 -115
- package/public/user/index.html +347 -346
- package/scripts/cache-bust.mjs +5 -24
- package/scripts/generate-seo-satellite-pages.mjs +431 -0
- package/scripts/run-prettier-all.mjs +25 -0
- package/scripts/sticker-catalog-loadtest.mjs +13 -11
- package/scripts/sticker-worker-task.mjs +1 -4
- package/scripts/sync-readme-snapshot.mjs +3 -2
- package/server/controllers/stickerCatalogController.js +407 -704
- package/server/http/httpServer.js +2 -10
- package/server/routes/stickerCatalog/catalogHandlers/catalogAdminHttp.js +1 -8
- package/server/routes/stickerCatalog/catalogHandlers/catalogAuthHttp.js +1 -9
- package/server/routes/stickerCatalog/catalogHandlers/catalogPublicHttp.js +10 -11
- package/server/routes/stickerCatalog/catalogHandlers/catalogUploadHttp.js +1 -10
- package/server/routes/stickerCatalog/catalogRouter.js +11 -13
- package/kaikybrofc-omnizap-system-2.2.9.tgz +0 -0
package/public/js/catalog.js
CHANGED
|
@@ -90,51 +90,11 @@
|
|
|
90
90
|
packPageWhatsApp: document.getElementById('pack-page-whatsapp'),
|
|
91
91
|
};
|
|
92
92
|
|
|
93
|
-
if (
|
|
94
|
-
!els.hero ||
|
|
95
|
-
!els.form ||
|
|
96
|
-
!els.search ||
|
|
97
|
-
!els.visibility ||
|
|
98
|
-
!els.categories ||
|
|
99
|
-
!els.categoriesPicker ||
|
|
100
|
-
!els.categoriesSearch ||
|
|
101
|
-
!els.categoriesChips ||
|
|
102
|
-
!els.categoriesOptions ||
|
|
103
|
-
!els.status ||
|
|
104
|
-
!els.grid ||
|
|
105
|
-
!els.more ||
|
|
106
|
-
!els.orphanStatus ||
|
|
107
|
-
!els.orphanGrid ||
|
|
108
|
-
!els.orphanPrev ||
|
|
109
|
-
!els.orphanNext ||
|
|
110
|
-
!els.orphanPageInfo ||
|
|
111
|
-
!els.panel ||
|
|
112
|
-
!els.panelTitle ||
|
|
113
|
-
!els.panelSub ||
|
|
114
|
-
!els.panelChip ||
|
|
115
|
-
!els.panelError ||
|
|
116
|
-
!els.panelPrev ||
|
|
117
|
-
!els.panelNext ||
|
|
118
|
-
!els.panelPageInfo ||
|
|
119
|
-
!els.copy ||
|
|
120
|
-
!els.useWhatsAppLink ||
|
|
121
|
-
!els.stickers ||
|
|
122
|
-
!els.packPage ||
|
|
123
|
-
!els.packPageTitle ||
|
|
124
|
-
!els.packPageSub ||
|
|
125
|
-
!els.packPageChip ||
|
|
126
|
-
!els.packPageStatus ||
|
|
127
|
-
!els.packPageGrid ||
|
|
128
|
-
!els.packPageBack ||
|
|
129
|
-
!els.packPageCopy ||
|
|
130
|
-
!els.packPageWhatsApp
|
|
131
|
-
) {
|
|
93
|
+
if (!els.hero || !els.form || !els.search || !els.visibility || !els.categories || !els.categoriesPicker || !els.categoriesSearch || !els.categoriesChips || !els.categoriesOptions || !els.status || !els.grid || !els.more || !els.orphanStatus || !els.orphanGrid || !els.orphanPrev || !els.orphanNext || !els.orphanPageInfo || !els.panel || !els.panelTitle || !els.panelSub || !els.panelChip || !els.panelError || !els.panelPrev || !els.panelNext || !els.panelPageInfo || !els.copy || !els.useWhatsAppLink || !els.stickers || !els.packPage || !els.packPageTitle || !els.packPageSub || !els.packPageChip || !els.packPageStatus || !els.packPageGrid || !els.packPageBack || !els.packPageCopy || !els.packPageWhatsApp) {
|
|
132
94
|
return;
|
|
133
95
|
}
|
|
134
96
|
|
|
135
|
-
const panelModal = window.bootstrap?.Modal
|
|
136
|
-
? window.bootstrap.Modal.getOrCreateInstance(els.panel)
|
|
137
|
-
: null;
|
|
97
|
+
const panelModal = window.bootstrap?.Modal ? window.bootstrap.Modal.getOrCreateInstance(els.panel) : null;
|
|
138
98
|
|
|
139
99
|
let shouldReplaceStateOnHide = false;
|
|
140
100
|
|
|
@@ -208,10 +168,7 @@
|
|
|
208
168
|
chip.className = 'category-chip';
|
|
209
169
|
chip.dataset.value = value;
|
|
210
170
|
chip.setAttribute('aria-label', 'Remover categoria ' + (entry?.label || value));
|
|
211
|
-
chip.innerHTML =
|
|
212
|
-
'<span class="category-chip-label">' +
|
|
213
|
-
(entry?.label || value) +
|
|
214
|
-
'</span><i class="fa-solid fa-xmark category-chip-remove" aria-hidden="true"></i>';
|
|
171
|
+
chip.innerHTML = '<span class="category-chip-label">' + (entry?.label || value) + '</span><i class="fa-solid fa-xmark category-chip-remove" aria-hidden="true"></i>';
|
|
215
172
|
els.categoriesChips.appendChild(chip);
|
|
216
173
|
});
|
|
217
174
|
};
|
|
@@ -240,10 +197,7 @@
|
|
|
240
197
|
button.type = 'button';
|
|
241
198
|
button.className = 'category-option' + (selected.has(entry.value) ? ' selected' : '');
|
|
242
199
|
button.dataset.value = entry.value;
|
|
243
|
-
button.innerHTML =
|
|
244
|
-
'<span class="category-option-label">' +
|
|
245
|
-
entry.label +
|
|
246
|
-
'</span><i class="fa-solid fa-check category-option-check" aria-hidden="true"></i>';
|
|
200
|
+
button.innerHTML = '<span class="category-option-label">' + entry.label + '</span><i class="fa-solid fa-check category-option-check" aria-hidden="true"></i>';
|
|
247
201
|
els.categoriesOptions.appendChild(button);
|
|
248
202
|
});
|
|
249
203
|
};
|
|
@@ -401,9 +355,7 @@
|
|
|
401
355
|
.map(([label]) => toTagToken(label))
|
|
402
356
|
.filter(Boolean);
|
|
403
357
|
|
|
404
|
-
const merged = [...rankedFromScores, ...classificationTags, ...explicitTags]
|
|
405
|
-
.map((tag) => toTagToken(tag))
|
|
406
|
-
.filter(Boolean);
|
|
358
|
+
const merged = [...rankedFromScores, ...classificationTags, ...explicitTags].map((tag) => toTagToken(tag)).filter(Boolean);
|
|
407
359
|
|
|
408
360
|
return Array.from(new Set(merged)).slice(0, 3);
|
|
409
361
|
};
|
|
@@ -430,9 +382,7 @@
|
|
|
430
382
|
const explicitTags = Array.isArray(pack?.tags) ? pack.tags : [];
|
|
431
383
|
const classificationTags = Array.isArray(pack?.classification?.tags) ? pack.classification.tags : [];
|
|
432
384
|
|
|
433
|
-
const merged = [...classificationTags, ...explicitTags]
|
|
434
|
-
.map((tag) => toTagToken(tag))
|
|
435
|
-
.filter(Boolean);
|
|
385
|
+
const merged = [...classificationTags, ...explicitTags].map((tag) => toTagToken(tag)).filter(Boolean);
|
|
436
386
|
|
|
437
387
|
return Array.from(new Set(merged)).slice(0, 3);
|
|
438
388
|
};
|
|
@@ -473,8 +423,7 @@
|
|
|
473
423
|
const visibilityBadge = document.createElement('span');
|
|
474
424
|
visibilityBadge.className = 'pack-visibility-badge';
|
|
475
425
|
const visibility = String(pack.visibility || '').toLowerCase();
|
|
476
|
-
visibilityBadge.textContent =
|
|
477
|
-
visibility === 'public' ? 'Público' : visibility === 'unlisted' ? 'Não listado' : 'Privado';
|
|
426
|
+
visibilityBadge.textContent = visibility === 'public' ? 'Público' : visibility === 'unlisted' ? 'Não listado' : 'Privado';
|
|
478
427
|
|
|
479
428
|
const countBadge = document.createElement('span');
|
|
480
429
|
countBadge.className = 'pack-count-badge';
|
|
@@ -546,13 +495,7 @@
|
|
|
546
495
|
for (let index = 0; index < count; index += 1) {
|
|
547
496
|
const col = document.createElement('div');
|
|
548
497
|
col.className = 'col-4 col-sm-6 col-md-4 col-lg-3';
|
|
549
|
-
col.innerHTML =
|
|
550
|
-
'<div class="card h-100 bg-dark text-light shadow-sm pack-card">' +
|
|
551
|
-
'<div class="card-body d-flex flex-column gap-2">' +
|
|
552
|
-
'<div class="skeleton skeleton-thumb"></div>' +
|
|
553
|
-
'<div class="skeleton skeleton-line"></div>' +
|
|
554
|
-
'<div class="skeleton skeleton-line short"></div>' +
|
|
555
|
-
'</div></div>';
|
|
498
|
+
col.innerHTML = '<div class="card h-100 bg-dark text-light shadow-sm pack-card">' + '<div class="card-body d-flex flex-column gap-2">' + '<div class="skeleton skeleton-thumb"></div>' + '<div class="skeleton skeleton-line"></div>' + '<div class="skeleton skeleton-line short"></div>' + '</div></div>';
|
|
556
499
|
els.grid.appendChild(col);
|
|
557
500
|
}
|
|
558
501
|
};
|
|
@@ -607,8 +550,7 @@
|
|
|
607
550
|
|
|
608
551
|
els.packPageTitle.textContent = pack?.name || 'Pack';
|
|
609
552
|
els.packPageSub.textContent = (pack?.publisher || '-') + ' | ' + (pack?.description || 'Sem descrição');
|
|
610
|
-
els.packPageChip.textContent =
|
|
611
|
-
String(pack?.sticker_count || items.length || 0) + ' itens | ' + (pack?.visibility || '-') + ' | ' + (pack?.pack_key || '-');
|
|
553
|
+
els.packPageChip.textContent = String(pack?.sticker_count || items.length || 0) + ' itens | ' + (pack?.visibility || '-') + ' | ' + (pack?.pack_key || '-');
|
|
612
554
|
applyWhatsAppLink(els.packPageWhatsApp, pack?.whatsapp?.url);
|
|
613
555
|
|
|
614
556
|
els.packPageGrid.innerHTML = '';
|
|
@@ -643,11 +585,7 @@
|
|
|
643
585
|
for (let index = 0; index < count; index += 1) {
|
|
644
586
|
const col = document.createElement('div');
|
|
645
587
|
col.className = 'col-6 col-md-3 col-lg-2';
|
|
646
|
-
col.innerHTML =
|
|
647
|
-
'<article class="orphan-card card h-100"><div class="card-body p-2">' +
|
|
648
|
-
'<div class="skeleton skeleton-orphan"></div>' +
|
|
649
|
-
'<div class="skeleton skeleton-line short mt-2"></div>' +
|
|
650
|
-
'</div></article>';
|
|
588
|
+
col.innerHTML = '<article class="orphan-card card h-100"><div class="card-body p-2">' + '<div class="skeleton skeleton-orphan"></div>' + '<div class="skeleton skeleton-line short mt-2"></div>' + '</div></article>';
|
|
651
589
|
els.orphanGrid.appendChild(col);
|
|
652
590
|
}
|
|
653
591
|
};
|
|
@@ -779,8 +717,7 @@
|
|
|
779
717
|
|
|
780
718
|
els.panelPrev.disabled = state.panelPagination.page <= 1;
|
|
781
719
|
els.panelNext.disabled = state.panelPagination.page >= totalPages;
|
|
782
|
-
els.panelPageInfo.textContent =
|
|
783
|
-
'Página ' + state.panelPagination.page + ' de ' + totalPages + ' - ' + safeTotal + ' stickers';
|
|
720
|
+
els.panelPageInfo.textContent = 'Página ' + state.panelPagination.page + ' de ' + totalPages + ' - ' + safeTotal + ' stickers';
|
|
784
721
|
};
|
|
785
722
|
|
|
786
723
|
const renderPanelStickersPage = () => {
|
|
@@ -3,14 +3,7 @@ import { React, memo } from '../vendor/react.js';
|
|
|
3
3
|
const h = React.createElement;
|
|
4
4
|
|
|
5
5
|
function ErrorStateComponent({ message, onRetry, isRateLimited }) {
|
|
6
|
-
return h(
|
|
7
|
-
'section',
|
|
8
|
-
{ className: 'ghp-error', role: 'alert' },
|
|
9
|
-
h('h3', null, 'Não foi possível carregar os dados do GitHub'),
|
|
10
|
-
h('p', null, message || 'Tente novamente em alguns instantes.'),
|
|
11
|
-
isRateLimited ? h('p', { className: 'ghp-rate-limit' }, 'Limite de requisições do GitHub atingido. Tente novamente em breve.') : null,
|
|
12
|
-
h('button', { type: 'button', className: 'ghp-retry', onClick: onRetry }, 'Tentar novamente'),
|
|
13
|
-
);
|
|
6
|
+
return h('section', { className: 'ghp-error', role: 'alert' }, h('h3', null, 'Não foi possível carregar os dados do GitHub'), h('p', null, message || 'Tente novamente em alguns instantes.'), isRateLimited ? h('p', { className: 'ghp-rate-limit' }, 'Limite de requisições do GitHub atingido. Tente novamente em breve.') : null, h('button', { type: 'button', className: 'ghp-retry', onClick: onRetry }, 'Tentar novamente'));
|
|
14
7
|
}
|
|
15
8
|
|
|
16
9
|
export const ErrorState = memo(ErrorStateComponent);
|
|
@@ -92,15 +92,8 @@ export function GithubProjectPanel({ owner, repo, endpoint }) {
|
|
|
92
92
|
),
|
|
93
93
|
),
|
|
94
94
|
),
|
|
95
|
-
error
|
|
96
|
-
? h('p', { className: 'ghp-inline-warning', role: 'status' }, error.rateLimited ? 'Limite da API do GitHub atingido; exibindo cache local.' : 'Exibindo último snapshot disponível.')
|
|
97
|
-
: null,
|
|
95
|
+
error ? h('p', { className: 'ghp-inline-warning', role: 'status' }, error.rateLimited ? 'Limite da API do GitHub atingido; exibindo cache local.' : 'Exibindo último snapshot disponível.') : null,
|
|
98
96
|
h('div', { className: 'ghp-stat-grid' }, ...statCards.map((card) => h(StatCard, { key: card.label, ...card }))),
|
|
99
|
-
h(
|
|
100
|
-
'div',
|
|
101
|
-
{ className: 'ghp-list-grid' },
|
|
102
|
-
h('section', { className: 'ghp-list-card' }, h('h4', { className: 'ghp-list-title' }, 'Últimos Commits'), h(CommitList, { items: data?.latest_commits || [], formatDate: fmtDate })),
|
|
103
|
-
h('section', { className: 'ghp-list-card' }, h('h4', { className: 'ghp-list-title' }, 'Últimas Releases'), h(ReleaseList, { items: data?.latest_releases || [], formatDate: fmtDate })),
|
|
104
|
-
),
|
|
97
|
+
h('div', { className: 'ghp-list-grid' }, h('section', { className: 'ghp-list-card' }, h('h4', { className: 'ghp-list-title' }, 'Últimos Commits'), h(CommitList, { items: data?.latest_commits || [], formatDate: fmtDate })), h('section', { className: 'ghp-list-card' }, h('h4', { className: 'ghp-list-title' }, 'Últimas Releases'), h(ReleaseList, { items: data?.latest_releases || [], formatDate: fmtDate }))),
|
|
105
98
|
);
|
|
106
99
|
}
|
|
@@ -6,17 +6,7 @@ function SkeletonPanelComponent() {
|
|
|
6
6
|
const statNodes = Array.from({ length: 10 }).map((_, index) => h('div', { key: `s-${index}`, className: 'ghp-skeleton-card' }));
|
|
7
7
|
const listNodes = Array.from({ length: 4 }).map((_, index) => h('li', { key: `l-${index}`, className: 'ghp-skeleton-line' }));
|
|
8
8
|
|
|
9
|
-
return h(
|
|
10
|
-
'section',
|
|
11
|
-
{ className: 'ghp-panel', 'aria-busy': 'true', 'aria-live': 'polite' },
|
|
12
|
-
h('div', { className: 'ghp-stat-grid' }, ...statNodes),
|
|
13
|
-
h(
|
|
14
|
-
'div',
|
|
15
|
-
{ className: 'ghp-list-grid' },
|
|
16
|
-
h('div', { className: 'ghp-list-card' }, h('div', { className: 'ghp-skeleton-title' }), h('ul', { className: 'ghp-list' }, ...listNodes)),
|
|
17
|
-
h('div', { className: 'ghp-list-card' }, h('div', { className: 'ghp-skeleton-title' }), h('ul', { className: 'ghp-list' }, ...listNodes)),
|
|
18
|
-
),
|
|
19
|
-
);
|
|
9
|
+
return h('section', { className: 'ghp-panel', 'aria-busy': 'true', 'aria-live': 'polite' }, h('div', { className: 'ghp-stat-grid' }, ...statNodes), h('div', { className: 'ghp-list-grid' }, h('div', { className: 'ghp-list-card' }, h('div', { className: 'ghp-skeleton-title' }), h('ul', { className: 'ghp-list' }, ...listNodes)), h('div', { className: 'ghp-list-card' }, h('div', { className: 'ghp-skeleton-title' }), h('ul', { className: 'ghp-list' }, ...listNodes))));
|
|
20
10
|
}
|
|
21
11
|
|
|
22
12
|
export const SkeletonPanel = memo(SkeletonPanelComponent);
|
|
@@ -3,13 +3,7 @@ import { React, memo } from '../vendor/react.js';
|
|
|
3
3
|
const h = React.createElement;
|
|
4
4
|
|
|
5
5
|
function StatCardComponent({ label, value, detail, iconClass }) {
|
|
6
|
-
return h(
|
|
7
|
-
'article',
|
|
8
|
-
{ className: 'ghp-stat-card' },
|
|
9
|
-
h('header', { className: 'ghp-stat-head' }, h('span', { className: 'ghp-stat-label' }, label), iconClass ? h('i', { className: iconClass, 'aria-hidden': 'true' }) : null),
|
|
10
|
-
h('p', { className: 'ghp-stat-value' }, value),
|
|
11
|
-
h('p', { className: 'ghp-stat-detail', title: detail || '' }, detail || ' '),
|
|
12
|
-
);
|
|
6
|
+
return h('article', { className: 'ghp-stat-card' }, h('header', { className: 'ghp-stat-head' }, h('span', { className: 'ghp-stat-label' }, label), iconClass ? h('i', { className: iconClass, 'aria-hidden': 'true' }) : null), h('p', { className: 'ghp-stat-value' }, value), h('p', { className: 'ghp-stat-detail', title: detail || '' }, detail || ' '));
|
|
13
7
|
}
|
|
14
8
|
|
|
15
9
|
export const StatCard = memo(StatCardComponent);
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
default as React,
|
|
3
|
-
memo,
|
|
4
|
-
useMemo,
|
|
5
|
-
useCallback,
|
|
6
|
-
useEffect,
|
|
7
|
-
useRef,
|
|
8
|
-
useState,
|
|
9
|
-
} from 'https://esm.sh/react@18.3.1';
|
|
1
|
+
export { default as React, memo, useMemo, useCallback, useEffect, useRef, useState } from 'https://esm.sh/react@18.3.1';
|
|
10
2
|
|
|
11
3
|
export { createRoot } from 'https://esm.sh/react-dom@18.3.1/client';
|
|
@@ -7,14 +7,6 @@ if (typeof document !== 'undefined' && !window.__omnizapTwindReady) {
|
|
|
7
7
|
window.__omnizapTwindReady = true;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export {
|
|
11
|
-
default as React,
|
|
12
|
-
useCallback,
|
|
13
|
-
useEffect,
|
|
14
|
-
useMemo,
|
|
15
|
-
useRef,
|
|
16
|
-
useState,
|
|
17
|
-
memo,
|
|
18
|
-
} from 'https://esm.sh/react@18.3.1';
|
|
10
|
+
export { default as React, useCallback, useEffect, useMemo, useRef, useState, memo } from 'https://esm.sh/react@18.3.1';
|
|
19
11
|
|
|
20
12
|
export { createRoot } from 'https://esm.sh/react-dom@18.3.1/client';
|
|
@@ -1,89 +1,106 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
2
|
<html lang="pt-BR">
|
|
3
|
-
<head>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Licença | OmniZap System</title>
|
|
7
|
+
<meta name="description" content="Informações de licença do OmniZap System (MIT License)." />
|
|
8
|
+
<meta name="robots" content="index, follow" />
|
|
9
|
+
<link rel="canonical" href="https://omnizap.shop/licenca/" />
|
|
10
|
+
<link rel="icon" type="image/jpeg" href="https://iili.io/FC3FABe.jpg" />
|
|
11
|
+
<link rel="apple-touch-icon" href="https://iili.io/FC3FABe.jpg" />
|
|
12
|
+
<style>
|
|
13
|
+
:root {
|
|
14
|
+
--bg: #0f172a;
|
|
15
|
+
--bg-2: #111827;
|
|
16
|
+
--line: rgba(255, 255, 255, 0.05);
|
|
17
|
+
--text: #f8fafc;
|
|
18
|
+
--muted: #94a3b8;
|
|
19
|
+
--card: #1e293bcc;
|
|
20
|
+
}
|
|
21
|
+
* {
|
|
22
|
+
box-sizing: border-box;
|
|
23
|
+
}
|
|
24
|
+
body {
|
|
25
|
+
margin: 0;
|
|
26
|
+
font-family:
|
|
27
|
+
'Manrope',
|
|
28
|
+
system-ui,
|
|
29
|
+
-apple-system,
|
|
30
|
+
sans-serif;
|
|
31
|
+
color: var(--text);
|
|
32
|
+
background: radial-gradient(58rem 24rem at -8% -12%, #2563eb26, transparent 60%), radial-gradient(58rem 24rem at 112% -10%, #7c3aed22, transparent 58%), linear-gradient(165deg, var(--bg), var(--bg-2));
|
|
33
|
+
}
|
|
34
|
+
.wrap {
|
|
35
|
+
width: min(960px, 92vw);
|
|
36
|
+
margin: 0 auto;
|
|
37
|
+
padding: 24px 0 42px;
|
|
38
|
+
}
|
|
39
|
+
.top {
|
|
40
|
+
display: flex;
|
|
41
|
+
gap: 10px;
|
|
42
|
+
flex-wrap: wrap;
|
|
43
|
+
margin-bottom: 16px;
|
|
44
|
+
}
|
|
45
|
+
.top a {
|
|
46
|
+
color: var(--text);
|
|
47
|
+
text-decoration: none;
|
|
48
|
+
border: 1px solid var(--line);
|
|
49
|
+
border-radius: 10px;
|
|
50
|
+
padding: 8px 12px;
|
|
51
|
+
background: #111827;
|
|
52
|
+
}
|
|
53
|
+
.card {
|
|
54
|
+
border: 1px solid var(--line);
|
|
55
|
+
border-radius: 14px;
|
|
56
|
+
background: var(--card);
|
|
57
|
+
padding: 18px;
|
|
58
|
+
margin-bottom: 12px;
|
|
59
|
+
}
|
|
60
|
+
h1,
|
|
61
|
+
h2 {
|
|
62
|
+
margin: 0 0 10px;
|
|
63
|
+
}
|
|
64
|
+
h1 {
|
|
65
|
+
font-size: clamp(28px, 4.2vw, 38px);
|
|
66
|
+
}
|
|
67
|
+
p {
|
|
68
|
+
color: var(--muted);
|
|
69
|
+
line-height: 1.6;
|
|
70
|
+
margin: 0 0 10px;
|
|
71
|
+
}
|
|
72
|
+
pre {
|
|
73
|
+
margin: 0;
|
|
74
|
+
white-space: pre-wrap;
|
|
75
|
+
line-height: 1.5;
|
|
76
|
+
color: #d6e4fa;
|
|
77
|
+
border: 1px solid #314669;
|
|
78
|
+
border-radius: 12px;
|
|
79
|
+
background: #0f1729;
|
|
80
|
+
padding: 14px;
|
|
81
|
+
overflow: auto;
|
|
82
|
+
}
|
|
83
|
+
</style>
|
|
84
|
+
</head>
|
|
85
|
+
<body>
|
|
86
|
+
<main class="wrap">
|
|
87
|
+
<nav class="top" aria-label="Navegação">
|
|
88
|
+
<a href="/">Início</a>
|
|
89
|
+
<a href="/stickers/">Stickers</a>
|
|
90
|
+
<a href="/api-docs/">API</a>
|
|
91
|
+
<a href="/termos-de-uso/">Termos de Uso</a>
|
|
92
|
+
</nav>
|
|
77
93
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
94
|
+
<section class="card">
|
|
95
|
+
<h1>Licença</h1>
|
|
96
|
+
<p>Este projeto é distribuído sob a licença MIT. Abaixo está o texto da licença usada no repositório.</p>
|
|
97
|
+
<p>Copyright (c) 2025 Kaiky Brito</p>
|
|
98
|
+
</section>
|
|
83
99
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
100
|
+
<section class="card">
|
|
101
|
+
<h2>MIT License (texto original)</h2>
|
|
102
|
+
<pre>
|
|
103
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
87
104
|
of this software and associated documentation files (the "Software"), to deal
|
|
88
105
|
in the Software without restriction, including without limitation the rights
|
|
89
106
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
@@ -99,8 +116,9 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
99
116
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
100
117
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
101
118
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
102
|
-
SOFTWARE.</pre
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
</
|
|
119
|
+
SOFTWARE.</pre
|
|
120
|
+
>
|
|
121
|
+
</section>
|
|
122
|
+
</main>
|
|
123
|
+
</body>
|
|
106
124
|
</html>
|