@jhits/plugin-blog 0.0.9 → 0.0.11

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 (276) hide show
  1. package/package.json +58 -59
  2. package/src/api/categories.ts +0 -43
  3. package/src/api/check-title.ts +0 -60
  4. package/src/api/config-handler.ts +0 -76
  5. package/src/api/handler.ts +0 -418
  6. package/src/api/index.ts +0 -33
  7. package/src/api/route.ts +0 -116
  8. package/src/api/router.ts +0 -128
  9. package/src/api-server.ts +0 -11
  10. package/src/config.ts +0 -161
  11. package/src/hooks/index.d.ts +0 -8
  12. package/src/hooks/index.d.ts.map +0 -1
  13. package/src/hooks/index.js +0 -7
  14. package/src/hooks/index.ts +0 -9
  15. package/src/hooks/useBlog.d.ts +0 -31
  16. package/src/hooks/useBlog.d.ts.map +0 -1
  17. package/src/hooks/useBlog.js +0 -57
  18. package/src/hooks/useBlog.ts +0 -85
  19. package/src/hooks/useBlogs.d.ts +0 -39
  20. package/src/hooks/useBlogs.d.ts.map +0 -1
  21. package/src/hooks/useBlogs.js +0 -82
  22. package/src/hooks/useBlogs.ts +0 -123
  23. package/src/hooks/useCategories.d.ts +0 -9
  24. package/src/hooks/useCategories.d.ts.map +0 -1
  25. package/src/hooks/useCategories.js +0 -70
  26. package/src/hooks/useCategories.ts +0 -76
  27. package/src/index.d.ts +0 -55
  28. package/src/index.d.ts.map +0 -1
  29. package/src/index.js +0 -228
  30. package/src/index.server.ts +0 -14
  31. package/src/index.tsx +0 -335
  32. package/src/init.d.ts +0 -40
  33. package/src/init.d.ts.map +0 -1
  34. package/src/init.js +0 -41
  35. package/src/init.tsx +0 -63
  36. package/src/lib/blocks/BlockRenderer.d.ts +0 -54
  37. package/src/lib/blocks/BlockRenderer.d.ts.map +0 -1
  38. package/src/lib/blocks/BlockRenderer.js +0 -54
  39. package/src/lib/blocks/BlockRenderer.tsx +0 -141
  40. package/src/lib/blocks/index.ts +0 -6
  41. package/src/lib/config-storage.d.ts +0 -30
  42. package/src/lib/config-storage.d.ts.map +0 -1
  43. package/src/lib/config-storage.js +0 -31
  44. package/src/lib/config-storage.ts +0 -65
  45. package/src/lib/index.ts +0 -9
  46. package/src/lib/layouts/blocks/ColumnsBlock.d.ts +0 -25
  47. package/src/lib/layouts/blocks/ColumnsBlock.d.ts.map +0 -1
  48. package/src/lib/layouts/blocks/ColumnsBlock.js +0 -182
  49. package/src/lib/layouts/blocks/ColumnsBlock.tsx +0 -298
  50. package/src/lib/layouts/blocks/ColumnsBlock.tsx.tmp +0 -81
  51. package/src/lib/layouts/blocks/SectionBlock.d.ts +0 -25
  52. package/src/lib/layouts/blocks/SectionBlock.d.ts.map +0 -1
  53. package/src/lib/layouts/blocks/SectionBlock.js +0 -44
  54. package/src/lib/layouts/blocks/SectionBlock.tsx +0 -104
  55. package/src/lib/layouts/blocks/index.ts +0 -8
  56. package/src/lib/layouts/index.d.ts +0 -23
  57. package/src/lib/layouts/index.d.ts.map +0 -1
  58. package/src/lib/layouts/index.js +0 -45
  59. package/src/lib/layouts/index.ts +0 -52
  60. package/src/lib/layouts/registerLayoutBlocks.d.ts +0 -9
  61. package/src/lib/layouts/registerLayoutBlocks.d.ts.map +0 -1
  62. package/src/lib/layouts/registerLayoutBlocks.js +0 -60
  63. package/src/lib/layouts/registerLayoutBlocks.ts +0 -64
  64. package/src/lib/mappers/apiMapper.d.ts +0 -66
  65. package/src/lib/mappers/apiMapper.d.ts.map +0 -1
  66. package/src/lib/mappers/apiMapper.js +0 -191
  67. package/src/lib/mappers/apiMapper.ts +0 -254
  68. package/src/lib/migration/index.ts +0 -6
  69. package/src/lib/migration/mapper.ts +0 -140
  70. package/src/lib/rich-text/RichTextEditor.d.ts +0 -45
  71. package/src/lib/rich-text/RichTextEditor.d.ts.map +0 -1
  72. package/src/lib/rich-text/RichTextEditor.js +0 -564
  73. package/src/lib/rich-text/RichTextEditor.tsx +0 -826
  74. package/src/lib/rich-text/RichTextPreview.d.ts +0 -16
  75. package/src/lib/rich-text/RichTextPreview.d.ts.map +0 -1
  76. package/src/lib/rich-text/RichTextPreview.js +0 -144
  77. package/src/lib/rich-text/RichTextPreview.tsx +0 -210
  78. package/src/lib/rich-text/index.d.ts +0 -9
  79. package/src/lib/rich-text/index.d.ts.map +0 -1
  80. package/src/lib/rich-text/index.js +0 -6
  81. package/src/lib/rich-text/index.ts +0 -10
  82. package/src/lib/utils/blockHelpers.d.ts +0 -23
  83. package/src/lib/utils/blockHelpers.d.ts.map +0 -1
  84. package/src/lib/utils/blockHelpers.js +0 -65
  85. package/src/lib/utils/blockHelpers.ts +0 -72
  86. package/src/lib/utils/configValidation.d.ts +0 -23
  87. package/src/lib/utils/configValidation.d.ts.map +0 -1
  88. package/src/lib/utils/configValidation.js +0 -113
  89. package/src/lib/utils/configValidation.ts +0 -137
  90. package/src/lib/utils/index.ts +0 -8
  91. package/src/lib/utils/slugify.ts +0 -79
  92. package/src/registry/BlockRegistry.d.ts +0 -62
  93. package/src/registry/BlockRegistry.d.ts.map +0 -1
  94. package/src/registry/BlockRegistry.js +0 -112
  95. package/src/registry/BlockRegistry.ts +0 -139
  96. package/src/registry/index.d.ts +0 -6
  97. package/src/registry/index.d.ts.map +0 -1
  98. package/src/registry/index.js +0 -4
  99. package/src/registry/index.ts +0 -11
  100. package/src/state/EditorContext.d.ts +0 -45
  101. package/src/state/EditorContext.d.ts.map +0 -1
  102. package/src/state/EditorContext.js +0 -215
  103. package/src/state/EditorContext.tsx +0 -283
  104. package/src/state/index.d.ts +0 -7
  105. package/src/state/index.d.ts.map +0 -1
  106. package/src/state/index.js +0 -6
  107. package/src/state/index.ts +0 -8
  108. package/src/state/reducer.d.ts +0 -11
  109. package/src/state/reducer.d.ts.map +0 -1
  110. package/src/state/reducer.js +0 -443
  111. package/src/state/reducer.ts +0 -694
  112. package/src/state/types.d.ts +0 -162
  113. package/src/state/types.d.ts.map +0 -1
  114. package/src/state/types.js +0 -27
  115. package/src/state/types.ts +0 -160
  116. package/src/types/block.d.ts +0 -221
  117. package/src/types/block.d.ts.map +0 -1
  118. package/src/types/block.js +0 -6
  119. package/src/types/block.ts +0 -269
  120. package/src/types/index.d.ts +0 -8
  121. package/src/types/index.d.ts.map +0 -1
  122. package/src/types/index.js +0 -5
  123. package/src/types/index.ts +0 -17
  124. package/src/types/post.d.ts +0 -136
  125. package/src/types/post.d.ts.map +0 -1
  126. package/src/types/post.js +0 -5
  127. package/src/types/post.ts +0 -169
  128. package/src/utils/client.d.ts +0 -48
  129. package/src/utils/client.d.ts.map +0 -1
  130. package/src/utils/client.js +0 -77
  131. package/src/utils/client.ts +0 -122
  132. package/src/utils/index.ts +0 -7
  133. package/src/views/CanvasEditor/BlockWrapper.d.ts +0 -16
  134. package/src/views/CanvasEditor/BlockWrapper.d.ts.map +0 -1
  135. package/src/views/CanvasEditor/BlockWrapper.js +0 -276
  136. package/src/views/CanvasEditor/BlockWrapper.tsx +0 -522
  137. package/src/views/CanvasEditor/CanvasEditorView.d.ts +0 -14
  138. package/src/views/CanvasEditor/CanvasEditorView.d.ts.map +0 -1
  139. package/src/views/CanvasEditor/CanvasEditorView.js +0 -209
  140. package/src/views/CanvasEditor/CanvasEditorView.tsx +0 -337
  141. package/src/views/CanvasEditor/EditorBody.d.ts +0 -22
  142. package/src/views/CanvasEditor/EditorBody.d.ts.map +0 -1
  143. package/src/views/CanvasEditor/EditorBody.js +0 -505
  144. package/src/views/CanvasEditor/EditorBody.tsx +0 -665
  145. package/src/views/CanvasEditor/EditorHeader.d.ts +0 -18
  146. package/src/views/CanvasEditor/EditorHeader.d.ts.map +0 -1
  147. package/src/views/CanvasEditor/EditorHeader.js +0 -101
  148. package/src/views/CanvasEditor/EditorHeader.tsx +0 -268
  149. package/src/views/CanvasEditor/LayoutContainer.d.ts +0 -17
  150. package/src/views/CanvasEditor/LayoutContainer.d.ts.map +0 -1
  151. package/src/views/CanvasEditor/LayoutContainer.js +0 -222
  152. package/src/views/CanvasEditor/LayoutContainer.tsx +0 -322
  153. package/src/views/CanvasEditor/SaveConfirmationModal.d.ts +0 -13
  154. package/src/views/CanvasEditor/SaveConfirmationModal.d.ts.map +0 -1
  155. package/src/views/CanvasEditor/SaveConfirmationModal.js +0 -78
  156. package/src/views/CanvasEditor/SaveConfirmationModal.tsx +0 -233
  157. package/src/views/CanvasEditor/components/CustomBlockItem.d.ts +0 -14
  158. package/src/views/CanvasEditor/components/CustomBlockItem.d.ts.map +0 -1
  159. package/src/views/CanvasEditor/components/CustomBlockItem.js +0 -44
  160. package/src/views/CanvasEditor/components/CustomBlockItem.tsx +0 -92
  161. package/src/views/CanvasEditor/components/EditorCanvas.d.ts +0 -29
  162. package/src/views/CanvasEditor/components/EditorCanvas.d.ts.map +0 -1
  163. package/src/views/CanvasEditor/components/EditorCanvas.js +0 -32
  164. package/src/views/CanvasEditor/components/EditorCanvas.tsx +0 -160
  165. package/src/views/CanvasEditor/components/EditorLibrary.d.ts +0 -7
  166. package/src/views/CanvasEditor/components/EditorLibrary.d.ts.map +0 -1
  167. package/src/views/CanvasEditor/components/EditorLibrary.js +0 -25
  168. package/src/views/CanvasEditor/components/EditorLibrary.tsx +0 -122
  169. package/src/views/CanvasEditor/components/EditorSidebar.d.ts +0 -13
  170. package/src/views/CanvasEditor/components/EditorSidebar.d.ts.map +0 -1
  171. package/src/views/CanvasEditor/components/EditorSidebar.js +0 -20
  172. package/src/views/CanvasEditor/components/EditorSidebar.tsx +0 -181
  173. package/src/views/CanvasEditor/components/ErrorBanner.d.ts +0 -6
  174. package/src/views/CanvasEditor/components/ErrorBanner.d.ts.map +0 -1
  175. package/src/views/CanvasEditor/components/ErrorBanner.js +0 -8
  176. package/src/views/CanvasEditor/components/ErrorBanner.tsx +0 -31
  177. package/src/views/CanvasEditor/components/FeaturedMediaSection.d.ts +0 -25
  178. package/src/views/CanvasEditor/components/FeaturedMediaSection.d.ts.map +0 -1
  179. package/src/views/CanvasEditor/components/FeaturedMediaSection.js +0 -182
  180. package/src/views/CanvasEditor/components/FeaturedMediaSection.tsx +0 -341
  181. package/src/views/CanvasEditor/components/LibraryItem.d.ts +0 -14
  182. package/src/views/CanvasEditor/components/LibraryItem.d.ts.map +0 -1
  183. package/src/views/CanvasEditor/components/LibraryItem.js +0 -43
  184. package/src/views/CanvasEditor/components/LibraryItem.tsx +0 -80
  185. package/src/views/CanvasEditor/components/PrivacySettingsSection.d.ts +0 -15
  186. package/src/views/CanvasEditor/components/PrivacySettingsSection.d.ts.map +0 -1
  187. package/src/views/CanvasEditor/components/PrivacySettingsSection.js +0 -63
  188. package/src/views/CanvasEditor/components/PrivacySettingsSection.tsx +0 -212
  189. package/src/views/CanvasEditor/components/index.d.ts +0 -21
  190. package/src/views/CanvasEditor/components/index.d.ts.map +0 -1
  191. package/src/views/CanvasEditor/components/index.js +0 -12
  192. package/src/views/CanvasEditor/components/index.ts +0 -28
  193. package/src/views/CanvasEditor/hooks/index.d.ts +0 -10
  194. package/src/views/CanvasEditor/hooks/index.d.ts.map +0 -1
  195. package/src/views/CanvasEditor/hooks/index.js +0 -9
  196. package/src/views/CanvasEditor/hooks/index.ts +0 -10
  197. package/src/views/CanvasEditor/hooks/useHeroBlock.d.ts +0 -8
  198. package/src/views/CanvasEditor/hooks/useHeroBlock.d.ts.map +0 -1
  199. package/src/views/CanvasEditor/hooks/useHeroBlock.js +0 -79
  200. package/src/views/CanvasEditor/hooks/useHeroBlock.ts +0 -103
  201. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts +0 -3
  202. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  203. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.js +0 -114
  204. package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.ts +0 -142
  205. package/src/views/CanvasEditor/hooks/usePostLoader.d.ts +0 -5
  206. package/src/views/CanvasEditor/hooks/usePostLoader.d.ts.map +0 -1
  207. package/src/views/CanvasEditor/hooks/usePostLoader.js +0 -32
  208. package/src/views/CanvasEditor/hooks/usePostLoader.ts +0 -39
  209. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts +0 -2
  210. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts.map +0 -1
  211. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.js +0 -47
  212. package/src/views/CanvasEditor/hooks/useRegisteredBlocks.ts +0 -55
  213. package/src/views/CanvasEditor/hooks/useUnsavedChanges.d.ts +0 -25
  214. package/src/views/CanvasEditor/hooks/useUnsavedChanges.d.ts.map +0 -1
  215. package/src/views/CanvasEditor/hooks/useUnsavedChanges.js +0 -285
  216. package/src/views/CanvasEditor/hooks/useUnsavedChanges.ts +0 -339
  217. package/src/views/CanvasEditor/index.d.ts +0 -16
  218. package/src/views/CanvasEditor/index.d.ts.map +0 -1
  219. package/src/views/CanvasEditor/index.js +0 -9
  220. package/src/views/CanvasEditor/index.ts +0 -16
  221. package/src/views/PostManager/EmptyState.d.ts +0 -10
  222. package/src/views/PostManager/EmptyState.d.ts.map +0 -1
  223. package/src/views/PostManager/EmptyState.js +0 -12
  224. package/src/views/PostManager/EmptyState.tsx +0 -42
  225. package/src/views/PostManager/PostActionsMenu.d.ts +0 -12
  226. package/src/views/PostManager/PostActionsMenu.d.ts.map +0 -1
  227. package/src/views/PostManager/PostActionsMenu.js +0 -58
  228. package/src/views/PostManager/PostActionsMenu.tsx +0 -112
  229. package/src/views/PostManager/PostCards.d.ts +0 -15
  230. package/src/views/PostManager/PostCards.d.ts.map +0 -1
  231. package/src/views/PostManager/PostCards.js +0 -79
  232. package/src/views/PostManager/PostCards.tsx +0 -197
  233. package/src/views/PostManager/PostFilters.d.ts +0 -16
  234. package/src/views/PostManager/PostFilters.d.ts.map +0 -1
  235. package/src/views/PostManager/PostFilters.js +0 -10
  236. package/src/views/PostManager/PostFilters.tsx +0 -95
  237. package/src/views/PostManager/PostManagerView.d.ts +0 -11
  238. package/src/views/PostManager/PostManagerView.d.ts.map +0 -1
  239. package/src/views/PostManager/PostManagerView.js +0 -174
  240. package/src/views/PostManager/PostManagerView.tsx +0 -289
  241. package/src/views/PostManager/PostStats.d.ts +0 -11
  242. package/src/views/PostManager/PostStats.d.ts.map +0 -1
  243. package/src/views/PostManager/PostStats.js +0 -46
  244. package/src/views/PostManager/PostStats.tsx +0 -81
  245. package/src/views/PostManager/PostTable.d.ts +0 -15
  246. package/src/views/PostManager/PostTable.d.ts.map +0 -1
  247. package/src/views/PostManager/PostTable.js +0 -79
  248. package/src/views/PostManager/PostTable.tsx +0 -230
  249. package/src/views/PostManager/index.d.ts +0 -12
  250. package/src/views/PostManager/index.d.ts.map +0 -1
  251. package/src/views/PostManager/index.js +0 -11
  252. package/src/views/PostManager/index.ts +0 -15
  253. package/src/views/Preview/PreviewBridgeView.d.ts +0 -12
  254. package/src/views/Preview/PreviewBridgeView.d.ts.map +0 -1
  255. package/src/views/Preview/PreviewBridgeView.js +0 -11
  256. package/src/views/Preview/PreviewBridgeView.tsx +0 -64
  257. package/src/views/Preview/index.d.ts +0 -6
  258. package/src/views/Preview/index.d.ts.map +0 -1
  259. package/src/views/Preview/index.js +0 -4
  260. package/src/views/Preview/index.ts +0 -7
  261. package/src/views/Settings/SettingsView.d.ts +0 -10
  262. package/src/views/Settings/SettingsView.d.ts.map +0 -1
  263. package/src/views/Settings/SettingsView.js +0 -111
  264. package/src/views/Settings/SettingsView.tsx +0 -298
  265. package/src/views/Settings/index.d.ts +0 -6
  266. package/src/views/Settings/index.d.ts.map +0 -1
  267. package/src/views/Settings/index.js +0 -4
  268. package/src/views/Settings/index.ts +0 -7
  269. package/src/views/SlugSEO/SlugSEOManagerView.d.ts +0 -12
  270. package/src/views/SlugSEO/SlugSEOManagerView.d.ts.map +0 -1
  271. package/src/views/SlugSEO/SlugSEOManagerView.js +0 -11
  272. package/src/views/SlugSEO/SlugSEOManagerView.tsx +0 -94
  273. package/src/views/SlugSEO/index.d.ts +0 -6
  274. package/src/views/SlugSEO/index.d.ts.map +0 -1
  275. package/src/views/SlugSEO/index.js +0 -4
  276. package/src/views/SlugSEO/index.ts +0 -7
