@tantainnovative/ndpr-toolkit 1.0.2 → 1.0.3

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.
Files changed (212) hide show
  1. package/.claude/settings.local.json +20 -0
  2. package/.eslintrc.json +10 -0
  3. package/.github/workflows/ci.yml +36 -0
  4. package/.github/workflows/nextjs.yml +104 -0
  5. package/.husky/commit-msg +4 -0
  6. package/.husky/pre-commit +4 -0
  7. package/.lintstagedrc.js +4 -0
  8. package/.nvmrc +1 -0
  9. package/.versionrc +17 -0
  10. package/CHANGELOG.md +16 -0
  11. package/CLAUDE.md +90 -0
  12. package/CNAME +1 -0
  13. package/CONTRIBUTING.md +87 -0
  14. package/README.md +84 -447
  15. package/RELEASE-NOTES-v1.0.0.md +140 -0
  16. package/RELEASE-NOTES-v1.0.1.md +69 -0
  17. package/SECURITY.md +21 -0
  18. package/commitlint.config.js +36 -0
  19. package/components.json +21 -0
  20. package/eslint.config.mjs +16 -0
  21. package/jest.config.js +31 -0
  22. package/jest.setup.js +15 -0
  23. package/next.config.js +15 -0
  24. package/next.config.ts +62 -0
  25. package/package.json +70 -52
  26. package/packages/ndpr-toolkit/README.md +467 -0
  27. package/packages/ndpr-toolkit/jest.config.js +23 -0
  28. package/packages/ndpr-toolkit/package-lock.json +8197 -0
  29. package/packages/ndpr-toolkit/package.json +71 -0
  30. package/packages/ndpr-toolkit/rollup.config.js +34 -0
  31. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentBanner.test.tsx +119 -0
  32. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentManager.test.tsx +122 -0
  33. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentStorage.test.tsx +270 -0
  34. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRDashboard.test.tsx +199 -0
  35. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRRequestForm.test.tsx +224 -0
  36. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRTracker.test.tsx +104 -0
  37. package/packages/ndpr-toolkit/src/__tests__/hooks/useConsent.test.tsx +161 -0
  38. package/packages/ndpr-toolkit/src/__tests__/hooks/useDSR.test.tsx +330 -0
  39. package/packages/ndpr-toolkit/src/__tests__/utils/breach.test.ts +149 -0
  40. package/packages/ndpr-toolkit/src/__tests__/utils/consent.test.ts +88 -0
  41. package/packages/ndpr-toolkit/src/__tests__/utils/dpia.test.ts +160 -0
  42. package/packages/ndpr-toolkit/src/__tests__/utils/dsr.test.ts +110 -0
  43. package/packages/ndpr-toolkit/src/__tests__/utils/privacy.test.ts +97 -0
  44. package/packages/ndpr-toolkit/src/components/breach/BreachNotificationManager.tsx +701 -0
  45. package/packages/ndpr-toolkit/src/components/breach/BreachReportForm.tsx +631 -0
  46. package/packages/ndpr-toolkit/src/components/breach/BreachRiskAssessment.tsx +569 -0
  47. package/packages/ndpr-toolkit/src/components/breach/RegulatoryReportGenerator.tsx +496 -0
  48. package/packages/ndpr-toolkit/src/components/consent/ConsentBanner.tsx +270 -0
  49. package/packages/ndpr-toolkit/src/components/consent/ConsentManager.tsx +217 -0
  50. package/packages/ndpr-toolkit/src/components/consent/ConsentStorage.tsx +206 -0
  51. package/packages/ndpr-toolkit/src/components/dpia/DPIAQuestionnaire.tsx +342 -0
  52. package/packages/ndpr-toolkit/src/components/dpia/DPIAReport.tsx +373 -0
  53. package/packages/ndpr-toolkit/src/components/dpia/StepIndicator.tsx +174 -0
  54. package/packages/ndpr-toolkit/src/components/dsr/DSRDashboard.tsx +717 -0
  55. package/packages/ndpr-toolkit/src/components/dsr/DSRRequestForm.tsx +476 -0
  56. package/packages/ndpr-toolkit/src/components/dsr/DSRTracker.tsx +620 -0
  57. package/packages/ndpr-toolkit/src/components/policy/PolicyExporter.tsx +541 -0
  58. package/packages/ndpr-toolkit/src/components/policy/PolicyGenerator.tsx +454 -0
  59. package/packages/ndpr-toolkit/src/components/policy/PolicyPreview.tsx +333 -0
  60. package/packages/ndpr-toolkit/src/hooks/useBreach.ts +409 -0
  61. package/packages/ndpr-toolkit/src/hooks/useConsent.ts +263 -0
  62. package/packages/ndpr-toolkit/src/hooks/useDPIA.ts +457 -0
  63. package/packages/ndpr-toolkit/src/hooks/useDSR.ts +236 -0
  64. package/packages/ndpr-toolkit/src/hooks/usePrivacyPolicy.ts +428 -0
  65. package/{dist/index.d.ts → packages/ndpr-toolkit/src/index.ts} +13 -0
  66. package/packages/ndpr-toolkit/src/setupTests.ts +5 -0
  67. package/packages/ndpr-toolkit/src/types/breach.ts +283 -0
  68. package/packages/ndpr-toolkit/src/types/consent.ts +111 -0
  69. package/packages/ndpr-toolkit/src/types/dpia.ts +236 -0
  70. package/packages/ndpr-toolkit/src/types/dsr.ts +192 -0
  71. package/packages/ndpr-toolkit/src/types/index.ts +42 -0
  72. package/packages/ndpr-toolkit/src/types/privacy.ts +246 -0
  73. package/packages/ndpr-toolkit/src/utils/breach.ts +122 -0
  74. package/packages/ndpr-toolkit/src/utils/consent.ts +51 -0
  75. package/packages/ndpr-toolkit/src/utils/dpia.ts +104 -0
  76. package/packages/ndpr-toolkit/src/utils/dsr.ts +77 -0
  77. package/packages/ndpr-toolkit/src/utils/privacy.ts +100 -0
  78. package/packages/ndpr-toolkit/tsconfig.json +23 -0
  79. package/postcss.config.mjs +5 -0
  80. package/public/NDPR TOOLKIT.svg +1 -0
  81. package/public/favicon/android-chrome-192x192.png +0 -0
  82. package/public/favicon/android-chrome-512x512.png +0 -0
  83. package/public/favicon/apple-touch-icon.png +0 -0
  84. package/public/favicon/favicon-16x16.png +0 -0
  85. package/public/favicon/favicon-32x32.png +0 -0
  86. package/public/favicon/site.webmanifest +1 -0
  87. package/public/file.svg +1 -0
  88. package/public/globe.svg +1 -0
  89. package/public/ndpr-toolkit-logo.svg +108 -0
  90. package/public/next.svg +1 -0
  91. package/public/vercel.svg +1 -0
  92. package/public/window.svg +1 -0
  93. package/src/__tests__/example.test.ts +13 -0
  94. package/src/__tests__/requestService.test.ts +57 -0
  95. package/src/app/accessibility.css +70 -0
  96. package/src/app/docs/components/DocLayout.tsx +267 -0
  97. package/src/app/docs/components/breach-notification/page.tsx +797 -0
  98. package/src/app/docs/components/consent-management/page.tsx +576 -0
  99. package/src/app/docs/components/data-subject-rights/page.tsx +511 -0
  100. package/src/app/docs/components/dpia-questionnaire/layout.tsx +15 -0
  101. package/src/app/docs/components/dpia-questionnaire/metadata.ts +31 -0
  102. package/src/app/docs/components/dpia-questionnaire/page.tsx +666 -0
  103. package/src/app/docs/components/hooks/page.tsx +305 -0
  104. package/src/app/docs/components/page.tsx +84 -0
  105. package/src/app/docs/components/privacy-policy-generator/page.tsx +634 -0
  106. package/src/app/docs/guides/breach-notification-process/components/BestPractices.tsx +123 -0
  107. package/src/app/docs/guides/breach-notification-process/components/ImplementationSteps.tsx +328 -0
  108. package/src/app/docs/guides/breach-notification-process/components/Introduction.tsx +28 -0
  109. package/src/app/docs/guides/breach-notification-process/components/NotificationTimeline.tsx +91 -0
  110. package/src/app/docs/guides/breach-notification-process/components/Resources.tsx +118 -0
  111. package/src/app/docs/guides/breach-notification-process/page.tsx +39 -0
  112. package/src/app/docs/guides/conducting-dpia/page.tsx +593 -0
  113. package/src/app/docs/guides/data-subject-requests/page.tsx +666 -0
  114. package/src/app/docs/guides/managing-consent/page.tsx +738 -0
  115. package/src/app/docs/guides/ndpr-compliance-checklist/components/ComplianceChecklist.tsx +296 -0
  116. package/src/app/docs/guides/ndpr-compliance-checklist/components/ImplementationTools.tsx +145 -0
  117. package/src/app/docs/guides/ndpr-compliance-checklist/components/Introduction.tsx +33 -0
  118. package/src/app/docs/guides/ndpr-compliance-checklist/components/KeyRequirements.tsx +99 -0
  119. package/src/app/docs/guides/ndpr-compliance-checklist/components/Resources.tsx +159 -0
  120. package/src/app/docs/guides/ndpr-compliance-checklist/page.tsx +38 -0
  121. package/src/app/docs/guides/page.tsx +67 -0
  122. package/src/app/docs/layout.tsx +15 -0
  123. package/src/app/docs/metadata.ts +31 -0
  124. package/src/app/docs/page.tsx +572 -0
  125. package/src/app/favicon.ico +0 -0
  126. package/src/app/globals.css +123 -0
  127. package/src/app/layout.tsx +37 -0
  128. package/src/app/ndpr-demos/breach/page.tsx +354 -0
  129. package/src/app/ndpr-demos/consent/page.tsx +366 -0
  130. package/src/app/ndpr-demos/dpia/page.tsx +495 -0
  131. package/src/app/ndpr-demos/dsr/page.tsx +280 -0
  132. package/src/app/ndpr-demos/page.tsx +73 -0
  133. package/src/app/ndpr-demos/policy/page.tsx +771 -0
  134. package/src/app/page.tsx +452 -0
  135. package/src/components/ErrorBoundary.tsx +90 -0
  136. package/src/components/breach-notification/BreachNotificationForm.tsx +479 -0
  137. package/src/components/consent/ConsentBanner.tsx +159 -0
  138. package/src/components/data-subject-rights/DataSubjectRequestForm.tsx +419 -0
  139. package/src/components/docs/DocLayout.tsx +289 -0
  140. package/src/components/docs/index.ts +2 -0
  141. package/src/components/dpia/DPIAQuestionnaire.tsx +483 -0
  142. package/src/components/privacy-policy/PolicyGenerator.tsx +1062 -0
  143. package/src/components/privacy-policy/data.ts +98 -0
  144. package/src/components/privacy-policy/shared/CheckboxField.tsx +38 -0
  145. package/src/components/privacy-policy/shared/CheckboxGroup.tsx +85 -0
  146. package/src/components/privacy-policy/shared/FormField.tsx +79 -0
  147. package/src/components/privacy-policy/shared/StepIndicator.tsx +86 -0
  148. package/src/components/privacy-policy/steps/CustomSectionsStep.tsx +335 -0
  149. package/src/components/privacy-policy/steps/DataCollectionStep.tsx +231 -0
  150. package/src/components/privacy-policy/steps/DataSharingStep.tsx +418 -0
  151. package/src/components/privacy-policy/steps/OrganizationInfoStep.tsx +202 -0
  152. package/src/components/privacy-policy/steps/PolicyPreviewStep.tsx +172 -0
  153. package/src/components/ui/Badge.tsx +46 -0
  154. package/src/components/ui/Button.tsx +59 -0
  155. package/src/components/ui/Card.tsx +92 -0
  156. package/src/components/ui/Checkbox.tsx +57 -0
  157. package/src/components/ui/FormField.tsx +50 -0
  158. package/src/components/ui/Input.tsx +38 -0
  159. package/src/components/ui/Loading.tsx +201 -0
  160. package/src/components/ui/Select.tsx +42 -0
  161. package/src/components/ui/TextArea.tsx +38 -0
  162. package/src/components/ui/label.tsx +24 -0
  163. package/src/components/ui/switch.tsx +31 -0
  164. package/src/components/ui/tabs.tsx +66 -0
  165. package/src/hooks/useConsent.ts +64 -0
  166. package/src/hooks/useLoadingState.ts +85 -0
  167. package/src/lib/consentService.ts +137 -0
  168. package/src/lib/dpiaQuestions.ts +148 -0
  169. package/src/lib/requestService.ts +75 -0
  170. package/src/lib/sanitize.ts +108 -0
  171. package/src/lib/storage.ts +222 -0
  172. package/src/lib/utils.ts +6 -0
  173. package/src/types/html-to-docx.d.ts +30 -0
  174. package/src/types/index.ts +72 -0
  175. package/tailwind.config.ts +65 -0
  176. package/tsconfig.json +41 -0
  177. package/dist/components/breach/BreachNotificationManager.d.ts +0 -62
  178. package/dist/components/breach/BreachReportForm.d.ts +0 -66
  179. package/dist/components/breach/BreachRiskAssessment.d.ts +0 -50
  180. package/dist/components/breach/RegulatoryReportGenerator.d.ts +0 -94
  181. package/dist/components/consent/ConsentBanner.d.ts +0 -79
  182. package/dist/components/consent/ConsentManager.d.ts +0 -73
  183. package/dist/components/consent/ConsentStorage.d.ts +0 -41
  184. package/dist/components/dpia/DPIAQuestionnaire.d.ts +0 -70
  185. package/dist/components/dpia/DPIAReport.d.ts +0 -40
  186. package/dist/components/dpia/StepIndicator.d.ts +0 -64
  187. package/dist/components/dsr/DSRDashboard.d.ts +0 -58
  188. package/dist/components/dsr/DSRRequestForm.d.ts +0 -74
  189. package/dist/components/dsr/DSRTracker.d.ts +0 -56
  190. package/dist/components/policy/PolicyExporter.d.ts +0 -65
  191. package/dist/components/policy/PolicyGenerator.d.ts +0 -54
  192. package/dist/components/policy/PolicyPreview.d.ts +0 -71
  193. package/dist/hooks/useBreach.d.ts +0 -97
  194. package/dist/hooks/useConsent.d.ts +0 -63
  195. package/dist/hooks/useDPIA.d.ts +0 -92
  196. package/dist/hooks/useDSR.d.ts +0 -72
  197. package/dist/hooks/usePrivacyPolicy.d.ts +0 -87
  198. package/dist/index.esm.js +0 -2
  199. package/dist/index.esm.js.map +0 -1
  200. package/dist/index.js +0 -2
  201. package/dist/index.js.map +0 -1
  202. package/dist/setupTests.d.ts +0 -2
  203. package/dist/types/breach.d.ts +0 -239
  204. package/dist/types/consent.d.ts +0 -95
  205. package/dist/types/dpia.d.ts +0 -196
  206. package/dist/types/dsr.d.ts +0 -162
  207. package/dist/types/privacy.d.ts +0 -204
  208. package/dist/utils/breach.d.ts +0 -14
  209. package/dist/utils/consent.d.ts +0 -10
  210. package/dist/utils/dpia.d.ts +0 -12
  211. package/dist/utils/dsr.d.ts +0 -11
  212. package/dist/utils/privacy.d.ts +0 -12
