From afb6bf17600039af38d50a8659348645ce71c4db Mon Sep 17 00:00:00 2001 From: smanylov Date: Tue, 13 Jan 2026 15:29:34 +0700 Subject: [PATCH] change dash-board layout --- package-lock.json | 74 +- package.json | 2 + src/app/[locale]/pages/dashboard/page.tsx | 38 +- src/app/[locale]/pages/dashboard1/page.tsx | 29 + src/app/actions/auth.ts | 2 - src/app/styles/pages-styles.scss | 717 ++++++++++++++++++ .../ui/dashboard/new/dashboard-files-info.tsx | 85 +++ .../new/dashboard-geography-section.tsx | 74 ++ .../ui/dashboard/new/dashboard-last-check.tsx | 19 + .../new/dashboard-platforms-list.tsx | 47 ++ .../ui/dashboard/new/dashboard-user-files.tsx | 49 ++ .../ui/dashboard/new/dashboard-user-stats.tsx | 41 + .../new/dashborad-limits-section.tsx | 55 ++ .../ui/dashboard/new/violations-carousel.tsx | 266 +++++++ 14 files changed, 1484 insertions(+), 14 deletions(-) create mode 100644 src/app/[locale]/pages/dashboard1/page.tsx create mode 100644 src/app/ui/dashboard/new/dashboard-files-info.tsx create mode 100644 src/app/ui/dashboard/new/dashboard-geography-section.tsx create mode 100644 src/app/ui/dashboard/new/dashboard-last-check.tsx create mode 100644 src/app/ui/dashboard/new/dashboard-platforms-list.tsx create mode 100644 src/app/ui/dashboard/new/dashboard-user-files.tsx create mode 100644 src/app/ui/dashboard/new/dashboard-user-stats.tsx create mode 100644 src/app/ui/dashboard/new/dashborad-limits-section.tsx create mode 100644 src/app/ui/dashboard/new/violations-carousel.tsx diff --git a/package-lock.json b/package-lock.json index 63a99c4..66e0bfe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "no-copy-frontend", - "version": "0.15.0", + "version": "0.17.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "no-copy-frontend", - "version": "0.15.0", + "version": "0.17.0", "dependencies": { "@react-input/mask": "^2.0.4", "@tailwindcss/postcss": "^4.1.17", @@ -21,8 +21,10 @@ "next-intl": "^4.5.8", "react": "19.2.0", "react-dom": "19.2.0", + "react-slick": "^0.31.0", "recharts": "^3.5.1", "sonner": "^2.0.7", + "swiper": "^12.0.3", "tailwindcss": "^4.1.17", "validator": "^13.15.26", "zod": "^4.1.13", @@ -3484,6 +3486,12 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -5581,6 +5589,15 @@ "dev": true, "license": "MIT" }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -5919,6 +5936,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6676,6 +6699,22 @@ } } }, + "node_modules/react-slick": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.31.0.tgz", + "integrity": "sha512-zo6VLT8wuSBJffg/TFPbzrw2dEnfZ/cUKmYsKByh3AgatRv29m2LoFbq5vRMa3R3A4wp4d8gwbJKO2fWZFaI3g==", + "license": "MIT", + "dependencies": { + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -6791,6 +6830,12 @@ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", "license": "MIT" }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -7205,6 +7250,12 @@ "node": ">= 0.4" } }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "license": "MIT" + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -7390,6 +7441,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swiper": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-12.0.3.tgz", + "integrity": "sha512-BHd6U1VPEIksrXlyXjMmRWO0onmdNPaTAFduzqR3pgjvi7KfmUCAm/0cj49u2D7B0zNjMw02TSeXfinC1hDCXg==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "license": "MIT", + "engines": { + "node": ">= 4.7.0" + } + }, "node_modules/tailwindcss": { "version": "4.1.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", diff --git a/package.json b/package.json index fb5ad43..640076b 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,10 @@ "next-intl": "^4.5.8", "react": "19.2.0", "react-dom": "19.2.0", + "react-slick": "^0.31.0", "recharts": "^3.5.1", "sonner": "^2.0.7", + "swiper": "^12.0.3", "tailwindcss": "^4.1.17", "validator": "^13.15.26", "zod": "^4.1.13", diff --git a/src/app/[locale]/pages/dashboard/page.tsx b/src/app/[locale]/pages/dashboard/page.tsx index c51cefd..7787195 100644 --- a/src/app/[locale]/pages/dashboard/page.tsx +++ b/src/app/[locale]/pages/dashboard/page.tsx @@ -5,6 +5,14 @@ import StatsGrid from '@/app/ui/dashboard/stats-grid'; import { useTranslations } from 'next-intl'; import FilesTable from '@/app/ui/dashboard/files-table'; import PageTitle from '@/app/ui/page-title'; +import DashboardUserStats from '@/app/ui/dashboard/new/dashboard-user-stats'; +import DashboardUserFiles from '@/app/ui/dashboard/new/dashboard-user-files'; +import DashboardPlatformsList from '@/app/ui/dashboard/new/dashboard-platforms-list'; +import DashboardFilesInfo from '@/app/ui/dashboard/new/dashboard-files-info'; +import DahboardLimitsSection from '@/app/ui/dashboard/new/dashborad-limits-section'; +import DahboardGeographySection from '@/app/ui/dashboard/new/dashboard-geography-section'; +import DashboardLastCheck from '@/app/ui/dashboard/new/dashboard-last-check'; +import ViolationsCarousel from '@/app/ui/dashboard/new/violations-carousel'; export const metadata: Metadata = { title: 'Dashboard', @@ -14,16 +22,26 @@ export default function Page() { const t = useTranslations('Global'); return ( - <> - ...}> - - -
- - + ...}> + + + +
+
+ +
- - - +
+ +
+
+ +
+ + +
+ + +
); } diff --git a/src/app/[locale]/pages/dashboard1/page.tsx b/src/app/[locale]/pages/dashboard1/page.tsx new file mode 100644 index 0000000..c51cefd --- /dev/null +++ b/src/app/[locale]/pages/dashboard1/page.tsx @@ -0,0 +1,29 @@ +import { Metadata } from 'next'; +import { Suspense } from 'react'; +import ProtectionOverview from '@/app/ui/dashboard/protection-overview'; +import StatsGrid from '@/app/ui/dashboard/stats-grid'; +import { useTranslations } from 'next-intl'; +import FilesTable from '@/app/ui/dashboard/files-table'; +import PageTitle from '@/app/ui/page-title'; + +export const metadata: Metadata = { + title: 'Dashboard', +}; + +export default function Page() { + const t = useTranslations('Global'); + + return ( + <> + ...}> + + +
+ + +
+ +
+ + ); +} diff --git a/src/app/actions/auth.ts b/src/app/actions/auth.ts index 391662e..037df63 100644 --- a/src/app/actions/auth.ts +++ b/src/app/actions/auth.ts @@ -299,8 +299,6 @@ export async function tokenLifeExtension() { if (response.ok) { const parsed = await response.json(); - console.log('tokenLifeExtension'); - console.log(parsed.message_code); await updateSession(); } } catch (error) { diff --git a/src/app/styles/pages-styles.scss b/src/app/styles/pages-styles.scss index 03eb9e5..5139311 100644 --- a/src/app/styles/pages-styles.scss +++ b/src/app/styles/pages-styles.scss @@ -1106,4 +1106,721 @@ margin-top: 20px; } } +} + +.dashboard-user-stats { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 20px; + margin-bottom: 40px; + + .stat-card.matches { + --card-color-1: #3b82f6; + --card-color-2: #60a5fa; + } + + .stat-card.projects { + --card-color-1: #6366f1; + --card-color-2: #8b5cf6; + } + + .stat-card.violations { + --card-color-1: #ef4444; + --card-color-2: #f87171; + } + + .stat-card.storage { + --card-color-1: #8b5cf6; + --card-color-2: #a78bfa; + } + + .stat-card.legal { + --card-color-1: #f59e0b; + --card-color-2: #fbbf24; + } + + .stat-card { + background: linear-gradient(135deg, var(--card-color-1), var(--card-color-2)); + border-radius: 20px; + padding: 30px 24px; + color: white; + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12); + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + position: relative; + overflow: hidden; + } + + .stat-type { + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1.2px; + opacity: 0.9; + margin-bottom: 16px; + } + + .stat-value { + font-size: 42px; + font-weight: 800; + line-height: 1; + margin-bottom: 12px; + text-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + } + + .stat-label { + font-size: 14px; + font-weight: 500; + opacity: 0.95; + } + + .stat-icon { + position: absolute; + bottom: 20px; + right: 20px; + font-size: 48px; + opacity: 0.2; + filter: blur(1px); + } +} + +.dashboard-main-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 30px; + margin-bottom: 40px; + + .left-column { + display: flex; + flex-direction: column; + gap: 30px; + } + + .right-column { + display: flex; + flex-direction: column; + } + + .content-section { + background: white; + border-radius: 20px; + padding: 32px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + + .section-header { + display: flex; + justify-content: space-between; + align-items: center; + } + + .section-title { + font-size: 22px; + font-weight: 700; + color: #1e293b; + } + + .view-all-link { + color: #6366f1; + text-decoration: none; + font-size: 14px; + font-weight: 600; + } + } + +} + +.user-files-list { + display: flex; + flex-direction: column; + gap: 16px; + + .file-item { + display: flex; + align-items: center; + gap: 16px; + padding: 16px; + background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%); + border-radius: 14px; + border: 1px solid #e2e8f0; + transition: all 0.3s ease; + } + + .file-icon { + width: 48px; + height: 48px; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + font-size: 24px; + flex-shrink: 0; + + &.video { + background: linear-gradient(135deg, #f3e8ff, #e9d5ff); + } + } + + .file-info { + flex: 1; + min-width: 0; + } + + .file-name { + font-weight: 600; + color: #1e293b; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 4px; + } + + .file-meta { + font-size: 13px; + color: #64748b; + } + + .file-badge { + padding: 4px 12px; + border-radius: 6px; + font-size: 12px; + font-weight: 700; + white-space: nowrap; + + &.protected { + background: #d1fae5; + color: #065f46; + } + } +} + +.dashboard-platforms-list { + display: flex; + flex-direction: column; + gap: 12px; + + .platform-item { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 16px; + background: linear-gradient(135deg, #f8fafc, #f1f5f9); + border-radius: 12px; + transition: all 0.3s ease; + } + + .platform-name { + display: flex; + align-items: center; + gap: 10px; + font-weight: 600; + color: #1e293b; + } + + .platform-count { + font-weight: 700; + color: #6366f1; + font-size: 16px; + } +} + +.dashboard-files-info { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 20px; + margin-bottom: 40px; + + .type-card.images { + --card-color-1: #ff6b8a; + --card-color-2: #ff8da1; + } + + .type-card.videos { + --card-color-1: #8b5cf6; + --card-color-2: #a78bfa; + } + + .type-card.audio { + --card-color-1: #10b981; + --card-color-2: #34d399; + } + + .type-card.scripts { + --card-color-1: #f59e0b; + --card-color-2: #fbbf24; + } + + .type-card { + background: linear-gradient(135deg, var(--card-color-1), var(--card-color-2)); + border-radius: 20px; + padding: 32px 28px; + color: white; + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12); + transition: all 0.4s ease; + cursor: pointer; + position: relative; + overflow: hidden; + + .stat-type { + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1.2px; + opacity: 0.9; + margin-bottom: 16px; + position: relative; + z-index: 1; + } + + .stat-value { + font-size: 48px; + font-weight: 800; + margin-bottom: 12px; + position: relative; + z-index: 1; + text-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + } + + .stat-label { + font-size: 14px; + opacity: 0.95; + margin-bottom: 16px; + position: relative; + z-index: 1; + } + + .type-card-stats { + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 16px; + padding-top: 16px; + border-top: 1px solid rgba(255, 255, 255, 0.2); + position: relative; + z-index: 1; + } + + .type-card-stat-row { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 13px; + } + + .type-card-stat-label { + opacity: 0.9; + font-weight: 500; + } + + .type-card-stat-value { + font-weight: 700; + font-size: 14px; + } + } +} + +.dashboard-limits-section { + background: white; + border-radius: 20px; + padding: 32px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + display: flex; + flex-direction: column; + height: 100%; + + .limits-grid { + display: flex; + flex-direction: column; + gap: 24px; + margin-top: 20px; + flex: 1; + } + + .limit-item { + display: flex; + flex-direction: column; + gap: 12px; + } + + .limit-header { + display: flex; + justify-content: space-between; + align-items: center; + } + + .limit-label { + font-size: 14px; + font-weight: 600; + color: #64748b; + display: flex; + align-items: center; + gap: 8px; + } + + .limit-value { + font-size: 18px; + font-weight: 700; + color: #1e293b; + } + + .progress-bar-container { + width: 100%; + height: 12px; + background: #e2e8f0; + border-radius: 6px; + overflow: hidden; + position: relative; + } + + .progress-bar { + height: 100%; + border-radius: 6px; + transition: width 0.5s ease, background 0.3s ease; + position: relative; + overflow: hidden; + + &.low { + background: linear-gradient(90deg, #10b981, #34d399); + } + + &.medium { + background: linear-gradient(90deg, #f59e0b, #fbbf24); + } + } + + .progress-bar-value { + text-align: right; + font-size: 12px; + font-weight: 600; + color: #64748b; + margin-top: 4px; + } +} + +.dahboard-geography-section { + background: white; + border-radius: 20px; + padding: 32px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + display: flex; + flex-direction: column; + height: 100%; + + .geography-grid { + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 20px; + flex: 1; + } + + .country-item { + padding: 10px 14px; + background: linear-gradient(135deg, #f8fafc, #f1f5f9); + border-radius: 12px; + transition: all 0.3s ease; + cursor: pointer; + position: relative; + overflow: hidden; + display: grid; + grid-template-columns: 50px 1fr 70px; + align-items: center; + gap: 12px; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: linear-gradient(90deg, #6366f1, #8b5cf6); + } + } + + .country-flag { + font-size: 28px; + text-align: center; + } + + .country-info { + display: flex; + flex-direction: column; + gap: 4px; + } + + .country-name { + font-size: 14px; + font-weight: 600; + color: #1e293b; + } + + .country-bar { + width: 100%; + height: 5px; + background: #e2e8f0; + border-radius: 2.5px; + overflow: hidden; + } + + .country-bar-fill { + height: 100%; + background: linear-gradient(90deg, #6366f1, #8b5cf6); + border-radius: 2.5px; + transition: width 0.5s ease; + } + + .country-stats { + text-align: right; + } + + .country-violations { + font-size: 20px; + font-weight: 800; + color: #6366f1; + line-height: 1; + } + + .country-percent { + font-size: 10px; + color: #64748b; + font-weight: 600; + margin-top: 2px; + } +} + +.dashboard-last-check { + background: white; + border-radius: 20px; + padding: 20px 28px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + display: flex; + justify-content: space-between; + align-items: center; + + .last-check-title { + font-size: 14px; + font-weight: 600; + color: #64748b; + margin-bottom: 6px; + } + + .last-check-date { + font-size: 20px; + font-weight: 700; + color: #1e293b; + } + + .last-check-info { + flex: 1; + } + + .last-check-actions { + display: flex; + gap: 12px; + } + + .btn-report { + padding: 10px 20px; + background: white; + color: #6366f1; + border: 2px solid #6366f1; + border-radius: 12px; + font-weight: 600; + font-size: 14px; + cursor: pointer; + transition: all 0.3s ease; + + &:hover { + background: #6366f1; + color: white; + } + } + + .btn-new-search { + padding: 10px 20px; + background: linear-gradient(135deg, #6366f1, #8b5cf6); + color: white; + border: none; + border-radius: 12px; + font-weight: 600; + font-size: 14px; + cursor: pointer; + transition: all 0.3s ease; + + &:hover { + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(99, 102, 241, 0.4); + } + } +} + +.violations-carousel { + display: flex; + flex-direction: column; + + .violation-slide { + .violation-image-container { + width: 100%; + height: 200px; + border-radius: 16px; + overflow: hidden; + margin-bottom: 16px; + background: linear-gradient(135deg, #f1f5f9, #e2e8f0); + display: flex; + align-items: center; + justify-content: center; + position: relative; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + } + + .violation-image { + width: 300px; + height: 100%; + object-fit: contain; + background: white; + } + + .violation-badge { + position: absolute; + top: 12px; + right: 12px; + background: linear-gradient(135deg, #ef4444, #dc2626); + color: white; + padding: 6px 14px; + border-radius: 8px; + font-weight: 700; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + box-shadow: 0 4px 12px rgba(239, 68, 68, 0.4); + } + + .violation-status-badge { + position: absolute; + top: 12px; + left: 12px; + background: linear-gradient(135deg, #10b981, #059669); + color: white; + padding: 6px 14px; + border-radius: 8px; + font-weight: 700; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + } + + .violation-content { + flex: 1; + display: flex; + flex-direction: column; + gap: 12px; + min-height: 0; + + .violation-title-row { + display: flex; + align-items: center; + justify-content: space-between; + padding-bottom: 12px; + border-bottom: 2px solid #e2e8f0; + } + + .violation-filename { + font-size: 16px; + font-weight: 700; + color: #1e293b; + display: flex; + align-items: center; + gap: 8px; + } + + .violation-type-badge { + padding: 4px 10px; + border-radius: 6px; + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + background: #dbeafe; + color: #1e40af; + } + } + + .violation-info-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 10px; + } + + .violation-info-item { + padding: 10px 12px; + background: linear-gradient(135deg, #f8fafc, #f1f5f9); + border-radius: 10px; + display: flex; + flex-direction: column; + gap: 4px; + } + + .violation-info-value { + font-size: 13px; + font-weight: 700; + color: #1e293b; + display: flex; + align-items: center; + gap: 6px; + } + + .violation-info-label { + font-size: 10px; + font-weight: 600; + color: #64748b; + text-transform: uppercase; + letter-spacing: 0.5px; + display: flex; + align-items: center; + gap: 4px; + } + + .violation-actions-row { + display: flex; + gap: 10px; + margin-top: auto; + flex-shrink: 0; + } + + .btn-visit-site { + flex: 1; + padding: 12px 20px; + background: white; + color: #3b82f6; + border: 2px solid #3b82f6; + border-radius: 10px; + font-weight: 600; + font-size: 13px; + cursor: pointer; + transition: all 0.3s ease; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + } + + .violation-action { + flex: 1; + padding: 12px 20px; + background: linear-gradient(135deg, #ef4444, #dc2626); + color: white; + border: none; + border-radius: 10px; + font-weight: 600; + font-size: 13px; + cursor: pointer; + transition: all 0.3s ease; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + } + } + + .swiper-slide { + width: 100% !important; + } } \ No newline at end of file diff --git a/src/app/ui/dashboard/new/dashboard-files-info.tsx b/src/app/ui/dashboard/new/dashboard-files-info.tsx new file mode 100644 index 0000000..a466062 --- /dev/null +++ b/src/app/ui/dashboard/new/dashboard-files-info.tsx @@ -0,0 +1,85 @@ +export default function DashboardFilesInfo() { + return ( +
+
+
ИЗОБРАЖЕНИЯ
+
235
+
Ваши изображения
+
+
+ 💾 Размер + 340.5 МБ +
+
+ 🛡️ Защищено + 233 файлов +
+
+ ⚠️ Нарушений + 504 +
+
+
+ +
+
ВИДЕО
+
25
+
Ваш видео контент
+
+
+ 💾 Размер + 196.9 МБ +
+
+ 🛡️ Защищено + 23 файлов +
+
+ ⚠️ Нарушений + 0 +
+
+
+ +
+
АУДИО
+
43
+
Ваш аудио контент
+
+
+ 💾 Размер + 223.7 МБ +
+
+ 🛡️ Защищено + 36 файлов +
+
+ ⚠️ Нарушений + 0 +
+
+
+ +
+
PDF-ФАЙЛЫ
+
73
+
Ваши PDF-файлы
+
+
+ 💾 Размер + 28.9 МБ +
+
+ 🛡️ Защищено + 70 файлов +
+
+ ⚠️ Нарушений + 0 +
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/app/ui/dashboard/new/dashboard-geography-section.tsx b/src/app/ui/dashboard/new/dashboard-geography-section.tsx new file mode 100644 index 0000000..6f071f6 --- /dev/null +++ b/src/app/ui/dashboard/new/dashboard-geography-section.tsx @@ -0,0 +1,74 @@ +export default function DahboardGeographySection() { + return ( +
+

🌍 География нарушений

+
+
+
🇺🇸
+
+
США
+
+
+
+
+
+
231
+
44%
+
+
+
+
🇷🇺
+
+
Россия
+
+
+
+
+
+
227
+
44%
+
+
+
+
🌐
+
+
Другие
+
+
+
+
+
+
57
+
11%
+
+
+
+
🇬🇧
+
+
Великобритания
+
+
+
+
+
+
4
+
1%
+
+
+
+
🇩🇪
+
+
Германия
+
+
+
+
+
+
1
+
0%
+
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/app/ui/dashboard/new/dashboard-last-check.tsx b/src/app/ui/dashboard/new/dashboard-last-check.tsx new file mode 100644 index 0000000..a000925 --- /dev/null +++ b/src/app/ui/dashboard/new/dashboard-last-check.tsx @@ -0,0 +1,19 @@ +export default function DashboardLastCheck() { + return ( +
+
+
Последняя проверка контента
+
+ 17.10.2025 в 10:23
+
+
+ + +
+
+ ) +} \ No newline at end of file diff --git a/src/app/ui/dashboard/new/dashboard-platforms-list.tsx b/src/app/ui/dashboard/new/dashboard-platforms-list.tsx new file mode 100644 index 0000000..344613f --- /dev/null +++ b/src/app/ui/dashboard/new/dashboard-platforms-list.tsx @@ -0,0 +1,47 @@ +export default function DashboardPlatformsList() { + return ( +
+
+

Аналитика распространения

+
+ +
+
+
+ 🌐 + Другие +
+ 367 +
+
+
+ 📦 + Ozon +
+ 56 +
+
+
+ 🔴 + Yandex +
+ 40 +
+
+
+ 📌 + Pinterest +
+ 33 +
+
+
+ 🛍️ + Wildberries +
+ 18 +
+
+
+ ) +} \ No newline at end of file diff --git a/src/app/ui/dashboard/new/dashboard-user-files.tsx b/src/app/ui/dashboard/new/dashboard-user-files.tsx new file mode 100644 index 0000000..ce3ee2f --- /dev/null +++ b/src/app/ui/dashboard/new/dashboard-user-files.tsx @@ -0,0 +1,49 @@ +export default function DashboardUserFiles() { + return ( +
+
+

Ваши файлы

+ Загрузить файл → +
+ +
+
+
+ 🎬
+
+
+ Запись экрана 2026-01-09 в 15.45.28.mov
+
+ 11.3 МБ • + 11.01.2026
+
+
✓ Защищено
+
+
+
+ 🎬
+
+
+ SOUNE_миграция.mov
+
+ 17.1 МБ • + 11.01.2026
+
+
✓ Защищено
+
+
+
+ 🎬
+
+
+ SOUNE_миграция.mov
+
+ 17.1 МБ • + 11.01.2026
+
+
✓ Защищено
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/app/ui/dashboard/new/dashboard-user-stats.tsx b/src/app/ui/dashboard/new/dashboard-user-stats.tsx new file mode 100644 index 0000000..f30a664 --- /dev/null +++ b/src/app/ui/dashboard/new/dashboard-user-stats.tsx @@ -0,0 +1,41 @@ +export default function DashboardUserStats() { + return ( +
+ +
+
ЗАЩИЩЁННЫЕ ФАЙЛЫ
+
367
+
Файлов под защитой
+
🛡️
+
+ +
+
СОВПАДЕНИЯ
+
520
+
Найдено совпадений
+
🔍
+
+ +
+
НАРУШЕНИЯ
+
499
+
Требуют внимания
+
⚠️
+
+ +
+
ХРАНИЛИЩЕ
+
790.2 MB
+
Использовано места
+
💾
+
+ +
+
ЖАЛОБЫ
+
0
+
Отправлено юристам
+
⚖️
+
+
+ ) +} \ No newline at end of file diff --git a/src/app/ui/dashboard/new/dashborad-limits-section.tsx b/src/app/ui/dashboard/new/dashborad-limits-section.tsx new file mode 100644 index 0000000..08465d8 --- /dev/null +++ b/src/app/ui/dashboard/new/dashborad-limits-section.tsx @@ -0,0 +1,55 @@ +export default function DahboardLimitsSection() { + return ( +
+

💰 Использование лимитов

+
+
+
+
+ 🔍 + Проверки +
+
520 / 10,000
+
+
+
+
+
+ 5% +
+
+ +
+
+
+ 💾 + Хранилище +
+
790.2 / 1,024 МБ
+
+
+
+
+
+ 77% +
+
+
+
+
+ 📁 + Файлы +
+
386 / 500
+
+
+
+
+
+ 77% +
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/app/ui/dashboard/new/violations-carousel.tsx b/src/app/ui/dashboard/new/violations-carousel.tsx new file mode 100644 index 0000000..67a9860 --- /dev/null +++ b/src/app/ui/dashboard/new/violations-carousel.tsx @@ -0,0 +1,266 @@ +'use client' + +import { Swiper, SwiperSlide } from 'swiper/react'; +import { Pagination, Autoplay } from 'swiper/modules'; +import Image from 'next/image'; +import 'swiper/css'; +import 'swiper/css/pagination'; +import testImage from '@/app/src/image-preview.png' +import { useRef } from 'react'; + +export default function ViolationsCarousel() { + const paginationRef = useRef(null); + + return ( +
+
+

Нарушения

+ Смотреть все → +
+
+ + +
+
+ Preview +
НАРУШЕНИЕ
+
ОБРАБОТАНО
+
+ +
+
+
+ 🖼️banner111.png
+
+ Фото +
+
+ +
+
+
+ 🌍 Регион +
+
+ 🇺🇸 + США +
+
+ +
+
📅 Обнаружено
+
+ 17.10.2025
+
+ +
+
🌐 Домен
+
+ m.apkpure.com
+
+ +
+
📊 Категория
+
+ Единичное +
+
+ +
+
📁 Тип
+
+ Изображение
+
+ +
+
⚡ Статус
+
+ ✅ Обработано
+
+
+ +
+ + +
+
+
+
+ +
+
+ Preview + +
НАРУШЕНИЕ
+
ОБРАБОТАНО
+
+ +
+
+
+ 🖼️banner111.png
+
+ Фото +
+
+ +
+
+
+ 🌍 Регион +
+
+ 🇺🇸 + США +
+
+ +
+
📅 Обнаружено
+
+ 17.10.2025
+
+ +
+
🌐 Домен
+
+ m.apkpure.com
+
+ +
+
📊 Категория
+
+ Единичное +
+
+ +
+
📁 Тип
+
+ Изображение
+
+ +
+
⚡ Статус
+
+ ✅ Обработано
+
+
+ +
+ + +
+
+
+
+ +
+
+ Preview + +
НАРУШЕНИЕ
+
ОБРАБОТАНО
+
+ +
+
+
+ 🖼️banner111.png
+
+ Фото +
+
+ +
+
+
+ 🌍 Регион +
+
+ 🇺🇸 + США +
+
+ +
+
📅 Обнаружено
+
+ 17.10.2025
+
+ +
+
🌐 Домен
+
+ m.apkpure.com
+
+ +
+
📊 Категория
+
+ Единичное +
+
+ +
+
📁 Тип
+
+ Изображение
+
+ +
+
⚡ Статус
+
+ ✅ Обработано
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+ ) +} \ No newline at end of file