@actuate-media/cms-admin 0.1.0

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 (295) hide show
  1. package/dist/AdminRoot.d.ts +21 -0
  2. package/dist/AdminRoot.d.ts.map +1 -0
  3. package/dist/AdminRoot.js +136 -0
  4. package/dist/AdminRoot.js.map +1 -0
  5. package/dist/components/Breadcrumbs.d.ts +6 -0
  6. package/dist/components/Breadcrumbs.d.ts.map +1 -0
  7. package/dist/components/Breadcrumbs.js +52 -0
  8. package/dist/components/Breadcrumbs.js.map +1 -0
  9. package/dist/components/CommandPalette.d.ts +7 -0
  10. package/dist/components/CommandPalette.d.ts.map +1 -0
  11. package/dist/components/CommandPalette.js +152 -0
  12. package/dist/components/CommandPalette.js.map +1 -0
  13. package/dist/components/ErrorBoundary.d.ts +17 -0
  14. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  15. package/dist/components/ErrorBoundary.js +24 -0
  16. package/dist/components/ErrorBoundary.js.map +1 -0
  17. package/dist/components/FocalPointPicker.d.ts +9 -0
  18. package/dist/components/FocalPointPicker.d.ts.map +1 -0
  19. package/dist/components/FocalPointPicker.js +19 -0
  20. package/dist/components/FocalPointPicker.js.map +1 -0
  21. package/dist/components/FolderTree.d.ts +28 -0
  22. package/dist/components/FolderTree.d.ts.map +1 -0
  23. package/dist/components/FolderTree.js +198 -0
  24. package/dist/components/FolderTree.js.map +1 -0
  25. package/dist/components/LivePreview.d.ts +10 -0
  26. package/dist/components/LivePreview.d.ts.map +1 -0
  27. package/dist/components/LivePreview.js +62 -0
  28. package/dist/components/LivePreview.js.map +1 -0
  29. package/dist/components/LocaleProvider.d.ts +28 -0
  30. package/dist/components/LocaleProvider.d.ts.map +1 -0
  31. package/dist/components/LocaleProvider.js +29 -0
  32. package/dist/components/LocaleProvider.js.map +1 -0
  33. package/dist/components/LocaleSwitcher.d.ts +2 -0
  34. package/dist/components/LocaleSwitcher.d.ts.map +1 -0
  35. package/dist/components/LocaleSwitcher.js +13 -0
  36. package/dist/components/LocaleSwitcher.js.map +1 -0
  37. package/dist/components/MediaPickerModal.d.ts +8 -0
  38. package/dist/components/MediaPickerModal.d.ts.map +1 -0
  39. package/dist/components/MediaPickerModal.js +53 -0
  40. package/dist/components/MediaPickerModal.js.map +1 -0
  41. package/dist/components/PresenceIndicator.d.ts +7 -0
  42. package/dist/components/PresenceIndicator.d.ts.map +1 -0
  43. package/dist/components/PresenceIndicator.js +37 -0
  44. package/dist/components/PresenceIndicator.js.map +1 -0
  45. package/dist/components/SEOPanel.d.ts +26 -0
  46. package/dist/components/SEOPanel.d.ts.map +1 -0
  47. package/dist/components/SEOPanel.js +249 -0
  48. package/dist/components/SEOPanel.js.map +1 -0
  49. package/dist/components/ThemeProvider.d.ts +13 -0
  50. package/dist/components/ThemeProvider.d.ts.map +1 -0
  51. package/dist/components/ThemeProvider.js +62 -0
  52. package/dist/components/ThemeProvider.js.map +1 -0
  53. package/dist/components/TipTapEditor.d.ts +9 -0
  54. package/dist/components/TipTapEditor.d.ts.map +1 -0
  55. package/dist/components/TipTapEditor.js +167 -0
  56. package/dist/components/TipTapEditor.js.map +1 -0
  57. package/dist/components/VersionHistory.d.ts +9 -0
  58. package/dist/components/VersionHistory.d.ts.map +1 -0
  59. package/dist/components/VersionHistory.js +70 -0
  60. package/dist/components/VersionHistory.js.map +1 -0
  61. package/dist/components/ui/Avatar.d.ts +9 -0
  62. package/dist/components/ui/Avatar.d.ts.map +1 -0
  63. package/dist/components/ui/Avatar.js +21 -0
  64. package/dist/components/ui/Avatar.js.map +1 -0
  65. package/dist/components/ui/Badge.d.ts +5 -0
  66. package/dist/components/ui/Badge.d.ts.map +1 -0
  67. package/dist/components/ui/Badge.js +17 -0
  68. package/dist/components/ui/Badge.js.map +1 -0
  69. package/dist/components/ui/Button.d.ts +12 -0
  70. package/dist/components/ui/Button.d.ts.map +1 -0
  71. package/dist/components/ui/Button.js +17 -0
  72. package/dist/components/ui/Button.js.map +1 -0
  73. package/dist/components/ui/CommandPalette.d.ts +14 -0
  74. package/dist/components/ui/CommandPalette.d.ts.map +1 -0
  75. package/dist/components/ui/CommandPalette.js +52 -0
  76. package/dist/components/ui/CommandPalette.js.map +1 -0
  77. package/dist/components/ui/ConfirmDialog.d.ts +12 -0
  78. package/dist/components/ui/ConfirmDialog.d.ts.map +1 -0
  79. package/dist/components/ui/ConfirmDialog.js +11 -0
  80. package/dist/components/ui/ConfirmDialog.js.map +1 -0
  81. package/dist/components/ui/DataTable.d.ts +30 -0
  82. package/dist/components/ui/DataTable.d.ts.map +1 -0
  83. package/dist/components/ui/DataTable.js +40 -0
  84. package/dist/components/ui/DataTable.js.map +1 -0
  85. package/dist/components/ui/EmptyState.d.ts +10 -0
  86. package/dist/components/ui/EmptyState.d.ts.map +1 -0
  87. package/dist/components/ui/EmptyState.js +6 -0
  88. package/dist/components/ui/EmptyState.js.map +1 -0
  89. package/dist/components/ui/Modal.d.ts +10 -0
  90. package/dist/components/ui/Modal.d.ts.map +1 -0
  91. package/dist/components/ui/Modal.js +19 -0
  92. package/dist/components/ui/Modal.js.map +1 -0
  93. package/dist/components/ui/Pagination.d.ts +9 -0
  94. package/dist/components/ui/Pagination.d.ts.map +1 -0
  95. package/dist/components/ui/Pagination.js +21 -0
  96. package/dist/components/ui/Pagination.js.map +1 -0
  97. package/dist/components/ui/SearchInput.d.ts +7 -0
  98. package/dist/components/ui/SearchInput.d.ts.map +1 -0
  99. package/dist/components/ui/SearchInput.js +6 -0
  100. package/dist/components/ui/SearchInput.js.map +1 -0
  101. package/dist/components/ui/Skeleton.d.ts +9 -0
  102. package/dist/components/ui/Skeleton.d.ts.map +1 -0
  103. package/dist/components/ui/Skeleton.js +11 -0
  104. package/dist/components/ui/Skeleton.js.map +1 -0
  105. package/dist/components/ui/Toast.d.ts +18 -0
  106. package/dist/components/ui/Toast.d.ts.map +1 -0
  107. package/dist/components/ui/Toast.js +29 -0
  108. package/dist/components/ui/Toast.js.map +1 -0
  109. package/dist/components/ui/index.d.ts +25 -0
  110. package/dist/components/ui/index.d.ts.map +1 -0
  111. package/dist/components/ui/index.js +13 -0
  112. package/dist/components/ui/index.js.map +1 -0
  113. package/dist/fields/ArrayField.d.ts +9 -0
  114. package/dist/fields/ArrayField.d.ts.map +1 -0
  115. package/dist/fields/ArrayField.js +21 -0
  116. package/dist/fields/ArrayField.js.map +1 -0
  117. package/dist/fields/BlockBuilderField.d.ts +16 -0
  118. package/dist/fields/BlockBuilderField.d.ts.map +1 -0
  119. package/dist/fields/BlockBuilderField.js +110 -0
  120. package/dist/fields/BlockBuilderField.js.map +1 -0
  121. package/dist/fields/DateField.d.ts +9 -0
  122. package/dist/fields/DateField.d.ts.map +1 -0
  123. package/dist/fields/DateField.js +6 -0
  124. package/dist/fields/DateField.js.map +1 -0
  125. package/dist/fields/FieldRenderer.d.ts +22 -0
  126. package/dist/fields/FieldRenderer.d.ts.map +1 -0
  127. package/dist/fields/FieldRenderer.js +38 -0
  128. package/dist/fields/FieldRenderer.js.map +1 -0
  129. package/dist/fields/GroupField.d.ts +8 -0
  130. package/dist/fields/GroupField.d.ts.map +1 -0
  131. package/dist/fields/GroupField.js +8 -0
  132. package/dist/fields/GroupField.js.map +1 -0
  133. package/dist/fields/MediaField.d.ts +13 -0
  134. package/dist/fields/MediaField.d.ts.map +1 -0
  135. package/dist/fields/MediaField.js +6 -0
  136. package/dist/fields/MediaField.js.map +1 -0
  137. package/dist/fields/NavBuilderField.d.ts +15 -0
  138. package/dist/fields/NavBuilderField.d.ts.map +1 -0
  139. package/dist/fields/NavBuilderField.js +19 -0
  140. package/dist/fields/NavBuilderField.js.map +1 -0
  141. package/dist/fields/NumberField.d.ts +12 -0
  142. package/dist/fields/NumberField.d.ts.map +1 -0
  143. package/dist/fields/NumberField.js +6 -0
  144. package/dist/fields/NumberField.js.map +1 -0
  145. package/dist/fields/RelationshipField.d.ts +13 -0
  146. package/dist/fields/RelationshipField.d.ts.map +1 -0
  147. package/dist/fields/RelationshipField.js +119 -0
  148. package/dist/fields/RelationshipField.js.map +1 -0
  149. package/dist/fields/RichTextField.d.ts +9 -0
  150. package/dist/fields/RichTextField.d.ts.map +1 -0
  151. package/dist/fields/RichTextField.js +7 -0
  152. package/dist/fields/RichTextField.js.map +1 -0
  153. package/dist/fields/SelectField.d.ts +11 -0
  154. package/dist/fields/SelectField.d.ts.map +1 -0
  155. package/dist/fields/SelectField.js +31 -0
  156. package/dist/fields/SelectField.js.map +1 -0
  157. package/dist/fields/SlugField.d.ts +10 -0
  158. package/dist/fields/SlugField.d.ts.map +1 -0
  159. package/dist/fields/SlugField.js +15 -0
  160. package/dist/fields/SlugField.js.map +1 -0
  161. package/dist/fields/TextField.d.ts +11 -0
  162. package/dist/fields/TextField.d.ts.map +1 -0
  163. package/dist/fields/TextField.js +8 -0
  164. package/dist/fields/TextField.js.map +1 -0
  165. package/dist/fields/ToggleField.d.ts +8 -0
  166. package/dist/fields/ToggleField.d.ts.map +1 -0
  167. package/dist/fields/ToggleField.js +6 -0
  168. package/dist/fields/ToggleField.js.map +1 -0
  169. package/dist/fields/block-types.d.ts +18 -0
  170. package/dist/fields/block-types.d.ts.map +1 -0
  171. package/dist/fields/block-types.js +88 -0
  172. package/dist/fields/block-types.js.map +1 -0
  173. package/dist/fields/index.d.ts +18 -0
  174. package/dist/fields/index.d.ts.map +1 -0
  175. package/dist/fields/index.js +16 -0
  176. package/dist/fields/index.js.map +1 -0
  177. package/dist/hooks/useContentLock.d.ts +12 -0
  178. package/dist/hooks/useContentLock.d.ts.map +1 -0
  179. package/dist/hooks/useContentLock.js +38 -0
  180. package/dist/hooks/useContentLock.js.map +1 -0
  181. package/dist/hooks/useDebounce.d.ts +2 -0
  182. package/dist/hooks/useDebounce.d.ts.map +1 -0
  183. package/dist/hooks/useDebounce.js +11 -0
  184. package/dist/hooks/useDebounce.js.map +1 -0
  185. package/dist/hooks/useKeyboardShortcuts.d.ts +6 -0
  186. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  187. package/dist/hooks/useKeyboardShortcuts.js +26 -0
  188. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  189. package/dist/index.d.ts +52 -0
  190. package/dist/index.d.ts.map +1 -0
  191. package/dist/index.js +39 -0
  192. package/dist/index.js.map +1 -0
  193. package/dist/layout/Header.d.ts +7 -0
  194. package/dist/layout/Header.d.ts.map +1 -0
  195. package/dist/layout/Header.js +18 -0
  196. package/dist/layout/Header.js.map +1 -0
  197. package/dist/layout/Layout.d.ts +10 -0
  198. package/dist/layout/Layout.d.ts.map +1 -0
  199. package/dist/layout/Layout.js +25 -0
  200. package/dist/layout/Layout.js.map +1 -0
  201. package/dist/layout/Sidebar.d.ts +9 -0
  202. package/dist/layout/Sidebar.d.ts.map +1 -0
  203. package/dist/layout/Sidebar.js +63 -0
  204. package/dist/layout/Sidebar.js.map +1 -0
  205. package/dist/lib/api.d.ts +8 -0
  206. package/dist/lib/api.d.ts.map +1 -0
  207. package/dist/lib/api.js +59 -0
  208. package/dist/lib/api.js.map +1 -0
  209. package/dist/lib/search.d.ts +11 -0
  210. package/dist/lib/search.d.ts.map +1 -0
  211. package/dist/lib/search.js +46 -0
  212. package/dist/lib/search.js.map +1 -0
  213. package/dist/lib/useApiData.d.ts +8 -0
  214. package/dist/lib/useApiData.d.ts.map +1 -0
  215. package/dist/lib/useApiData.js +36 -0
  216. package/dist/lib/useApiData.js.map +1 -0
  217. package/dist/lib/utils.d.ts +3 -0
  218. package/dist/lib/utils.d.ts.map +1 -0
  219. package/dist/lib/utils.js +6 -0
  220. package/dist/lib/utils.js.map +1 -0
  221. package/dist/router/index.d.ts +10 -0
  222. package/dist/router/index.d.ts.map +1 -0
  223. package/dist/router/index.js +61 -0
  224. package/dist/router/index.js.map +1 -0
  225. package/dist/views/CollectionList.d.ts +7 -0
  226. package/dist/views/CollectionList.d.ts.map +1 -0
  227. package/dist/views/CollectionList.js +107 -0
  228. package/dist/views/CollectionList.js.map +1 -0
  229. package/dist/views/Dashboard.d.ts +5 -0
  230. package/dist/views/Dashboard.d.ts.map +1 -0
  231. package/dist/views/Dashboard.js +17 -0
  232. package/dist/views/Dashboard.js.map +1 -0
  233. package/dist/views/DocumentEdit.d.ts +8 -0
  234. package/dist/views/DocumentEdit.d.ts.map +1 -0
  235. package/dist/views/DocumentEdit.js +210 -0
  236. package/dist/views/DocumentEdit.js.map +1 -0
  237. package/dist/views/FormEditor.d.ts +6 -0
  238. package/dist/views/FormEditor.d.ts.map +1 -0
  239. package/dist/views/FormEditor.js +126 -0
  240. package/dist/views/FormEditor.js.map +1 -0
  241. package/dist/views/FormSubmissions.d.ts +6 -0
  242. package/dist/views/FormSubmissions.d.ts.map +1 -0
  243. package/dist/views/FormSubmissions.js +88 -0
  244. package/dist/views/FormSubmissions.js.map +1 -0
  245. package/dist/views/Forms.d.ts +5 -0
  246. package/dist/views/Forms.d.ts.map +1 -0
  247. package/dist/views/Forms.js +24 -0
  248. package/dist/views/Forms.js.map +1 -0
  249. package/dist/views/Login.d.ts +10 -0
  250. package/dist/views/Login.d.ts.map +1 -0
  251. package/dist/views/Login.js +83 -0
  252. package/dist/views/Login.js.map +1 -0
  253. package/dist/views/MediaBrowser.d.ts +5 -0
  254. package/dist/views/MediaBrowser.d.ts.map +1 -0
  255. package/dist/views/MediaBrowser.js +245 -0
  256. package/dist/views/MediaBrowser.js.map +1 -0
  257. package/dist/views/PageEditor.d.ts +6 -0
  258. package/dist/views/PageEditor.d.ts.map +1 -0
  259. package/dist/views/PageEditor.js +74 -0
  260. package/dist/views/PageEditor.js.map +1 -0
  261. package/dist/views/Pages.d.ts +5 -0
  262. package/dist/views/Pages.d.ts.map +1 -0
  263. package/dist/views/Pages.js +127 -0
  264. package/dist/views/Pages.js.map +1 -0
  265. package/dist/views/PostEditor.d.ts +6 -0
  266. package/dist/views/PostEditor.d.ts.map +1 -0
  267. package/dist/views/PostEditor.js +79 -0
  268. package/dist/views/PostEditor.js.map +1 -0
  269. package/dist/views/Posts.d.ts +5 -0
  270. package/dist/views/Posts.d.ts.map +1 -0
  271. package/dist/views/Posts.js +67 -0
  272. package/dist/views/Posts.js.map +1 -0
  273. package/dist/views/Redirects.d.ts +5 -0
  274. package/dist/views/Redirects.d.ts.map +1 -0
  275. package/dist/views/Redirects.js +79 -0
  276. package/dist/views/Redirects.js.map +1 -0
  277. package/dist/views/SEO.d.ts +6 -0
  278. package/dist/views/SEO.d.ts.map +1 -0
  279. package/dist/views/SEO.js +120 -0
  280. package/dist/views/SEO.js.map +1 -0
  281. package/dist/views/Settings.d.ts +5 -0
  282. package/dist/views/Settings.d.ts.map +1 -0
  283. package/dist/views/Settings.js +95 -0
  284. package/dist/views/Settings.js.map +1 -0
  285. package/dist/views/SetupWizard.d.ts +13 -0
  286. package/dist/views/SetupWizard.d.ts.map +1 -0
  287. package/dist/views/SetupWizard.js +68 -0
  288. package/dist/views/SetupWizard.js.map +1 -0
  289. package/dist/views/Users.d.ts +5 -0
  290. package/dist/views/Users.d.ts.map +1 -0
  291. package/dist/views/Users.js +69 -0
  292. package/dist/views/Users.js.map +1 -0
  293. package/package.json +71 -0
  294. package/src/styles/tailwind.css +2 -0
  295. package/src/styles/theme.css +175 -0
