@tantainnovative/ndpr-toolkit 1.0.3 → 1.0.5

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 (110) hide show
  1. package/next-env.d.ts +5 -0
  2. package/package.json +1 -1
  3. package/packages/ndpr-toolkit/dist/components/breach/BreachNotificationManager.d.ts +62 -0
  4. package/packages/ndpr-toolkit/dist/components/breach/BreachReportForm.d.ts +66 -0
  5. package/packages/ndpr-toolkit/dist/components/breach/BreachRiskAssessment.d.ts +50 -0
  6. package/packages/ndpr-toolkit/dist/components/breach/RegulatoryReportGenerator.d.ts +94 -0
  7. package/packages/ndpr-toolkit/dist/components/consent/ConsentBanner.d.ts +79 -0
  8. package/packages/ndpr-toolkit/dist/components/consent/ConsentManager.d.ts +73 -0
  9. package/packages/ndpr-toolkit/dist/components/consent/ConsentStorage.d.ts +41 -0
  10. package/packages/ndpr-toolkit/dist/components/dpia/DPIAQuestionnaire.d.ts +70 -0
  11. package/packages/ndpr-toolkit/dist/components/dpia/DPIAReport.d.ts +40 -0
  12. package/packages/ndpr-toolkit/dist/components/dpia/StepIndicator.d.ts +64 -0
  13. package/packages/ndpr-toolkit/dist/components/dsr/DSRDashboard.d.ts +58 -0
  14. package/packages/ndpr-toolkit/dist/components/dsr/DSRRequestForm.d.ts +74 -0
  15. package/packages/ndpr-toolkit/dist/components/dsr/DSRTracker.d.ts +56 -0
  16. package/packages/ndpr-toolkit/dist/components/policy/PolicyExporter.d.ts +65 -0
  17. package/packages/ndpr-toolkit/dist/components/policy/PolicyGenerator.d.ts +54 -0
  18. package/packages/ndpr-toolkit/dist/components/policy/PolicyPreview.d.ts +71 -0
  19. package/packages/ndpr-toolkit/dist/hooks/useBreach.d.ts +97 -0
  20. package/packages/ndpr-toolkit/dist/hooks/useConsent.d.ts +63 -0
  21. package/packages/ndpr-toolkit/dist/hooks/useDPIA.d.ts +92 -0
  22. package/packages/ndpr-toolkit/dist/hooks/useDSR.d.ts +72 -0
  23. package/packages/ndpr-toolkit/dist/hooks/usePrivacyPolicy.d.ts +87 -0
  24. package/packages/ndpr-toolkit/dist/index.d.ts +31 -0
  25. package/packages/ndpr-toolkit/dist/index.esm.js +2 -0
  26. package/packages/ndpr-toolkit/dist/index.esm.js.map +1 -0
  27. package/packages/ndpr-toolkit/dist/index.js +2 -0
  28. package/packages/ndpr-toolkit/dist/index.js.map +1 -0
  29. package/packages/ndpr-toolkit/dist/setupTests.d.ts +2 -0
  30. package/packages/ndpr-toolkit/dist/types/breach.d.ts +239 -0
  31. package/packages/ndpr-toolkit/dist/types/consent.d.ts +95 -0
  32. package/packages/ndpr-toolkit/dist/types/dpia.d.ts +196 -0
  33. package/packages/ndpr-toolkit/dist/types/dsr.d.ts +162 -0
  34. package/packages/ndpr-toolkit/dist/types/privacy.d.ts +204 -0
  35. package/packages/ndpr-toolkit/dist/utils/breach.d.ts +14 -0
  36. package/packages/ndpr-toolkit/dist/utils/consent.d.ts +10 -0
  37. package/packages/ndpr-toolkit/dist/utils/dpia.d.ts +12 -0
  38. package/packages/ndpr-toolkit/dist/utils/dsr.d.ts +11 -0
  39. package/packages/ndpr-toolkit/dist/utils/privacy.d.ts +12 -0
  40. package/src/components/consent/ConsentBanner.tsx +82 -48
  41. package/src/components/data-subject-rights/DataSubjectRequestForm.tsx +240 -129
  42. package/src/components/dpia/DPIAQuestionnaire.tsx +162 -122
  43. package/src/components/privacy-policy/PolicyGenerator.tsx +5 -5
  44. package/src/components/privacy-policy/steps/CustomSectionsStep.tsx +103 -77
  45. package/src/components/privacy-policy/steps/PolicyPreviewStep.tsx +117 -63
  46. package/src/hooks/useConsent.ts +16 -10
  47. package/src/lib/consentService.ts +44 -37
  48. package/src/lib/dpiaQuestions.ts +139 -99
  49. package/src/lib/requestService.ts +21 -17
  50. package/src/types/index.ts +13 -8
  51. package/.claude/settings.local.json +0 -20
  52. package/.eslintrc.json +0 -10
  53. package/.github/workflows/ci.yml +0 -36
  54. package/.github/workflows/nextjs.yml +0 -104
  55. package/.husky/commit-msg +0 -4
  56. package/.husky/pre-commit +0 -4
  57. package/.lintstagedrc.js +0 -4
  58. package/.nvmrc +0 -1
  59. package/.versionrc +0 -17
  60. package/CLAUDE.md +0 -90
  61. package/commitlint.config.js +0 -36
  62. package/jest.config.js +0 -31
  63. package/jest.setup.js +0 -15
  64. package/packages/ndpr-toolkit/jest.config.js +0 -23
  65. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentBanner.test.tsx +0 -119
  66. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentManager.test.tsx +0 -122
  67. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentStorage.test.tsx +0 -270
  68. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRDashboard.test.tsx +0 -199
  69. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRRequestForm.test.tsx +0 -224
  70. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRTracker.test.tsx +0 -104
  71. package/packages/ndpr-toolkit/src/__tests__/hooks/useConsent.test.tsx +0 -161
  72. package/packages/ndpr-toolkit/src/__tests__/hooks/useDSR.test.tsx +0 -330
  73. package/packages/ndpr-toolkit/src/__tests__/utils/breach.test.ts +0 -149
  74. package/packages/ndpr-toolkit/src/__tests__/utils/consent.test.ts +0 -88
  75. package/packages/ndpr-toolkit/src/__tests__/utils/dpia.test.ts +0 -160
  76. package/packages/ndpr-toolkit/src/__tests__/utils/dsr.test.ts +0 -110
  77. package/packages/ndpr-toolkit/src/__tests__/utils/privacy.test.ts +0 -97
  78. package/src/__tests__/example.test.ts +0 -13
  79. package/src/__tests__/requestService.test.ts +0 -57
  80. package/src/app/docs/components/DocLayout.tsx +0 -267
  81. package/src/app/docs/components/breach-notification/page.tsx +0 -797
  82. package/src/app/docs/components/consent-management/page.tsx +0 -576
  83. package/src/app/docs/components/data-subject-rights/page.tsx +0 -511
  84. package/src/app/docs/components/dpia-questionnaire/layout.tsx +0 -15
  85. package/src/app/docs/components/dpia-questionnaire/metadata.ts +0 -31
  86. package/src/app/docs/components/dpia-questionnaire/page.tsx +0 -666
  87. package/src/app/docs/components/hooks/page.tsx +0 -305
  88. package/src/app/docs/components/page.tsx +0 -84
  89. package/src/app/docs/components/privacy-policy-generator/page.tsx +0 -634
  90. package/src/app/docs/guides/breach-notification-process/components/BestPractices.tsx +0 -123
  91. package/src/app/docs/guides/breach-notification-process/components/ImplementationSteps.tsx +0 -328
  92. package/src/app/docs/guides/breach-notification-process/components/Introduction.tsx +0 -28
  93. package/src/app/docs/guides/breach-notification-process/components/NotificationTimeline.tsx +0 -91
  94. package/src/app/docs/guides/breach-notification-process/components/Resources.tsx +0 -118
  95. package/src/app/docs/guides/breach-notification-process/page.tsx +0 -39
  96. package/src/app/docs/guides/conducting-dpia/page.tsx +0 -593
  97. package/src/app/docs/guides/data-subject-requests/page.tsx +0 -666
  98. package/src/app/docs/guides/managing-consent/page.tsx +0 -738
  99. package/src/app/docs/guides/ndpr-compliance-checklist/components/ComplianceChecklist.tsx +0 -296
  100. package/src/app/docs/guides/ndpr-compliance-checklist/components/ImplementationTools.tsx +0 -145
  101. package/src/app/docs/guides/ndpr-compliance-checklist/components/Introduction.tsx +0 -33
  102. package/src/app/docs/guides/ndpr-compliance-checklist/components/KeyRequirements.tsx +0 -99
  103. package/src/app/docs/guides/ndpr-compliance-checklist/components/Resources.tsx +0 -159
  104. package/src/app/docs/guides/ndpr-compliance-checklist/page.tsx +0 -38
  105. package/src/app/docs/guides/page.tsx +0 -67
  106. package/src/app/docs/layout.tsx +0 -15
  107. package/src/app/docs/metadata.ts +0 -31
  108. package/src/app/docs/page.tsx +0 -572
  109. package/src/components/docs/DocLayout.tsx +0 -289
  110. package/src/components/docs/index.ts +0 -2
