@sudobility/building_blocks 0.0.18 → 0.0.21

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.
@@ -0,0 +1,149 @@
1
+ import React, { type ReactNode, type ComponentType } from 'react';
2
+ /**
3
+ * Configuration for a text section with paragraph content
4
+ */
5
+ export interface TextSectionWithContent {
6
+ /** Section title */
7
+ title: string;
8
+ /** Paragraph content */
9
+ content: string;
10
+ /** Whether content contains HTML that should be rendered */
11
+ isHtml?: boolean;
12
+ }
13
+ /**
14
+ * Configuration for a text section with a list
15
+ */
16
+ export interface TextSectionWithList {
17
+ /** Section title */
18
+ title: string;
19
+ /** Optional description before the list */
20
+ description?: string;
21
+ /** List items */
22
+ items: string[];
23
+ /** Optional additional content after the list */
24
+ additionalContent?: string;
25
+ }
26
+ /**
27
+ * Configuration for a text section with subsections (e.g., "Information You Provide" and "Information Collected Automatically")
28
+ */
29
+ export interface TextSectionWithSubsections {
30
+ /** Section title */
31
+ title: string;
32
+ /** Subsections, each with a title and list items */
33
+ subsections: Array<{
34
+ title: string;
35
+ items: string[];
36
+ }>;
37
+ }
38
+ /**
39
+ * Union type for all section types
40
+ */
41
+ export type TextSection = TextSectionWithContent | TextSectionWithList | TextSectionWithSubsections;
42
+ /**
43
+ * Contact information configuration
44
+ */
45
+ export interface TextPageContactInfo {
46
+ /** Email label (e.g., "Email:") */
47
+ emailLabel: string;
48
+ /** Email address */
49
+ email: string;
50
+ /** Website label (e.g., "Website:") */
51
+ websiteLabel: string;
52
+ /** Website URL */
53
+ websiteUrl: string;
54
+ /** Data Protection Officer label (optional, for privacy pages) */
55
+ dpoLabel?: string;
56
+ /** DPO email (optional, for privacy pages) */
57
+ dpoEmail?: string;
58
+ }
59
+ /**
60
+ * GDPR notice configuration (optional, for privacy pages)
61
+ */
62
+ export interface GdprNotice {
63
+ /** GDPR section title */
64
+ title: string;
65
+ /** GDPR section content */
66
+ content: string;
67
+ }
68
+ /**
69
+ * Contact section configuration
70
+ */
71
+ export interface TextPageContact {
72
+ /** Section title */
73
+ title: string;
74
+ /** Section description */
75
+ description: string;
76
+ /** Whether description contains HTML */
77
+ isHtml?: boolean;
78
+ /** Contact details */
79
+ info: TextPageContactInfo;
80
+ /** Optional GDPR notice (for privacy pages) */
81
+ gdprNotice?: GdprNotice;
82
+ }
83
+ /**
84
+ * All text content for the text page
85
+ */
86
+ export interface TextPageContent {
87
+ /** Page title */
88
+ title: string;
89
+ /** Last updated text (use {{date}} as placeholder for the date) */
90
+ lastUpdated?: string;
91
+ /** All sections in order */
92
+ sections: TextSection[];
93
+ /** Contact information (optional) */
94
+ contact?: TextPageContact;
95
+ }
96
+ /**
97
+ * Props for AppTextPage component
98
+ */
99
+ export interface AppTextPageProps {
100
+ /** All text content (must be provided by consumer) */
101
+ text: TextPageContent;
102
+ /** Current date for "last updated" display */
103
+ lastUpdatedDate?: string;
104
+ /** Optional wrapper component for the page layout */
105
+ PageWrapper?: ComponentType<{
106
+ children: ReactNode;
107
+ }>;
108
+ /** Optional className for the container */
109
+ className?: string;
110
+ }
111
+ /**
112
+ * AppTextPage - A reusable text page component for legal/informational pages
113
+ *
114
+ * Displays a text-heavy page with:
115
+ * - Flexible section structure (content, list, or subsections)
116
+ * - Optional contact information
117
+ * - Optional GDPR notice
118
+ *
119
+ * Use this for Privacy Policy, Terms of Service, Cookie Policy, etc.
120
+ *
121
+ * @example
122
+ * ```tsx
123
+ * <AppTextPage
124
+ * text={{
125
+ * title: "Privacy Policy",
126
+ * lastUpdated: "Last updated: {{date}}",
127
+ * sections: [
128
+ * { title: "Introduction", content: "We respect your privacy..." },
129
+ * { title: "Data We Collect", items: ["Email", "Usage data"] },
130
+ * {
131
+ * title: "Information We Collect",
132
+ * subsections: [
133
+ * { title: "You Provide", items: ["Email", "Name"] },
134
+ * { title: "Automatic", items: ["IP", "Browser"] }
135
+ * ]
136
+ * }
137
+ * ],
138
+ * contact: {
139
+ * title: "Contact",
140
+ * description: "Questions?",
141
+ * info: { emailLabel: "Email:", email: "support@example.com", ... }
142
+ * }
143
+ * }}
144
+ * lastUpdatedDate="January 1, 2025"
145
+ * />
146
+ * ```
147
+ */
148
+ export declare const AppTextPage: React.FC<AppTextPageProps>;
149
+ export default AppTextPage;
@@ -1,6 +1,4 @@
1
1
  export { AppSitemapPage } from './app-sitemap-page';
