diff --git a/src/NexusReader.UI.Shared/Components/MarkdownEditor.razor b/src/NexusReader.UI.Shared/Components/MarkdownEditor.razor
index 5d12ed5..1f0b944 100644
--- a/src/NexusReader.UI.Shared/Components/MarkdownEditor.razor
+++ b/src/NexusReader.UI.Shared/Components/MarkdownEditor.razor
@@ -5,11 +5,14 @@
-
-
-
+ @if (ShowFetchButton)
+ {
+
+
+
+ }
@code {
@@ -17,6 +20,9 @@
private IJSObjectReference? _module;
private DotNetObjectReference? _dotNetHelper;
+ [Parameter]
+ public bool ShowFetchButton { get; set; } = true;
+
[Parameter]
public string InitialMarkdown { get; set; } = string.Empty;
@@ -53,7 +59,7 @@
}
}
- private async Task FetchContentAsync()
+ public async Task FetchContentAsync()
{
if (_module is not null)
{
diff --git a/src/NexusReader.UI.Shared/Pages/Creator.razor b/src/NexusReader.UI.Shared/Pages/Creator.razor
new file mode 100644
index 0000000..85acbba
--- /dev/null
+++ b/src/NexusReader.UI.Shared/Pages/Creator.razor
@@ -0,0 +1,74 @@
+@page "/creator"
+@using Microsoft.AspNetCore.Authorization
+@attribute [AllowAnonymous]
+
+Kreator Treści (Zen Mode)
+
+
+
+
+
+
+
+
+
+
+
+
+ @if (!string.IsNullOrEmpty(_savedMarkdown))
+ {
+
+ }
+
+
+@code {
+ private MarkdownEditor? _editorRef;
+ private string _savedMarkdown = string.Empty;
+
+ private readonly string _initialMarkdown = @"# Zen Mode Editor
+
+Welcome to your dedicated workspace. This premium panel supports Notion-like WYSIWYG editing.
+
+## Features:
+- **Zero Distraction**: Simple elevation and border framing.
+- **GFM Tables**: Consistent cell padding and hover striping.
+- **Clean Code Blocks**: Pre-rendered base64 font-loaded code-preview blocks.
+
+| Option | Active | Value |
+| :--- | :---: | :--- |
+| Zen Mode | Yes | High Focus |
+| Responsive | Yes | 1200px Max |
+| Theme Sync | Yes | Automatic |
+
+Start writing your masterpiece...";
+
+ private async Task TriggerFetchAsync()
+ {
+ if (_editorRef is not null)
+ {
+ await _editorRef.FetchContentAsync();
+ }
+ }
+
+ private void HandleSave(string markdown)
+ {
+ _savedMarkdown = markdown;
+ StateHasChanged();
+ }
+}
diff --git a/src/NexusReader.UI.Shared/Pages/Creator.razor.css b/src/NexusReader.UI.Shared/Pages/Creator.razor.css
new file mode 100644
index 0000000..793551a
--- /dev/null
+++ b/src/NexusReader.UI.Shared/Pages/Creator.razor.css
@@ -0,0 +1,257 @@
+/* ==========================================================================
+ Creator.razor.css - Isolated Styles for Zen Mode Creator Workspace
+ ========================================================================== */
+
+.creator-fullscreen-wrapper {
+ max-width: 1200px;
+ margin: 2rem auto;
+ padding: 0 1.5rem;
+ display: flex;
+ flex-direction: column;
+ gap: 1.5rem;
+}
+
+.creator-header h1 {
+ font-size: 2rem;
+ font-weight: 700;
+ color: var(--text-main);
+ margin: 0 0 0.5rem 0;
+}
+
+.creator-header .subtitle {
+ font-size: 1rem;
+ color: var(--text-muted);
+ margin: 0;
+}
+
+/* 1. Main Workspace Card Layer Elevation */
+.milkdown-premium-container {
+ background-color: var(--bg-surface) !important;
+ border: 1px solid var(--border) !important;
+ border-radius: var(--radius-lg);
+ padding: 1.5rem;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
+ position: relative;
+ overflow: hidden;
+}
+
+/* 2. Deep Component Style Isolation */
+
+/* Fix Top Text Clipping & padding context on the ProseMirror surface */
+::deep .ProseMirror,
+::deep .crepe .editor,
+::deep .milkdown .editor {
+ position: relative !important;
+ top: 0 !important;
+ transform: none !important;
+ padding: 2rem !important;
+ background-color: var(--bg-surface) !important;
+ color: var(--text-main) !important;
+ font-size: 1.1rem !important;
+ line-height: 1.7 !important;
+ outline: none !important;
+}
+
+/* Base Editorial Typography flow inside the dynamic DOM */
+::deep .crepe,
+::deep .milkdown {
+ background-color: var(--bg-surface) !important;
+ background: var(--bg-surface) !important;
+ color: var(--text-main) !important;
+}
+
+::deep .milkdown .editor h1,
+::deep .crepe h1,
+::deep .ProseMirror h1 {
+ margin-top: 1.8rem !important;
+ margin-bottom: 1rem !important;
+ font-size: 2.2rem !important;
+ font-weight: 700 !important;
+ color: var(--text-main) !important;
+ line-height: 1.25 !important;
+}
+
+::deep .milkdown .editor h2,
+::deep .crepe h2,
+::deep .ProseMirror h2 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 0.8rem !important;
+ font-size: 1.6rem !important;
+ font-weight: 700 !important;
+ color: var(--text-main) !important;
+ line-height: 1.3 !important;
+}
+
+::deep .milkdown .editor h3,
+::deep .crepe h3,
+::deep .ProseMirror h3 {
+ margin-top: 1.3rem !important;
+ margin-bottom: 0.7rem !important;
+ font-size: 1.3rem !important;
+ font-weight: 700 !important;
+ color: var(--text-main) !important;
+ line-height: 1.35 !important;
+}
+
+::deep .milkdown .editor code,
+::deep .crepe code,
+::deep .ProseMirror code {
+ background-color: rgba(16, 185, 129, 0.1) !important;
+ color: var(--accent) !important;
+ padding: 0.2rem 0.4rem !important;
+ border-radius: var(--radius-sm, 4px) !important;
+ font-family: 'Azeret Mono', monospace !important;
+ font-size: 0.85em !important;
+}
+
+/* Toolbar Styling Overrides */
+::deep .crepe .toolbar,
+::deep .milkdown-menu,
+::deep .crepe-menu-wrapper {
+ background-color: var(--bg-base) !important;
+ border: 1px solid var(--border) !important;
+ border-radius: 12px !important;
+ padding: 0.5rem !important;
+ margin-bottom: 1rem !important;
+}
+
+::deep .crepe .toolbar button:hover,
+::deep .milkdown-menu button:hover,
+::deep .crepe-menu-wrapper button:hover,
+::deep .crepe .toolbar .button:hover,
+::deep .milkdown-menu .button:hover {
+ color: var(--accent) !important;
+ background-color: rgba(16, 185, 129, 0.1) !important;
+ border-radius: var(--radius-sm, 4px) !important;
+}
+
+/* Premium GFM Table Layouts */
+::deep .milkdown-premium-container table,
+::deep .crepe table,
+::deep .milkdown table,
+::deep .ProseMirror table {
+ width: 100% !important;
+ border-collapse: collapse !important;
+ margin: 2rem 0 !important;
+}
+
+::deep .milkdown-premium-container th,
+::deep .crepe th,
+::deep .milkdown th,
+::deep .ProseMirror th,
+::deep .milkdown-premium-container td,
+::deep .crepe td,
+::deep .milkdown td,
+::deep .ProseMirror td {
+ padding: 14px 18px !important;
+ border: 1px solid var(--border) !important;
+}
+
+::deep .milkdown-premium-container th,
+::deep .crepe th,
+::deep .milkdown th,
+::deep .ProseMirror th {
+ background-color: var(--bg-base) !important;
+ color: var(--text-main) !important;
+ font-weight: 700 !important;
+ text-align: left !important;
+}
+
+::deep .milkdown-premium-container td,
+::deep .crepe td,
+::deep .milkdown td,
+::deep .ProseMirror td {
+ color: var(--text-main) !important;
+}
+
+/* Zebra row background tints (Dark Mode default) */
+::deep .milkdown-premium-container tr:nth-child(even),
+::deep .crepe tr:nth-child(even),
+::deep .milkdown tr:nth-child(even),
+::deep .ProseMirror tr:nth-child(even) {
+ background-color: rgba(255, 255, 255, 0.01) !important;
+}
+
+/* Zebra row background tints (Light Mode override) */
+.theme-light ::deep .milkdown-premium-container tr:nth-child(even),
+.theme-light ::deep .crepe tr:nth-child(even),
+.theme-light ::deep .milkdown tr:nth-child(even),
+.theme-light ::deep .ProseMirror tr:nth-child(even) {
+ background-color: rgba(0, 0, 0, 0.015) !important;
+}
+
+/* Lists and Task Lists */
+::deep .crepe ul,
+::deep .crepe ol,
+::deep .milkdown ul,
+::deep .milkdown ol,
+::deep .ProseMirror ul,
+::deep .ProseMirror ol {
+ line-height: 1.7 !important;
+}
+
+/* 3. Bottom Actions Panel styling */
+.creator-actions-bar {
+ display: flex;
+ justify-content: flex-end;
+ padding: 1rem 0 0 0;
+ margin-top: 1rem;
+ border-top: 1px solid var(--border);
+}
+
+.premium-fetch-btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+ background: var(--accent);
+ color: #000000;
+}
+
+.premium-fetch-btn:hover {
+ transform: translateY(-2px);
+ filter: brightness(1.1);
+ box-shadow: 0 4px 15px var(--accent-glow);
+}
+
+.premium-fetch-btn:hover .arrow-icon {
+ transform: translateX(4px);
+}
+
+.arrow-icon {
+ transition: transform 0.2s ease;
+}
+
+/* 4. Dedicated Preview Module */
+.creator-preview-card {
+ background: #121214;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: var(--radius-lg);
+ padding: 1.5rem;
+ margin-top: 2rem;
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.25);
+}
+
+.preview-header h3 {
+ margin: 0 0 1rem 0;
+ font-size: 1.25rem;
+ font-weight: 600;
+ color: #ffffff;
+ font-family: var(--nexus-font-sans);
+}
+
+.pre-wrapper {
+ max-height: 400px;
+ overflow-y: auto;
+ overflow-x: auto;
+}
+
+.code-preview-block {
+ margin: 0;
+ white-space: pre-wrap;
+ word-break: break-all;
+ font-family: 'Azeret Mono', SFMono-Regular, Consolas, Menlo, monospace;
+ font-size: 0.85rem;
+ color: #e4e4e7;
+ line-height: 1.6;
+}