@@ -0,0 +1,126 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useCallback, useEffect } from 'react';
4
+ import { Save, ArrowLeft, Plus, Trash2, GripVertical, MessageSquare, ExternalLink, BarChart3, ChevronDown, ChevronRight, Loader2, } from 'lucide-react';
5
+ import { useApiData } from '../lib/useApiData';
6
+ import { cmsApi } from '../lib/api';
7
+ const FIELD_TYPES = [
8
+ { value: 'text', label: 'Text' },
9
+ { value: 'email', label: 'Email' },
10
+ { value: 'tel', label: 'Phone' },
11
+ { value: 'textarea', label: 'Textarea' },
12
+ { value: 'select', label: 'Dropdown' },
13
+ { value: 'checkbox', label: 'Checkbox' },
14
+ { value: 'number', label: 'Number' },
15
+ { value: 'date', label: 'Date' },
16
+ { value: 'url', label: 'URL' },
17
+ { value: 'file', label: 'File Upload' },
18
+ { value: 'hidden', label: 'Hidden' },
19
+ ];
20
+ export function FormEditor({ formId, onNavigate }) {
21
+ const isNew = !formId;
22
+ const { data: existingForm, loading } = useApiData(formId ? `/collections/forms/${formId}` : null);
23
+ const [name, setName] = useState('');
24
+ const [description, setDescription] = useState('');
25
+ const [status, setStatus] = useState('active');
26
+ const [fields, setFields] = useState([]);
27
+ const [saving, setSaving] = useState(false);
28
+ const [expandedSection, setExpandedSection] = useState('fields');
29
+ const [confirmation, setConfirmation] = useState({
30
+ type: 'message',
31
+ message: 'Thank you! Your submission has been received.',
32
+ redirectUrl: '',
33
+ redirectDelay: 0,
34
+ });
35
+ const [analytics, setAnalytics] = useState({
36
+ enabled: false,
37
+ measurementId: '',
38
+ submitEventName: 'form_submit',
39
+ startEventName: 'form_start',
40
+ trackAsConversion: false,
41
+ conversionValue: 0,
42
+ conversionCurrency: 'USD',
43
+ customParameters: {},
44
+ });
45
+ useEffect(() => {
46
+ if (existingForm) {
47
+ const d = existingForm.data ?? existingForm;
48
+ setName(d.name ?? '');
49
+ setDescription(d.description ?? '');
50
+ setStatus(d.status ?? 'active');
51
+ if (Array.isArray(d.fields))
52
+ setFields(d.fields);
53
+ if (d.confirmation) {
54
+ setConfirmation((prev) => ({ ...prev, ...d.confirmation }));
55
+ }
56
+ if (d.analytics) {
57
+ setAnalytics((prev) => ({ ...prev, ...d.analytics }));
58
+ }
59
+ }
60
+ }, [existingForm]);
61
+ const addField = useCallback((type) => {
62
+ setFields((prev) => [
63
+ ...prev,
64
+ {
65
+ id: crypto.randomUUID(),
66
+ type,
67
+ label: `New ${type} field`,
68
+ required: false,
69
+ },
70
+ ]);
71
+ }, []);
72
+ const removeField = useCallback((id) => {
73
+ setFields((prev) => prev.filter((f) => f.id !== id));
74
+ }, []);
75
+ const updateField = useCallback((id, updates) => {
76
+ setFields((prev) => prev.map((f) => (f.id === id ? { ...f, ...updates } : f)));
77
+ }, []);
78
+ const moveField = useCallback((from, to) => {
79
+ setFields((prev) => {
80
+ const next = [...prev];
81
+ const [moved] = next.splice(from, 1);
82
+ next.splice(to, 0, moved);
83
+ return next;
84
+ });
85
+ }, []);
86
+ const handleSave = async () => {
87
+ setSaving(true);
88
+ try {
89
+ const payload = {
90
+ name,
91
+ description,
92
+ status,
93
+ fields,
94
+ confirmation,
95
+ analytics: analytics.enabled ? analytics : { enabled: false },
96
+ };
97
+ if (isNew) {
98
+ await cmsApi('/collections/forms', {
99
+ method: 'POST',
100
+ body: JSON.stringify(payload),
101
+ });
102
+ }
103
+ else {
104
+ await cmsApi(`/collections/forms/${formId}`, {
105
+ method: 'PUT',
106
+ body: JSON.stringify(payload),
107
+ });
108
+ }
109
+ onNavigate?.('/forms');
110
+ }
111
+ finally {
112
+ setSaving(false);
113
+ }
114
+ };
115
+ const toggleSection = (section) => {
116
+ setExpandedSection(expandedSection === section ? null : section);
117
+ };
118
+ if (loading) {
119
+ return (_jsx("div", { className: "p-4 flex items-center justify-center h-64", children: _jsx(Loader2, { className: "w-6 h-6 animate-spin text-blue-600" }) }));
120
+ }
121
+ return (_jsxs("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8 max-w-4xl", children: [_jsxs("div", { className: "flex items-center gap-3 mb-6", children: [_jsx("button", { onClick: () => onNavigate?.('/forms'), className: "p-2 hover:bg-gray-100 rounded-lg transition-colors", children: _jsx(ArrowLeft, { className: "w-5 h-5 text-gray-600" }) }), _jsx("div", { className: "flex-1", children: _jsx("h1", { className: "text-xl font-semibold text-gray-900", children: isNew ? 'New Form' : 'Edit Form' }) }), _jsxs("button", { onClick: handleSave, disabled: saving || !name.trim(), className: "flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors text-sm disabled:opacity-50", children: [saving ? _jsx(Loader2, { className: "w-4 h-4 animate-spin" }) : _jsx(Save, { className: "w-4 h-4" }), saving ? 'Saving...' : 'Save'] })] }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-4 mb-4", children: _jsxs("div", { className: "grid gap-4", children: [_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Form Name" }), _jsx("input", { type: "text", value: name, onChange: (e) => setName(e.target.value), placeholder: "e.g. Contact Form", className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Description" }), _jsx("input", { type: "text", value: description, onChange: (e) => setDescription(e.target.value), placeholder: "Brief description of this form", className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Status" }), _jsxs("select", { value: status, onChange: (e) => setStatus(e.target.value), className: "px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500", children: [_jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "inactive", children: "Inactive" })] })] })] }) }), _jsxs("div", { className: "bg-white rounded-lg border border-gray-200 mb-4", children: [_jsx("button", { onClick: () => toggleSection('fields'), className: "w-full flex items-center justify-between p-4 hover:bg-gray-50 transition-colors", children: _jsxs("div", { className: "flex items-center gap-2", children: [expandedSection === 'fields' ? _jsx(ChevronDown, { className: "w-4 h-4" }) : _jsx(ChevronRight, { className: "w-4 h-4" }), _jsx("span", { className: "font-medium text-gray-900", children: "Form Fields" }), _jsxs("span", { className: "text-sm text-gray-500", children: ["(", fields.length, ")"] })] }) }), expandedSection === 'fields' && (_jsxs("div", { className: "border-t border-gray-200 p-4", children: [_jsx("div", { className: "flex flex-wrap gap-2 mb-4", children: FIELD_TYPES.map((ft) => (_jsxs("button", { onClick: () => addField(ft.value), className: "flex items-center gap-1 px-3 py-1.5 text-xs border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors", children: [_jsx(Plus, { className: "w-3 h-3" }), " ", ft.label] }, ft.value))) }), fields.length === 0 ? (_jsx("p", { className: "text-sm text-gray-500 text-center py-6", children: "Click a field type above to add it to your form." })) : (_jsx("div", { className: "flex flex-col gap-2", children: fields.map((field, index) => (_jsxs("div", { draggable: true, onDragStart: (e) => e.dataTransfer.setData('text/plain', String(index)), onDragOver: (e) => e.preventDefault(), onDrop: (e) => {
122
+ const from = Number(e.dataTransfer.getData('text/plain'));
123
+ moveField(from, index);
124
+ }, className: "flex items-center gap-3 p-3 border border-gray-200 rounded-lg bg-gray-50 hover:bg-white transition-colors", children: [_jsx(GripVertical, { className: "w-4 h-4 text-gray-400 cursor-grab shrink-0" }), _jsx("input", { type: "text", value: field.label, onChange: (e) => updateField(field.id, { label: e.target.value }), className: "flex-1 px-2 py-1 text-sm border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500" }), _jsx("span", { className: "text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded shrink-0", children: field.type }), _jsxs("label", { className: "flex items-center gap-1 text-xs text-gray-600 shrink-0", children: [_jsx("input", { type: "checkbox", checked: field.required, onChange: (e) => updateField(field.id, { required: e.target.checked }), className: "rounded" }), "Required"] }), _jsx("button", { onClick: () => removeField(field.id), className: "p-1 text-red-500 hover:bg-red-50 rounded transition-colors shrink-0", children: _jsx(Trash2, { className: "w-4 h-4" }) })] }, field.id))) }))] }))] }), _jsxs("div", { className: "bg-white rounded-lg border border-gray-200 mb-4", children: [_jsx("button", { onClick: () => toggleSection('confirmation'), className: "w-full flex items-center justify-between p-4 hover:bg-gray-50 transition-colors", children: _jsxs("div", { className: "flex items-center gap-2", children: [expandedSection === 'confirmation' ? _jsx(ChevronDown, { className: "w-4 h-4" }) : _jsx(ChevronRight, { className: "w-4 h-4" }), _jsx(MessageSquare, { className: "w-4 h-4 text-green-600" }), _jsx("span", { className: "font-medium text-gray-900", children: "Confirmation" }), _jsx("span", { className: "text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded", children: confirmation.type === 'message' ? 'Show Message' : 'Redirect' })] }) }), expandedSection === 'confirmation' && (_jsxs("div", { className: "border-t border-gray-200 p-4", children: [_jsxs("div", { className: "mb-4", children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: "After submission" }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("label", { className: "flex items-center gap-2 px-4 py-2 border rounded-lg cursor-pointer transition-colors hover:bg-gray-50", style: { borderColor: confirmation.type === 'message' ? '#2563eb' : '#d1d5db', backgroundColor: confirmation.type === 'message' ? '#eff6ff' : 'transparent' }, children: [_jsx("input", { type: "radio", name: "confirmationType", value: "message", checked: confirmation.type === 'message', onChange: () => setConfirmation((c) => ({ ...c, type: 'message' })), className: "text-blue-600" }), _jsx(MessageSquare, { className: "w-4 h-4" }), _jsx("span", { className: "text-sm", children: "Show Message" })] }), _jsxs("label", { className: "flex items-center gap-2 px-4 py-2 border rounded-lg cursor-pointer transition-colors hover:bg-gray-50", style: { borderColor: confirmation.type === 'redirect' ? '#2563eb' : '#d1d5db', backgroundColor: confirmation.type === 'redirect' ? '#eff6ff' : 'transparent' }, children: [_jsx("input", { type: "radio", name: "confirmationType", value: "redirect", checked: confirmation.type === 'redirect', onChange: () => setConfirmation((c) => ({ ...c, type: 'redirect' })), className: "text-blue-600" }), _jsx(ExternalLink, { className: "w-4 h-4" }), _jsx("span", { className: "text-sm", children: "Redirect to Page" })] })] })] }), confirmation.type === 'message' ? (_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Success Message" }), _jsx("textarea", { value: confirmation.message, onChange: (e) => setConfirmation((c) => ({ ...c, message: e.target.value })), rows: 3, className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500", placeholder: "Thank you! Your submission has been received." })] })) : (_jsxs("div", { className: "grid gap-3", children: [_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Redirect URL" }), _jsx("input", { type: "url", value: confirmation.redirectUrl, onChange: (e) => setConfirmation((c) => ({ ...c, redirectUrl: e.target.value })), placeholder: "https://example.com/thank-you", className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Redirect Delay (ms)" }), _jsx("input", { type: "number", value: confirmation.redirectDelay, onChange: (e) => setConfirmation((c) => ({ ...c, redirectDelay: Number(e.target.value) })), min: 0, step: 500, className: "w-32 px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" }), _jsx("p", { className: "text-xs text-gray-500 mt-1", children: "0 = instant redirect" })] })] }))] }))] }), _jsxs("div", { className: "bg-white rounded-lg border border-gray-200 mb-4", children: [_jsx("button", { onClick: () => toggleSection('analytics'), className: "w-full flex items-center justify-between p-4 hover:bg-gray-50 transition-colors", children: _jsxs("div", { className: "flex items-center gap-2", children: [expandedSection === 'analytics' ? _jsx(ChevronDown, { className: "w-4 h-4" }) : _jsx(ChevronRight, { className: "w-4 h-4" }), _jsx(BarChart3, { className: "w-4 h-4 text-purple-600" }), _jsx("span", { className: "font-medium text-gray-900", children: "GA4 Analytics" }), _jsx("span", { className: `text-xs px-2 py-0.5 rounded ${analytics.enabled ? 'bg-green-100 text-green-700' : 'bg-gray-100 text-gray-500'}`, children: analytics.enabled ? 'Enabled' : 'Disabled' })] }) }), expandedSection === 'analytics' && (_jsxs("div", { className: "border-t border-gray-200 p-4", children: [_jsxs("div", { className: "flex items-center gap-3 mb-4", children: [_jsxs("label", { className: "relative inline-flex items-center cursor-pointer", children: [_jsx("input", { type: "checkbox", checked: analytics.enabled, onChange: (e) => setAnalytics((a) => ({ ...a, enabled: e.target.checked })), className: "sr-only peer" }), _jsx("div", { className: "w-9 h-5 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-blue-600" })] }), _jsx("span", { className: "text-sm font-medium text-gray-700", children: "Push events to Google Analytics 4" })] }), analytics.enabled && (_jsxs("div", { className: "grid gap-4 pl-12", children: [_jsxs("div", { children: [_jsxs("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: ["GA4 Measurement ID", _jsx("span", { className: "text-gray-400 font-normal", children: " (optional)" })] }), _jsx("input", { type: "text", value: analytics.measurementId, onChange: (e) => setAnalytics((a) => ({ ...a, measurementId: e.target.value })), placeholder: "G-XXXXXXXXXX", className: "w-64 px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" }), _jsx("p", { className: "text-xs text-gray-500 mt-1", children: "Leave blank to use your site's default GA4 tag" })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Submit Event Name" }), _jsx("input", { type: "text", value: analytics.submitEventName, onChange: (e) => setAnalytics((a) => ({ ...a, submitEventName: e.target.value })), className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Start Event Name" }), _jsx("input", { type: "text", value: analytics.startEventName, onChange: (e) => setAnalytics((a) => ({ ...a, startEventName: e.target.value })), className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" })] })] }), _jsxs("div", { className: "border-t border-gray-200 pt-4", children: [_jsxs("div", { className: "flex items-center gap-3 mb-3", children: [_jsx("input", { type: "checkbox", id: "trackConversion", checked: analytics.trackAsConversion, onChange: (e) => setAnalytics((a) => ({ ...a, trackAsConversion: e.target.checked })), className: "rounded" }), _jsx("label", { htmlFor: "trackConversion", className: "text-sm font-medium text-gray-700", children: "Track as conversion event" })] }), analytics.trackAsConversion && (_jsxs("div", { className: "grid grid-cols-2 gap-4 ml-6", children: [_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Conversion Value" }), _jsx("input", { type: "number", value: analytics.conversionValue, onChange: (e) => setAnalytics((a) => ({ ...a, conversionValue: Number(e.target.value) })), min: 0, step: 0.01, className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1", children: "Currency" }), _jsxs("select", { value: analytics.conversionCurrency, onChange: (e) => setAnalytics((a) => ({ ...a, conversionCurrency: e.target.value })), className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500", children: [_jsx("option", { value: "USD", children: "USD" }), _jsx("option", { value: "EUR", children: "EUR" }), _jsx("option", { value: "GBP", children: "GBP" }), _jsx("option", { value: "CAD", children: "CAD" }), _jsx("option", { value: "AUD", children: "AUD" })] })] })] }))] }), _jsx("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-3", children: _jsxs("p", { className: "text-xs text-blue-800", children: [_jsx("strong", { children: "Note:" }), " Your site must have the GA4 snippet or GTM container installed. Actuate pushes events via ", _jsx("code", { className: "bg-blue-100 px-1 rounded", children: "gtag()" }), " /", _jsx("code", { className: "bg-blue-100 px-1 rounded", children: "dataLayer" }), " \u2014 it does not load the GA4 script."] }) })] }))] }))] })] }));
125
+ }
126
+ //# sourceMappingURL=FormEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormEditor.js","sourceRoot":"","sources":["../../src/views/FormEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface FormSubmissionsProps {
2
+ formId: string;
3
+ onNavigate?: (path: string) => void;
4
+ }
5
+ export declare function FormSubmissions({ formId, onNavigate }: FormSubmissionsProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=FormSubmissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSubmissions.d.ts","sourceRoot":"","sources":["../../src/views/FormSubmissions.tsx"],"names":[],"mappings":"AA8DA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,oBAAoB,2CAwP3E"}
@@ -0,0 +1,88 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useMemo } from 'react';
4
+ import { ArrowLeft, Download, Trash2, Search, Globe, ChevronDown, ChevronUp, MousePointerClick, MapPin, Smartphone, Monitor, Tablet, ExternalLink, Loader2, AlertTriangle, } from 'lucide-react';
5
+ import { toast } from 'sonner';
6
+ import { sortByRelevance } from '../lib/search';
7
+ import { useApiData } from '../lib/useApiData';
8
+ function sourceColor(source) {
9
+ const s = source.toLowerCase();
10
+ if (s === 'google')
11
+ return 'bg-blue-100 text-blue-800';
12
+ if (s === 'facebook' || s === 'meta')
13
+ return 'bg-indigo-100 text-indigo-800';
14
+ if (s === 'linkedin')
15
+ return 'bg-sky-100 text-sky-800';
16
+ if (s === 'bing')
17
+ return 'bg-teal-100 text-teal-800';
18
+ if (s === '(direct)')
19
+ return 'bg-gray-100 text-gray-800';
20
+ return 'bg-purple-100 text-purple-800';
21
+ }
22
+ function mediumColor(medium) {
23
+ const m = medium.toLowerCase();
24
+ if (m === 'cpc' || m === 'paid')
25
+ return 'bg-orange-100 text-orange-800';
26
+ if (m === 'organic')
27
+ return 'bg-green-100 text-green-800';
28
+ if (m === 'social')
29
+ return 'bg-pink-100 text-pink-800';
30
+ if (m === 'email')
31
+ return 'bg-yellow-100 text-yellow-800';
32
+ if (m === '(none)')
33
+ return 'bg-gray-100 text-gray-600';
34
+ return 'bg-gray-100 text-gray-800';
35
+ }
36
+ function DeviceIcon({ type }) {
37
+ if (type === 'Mobile')
38
+ return _jsx(Smartphone, { className: "w-3.5 h-3.5" });
39
+ if (type === 'Tablet')
40
+ return _jsx(Tablet, { className: "w-3.5 h-3.5" });
41
+ return _jsx(Monitor, { className: "w-3.5 h-3.5" });
42
+ }
43
+ export function FormSubmissions({ formId, onNavigate }) {
44
+ const { data, loading, error, refetch } = useApiData(`/forms/${formId}/submissions`);
45
+ const [searchQuery, setSearchQuery] = useState('');
46
+ const [filterStatus, setFilterStatus] = useState('all');
47
+ const [filterSource, setFilterSource] = useState('all');
48
+ const [expandedId, setExpandedId] = useState(null);
49
+ const submissions = data ?? [];
50
+ const filteredSubmissions = useMemo(() => {
51
+ let results = submissions.filter((s) => {
52
+ const matchesSearch = s.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
53
+ s.email.toLowerCase().includes(searchQuery.toLowerCase()) ||
54
+ s.message.toLowerCase().includes(searchQuery.toLowerCase());
55
+ const matchesStatus = filterStatus === 'all' || s.status === filterStatus;
56
+ const matchesSource = filterSource === 'all' || s.attribution.source === filterSource;
57
+ return matchesSearch && matchesStatus && matchesSource;
58
+ });
59
+ if (searchQuery.trim()) {
60
+ results = sortByRelevance(results, searchQuery, (s) => [s.name, s.email, s.message]);
61
+ }
62
+ return results;
63
+ }, [submissions, searchQuery, filterStatus, filterSource]);
64
+ const uniqueSources = [...new Set(submissions.map(s => s.attribution.source))];
65
+ const sourceSummary = useMemo(() => {
66
+ const counts = {};
67
+ for (const s of submissions) {
68
+ const key = `${s.attribution.source} / ${s.attribution.medium}`;
69
+ counts[key] = (counts[key] ?? 0) + 1;
70
+ }
71
+ return Object.entries(counts).sort(([, a], [, b]) => b - a);
72
+ }, [submissions]);
73
+ const paidCount = submissions.filter(s => ['cpc', 'paid'].includes(s.attribution.medium)).length;
74
+ const organicCount = submissions.filter(s => s.attribution.medium === 'organic').length;
75
+ const handleExport = () => {
76
+ toast.success('Submissions exported to CSV (includes attribution data)');
77
+ };
78
+ if (loading) {
79
+ return (_jsx("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8 flex items-center justify-center h-64", children: _jsx(Loader2, { className: "w-6 h-6 animate-spin text-blue-600" }) }));
80
+ }
81
+ return (_jsxs("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8", children: [error && (_jsxs("div", { className: "mb-4 flex items-center gap-3 rounded-lg border border-red-200 bg-red-50 p-3", children: [_jsx(AlertTriangle, { className: "w-5 h-5 text-red-600 shrink-0" }), _jsx("span", { className: "text-sm text-red-800 flex-1", children: error }), _jsx("button", { onClick: refetch, className: "px-3 py-1 text-sm text-red-700 border border-red-300 rounded-lg hover:bg-red-100 transition-colors", children: "Retry" })] })), _jsxs("div", { className: "mb-4", children: [_jsxs("button", { onClick: () => onNavigate?.('/forms'), className: "inline-flex items-center gap-2 text-sm text-gray-600 hover:text-gray-900 transition-colors mb-3", children: [_jsx(ArrowLeft, { className: "w-4 h-4" }), "Back to Forms"] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-semibold text-gray-900 mb-1", children: "Contact Form - Submissions" }), _jsxs("p", { className: "text-sm text-gray-600", children: [filteredSubmissions.length, " submission", filteredSubmissions.length !== 1 ? 's' : ''] })] }), _jsxs("button", { onClick: handleExport, className: "flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors text-sm", children: [_jsx(Download, { className: "w-4 h-4" }), "Export CSV"] })] })] }), _jsxs("div", { className: "grid grid-cols-2 md:grid-cols-5 gap-3 mb-4", children: [_jsxs("div", { className: "bg-white rounded-lg border border-gray-200 p-4", children: [_jsx("div", { className: "text-xs text-gray-600 mb-1", children: "Total" }), _jsx("div", { className: "text-2xl font-semibold text-gray-900", children: submissions.length })] }), _jsxs("div", { className: "bg-white rounded-lg border border-gray-200 p-4", children: [_jsx("div", { className: "text-xs text-gray-600 mb-1", children: "New" }), _jsx("div", { className: "text-2xl font-semibold text-blue-600", children: submissions.filter(s => s.status === 'new').length })] }), _jsxs("div", { className: "bg-white rounded-lg border border-gray-200 p-4", children: [_jsx("div", { className: "text-xs text-gray-600 mb-1", children: "Paid Traffic" }), _jsx("div", { className: "text-2xl font-semibold text-orange-600", children: paidCount })] }), _jsxs("div", { className: "bg-white rounded-lg border border-gray-200 p-4", children: [_jsx("div", { className: "text-xs text-gray-600 mb-1", children: "Organic" }), _jsx("div", { className: "text-2xl font-semibold text-green-600", children: organicCount })] }), _jsxs("div", { className: "bg-white rounded-lg border border-gray-200 p-4", children: [_jsx("div", { className: "text-xs text-gray-600 mb-1", children: "Top Source" }), _jsx("div", { className: "text-lg font-semibold text-gray-900", children: sourceSummary[0]?.[0] ?? '—' })] })] }), _jsxs("div", { className: "bg-white rounded-lg border border-gray-200 p-4 mb-4", children: [_jsxs("h3", { className: "text-sm font-semibold text-gray-900 mb-3 flex items-center gap-2", children: [_jsx(Globe, { className: "w-4 h-4 text-blue-600" }), "Lead Source Breakdown"] }), _jsx("div", { className: "flex flex-wrap gap-2", children: sourceSummary.map(([label, count]) => (_jsxs("div", { className: "flex items-center gap-2 px-3 py-1.5 bg-gray-50 rounded-lg", children: [_jsx("span", { className: "text-sm font-medium text-gray-800", children: label }), _jsx("span", { className: "px-2 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800", children: count })] }, label))) })] }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 mb-4", children: _jsxs("div", { className: "p-3 flex flex-col sm:flex-row gap-3", children: [_jsxs("div", { className: "flex-1 relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400" }), _jsx("input", { type: "text", placeholder: "Search submissions...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "w-full pl-9 pr-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" })] }), _jsxs("select", { value: filterStatus, onChange: (e) => setFilterStatus(e.target.value), className: "px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500", children: [_jsx("option", { value: "all", children: "All Status" }), _jsx("option", { value: "new", children: "New" }), _jsx("option", { value: "read", children: "Read" }), _jsx("option", { value: "replied", children: "Replied" })] }), _jsxs("select", { value: filterSource, onChange: (e) => setFilterSource(e.target.value), className: "px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500", children: [_jsx("option", { value: "all", children: "All Sources" }), uniqueSources.map(src => _jsx("option", { value: src, children: src }, src))] })] }) }), filteredSubmissions.length === 0 ? (_jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-8 text-center", children: _jsx("p", { className: "text-sm text-gray-500", children: "No submissions yet" }) })) : (_jsx("div", { className: "space-y-3", children: filteredSubmissions.map((submission) => {
82
+ const expanded = expandedId === submission.id;
83
+ const attr = submission.attribution;
84
+ const activeClickIds = Object.entries(attr.clickIds).filter(([, v]) => v);
85
+ return (_jsxs("div", { className: "bg-white rounded-lg border border-gray-200 hover:shadow-md transition-shadow", children: [_jsxs("div", { className: "p-4", children: [_jsxs("div", { className: "flex items-start justify-between mb-3", children: [_jsxs("div", { className: "flex items-start gap-3 flex-1", children: [_jsx("div", { className: "w-10 h-10 bg-linear-to-br from-blue-500 to-purple-600 rounded-full flex items-center justify-center text-white font-medium shrink-0 text-sm", children: submission.name.charAt(0) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 mb-1", children: [_jsx("h3", { className: "font-semibold text-gray-900 text-sm", children: submission.name }), _jsx("span", { className: `px-2 py-0.5 rounded-full text-xs font-medium ${submission.status === 'new' ? 'bg-blue-100 text-blue-800' : submission.status === 'read' ? 'bg-gray-100 text-gray-800' : 'bg-green-100 text-green-800'}`, children: submission.status })] }), _jsxs("div", { className: "text-xs text-gray-600 mb-2", children: [submission.email, submission.phone ? ` · ${submission.phone}` : ''] }), _jsx("p", { className: "text-sm text-gray-700", children: submission.message }), _jsxs("div", { className: "text-xs text-gray-500 mt-2", children: ["Submitted ", submission.submittedAt] })] })] }), _jsx("button", { onClick: () => toast.success('Submission deleted'), className: "p-1.5 hover:bg-gray-100 rounded transition-colors", title: "Delete", children: _jsx(Trash2, { className: "w-4 h-4 text-red-600" }) })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2 mt-3 pt-3 border-t border-gray-100", children: [_jsx("span", { className: `px-2 py-0.5 rounded-full text-xs font-medium ${sourceColor(attr.source)}`, children: attr.source }), _jsx("span", { className: "text-gray-400 text-xs", children: "/" }), _jsx("span", { className: `px-2 py-0.5 rounded-full text-xs font-medium ${mediumColor(attr.medium)}`, children: attr.medium }), attr.campaign && _jsx("span", { className: "px-2 py-0.5 rounded-full text-xs font-medium bg-amber-100 text-amber-800", children: attr.campaign }), _jsxs("span", { className: "flex items-center gap-1 text-xs text-gray-500", children: [_jsx(DeviceIcon, { type: attr.deviceType }), attr.deviceType] }), activeClickIds.length > 0 && (_jsxs("span", { className: "flex items-center gap-1 text-xs text-gray-500", children: [_jsx(MousePointerClick, { className: "w-3.5 h-3.5" }), activeClickIds.map(([k]) => k).join(', ')] })), _jsxs("button", { onClick: () => setExpandedId(expanded ? null : submission.id), className: "ml-auto flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800 transition-colors", children: [expanded ? _jsx(ChevronUp, { className: "w-3.5 h-3.5" }) : _jsx(ChevronDown, { className: "w-3.5 h-3.5" }), expanded ? 'Hide' : 'Attribution'] })] }), expanded && (_jsxs("div", { className: "mt-3 pt-3 border-t border-gray-100 bg-gray-50 rounded-lg p-4 text-sm space-y-4", children: [_jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs("div", { children: [_jsx("h4", { className: "text-xs font-semibold text-gray-600 uppercase tracking-wider mb-2", children: "Traffic Source" }), _jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex justify-between", children: [_jsx("span", { className: "text-gray-500", children: "Source" }), _jsx("span", { className: "font-medium text-gray-900", children: attr.source })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { className: "text-gray-500", children: "Medium" }), _jsx("span", { className: "font-medium text-gray-900", children: attr.medium })] }), attr.campaign && _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { className: "text-gray-500", children: "Campaign" }), _jsx("span", { className: "font-medium text-gray-900", children: attr.campaign })] }), attr.term && _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { className: "text-gray-500", children: "Keyword" }), _jsx("span", { className: "font-medium text-gray-900", children: attr.term })] }), attr.content && _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { className: "text-gray-500", children: "Content" }), _jsx("span", { className: "font-medium text-gray-900", children: attr.content })] })] })] }), _jsxs("div", { children: [_jsx("h4", { className: "text-xs font-semibold text-gray-600 uppercase tracking-wider mb-2", children: "Page Context" }), _jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { children: [_jsx("span", { className: "text-gray-500 text-xs", children: "Landing Page" }), _jsxs("div", { className: "flex items-center gap-1 mt-0.5", children: [_jsx(MapPin, { className: "w-3 h-3 text-gray-400 shrink-0" }), _jsx("span", { className: "font-medium text-gray-900 text-xs break-all", children: attr.landingPage })] })] }), attr.referrer && (_jsxs("div", { children: [_jsx("span", { className: "text-gray-500 text-xs", children: "Referrer" }), _jsxs("div", { className: "flex items-center gap-1 mt-0.5", children: [_jsx(ExternalLink, { className: "w-3 h-3 text-gray-400 shrink-0" }), _jsx("span", { className: "font-medium text-gray-900 text-xs break-all", children: attr.referrer })] })] })), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { className: "text-gray-500", children: "Device" }), _jsxs("span", { className: "flex items-center gap-1 font-medium text-gray-900", children: [_jsx(DeviceIcon, { type: attr.deviceType }), attr.deviceType] })] })] })] })] }), activeClickIds.length > 0 && (_jsxs("div", { children: [_jsx("h4", { className: "text-xs font-semibold text-gray-600 uppercase tracking-wider mb-2", children: "Click IDs" }), _jsx("div", { className: "flex flex-wrap gap-2", children: activeClickIds.map(([key, val]) => (_jsxs("div", { className: "px-2.5 py-1 bg-white border border-gray-200 rounded-lg", children: [_jsxs("span", { className: "text-xs text-gray-500", children: [key, ": "] }), _jsxs("span", { className: "text-xs font-mono text-gray-800", children: [String(val).slice(0, 20), "..."] })] }, key))) })] })), _jsxs("div", { className: "text-xs text-gray-500", children: ["Attribution captured ", attr.capturedAt] })] }))] }), _jsxs("div", { className: "px-4 py-3 border-t border-gray-200 flex items-center gap-2", children: [_jsx("button", { className: "px-3 py-1.5 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors", children: "Reply" }), _jsx("button", { className: "px-3 py-1.5 text-sm border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors", children: "Mark as Read" })] })] }, submission.id));
86
+ }) }))] }));
87
+ }
88
+ //# sourceMappingURL=FormSubmissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSubmissions.js","sourceRoot":"","sources":["../../src/views/FormSubmissions.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface FormsProps {
2
+ onNavigate?: (path: string) => void;
3
+ }
4
+ export declare function Forms({ onNavigate }: FormsProps): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=Forms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Forms.d.ts","sourceRoot":"","sources":["../../src/views/Forms.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,UAAU,2CA8F/C"}
@@ -0,0 +1,24 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Plus, MoreVertical, FileText, Send, Search, Loader2, AlertTriangle } from 'lucide-react';
4
+ import { useState, useMemo } from 'react';
5
+ import { sortByRelevance } from '../lib/search';
6
+ import { useApiData } from '../lib/useApiData';
7
+ export function Forms({ onNavigate }) {
8
+ const { data, loading, error, refetch } = useApiData('/forms');
9
+ const [searchQuery, setSearchQuery] = useState('');
10
+ const forms = data ?? [];
11
+ const filteredAndSorted = useMemo(() => {
12
+ let results = forms.filter((form) => form.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
13
+ (form.description ?? '').toLowerCase().includes(searchQuery.toLowerCase()));
14
+ if (searchQuery.trim()) {
15
+ results = sortByRelevance(results, searchQuery, (f) => [f.name, f.description ?? '']);
16
+ }
17
+ return results;
18
+ }, [forms, searchQuery]);
19
+ if (loading) {
20
+ return (_jsx("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8 flex items-center justify-center h-64", children: _jsx(Loader2, { className: "w-6 h-6 animate-spin text-blue-600" }) }));
21
+ }
22
+ return (_jsxs("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8", children: [error && (_jsxs("div", { className: "mb-4 flex items-center gap-3 rounded-lg border border-red-200 bg-red-50 p-3", children: [_jsx(AlertTriangle, { className: "w-5 h-5 text-red-600 shrink-0" }), _jsx("span", { className: "text-sm text-red-800 flex-1", children: error }), _jsx("button", { onClick: refetch, className: "px-3 py-1 text-sm text-red-700 border border-red-300 rounded-lg hover:bg-red-100 transition-colors", children: "Retry" })] })), _jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl sm:text-2xl font-semibold text-gray-900 mb-1", children: "Forms" }), _jsxs("p", { className: "text-sm text-gray-600", children: [filteredAndSorted.length, " total forms"] })] }), _jsxs("button", { onClick: () => onNavigate?.('/forms/new'), className: "flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors text-sm", children: [_jsx(Plus, { className: "w-4 h-4" }), "New Form"] })] }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 mb-4", children: _jsx("div", { className: "p-3", children: _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400" }), _jsx("input", { type: "text", placeholder: "Search forms...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "w-full pl-9 pr-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" })] }) }) }), filteredAndSorted.length === 0 ? (_jsxs("div", { className: "bg-white rounded-lg border border-gray-200 p-8 text-center", children: [_jsx("p", { className: "text-sm text-gray-500 mb-2", children: "No forms yet" }), _jsx("button", { className: "px-4 py-2 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors", children: "Create your first form" })] })) : (_jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", children: filteredAndSorted.map((form) => (_jsxs("div", { className: "bg-white rounded-lg border border-gray-200 p-4 hover:shadow-md transition-shadow", children: [_jsxs("div", { className: "flex items-start justify-between mb-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("h3", { className: "font-semibold text-gray-900 mb-1", children: form.name }), _jsx("p", { className: "text-sm text-gray-600 mb-2", children: form.description })] }), _jsx("button", { className: "p-1.5 hover:bg-gray-100 rounded transition-colors", children: _jsx(MoreVertical, { className: "w-4 h-4 text-gray-600" }) })] }), _jsxs("div", { className: "flex items-center gap-4 text-sm text-gray-600 mb-3", children: [_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(FileText, { className: "w-4 h-4" }), form.fields, " fields"] }), _jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Send, { className: "w-4 h-4" }), form.submissions, " submissions"] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { onClick: () => onNavigate?.(`/forms/${form.id}/submissions`), className: "flex-1 px-3 py-1.5 text-sm text-center bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors", children: "View Submissions" }), _jsx("button", { onClick: () => onNavigate?.(`/forms/${form.id}/edit`), className: "px-3 py-1.5 text-sm border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors", children: "Edit" })] })] }, form.id))) }))] }));
23
+ }
24
+ //# sourceMappingURL=Forms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Forms.js","sourceRoot":"","sources":["../../src/views/Forms.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface LoginProps {
2
+ onLogin: (email: string, password: string) => Promise<{
3
+ success: boolean;
4
+ error?: string;
5
+ }>;
6
+ onNavigate?: (path: string) => void;
7
+ oauthProviders?: string[];
8
+ }
9
+ export declare function Login({ onLogin, onNavigate, oauthProviders }: LoginProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=Login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Login.d.ts","sourceRoot":"","sources":["../../src/views/Login.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AA4ED,wBAAgB,KAAK,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,UAAU,2CA0JxE"}
@@ -0,0 +1,83 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { Shield, Eye, EyeOff, AlertTriangle, Loader2 } from 'lucide-react';
5
+ const OAUTH_LABELS = {
6
+ google: 'Google',
7
+ github: 'GitHub',
8
+ microsoft: 'Microsoft',
9
+ };
10
+ const OAUTH_COLORS = {
11
+ google: {
12
+ border: 'border-gray-300',
13
+ bg: 'bg-white',
14
+ text: 'text-gray-700',
15
+ hover: 'hover:bg-gray-50',
16
+ },
17
+ github: {
18
+ border: 'border-gray-800',
19
+ bg: 'bg-gray-900',
20
+ text: 'text-white',
21
+ hover: 'hover:bg-gray-800',
22
+ },
23
+ microsoft: {
24
+ border: 'border-blue-500',
25
+ bg: 'bg-white',
26
+ text: 'text-gray-700',
27
+ hover: 'hover:bg-blue-50',
28
+ },
29
+ };
30
+ function GoogleIcon() {
31
+ return (_jsxs("svg", { className: "w-5 h-5", viewBox: "0 0 24 24", "aria-hidden": "true", children: [_jsx("path", { d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 01-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z", fill: "#4285F4" }), _jsx("path", { d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z", fill: "#34A853" }), _jsx("path", { d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z", fill: "#FBBC05" }), _jsx("path", { d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z", fill: "#EA4335" })] }));
32
+ }
33
+ function MicrosoftIcon() {
34
+ return (_jsxs("svg", { className: "w-5 h-5", viewBox: "0 0 21 21", "aria-hidden": "true", children: [_jsx("rect", { x: "1", y: "1", width: "9", height: "9", fill: "#F25022" }), _jsx("rect", { x: "1", y: "11", width: "9", height: "9", fill: "#00A4EF" }), _jsx("rect", { x: "11", y: "1", width: "9", height: "9", fill: "#7FBA00" }), _jsx("rect", { x: "11", y: "11", width: "9", height: "9", fill: "#FFB900" })] }));
35
+ }
36
+ function OAuthIcon({ provider }) {
37
+ switch (provider) {
38
+ case 'google':
39
+ return _jsx(GoogleIcon, {});
40
+ case 'github':
41
+ return _jsx("svg", { className: "w-5 h-5", viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" }) });
42
+ case 'microsoft':
43
+ return _jsx(MicrosoftIcon, {});
44
+ default:
45
+ return null;
46
+ }
47
+ }
48
+ export function Login({ onLogin, onNavigate, oauthProviders }) {
49
+ const [email, setEmail] = useState('');
50
+ const [password, setPassword] = useState('');
51
+ const [showPassword, setShowPassword] = useState(false);
52
+ const [submitting, setSubmitting] = useState(false);
53
+ const [error, setError] = useState('');
54
+ const canSubmit = email.trim() && password && !submitting;
55
+ const handleSubmit = async (e) => {
56
+ e.preventDefault();
57
+ if (!canSubmit)
58
+ return;
59
+ setError('');
60
+ setSubmitting(true);
61
+ try {
62
+ const result = await onLogin(email.trim(), password);
63
+ if (!result.success) {
64
+ setError(result.error ?? 'Invalid email or password');
65
+ }
66
+ }
67
+ catch (err) {
68
+ setError(err instanceof Error ? err.message : 'An unexpected error occurred');
69
+ }
70
+ finally {
71
+ setSubmitting(false);
72
+ }
73
+ };
74
+ const handleOAuthClick = (provider) => {
75
+ window.location.href = `/api/cms/auth/oauth/${provider}`;
76
+ };
77
+ const enabledProviders = oauthProviders?.filter((p) => ['google', 'github', 'microsoft'].includes(p)) ?? [];
78
+ return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-gray-50 px-4", children: _jsxs("div", { className: "w-full max-w-md", children: [_jsxs("div", { className: "text-center mb-8", children: [_jsx("div", { className: "mx-auto mb-4 w-14 h-14 bg-blue-600 rounded-xl flex items-center justify-center", children: _jsx(Shield, { className: "w-7 h-7 text-white" }) }), _jsx("h1", { className: "text-2xl font-bold text-gray-900", children: "Actuate CMS" }), _jsx("p", { className: "text-gray-600 mt-2", children: "Sign in to your account" })] }), _jsxs("form", { onSubmit: handleSubmit, className: "bg-white rounded-xl border border-gray-200 p-6 shadow-sm space-y-5", children: [error && (_jsxs("div", { className: "flex items-start gap-3 p-3 bg-red-50 border border-red-200 rounded-lg", children: [_jsx(AlertTriangle, { className: "w-5 h-5 text-red-600 mt-0.5 shrink-0" }), _jsx("p", { className: "text-sm text-red-800", children: error })] })), _jsxs("div", { children: [_jsx("label", { htmlFor: "login-email", className: "block text-sm font-medium text-gray-700 mb-1.5", children: "Email Address" }), _jsx("input", { id: "login-email", type: "email", value: email, onChange: (e) => setEmail(e.target.value), placeholder: "admin@example.com", className: "w-full px-3 py-2.5 border border-gray-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500", required: true, autoFocus: true, autoComplete: "email" })] }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between mb-1.5", children: [_jsx("label", { htmlFor: "login-password", className: "block text-sm font-medium text-gray-700", children: "Password" }), onNavigate && (_jsx("button", { type: "button", onClick: () => onNavigate('/forgot-password'), className: "text-xs text-blue-600 hover:text-blue-700 font-medium", children: "Forgot Password?" }))] }), _jsxs("div", { className: "relative", children: [_jsx("input", { id: "login-password", type: showPassword ? 'text' : 'password', value: password, onChange: (e) => setPassword(e.target.value), placeholder: "Enter your password", className: "w-full px-3 py-2.5 pr-10 border border-gray-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500", required: true, autoComplete: "current-password" }), _jsx("button", { type: "button", onClick: () => setShowPassword(!showPassword), className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600", tabIndex: -1, children: showPassword ? _jsx(EyeOff, { className: "w-4 h-4" }) : _jsx(Eye, { className: "w-4 h-4" }) })] })] }), _jsx("button", { type: "submit", disabled: !canSubmit, className: "w-full py-2.5 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2", children: submitting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "w-4 h-4 animate-spin" }), "Signing in..."] })) : ('Sign In') }), enabledProviders.length > 0 && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "relative", children: [_jsx("div", { className: "absolute inset-0 flex items-center", children: _jsx("div", { className: "w-full border-t border-gray-200" }) }), _jsx("div", { className: "relative flex justify-center text-sm", children: _jsx("span", { className: "bg-white px-3 text-gray-500", children: "Or continue with" }) })] }), _jsx("div", { className: "grid gap-3", children: enabledProviders.map((provider) => {
79
+ const colors = OAUTH_COLORS[provider] ?? OAUTH_COLORS.google;
80
+ return (_jsxs("button", { type: "button", onClick: () => handleOAuthClick(provider), className: `w-full flex items-center justify-center gap-3 py-2.5 px-4 border ${colors?.border ?? ''} ${colors?.bg ?? ''} ${colors?.text ?? ''} rounded-lg font-medium text-sm ${colors?.hover ?? ''} transition-colors`, children: [_jsx(OAuthIcon, { provider: provider }), OAUTH_LABELS[provider] ?? provider] }, provider));
81
+ }) })] }))] })] }) }));
82
+ }
83
+ //# sourceMappingURL=Login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Login.js","sourceRoot":"","sources":["../../src/views/Login.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface MediaBrowserProps {
2
+ onNavigate?: (path: string) => void;
3
+ }
4
+ export declare function MediaBrowser({ onNavigate }: MediaBrowserProps): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=MediaBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaBrowser.d.ts","sourceRoot":"","sources":["../../src/views/MediaBrowser.tsx"],"names":[],"mappings":"AAiCA,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAYD,wBAAgB,YAAY,CAAC,EAAE,UAAU,EAAE,EAAE,iBAAiB,2CAstB7D"}