@@ -1,298 +0,0 @@
1
- /**
2
- * Settings View - Development/Installation Screen
3
- * Allows manual configuration of plugin settings (darkMode, backgroundColors)
4
- */
5
-
6
- 'use client';
7
-
8
- import React, { useState, useEffect } from 'react';
9
- import { Save, RotateCcw, Palette, Moon, Sun } from 'lucide-react';
10
-
11
- export interface SettingsViewProps {
12
- siteId: string;
13
- locale: string;
14
- }
15
-
16
- export function SettingsView({ siteId, locale }: SettingsViewProps) {
17
- // Get current config from window global
18
- const getCurrentConfig = () => {
19
- if (typeof window !== 'undefined' && (window as any).__JHITS_PLUGIN_PROPS__) {
20
- const pluginProps = (window as any).__JHITS_PLUGIN_PROPS__['plugin-blog'];
21
- return {
22
- darkMode: pluginProps?.darkMode ?? true,
23
- backgroundColors: pluginProps?.backgroundColors ?? {
24
- light: '#ffffff',
25
- dark: '#171717',
26
- },
27
- };
28
- }
29
- return {
30
- darkMode: true,
31
- backgroundColors: {
32
- light: '#ffffff',
33
- dark: '#171717',
34
- },
35
- };
36
- };
37
-
38
- const [darkMode, setDarkMode] = useState<boolean>(getCurrentConfig().darkMode);
39
- const [lightBg, setLightBg] = useState<string>(getCurrentConfig().backgroundColors.light);
40
- const [darkBg, setDarkBg] = useState<string>(getCurrentConfig().backgroundColors.dark || '#171717');
41
- const [hasChanges, setHasChanges] = useState<boolean>(false);
42
- const [saved, setSaved] = useState<boolean>(false);
43
-
44
- // Check for changes
45
- useEffect(() => {
46
- const current = getCurrentConfig();
47
- const hasChanges =
48
- darkMode !== current.darkMode ||
49
- lightBg !== current.backgroundColors.light ||
50
- darkBg !== (current.backgroundColors.dark || '#171717');
51
- setHasChanges(hasChanges);
52
- setSaved(false);
53
- }, [darkMode, lightBg, darkBg]);
54
-
55
- // Save configuration
56
- const handleSave = () => {
57
- if (typeof window === 'undefined') return;
58
-
59
- // Initialize window global if needed
60
- if (!(window as any).__JHITS_PLUGIN_PROPS__) {
61
- (window as any).__JHITS_PLUGIN_PROPS__ = {};
62
- }
63
-
64
- // Update configuration
65
- (window as any).__JHITS_PLUGIN_PROPS__['plugin-blog'] = {
66
- ...((window as any).__JHITS_PLUGIN_PROPS__['plugin-blog'] || {}),
67
- darkMode,
68
- backgroundColors: {
69
- light: lightBg,
70
- dark: darkBg,
71
- },
72
- };
73
-
74
- // Also save to localStorage for persistence
75
- try {
76
- localStorage.setItem('__JHITS_PLUGIN_BLOG_CONFIG__', JSON.stringify({
77
- darkMode,
78
- backgroundColors: {
79
- light: lightBg,
80
- dark: darkBg,
81
- },
82
- }));
83
- } catch (e) {
84
- console.warn('[SettingsView] Failed to save to localStorage:', e);
85
- }
86
-
87
- setSaved(true);
88
- setTimeout(() => setSaved(false), 2000);
89
-
90
- // Trigger a custom event to notify other components
91
- window.dispatchEvent(new CustomEvent('blog-plugin-config-updated', {
92
- detail: { darkMode, backgroundColors: { light: lightBg, dark: darkBg } }
93
- }));
94
-
95
- console.log('[SettingsView] Configuration saved:', {
96
- darkMode,
97
- backgroundColors: { light: lightBg, dark: darkBg },
98
- });
99
- };
100
-
101
- // Reset to defaults
102
- const handleReset = () => {
103
- setDarkMode(true);
104
- setLightBg('#ffffff');
105
- setDarkBg('#171717');
106
- };
107
-
108
- // Load from localStorage on mount
109
- useEffect(() => {
110
- try {
111
- const saved = localStorage.getItem('__JHITS_PLUGIN_BLOG_CONFIG__');
112
- if (saved) {
113
- const config = JSON.parse(saved);
114
- setDarkMode(config.darkMode ?? true);
115
- setLightBg(config.backgroundColors?.light ?? '#ffffff');
116
- setDarkBg(config.backgroundColors?.dark ?? '#171717');
117
- }
118
- } catch (e) {
119
- console.warn('[SettingsView] Failed to load from localStorage:', e);
120
- }
121
- }, []);
122
-
123
- return (
124
- <div className="min-h-screen bg-neutral-50 dark:bg-neutral-900 p-8">
125
- <div className="max-w-4xl mx-auto">
126
- {/* Header */}
127
- <div className="mb-8">
128
- <h1 className="text-4xl font-black uppercase tracking-tighter text-neutral-950 dark:text-white mb-2">
129
- Blog Plugin Settings
130
- </h1>
131
- <p className="text-sm text-neutral-600 dark:text-neutral-400">
132
- Configure editor appearance and behavior. Changes are applied immediately.
133
- </p>
134
- </div>
135
-
136
- {/* Settings Card */}
137
- <div className="bg-white dark:bg-neutral-800 rounded-[2.5rem] border border-neutral-200 dark:border-neutral-700 shadow-lg p-8">
138
- {/* Dark Mode Toggle */}
139
- <div className="mb-8 pb-8 border-b border-neutral-200 dark:border-neutral-700">
140
- <div className="flex items-center justify-between mb-4">
141
- <div className="flex items-center gap-3">
142
- {darkMode ? (
143
- <Moon className="size-5 text-neutral-600 dark:text-neutral-400" />
144
- ) : (
145
- <Sun className="size-5 text-neutral-600 dark:text-neutral-400" />
146
- )}
147
- <div>
148
- <label className="text-sm font-black uppercase tracking-widest text-neutral-600 dark:text-neutral-400">
149
- Dark Mode
150
- </label>
151
- <p className="text-xs text-neutral-500 dark:text-neutral-500 mt-1">
152
- Enable dark mode for editor content area and wrappers
153
- </p>
154
- </div>
155
- </div>
156
- <button
157
- onClick={() => setDarkMode(!darkMode)}
158
- className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${
159
- darkMode
160
- ? 'bg-primary'
161
- : 'bg-neutral-300 dark:bg-neutral-600'
162
- }`}
163
- >
164
- <span
165
- className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${
166
- darkMode ? 'translate-x-6' : 'translate-x-1'
167
- }`}
168
- />
169
- </button>
170
- </div>
171
- </div>
172
-
173
- {/* Background Colors */}
174
- <div className="mb-8">
175
- <div className="flex items-center gap-3 mb-6">
176
- <Palette className="size-5 text-neutral-600 dark:text-neutral-400" />
177
- <div>
178
- <label className="text-sm font-black uppercase tracking-widest text-neutral-600 dark:text-neutral-400">
179
- Background Colors
180
- </label>
181
- <p className="text-xs text-neutral-500 dark:text-neutral-500 mt-1">
182
- Set custom background colors for the editor canvas
183
- </p>
184
- </div>
185
- </div>
186
-
187
- <div className="space-y-4">
188
- {/* Light Mode Background */}
189
- <div>
190
- <label className="block text-[10px] font-black uppercase tracking-widest text-neutral-500 dark:text-neutral-500 mb-2">
191
- Light Mode Background <span className="text-red-500">*</span>
192
- </label>
193
- <div className="flex items-center gap-3">
194
- <input
195
- type="text"
196
- value={lightBg}
197
- onChange={(e) => setLightBg(e.target.value)}
198
- placeholder="#ffffff"
199
- className="flex-1 bg-dashboard-card border border-dashboard-border p-4 rounded-2xl text-sm font-bold outline-none focus:border-primary transition-all text-dashboard-text"
200
- />
201
- <div
202
- className="w-16 h-16 rounded-xl border-2 border-neutral-200 dark:border-neutral-700"
203
- style={{ backgroundColor: lightBg }}
204
- />
205
- </div>
206
- <p className="text-xs text-neutral-400 dark:text-neutral-600 mt-1">
207
- CSS color value (hex, rgb, or named color)
208
- </p>
209
- </div>
210
-
211
- {/* Dark Mode Background */}
212
- <div>
213
- <label className="block text-[10px] font-black uppercase tracking-widest text-neutral-500 dark:text-neutral-500 mb-2">
214
- Dark Mode Background <span className="text-neutral-400">(Optional)</span>
215
- </label>
216
- <div className="flex items-center gap-3">
217
- <input
218
- type="text"
219
- value={darkBg}
220
- onChange={(e) => setDarkBg(e.target.value)}
221
- placeholder="#171717"
222
- disabled={!darkMode}
223
- className={`flex-1 bg-white dark:bg-neutral-900/50 border border-neutral-300 dark:border-neutral-700 p-4 rounded-2xl text-sm font-bold outline-none focus:border-primary transition-all dark:text-neutral-100 ${
224
- !darkMode ? 'opacity-50 cursor-not-allowed' : ''
225
- }`}
226
- />
227
- <div
228
- className={`w-16 h-16 rounded-xl border-2 border-neutral-200 dark:border-neutral-700 ${
229
- !darkMode ? 'opacity-50' : ''
230
- }`}
231
- style={{ backgroundColor: darkBg }}
232
- />
233
- </div>
234
- <p className="text-xs text-neutral-400 dark:text-neutral-600 mt-1">
235
- Only used when dark mode is enabled
236
- </p>
237
- </div>
238
- </div>
239
- </div>
240
-
241
- {/* Preview */}
242
- <div className="mb-8 p-6 bg-neutral-50 dark:bg-neutral-900/50 rounded-2xl border border-neutral-200 dark:border-neutral-700">
243
- <label className="block text-[10px] font-black uppercase tracking-widest text-neutral-500 dark:text-neutral-500 mb-3">
244
- Preview
245
- </label>
246
- <div
247
- className="h-32 rounded-xl border-2 border-dashed border-neutral-300 dark:border-neutral-700 flex items-center justify-center"
248
- style={{
249
- backgroundColor: darkMode ? darkBg : lightBg,
250
- }}
251
- >
252
- <span className="text-xs font-bold uppercase tracking-widest text-neutral-600 dark:text-neutral-400">
253
- Editor Canvas Preview
254
- </span>
255
- </div>
256
- </div>
257
-
258
- {/* Actions */}
259
- <div className="flex items-center justify-between pt-6 border-t border-neutral-200 dark:border-neutral-700">
260
- <button
261
- onClick={handleReset}
262
- className="px-6 py-3 rounded-full border border-neutral-300 dark:border-neutral-700 bg-white dark:bg-neutral-900/50 text-sm font-black uppercase tracking-widest text-neutral-600 dark:text-neutral-400 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors flex items-center gap-2"
263
- >
264
- <RotateCcw className="size-4" />
265
- Reset
266
- </button>
267
- <button
268
- onClick={handleSave}
269
- disabled={!hasChanges}
270
- className={`px-6 py-3 rounded-full text-sm font-black uppercase tracking-widest transition-all flex items-center gap-2 ${
271
- hasChanges
272
- ? 'bg-primary text-white hover:bg-primary/90 shadow-lg shadow-primary/20'
273
- : 'bg-neutral-200 dark:bg-neutral-700 text-neutral-400 dark:text-neutral-600 cursor-not-allowed'
274
- }`}
275
- >
276
- <Save className="size-4" />
277
- {saved ? 'Saved!' : 'Save Changes'}
278
- </button>
279
- </div>
280
- </div>
281
-
282
- {/* Info Card */}
283
- <div className="mt-6 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-2xl p-6">
284
- <h3 className="text-sm font-black uppercase tracking-widest text-blue-900 dark:text-blue-300 mb-2">
285
- How It Works
286
- </h3>
287
- <ul className="text-xs text-blue-800 dark:text-blue-400 space-y-1 list-disc list-inside">
288
- <li>Changes are saved to <code className="bg-blue-100 dark:bg-blue-900/50 px-1 rounded">window.__JHITS_PLUGIN_PROPS__</code> and localStorage</li>
289
- <li>Configuration persists across page refreshes</li>
290
- <li>To apply changes in the editor, navigate to a post editor page</li>
291
- <li>For production, configure these settings in your client app's blog config file</li>
292
- </ul>
293
- </div>
294
- </div>
295
- </div>
296
- );
297
- }
298
-
@@ -1,6 +0,0 @@
1
- /**
2
- * Settings View Exports
3
- */
4
- export { SettingsView } from './SettingsView';
5
- export type { SettingsViewProps } from './SettingsView';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,4 +0,0 @@
1
- /**
2
- * Settings View Exports
3
- */
4
- export { SettingsView } from './SettingsView';
@@ -1,7 +0,0 @@
1
- /**
2
- * Settings View Exports
3
- */
4
-
5
- export { SettingsView } from './SettingsView';
6
- export type { SettingsViewProps } from './SettingsView';
7
-
@@ -1,12 +0,0 @@
1
- /**
2
- * Slug & SEO Manager View
3
- * URL and SEO metadata management
4
- * Follows dashboard earth-tone design system
5
- */
6
- export interface SlugSEOManagerViewProps {
7
- postId?: string;
8
- siteId: string;
9
- locale: string;
10
- }
11
- export declare function SlugSEOManagerView({ postId, siteId, locale }: SlugSEOManagerViewProps): import("react/jsx-runtime").JSX.Element;
12
- //# sourceMappingURL=SlugSEOManagerView.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SlugSEOManagerView.d.ts","sourceRoot":"","sources":["SlugSEOManagerView.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,uBAAuB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,uBAAuB,2CA2ErF"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Slug & SEO Manager View
3
- * URL and SEO metadata management
4
- * Follows dashboard earth-tone design system
5
- */
6
- 'use client';
7
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
- import { Search, Link2, FileText } from 'lucide-react';
9
- export function SlugSEOManagerView({ postId, siteId, locale }) {
10
- return (_jsx("div", { className: "h-full w-full bg-white dark:bg-neutral-900 p-8 overflow-y-auto", children: _jsxs("div", { className: "max-w-4xl mx-auto", children: [_jsx("h1", { className: "text-3xl font-black text-neutral-950 dark:text-white uppercase tracking-tighter mb-2", children: "Slug & SEO Manager" }), _jsx("p", { className: "text-sm text-neutral-500 dark:text-neutral-400 mb-8", children: postId ? `Managing SEO for post: ${postId}` : 'Manage URL slugs and SEO metadata' }), _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "p-6 bg-neutral-100 dark:bg-neutral-800/50 rounded-[2.5rem] border border-neutral-300 dark:border-neutral-700", children: [_jsx("label", { className: "block text-sm font-black text-neutral-950 dark:text-white uppercase tracking-tight mb-3", children: "URL Slug" }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Link2, { className: "text-neutral-400 size-5" }), _jsx("input", { type: "text", placeholder: "post-url-slug", className: "flex-1 px-4 py-3 bg-white dark:bg-neutral-900 border border-neutral-300 dark:border-neutral-700 rounded-2xl text-sm focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none" })] }), _jsx("p", { className: "text-xs text-neutral-500 dark:text-neutral-400 mt-2", children: "Collision detection will appear here" })] }), _jsxs("div", { className: "p-6 bg-neutral-100 dark:bg-neutral-800/50 rounded-[2.5rem] border border-neutral-300 dark:border-neutral-700", children: [_jsx("label", { className: "block text-sm font-black text-neutral-950 dark:text-white uppercase tracking-tight mb-3", children: "Search Result Preview" }), _jsxs("div", { className: "bg-white dark:bg-neutral-900 rounded-2xl p-4 border border-neutral-300 dark:border-neutral-700", children: [_jsxs("div", { className: "flex items-center gap-2 mb-2", children: [_jsx(Search, { size: 16, className: "text-neutral-400" }), _jsx("span", { className: "text-xs text-neutral-500", children: "Google Search Result" })] }), _jsxs("div", { className: "space-y-1", children: [_jsx("h3", { className: "text-lg text-blue-600 dark:text-blue-400 hover:underline cursor-pointer", children: "Post Title Will Appear Here" }), _jsx("p", { className: "text-sm text-green-700 dark:text-green-400", children: "https://example.com/blog/post-url-slug" }), _jsx("p", { className: "text-sm text-neutral-600 dark:text-neutral-400", children: "Meta description will appear here. This is what users see in search results." })] })] })] }), _jsxs("div", { className: "p-6 bg-neutral-100 dark:bg-neutral-800/50 rounded-[2.5rem] border border-neutral-300 dark:border-neutral-700", children: [_jsx("label", { className: "block text-sm font-black text-neutral-950 dark:text-white uppercase tracking-tight mb-3", children: "Meta Description" }), _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(FileText, { className: "text-neutral-400 size-5 mt-1" }), _jsx("textarea", { placeholder: "Enter meta description for search engines...", rows: 4, className: "flex-1 px-4 py-3 bg-white dark:bg-neutral-900 border border-neutral-300 dark:border-neutral-700 rounded-2xl text-sm focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none resize-none" })] }), _jsx("p", { className: "text-xs text-neutral-500 dark:text-neutral-400 mt-2", children: "0 / 160 characters" })] })] })] }) }));
11
- }
@@ -1,94 +0,0 @@
1
- /**
2
- * Slug & SEO Manager View
3
- * URL and SEO metadata management
4
- * Follows dashboard earth-tone design system
5
- */
6
-
7
- 'use client';
8
-
9
- import React from 'react';
10
- import { Search, Link2, FileText } from 'lucide-react';
11
-
12
- export interface SlugSEOManagerViewProps {
13
- postId?: string;
14
- siteId: string;
15
- locale: string;
16
- }
17
-
18
- export function SlugSEOManagerView({ postId, siteId, locale }: SlugSEOManagerViewProps) {
19
- return (
20
- <div className="h-full w-full bg-white dark:bg-neutral-900 p-8 overflow-y-auto">
21
- <div className="max-w-4xl mx-auto">
22
- <h1 className="text-3xl font-black text-neutral-950 dark:text-white uppercase tracking-tighter mb-2">
23
- Slug & SEO Manager
24
- </h1>
25
- <p className="text-sm text-neutral-500 dark:text-neutral-400 mb-8">
26
- {postId ? `Managing SEO for post: ${postId}` : 'Manage URL slugs and SEO metadata'}
27
- </p>
28
-
29
- <div className="space-y-6">
30
- {/* Slug Editor */}
31
- <div className="p-6 bg-neutral-100 dark:bg-neutral-800/50 rounded-[2.5rem] border border-neutral-300 dark:border-neutral-700">
32
- <label className="block text-sm font-black text-neutral-950 dark:text-white uppercase tracking-tight mb-3">
33
- URL Slug
34
- </label>
35
- <div className="flex items-center gap-3">
36
- <Link2 className="text-neutral-400 size-5" />
37
- <input
38
- type="text"
39
- placeholder="post-url-slug"
40
- className="flex-1 px-4 py-3 bg-white dark:bg-neutral-900 border border-neutral-300 dark:border-neutral-700 rounded-2xl text-sm focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none"
41
- />
42
- </div>
43
- <p className="text-xs text-neutral-500 dark:text-neutral-400 mt-2">
44
- Collision detection will appear here
45
- </p>
46
- </div>
47
-
48
- {/* SEO Preview */}
49
- <div className="p-6 bg-neutral-100 dark:bg-neutral-800/50 rounded-[2.5rem] border border-neutral-300 dark:border-neutral-700">
50
- <label className="block text-sm font-black text-neutral-950 dark:text-white uppercase tracking-tight mb-3">
51
- Search Result Preview
52
- </label>
53
- <div className="bg-white dark:bg-neutral-900 rounded-2xl p-4 border border-neutral-300 dark:border-neutral-700">
54
- <div className="flex items-center gap-2 mb-2">
55
- <Search size={16} className="text-neutral-400" />
56
- <span className="text-xs text-neutral-500">Google Search Result</span>
57
- </div>
58
- <div className="space-y-1">
59
- <h3 className="text-lg text-blue-600 dark:text-blue-400 hover:underline cursor-pointer">
60
- Post Title Will Appear Here
61
- </h3>
62
- <p className="text-sm text-green-700 dark:text-green-400">
63
- https://example.com/blog/post-url-slug
64
- </p>
65
- <p className="text-sm text-neutral-600 dark:text-neutral-400">
66
- Meta description will appear here. This is what users see in search results.
67
- </p>
68
- </div>
69
- </div>
70
- </div>
71
-
72
- {/* Meta Description */}
73
- <div className="p-6 bg-neutral-100 dark:bg-neutral-800/50 rounded-[2.5rem] border border-neutral-300 dark:border-neutral-700">
74
- <label className="block text-sm font-black text-neutral-950 dark:text-white uppercase tracking-tight mb-3">
75
- Meta Description
76
- </label>
77
- <div className="flex items-start gap-3">
78
- <FileText className="text-neutral-400 size-5 mt-1" />
79
- <textarea
80
- placeholder="Enter meta description for search engines..."
81
- rows={4}
82
- className="flex-1 px-4 py-3 bg-white dark:bg-neutral-900 border border-neutral-300 dark:border-neutral-700 rounded-2xl text-sm focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none resize-none"
83
- />
84
- </div>
85
- <p className="text-xs text-neutral-500 dark:text-neutral-400 mt-2">
86
- 0 / 160 characters
87
- </p>
88
- </div>
89
- </div>
90
- </div>
91
- </div>
92
- );
93
- }
94
-
@@ -1,6 +0,0 @@
1
- /**
2
- * Slug & SEO Manager View Exports
3
- */
4
- export { SlugSEOManagerView } from './SlugSEOManagerView';
5
- export type { SlugSEOManagerViewProps } from './SlugSEOManagerView';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,4 +0,0 @@
1
- /**
2
- * Slug & SEO Manager View Exports
3
- */
4
- export { SlugSEOManagerView } from './SlugSEOManagerView';
@@ -1,7 +0,0 @@
1
- /**
2
- * Slug & SEO Manager View Exports
3
- */
4
-
5
- export { SlugSEOManagerView } from './SlugSEOManagerView';
6
- export type { SlugSEOManagerViewProps } from './SlugSEOManagerView';
7
-