2
2
  export type { AppSitemapPageProps, SitemapPageText, SitemapSection, SitemapLink, LanguageOption, QuickLink, } from './app-sitemap-page';
3
- export { AppPrivacyPolicyPage } from './app-privacy-policy-page';
4
- export type { AppPrivacyPolicyPageProps, PrivacyPolicyPageText, PrivacySectionWithList, PrivacySectionWithContent, PrivacySubsection, PrivacyContactInfo, } from './app-privacy-policy-page';
5
- export { AppTermsOfServicePage } from './app-terms-of-service-page';
6
- export type { AppTermsOfServicePageProps, TermsOfServicePageText, TermsSectionWithContent, TermsSectionWithList, TermsContactInfo, } from './app-terms-of-service-page';
3
+ export { AppTextPage } from './app-text-page';
4
+ export type { AppTextPageProps, TextPageContent, TextSection, TextSectionWithContent, TextSectionWithList, TextSectionWithSubsections, TextPageContact, TextPageContactInfo, GdprNotice, } from './app-text-page';
package/dist/index.js CHANGED
@@ -4839,129 +4839,20 @@ const AppSitemapPage = ({
4839
4839
  }
4840
4840
  return content;
4841
4841
  };
4842
- const SectionHeading$1 = ({ children }) => /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100 mt-8 mb-4", children });
4843
- const SubsectionHeading = ({ children }) => /* @__PURE__ */ jsx("h3", { className: "text-xl font-semibold text-gray-900 dark:text-gray-100 mt-6 mb-3", children });
4844
- const Paragraph$1 = ({
4845
- children,
4846
- className = ""
4847
- }) => /* @__PURE__ */ jsx("p", { className: `text-gray-600 dark:text-gray-300 mb-6 ${className}`, children });
4848
- const List$1 = ({ items }) => /* @__PURE__ */ jsx("ul", { className: "list-disc list-inside text-gray-600 dark:text-gray-300 mb-6", children: items.map((item, index) => /* @__PURE__ */ jsx("li", { children: item }, index)) });
4849
- const AppPrivacyPolicyPage = ({
4850
- text,
4851
- lastUpdatedDate = (/* @__PURE__ */ new Date()).toLocaleDateString(),
4852
- PageWrapper,
4853
- className
4854
- }) => {
4855
- const content = /* @__PURE__ */ jsxs("div", { className: `max-w-7xl mx-auto px-4 py-12 ${className || ""}`, children: [
4856
- /* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold text-gray-900 dark:text-gray-100 mb-8", children: text.heading }),
4857
- /* @__PURE__ */ jsxs("div", { className: "prose prose-lg max-w-none", children: [
4858
- /* @__PURE__ */ jsxs(Paragraph$1, { className: "mb-6", children: [
4859
- text.lastUpdatedLabel,
4860
- " ",
4861
- lastUpdatedDate
4862
- ] }),
4863
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.introduction.title }),
4864
- /* @__PURE__ */ jsx(Paragraph$1, { children: text.introduction.content }),
4865
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.informationWeCollect.title }),
4866
- /* @__PURE__ */ jsx(SubsectionHeading, { children: text.informationWeCollect.youProvide.title }),
4867
- /* @__PURE__ */ jsx(List$1, { items: text.informationWeCollect.youProvide.items }),
4868
- /* @__PURE__ */ jsx(SubsectionHeading, { children: text.informationWeCollect.automatic.title }),
4869
- /* @__PURE__ */ jsx(List$1, { items: text.informationWeCollect.automatic.items }),
4870
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.howWeUse.title }),
4871
- text.howWeUse.description && /* @__PURE__ */ jsx(Paragraph$1, { className: "mb-4", children: text.howWeUse.description }),
4872
- /* @__PURE__ */ jsx(List$1, { items: text.howWeUse.items }),
4873
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.informationSharing.title }),
4874
- text.informationSharing.description && /* @__PURE__ */ jsx(Paragraph$1, { className: "mb-4", children: text.informationSharing.description }),
4875
- /* @__PURE__ */ jsx(List$1, { items: text.informationSharing.items }),
4876
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.dataSecurity.title }),
4877
- text.dataSecurity.description && /* @__PURE__ */ jsx(Paragraph$1, { className: "mb-4", children: text.dataSecurity.description }),
4878
- /* @__PURE__ */ jsx(List$1, { items: text.dataSecurity.items }),
4879
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.dataRetention.title }),
4880
- /* @__PURE__ */ jsx(Paragraph$1, { children: text.dataRetention.content }),
4881
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.privacyRights.title }),
4882
- text.privacyRights.description && /* @__PURE__ */ jsx(Paragraph$1, { className: "mb-4", children: text.privacyRights.description }),
4883
- /* @__PURE__ */ jsx(List$1, { items: text.privacyRights.items }),
4884
- text.web3Considerations && /* @__PURE__ */ jsxs(Fragment, { children: [
4885
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.web3Considerations.title }),
4886
- text.web3Considerations.description && /* @__PURE__ */ jsx(Paragraph$1, { className: "mb-4", children: text.web3Considerations.description }),
4887
- /* @__PURE__ */ jsx(List$1, { items: text.web3Considerations.items })
4888
- ] }),
4889
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.internationalTransfers.title }),
4890
- /* @__PURE__ */ jsx(Paragraph$1, { children: text.internationalTransfers.content }),
4891
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.childrensPrivacy.title }),
4892
- /* @__PURE__ */ jsx(Paragraph$1, { children: text.childrensPrivacy.content }),
4893
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.cookies.title }),
4894
- /* @__PURE__ */ jsx(Paragraph$1, { children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: text.cookies.content } }) }),
4895
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.changes.title }),
4896
- /* @__PURE__ */ jsx(Paragraph$1, { children: text.changes.content }),
4897
- /* @__PURE__ */ jsx(SectionHeading$1, { children: text.contact.title }),
4898
- /* @__PURE__ */ jsx(Paragraph$1, { children: text.contact.description }),
4899
- /* @__PURE__ */ jsx("div", { className: "bg-gray-50 dark:bg-gray-800 p-4 rounded-lg", children: /* @__PURE__ */ jsxs("p", { className: "text-gray-700 dark:text-gray-300", children: [
4900
- text.contact.info.emailLabel,
4901
- " ",
4902
- /* @__PURE__ */ jsx(
4903
- "a",
4904
- {
4905
- href: `mailto:${text.contact.info.email}`,
4906
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4907
- children: text.contact.info.email
4908
- }
4909
- ),
4910
- /* @__PURE__ */ jsx("br", {}),
4911
- text.contact.info.websiteLabel,
4912
- " ",
4913
- /* @__PURE__ */ jsx(
4914
- "a",
4915
- {
4916
- href: text.contact.info.websiteUrl,
4917
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4918
- children: text.contact.info.websiteUrl
4919
- }
4920
- ),
4921
- /* @__PURE__ */ jsx("br", {}),
4922
- text.contact.info.dpoLabel,
4923
- " ",
4924
- /* @__PURE__ */ jsx(
4925
- "a",
4926
- {
4927
- href: `mailto:${text.contact.info.dpoEmail}`,
4928
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4929
- children: text.contact.info.dpoEmail
4930
- }
4931
- )
4932
- ] }) }),
4933
- /* @__PURE__ */ jsxs("div", { className: "mt-8 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg", children: [
4934
- /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-blue-900 dark:text-blue-200 mb-2", children: text.contact.info.gdprTitle }),
4935
- /* @__PURE__ */ jsxs("p", { className: "text-blue-800 dark:text-blue-300", children: [
4936
- text.contact.info.gdprContent,
4937
- " ",
4938
- /* @__PURE__ */ jsx(
4939
- "a",
4940
- {
4941
- href: `mailto:${text.contact.info.dpoEmail}`,
4942
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4943
- children: text.contact.info.dpoEmail
4944
- }
4945
- )
4946
- ] })
4947
- ] })
4948
- ] })
4949
- ] });
4950
- if (PageWrapper) {
4951
- return /* @__PURE__ */ jsx(PageWrapper, { children: content });
4952
- }
4953
- return content;
4954
- };
4955
4842
  function isSectionWithList(section) {
4956
4843
  return "items" in section && Array.isArray(section.items);
4957
4844
  }
