@jhits/plugin-blog 0.0.18 → 0.0.20
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.
- package/dist/api/categories.d.ts.map +1 -1
- package/dist/api/categories.js +42 -38
- package/dist/api/handler.d.ts +1 -26
- package/dist/api/handler.d.ts.map +1 -1
- package/dist/api/handler.js +81 -500
- package/dist/api/router.d.ts +0 -5
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +8 -35
- package/dist/api/service.d.ts +80 -0
- package/dist/api/service.d.ts.map +1 -0
- package/dist/api/service.js +219 -0
- package/dist/hooks/useAutoSave.d.ts +10 -0
- package/dist/hooks/useAutoSave.d.ts.map +1 -0
- package/dist/hooks/useAutoSave.js +57 -0
- package/dist/hooks/useCategories.d.ts +1 -1
- package/dist/hooks/useCategories.d.ts.map +1 -1
- package/dist/hooks/useCategories.js +15 -46
- package/dist/index.d.ts +24 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -201
- package/dist/init.d.ts +20 -7
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +8 -7
- package/dist/lib/blocks/BlockRenderer.d.ts.map +1 -1
- package/dist/lib/layouts/blocks/ColumnsBlock.d.ts.map +1 -1
- package/dist/lib/layouts/blocks/ColumnsBlock.js +30 -113
- package/dist/lib/layouts/blocks/SectionBlock.d.ts.map +1 -1
- package/dist/lib/layouts/blocks/SectionBlock.js +9 -21
- package/dist/lib/layouts/index.d.ts +3 -3
- package/dist/lib/layouts/index.js +4 -4
- package/dist/lib/mappers/apiMapper.d.ts +10 -0
- package/dist/lib/mappers/apiMapper.d.ts.map +1 -1
- package/dist/lib/mappers/apiMapper.js +47 -32
- package/dist/lib/rich-text/RichTextEditor.d.ts +4 -2
- package/dist/lib/rich-text/RichTextEditor.d.ts.map +1 -1
- package/dist/lib/rich-text/RichTextEditor.js +12 -9
- package/dist/lib/utils/config-resolver.d.ts +28 -0
- package/dist/lib/utils/config-resolver.d.ts.map +1 -0
- package/dist/lib/utils/config-resolver.js +46 -0
- package/dist/lib/utils/tree.d.ts +29 -0
- package/dist/lib/utils/tree.d.ts.map +1 -0
- package/dist/lib/utils/tree.js +129 -0
- package/dist/state/EditorContext.d.ts +3 -25
- package/dist/state/EditorContext.d.ts.map +1 -1
- package/dist/state/EditorContext.js +124 -174
- package/dist/state/reducer.d.ts +1 -5
- package/dist/state/reducer.d.ts.map +1 -1
- package/dist/state/reducer.js +128 -521
- package/dist/state/types.d.ts +12 -1
- package/dist/state/types.d.ts.map +1 -1
- package/dist/types/block.d.ts +9 -0
- package/dist/types/block.d.ts.map +1 -1
- package/dist/types/post.d.ts +17 -1
- package/dist/types/post.d.ts.map +1 -1
- package/dist/views/CanvasEditor/BlockWrapper.d.ts +5 -6
- package/dist/views/CanvasEditor/BlockWrapper.d.ts.map +1 -1
- package/dist/views/CanvasEditor/BlockWrapper.js +56 -264
- package/dist/views/CanvasEditor/CanvasEditorView.d.ts +5 -3
- package/dist/views/CanvasEditor/CanvasEditorView.d.ts.map +1 -1
- package/dist/views/CanvasEditor/CanvasEditorView.js +55 -315
- package/dist/views/CanvasEditor/EditorBody.d.ts +6 -8
- package/dist/views/CanvasEditor/EditorBody.d.ts.map +1 -1
- package/dist/views/CanvasEditor/EditorBody.js +34 -482
- package/dist/views/CanvasEditor/EditorHeader.d.ts.map +1 -1
- package/dist/views/CanvasEditor/EditorHeader.js +27 -63
- package/dist/views/CanvasEditor/LayoutContainer.d.ts.map +1 -1
- package/dist/views/CanvasEditor/LayoutContainer.js +49 -70
- package/dist/views/CanvasEditor/components/CustomBlockItem.js +1 -1
- package/dist/views/CanvasEditor/components/EditorCanvas.d.ts +15 -3
- package/dist/views/CanvasEditor/components/EditorCanvas.d.ts.map +1 -1
- package/dist/views/CanvasEditor/components/EditorCanvas.js +40 -18
- package/dist/views/CanvasEditor/components/EditorLibrary.d.ts +5 -1
- package/dist/views/CanvasEditor/components/EditorLibrary.d.ts.map +1 -1
- package/dist/views/CanvasEditor/components/EditorLibrary.js +11 -7
- package/dist/views/CanvasEditor/components/EditorSidebar.d.ts.map +1 -1
- package/dist/views/CanvasEditor/components/EditorSidebar.js +32 -14
- package/dist/views/CanvasEditor/components/FeaturedMediaSection.d.ts +0 -6
- package/dist/views/CanvasEditor/components/FeaturedMediaSection.d.ts.map +1 -1
- package/dist/views/CanvasEditor/components/FeaturedMediaSection.js +17 -128
- package/dist/views/CanvasEditor/components/JSONInspector.d.ts +9 -0
- package/dist/views/CanvasEditor/components/JSONInspector.d.ts.map +1 -0
- package/dist/views/CanvasEditor/components/JSONInspector.js +56 -0
- package/dist/views/CanvasEditor/components/LibraryItem.js +2 -2
- package/dist/views/CanvasEditor/components/PrivacySettingsSection.d.ts +0 -4
- package/dist/views/CanvasEditor/components/PrivacySettingsSection.d.ts.map +1 -1
- package/dist/views/CanvasEditor/components/PrivacySettingsSection.js +6 -28
- package/dist/views/CanvasEditor/components/index.d.ts +2 -0
- package/dist/views/CanvasEditor/components/index.d.ts.map +1 -1
- package/dist/views/CanvasEditor/components/index.js +1 -0
- package/dist/views/CanvasEditor/hooks/useHeroBlock.d.ts.map +1 -1
- package/dist/views/CanvasEditor/hooks/useHeroBlock.js +15 -18
- package/dist/views/CanvasEditor/hooks/usePostLoader.d.ts +3 -0
- package/dist/views/CanvasEditor/hooks/usePostLoader.d.ts.map +1 -1
- package/dist/views/CanvasEditor/hooks/usePostLoader.js +12 -13
- package/dist/views/CanvasEditor/hooks/useUnsavedChanges.js +0 -4
- package/dist/views/PostManager/EmptyState.d.ts +1 -1
- package/dist/views/PostManager/EmptyState.js +4 -4
- package/dist/views/PostManager/FilterDropdown.d.ts +21 -0
- package/dist/views/PostManager/FilterDropdown.d.ts.map +1 -0
- package/dist/views/PostManager/FilterDropdown.js +28 -0
- package/dist/views/PostManager/LanguageFlags.d.ts.map +1 -1
- package/dist/views/PostManager/LanguageFlags.js +4 -1
- package/dist/views/PostManager/PostCards.d.ts.map +1 -1
- package/dist/views/PostManager/PostCards.js +23 -40
- package/dist/views/PostManager/PostFilters.d.ts.map +1 -1
- package/dist/views/PostManager/PostFilters.js +34 -3
- package/dist/views/PostManager/PostManagerView.d.ts +1 -2
- package/dist/views/PostManager/PostManagerView.d.ts.map +1 -1
- package/dist/views/PostManager/PostManagerView.js +30 -96
- package/dist/views/PostManager/PostStats.d.ts.map +1 -1
- package/dist/views/PostManager/PostStats.js +10 -10
- package/dist/views/PostManager/PostTable.d.ts.map +1 -1
- package/dist/views/PostManager/PostTable.js +23 -40
- package/dist/views/Settings/SettingsView.d.ts +1 -1
- package/dist/views/Settings/SettingsView.d.ts.map +1 -1
- package/dist/views/Settings/SettingsView.js +12 -39
- package/dist/views/SlugSEO/SlugSEOManagerView.d.ts.map +1 -1
- package/dist/views/SlugSEO/SlugSEOManagerView.js +2 -2
- package/package.json +42 -6
- package/src/api/categories.ts +48 -52
- package/src/api/handler.ts +87 -604
- package/src/api/router.ts +15 -65
- package/src/api/service.ts +241 -0
- package/src/hooks/useAutoSave.ts +64 -0
- package/src/hooks/useCategories.ts +19 -47
- package/src/index.tsx +79 -293
- package/src/init.tsx +24 -11
- package/src/lib/blocks/BlockRenderer.tsx +1 -0
- package/src/lib/layouts/blocks/ColumnsBlock.tsx +60 -173
- package/src/lib/layouts/blocks/SectionBlock.tsx +22 -26
- package/src/lib/layouts/index.ts +4 -4
- package/src/lib/mappers/apiMapper.ts +63 -32
- package/src/lib/rich-text/RichTextEditor.tsx +16 -9
- package/src/lib/utils/config-resolver.ts +64 -0
- package/src/lib/utils/tree.ts +150 -0
- package/src/state/EditorContext.tsx +153 -232
- package/src/state/reducer.ts +141 -606
- package/src/state/types.ts +14 -1
- package/src/types/block.ts +10 -0
- package/src/types/post.ts +19 -1
- package/src/views/CanvasEditor/BlockWrapper.tsx +130 -460
- package/src/views/CanvasEditor/CanvasEditorView.tsx +145 -420
- package/src/views/CanvasEditor/EditorBody.tsx +98 -610
- package/src/views/CanvasEditor/EditorHeader.tsx +176 -196
- package/src/views/CanvasEditor/LayoutContainer.tsx +74 -89
- package/src/views/CanvasEditor/components/CustomBlockItem.tsx +7 -8
- package/src/views/CanvasEditor/components/EditorCanvas.tsx +139 -84
- package/src/views/CanvasEditor/components/EditorLibrary.tsx +25 -10
- package/src/views/CanvasEditor/components/EditorSidebar.tsx +196 -127
- package/src/views/CanvasEditor/components/FeaturedMediaSection.tsx +78 -210
- package/src/views/CanvasEditor/components/JSONInspector.tsx +125 -0
- package/src/views/CanvasEditor/components/LibraryItem.tsx +5 -6
- package/src/views/CanvasEditor/components/PrivacySettingsSection.tsx +73 -124
- package/src/views/CanvasEditor/components/index.ts +2 -1
- package/src/views/CanvasEditor/hooks/useHeroBlock.ts +15 -18
- package/src/views/CanvasEditor/hooks/usePostLoader.ts +21 -13
- package/src/views/CanvasEditor/hooks/useUnsavedChanges.ts +4 -4
- package/src/views/PostManager/EmptyState.tsx +9 -10
- package/src/views/PostManager/FilterDropdown.tsx +95 -0
- package/src/views/PostManager/LanguageFlags.tsx +6 -2
- package/src/views/PostManager/PostCards.tsx +127 -133
- package/src/views/PostManager/PostFilters.tsx +73 -68
- package/src/views/PostManager/PostManagerView.tsx +132 -179
- package/src/views/PostManager/PostStats.tsx +21 -20
- package/src/views/PostManager/PostTable.tsx +137 -165
- package/src/views/Settings/SettingsView.tsx +64 -180
- package/src/views/SlugSEO/SlugSEOManagerView.tsx +59 -44
- package/src/hooks/index.d.ts +0 -8
- package/src/hooks/index.d.ts.map +0 -1
- package/src/hooks/useBlog.d.ts +0 -31
- package/src/hooks/useBlog.d.ts.map +0 -1
- package/src/hooks/useBlogs.d.ts +0 -39
- package/src/hooks/useBlogs.d.ts.map +0 -1
- package/src/hooks/useCategories.d.ts +0 -9
- package/src/hooks/useCategories.d.ts.map +0 -1
- package/src/lib/blocks/BlockRenderer.d.ts +0 -54
- package/src/lib/blocks/BlockRenderer.d.ts.map +0 -1
- package/src/lib/config-storage.d.ts +0 -30
- package/src/lib/config-storage.d.ts.map +0 -1
- package/src/lib/layouts/blocks/ColumnsBlock.d.ts +0 -25
- package/src/lib/layouts/blocks/ColumnsBlock.d.ts.map +0 -1
- package/src/lib/layouts/blocks/SectionBlock.d.ts +0 -25
- package/src/lib/layouts/blocks/SectionBlock.d.ts.map +0 -1
- package/src/lib/layouts/index.d.ts +0 -23
- package/src/lib/layouts/index.d.ts.map +0 -1
- package/src/lib/layouts/registerLayoutBlocks.d.ts +0 -9
- package/src/lib/layouts/registerLayoutBlocks.d.ts.map +0 -1
- package/src/lib/mappers/apiMapper.d.ts +0 -66
- package/src/lib/mappers/apiMapper.d.ts.map +0 -1
- package/src/lib/rich-text/RichTextEditor.d.ts +0 -45
- package/src/lib/rich-text/RichTextEditor.d.ts.map +0 -1
- package/src/lib/rich-text/RichTextPreview.d.ts +0 -16
- package/src/lib/rich-text/RichTextPreview.d.ts.map +0 -1
- package/src/lib/rich-text/index.d.ts +0 -9
- package/src/lib/rich-text/index.d.ts.map +0 -1
- package/src/lib/utils/blockHelpers.d.ts +0 -23
- package/src/lib/utils/blockHelpers.d.ts.map +0 -1
- package/src/lib/utils/configValidation.d.ts +0 -23
- package/src/lib/utils/configValidation.d.ts.map +0 -1
- package/src/registry/BlockRegistry.d.ts +0 -62
- package/src/registry/BlockRegistry.d.ts.map +0 -1
- package/src/registry/index.d.ts +0 -6
- package/src/registry/index.d.ts.map +0 -1
- package/src/state/EditorContext.d.ts +0 -45
- package/src/state/EditorContext.d.ts.map +0 -1
- package/src/state/index.d.ts +0 -7
- package/src/state/index.d.ts.map +0 -1
- package/src/state/reducer.d.ts +0 -11
- package/src/state/reducer.d.ts.map +0 -1
- package/src/state/types.d.ts +0 -162
- package/src/state/types.d.ts.map +0 -1
- package/src/types/block.d.ts +0 -221
- package/src/types/block.d.ts.map +0 -1
- package/src/types/index.d.ts +0 -8
- package/src/types/index.d.ts.map +0 -1
- package/src/types/post.d.ts +0 -136
- package/src/types/post.d.ts.map +0 -1
- package/src/utils/client.d.ts +0 -48
- package/src/utils/client.d.ts.map +0 -1
- package/src/views/CanvasEditor/BlockWrapper.d.ts +0 -16
- package/src/views/CanvasEditor/BlockWrapper.d.ts.map +0 -1
- package/src/views/CanvasEditor/CanvasEditorView.d.ts +0 -14
- package/src/views/CanvasEditor/CanvasEditorView.d.ts.map +0 -1
- package/src/views/CanvasEditor/EditorBody.d.ts +0 -22
- package/src/views/CanvasEditor/EditorBody.d.ts.map +0 -1
- package/src/views/CanvasEditor/EditorHeader.d.ts +0 -18
- package/src/views/CanvasEditor/EditorHeader.d.ts.map +0 -1
- package/src/views/CanvasEditor/LayoutContainer.d.ts +0 -17
- package/src/views/CanvasEditor/LayoutContainer.d.ts.map +0 -1
- package/src/views/CanvasEditor/SaveConfirmationModal.d.ts +0 -13
- package/src/views/CanvasEditor/SaveConfirmationModal.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/CustomBlockItem.d.ts +0 -14
- package/src/views/CanvasEditor/components/CustomBlockItem.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/EditorCanvas.d.ts +0 -29
- package/src/views/CanvasEditor/components/EditorCanvas.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/EditorLibrary.d.ts +0 -7
- package/src/views/CanvasEditor/components/EditorLibrary.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/EditorSidebar.d.ts +0 -13
- package/src/views/CanvasEditor/components/EditorSidebar.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/ErrorBanner.d.ts +0 -6
- package/src/views/CanvasEditor/components/ErrorBanner.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/FeaturedMediaSection.d.ts +0 -25
- package/src/views/CanvasEditor/components/FeaturedMediaSection.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/LibraryItem.d.ts +0 -14
- package/src/views/CanvasEditor/components/LibraryItem.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/PrivacySettingsSection.d.ts +0 -15
- package/src/views/CanvasEditor/components/PrivacySettingsSection.d.ts.map +0 -1
- package/src/views/CanvasEditor/components/index.d.ts +0 -21
- package/src/views/CanvasEditor/components/index.d.ts.map +0 -1
- package/src/views/CanvasEditor/hooks/index.d.ts +0 -10
- package/src/views/CanvasEditor/hooks/index.d.ts.map +0 -1
- package/src/views/CanvasEditor/hooks/useHeroBlock.d.ts +0 -8
- package/src/views/CanvasEditor/hooks/useHeroBlock.d.ts.map +0 -1
- package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts +0 -3
- package/src/views/CanvasEditor/hooks/useKeyboardShortcuts.d.ts.map +0 -1
- package/src/views/CanvasEditor/hooks/usePostLoader.d.ts +0 -5
- package/src/views/CanvasEditor/hooks/usePostLoader.d.ts.map +0 -1
- package/src/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts +0 -2
- package/src/views/CanvasEditor/hooks/useRegisteredBlocks.d.ts.map +0 -1
- package/src/views/CanvasEditor/hooks/useUnsavedChanges.d.ts +0 -25
- package/src/views/CanvasEditor/hooks/useUnsavedChanges.d.ts.map +0 -1
- package/src/views/CanvasEditor/index.d.ts +0 -16
- package/src/views/CanvasEditor/index.d.ts.map +0 -1
- package/src/views/PostManager/EmptyState.d.ts +0 -10
- package/src/views/PostManager/EmptyState.d.ts.map +0 -1
- package/src/views/PostManager/PostActionsMenu.d.ts +0 -12
- package/src/views/PostManager/PostActionsMenu.d.ts.map +0 -1
- package/src/views/PostManager/PostCards.d.ts +0 -15
- package/src/views/PostManager/PostCards.d.ts.map +0 -1
- package/src/views/PostManager/PostFilters.d.ts +0 -16
- package/src/views/PostManager/PostFilters.d.ts.map +0 -1
- package/src/views/PostManager/PostManagerView.d.ts +0 -11
- package/src/views/PostManager/PostManagerView.d.ts.map +0 -1
- package/src/views/PostManager/PostStats.d.ts +0 -11
- package/src/views/PostManager/PostStats.d.ts.map +0 -1
- package/src/views/PostManager/PostTable.d.ts +0 -15
- package/src/views/PostManager/PostTable.d.ts.map +0 -1
- package/src/views/PostManager/index.d.ts +0 -12
- package/src/views/PostManager/index.d.ts.map +0 -1
- package/src/views/Preview/PreviewBridgeView.d.ts +0 -12
- package/src/views/Preview/PreviewBridgeView.d.ts.map +0 -1
- package/src/views/Preview/index.d.ts +0 -6
- package/src/views/Preview/index.d.ts.map +0 -1
- package/src/views/Settings/SettingsView.d.ts +0 -10
- package/src/views/Settings/SettingsView.d.ts.map +0 -1
- package/src/views/Settings/index.d.ts +0 -6
- package/src/views/Settings/index.d.ts.map +0 -1
- package/src/views/SlugSEO/SlugSEOManagerView.d.ts +0 -12
- package/src/views/SlugSEO/SlugSEOManagerView.d.ts.map +0 -1
- package/src/views/SlugSEO/index.d.ts +0 -6
- package/src/views/SlugSEO/index.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Settings View -
|
|
2
|
+
* Settings View - Theme Configuration
|
|
3
3
|
* Allows manual configuration of plugin settings (darkMode, backgroundColors)
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -56,14 +56,8 @@ export function SettingsView({ siteId, locale }: SettingsViewProps) {
|
|
|
56
56
|
const handleSave = () => {
|
|
57
57
|
if (typeof window === 'undefined') return;
|
|
58
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
59
|
// Update configuration
|
|
65
|
-
|
|
66
|
-
...((window as any).__JHITS_PLUGIN_PROPS__['plugin-blog'] || {}),
|
|
60
|
+
const config = {
|
|
67
61
|
darkMode,
|
|
68
62
|
backgroundColors: {
|
|
69
63
|
light: lightBg,
|
|
@@ -71,41 +65,26 @@ export function SettingsView({ siteId, locale }: SettingsViewProps) {
|
|
|
71
65
|
},
|
|
72
66
|
};
|
|
73
67
|
|
|
74
|
-
|
|
75
|
-
|
|
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);
|
|
68
|
+
if (!(window as any).__JHITS_PLUGIN_PROPS__) {
|
|
69
|
+
(window as any).__JHITS_PLUGIN_PROPS__ = {};
|
|
85
70
|
}
|
|
71
|
+
(window as any).__JHITS_PLUGIN_PROPS__['plugin-blog'] = {
|
|
72
|
+
...((window as any).__JHITS_PLUGIN_PROPS__['plugin-blog'] || {}),
|
|
73
|
+
...config
|
|
74
|
+
};
|
|
86
75
|
|
|
76
|
+
localStorage.setItem('__JHITS_PLUGIN_BLOG_CONFIG__', JSON.stringify(config));
|
|
87
77
|
setSaved(true);
|
|
88
78
|
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
|
-
});
|
|
79
|
+
window.dispatchEvent(new CustomEvent('blog-plugin-config-updated', { detail: config }));
|
|
99
80
|
};
|
|
100
81
|
|
|
101
|
-
// Reset to defaults
|
|
102
82
|
const handleReset = () => {
|
|
103
83
|
setDarkMode(true);
|
|
104
84
|
setLightBg('#ffffff');
|
|
105
85
|
setDarkBg('#171717');
|
|
106
86
|
};
|
|
107
87
|
|
|
108
|
-
// Load from localStorage on mount
|
|
109
88
|
useEffect(() => {
|
|
110
89
|
try {
|
|
111
90
|
const saved = localStorage.getItem('__JHITS_PLUGIN_BLOG_CONFIG__');
|
|
@@ -115,184 +94,89 @@ export function SettingsView({ siteId, locale }: SettingsViewProps) {
|
|
|
115
94
|
setLightBg(config.backgroundColors?.light ?? '#ffffff');
|
|
116
95
|
setDarkBg(config.backgroundColors?.dark ?? '#171717');
|
|
117
96
|
}
|
|
118
|
-
} catch (e) {
|
|
119
|
-
console.warn('[SettingsView] Failed to load from localStorage:', e);
|
|
120
|
-
}
|
|
97
|
+
} catch (e) { }
|
|
121
98
|
}, []);
|
|
122
99
|
|
|
123
100
|
return (
|
|
124
|
-
<div className="
|
|
125
|
-
<div className="max-w-4xl
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
Blog Plugin Settings
|
|
101
|
+
<div className="w-full flex flex-col space-y-8 px-6 lg:px-10 py-6 lg:py-10 bg-transparent">
|
|
102
|
+
<div className="max-w-4xl">
|
|
103
|
+
<div className="mb-8 px-2">
|
|
104
|
+
<h1 className="text-4xl font-bold text-dashboard-text tracking-tight leading-none mb-2">
|
|
105
|
+
Blog <span className="text-primary italic">Configuration</span>
|
|
130
106
|
</h1>
|
|
131
|
-
<p className="text-sm text-
|
|
132
|
-
|
|
107
|
+
<p className="text-sm text-dashboard-text-secondary font-medium opacity-80">
|
|
108
|
+
Customize your editorial environment and visual preferences.
|
|
133
109
|
</p>
|
|
134
110
|
</div>
|
|
135
111
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
)}
|
|
112
|
+
<div className="bg-dashboard-card/40 backdrop-blur-xl rounded-[2.5rem] border border-dashboard-border/40 shadow-sm p-8 lg:p-10">
|
|
113
|
+
<div className="mb-10 pb-8 border-b border-dashboard-border/30">
|
|
114
|
+
<div className="flex items-center justify-between">
|
|
115
|
+
<div className="flex items-center gap-4">
|
|
116
|
+
<div className="size-10 rounded-xl bg-primary/10 flex items-center justify-center text-primary border border-primary/20">
|
|
117
|
+
{darkMode ? <Moon size={20} /> : <Sun size={20} />}
|
|
118
|
+
</div>
|
|
147
119
|
<div>
|
|
148
|
-
<label className="text-sm font-
|
|
149
|
-
|
|
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>
|
|
120
|
+
<label className="text-sm font-bold text-dashboard-text uppercase tracking-wider block">Visual Mode</label>
|
|
121
|
+
<p className="text-xs text-dashboard-text-secondary mt-0.5 opacity-70">Synchronize editor with system preference</p>
|
|
154
122
|
</div>
|
|
155
123
|
</div>
|
|
156
|
-
<button
|
|
157
|
-
onClick={() => setDarkMode(!darkMode)}
|
|
158
|
-
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-
|
|
159
|
-
darkMode
|
|
160
|
-
? 'bg-primary'
|
|
161
|
-
: 'bg-neutral-300 dark:bg-neutral-600'
|
|
162
|
-
}`}
|
|
124
|
+
<button
|
|
125
|
+
onClick={() => setDarkMode(!darkMode)}
|
|
126
|
+
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-all ${darkMode ? 'bg-primary shadow-lg shadow-primary/20' : 'bg-neutral-300 dark:bg-neutral-700'}`}
|
|
163
127
|
>
|
|
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
|
-
/>
|
|
128
|
+
<span className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${darkMode ? 'translate-x-6' : 'translate-x-1'}`} />
|
|
169
129
|
</button>
|
|
170
130
|
</div>
|
|
171
131
|
</div>
|
|
172
132
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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>
|
|
133
|
+
<div className="mb-10">
|
|
134
|
+
<div className="flex items-center gap-4 mb-8">
|
|
135
|
+
<div className="size-10 rounded-xl bg-amber-500/10 flex items-center justify-center text-amber-500 border border-amber-500/20">
|
|
136
|
+
<Palette size={20} />
|
|
184
137
|
</div>
|
|
138
|
+
<label className="text-sm font-bold text-dashboard-text uppercase tracking-wider">Canvas Aesthetics</label>
|
|
185
139
|
</div>
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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>
|
|
140
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
|
|
141
|
+
<div className="space-y-3">
|
|
142
|
+
<label className="block text-[10px] font-bold uppercase tracking-[0.2em] text-dashboard-text-secondary ml-1 opacity-60 text-primary">Light Protocol</label>
|
|
143
|
+
<input
|
|
144
|
+
type="text"
|
|
145
|
+
value={lightBg}
|
|
146
|
+
onChange={e => setLightBg(e.target.value)}
|
|
147
|
+
className="w-full bg-dashboard-bg/50 border border-dashboard-border/40 p-4 rounded-2xl text-sm font-semibold outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/30 text-dashboard-text transition-all"
|
|
148
|
+
/>
|
|
209
149
|
</div>
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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>
|
|
150
|
+
<div className="space-y-3">
|
|
151
|
+
<label className="block text-[10px] font-bold uppercase tracking-[0.2em] text-dashboard-text-secondary ml-1 opacity-60 text-primary">Dark Protocol</label>
|
|
152
|
+
<input
|
|
153
|
+
type="text"
|
|
154
|
+
value={darkBg}
|
|
155
|
+
onChange={e => setDarkBg(e.target.value)}
|
|
156
|
+
disabled={!darkMode}
|
|
157
|
+
className="w-full bg-dashboard-bg/50 border border-dashboard-border/40 p-4 rounded-2xl text-sm font-semibold outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/30 text-dashboard-text disabled:opacity-30 transition-all"
|
|
158
|
+
/>
|
|
237
159
|
</div>
|
|
238
160
|
</div>
|
|
239
161
|
</div>
|
|
240
162
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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"
|
|
163
|
+
<div className="flex items-center justify-between pt-8 border-t border-dashboard-border/30">
|
|
164
|
+
<button
|
|
165
|
+
onClick={handleReset}
|
|
166
|
+
className="px-6 py-3.5 rounded-2xl border border-dashboard-border/60 text-xs font-bold uppercase tracking-widest text-dashboard-text-secondary hover:text-dashboard-text hover:bg-dashboard-bg/50 transition-all active:scale-95"
|
|
263
167
|
>
|
|
264
|
-
<RotateCcw className="
|
|
265
|
-
Reset
|
|
168
|
+
<RotateCcw size={14} className="inline mr-2" /> Restore Factory
|
|
266
169
|
</button>
|
|
267
|
-
<button
|
|
268
|
-
onClick={handleSave}
|
|
269
|
-
disabled={!hasChanges}
|
|
270
|
-
className={`px-
|
|
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
|
-
}`}
|
|
170
|
+
<button
|
|
171
|
+
onClick={handleSave}
|
|
172
|
+
disabled={!hasChanges}
|
|
173
|
+
className={`px-8 py-3.5 rounded-2xl text-xs font-bold uppercase tracking-widest transition-all flex items-center gap-2 ${hasChanges ? 'bg-primary text-white shadow-xl shadow-primary/25 hover:scale-[1.02]' : 'bg-neutral-100 dark:bg-neutral-800 text-dashboard-text-secondary opacity-40 cursor-not-allowed'}`}
|
|
275
174
|
>
|
|
276
|
-
<Save
|
|
277
|
-
{saved ? 'Saved!' : 'Save Changes'}
|
|
175
|
+
<Save size={16} /> {saved ? 'System Updated' : 'Commit Changes'}
|
|
278
176
|
</button>
|
|
279
177
|
</div>
|
|
280
178
|
</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
179
|
</div>
|
|
295
180
|
</div>
|
|
296
181
|
);
|
|
297
182
|
}
|
|
298
|
-
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
'use client';
|
|
8
8
|
|
|
9
9
|
import React from 'react';
|
|
10
|
-
import { Search, Link2, FileText } from 'lucide-react';
|
|
10
|
+
import { Search, Link2, FileText, Globe } from 'lucide-react';
|
|
11
11
|
|
|
12
12
|
export interface SlugSEOManagerViewProps {
|
|
13
13
|
postId?: string;
|
|
@@ -17,78 +17,93 @@ export interface SlugSEOManagerViewProps {
|
|
|
17
17
|
|
|
18
18
|
export function SlugSEOManagerView({ postId, siteId, locale }: SlugSEOManagerViewProps) {
|
|
19
19
|
return (
|
|
20
|
-
<div className="
|
|
21
|
-
<div className="max-w-4xl
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
<div className="w-full flex flex-col space-y-8 px-6 lg:px-10 py-6 lg:py-10 bg-transparent overflow-y-auto">
|
|
21
|
+
<div className="max-w-4xl">
|
|
22
|
+
<div className="mb-8 px-2">
|
|
23
|
+
<h1 className="text-4xl font-bold text-dashboard-text tracking-tight leading-none mb-2">
|
|
24
|
+
Search <span className="text-primary italic">&</span> Discovery
|
|
25
|
+
</h1>
|
|
26
|
+
<p className="text-sm text-dashboard-text-secondary font-medium opacity-80">
|
|
27
|
+
{postId ? `Optimizing visibility for: ${postId}` : 'Manage URL architecture and search engine metadata'}
|
|
28
|
+
</p>
|
|
29
|
+
</div>
|
|
28
30
|
|
|
29
31
|
<div className="space-y-6">
|
|
30
32
|
{/* Slug Editor */}
|
|
31
|
-
<div className="p-
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
<div className="p-8 bg-dashboard-card/40 backdrop-blur-xl rounded-[2.5rem] border border-dashboard-border/40 shadow-sm">
|
|
34
|
+
<div className="flex items-center gap-3 mb-4 ml-1">
|
|
35
|
+
<Link2 className="text-primary size-5" />
|
|
36
|
+
<label className="block text-sm font-bold text-dashboard-text uppercase tracking-wider">
|
|
37
|
+
URL Identifier
|
|
38
|
+
</label>
|
|
39
|
+
</div>
|
|
35
40
|
<div className="flex items-center gap-3">
|
|
36
|
-
<Link2 className="text-neutral-400 size-5" />
|
|
37
41
|
<input
|
|
38
42
|
type="text"
|
|
39
|
-
placeholder="
|
|
40
|
-
className="flex-1 px-
|
|
43
|
+
placeholder="article-url-slug"
|
|
44
|
+
className="flex-1 px-5 py-4 bg-dashboard-bg/50 border border-dashboard-border/40 rounded-2xl text-sm font-semibold text-dashboard-text outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/30 transition-all"
|
|
41
45
|
/>
|
|
42
46
|
</div>
|
|
43
|
-
<p className="text-
|
|
44
|
-
|
|
47
|
+
<p className="text-[10px] font-bold text-dashboard-text-secondary uppercase tracking-widest mt-3 ml-1 opacity-50">
|
|
48
|
+
Automatic collision detection active
|
|
45
49
|
</p>
|
|
46
50
|
</div>
|
|
47
51
|
|
|
48
52
|
{/* SEO Preview */}
|
|
49
|
-
<div className="p-
|
|
50
|
-
<
|
|
51
|
-
Search
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
<div className="p-8 bg-dashboard-card/40 backdrop-blur-xl rounded-[2.5rem] border border-dashboard-border/40 shadow-sm">
|
|
54
|
+
<div className="flex items-center gap-3 mb-4 ml-1">
|
|
55
|
+
<Search className="text-primary size-5" />
|
|
56
|
+
<label className="block text-sm font-bold text-dashboard-text uppercase tracking-wider">
|
|
57
|
+
Search Engine Preview
|
|
58
|
+
</label>
|
|
59
|
+
</div>
|
|
60
|
+
<div className="bg-white dark:bg-neutral-900 rounded-2xl p-6 border border-neutral-200 dark:border-neutral-800 shadow-inner">
|
|
61
|
+
<div className="flex items-center gap-2 mb-3">
|
|
62
|
+
<div className="size-4 rounded-full bg-neutral-100 dark:bg-neutral-800 flex items-center justify-center">
|
|
63
|
+
<Globe size={10} className="text-neutral-400" />
|
|
64
|
+
</div>
|
|
65
|
+
<span className="text-[10px] font-bold text-neutral-400 uppercase tracking-widest">Global Result</span>
|
|
57
66
|
</div>
|
|
58
|
-
<div className="space-y-1">
|
|
59
|
-
<h3 className="text-
|
|
60
|
-
|
|
67
|
+
<div className="space-y-1.5">
|
|
68
|
+
<h3 className="text-xl text-blue-600 dark:text-blue-400 font-medium hover:underline cursor-pointer leading-tight">
|
|
69
|
+
Publication Title Will Appear Here
|
|
61
70
|
</h3>
|
|
62
|
-
<p className="text-sm text-
|
|
63
|
-
https://
|
|
71
|
+
<p className="text-sm text-emerald-700 dark:text-emerald-500 font-medium">
|
|
72
|
+
https://yourdomain.com/blog/article-url-slug
|
|
64
73
|
</p>
|
|
65
|
-
<p className="text-sm text-neutral-600 dark:text-neutral-400">
|
|
66
|
-
Meta description will appear here. This is
|
|
74
|
+
<p className="text-sm text-neutral-600 dark:text-neutral-400 line-clamp-2">
|
|
75
|
+
Meta description will appear here. This is the snippet users see when discovering your content via search protocols.
|
|
67
76
|
</p>
|
|
68
77
|
</div>
|
|
69
78
|
</div>
|
|
70
79
|
</div>
|
|
71
80
|
|
|
72
81
|
{/* Meta Description */}
|
|
73
|
-
<div className="p-
|
|
74
|
-
<
|
|
75
|
-
|
|
76
|
-
|
|
82
|
+
<div className="p-8 bg-dashboard-card/40 backdrop-blur-xl rounded-[2.5rem] border border-dashboard-border/40 shadow-sm">
|
|
83
|
+
<div className="flex items-center gap-3 mb-4 ml-1">
|
|
84
|
+
<FileText className="text-primary size-5" />
|
|
85
|
+
<label className="block text-sm font-bold text-dashboard-text uppercase tracking-wider">
|
|
86
|
+
Metadata Summary
|
|
87
|
+
</label>
|
|
88
|
+
</div>
|
|
77
89
|
<div className="flex items-start gap-3">
|
|
78
|
-
<FileText className="text-neutral-400 size-5 mt-1" />
|
|
79
90
|
<textarea
|
|
80
|
-
placeholder="Enter meta description for
|
|
91
|
+
placeholder="Enter meta description for indexing..."
|
|
81
92
|
rows={4}
|
|
82
|
-
className="flex-1 px-
|
|
93
|
+
className="flex-1 px-5 py-4 bg-dashboard-bg/50 border border-dashboard-border/40 rounded-2xl text-sm font-semibold text-dashboard-text outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/30 transition-all resize-none"
|
|
83
94
|
/>
|
|
84
95
|
</div>
|
|
85
|
-
<
|
|
86
|
-
|
|
87
|
-
|
|
96
|
+
<div className="flex justify-between items-center mt-3 px-1">
|
|
97
|
+
<p className="text-[10px] font-bold text-dashboard-text-secondary uppercase tracking-widest opacity-50">
|
|
98
|
+
Recommended: 150-160 characters
|
|
99
|
+
</p>
|
|
100
|
+
<span className="text-[10px] font-bold text-primary uppercase tracking-widest">
|
|
101
|
+
0 / 160
|
|
102
|
+
</span>
|
|
103
|
+
</div>
|
|
88
104
|
</div>
|
|
89
105
|
</div>
|
|
90
106
|
</div>
|
|
91
107
|
</div>
|
|
92
108
|
);
|
|
93
109
|
}
|
|
94
|
-
|
package/src/hooks/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Blog Hooks
|
|
3
|
-
* React hooks for fetching blog data in client applications
|
|
4
|
-
*/
|
|
5
|
-
export { useBlogs, type UseBlogsOptions, type UseBlogsResult } from './useBlogs';
|
|
6
|
-
export { useBlog, type UseBlogOptions, type UseBlogResult } from './useBlog';
|
|
7
|
-
export { useCategories } from './useCategories';
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
package/src/hooks/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
package/src/hooks/useBlog.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useBlog Hook
|
|
3
|
-
* React hook for fetching a single blog post by slug
|
|
4
|
-
*/
|
|
5
|
-
import { BlogPost } from '../types/post';
|
|
6
|
-
export interface UseBlogOptions {
|
|
7
|
-
/** Blog post slug */
|
|
8
|
-
slug: string;
|
|
9
|
-
/** API base URL (default: '/api/blogs') */
|
|
10
|
-
apiBaseUrl?: string;
|
|
11
|
-
}
|
|
12
|
-
export interface UseBlogResult {
|
|
13
|
-
/** Blog post data */
|
|
14
|
-
blog: BlogPost | null;
|
|
15
|
-
/** Whether data is currently loading */
|
|
16
|
-
loading: boolean;
|
|
17
|
-
/** Error message if fetch failed */
|
|
18
|
-
error: string | null;
|
|
19
|
-
/** Function to refetch the blog post */
|
|
20
|
-
refetch: () => Promise<void>;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* React hook to fetch a single blog post by slug
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```tsx
|
|
27
|
-
* const { blog, loading, error } = useBlog({ slug: 'my-blog-post' });
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export declare function useBlog(options: UseBlogOptions): UseBlogResult;
|
|
31
|
-
//# sourceMappingURL=useBlog.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBlog.d.ts","sourceRoot":"","sources":["useBlog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC3B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC1B,qBAAqB;IACrB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wCAAwC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAgD9D"}
|
package/src/hooks/useBlogs.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useBlogs Hook
|
|
3
|
-
* React hook for fetching blog posts in client applications
|
|
4
|
-
*/
|
|
5
|
-
import { PostListItem } from '../types/post';
|
|
6
|
-
export interface UseBlogsOptions {
|
|
7
|
-
/** Maximum number of posts to fetch (default: 10) */
|
|
8
|
-
limit?: number;
|
|
9
|
-
/** Number of posts to skip (default: 0) */
|
|
10
|
-
skip?: number;
|
|
11
|
-
/** Filter by status (published, draft, concept) */
|
|
12
|
-
status?: string;
|
|
13
|
-
/** Whether to fetch all posts for admin (includes drafts) */
|
|
14
|
-
admin?: boolean;
|
|
15
|
-
/** API base URL (default: '/api/blogs') */
|
|
16
|
-
apiBaseUrl?: string;
|
|
17
|
-
}
|
|
18
|
-
export interface UseBlogsResult {
|
|
19
|
-
/** Array of blog posts */
|
|
20
|
-
blogs: PostListItem[];
|
|
21
|
-
/** Whether data is currently loading */
|
|
22
|
-
loading: boolean;
|
|
23
|
-
/** Error message if fetch failed */
|
|
24
|
-
error: string | null;
|
|
25
|
-
/** Total number of posts available */
|
|
26
|
-
total: number;
|
|
27
|
-
/** Function to refetch blogs */
|
|
28
|
-
refetch: () => Promise<void>;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* React hook to fetch blog posts
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```tsx
|
|
35
|
-
* const { blogs, loading, error } = useBlogs({ limit: 5 });
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
export declare function useBlogs(options?: UseBlogsOptions): UseBlogsResult;
|
|
39
|
-
//# sourceMappingURL=useBlogs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBlogs.d.ts","sourceRoot":"","sources":["useBlogs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC5B,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC3B,0BAA0B;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,cAAc,CA8EtE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCategories.d.ts","sourceRoot":"","sources":["useCategories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,wBAAgB,aAAa;;;EAkE5B"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Block Renderer
|
|
3
|
-
* Library component for rendering blocks (decoupled from editor)
|
|
4
|
-
* This is the "headless" rendering layer
|
|
5
|
-
*
|
|
6
|
-
* Multi-Tenant: Uses Preview components from client-provided blocks
|
|
7
|
-
*/
|
|
8
|
-
import React from 'react';
|
|
9
|
-
import { Block, BlockPreviewProps } from '../../types/block';
|
|
10
|
-
/**
|
|
11
|
-
* Block Renderer Props
|
|
12
|
-
*/
|
|
13
|
-
export interface BlockRendererProps {
|
|
14
|
-
/** Block to render */
|
|
15
|
-
block: Block;
|
|
16
|
-
/** Custom renderers for specific block types (optional override) */
|
|
17
|
-
customRenderers?: Map<string, React.ComponentType<BlockPreviewProps>>;
|
|
18
|
-
/** Additional context for rendering */
|
|
19
|
-
context?: {
|
|
20
|
-
siteId?: string;
|
|
21
|
-
locale?: string;
|
|
22
|
-
[key: string]: unknown;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Block Renderer Component
|
|
27
|
-
* Renders a single block using its Preview component from the registry
|
|
28
|
-
*
|
|
29
|
-
* This is the headless rendering layer - it uses the Preview component
|
|
30
|
-
* provided by the client application, allowing each client to have
|
|
31
|
-
* their own design system in the frontend while the editor uses
|
|
32
|
-
* the dashboard's design system.
|
|
33
|
-
*/
|
|
34
|
-
export declare function BlockRenderer({ block, customRenderers, context }: BlockRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
-
/**
|
|
36
|
-
* Blocks Renderer
|
|
37
|
-
* Renders an array of blocks
|
|
38
|
-
*/
|
|
39
|
-
export interface BlocksRendererProps {
|
|
40
|
-
/** Array of blocks to render */
|
|
41
|
-
blocks: Block[];
|
|
42
|
-
/** Custom renderers for specific block types */
|
|
43
|
-
customRenderers?: Map<string, React.ComponentType<{
|
|
44
|
-
block: Block;
|
|
45
|
-
}>>;
|
|
46
|
-
/** Additional props to pass to renderers */
|
|
47
|
-
renderProps?: Record<string, unknown>;
|
|
48
|
-
/** Wrapper component for the blocks */
|
|
49
|
-
wrapper?: React.ComponentType<{
|
|
50
|
-
children: React.ReactNode;
|
|
51
|
-
}>;
|
|
52
|
-
}
|
|
53
|
-
export declare function BlocksRenderer({ blocks, customRenderers, renderProps, wrapper: Wrapper, }: BlocksRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
54
|
-
//# sourceMappingURL=BlockRenderer.d.ts.map
|