@@ -0,0 +1,104 @@
1
+ import { DPIAResult, DPIARisk } from '../types/dpia';
2
+
3
+ /**
4
+ * Assesses the risk level of a DPIA based on the identified risks
5
+ * @param dpiaResult The DPIA result containing risks to assess
6
+ * @returns Assessment result with overall risk level and recommendations
7
+ */
8
+ export function assessDPIARisk(dpiaResult: DPIAResult): {
9
+ overallRiskLevel: 'low' | 'medium' | 'high' | 'critical';
10
+ requiresConsultation: boolean;
11
+ canProceed: boolean;
12
+ recommendations: string[];
13
+ } {
14
+ // Count risks by level
15
+ const riskCounts = {
16
+ low: 0,
17
+ medium: 0,
18
+ high: 0,
19
+ critical: 0
20
+ };
21
+
22
+ // Calculate the highest risk score
23
+ let highestRiskScore = 0;
24
+
25
+ // Track unmitigated high/critical risks
26
+ const unmitigatedHighRisks: DPIARisk[] = [];
27
+
28
+ // Analyze each risk
29
+ dpiaResult.risks.forEach(risk => {
30
+ // Count by level
31
+ riskCounts[risk.level]++;
32
+
33
+ // Track highest score
34
+ if (risk.score > highestRiskScore) {
35
+ highestRiskScore = risk.score;
36
+ }
37
+
38
+ // Track unmitigated high/critical risks
39
+ if ((risk.level === 'high' || risk.level === 'critical') && !risk.mitigated) {
40
+ unmitigatedHighRisks.push(risk);
41
+ }
42
+ });
43
+
44
+ // Determine overall risk level
45
+ let overallRiskLevel: 'low' | 'medium' | 'high' | 'critical';
46
+
47
+ if (riskCounts.critical > 0) {
48
+ overallRiskLevel = 'critical';
49
+ } else if (riskCounts.high > 2 || (riskCounts.high > 0 && riskCounts.medium > 3)) {
50
+ overallRiskLevel = 'high';
51
+ } else if (riskCounts.high > 0 || riskCounts.medium > 1) {
52
+ overallRiskLevel = 'medium';
53
+ } else {
54
+ overallRiskLevel = 'low';
55
+ }
56
+
57
+ // Determine if NITDA consultation is required
58
+ // Under NDPR, consultation is required for high-risk processing
59
+ const requiresConsultation = overallRiskLevel === 'high' || overallRiskLevel === 'critical';
60
+
61
+ // Determine if processing can proceed
62
+ // Processing can proceed if all high/critical risks are mitigated
63
+ const canProceed = unmitigatedHighRisks.length === 0;
64
+
65
+ // Generate recommendations
66
+ const recommendations: string[] = [];
67
+
68
+ if (unmitigatedHighRisks.length > 0) {
69
+ recommendations.push(
70
+ `Mitigate the following high/critical risks before proceeding: ${
71
+ unmitigatedHighRisks.map(risk => risk.description).join(', ')
72
+ }`
73
+ );
74
+ }
75
+
76
+ if (requiresConsultation) {
77
+ recommendations.push(
78
+ 'Consult with NITDA before proceeding with this processing activity, as required by NDPR for high-risk processing.'
79
+ );
80
+ }
81
+
82
+ if (riskCounts.medium > 0) {
83
+ recommendations.push(
84
+ 'Implement additional safeguards to reduce medium-level risks where possible.'
85
+ );
86
+ }
87
+
88
+ if (overallRiskLevel !== 'low') {
89
+ recommendations.push(
90
+ 'Schedule a review of this DPIA in 6 months to reassess risks and effectiveness of mitigation measures.'
91
+ );
92
+ } else {
93
+ recommendations.push(
94
+ 'Schedule a review of this DPIA in 12 months as part of regular compliance activities.'
95
+ );
96
+ }
97
+
98
+ return {
99
+ overallRiskLevel,
100
+ requiresConsultation,
101
+ canProceed,
102
+ recommendations
103
+ };
104
+ }
@@ -0,0 +1,77 @@
1
+ import { DSRRequest } from '../types/dsr';
2
+
3
+ /**
4
+ * Formats a DSR request for display or submission
5
+ * @param request The DSR request to format
6
+ * @returns Formatted request data
7
+ */
8
+ export function formatDSRRequest(request: DSRRequest): {
9
+ formattedRequest: Record<string, any>;
10
+ isValid: boolean;
11
+ validationErrors: string[];
12
+ } {
13
+ const validationErrors: string[] = [];
14
+
15
+ // Validate required fields
16
+ if (!request.id) {
17
+ validationErrors.push('Request ID is required');
18
+ }
19
+
20
+ if (!request.type) {
21
+ validationErrors.push('Request type is required');
22
+ }
23
+
24
+ if (!request.status) {
25
+ validationErrors.push('Request status is required');
26
+ }
27
+
28
+ if (!request.createdAt) {
29
+ validationErrors.push('Creation timestamp is required');
30
+ }
31
+
32
+ if (!request.subject?.name) {
33
+ validationErrors.push('Data subject name is required');
34
+ }
35
+
36
+ if (!request.subject?.email) {
37
+ validationErrors.push('Data subject email is required');
38
+ }
39
+
40
+ // Format the request for display or submission
41
+ const formattedRequest = {
42
+ requestId: request.id,
43
+ requestType: request.type,
44
+ status: request.status,
45
+ createdDate: new Date(request.createdAt).toISOString(),
46
+ lastUpdated: request.updatedAt ? new Date(request.updatedAt).toISOString() : undefined,
47
+ dueDate: request.dueDate
48
+ ? new Date(request.dueDate).toISOString()
49
+ : undefined,
50
+ dataSubject: {
51
+ name: request.subject.name,
52
+ email: request.subject.email,
53
+ phone: request.subject.phone || 'Not provided',
54
+ identifier: {
55
+ type: request.subject.identifierType || 'Not specified',
56
+ value: request.subject.identifierValue || 'Not provided'
57
+ }
58
+ },
59
+ additionalInformation: request.additionalInfo || {},
60
+ verificationStatus: request.verification
61
+ ? `${request.verification.verified ? 'Verified' : 'Not verified'}${request.verification.method ? ` via ${request.verification.method}` : ''}`
62
+ : 'Pending verification',
63
+ attachments: request.attachments
64
+ ? request.attachments.map(attachment => ({
65
+ name: attachment.name,
66
+ type: attachment.type,
67
+ addedOn: new Date(attachment.addedAt).toISOString()
68
+ }))
69
+ : []
70
+ };
71
+
72
+ return {
73
+ formattedRequest,
74
+ isValid: validationErrors.length === 0,
75
+ validationErrors
76
+ };
77
+ }
@@ -0,0 +1,100 @@
1
+ import { PolicySection, OrganizationInfo, PolicyVariable } from '../types/privacy';
2
+
3
+ /**
4
+ * Generates policy text by replacing variables in a template with organization-specific values
5
+ * @param sectionsOrTemplate The policy sections or template string to generate text for
6
+ * @param organizationInfoOrVariables The organization information or variable map to use for replacement
7
+ * @returns The generated policy text or an object with the generated text and metadata
8
+ */
9
+ export function generatePolicyText(
10
+ sectionsOrTemplate: PolicySection[] | string,
11
+ organizationInfoOrVariables: OrganizationInfo | Record<string, string>
12
+ ): string | {
13
+ fullText: string;
14
+ sectionTexts: Record<string, string>;
15
+ missingVariables: string[];
16
+ } {
17
+ // Check if we're using the new API (template string and variable map)
18
+ if (typeof sectionsOrTemplate === 'string') {
19
+ const template = sectionsOrTemplate;
20
+ const variableMap = organizationInfoOrVariables as Record<string, string>;
21
+
22
+ // Replace variables in the template
23
+ let result = template;
24
+ const variableRegex = /\{\{([^}]+)\}\}/g;
25
+ let match;
26
+
27
+ // Find and replace all variables in the content
28
+ while ((match = variableRegex.exec(template)) !== null) {
29
+ const variable = match[1].trim();
30
+ const replacement = variableMap[variable] || '';
31
+
32
+ // Replace the variable in the content
33
+ result = result.replace(
34
+ new RegExp(`\\{\\{\\s*${variable}\\s*\\}\\}`, 'g'),
35
+ replacement
36
+ );
37
+ }
38
+
39
+ return result;
40
+ }
41
+ // Otherwise use the original API (sections array and organization info)
42
+ else {
43
+ const sections = sectionsOrTemplate;
44
+ const organizationInfo = organizationInfoOrVariables as OrganizationInfo;
45
+ const sectionTexts: Record<string, string> = {};
46
+ const missingVariables: string[] = [];
47
+
48
+ // Process each section
49
+ sections
50
+ .filter(section => section.included)
51
+ .sort((a, b) => (a.order || 0) - (b.order || 0))
52
+ .forEach(section => {
53
+ // Use template if available, otherwise fall back to custom/default content
54
+ let content = section.template || section.customContent || section.defaultContent || '';
55
+
56
+ // Replace variables in the content
57
+ const variableRegex = /\{\{([^}]+)\}\}/g;
58
+ let match;
59
+
60
+ // Find all variables in the content
61
+ const contentVariables: string[] = [];
62
+ while ((match = variableRegex.exec(content)) !== null) {
63
+ contentVariables.push(match[1].trim());
64
+ }
65
+
66
+ // Replace each variable with its value
67
+ contentVariables.forEach(variable => {
68
+ let replacement = '';
69
+
70
+ // Check if the variable exists in organizationInfo
71
+ if (variable in organizationInfo) {
72
+ replacement = organizationInfo[variable as keyof OrganizationInfo] as string || '';
73
+ }
74
+
75
+ // If replacement is empty, add to missing variables
76
+ if (!replacement) {
77
+ missingVariables.push(variable);
78
+ }
79
+
80
+ // Replace the variable in the content
81
+ content = content.replace(
82
+ new RegExp(`\\{\\{\\s*${variable}\\s*\\}\\}`, 'g'),
83
+ replacement
84
+ );
85
+ });
86
+
87
+ // Store the processed section text
88
+ sectionTexts[section.id] = content;
89
+ });
90
+
91
+ // Combine all sections into full text
92
+ const fullText = Object.values(sectionTexts).join('\n\n');
93
+
94
+ return {
95
+ fullText,
96
+ sectionTexts,
97
+ missingVariables: Array.from(new Set(missingVariables)) // Remove duplicates
98
+ };
99
+ }
100
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es5",
4
+ "lib": ["dom", "dom.iterable", "esnext"],
5
+ "allowJs": true,
6
+ "skipLibCheck": true,
7
+ "esModuleInterop": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "strict": true,
10
+ "forceConsistentCasingInFileNames": true,
11
+ "noFallthroughCasesInSwitch": true,
12
+ "module": "esnext",
13
+ "moduleResolution": "node",
14
+ "resolveJsonModule": true,
15
+ "isolatedModules": true,
16
+ "jsx": "react-jsx",
17
+ "declaration": true,
18
+ "declarationDir": "dist",
19
+ "outDir": "dist"
20
+ },
21
+ "include": ["src"],
22
+ "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.test.tsx"]
23
+ }
@@ -0,0 +1,5 @@
1
+ const config = {
2
+ plugins: ["@tailwindcss/postcss", "autoprefixer"],
3
+ };
4
+
5
+ export default config;
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="500" zoomAndPan="magnify" viewBox="0 0 375 374.999991" height="500" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><g/><clipPath id="7476030c4e"><path d="M 88.488281 96.757812 L 238 96.757812 L 238 278.257812 L 88.488281 278.257812 Z M 88.488281 96.757812 " clip-rule="nonzero"/></clipPath><clipPath id="4d37ce4931"><path d="M 150 115 L 269.238281 115 L 269.238281 260 L 150 260 Z M 150 115 " clip-rule="nonzero"/></clipPath><clipPath id="4fc2549465"><path d="M 81.003906 165.042969 L 277.007812 165.042969 L 277.007812 218.945312 L 81.003906 218.945312 Z M 81.003906 165.042969 " clip-rule="nonzero"/></clipPath></defs><g clip-path="url(#7476030c4e)"><path fill="#004aad" d="M 197.859375 267.53125 C 153.652344 267.53125 117.820312 231.699219 117.820312 187.496094 C 117.820312 143.289062 153.652344 107.457031 197.859375 107.457031 C 212.203125 107.457031 225.652344 111.246094 237.296875 117.855469 C 221.554688 104.707031 201.296875 96.785156 179.183594 96.785156 C 129.085938 96.785156 88.472656 137.398438 88.472656 187.496094 C 88.472656 237.589844 129.085938 278.203125 179.183594 278.203125 C 201.296875 278.203125 221.554688 270.28125 237.296875 257.132812 C 225.652344 263.742188 212.203125 267.53125 197.859375 267.53125 " fill-opacity="1" fill-rule="nonzero"/></g><g clip-path="url(#4d37ce4931)"><path fill="#4f4c4c" d="M 182.128906 251.414062 C 217.429688 251.414062 246.050781 222.792969 246.050781 187.496094 C 246.050781 152.195312 217.429688 123.574219 182.128906 123.574219 C 170.675781 123.574219 159.933594 126.605469 150.636719 131.882812 C 163.207031 121.378906 179.382812 115.054688 197.046875 115.054688 C 237.054688 115.054688 269.484375 147.484375 269.484375 187.496094 C 269.484375 227.503906 237.054688 259.933594 197.046875 259.933594 C 179.382812 259.933594 163.207031 253.609375 150.636719 243.109375 C 159.933594 248.382812 170.675781 251.414062 182.128906 251.414062 " fill-opacity="1" fill-rule="nonzero"/></g><g clip-path="url(#4fc2549465)"><path fill="#ffffff" d="M 81.003906 165.042969 L 277.03125 165.042969 L 277.03125 218.945312 L 81.003906 218.945312 Z M 81.003906 165.042969 " fill-opacity="1" fill-rule="nonzero"/></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(50.840584, 195.749987)"><g><path d="M 25.5625 -21.59375 C 24.832031 -21.59375 24.28125 -21.28125 23.90625 -20.65625 C 23.738281 -20.382812 23.644531 -20.070312 23.625 -19.71875 L 23.625 -3.5625 C 23.625 -2.164062 23.71875 -0.988281 23.90625 -0.03125 L 24 0.4375 L 23.71875 0.4375 L 7.921875 -14.609375 L 7.921875 -2.1875 C 7.921875 -1.664062 8.109375 -1.222656 8.484375 -0.859375 C 8.859375 -0.492188 9.304688 -0.3125 9.828125 -0.3125 L 10.421875 -0.3125 L 10.421875 0 L 0.9375 0 L 0.9375 -0.3125 L 1.5 -0.3125 C 2.039062 -0.3125 2.5 -0.492188 2.875 -0.859375 C 3.25 -1.222656 3.4375 -1.675781 3.4375 -2.21875 L 3.4375 -18.46875 C 3.4375 -19.84375 3.34375 -20.988281 3.15625 -21.90625 L 3.09375 -22.375 L 3.375 -22.375 L 19.1875 -7.328125 L 19.1875 -19.6875 C 19.164062 -20.226562 18.96875 -20.679688 18.59375 -21.046875 C 18.21875 -21.410156 17.769531 -21.59375 17.25 -21.59375 L 16.6875 -21.59375 L 16.6875 -21.90625 L 26.171875 -21.90625 L 26.171875 -21.59375 Z M 25.5625 -21.59375 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(77.905607, 195.749987)"><g><path d="M 12.671875 -21.90625 C 16.367188 -21.90625 19.289062 -20.925781 21.4375 -18.96875 C 23.582031 -17.007812 24.65625 -14.335938 24.65625 -10.953125 C 24.65625 -7.578125 23.582031 -4.90625 21.4375 -2.9375 C 19.289062 -0.976562 16.367188 0 12.671875 0 L 1.3125 0 L 1.3125 -0.3125 L 1.71875 -0.3125 C 2.257812 -0.3125 2.722656 -0.503906 3.109375 -0.890625 C 3.492188 -1.273438 3.695312 -1.738281 3.71875 -2.28125 L 3.71875 -19.8125 C 3.71875 -20.3125 3.515625 -20.734375 3.109375 -21.078125 C 2.703125 -21.421875 2.238281 -21.59375 1.71875 -21.59375 L 1.3125 -21.59375 L 1.3125 -21.90625 Z M 12.265625 -1.34375 C 13.765625 -1.34375 15.0625 -1.726562 16.15625 -2.5 C 17.257812 -3.269531 18.101562 -4.378906 18.6875 -5.828125 C 19.269531 -7.285156 19.5625 -8.867188 19.5625 -10.578125 C 19.5625 -12.285156 19.390625 -13.738281 19.046875 -14.9375 C 18.703125 -16.144531 18.21875 -17.164062 17.59375 -18 C 16.300781 -19.726562 14.523438 -20.59375 12.265625 -20.59375 L 8.421875 -20.59375 L 8.421875 -1.34375 Z M 12.265625 -1.34375 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(103.812935, 195.749987)"><g><path d="M 19.625 -15.65625 C 19.625 -14.6875 19.4375 -13.773438 19.0625 -12.921875 C 18.351562 -11.273438 17.035156 -10.148438 15.109375 -9.546875 C 14.546875 -9.359375 14.023438 -9.265625 13.546875 -9.265625 C 12.066406 -9.265625 10.742188 -9.648438 9.578125 -10.421875 L 9.578125 -10.734375 C 11.140625 -10.691406 12.398438 -11.203125 13.359375 -12.265625 C 14.191406 -13.179688 14.609375 -14.382812 14.609375 -15.875 C 14.609375 -17.375 14.25 -18.535156 13.53125 -19.359375 C 12.8125 -20.179688 11.835938 -20.59375 10.609375 -20.59375 L 8.515625 -20.59375 L 8.515625 -2.28125 C 8.515625 -1.738281 8.710938 -1.273438 9.109375 -0.890625 C 9.503906 -0.503906 9.972656 -0.3125 10.515625 -0.3125 L 10.921875 -0.3125 L 10.921875 0 L 1.40625 0 L 1.40625 -0.3125 L 1.8125 -0.3125 C 2.351562 -0.3125 2.816406 -0.503906 3.203125 -0.890625 C 3.585938 -1.273438 3.789062 -1.738281 3.8125 -2.28125 L 3.8125 -19.78125 C 3.8125 -20.300781 3.613281 -20.734375 3.21875 -21.078125 C 2.820312 -21.421875 2.351562 -21.59375 1.8125 -21.59375 L 1.40625 -21.59375 L 1.40625 -21.90625 L 11.859375 -21.90625 C 14.410156 -21.90625 16.332031 -21.363281 17.625 -20.28125 C 18.957031 -19.132812 19.625 -17.59375 19.625 -15.65625 Z M 19.625 -15.65625 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(124.307254, 195.749987)"><g><path d="M 9.953125 -20.53125 L 8.609375 -20.53125 C 8.566406 -20.53125 8.535156 -20.53125 8.515625 -20.53125 L 8.515625 -2.28125 C 8.535156 -1.738281 8.738281 -1.273438 9.125 -0.890625 C 9.507812 -0.503906 9.972656 -0.3125 10.515625 -0.3125 L 10.921875 -0.3125 L 10.921875 0 L 1.40625 0 L 1.40625 -0.3125 L 1.8125 -0.3125 C 2.5625 -0.3125 3.132812 -0.632812 3.53125 -1.28125 C 3.695312 -1.570312 3.789062 -1.894531 3.8125 -2.25 L 3.8125 -19.625 C 3.789062 -20.164062 3.585938 -20.628906 3.203125 -21.015625 C 2.816406 -21.398438 2.351562 -21.59375 1.8125 -21.59375 L 1.40625 -21.59375 L 1.40625 -21.90625 L 12.140625 -21.90625 C 14.160156 -21.90625 15.875 -21.46875 17.28125 -20.59375 C 17.988281 -20.15625 18.550781 -19.546875 18.96875 -18.765625 C 19.382812 -17.984375 19.59375 -16.957031 19.59375 -15.6875 C 19.59375 -14.425781 19.15625 -13.210938 18.28125 -12.046875 C 17.40625 -10.878906 16.128906 -10.210938 14.453125 -10.046875 C 15.671875 -9.648438 16.738281 -8.734375 17.65625 -7.296875 C 19.90625 -3.679688 21.570312 -1.53125 22.65625 -0.84375 C 23.195312 -0.507812 23.875 -0.332031 24.6875 -0.3125 L 24.6875 0 L 21.625 0 C 19.8125 0 18.300781 -0.238281 17.09375 -0.71875 C 15.894531 -1.195312 14.953125 -2.039062 14.265625 -3.25 C 13.867188 -3.9375 13.003906 -5.722656 11.671875 -8.609375 C 11.085938 -9.878906 10.378906 -10.578125 9.546875 -10.703125 L 9.546875 -11.015625 L 10.515625 -11.015625 C 11.453125 -11.015625 12.28125 -11.296875 13 -11.859375 C 13.71875 -12.421875 14.203125 -13.335938 14.453125 -14.609375 C 14.535156 -15.046875 14.578125 -15.394531 14.578125 -15.65625 C 14.578125 -17.363281 14.234375 -18.597656 13.546875 -19.359375 C 12.859375 -20.117188 11.972656 -20.507812 10.890625 -20.53125 C 10.679688 -20.53125 10.367188 -20.53125 9.953125 -20.53125 Z M 9.953125 -20.53125 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(147.680162, 195.749987)"><g/></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(155.502427, 195.749987)"><g><path d="M 12.796875 -20.625 L 12.796875 -2.25 C 12.816406 -1.707031 13.019531 -1.25 13.40625 -0.875 C 13.789062 -0.5 14.253906 -0.3125 14.796875 -0.3125 L 15.171875 -0.3125 L 15.203125 0 L 5.703125 0 L 5.703125 -0.3125 L 6.109375 -0.3125 C 6.628906 -0.3125 7.082031 -0.5 7.46875 -0.875 C 7.851562 -1.25 8.066406 -1.695312 8.109375 -2.21875 L 8.109375 -20.625 L 3.875 -20.625 C 2.914062 -20.601562 2.15625 -20.300781 1.59375 -19.71875 C 1.03125 -19.132812 0.75 -18.375 0.75 -17.4375 L 0.75 -17.0625 L 0.4375 -17.0625 L 0.4375 -22.5 C 1.289062 -22.144531 2.519531 -21.957031 4.125 -21.9375 L 16.75 -21.9375 C 17.394531 -21.9375 18.097656 -22 18.859375 -22.125 C 19.617188 -22.25 20.144531 -22.375 20.4375 -22.5 L 20.4375 -17.0625 L 20.125 -17.0625 L 20.125 -17.4375 C 20.125 -18.726562 19.632812 -19.644531 18.65625 -20.1875 C 18.195312 -20.457031 17.644531 -20.601562 17 -20.625 Z M 12.796875 -20.625 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(176.340926, 195.749987)"><g><path d="M 4.859375 -19.28125 C 7.085938 -21.320312 10.082031 -22.34375 13.84375 -22.34375 C 17.613281 -22.34375 20.609375 -21.320312 22.828125 -19.28125 C 25.054688 -17.238281 26.171875 -14.460938 26.171875 -10.953125 C 26.171875 -7.453125 25.054688 -4.675781 22.828125 -2.625 C 20.609375 -0.582031 17.613281 0.4375 13.84375 0.4375 C 10.082031 0.4375 7.085938 -0.582031 4.859375 -2.625 C 2.640625 -4.675781 1.53125 -7.453125 1.53125 -10.953125 C 1.53125 -14.460938 2.640625 -17.238281 4.859375 -19.28125 Z M 8.59375 -3.578125 C 9.875 -1.773438 11.617188 -0.875 13.828125 -0.875 C 16.046875 -0.875 17.800781 -1.773438 19.09375 -3.578125 C 20.382812 -5.390625 21.03125 -7.847656 21.03125 -10.953125 C 21.03125 -14.054688 20.382812 -16.507812 19.09375 -18.3125 C 17.800781 -20.125 16.046875 -21.03125 13.828125 -21.03125 C 11.617188 -21.03125 9.875 -20.125 8.59375 -18.3125 C 7.3125 -16.507812 6.671875 -14.054688 6.671875 -10.953125 C 6.671875 -7.847656 7.3125 -5.390625 8.59375 -3.578125 Z M 8.59375 -3.578125 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(203.812707, 195.749987)"><g><path d="M 4.859375 -19.28125 C 7.085938 -21.320312 10.082031 -22.34375 13.84375 -22.34375 C 17.613281 -22.34375 20.609375 -21.320312 22.828125 -19.28125 C 25.054688 -17.238281 26.171875 -14.460938 26.171875 -10.953125 C 26.171875 -7.453125 25.054688 -4.675781 22.828125 -2.625 C 20.609375 -0.582031 17.613281 0.4375 13.84375 0.4375 C 10.082031 0.4375 7.085938 -0.582031 4.859375 -2.625 C 2.640625 -4.675781 1.53125 -7.453125 1.53125 -10.953125 C 1.53125 -14.460938 2.640625 -17.238281 4.859375 -19.28125 Z M 8.59375 -3.578125 C 9.875 -1.773438 11.617188 -0.875 13.828125 -0.875 C 16.046875 -0.875 17.800781 -1.773438 19.09375 -3.578125 C 20.382812 -5.390625 21.03125 -7.847656 21.03125 -10.953125 C 21.03125 -14.054688 20.382812 -16.507812 19.09375 -18.3125 C 17.800781 -20.125 16.046875 -21.03125 13.828125 -21.03125 C 11.617188 -21.03125 9.875 -20.125 8.59375 -18.3125 C 7.3125 -16.507812 6.671875 -14.054688 6.671875 -10.953125 C 6.671875 -7.847656 7.3125 -5.390625 8.59375 -3.578125 Z M 8.59375 -3.578125 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(231.284489, 195.749987)"><g><path d="M 1.71875 -0.3125 C 2.257812 -0.3125 2.722656 -0.503906 3.109375 -0.890625 C 3.492188 -1.273438 3.695312 -1.738281 3.71875 -2.28125 L 3.71875 -19.625 C 3.695312 -20.164062 3.492188 -20.628906 3.109375 -21.015625 C 2.722656 -21.398438 2.257812 -21.59375 1.71875 -21.59375 L 1.3125 -21.59375 L 1.3125 -21.90625 L 10.828125 -21.90625 L 10.796875 -21.59375 L 10.421875 -21.59375 C 9.878906 -21.59375 9.410156 -21.398438 9.015625 -21.015625 C 8.617188 -20.628906 8.421875 -20.164062 8.421875 -19.625 L 8.421875 -1.34375 L 12.515625 -1.34375 C 14.035156 -1.34375 15.3125 -1.78125 16.34375 -2.65625 C 17.382812 -3.53125 18.15625 -4.773438 18.65625 -6.390625 L 18.96875 -6.390625 L 17.53125 0 L 1.3125 0 L 1.3125 -0.3125 Z M 1.71875 -0.3125 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(250.558535, 195.749987)"><g><path d="M 1.71875 -0.3125 C 2.257812 -0.3125 2.722656 -0.503906 3.109375 -0.890625 C 3.492188 -1.273438 3.695312 -1.738281 3.71875 -2.28125 L 3.71875 -19.65625 C 3.695312 -20.40625 3.351562 -20.96875 2.6875 -21.34375 C 2.394531 -21.507812 2.070312 -21.59375 1.71875 -21.59375 L 1.3125 -21.59375 L 1.3125 -21.90625 L 10.828125 -21.90625 L 10.796875 -21.59375 L 10.421875 -21.59375 C 9.671875 -21.59375 9.097656 -21.269531 8.703125 -20.625 C 8.515625 -20.332031 8.421875 -20.007812 8.421875 -19.65625 L 8.421875 -2.28125 C 8.421875 -1.738281 8.617188 -1.273438 9.015625 -0.890625 C 9.410156 -0.503906 9.878906 -0.3125 10.421875 -0.3125 L 10.796875 -0.3125 L 10.828125 0 L 1.3125 0 L 1.3125 -0.3125 Z M 24.3125 0 L 21.75 0 C 18.582031 0 16.335938 -0.863281 15.015625 -2.59375 C 11.285156 -7.664062 9.421875 -10.242188 9.421875 -10.328125 L 16.84375 -20.15625 C 17.007812 -20.363281 17.09375 -20.550781 17.09375 -20.71875 C 17.09375 -20.882812 17.0625 -21.03125 17 -21.15625 C 16.832031 -21.46875 16.539062 -21.625 16.125 -21.625 L 15.8125 -21.625 L 15.8125 -21.90625 L 22.96875 -21.90625 L 22.96875 -21.625 L 22.84375 -21.625 C 21.445312 -21.625 20.3125 -21.125 19.4375 -20.125 L 13.328125 -12.890625 L 21.125 -2.25 C 22.082031 -1 23.144531 -0.351562 24.3125 -0.3125 Z M 24.3125 0 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(274.244347, 195.749987)"><g><path d="M 1.71875 -0.3125 C 2.257812 -0.3125 2.722656 -0.503906 3.109375 -0.890625 C 3.492188 -1.273438 3.695312 -1.738281 3.71875 -2.28125 L 3.71875 -19.65625 C 3.695312 -20.195312 3.492188 -20.65625 3.109375 -21.03125 C 2.722656 -21.40625 2.257812 -21.59375 1.71875 -21.59375 L 1.3125 -21.59375 L 1.3125 -21.90625 L 10.828125 -21.90625 L 10.796875 -21.59375 L 10.421875 -21.59375 C 9.878906 -21.59375 9.410156 -21.40625 9.015625 -21.03125 C 8.617188 -20.65625 8.421875 -20.195312 8.421875 -19.65625 L 8.421875 -2.28125 C 8.421875 -1.738281 8.617188 -1.273438 9.015625 -0.890625 C 9.410156 -0.503906 9.878906 -0.3125 10.421875 -0.3125 L 10.796875 -0.3125 L 10.828125 0 L 1.3125 0 L 1.3125 -0.3125 Z M 1.71875 -0.3125 "/></g></g></g><g fill="#163b6d" fill-opacity="1"><g transform="translate(286.321914, 195.749987)"><g><path d="M 12.796875 -20.625 L 12.796875 -2.25 C 12.816406 -1.707031 13.019531 -1.25 13.40625 -0.875 C 13.789062 -0.5 14.253906 -0.3125 14.796875 -0.3125 L 15.171875 -0.3125 L 15.203125 0 L 5.703125 0 L 5.703125 -0.3125 L 6.109375 -0.3125 C 6.628906 -0.3125 7.082031 -0.5 7.46875 -0.875 C 7.851562 -1.25 8.066406 -1.695312 8.109375 -2.21875 L 8.109375 -20.625 L 3.875 -20.625 C 2.914062 -20.601562 2.15625 -20.300781 1.59375 -19.71875 C 1.03125 -19.132812 0.75 -18.375 0.75 -17.4375 L 0.75 -17.0625 L 0.4375 -17.0625 L 0.4375 -22.5 C 1.289062 -22.144531 2.519531 -21.957031 4.125 -21.9375 L 16.75 -21.9375 C 17.394531 -21.9375 18.097656 -22 18.859375 -22.125 C 19.617188 -22.25 20.144531 -22.375 20.4375 -22.5 L 20.4375 -17.0625 L 20.125 -17.0625 L 20.125 -17.4375 C 20.125 -18.726562 19.632812 -19.644531 18.65625 -20.1875 C 18.195312 -20.457031 17.644531 -20.601562 17 -20.625 Z M 12.796875 -20.625 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(105.323514, 211.853321)"><g><path d="M 6.34375 -8.40625 L 6.34375 -7.28125 L 4.09375 -7.28125 L 4.09375 0 L 2.71875 0 L 2.71875 -7.28125 L 0.46875 -7.28125 L 0.46875 -8.40625 Z M 6.34375 -8.40625 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(114.588803, 211.853321)"><g><path d="M 5.96875 -1.71875 L 2.453125 -1.71875 L 1.84375 0 L 0.40625 0 L 3.421875 -8.421875 L 5.015625 -8.421875 L 8.03125 0 L 6.578125 0 Z M 5.59375 -2.84375 L 4.21875 -6.75 L 2.84375 -2.84375 Z M 5.59375 -2.84375 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(125.46266, 211.853321)"><g><path d="M 7.8125 0 L 6.4375 0 L 2.28125 -6.28125 L 2.28125 0 L 0.90625 0 L 0.90625 -8.421875 L 2.28125 -8.421875 L 6.4375 -2.15625 L 6.4375 -8.421875 L 7.8125 -8.421875 Z M 7.8125 0 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(136.626779, 211.853321)"><g><path d="M 6.34375 -8.40625 L 6.34375 -7.28125 L 4.09375 -7.28125 L 4.09375 0 L 2.71875 0 L 2.71875 -7.28125 L 0.46875 -7.28125 L 0.46875 -8.40625 Z M 6.34375 -8.40625 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(145.892069, 211.853321)"><g><path d="M 5.96875 -1.71875 L 2.453125 -1.71875 L 1.84375 0 L 0.40625 0 L 3.421875 -8.421875 L 5.015625 -8.421875 L 8.03125 0 L 6.578125 0 Z M 5.59375 -2.84375 L 4.21875 -6.75 L 2.84375 -2.84375 Z M 5.59375 -2.84375 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(156.765928, 211.853321)"><g/></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(162.354514, 211.853321)"><g><path d="M 2.28125 -8.40625 L 2.28125 0 L 0.90625 0 L 0.90625 -8.40625 Z M 2.28125 -8.40625 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(167.991479, 211.853321)"><g><path d="M 7.8125 0 L 6.4375 0 L 2.28125 -6.28125 L 2.28125 0 L 0.90625 0 L 0.90625 -8.421875 L 2.28125 -8.421875 L 6.4375 -2.15625 L 6.4375 -8.421875 L 7.8125 -8.421875 Z M 7.8125 0 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(179.155601, 211.853321)"><g><path d="M 7.8125 0 L 6.4375 0 L 2.28125 -6.28125 L 2.28125 0 L 0.90625 0 L 0.90625 -8.421875 L 2.28125 -8.421875 L 6.4375 -2.15625 L 6.4375 -8.421875 L 7.8125 -8.421875 Z M 7.8125 0 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(190.319723, 211.853321)"><g><path d="M 4.734375 0.078125 C 3.953125 0.078125 3.234375 -0.101562 2.578125 -0.46875 C 1.921875 -0.832031 1.398438 -1.34375 1.015625 -2 C 0.640625 -2.65625 0.453125 -3.394531 0.453125 -4.21875 C 0.453125 -5.039062 0.640625 -5.773438 1.015625 -6.421875 C 1.398438 -7.078125 1.921875 -7.585938 2.578125 -7.953125 C 3.234375 -8.328125 3.953125 -8.515625 4.734375 -8.515625 C 5.523438 -8.515625 6.25 -8.328125 6.90625 -7.953125 C 7.5625 -7.585938 8.078125 -7.078125 8.453125 -6.421875 C 8.835938 -5.773438 9.03125 -5.039062 9.03125 -4.21875 C 9.03125 -3.394531 8.835938 -2.65625 8.453125 -2 C 8.078125 -1.34375 7.5625 -0.832031 6.90625 -0.46875 C 6.25 -0.101562 5.523438 0.078125 4.734375 0.078125 Z M 4.734375 -1.109375 C 5.296875 -1.109375 5.789062 -1.234375 6.21875 -1.484375 C 6.65625 -1.742188 7 -2.109375 7.25 -2.578125 C 7.5 -3.054688 7.625 -3.601562 7.625 -4.21875 C 7.625 -4.84375 7.5 -5.390625 7.25 -5.859375 C 7 -6.328125 6.65625 -6.679688 6.21875 -6.921875 C 5.789062 -7.171875 5.296875 -7.296875 4.734375 -7.296875 C 4.179688 -7.296875 3.6875 -7.171875 3.25 -6.921875 C 2.8125 -6.679688 2.46875 -6.328125 2.21875 -5.859375 C 1.976562 -5.390625 1.859375 -4.84375 1.859375 -4.21875 C 1.859375 -3.601562 1.976562 -3.054688 2.21875 -2.578125 C 2.46875 -2.109375 2.8125 -1.742188 3.25 -1.484375 C 3.6875 -1.234375 4.179688 -1.109375 4.734375 -1.109375 Z M 4.734375 -1.109375 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(202.245801, 211.853321)"><g><path d="M 8.15625 -8.40625 L 5 0 L 3.390625 0 L 0.234375 -8.40625 L 1.703125 -8.40625 L 4.203125 -1.421875 L 6.703125 -8.40625 Z M 8.15625 -8.40625 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(213.083368, 211.853321)"><g><path d="M 5.96875 -1.71875 L 2.453125 -1.71875 L 1.84375 0 L 0.40625 0 L 3.421875 -8.421875 L 5.015625 -8.421875 L 8.03125 0 L 6.578125 0 Z M 5.59375 -2.84375 L 4.21875 -6.75 L 2.84375 -2.84375 Z M 5.59375 -2.84375 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(223.957227, 211.853321)"><g><path d="M 6.34375 -8.40625 L 6.34375 -7.28125 L 4.09375 -7.28125 L 4.09375 0 L 2.71875 0 L 2.71875 -7.28125 L 0.46875 -7.28125 L 0.46875 -8.40625 Z M 6.34375 -8.40625 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(233.222518, 211.853321)"><g><path d="M 2.28125 -8.40625 L 2.28125 0 L 0.90625 0 L 0.90625 -8.40625 Z M 2.28125 -8.40625 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(238.859487, 211.853321)"><g><path d="M 8.15625 -8.40625 L 5 0 L 3.390625 0 L 0.234375 -8.40625 L 1.703125 -8.40625 L 4.203125 -1.421875 L 6.703125 -8.40625 Z M 8.15625 -8.40625 "/></g></g></g><g fill="#4f4c4c" fill-opacity="1"><g transform="translate(249.697054, 211.853321)"><g><path d="M 2.28125 -7.296875 L 2.28125 -4.828125 L 5.1875 -4.828125 L 5.1875 -3.703125 L 2.28125 -3.703125 L 2.28125 -1.125 L 5.546875 -1.125 L 5.546875 0 L 0.90625 0 L 0.90625 -8.421875 L 5.546875 -8.421875 L 5.546875 -7.296875 Z M 2.28125 -7.296875 "/></g></g></g></svg>
Binary file
Binary file
@@ -0,0 +1 @@
1
+ {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
@@ -0,0 +1 @@
1
+ <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
@@ -0,0 +1,108 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generated by Pixelmator Pro 3.6.17 -->
3
+ <svg width="500" height="500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
4
+ <clipPath id="clipPath1">
5
+ <path d="M 117.984375 129.010437 L 317.333344 129.010437 L 317.333344 371.010422 L 117.984375 371.010422 Z M 117.984375 129.010437"/>
6
+ </clipPath>
7
+ <g id="Group" clip-path="url(#clipPath1)">
8
+ <image id="Path" x="121" y="129" width="196" height="242" xlink:href="data:image/png;base64, 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"/>
9
+ </g>
10
+ <clipPath id="clipPath2">
11
+ <path d="M 200 153.333344 L 358.984375 153.333344 L 358.984375 346.666672 L 200 346.666672 Z M 200 153.333344"/>
12
+ </clipPath>
13
+ <g id="g1" clip-path="url(#clipPath2)">
14
+ <image id="image1" x="201" y="153" width="155" height="194" xlink:href="data:image/png;base64, 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"/>
15
+ </g>
16
+ <clipPath id="clipPath3">
17
+ <path d="M 108.005211 220.057312 L 369.343742 220.057312 L 369.343742 291.927094 L 108.005211 291.927094 Z M 108.005211 220.057312"/>
18
+ </clipPath>
19
+ <g id="g2" clip-path="url(#clipPath3)"/>
20
+ <g id="g3">
21
+ <g id="g4">
22
+ <g id="g5">
23
+ <path id="path1" fill="#163b6d" stroke="none" d="M 112.870781 224.208313 C 111.89682 224.208313 111.162445 224.625 110.662445 225.458313 C 110.438484 225.822906 110.313484 226.239563 110.287445 226.708313 L 110.287445 248.249985 C 110.287445 250.114578 110.412445 251.682281 110.662445 252.958328 L 110.787445 253.583328 L 110.412445 253.583328 L 89.349945 233.520813 L 89.349945 250.083328 C 89.349945 250.781235 89.599945 251.369781 90.099945 251.854156 C 90.599945 252.343735 91.193695 252.583328 91.891609 252.583328 L 92.683281 252.583328 L 92.683281 252.999985 L 80.037445 252.999985 L 80.037445 252.583328 L 80.787445 252.583328 C 81.506195 252.583328 82.120781 252.343735 82.620781 251.854156 C 83.120781 251.369781 83.370781 250.76561 83.370781 250.041656 L 83.370781 228.375 C 83.370781 226.541656 83.245781 225.015625 82.995781 223.791656 L 82.912445 223.166656 L 83.287445 223.166656 L 104.370781 243.229156 L 104.370781 226.75 C 104.339531 226.03125 104.079109 225.427063 103.579109 224.9375 C 103.079109 224.453125 102.480156 224.208313 101.787445 224.208313 L 101.037445 224.208313 L 101.037445 223.791656 L 113.683281 223.791656 L 113.683281 224.208313 Z M 112.870781 224.208313"/>
24
+ </g>
25
+ </g>
26
+ </g>
27
+ <g id="g6">
28
+ <g id="g7">
29
+ <g id="g8">
30
+ <path id="path2" fill="#163b6d" stroke="none" d="M 131.769974 223.791656 C 136.697052 223.791656 140.592896 225.098938 143.457474 227.708313 C 146.316849 230.322906 147.749146 233.885406 147.749146 238.395844 C 147.749146 242.895844 146.316849 246.458328 143.457474 249.083328 C 140.592896 251.697906 136.697052 252.999985 131.769974 252.999985 L 116.624146 252.999985 L 116.624146 252.583328 L 117.16581 252.583328 C 117.88456 252.583328 118.504349 252.32811 119.019974 251.812485 C 119.530396 251.302078 119.801224 250.682281 119.832474 249.958328 L 119.832474 226.583313 C 119.832474 225.916656 119.561646 225.354156 119.019974 224.895813 C 118.47831 224.4375 117.858521 224.208313 117.16581 224.208313 L 116.624146 224.208313 L 116.624146 223.791656 Z M 131.228302 251.208328 C 133.228302 251.208328 134.957474 250.697906 136.415802 249.666656 C 137.884552 248.64061 139.009552 247.161453 139.790802 245.229156 C 140.566849 243.286469 140.957474 241.177094 140.957474 238.895844 C 140.957474 236.619781 140.728302 234.682281 140.269974 233.083313 C 139.811646 231.473938 139.165802 230.114563 138.332474 229 C 136.608521 226.697906 134.238724 225.541656 131.228302 225.541656 L 126.10331 225.541656 L 126.10331 251.208328 Z M 131.228302 251.208328"/>
31
+ </g>
32
+ </g>
33
+ </g>
34
+ <g id="g9">
35
+ <g id="g10">
36
+ <g id="g11">
37
+ <path id="path3" fill="#163b6d" stroke="none" d="M 175.583908 232.125 C 175.583908 233.416656 175.333908 234.635406 174.833908 235.770813 C 173.886002 237.96875 172.130783 239.46875 169.56308 240.270844 C 168.81308 240.520844 168.115158 240.645844 167.479752 240.645844 C 165.505783 240.645844 163.740158 240.135406 162.18808 239.104156 L 162.18808 238.6875 C 164.271408 238.744781 165.948502 238.0625 167.229752 236.645844 C 168.339127 235.427063 168.896408 233.822906 168.896408 231.833313 C 168.896408 229.833313 168.417252 228.286438 167.458908 227.1875 C 166.50058 226.09375 165.198502 225.541656 163.56308 225.541656 L 160.771408 225.541656 L 160.771408 249.958328 C 160.771408 250.682281 161.03183 251.302078 161.56308 251.812485 C 162.089127 252.32811 162.714127 252.583328 163.43808 252.583328 L 163.979752 252.583328 L 163.979752 252.999985 L 151.292252 252.999985 L 151.292252 252.583328 L 151.833908 252.583328 C 152.552658 252.583328 153.172455 252.32811 153.68808 251.812485 C 154.198502 251.302078 154.46933 250.682281 154.50058 249.958328 L 154.50058 226.625 C 154.50058 225.932281 154.234955 225.354156 153.708908 224.895813 C 153.177658 224.4375 152.552658 224.208313 151.833908 224.208313 L 151.292252 224.208313 L 151.292252 223.791656 L 165.229752 223.791656 C 168.630783 223.791656 171.193283 224.515625 172.917252 225.958313 C 174.693283 227.489563 175.583908 229.541656 175.583908 232.125 Z M 175.583908 232.125"/>
38
+ </g>
39
+ </g>
40
+ </g>
41
+ <g id="g12">
42
+ <g id="g13">
43
+ <g id="g14">
44
+ <path id="path4" fill="#163b6d" stroke="none" d="M 190.01384 225.625 L 188.222168 225.625 C 188.164886 225.625 188.123215 225.625 188.097168 225.625 L 188.097168 249.958328 C 188.123215 250.682281 188.394043 251.302078 188.909668 251.812485 C 189.42009 252.32811 190.039886 252.583328 190.76384 252.583328 L 191.305511 252.583328 L 191.305511 252.999985 L 178.618011 252.999985 L 178.618011 252.583328 L 179.159668 252.583328 C 180.159668 252.583328 180.92009 252.156235 181.45134 251.291656 C 181.67009 250.906235 181.79509 250.473953 181.82634 249.999985 L 181.82634 226.833313 C 181.79509 226.114563 181.524261 225.494781 181.01384 224.979156 C 180.498215 224.46875 179.878418 224.208313 179.159668 224.208313 L 178.618011 224.208313 L 178.618011 223.791656 L 192.930511 223.791656 C 195.623215 223.791656 197.909668 224.375 199.784668 225.541656 C 200.727386 226.125 201.477386 226.9375 202.034668 227.979156 C 202.586761 229.020813 202.868011 230.390625 202.868011 232.083313 C 202.868011 233.765625 202.284668 235.385406 201.118011 236.9375 C 199.95134 238.494781 198.248215 239.385406 196.01384 239.604156 C 197.63884 240.135406 199.060715 241.354156 200.284668 243.270844 C 203.284668 248.093735 205.503418 250.958328 206.95134 251.874985 C 207.67009 252.322906 208.57634 252.557281 209.659668 252.583328 L 209.659668 252.999985 L 205.57634 252.999985 C 203.159668 252.999985 201.144043 252.682281 199.534668 252.041656 C 197.935715 251.406235 196.680511 250.281235 195.76384 248.666656 C 195.23259 247.749985 194.081543 245.369781 192.305511 241.520844 C 191.524261 239.828125 190.581543 238.895844 189.472168 238.729156 L 189.472168 238.3125 L 190.76384 238.3125 C 192.01384 238.3125 193.118011 237.9375 194.07634 237.1875 C 195.034668 236.4375 195.680511 235.21875 196.01384 233.520813 C 196.123215 232.9375 196.180511 232.473938 196.180511 232.125 C 196.180511 229.848938 195.722168 228.203125 194.805511 227.1875 C 193.88884 226.177063 192.706543 225.65625 191.26384 225.625 C 190.98259 225.625 190.565918 225.625 190.01384 225.625 Z M 190.01384 225.625"/>
45
+ </g>
46
+ </g>
47
+ </g>
48
+ <g id="g15">
49
+ <g id="g16">
50
+ <g id="g17"/>
51
+ </g>
52
+ </g>
53
+ <g id="g18">
54
+ <g id="g19">
55
+ <g id="g20">
56
+ <path id="path5" fill="#163b6d" stroke="none" d="M 235.399063 225.5 L 235.399063 249.999985 C 235.42511 250.723953 235.695938 251.333328 236.211563 251.833328 C 236.721985 252.333328 237.341782 252.583328 238.065735 252.583328 L 238.565735 252.583328 L 238.607407 252.999985 L 225.940735 252.999985 L 225.940735 252.583328 L 226.482407 252.583328 C 227.17511 252.583328 227.779282 252.333328 228.294907 251.833328 C 228.805313 251.333328 229.091782 250.739578 229.149063 250.041656 L 229.149063 225.5 L 223.503235 225.5 C 222.221985 225.53125 221.211563 225.932281 220.461563 226.708313 C 219.711563 227.489563 219.336563 228.5 219.336563 229.75 L 219.336563 230.25 L 218.919907 230.25 L 218.919907 223 C 220.055313 223.473938 221.695938 223.723938 223.836563 223.75 L 240.669907 223.75 C 241.529282 223.75 242.466782 223.666656 243.482407 223.5 C 244.492813 223.333313 245.195938 223.166656 245.586563 223 L 245.586563 230.25 L 245.169907 230.25 L 245.169907 229.75 C 245.169907 228.03125 244.513657 226.807281 243.211563 226.083313 C 242.596985 225.723938 241.86261 225.53125 241.003235 225.5 Z M 235.399063 225.5"/>
57
+ </g>
58
+ </g>
59
+ </g>
60
+ <g id="g21">
61
+ <g id="g22">
62
+ <g id="g23">
63
+ <path id="path6" fill="#163b6d" stroke="none" d="M 252.600403 227.291656 C 255.569153 224.572906 259.563934 223.208313 264.579559 223.208313 C 269.605621 223.208313 273.600403 224.572906 276.558746 227.291656 C 279.527496 230.015625 281.017059 233.71875 281.017059 238.395844 C 281.017059 243.0625 279.527496 246.76561 276.558746 249.499985 C 273.600403 252.223953 269.605621 253.583328 264.579559 253.583328 C 259.563934 253.583328 255.569153 252.223953 252.600403 249.499985 C 249.642075 246.76561 248.162903 243.0625 248.162903 238.395844 C 248.162903 233.71875 249.642075 230.015625 252.600403 227.291656 Z M 257.579559 248.229156 C 259.287903 250.635406 261.610809 251.833328 264.558716 251.833328 C 267.517059 251.833328 269.855621 250.635406 271.579559 248.229156 C 273.298309 245.812485 274.162903 242.536469 274.162903 238.395844 C 274.162903 234.260406 273.298309 230.989563 271.579559 228.583313 C 269.855621 226.166656 267.517059 224.958313 264.558716 224.958313 C 261.610809 224.958313 259.287903 226.166656 257.579559 228.583313 C 255.871231 230.989563 255.017075 234.260406 255.017075 238.395844 C 255.017075 242.536469 255.871231 245.812485 257.579559 248.229156 Z M 257.579559 248.229156"/>
64
+ </g>
65
+ </g>
66
+ </g>
67
+ <g id="g24">
68
+ <g id="g25">
69
+ <g id="g26">
70
+ <path id="path7" fill="#163b6d" stroke="none" d="M 289.229431 227.291656 C 292.198181 224.572906 296.192993 223.208313 301.208618 223.208313 C 306.23465 223.208313 310.229431 224.572906 313.187775 227.291656 C 316.156525 230.015625 317.646118 233.71875 317.646118 238.395844 C 317.646118 243.0625 316.156525 246.76561 313.187775 249.499985 C 310.229431 252.223953 306.23465 253.583328 301.208618 253.583328 C 296.192993 253.583328 292.198181 252.223953 289.229431 249.499985 C 286.271118 246.76561 284.791931 243.0625 284.791931 238.395844 C 284.791931 233.71875 286.271118 230.015625 289.229431 227.291656 Z M 294.208618 248.229156 C 295.916931 250.635406 298.239868 251.833328 301.187775 251.833328 C 304.146118 251.833328 306.48465 250.635406 308.208618 248.229156 C 309.927368 245.812485 310.791931 242.536469 310.791931 238.395844 C 310.791931 234.260406 309.927368 230.989563 308.208618 228.583313 C 306.48465 226.166656 304.146118 224.958313 301.187775 224.958313 C 298.239868 224.958313 295.916931 226.166656 294.208618 228.583313 C 292.500275 230.989563 291.646118 234.260406 291.646118 238.395844 C 291.646118 242.536469 292.500275 245.812485 294.208618 248.229156 Z M 294.208618 248.229156"/>
71
+ </g>
72
+ </g>
73
+ </g>
74
+ <g id="g27">
75
+ <g id="g28">
76
+ <g id="g29">
77
+ <path id="path8" fill="#163b6d" stroke="none" d="M 321.67099 252.583328 C 322.38974 252.583328 323.009521 252.32811 323.525146 251.812485 C 324.035583 251.302078 324.306396 250.682281 324.337646 249.958328 L 324.337646 226.833313 C 324.306396 226.114563 324.035583 225.494781 323.525146 224.979156 C 323.009521 224.46875 322.38974 224.208313 321.67099 224.208313 L 321.129333 224.208313 L 321.129333 223.791656 L 333.816833 223.791656 L 333.775146 224.208313 L 333.275146 224.208313 C 332.551208 224.208313 331.926208 224.46875 331.400146 224.979156 C 330.868896 225.494781 330.60849 226.114563 330.60849 226.833313 L 330.60849 251.208328 L 336.066833 251.208328 C 338.092865 251.208328 339.79599 250.624985 341.17099 249.458328 C 342.556396 248.291656 343.587646 246.635406 344.254333 244.479156 L 344.67099 244.479156 L 342.754333 252.999985 L 321.129333 252.999985 L 321.129333 252.583328 Z M 321.67099 252.583328"/>
78
+ </g>
79
+ </g>
80
+ </g>
81
+ <g id="g30">
82
+ <g id="g31">
83
+ <g id="g32">
84
+ <path id="path9" fill="#163b6d" stroke="none" d="M 347.36972 252.583328 C 348.08847 252.583328 348.708252 252.32811 349.223877 251.812485 C 349.734283 251.302078 350.005127 250.682281 350.036377 249.958328 L 350.036377 226.791656 C 350.005127 225.791656 349.546783 225.041656 348.661377 224.541656 C 348.270752 224.322906 347.83847 224.208313 347.36972 224.208313 L 346.828033 224.208313 L 346.828033 223.791656 L 359.515533 223.791656 L 359.473877 224.208313 L 358.973877 224.208313 C 357.973877 224.208313 357.208252 224.640625 356.68222 225.5 C 356.43222 225.890625 356.30722 226.322906 356.30722 226.791656 L 356.30722 249.958328 C 356.30722 250.682281 356.567627 251.302078 357.098877 251.812485 C 357.624908 252.32811 358.249908 252.583328 358.973877 252.583328 L 359.473877 252.583328 L 359.515533 252.999985 L 346.828033 252.999985 L 346.828033 252.583328 Z M 377.49472 252.999985 L 374.078033 252.999985 C 369.854095 252.999985 366.859283 251.848953 365.098877 249.541656 C 360.124908 242.78125 357.640533 239.34375 357.640533 239.229156 L 367.536377 226.125 C 367.755127 225.848938 367.86972 225.598938 367.86972 225.375 C 367.86972 225.15625 367.828033 224.958313 367.74472 224.791656 C 367.520752 224.375 367.130127 224.166656 366.578033 224.166656 L 366.161377 224.166656 L 366.161377 223.791656 L 375.703033 223.791656 L 375.703033 224.166656 L 375.536377 224.166656 C 373.671783 224.166656 372.161377 224.833313 370.99472 226.166656 L 362.848877 235.8125 L 373.24472 249.999985 C 374.520752 251.666656 375.937408 252.531235 377.49472 252.583328 Z M 377.49472 252.999985"/>
85
+ </g>
86
+ </g>
87
+ </g>
88
+ <g id="g33">
89
+ <g id="g34">
90
+ <g id="g35">
91
+ <path id="path10" fill="#163b6d" stroke="none" d="M 378.950806 252.583328 C 379.669556 252.583328 380.289337 252.32811 380.804962 251.812485 C 381.315369 251.302078 381.586212 250.682281 381.617462 249.958328 L 381.617462 226.791656 C 381.586212 226.072906 381.315369 225.458313 380.804962 224.958313 C 380.289337 224.458313 379.669556 224.208313 378.950806 224.208313 L 378.409119 224.208313 L 378.409119 223.791656 L 391.096619 223.791656 L 391.054962 224.208313 L 390.554962 224.208313 C 389.830994 224.208313 389.205994 224.458313 388.679962 224.958313 C 388.148712 225.458313 387.888306 226.072906 387.888306 226.791656 L 387.888306 249.958328 C 387.888306 250.682281 388.148712 251.302078 388.679962 251.812485 C 389.205994 252.32811 389.830994 252.583328 390.554962 252.583328 L 391.054962 252.583328 L 391.096619 252.999985 L 378.409119 252.999985 L 378.409119 252.583328 Z M 378.950806 252.583328"/>
92
+ </g>
93
+ </g>
94
+ </g>
95
+ <g id="g36">
96
+ <g id="g37">
97
+ <g id="g38">
98
+ <path id="path11" fill="#163b6d" stroke="none" d="M 409.825043 225.5 L 409.825043 249.999985 C 409.851105 250.723953 410.121918 251.333328 410.637543 251.833328 C 411.14798 252.333328 411.767761 252.583328 412.49173 252.583328 L 412.99173 252.583328 L 413.033386 252.999985 L 400.36673 252.999985 L 400.36673 252.583328 L 400.908386 252.583328 C 401.601105 252.583328 402.205261 252.333328 402.720886 251.833328 C 403.231293 251.333328 403.517761 250.739578 403.575043 250.041656 L 403.575043 225.5 L 397.92923 225.5 C 396.64798 225.53125 395.637543 225.932281 394.887543 226.708313 C 394.137543 227.489563 393.762543 228.5 393.762543 229.75 L 393.762543 230.25 L 393.345886 230.25 L 393.345886 223 C 394.481293 223.473938 396.121918 223.723938 398.262543 223.75 L 415.095886 223.75 C 415.955261 223.75 416.892761 223.666656 417.908386 223.5 C 418.918793 223.333313 419.621918 223.166656 420.012543 223 L 420.012543 230.25 L 419.595886 230.25 L 419.595886 229.75 C 419.595886 228.03125 418.939636 226.807281 417.637543 226.083313 C 417.02298 225.723938 416.288605 225.53125 415.42923 225.5 Z M 409.825043 225.5"/>
99
+ </g>
100
+ </g>
101
+ </g>
102
+ <text id="TANTA-INNOVATIVE-OPENSOURCE" xml:space="preserve" x="97" y="272" font-family="Helvetica" font-size="18" font-weight="700" fill="#4f4c4c">TANTA INNOVATIVE OPENSOURCE</text>
103
+ <g id="g39">
104
+ <g id="g40">
105
+ <g id="g41"/>
106
+ </g>
107
+ </g>
108
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Example test file for NDPR-Toolkit
3
+ *
4
+ * This file demonstrates how to structure tests for the NDPR-Toolkit.
5
+ * Add your actual tests in this directory following a similar pattern.
6
+ */
7
+
8
+ describe('NDPR-Toolkit', () => {
9
+ test('example test setup', () => {
10
+ // This is just a placeholder test to demonstrate the test structure
11
+ expect(true).toBe(true);
12
+ });
13
+ });