@@ -1,289 +0,0 @@
1
- 'use client';
2
-
3
- import React, { useState } from 'react';
4
- import Link from 'next/link';
5
- import { usePathname } from 'next/navigation';
6
- import { Button } from '@/components/ui/Button';
7
-
8
- type NavItem = {
9
- title: string;
10
- href: string;
11
- icon?: React.ReactNode;
12
- children?: NavItem[];
13
- };
14
-
15
- type DocLayoutProps = {
16
- children: React.ReactNode;
17
- title: string;
18
- description?: string;
19
- };
20
-
21
- const navigation: NavItem[] = [
22
- {
23
- title: 'Getting Started',
24
- href: '/docs',
25
- icon: (
26
- <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
27
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
28
- </svg>
29
- ),
30
- },
31
- {
32
- title: 'Components',
33
- href: '/docs/components',
34
- icon: (
35
- <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
36
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z" />
37
- </svg>
38
- ),
39
- children: [
40
- { title: 'DPIA Questionnaire', href: '/docs/components/dpia-questionnaire' },
41
- { title: 'Consent Management', href: '/docs/components/consent-management' },
42
- { title: 'Data Subject Rights', href: '/docs/components/data-subject-rights' },
43
- { title: 'Breach Notification', href: '/docs/components/breach-notification' },
44
- { title: 'Privacy Policy Generator', href: '/docs/components/privacy-policy-generator' },
45
- ],
46
- },
47
- {
48
- title: 'Implementation Guides',
49
- href: '/docs/guides',
50
- icon: (
51
- <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
52
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" />
53
- </svg>
54
- ),
55
- children: [
56
- { title: 'NDPR Compliance Checklist', href: '/docs/guides/ndpr-compliance-checklist' },
57
- { title: 'Conducting a DPIA', href: '/docs/guides/conducting-dpia' },
58
- { title: 'Managing Consent', href: '/docs/guides/managing-consent' },
59
- { title: 'Handling Data Subject Requests', href: '/docs/guides/data-subject-requests' },
60
- { title: 'Breach Notification Process', href: '/docs/guides/breach-notification-process' },
61
- ],
62
- },
63
- // {
64
- // title: 'API Reference',
65
- // href: '#',
66
- // icon: (
67
- // <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
68
- // <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" />
69
- // </svg>
70
- // ),
71
- // },
72
- ];
73
-
74
- export function DocLayout({ children, title, description }: DocLayoutProps) {
75
- const pathname = usePathname();
76
- const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
77
-
78
- // Function to check if a nav item is active
79
- const isActive = (href: string) => {
80
- if (href === '/docs' && pathname === '/docs') {
81
- return true;
82
- }
83
- return pathname !== '/docs' && pathname.startsWith(href);
84
- };
85
-
86
- // Function to check if a nav item should be expanded
87
- const shouldExpand = (item: NavItem) => {
88
- if (!item.children) return false;
89
- return item.children.some(child => pathname === child.href || pathname.startsWith(child.href));
90
- };
91
-
92
- return (
93
- <div className="min-h-screen bg-gray-50 dark:bg-gray-900">
94
- {/* Mobile menu button */}
95
- <div className="lg:hidden fixed top-4 left-4 z-50">
96
- <button
97
- type="button"
98
- className="p-2 rounded-md text-gray-500 hover:text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:text-gray-300 dark:hover:bg-gray-800"
99
- onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
100
- >
101
- <span className="sr-only">Open sidebar</span>
102
- {mobileMenuOpen ? (
103
- <svg className="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
104
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
105
- </svg>
106
- ) : (
107
- <svg className="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
108
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 6h16M4 12h16M4 18h16" />
109
- </svg>
110
- )}
111
- </button>
112
- </div>
113
-
114
- {/* Sidebar for desktop */}
115
- <div className="hidden lg:flex lg:w-64 lg:flex-col lg:fixed lg:inset-y-0">
116
- <div className="flex flex-col flex-grow bg-white dark:bg-gray-800 shadow-lg overflow-y-auto">
117
- <div className="flex items-center flex-shrink-0 px-4 py-5 border-b border-gray-200 dark:border-gray-700">
118
- <Link href="/" className="flex items-center">
119
- <span className="text-xl font-semibold text-gray-900 dark:text-white">NDPR Toolkit</span>
120
- </Link>
121
- </div>
122
- <div className="mt-5 flex-1 flex flex-col">
123
- <nav className="flex-1 px-4 space-y-1">
124
- {navigation.map((item) => (
125
- <div key={item.title} className="py-1">
126
- <Link
127
- href={item.href}
128
- className={`group flex items-center px-3 py-2 text-sm font-medium rounded-md ${
129
- isActive(item.href)
130
- ? 'bg-blue-50 text-blue-700 dark:bg-blue-900/30 dark:text-blue-200'
131
- : 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700'
132
- }`}
133
- >
134
- {item.icon && (
135
- <span className={`mr-3 ${isActive(item.href) ? 'text-blue-500 dark:text-blue-400' : 'text-gray-500 dark:text-gray-400'}`}>
136
- {item.icon}
137
- </span>
138
- )}
139
- {item.title}
140
- </Link>
141
- {item.children && shouldExpand(item) && (
142
- <div className="mt-1 ml-8 space-y-1">
143
- {item.children.map((child) => (
144
- <Link
145
- key={child.title}
146
- href={child.href}
147
- className={`group flex items-center px-3 py-2 text-sm font-medium rounded-md ${
148
- pathname === child.href
149
- ? 'bg-blue-50 text-blue-700 dark:bg-blue-900/30 dark:text-blue-200'
150
- : 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700'
151
- }`}
152
- >
153
- {child.title}
154
- {pathname === child.href && (
155
- <span className="ml-auto">
156
- <svg className="h-4 w-4 text-blue-500 dark:text-blue-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
157
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
158
- </svg>
159
- </span>
160
- )}
161
- </Link>
162
- ))}
163
- </div>
164
- )}
165
- </div>
166
- ))}
167
- </nav>
168
- </div>
169
- <div className="p-4 border-t border-gray-200 dark:border-gray-700">
170
- <Button asChild variant="outline" size="sm" className="w-full">
171
- <a href="https://github.com/tantainnovative/ndpr-toolkit" target="_blank" rel="noopener noreferrer" className="flex items-center">
172
- <svg className="w-4 h-4 mr-2" fill="currentColor" viewBox="0 0 24 24">
173
- <path fillRule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clipRule="evenodd" />
174
- </svg>
175
- GitHub
176
- </a>
177
- </Button>
178
- </div>
179
- </div>
180
- </div>
181
-
182
- {/* Mobile menu, show/hide based on menu state */}
183
- <div
184
- className={`lg:hidden fixed inset-0 z-40 ${mobileMenuOpen ? 'block' : 'hidden'}`}
185
- aria-hidden="true"
186
- >
187
- <div className="fixed inset-0 bg-gray-600 bg-opacity-75" onClick={() => setMobileMenuOpen(false)}></div>
188
- <div className="fixed inset-y-0 left-0 max-w-xs w-full bg-white dark:bg-gray-800 shadow-lg overflow-y-auto">
189
- <div className="flex items-center justify-between px-4 py-5 border-b border-gray-200 dark:border-gray-700">
190
- <Link href="/" className="flex items-center" onClick={() => setMobileMenuOpen(false)}>
191
- <span className="text-xl font-semibold text-gray-900 dark:text-white">NDPR Toolkit</span>
192
- </Link>
193
- <button
194
- type="button"
195
- className="ml-1 flex items-center justify-center h-10 w-10 rounded-full focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white"
196
- onClick={() => setMobileMenuOpen(false)}
197
- >
198
- <span className="sr-only">Close sidebar</span>
199
- <svg className="h-6 w-6 text-gray-500 dark:text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
200
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
201
- </svg>
202
- </button>
203
- </div>
204
- <div className="mt-5 flex-1 flex flex-col">
205
- <nav className="flex-1 px-4 space-y-1">
206
- {navigation.map((item) => (
207
- <div key={item.title} className="py-1">
208
- <Link
209
- href={item.href}
210
- className={`group flex items-center px-3 py-2 text-sm font-medium rounded-md ${
211
- isActive(item.href)
212
- ? 'bg-blue-50 text-blue-700 dark:bg-blue-900/30 dark:text-blue-200'
213
- : 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700'
214
- }`}
215
- onClick={() => setMobileMenuOpen(false)}
216
- >
217
- {item.icon && (
218
- <span className={`mr-3 ${isActive(item.href) ? 'text-blue-500 dark:text-blue-400' : 'text-gray-500 dark:text-gray-400'}`}>
219
- {item.icon}
220
- </span>
221
- )}
222
- {item.title}
223
- </Link>
224
- {item.children && shouldExpand(item) && (
225
- <div className="mt-1 ml-8 space-y-1">
226
- {item.children.map((child) => (
227
- <Link
228
- key={child.title}
229
- href={child.href}
230
- className={`group flex items-center px-3 py-2 text-sm font-medium rounded-md ${
231
- pathname === child.href
232
- ? 'bg-blue-50 text-blue-700 dark:bg-blue-900/30 dark:text-blue-200'
233
- : 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700'
234
- }`}
235
- onClick={() => setMobileMenuOpen(false)}
236
- >
237
- {child.title}
238
- </Link>
239
- ))}
240
- </div>
241
- )}
242
- </div>
243
- ))}
244
- </nav>
245
- </div>
246
- <div className="p-4 border-t border-gray-200 dark:border-gray-700">
247
- <Button asChild variant="outline" size="sm" className="w-full">
248
- <a href="https://github.com/tantainnovative/ndpr-toolkit" target="_blank" rel="noopener noreferrer" className="flex items-center">
249
- <svg className="w-4 h-4 mr-2" fill="currentColor" viewBox="0 0 24 24">
250
- <path fillRule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clipRule="evenodd" />
251
- </svg>
252
- GitHub
253
- </a>
254
- </Button>
255
- </div>
256
- </div>
257
- </div>
258
-
259
- {/* Main content */}
260
- <div className="lg:pl-64">
261
- <main className="py-10">
262
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
263
- <div className="pb-5 border-b border-gray-200 dark:border-gray-700 mb-6">
264
- <div className="flex flex-col md:flex-row md:items-center md:justify-between">
265
- <div>
266
- <h1 className="text-3xl font-bold text-gray-900 dark:text-white">{title}</h1>
267
- {description && <p className="mt-2 text-lg text-gray-500 dark:text-gray-400">{description}</p>}
268
- </div>
269
- <div className="mt-4 md:mt-0 flex space-x-3">
270
- <Button asChild variant="outline" size="sm">
271
- <Link href="/ndpr-demos">View Demos</Link>
272
- </Button>
273
- <Button asChild variant="default" size="sm">
274
- <Link href="/">Back to Home</Link>
275
- </Button>
276
- </div>
277
- </div>
278
- </div>
279
-
280
- {/* Page content */}
281
- <div className="prose prose-blue max-w-none dark:prose-invert">
282
- {children}
283
- </div>
284
- </div>
285
- </main>
286
- </div>
287
- </div>
288
- );
289
- }
@@ -1,2 +0,0 @@
1
- // Re-export DocLayout for easier imports
2
- export * from './DocLayout';