From 6477bde98e12c55df1366782866de9cdaef48c28 Mon Sep 17 00:00:00 2001 From: mortezaei Date: Thu, 27 Aug 2026 15:08:53 +0330 Subject: [PATCH] fix images --- src/app/intro/intro-client.tsx | 195 ++++++------- src/app/questions-list/sections-request.tsx | 262 +---------------- .../Componentes/navigation-button.tsx | 57 +--- src/components/Componentes/terms-sheet.tsx | 273 ++++++++++++++++++ src/components/Componentes/ui-icon.tsx | 42 +-- src/icons.tsx | 1 + src/translations/locales/ar.json | 69 ++++- src/translations/locales/az.json | 69 ++++- src/translations/locales/bn.json | 69 ++++- src/translations/locales/da.json | 69 ++++- src/translations/locales/de.json | 69 ++++- src/translations/locales/en.json | 68 ++++- src/translations/locales/es.json | 69 ++++- src/translations/locales/fa.json | 68 ++++- src/translations/locales/fr.json | 69 ++++- src/translations/locales/gu.json | 71 ++++- src/translations/locales/ha.json | 69 ++++- src/translations/locales/he.json | 68 ++++- src/translations/locales/hi.json | 69 ++++- src/translations/locales/id.json | 68 ++++- src/translations/locales/ks.json | 68 ++++- src/translations/locales/pt.json | 68 ++++- src/translations/locales/ru.json | 68 ++++- src/translations/locales/sw.json | 68 ++++- src/translations/locales/tg.json | 68 ++++- src/translations/locales/tr.json | 68 ++++- src/translations/locales/ul.json | 68 ++++- src/translations/locales/ur.json | 68 ++++- src/translations/locales/uz.json | 68 ++++- src/translations/locales/zh.json | 69 ++++- 30 files changed, 2024 insertions(+), 451 deletions(-) create mode 100644 src/components/Componentes/terms-sheet.tsx diff --git a/src/app/intro/intro-client.tsx b/src/app/intro/intro-client.tsx index 3844f63..e5c8e4a 100644 --- a/src/app/intro/intro-client.tsx +++ b/src/app/intro/intro-client.tsx @@ -25,6 +25,8 @@ import { getSubmitPath } from "@/lib/get-submit-path"; import { localizePath } from "@/translations/config"; import { useI18n } from "@/translations/provider"; +import { PageBackground } from "@/components/Componentes/page-background"; + export default function IntroClient() { const router = useRouter(); const { dictionary: t, locale } = useI18n(); @@ -126,121 +128,100 @@ export default function IntroClient() { return ( <> -
- -
-
- {t["heavenly -

- {t["A Path to Heavenly Marriage"]} -

-

- { - t[ - 'We have come together with the goal of creating a secure and confidential path for "permanent marriage" among Muslims' - ] - } -

-
-
-
- -
-

120

-

- {t["user profiles"]} -

-
+ + + + +
+
+ {t["heavenly +

+ {t["A Path to Heavenly Marriage"]} +

+

+ { + t[ + 'We have come together with the goal of creating a secure and confidential path for "permanent marriage" among Muslims' + ] + } +

+
+
+
+ +
+

120

+

+ {t["user profiles"]} +

-
- -
-

14

-

- {t["matches"]} -

-
+
+
+ +
+

14

+

+ {t["matches"]} +

-
- -
-

14

-

- {t["marriages"]} -

-
+
+
+ +
+

14

+

+ {t["marriages"]} +

- {SHOW_INTRO_VIDEOS && ( - <> -
setIsPlayerOpen(true)} - > - -
- -
- - setIsPlayerOpen(false)} - videoUrl={config?.intro_video_url} - /> - - )} -
+
+ {SHOW_INTRO_VIDEOS && ( + <>
setIsPlayerOpen(true)} > - + +
+
+ + setIsPlayerOpen(false)} + videoUrl={config?.intro_video_url} + /> + + )} +
+
+
-
-
+
+
void; }) { - const { dictionary: t } = useI18n(); const [hasSeenSheet, setHasSeenSheet] = useState(true); const [isAutoOpenDismissed, setIsAutoOpenDismissed] = useState(false); @@ -255,66 +65,10 @@ export default function SectionsRequest({ controlledOnClose?.(); }; - const termsTitle = t["terms & conditions"] || "Terms & Conditions"; - const gotItLabel = t["Got it"] || "Got it"; - return ( - ( - - - {termsTitle} - - - - )} - description={ -
- {TERMS_SECTIONS.map((section, idx) => ( -
-

- {(t as Record)[section.category] || section.category} -

-
    - {section.items.map((item, itemIdx) => { - const translatedTitle = - (t as Record)[item.title] || item.title; - const translatedDesc = - (t as Record)[item.description] || - item.description; - return ( -
  • - - {translatedTitle}:{" "} - - - {translatedDesc} - -
  • - ); - })} -
-
- ))} -
- } - buttons={({ close }) => ( - - )} onClose={handleClose} - className="text-start" /> ); } diff --git a/src/components/Componentes/navigation-button.tsx b/src/components/Componentes/navigation-button.tsx index 4eac4b3..cc1bc6e 100644 --- a/src/components/Componentes/navigation-button.tsx +++ b/src/components/Componentes/navigation-button.tsx @@ -12,6 +12,7 @@ import HelpModal from "./help-modal"; import InformationSheet from "./information-sheet"; import { hasSupportAccess } from "./support-access"; import SupportSheet from "./support-sheet"; +import TermsSheet from "./terms-sheet"; import { UiIcon } from "./ui-icon"; type NavigationButtonIcon = @@ -21,6 +22,8 @@ type NavigationButtonIcon = | "exit" | "info" | "document" + | "terms" + | "rules" | "subscription" | "consultation" | "more"; @@ -61,7 +64,6 @@ export function NavigationButton({ const [isHelpOpen, setIsHelpOpen] = useState(false); const [isSupportOpen, setIsSupportOpen] = useState(false); const [isRulesOpen, setIsRulesOpen] = useState(false); - const [isAboutOpen, setIsAboutOpen] = useState(false); const [isSubscriptionInfoOpen, setIsSubscriptionInfoOpen] = useState(false); const [isSubscriptionLoading, setIsSubscriptionLoading] = useState(false); const [isDropdownOpen, setIsDropdownOpen] = useState(false); @@ -249,6 +251,8 @@ export function NavigationButton({ /> ); case "document": + case "terms": + case "rules": return ( {t["Support"] || "Support"} - -
)} @@ -377,35 +369,10 @@ export function NavigationButton({ onClose={() => setIsSupportOpen(false)} /> */} - {isRulesOpen && ( - setIsRulesOpen(false)} - /> - )} - - {isAboutOpen && ( - setIsAboutOpen(false)} - /> - )} + setIsRulesOpen(false)} + /> {renderSubscriptionModal()} diff --git a/src/components/Componentes/terms-sheet.tsx b/src/components/Componentes/terms-sheet.tsx new file mode 100644 index 0000000..9732eb2 --- /dev/null +++ b/src/components/Componentes/terms-sheet.tsx @@ -0,0 +1,273 @@ +"use client"; + +import { Ic } from "@/icons"; +import Button from "@/components/Componentes/button"; +import InformationSheet from "@/components/Componentes/information-sheet"; +import { useI18n } from "@/translations/provider"; + +export type TermItem = { + title: string; + description: string; +}; + +export type TermSection = { + category: string; + items: TermItem[]; +}; + +export const TERMS_SECTIONS: TermSection[] = [ + { + category: "1. Acceptance of Rules and Platform Goal", + items: [ + { + title: "Full Acceptance of Agreement", + description: + "Registration and use of any part of the application means reading and fully accepting all rules. If you do not agree, you must refrain from further use.", + }, + { + title: "Changes and Updates", + description: + "The application reserves the right to edit the rules when necessary, and your continued use will constitute acceptance of the new changes.", + }, + { + title: "Exclusive Goal of the Application", + description: + "This platform is designed solely for matchmaking and permanent marriage. Use with the purpose of dating, temporary relationships, or entertainment is prohibited.", + }, + { + title: "Age and Legal Capacity Requirement", + description: + "Use of services is allowed only for individuals over 18 years of age who have the legal and religious capacity for marriage.", + }, + ], + }, + { + category: "2. User Account, Security, and Authentication", + items: [ + { + title: "Accuracy of Personal Information", + description: + "The user is obliged to enter all identity, occupational, educational, and marital status information completely accurately and honestly.", + }, + { + title: "Prohibition of Fake Accounts", + description: + "Creating an account using the identity, name, mobile number, or photos of others, as well as creating multiple user accounts, is a serious violation.", + }, + { + title: "Maintaining Account Security", + description: + "The responsibility for maintaining the confidentiality of the password and login code lies with the user, and transferring or renting the account to another person is prohibited.", + }, + { + title: "Introducing a Trusted Person", + description: + "To enhance security, users can introduce a trusted family member. This information is used strictly for security and urgent cases.", + }, + ], + }, + { + category: "3. Communications, Ethics, and User Behavior", + items: [ + { + title: "Mutual Respect", + description: + "Conversations must be ethical and purposeful. Sending offensive, sexual, obscene, threatening, or harassing messages is strictly prohibited.", + }, + { + title: "Respecting Others' Privacy", + description: + "Saving, sending, or publishing screenshots of conversations and photos of other users outside the application is a violation of privacy.", + }, + { + title: "Absolute Prohibition of Financial Requests", + description: + "Requesting money, loans, gift cards, cryptocurrency, or any financial benefit from other users under any pretext is prohibited.", + }, + { + title: "Prohibition of Commercial Activity", + description: + "Any advertising, marketing, selling goods, or raising capital within the application environment is considered a violation.", + }, + { + title: "Respectful End of Conversation", + description: + "If the other party does not wish to continue the communication, the user is obliged to respect their decision and refrain from pursuing or causing harassment.", + }, + ], + }, + { + category: "4. Privacy, Data, and Intellectual Property", + items: [ + { + title: "Personal Information Protection", + description: + "The application is committed to protecting your sensitive information in accordance with the privacy policy and will not sell it to third parties without permission.", + }, + { + title: "Public Profile Display", + description: + "By completing the profile, the user consents to their public information being displayed to other qualified users for service delivery.", + }, + { + title: "Account Deletion Rules", + description: + "Upon requesting account deletion, your information is removed from public view, but necessary data for legal and security requirements will remain archived in the system.", + }, + { + title: "Intellectual Property Rights", + description: + "All rights to software codes, design, database, and brand name belong to the platform, and any copying or scraping is prohibited.", + }, + ], + }, + { + category: "5. Financial Terms and Subscriptions", + items: [ + { + title: "Nature of Paid Services", + description: + "Payment is solely for using premium features and software infrastructure and does not provide any guarantee for marriage or finding a spouse.", + }, + { + title: "Refund Policy", + description: + "Paid fees are non-refundable, except in definitive cases of system technical errors.", + }, + { + title: "Disclaimer for External Transactions", + description: + "The application holds no responsibility for financial transactions between users or outside the application's official payment gateway.", + }, + ], + }, + { + category: "6. Monitoring, Violations, and Legal Prosecution", + items: [ + { + title: "Confidential Reporting", + description: + "Users must report violations, suspicious behavior, or financial requests through the report violation option. The identity of the reporter remains confidential.", + }, + { + title: "Authorities of Application Moderators", + description: + "The platform reserves the right to block, restrict, or suspend the user account without prior notice if any violation or breach of rules is detected.", + }, + { + title: "Cooperation with Law Enforcement", + description: + "In the event of cybercrimes, fraud, or threats, the application will refer the necessary information to judicial and law enforcement authorities.", + }, + { + title: "Dispute Resolution", + description: + "Any legal dispute must first be pursued through application support. If no agreement is reached, the competent authority will be the courts of the city where the application is registered.", + }, + ], + }, + { + category: "7. Disclaimer and In-Person Meetings", + items: [ + { + title: "Role of the Application", + description: + "This platform is only a facilitator for initial communication and does not replace family background research, counseling, and pre-marital investigations.", + }, + { + title: "Responsibility for Accuracy of Claims", + description: + "Accurate verification of users' claims regarding their financial, occupational, marital, and health status is the responsibility of the user and their family.", + }, + { + title: "Responsibility for In-Person Meetings", + description: + "Planning and deciding to meet in person is entirely the responsibility of the users, and the application assumes no liability for any incidents or potential damages.", + }, + { + title: "Safety Recommendations in Meetings", + description: + "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.", + }, + { + title: "Force Majeure Conditions", + description: + "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.", + }, + ], + }, +]; + +export type TermsSheetProps = { + isOpen?: boolean; + onClose?: () => void; +}; + +export function TermsSheet({ isOpen, onClose }: TermsSheetProps) { + const { dictionary: t } = useI18n(); + + const termsTitle = t["terms & conditions"] || "Terms & Conditions"; + const gotItLabel = t["Got it"] || "Got it"; + + return ( + ( + + + {termsTitle} + + + + )} + description={ +
+ {TERMS_SECTIONS.map((section, idx) => ( +
+

+ {(t as Record)[section.category] || section.category} +

+
    + {section.items.map((item, itemIdx) => { + const translatedTitle = + (t as Record)[item.title] || item.title; + const translatedDesc = + (t as Record)[item.description] || + item.description; + return ( +
  • + + {translatedTitle}:{" "} + + + {translatedDesc} + +
  • + ); + })} +
+
+ ))} +
+ } + buttons={({ close }) => ( + + )} + onClose={onClose} + className="text-start" + /> + ); +} + +export default TermsSheet; diff --git a/src/components/Componentes/ui-icon.tsx b/src/components/Componentes/ui-icon.tsx index c519bb0..160f902 100644 --- a/src/components/Componentes/ui-icon.tsx +++ b/src/components/Componentes/ui-icon.tsx @@ -17,6 +17,8 @@ export type UiIconName = | "support" | "info" | "document" + | "terms" + | "rules" | "question" | "person" | "education" @@ -88,28 +90,26 @@ export function UiIcon({ name, ...props }: UiIconProps) { ); case "document": + case "terms": + case "rules": return ( -