4845
+ function isSectionWithSubsections(section) {
4846
+ return "subsections" in section && Array.isArray(section.subsections);
4847
+ }
4958
4848
  const SectionHeading = ({ children }) => /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100 mt-8 mb-4", children });
4849
+ const SubsectionHeading = ({ children }) => /* @__PURE__ */ jsx("h3", { className: "text-xl font-semibold text-gray-900 dark:text-gray-100 mt-6 mb-3", children });
4959
4850
  const Paragraph = ({
4960
4851
  children,
4961
4852
  className = ""
4962
4853
  }) => /* @__PURE__ */ jsx("p", { className: `text-gray-600 dark:text-gray-300 mb-6 ${className}`, children });
4963
- const List = ({ items }) => /* @__PURE__ */ jsx("ul", { className: "list-disc list-inside text-gray-600 dark:text-gray-300 mb-6", children: items.map((item, index) => /* @__PURE__ */ jsx("li", { children: item }, index)) });
4964
- const AppTermsOfServicePage = ({
4854
+ const List = ({ items }) => /* @__PURE__ */ jsx("ul", { className: "list-disc list-inside text-gray-600 dark:text-gray-300 mb-6 space-y-1", children: items.map((item, index) => /* @__PURE__ */ jsx("li", { dangerouslySetInnerHTML: { __html: item } }, index)) });
4855
+ const AppTextPage = ({
4965
4856
  text,
4966
4857
  lastUpdatedDate = (/* @__PURE__ */ new Date()).toLocaleDateString(),
4967
4858
  PageWrapper,
@@ -4970,45 +4861,90 @@ const AppTermsOfServicePage = ({
4970
4861
  const content = /* @__PURE__ */ jsxs("div", { className: `max-w-7xl mx-auto px-4 py-12 ${className || ""}`, children: [
4971
4862
  /* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold text-gray-900 dark:text-gray-100 mb-8", children: text.title }),
4972
4863
  /* @__PURE__ */ jsxs("div", { className: "prose prose-lg dark:prose-invert max-w-none", children: [
4973
- /* @__PURE__ */ jsx(Paragraph, { className: "mb-6", children: text.lastUpdated.replace("{{date}}", lastUpdatedDate) }),
4864
+ text.lastUpdated && /* @__PURE__ */ jsx(Paragraph, { className: "mb-6", children: text.lastUpdated.replace("{{date}}", lastUpdatedDate) }),
4974
4865
  text.sections.map((section, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
4975
4866
  /* @__PURE__ */ jsx(SectionHeading, { children: section.title }),
4976
- isSectionWithList(section) ? /* @__PURE__ */ jsxs(Fragment, { children: [
4977
- section.description && /* @__PURE__ */ jsx(Paragraph, { className: "mb-4", children: section.description }),
4978
- /* @__PURE__ */ jsx(List, { items: section.items }),
4979
- section.additionalContent && /* @__PURE__ */ jsx(Paragraph, { children: section.additionalContent })
4980
- ] }) : section.isHtml ? /* @__PURE__ */ jsx(Paragraph, { children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: section.content } }) }) : /* @__PURE__ */ jsx(Paragraph, { children: section.content })
4867
+ isSectionWithSubsections(section) ? (
4868
+ // Section with subsections (h3 + lists)
4869
+ /* @__PURE__ */ jsx(Fragment, { children: section.subsections.map((subsection, subIndex) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
4870
+ /* @__PURE__ */ jsx(SubsectionHeading, { children: subsection.title }),
4871
+ /* @__PURE__ */ jsx(List, { items: subsection.items })
4872
+ ] }, subIndex)) })
4873
+ ) : isSectionWithList(section) ? (
4874
+ // Section with list
4875
+ /* @__PURE__ */ jsxs(Fragment, { children: [
4876
+ section.description && /* @__PURE__ */ jsx(Paragraph, { className: "mb-4", children: section.description }),
4877
+ /* @__PURE__ */ jsx(List, { items: section.items }),
4878
+ section.additionalContent && /* @__PURE__ */ jsx(Paragraph, { children: section.additionalContent })
4879
+ ] })
4880
+ ) : section.isHtml ? (
4881
+ // Section with HTML content
4882
+ /* @__PURE__ */ jsx(Paragraph, { children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: section.content } }) })
4883
+ ) : (
4884
+ // Section with plain text content
4885
+ /* @__PURE__ */ jsx(Paragraph, { children: section.content })
4886
+ )
4981
4887
  ] }, index)),
4982
- /* @__PURE__ */ jsx(SectionHeading, { children: text.contact.title }),
4983
- text.contact.isHtml ? /* @__PURE__ */ jsx(Paragraph, { children: /* @__PURE__ */ jsx(
4984
- "span",
4985
- {
4986
- dangerouslySetInnerHTML: { __html: text.contact.description }
4987
- }
4988
- ) }) : /* @__PURE__ */ jsx(Paragraph, { children: text.contact.description }),
4989
- /* @__PURE__ */ jsx("div", { className: "bg-gray-50 dark:bg-gray-800 p-4 rounded-lg", children: /* @__PURE__ */ jsxs("p", { className: "text-gray-700 dark:text-gray-300", children: [
4990
- text.contact.info.emailLabel,
4991
- " ",
4992
- /* @__PURE__ */ jsx(
4993
- "a",
4994
- {
4995
- href: `mailto:${text.contact.info.email}`,
4996
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4997
- children: text.contact.info.email
4998
- }
4999
- ),
5000
- /* @__PURE__ */ jsx("br", {}),
5001
- text.contact.info.websiteLabel,
5002
- " ",
5003
- /* @__PURE__ */ jsx(
5004
- "a",
4888
+ text.contact && /* @__PURE__ */ jsxs(Fragment, { children: [
4889
+ /* @__PURE__ */ jsx(SectionHeading, { children: text.contact.title }),
4890
+ text.contact.isHtml ? /* @__PURE__ */ jsx(Paragraph, { children: /* @__PURE__ */ jsx(
4891
+ "span",
5005
4892
  {
5006
- href: text.contact.info.websiteUrl,
5007
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
5008
- children: text.contact.info.websiteUrl
4893
+ dangerouslySetInnerHTML: { __html: text.contact.description }
5009
4894
  }
5010
- )
5011
- ] }) })
4895
+ ) }) : /* @__PURE__ */ jsx(Paragraph, { children: text.contact.description }),
4896
+ /* @__PURE__ */ jsx("div", { className: "bg-gray-50 dark:bg-gray-800 p-4 rounded-lg", children: /* @__PURE__ */ jsxs("p", { className: "text-gray-700 dark:text-gray-300", children: [
4897
+ text.contact.info.emailLabel,
4898
+ " ",
4899
+ /* @__PURE__ */ jsx(
4900
+ "a",
4901
+ {
4902
+ href: `mailto:${text.contact.info.email}`,
4903
+ className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4904
+ children: text.contact.info.email
4905
+ }
4906
+ ),
4907
+ /* @__PURE__ */ jsx("br", {}),
4908
+ text.contact.info.websiteLabel,
4909
+ " ",
4910
+ /* @__PURE__ */ jsx(
4911
+ "a",
4912
+ {
4913
+ href: text.contact.info.websiteUrl,
4914
+ className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4915
+ children: text.contact.info.websiteUrl
4916
+ }
4917
+ ),
4918
+ text.contact.info.dpoLabel && text.contact.info.dpoEmail && /* @__PURE__ */ jsxs(Fragment, { children: [
4919
+ /* @__PURE__ */ jsx("br", {}),
4920
+ text.contact.info.dpoLabel,
4921
+ " ",
4922
+ /* @__PURE__ */ jsx(
4923
+ "a",
4924
+ {
4925
+ href: `mailto:${text.contact.info.dpoEmail}`,
4926
+ className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4927
+ children: text.contact.info.dpoEmail
4928
+ }
4929
+ )
4930
+ ] })
4931
+ ] }) }),
4932
+ text.contact.gdprNotice && /* @__PURE__ */ jsxs("div", { className: "mt-8 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg", children: [
4933
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-blue-900 dark:text-blue-200 mb-2", children: text.contact.gdprNotice.title }),
4934
+ /* @__PURE__ */ jsxs("p", { className: "text-blue-800 dark:text-blue-300", children: [
4935
+ text.contact.gdprNotice.content,
4936
+ " ",
4937
+ text.contact.info.dpoEmail && /* @__PURE__ */ jsx(
4938
+ "a",
4939
+ {
4940
+ href: `mailto:${text.contact.info.dpoEmail}`,
4941
+ className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
4942
+ children: text.contact.info.dpoEmail
4943
+ }
4944
+ )
4945
+ ] })
4946
+ ] })
4947
+ ] })
5012
4948
  ] })
5013
4949
  ] });
5014
4950
  if (PageWrapper) {
@@ -5022,10 +4958,9 @@ export {
5022
4958
  AppFooterForHomePage,
5023
4959
  AppPageLayout,
5024
4960
  AppPricingPage,
5025
- AppPrivacyPolicyPage,
5026
4961
  AppSitemapPage,
5027
4962
  AppSubscriptionsPage,
5028
- AppTermsOfServicePage,
4963
+ AppTextPage,
5029
4964
  AppTopBar,
5030
4965
  AppTopBarWithFirebaseAuth,
5031
4966
  AppTopBarWithWallet,