From 639b2c501807e78f5ae2fb103ba5f6fe1b6a792e Mon Sep 17 00:00:00 2001 From: Casimir43 Date: Wed, 24 Jun 2026 16:15:11 +0300 Subject: [PATCH 01/11] restructured prg page layout and add registry section title --- .../PRGPage/ui/PRGPage.module.scss | 20 ++-- .../src/preparedPages/PRGPage/ui/PRGPage.tsx | 91 ++++++++++--------- .../src/shared/i18n/locales/en/prg.json | 1 + .../src/shared/i18n/locales/fi/prg.json | 1 + 4 files changed, 58 insertions(+), 55 deletions(-) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index aa1053ad2..bbb8b65d6 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -233,16 +233,16 @@ font-weight: bold; } +.teamButton { + background: var(--primary-color); + color: black; + + .label { + color: black; + } +} + .registryInfo { - display: flex; - flex-direction: column; - text-align: left; - margin-top: 2rem; - margin-left: auto; - margin-right: auto; - width: fit-content; - padding: 1rem; - border: 2px solid var(--primary-color); - border-radius: .8em; + text-align: center; white-space: pre-line; } \ No newline at end of file diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx index c91800ad9..e1b069472 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx @@ -93,43 +93,9 @@ const PRGPage = () => { src={prgDeveloper} alt="prgDeveloper" /> -
-

{t('prg')}

-

{t('prg-text')}

-
-
-

{t('action-plan')}

-

{t('action-plan-text')}

-
- -
-

{t('activity-report')}

-

{t('activity-report-text')}

-
- -
-

{t('bylaws')}

-

{t('bylaws-text')}

-
- -
-
- {t('registry-info')} -
-
+

{t('prg')}

+

{t('prg-text')}

{t('prg-board')}

{!isMobileSize && !isTabletSize ? (
@@ -186,16 +152,51 @@ const PRGPage = () => { />
)} - + + {t('alt-zone-team')} + +
+ +
+

{t('action-plan')}

+

{t('action-plan-text')}

+
+ +
+

{t('activity-report')}

+

{t('activity-report-text')}

+
+ +
+

{t('bylaws')}

+

{t('bylaws-text')}

+
+ +
+
+
+

{t('registry-title')}

+
- - {t('alt-zone-team')}  - - + {t('registry-info')} +
); diff --git a/frontend-next-migration/src/shared/i18n/locales/en/prg.json b/frontend-next-migration/src/shared/i18n/locales/en/prg.json index 85023980f..58f590f68 100644 --- a/frontend-next-migration/src/shared/i18n/locales/en/prg.json +++ b/frontend-next-migration/src/shared/i18n/locales/en/prg.json @@ -22,5 +22,6 @@ "alt-zone-team": "ALT Zone Team here", "open-pdf": "Open the PDF in a new tab", "link-to-team-page": "Open the ALT Zone team page in a new tab.", + "registry-title": "Company info", "registry-info": "PRG\nPsyche's Royale Gaming ry\nly: 1459866-4\nDUNS: 368247973\nPavloff, Ignatiuksenkatu 12, 28120 Pori\npsykkis@hotmail.com\nproyaleg@gmail.com\np. 0442407396" } \ No newline at end of file diff --git a/frontend-next-migration/src/shared/i18n/locales/fi/prg.json b/frontend-next-migration/src/shared/i18n/locales/fi/prg.json index ec0cf70d3..d0e5dd368 100644 --- a/frontend-next-migration/src/shared/i18n/locales/fi/prg.json +++ b/frontend-next-migration/src/shared/i18n/locales/fi/prg.json @@ -22,4 +22,5 @@ "alt-zone-team": "ALT Zone -tiimi täällä", "open-pdf": "Avaa PDF:n uudessa välilehdessä", "link-to-team-page": "Avaa ALT Zone tiimi - sivun uudessa välilehdessä.", + "registry-title": "Yritystiedot", "registry-info": "PRG\nPsyche's Royale Gaming ry\nly: 1459866-4\nDUNS: 368247973\nPavloff, Ignatiuksenkatu 12, 28120 Pori\npsykkis@hotmail.com\nproyaleg@gmail.com\np. 0442407396"} \ No newline at end of file From 8c855a219db5a7c5f764fce29835809a165868e2 Mon Sep 17 00:00:00 2001 From: Casimir43 Date: Thu, 25 Jun 2026 16:13:35 +0300 Subject: [PATCH 02/11] add tabbed viewer for previous action plan,annual report, association rules --- .../PRGPage/ui/PRGPage.module.scss | 120 ++++++++++++++++++ .../src/preparedPages/PRGPage/ui/PRGPage.tsx | 107 ++++++++++++---- .../assets/images/PRGPage/actionplan.png | Bin 0 -> 5488 bytes .../assets/images/PRGPage/annualreport.png | Bin 0 -> 15307 bytes .../images/PRGPage/associationrules.png | Bin 0 -> 13117 bytes 5 files changed, 202 insertions(+), 25 deletions(-) create mode 100644 frontend-next-migration/src/shared/assets/images/PRGPage/actionplan.png create mode 100644 frontend-next-migration/src/shared/assets/images/PRGPage/annualreport.png create mode 100644 frontend-next-migration/src/shared/assets/images/PRGPage/associationrules.png diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index bbb8b65d6..4b21761b3 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -34,6 +34,126 @@ } } +.prgTabSwitch.prgTabSwitch { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + padding: 0 8px; + gap: 5px; + height: 80px; + background: var(--background); + border: 2px solid var(--black); + box-shadow: 2px 4px 0px var(--black); + border-radius: 35px; +} + +.prgTabSwitch [class*="ToggleItem"] { + flex: 1; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + height: 65px; + border-radius: 35px; + font: 500 var(--font-dm-xl); + letter-spacing: -0.04em; + color: var(--primary-color); + border: none; + cursor: pointer; + transition: background 0.15s, color 0.15s; + + &:hover { + height: 70px; + } +} + +.prgTabSwitch > * > * { + padding: 0; + margin: 0; +} + +.prgTabSwitch > * > * > * { + padding: 0; + margin: 0; +} + +.prgTabSwitch [class*="OpenToggleItem"] { + background: var(--primary-color); + border: 2px solid var(--black); + height: 70px; + color: var(--black); +} + +.tabContentContainer { + margin-top: 0.5rem; +} + +.tabContentLayout { + display: flex; + gap: 2rem; + align-items: flex-start; +} + +.tabContentLayoutReverse { + flex-direction: row-reverse; +} + +.tabTextArea { + flex: 1; +} + +.tabImageArea { + flex-shrink: 0; + width: 40%; +} + +.tabImage { + width: 100%; + height: auto; + max-height: 200px; + object-fit: contain; + display: block; +} + +.headingWithLines { + position: relative; + text-align: center; + padding-top: 1rem; + padding-bottom: 1rem; + margin-inline: -1rem; +} + +.headingWithLines::before, +.headingWithLines::after { + content: ''; + position: absolute; + top: 50%; + height: 2px; + background: var(--primary-color); + transform: translateY(-50%); +} + +.headingWithLines::before { + left: 0; + width: 15%; +} + +.headingWithLines::after { + right: 0; + width: 15%; +} + +.headingWithLinesText { + font: var(--font-sw-xl); + color: var(--primary-color); + text-align: center; + + @media (max-width: #{breakpoint(sm)}) { + font-size: 1.5rem; + } +} + .textColumns { box-sizing: border-box; padding-inline: 32px; diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx index e1b069472..8a51adcf7 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx @@ -11,9 +11,15 @@ import Helena from '@/shared/assets/images/board/helena.png'; import Esa from '@/shared/assets/images/board/esa.png'; import Emmi_Irina from '@/shared/assets/images/board/emmi-irina.png'; import { AppExternalLinks } from '@/shared/appLinks/appExternalLinks'; +import actionPlanImg from '@/shared/assets/images/PRGPage/actionplan.png'; +import activityReportImg from '@/shared/assets/images/PRGPage/annualreport.png'; +import associationRulesImg from '@/shared/assets/images/PRGPage/associationrules.png'; import { classNames } from '@/shared/lib/classNames/classNames'; import { faExternalLink } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { useState, useMemo } from 'react'; +import { CustomSwitch, CustomSwitchItems } from '@/shared/ui/CustomSwitch'; +import type { ToggleItem } from '@/shared/ui/CustomSwitch'; type PrgT = TFunction<'prg'>; @@ -78,9 +84,55 @@ const Boardcard = (props: BoardCardProps) => { ); }; +const DOCUMENT_TABS = ['action-plan', 'activity-report', 'bylaws'] as const; + +type DocumentTab = (typeof DOCUMENT_TABS)[number]; + +const tabTranslationKeys: Record = { + 'action-plan': 'action-plan', + 'activity-report': 'activity-report', + bylaws: 'bylaws', +}; + +const tabTextKeys: Record = { + 'action-plan': 'action-plan-text', + 'activity-report': 'activity-report-text', + bylaws: 'bylaws-text', +}; + +const tabLinks: Record = { + 'action-plan': AppExternalLinks.prgActionPlan, + 'activity-report': AppExternalLinks.prgActivityReport, + bylaws: AppExternalLinks.prgBylaws, +}; + +const tabImages: Record = { + 'action-plan': actionPlanImg, + 'activity-report': activityReportImg, + bylaws: associationRulesImg, +}; + +const tabImageSide: Record = { + 'action-plan': 'right', + 'activity-report': 'left', + bylaws: 'right', +}; + const PRGPage = () => { const { t } = useClientTranslation('prg'); const { isMobileSize, isTabletSize } = useSizes(); + const [activeTab, setActiveTab] = useState('action-plan'); + + const tabElements: ToggleItem[] = useMemo( + () => + DOCUMENT_TABS.map((tab) => ({ + type: CustomSwitchItems.ToggleItem, + isOpen: activeTab === tab, + onOpen: () => setActiveTab(tab), + children:

{t(tabTranslationKeys[tab])}

, + })), + [activeTab, t], + ); return (
@@ -96,7 +148,9 @@ const PRGPage = () => {

{t('prg')}

{t('prg-text')}

-

{t('prg-board')}

+
+ {t('prg-board')} +
{!isMobileSize && !isTabletSize ? (
{
-
-

{t('action-plan')}

-

{t('action-plan-text')}

-
- -
-

{t('activity-report')}

-

{t('activity-report-text')}

-
- -
-

{t('bylaws')}

-

{t('bylaws-text')}

-
- + +
+
+
+

{t(tabTranslationKeys[activeTab])}

+

{t(tabTextKeys[activeTab])}

+
+ +
+
+
+ {t(tabTranslationKeys[activeTab])} +
diff --git a/frontend-next-migration/src/shared/assets/images/PRGPage/actionplan.png b/frontend-next-migration/src/shared/assets/images/PRGPage/actionplan.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb53d956f0ff8766cf1769d86732091b4c826fa GIT binary patch literal 5488 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 literal 0 HcmV?d00001 diff --git a/frontend-next-migration/src/shared/assets/images/PRGPage/associationrules.png b/frontend-next-migration/src/shared/assets/images/PRGPage/associationrules.png new file mode 100644 index 0000000000000000000000000000000000000000..4e01ec2febe047a0fc2964502e921bc4969c4d5d GIT binary patch literal 13117 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 Date: Fri, 26 Jun 2026 17:42:40 +0300 Subject: [PATCH 03/11] restyled titles,board cards, tabcontent and first implementation of mobile layout --- .../PRGPage/ui/PRGPage.module.scss | 238 ++++++++++++++---- .../src/preparedPages/PRGPage/ui/PRGPage.tsx | 12 +- .../src/shared/i18n/locales/en/prg.json | 6 +- .../src/shared/i18n/locales/fi/prg.json | 4 +- 4 files changed, 197 insertions(+), 63 deletions(-) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index 4b21761b3..ef6249617 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -8,6 +8,24 @@ } } +.titleGap { + margin-bottom: 3rem; + text-align: left; + width: 100%; +} + +.titleGap h1 { + font-size: clamp(2rem, 6vw, 128px) !important; + text-align: left; +} + +.titleGap > div { + max-width: none !important; + margin: 0 !important; + padding: 0 !important; + width: 100%; +} + .HeaderLine { display: flex; justify-content: space-between; @@ -23,11 +41,14 @@ } .Subheading { - font: var(--font-sw-xl); + font-family: var(--font-family-title); + font-size: clamp(1.5rem, 4vw, var(--font-size-5xl)); + line-height: var(--font-line-5xl); color: var(--primary-color); text-align: center; padding-top: 1rem; padding-bottom: 1rem; + padding-inline: 1rem; @media (max-width: #{breakpoint(sm)}) { font-size: 1.5rem; @@ -62,58 +83,29 @@ border: none; cursor: pointer; transition: background 0.15s, color 0.15s; + padding: 0 4px; + min-width: 0; &:hover { height: 70px; } } -.prgTabSwitch > * > * { - padding: 0; - margin: 0; -} - -.prgTabSwitch > * > * > * { - padding: 0; - margin: 0; -} - -.prgTabSwitch [class*="OpenToggleItem"] { - background: var(--primary-color); - border: 2px solid var(--black); - height: 70px; - color: var(--black); -} - -.tabContentContainer { - margin-top: 0.5rem; -} - -.tabContentLayout { - display: flex; - gap: 2rem; - align-items: flex-start; +.prgTabSwitch [class*="ToggleItem"] > * { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; } .tabContentLayoutReverse { flex-direction: row-reverse; } -.tabTextArea { - flex: 1; -} - -.tabImageArea { - flex-shrink: 0; - width: 40%; -} - -.tabImage { - width: 100%; - height: auto; - max-height: 200px; - object-fit: contain; - display: block; +.textCenter { + text-align: center; + padding-inline: 2em; + font: var(--font-dm-l); } .headingWithLines { @@ -145,15 +137,142 @@ } .headingWithLinesText { - font: var(--font-sw-xl); + font-family: var(--font-family-title); + font-size: clamp(1.5rem, 4vw, var(--font-size-5xl)); + line-height: var(--font-line-5xl); color: var(--primary-color); text-align: center; + padding-inline: 1rem; @media (max-width: #{breakpoint(sm)}) { font-size: 1.5rem; } } +@media (max-width: #{breakpoint(sm)}) { + .prgTabSwitch { + height: auto; + padding: 4px 8px; + gap: 3px; + } + + .prgTabSwitch [class*="ToggleItem"] { + height: 50px; + font: 500 var(--font-dm-m); + } + + .prgTabSwitch [class*="ToggleItem"]:hover { + height: 54px; + } + + .prgTabSwitch [class*="OpenToggleItem"] { + height: 54px; + } + + .tabContentLayout { + flex-direction: column; + gap: 1rem; + } + + .tabContentLayoutReverse { + flex-direction: column; + } + + .tabTextArea { + display: contents; + } + + .tabTextArea > *:nth-child(1) { + order: 0; + } + + .tabTextArea > *:nth-child(2) { + order: 1; + } + + .tabTextArea > *:nth-child(3) { + order: 3; + } + + .tabImageArea { + width: 100%; + order: 2; + } + + .tabContentContainer .Subheading { + padding: 0; + } + + .tabContentContainer { + min-height: auto; + } + + .textCenter { + padding-inline: 0.5rem; + font: var(--font-dm-m); + } + + .TextContainer { + padding: 0.5rem; + } + + .headingWithLines { + margin-inline: -0.5rem; + } +} + +.prgTabSwitch > * > * { + padding: 0; + margin: 0; +} + +.prgTabSwitch > * > * > * { + padding: 0; + margin: 0; +} + +.prgTabSwitch [class*="OpenToggleItem"] { + background: var(--primary-color); + border: 2px solid var(--black); + height: 70px; + color: var(--black); +} + +.tabContentContainer { + margin-top: 0.5rem; + min-height: 359px; + display: flex; + align-items: center; + justify-content: center; +} + +.tabContentLayout { + display: flex; + gap: 2rem; + align-items: center; + justify-content: center; + flex-wrap: wrap; +} + +.tabTextArea { + flex: 1; + min-width: 0; + overflow-wrap: break-word; +} + +.tabImageArea { + flex-shrink: 0; + width: 40%; +} + +.tabImage { + width: 100%; + height: auto; + max-height: 200px; + object-fit: contain; + display: block; +} + .textColumns { box-sizing: border-box; padding-inline: 32px; @@ -171,15 +290,12 @@ } } -.textCenter { - text-align: center; - padding-inline: 2em; -} - .pdfButton { display: inline-flex; align-items: center; + justify-content: center; gap: 10px; + width: 304px; padding: 6px 22px !important; border: 2px solid var(--black, #000); @@ -207,8 +323,7 @@ } .label { - font: var(--font-dm-m, inherit); - line-height: var(--font-line-m, 1.3); + font: var(--font-dm-l); white-space: nowrap; color: var(--primary-color, #000); } @@ -245,6 +360,8 @@ border-radius: .8em; text-align: center; height: 100%; + display: flex; + flex-direction: column; } .BoardCardInfoAreaMobile { @@ -254,6 +371,8 @@ text-align: center; height: 100%; width: 100%; + display: flex; + flex-direction: column; } .BoardCardMobile { @@ -276,12 +395,18 @@ font-size: 1.2rem; color: var(--primary-color); padding-top: .2rem; + padding-bottom: 1rem; } .Profession { - padding-top: .2rem; + flex: 1; + display: flex; + align-items: center; + justify-content: center; padding-bottom: .2rem; - + text-align: center; + font: var(--font-dm-l); + color: var(--neutral); } .NameMobile { @@ -295,12 +420,18 @@ font-size: 1.2rem; color: var(--primary-color); padding-top: .2rem; + padding-bottom: 1rem; } .ProfessionMobile { - padding-top: .2rem; + flex: 1; + display: flex; + align-items: center; + justify-content: center; padding-bottom: .2rem; - font-size: .8rem; + text-align: center; + font: var(--font-dm-l); + color: var(--neutral); } .BoardCardContainer { @@ -365,4 +496,5 @@ .registryInfo { text-align: center; white-space: pre-line; + font: var(--font-dm-l); } \ No newline at end of file diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx index 8a51adcf7..613a8be81 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx @@ -136,11 +136,13 @@ const PRGPage = () => { return (
- +
+ +
prgDeveloper Date: Mon, 29 Jun 2026 15:07:00 +0300 Subject: [PATCH 04/11] images for tabs on smaller screens --- .../preparedPages/PRGPage/ui/PRGPage.module.scss | 7 +++++++ .../src/preparedPages/PRGPage/ui/PRGPage.tsx | 13 +++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index ef6249617..1f5ae1967 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -219,6 +219,7 @@ .headingWithLines { margin-inline: -0.5rem; } + } .prgTabSwitch > * > * { @@ -231,6 +232,12 @@ margin: 0; } +.tabIcon { + height: 100%; + max-width: 100%; + object-fit: contain; +} + .prgTabSwitch [class*="OpenToggleItem"] { background: var(--primary-color); border: 2px solid var(--black); diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx index 613a8be81..ec9c96ddc 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx @@ -129,9 +129,18 @@ const PRGPage = () => { type: CustomSwitchItems.ToggleItem, isOpen: activeTab === tab, onOpen: () => setActiveTab(tab), - children:

{t(tabTranslationKeys[tab])}

, + children: isMobileSize ? ( + /* eslint-disable-next-line @next/next/no-img-element */ + {t(tabTranslationKeys[tab])} + ) : ( +

{t(tabTranslationKeys[tab])}

+ ), })), - [activeTab, t], + [activeTab, t, isMobileSize], ); return ( From eb1f3d75f6a160050679b0a334424441f66cf441 Mon Sep 17 00:00:00 2001 From: Casimir43 Date: Fri, 3 Jul 2026 19:05:43 +0300 Subject: [PATCH 05/11] global var --- .../src/preparedPages/PRGPage/ui/PRGPage.module.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index 1f5ae1967..6b0276139 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -1,6 +1,6 @@ .Container { margin-inline: auto; - padding-inline: 16px; + padding-inline: var(--spacer300); font: var(--font-dm-m) !important; @media (min-width: breakpoint(md)) { @@ -493,10 +493,10 @@ .teamButton { background: var(--primary-color); - color: black; + color: var(--black); .label { - color: black; + color: var(--black); } } From afdcbc989b767762b4cf8de721074b6a4a85d4d4 Mon Sep 17 00:00:00 2001 From: Casimir43 Date: Mon, 6 Jul 2026 19:23:23 +0300 Subject: [PATCH 06/11] compact cscc with placeholders and mixins --- .../PRGPage/ui/PRGPage.module.scss | 287 ++++++++---------- 1 file changed, 135 insertions(+), 152 deletions(-) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index 6b0276139..72d8c8d08 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -1,3 +1,39 @@ +%flexColumn { + display: flex; + flex-direction: column; +} + +%headingBase { + font-family: var(--font-family-title); + font-size: clamp(1.5rem, 4vw, var(--font-size-5xl)); + line-height: var(--font-line-5xl); + color: var(--primary-color); + text-align: center; + padding-inline: 1rem; + + @media (max-width: #{breakpoint(sm)}) { + font-size: 1.5rem; + } +} + +%boardCardBase { + @extend %flexColumn; + border: 2px solid var(--primary-color); +} + +%boardInfoBase { + @extend %flexColumn; + text-align: center; + height: 100%; +} + +@mixin jobShared { + font-size: 1.2rem; + color: var(--primary-color); + padding-top: .2rem; + padding-bottom: 1rem; +} + .Container { margin-inline: auto; padding-inline: var(--spacer300); @@ -41,18 +77,8 @@ } .Subheading { - font-family: var(--font-family-title); - font-size: clamp(1.5rem, 4vw, var(--font-size-5xl)); - line-height: var(--font-line-5xl); - color: var(--primary-color); - text-align: center; - padding-top: 1rem; - padding-bottom: 1rem; - padding-inline: 1rem; - - @media (max-width: #{breakpoint(sm)}) { - font-size: 1.5rem; - } + @extend %headingBase; + padding: 1rem; } .prgTabSwitch.prgTabSwitch { @@ -98,6 +124,19 @@ min-width: 0; } +.prgTabSwitch > * > *, +.prgTabSwitch > * > * > * { + padding: 0; + margin: 0; +} + +.prgTabSwitch [class*="OpenToggleItem"] { + background: var(--primary-color); + border: 2px solid var(--black); + height: 70px; + color: var(--black); +} + .tabContentLayoutReverse { flex-direction: row-reverse; } @@ -111,8 +150,7 @@ .headingWithLines { position: relative; text-align: center; - padding-top: 1rem; - padding-bottom: 1rem; + padding-block: 1rem; margin-inline: -1rem; } @@ -137,99 +175,7 @@ } .headingWithLinesText { - font-family: var(--font-family-title); - font-size: clamp(1.5rem, 4vw, var(--font-size-5xl)); - line-height: var(--font-line-5xl); - color: var(--primary-color); - text-align: center; - padding-inline: 1rem; - - @media (max-width: #{breakpoint(sm)}) { - font-size: 1.5rem; - } -} - -@media (max-width: #{breakpoint(sm)}) { - .prgTabSwitch { - height: auto; - padding: 4px 8px; - gap: 3px; - } - - .prgTabSwitch [class*="ToggleItem"] { - height: 50px; - font: 500 var(--font-dm-m); - } - - .prgTabSwitch [class*="ToggleItem"]:hover { - height: 54px; - } - - .prgTabSwitch [class*="OpenToggleItem"] { - height: 54px; - } - - .tabContentLayout { - flex-direction: column; - gap: 1rem; - } - - .tabContentLayoutReverse { - flex-direction: column; - } - - .tabTextArea { - display: contents; - } - - .tabTextArea > *:nth-child(1) { - order: 0; - } - - .tabTextArea > *:nth-child(2) { - order: 1; - } - - .tabTextArea > *:nth-child(3) { - order: 3; - } - - .tabImageArea { - width: 100%; - order: 2; - } - - .tabContentContainer .Subheading { - padding: 0; - } - - .tabContentContainer { - min-height: auto; - } - - .textCenter { - padding-inline: 0.5rem; - font: var(--font-dm-m); - } - - .TextContainer { - padding: 0.5rem; - } - - .headingWithLines { - margin-inline: -0.5rem; - } - -} - -.prgTabSwitch > * > * { - padding: 0; - margin: 0; -} - -.prgTabSwitch > * > * > * { - padding: 0; - margin: 0; + @extend %headingBase; } .tabIcon { @@ -238,13 +184,6 @@ object-fit: contain; } -.prgTabSwitch [class*="OpenToggleItem"] { - background: var(--primary-color); - border: 2px solid var(--black); - height: 70px; - color: var(--black); -} - .tabContentContainer { margin-top: 0.5rem; min-height: 359px; @@ -303,7 +242,6 @@ justify-content: center; gap: 10px; width: 304px; - padding: 6px 22px !important; border: 2px solid var(--black, #000); border-radius: 2em; @@ -355,37 +293,27 @@ } .BoardCard { - display: flex; - flex-direction: column; - border: 2px solid var(--primary-color); + @extend %boardCardBase; border-radius: .8em; width: calc(33% - 1.333rem); } .BoardCardInfoArea { + @extend %boardInfoBase; outline: 2px solid var(--primary-color); border-radius: .8em; - text-align: center; - height: 100%; - display: flex; - flex-direction: column; } .BoardCardInfoAreaMobile { + @extend %boardInfoBase; outline: 1px solid var(--primary-color); border-bottom-right-radius: .6em; border-bottom-left-radius: .6em; - text-align: center; - height: 100%; width: 100%; - display: flex; - flex-direction: column; } .BoardCardMobile { - display: flex; - flex-direction: column; - border: 2px solid var(--primary-color); + @extend %boardCardBase; border-radius: .6em; width: 100%; align-items: center; @@ -399,13 +327,11 @@ .Job { font: var(--font-sw-m); - font-size: 1.2rem; - color: var(--primary-color); - padding-top: .2rem; - padding-bottom: 1rem; + @include jobShared; } -.Profession { +.Profession, +.ProfessionMobile { flex: 1; display: flex; align-items: center; @@ -424,21 +350,7 @@ .JobMobile { font: var(--font-sw-s); - font-size: 1.2rem; - color: var(--primary-color); - padding-top: .2rem; - padding-bottom: 1rem; -} - -.ProfessionMobile { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - padding-bottom: .2rem; - text-align: center; - font: var(--font-dm-l); - color: var(--neutral); + @include jobShared; } .BoardCardContainer { @@ -469,8 +381,7 @@ } .BoardCardMobileContainer { - display: flex; - flex-direction: column; + @extend %flexColumn; gap: 1rem; width: 100%; } @@ -504,4 +415,76 @@ text-align: center; white-space: pre-line; font: var(--font-dm-l); -} \ No newline at end of file +} + +@media (max-width: #{breakpoint(sm)}) { + .prgTabSwitch { + height: auto; + padding: 4px 8px; + gap: 3px; + } + + .prgTabSwitch [class*="ToggleItem"] { + height: 50px; + font: 500 var(--font-dm-m); + } + + .prgTabSwitch [class*="ToggleItem"]:hover { + height: 54px; + } + + .prgTabSwitch [class*="OpenToggleItem"] { + height: 54px; + } + + .tabContentLayout { + flex-direction: column; + gap: 1rem; + } + + .tabContentLayoutReverse { + flex-direction: column; + } + + .tabTextArea { + display: contents; + } + + .tabTextArea > *:nth-child(1) { + order: 0; + } + + .tabTextArea > *:nth-child(2) { + order: 1; + } + + .tabTextArea > *:nth-child(3) { + order: 3; + } + + .tabImageArea { + width: 100%; + order: 2; + } + + .tabContentContainer .Subheading { + padding: 0; + } + + .tabContentContainer { + min-height: auto; + } + + .textCenter { + padding-inline: 0.5rem; + font: var(--font-dm-m); + } + + .TextContainer { + padding: 0.5rem; + } + + .headingWithLines { + margin-inline: -0.5rem; + } +} From 616357e703664b4eaf83942c9f2d019a2b6add82 Mon Sep 17 00:00:00 2001 From: Casimir43 Date: Wed, 8 Jul 2026 17:02:20 +0300 Subject: [PATCH 07/11] removed dead css classes and fixed breakinpoints --- .../PRGPage/ui/PRGPage.module.scss | 62 +------------------ 1 file changed, 2 insertions(+), 60 deletions(-) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index 72d8c8d08..cf2aed261 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -11,7 +11,7 @@ text-align: center; padding-inline: 1rem; - @media (max-width: #{breakpoint(sm)}) { + @media (max-width: breakpoint(sm)) { font-size: 1.5rem; } } @@ -62,11 +62,6 @@ width: 100%; } -.HeaderLine { - display: flex; - justify-content: space-between; -} - .TextContainer { margin-top: 2rem; border-radius: var(--corner-radius-web); @@ -219,23 +214,6 @@ display: block; } -.textColumns { - box-sizing: border-box; - padding-inline: 32px; - column-count: 1; - column-gap: 24px; - column-fill: balance; - hyphens: auto; - overflow-wrap: break-word; - padding-bottom: 1em; -} - -@media (min-width: #{breakpoint(md)}) { - .textColumns { - column-count: 2; - } -} - .pdfButton { display: inline-flex; align-items: center; @@ -279,12 +257,6 @@ height: 15px; } -.icon { - display: inline-block; - width: 15px; - height: 15px; -} - .ButtonBlock { display: flex; justify-content: center; @@ -362,46 +334,16 @@ padding-inline: 2rem; } -.BoardCardHeader { - display: flex; - justify-content: space-between; - align-items: center; -} - -.MeetBoard { - padding-top: 1rem !important; - color: var(--primary-color) !important; - text-align: center; - display: block; - width: 100%; -} - -.SeeBoard { - padding-top: 2rem; -} - .BoardCardMobileContainer { @extend %flexColumn; gap: 1rem; width: 100%; } -.Underline { - &:hover { - text-decoration: underline !important; - text-underline-offset: 2px; - text-decoration-thickness: 1.5px; - } -} - .MarginBottom { margin-bottom: 2rem; } -.bold { - font-weight: bold; -} - .teamButton { background: var(--primary-color); color: var(--black); @@ -417,7 +359,7 @@ font: var(--font-dm-l); } -@media (max-width: #{breakpoint(sm)}) { +@media (max-width: breakpoint(sm)) { .prgTabSwitch { height: auto; padding: 4px 8px; From 61e3fa07c14942339a4d5986f952e488ca600e03 Mon Sep 17 00:00:00 2001 From: Casimir43 Date: Fri, 10 Jul 2026 17:35:51 +0300 Subject: [PATCH 08/11] fixed duplicate boardmember rendering --- .../src/preparedPages/PRGPage/ui/PRGPage.tsx | 80 +++++++------------ 1 file changed, 29 insertions(+), 51 deletions(-) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx index ec9c96ddc..e690874ba 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx @@ -84,6 +84,22 @@ const Boardcard = (props: BoardCardProps) => { ); }; +const BOARD_MEMBERS = [ + { + picture: Helena, + name: 'Helena Pavloff-Pelkonen', + job: 'helena-job', + profession: 'helena-profession', + }, + { picture: Esa, name: 'Esa Pavloff-Pelkonen', job: 'esa-job', profession: 'esa-profession' }, + { + picture: Emmi_Irina, + name: 'Emmi-Irina Pavloff', + job: 'emmi-irina-job', + profession: 'emmi-irina-profession', + }, +] as const; + const DOCUMENT_TABS = ['action-plan', 'activity-report', 'bylaws'] as const; type DocumentTab = (typeof DOCUMENT_TABS)[number]; @@ -162,61 +178,23 @@ const PRGPage = () => {
{t('prg-board')}
- {!isMobileSize && !isTabletSize ? ( -
- - - -
- ) : ( -
- - +
+ {BOARD_MEMBERS.map((member) => ( -
- )} + ))} +
Date: Tue, 14 Jul 2026 17:08:29 +0300 Subject: [PATCH 09/11] fix: profession text exceed card border --- .../src/preparedPages/PRGPage/ui/PRGPage.module.scss | 4 ++++ .../src/preparedPages/PRGPage/ui/PRGPage.tsx | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index cf2aed261..7dff7220f 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -274,6 +274,7 @@ @extend %boardInfoBase; outline: 2px solid var(--primary-color); border-radius: .8em; + min-width: 0; } .BoardCardInfoAreaMobile { @@ -282,6 +283,7 @@ border-bottom-right-radius: .6em; border-bottom-left-radius: .6em; width: 100%; + min-width: 0; } .BoardCardMobile { @@ -312,6 +314,8 @@ text-align: center; font: var(--font-dm-l); color: var(--neutral); + overflow-wrap: break-word; + word-break: break-word; } .NameMobile { diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx index e690874ba..62d4acc07 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.tsx @@ -24,7 +24,9 @@ import type { ToggleItem } from '@/shared/ui/CustomSwitch'; type PrgT = TFunction<'prg'>; interface CheckPdfButtonProps { + /** External URL to the PDF document. */ link: string; + /** Translation function for button label. */ t: PrgT; } @@ -44,11 +46,17 @@ const CheckPdfButton = (checkPdfButtonProps: CheckPdfButtonProps) => ( ); interface BoardCardProps { + /** Board member portrait image. */ picture: StaticImageData; + /** Full name of the board member. */ name: string; + /** Translation key for the member's job title. */ job: string; + /** Translation key for the member's profession. */ profession: string; + /** Translation function for resolving job/profession labels. */ t: PrgT; + /** When true, renders the compact mobile layout. */ isMobileSize: boolean; } From 508da33b88fc2b177f45fa7ee5e7f91a16b1d8f1 Mon Sep 17 00:00:00 2001 From: Casimir43 Date: Mon, 20 Jul 2026 14:03:48 +0300 Subject: [PATCH 10/11] style(PRGPg): update tab image to 30% width, add spacing and font-size to registry details --- .../src/preparedPages/PRGPage/ui/PRGPage.module.scss | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss index 7dff7220f..54b25e5ed 100644 --- a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.module.scss @@ -203,7 +203,7 @@ .tabImageArea { flex-shrink: 0; - width: 40%; + width: 30%; } .tabImage { @@ -361,6 +361,8 @@ text-align: center; white-space: pre-line; font: var(--font-dm-l); + font-size: 30px; + margin-top: 1rem; } @media (max-width: breakpoint(sm)) { @@ -426,6 +428,10 @@ font: var(--font-dm-m); } + .registryInfo { + font: var(--font-dm-m); + } + .TextContainer { padding: 0.5rem; } From e3d463f3c625df6e656310afae37b16fe55eeca0 Mon Sep 17 00:00:00 2001 From: Casimir43 Date: Mon, 20 Jul 2026 15:38:20 +0300 Subject: [PATCH 11/11] test(PRGPg): add board member rendering and team link tests --- .../preparedPages/PRGPage/ui/PRGPage.test.tsx | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.test.tsx diff --git a/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.test.tsx b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.test.tsx new file mode 100644 index 000000000..92df96720 --- /dev/null +++ b/frontend-next-migration/src/preparedPages/PRGPage/ui/PRGPage.test.tsx @@ -0,0 +1,76 @@ +import { render, screen } from '@testing-library/react'; +import PRGPage from './PRGPage'; + +jest.mock('@/shared/i18n', () => ({ + useClientTranslation: jest.fn(), +})); + +jest.mock('@/shared/lib/hooks/useSizes', () => ({ + __esModule: true, + default: () => ({ isMobileSize: false, isTabletSize: false }), +})); + +jest.mock('@/shared/ui/CustomSwitch', () => ({ + CustomSwitch: ({ elements }: { elements: { children: React.ReactNode }[] }) => ( +
+ {elements.map((el, i) => ( + {el.children} + ))} +
+ ), + CustomSwitchItems: { ToggleItem: 'ToggleItem' }, +})); + +jest.mock('@/shared/ui/AppLink/AppLink', () => ({ + AppLink: ({ + children, + to, + isExternal: _isExternal, + ...props + }: { + children: React.ReactNode; + to: string; + isExternal?: boolean; + [key: string]: unknown; + }) => ( + + {children} + + ), +})); + +jest.mock('@/shared/ui/PageTitle', () => ({ + PageTitle: ({ titleText }: { titleText: string }) =>

{titleText}

, +})); + +jest.mock('@fortawesome/react-fontawesome', () => ({ + FontAwesomeIcon: () => , +})); + +import { useClientTranslation } from '@/shared/i18n'; + +describe('PRGPage', () => { + beforeEach(() => { + (useClientTranslation as jest.Mock).mockReturnValue({ + t: (key: string) => key, + }); + }); + + it('renders all board members', () => { + render(); + + expect(screen.getByText('Helena Pavloff-Pelkonen')).toBeInTheDocument(); + expect(screen.getByText('Esa Pavloff-Pelkonen')).toBeInTheDocument(); + expect(screen.getByText('Emmi-Irina Pavloff')).toBeInTheDocument(); + }); + + it('renders team link pointing to /team', () => { + render(); + + const teamLink = screen.getByText('alt-zone-team').closest('a'); + expect(teamLink).toHaveAttribute('href', '/team'); + }); +});