@actuate-media/cms-admin 0.49.0 → 0.49.3
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/CHANGELOG.md +34 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +10 -11
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/components/modal.render.test.d.ts +2 -0
- package/dist/__tests__/components/modal.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/modal.render.test.js +37 -0
- package/dist/__tests__/components/modal.render.test.js.map +1 -0
- package/dist/actuate-admin.css +1 -1
- package/dist/components/FolderTree.js +19 -19
- package/dist/components/FolderTree.js.map +1 -1
- package/dist/components/MediaPickerModal.d.ts +1 -1
- package/dist/components/MediaPickerModal.d.ts.map +1 -1
- package/dist/components/MediaPickerModal.js +12 -11
- package/dist/components/MediaPickerModal.js.map +1 -1
- package/dist/components/SchedulePublishDialog.d.ts +1 -1
- package/dist/components/SchedulePublishDialog.d.ts.map +1 -1
- package/dist/components/SchedulePublishDialog.js +6 -4
- package/dist/components/SchedulePublishDialog.js.map +1 -1
- package/dist/components/SharePreviewLinkDialog.d.ts +1 -1
- package/dist/components/SharePreviewLinkDialog.d.ts.map +1 -1
- package/dist/components/SharePreviewLinkDialog.js +10 -9
- package/dist/components/SharePreviewLinkDialog.js.map +1 -1
- package/dist/components/VersionHistory.d.ts +1 -1
- package/dist/components/VersionHistory.d.ts.map +1 -1
- package/dist/components/VersionHistory.js +14 -14
- package/dist/components/VersionHistory.js.map +1 -1
- package/dist/components/ui/Modal.d.ts +17 -1
- package/dist/components/ui/Modal.d.ts.map +1 -1
- package/dist/components/ui/Modal.js +16 -15
- package/dist/components/ui/Modal.js.map +1 -1
- package/dist/fields/BlockBuilderField.d.ts.map +1 -1
- package/dist/fields/BlockBuilderField.js +6 -4
- package/dist/fields/BlockBuilderField.js.map +1 -1
- package/dist/views/MediaBrowser.d.ts.map +1 -1
- package/dist/views/MediaBrowser.js +16 -16
- package/dist/views/MediaBrowser.js.map +1 -1
- package/dist/views/Pages/PagesListView.d.ts.map +1 -1
- package/dist/views/Pages/PagesListView.js +3 -3
- package/dist/views/Pages/PagesListView.js.map +1 -1
- package/dist/views/Posts/PostsListView.d.ts.map +1 -1
- package/dist/views/Posts/PostsListView.js +3 -3
- package/dist/views/Posts/PostsListView.js.map +1 -1
- package/dist/views/Redirects.d.ts.map +1 -1
- package/dist/views/Redirects.js +7 -7
- package/dist/views/Redirects.js.map +1 -1
- package/dist/views/ScriptTagEditor.js +4 -4
- package/dist/views/ScriptTagEditor.js.map +1 -1
- package/dist/views/ScriptTags.d.ts.map +1 -1
- package/dist/views/ScriptTags.js +5 -5
- package/dist/views/ScriptTags.js.map +1 -1
- package/dist/views/page-builder/AIGenerateDialog.d.ts +1 -1
- package/dist/views/page-builder/AIGenerateDialog.d.ts.map +1 -1
- package/dist/views/page-builder/AIGenerateDialog.js +23 -23
- package/dist/views/page-builder/AIGenerateDialog.js.map +1 -1
- package/package.json +1 -1
- package/src/AdminRoot.tsx +35 -30
- package/src/__tests__/components/modal.render.test.tsx +57 -0
- package/src/components/FolderTree.tsx +32 -32
- package/src/components/MediaPickerModal.tsx +143 -119
- package/src/components/SchedulePublishDialog.tsx +118 -93
- package/src/components/SharePreviewLinkDialog.tsx +115 -93
- package/src/components/VersionHistory.tsx +98 -82
- package/src/components/ui/Modal.tsx +48 -39
- package/src/fields/BlockBuilderField.tsx +26 -19
- package/src/views/MediaBrowser.tsx +128 -120
- package/src/views/Pages/PagesListView.tsx +123 -115
- package/src/views/Posts/PostsListView.tsx +114 -110
- package/src/views/Redirects.tsx +48 -44
- package/src/views/ScriptTagEditor.tsx +40 -40
- package/src/views/ScriptTags.tsx +34 -30
- package/src/views/page-builder/AIGenerateDialog.tsx +347 -335
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useCallback } from 'react';
|
|
4
|
+
import * as Dialog from '@radix-ui/react-dialog';
|
|
4
5
|
import { Sparkles, X, Loader2, Check, ChevronDown, ChevronUp, AlertTriangle, Wand2, FileText, Search, Accessibility, ArrowRight, } from 'lucide-react';
|
|
5
6
|
import { toast } from 'sonner';
|
|
6
7
|
import { cmsApi } from '../../lib/api.js';
|
|
8
|
+
import { adminPortalContainer } from '../../lib/portal-container.js';
|
|
7
9
|
const ALL_STEPS = [
|
|
8
10
|
{
|
|
9
11
|
key: 'structure',
|
|
@@ -145,29 +147,27 @@ export function AIGenerateDialog({ open, onClose, onAccept }) {
|
|
|
145
147
|
handleClose();
|
|
146
148
|
}
|
|
147
149
|
}, [result, onAccept, handleClose]);
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
return (_jsx(Dialog.Root, { open: open, onOpenChange: (next) => !next && handleClose(), children: _jsxs(Dialog.Portal, { container: adminPortalContainer(), children: [_jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-black/50" }), _jsxs(Dialog.Content, { className: "bg-card border-border text-card-foreground fixed top-1/2 left-1/2 z-50 flex max-h-[85vh] w-[calc(100%-2rem)] max-w-2xl -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-xl border shadow-2xl focus:outline-none", children: [_jsxs("div", { className: "border-border flex items-center justify-between border-b px-6 py-4", children: [_jsxs("div", { className: "flex items-center gap-2.5", children: [_jsx("div", { className: "bg-primary/10 rounded-lg p-1.5", children: _jsx(Sparkles, { size: 18, className: "text-primary", "aria-hidden": true }) }), _jsxs("div", { children: [_jsx(Dialog.Title, { className: "text-foreground text-base font-medium", children: "AI Page Generator" }), _jsx(Dialog.Description, { className: "text-muted-foreground text-xs", children: "Describe your page and let AI build it" })] })] }), _jsx(Dialog.Close, { asChild: true, children: _jsx("button", { type: "button", className: "hover:bg-muted text-muted-foreground hover:text-foreground focus-visible:ring-ring rounded-md p-1.5 transition-colors focus-visible:ring-2 focus-visible:outline-none", "aria-label": "Close AI page generator", children: _jsx(X, { size: 16, "aria-hidden": true }) }) })] }), _jsxs("div", { className: "flex-1 overflow-y-auto p-6", children: [phase === 'prompt' && (_jsxs("div", { className: "space-y-5", children: [error && (_jsxs("div", { className: "bg-destructive/5 border-destructive/20 flex items-start gap-2.5 rounded-lg border p-3", children: [_jsx(AlertTriangle, { size: 16, className: "text-destructive mt-0.5 shrink-0" }), _jsx("p", { className: "text-destructive text-sm", children: error })] })), _jsxs("div", { children: [_jsx("label", { className: "text-foreground mb-1.5 block text-sm font-medium", children: "Describe your page" }), _jsx("textarea", { value: prompt, onChange: (e) => setPrompt(e.target.value), placeholder: "e.g. A landing page for a plumbing company with a hero section, service cards, testimonials, and a contact form", rows: 4, className: "bg-background border-border focus:ring-primary/40 text-foreground placeholder:text-muted-foreground w-full resize-none rounded-lg border px-3 py-2.5 text-sm focus:ring-2 focus:outline-none", autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { className: "text-foreground mb-1.5 block text-sm font-medium", children: "Tone" }), _jsx("div", { className: "flex flex-wrap gap-2", children: TONES.map((t) => (_jsx("button", { onClick: () => setTone(t.value), className: `rounded-full border px-3 py-1.5 text-xs transition-colors ${tone === t.value
|
|
151
|
+
? 'border-primary bg-primary/10 text-primary'
|
|
152
|
+
: 'border-border bg-background text-muted-foreground hover:border-primary/40'}`, children: t.label }, t.value))) })] }), _jsxs("div", { children: [_jsx("label", { className: "text-foreground mb-1.5 block text-sm font-medium", children: "Generation steps" }), _jsx("div", { className: "space-y-1.5", children: ALL_STEPS.map((step) => (_jsxs("label", { className: `flex cursor-pointer items-center gap-3 rounded-lg border p-2.5 transition-colors ${enabledSteps.has(step.key)
|
|
153
|
+
? 'border-primary/30 bg-primary/5'
|
|
154
|
+
: 'border-border bg-background'} ${step.key === 'structure' ? 'cursor-not-allowed opacity-70' : 'hover:border-primary/20'}`, children: [_jsx("input", { type: "checkbox", checked: enabledSteps.has(step.key), onChange: () => toggleStep(step.key), disabled: step.key === 'structure', className: "sr-only" }), _jsx("div", { className: `flex h-5 w-5 shrink-0 items-center justify-center rounded ${enabledSteps.has(step.key)
|
|
155
|
+
? 'bg-primary text-primary-foreground'
|
|
156
|
+
: 'bg-muted border-border border'}`, children: enabledSteps.has(step.key) && _jsx(Check, { size: 12 }) }), _jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: "text-muted-foreground", children: step.icon }), _jsxs("div", { children: [_jsx("span", { className: "text-foreground text-sm", children: step.label }), _jsx("span", { className: "text-muted-foreground ml-2 text-xs", children: step.description })] })] })] }, step.key))) })] }), _jsxs("div", { children: [_jsxs("button", { onClick: () => setShowContext(!showContext), className: "text-muted-foreground hover:text-foreground flex items-center gap-1.5 text-sm transition-colors", children: [showContext ? _jsx(ChevronUp, { size: 14 }) : _jsx(ChevronDown, { size: 14 }), "Business context (optional)"] }), showContext && (_jsxs("div", { className: "bg-muted/50 border-border mt-3 space-y-3 rounded-lg border p-4", children: [_jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsx("label", { className: "text-muted-foreground mb-1 block text-xs", children: "Business name" }), _jsx("input", { type: "text", value: businessName, onChange: (e) => setBusiness(e.target.value), className: "bg-background border-border focus:ring-primary/40 text-foreground w-full rounded-md border px-2.5 py-1.5 text-sm focus:ring-2 focus:outline-none" })] }), _jsxs("div", { children: [_jsx("label", { className: "text-muted-foreground mb-1 block text-xs", children: "Industry" }), _jsx("input", { type: "text", value: industry, onChange: (e) => setIndustry(e.target.value), className: "bg-background border-border focus:ring-primary/40 text-foreground w-full rounded-md border px-2.5 py-1.5 text-sm focus:ring-2 focus:outline-none" })] }), _jsxs("div", { children: [_jsx("label", { className: "text-muted-foreground mb-1 block text-xs", children: "Phone" }), _jsx("input", { type: "text", value: phone, onChange: (e) => setPhone(e.target.value), className: "bg-background border-border focus:ring-primary/40 text-foreground w-full rounded-md border px-2.5 py-1.5 text-sm focus:ring-2 focus:outline-none" })] }), _jsxs("div", { children: [_jsx("label", { className: "text-muted-foreground mb-1 block text-xs", children: "Address" }), _jsx("input", { type: "text", value: address, onChange: (e) => setAddress(e.target.value), className: "bg-background border-border focus:ring-primary/40 text-foreground w-full rounded-md border px-2.5 py-1.5 text-sm focus:ring-2 focus:outline-none" })] })] }), _jsxs("div", { children: [_jsx("label", { className: "text-muted-foreground mb-1 block text-xs", children: "Services (comma-separated)" }), _jsx("input", { type: "text", value: services, onChange: (e) => setServices(e.target.value), placeholder: "e.g. Web design, SEO, Content marketing", className: "bg-background border-border focus:ring-primary/40 text-foreground placeholder:text-muted-foreground w-full rounded-md border px-2.5 py-1.5 text-sm focus:ring-2 focus:outline-none" })] })] }))] })] })), phase === 'generating' && (_jsxs("div", { className: "space-y-6 py-8", children: [_jsxs("div", { className: "text-center", children: [_jsx(Loader2, { size: 32, className: "text-primary mx-auto mb-3 animate-spin" }), _jsx("p", { className: "text-foreground text-sm font-medium", children: stepMessage || 'Generating...' }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: "This may take 15-30 seconds" })] }), _jsx("div", { className: "space-y-2", children: ALL_STEPS.filter((s) => enabledSteps.has(s.key)).map((step) => {
|
|
157
|
+
const isComplete = completedSteps.includes(step.key);
|
|
158
|
+
const isCurrent = currentStep === step.key;
|
|
159
|
+
return (_jsxs("div", { className: `flex items-center gap-3 rounded-lg border p-3 transition-colors ${isComplete
|
|
153
160
|
? 'border-primary/30 bg-primary/5'
|
|
154
|
-
:
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const info = ALL_STEPS.find((s) => s.key === step.step);
|
|
166
|
-
const isExpanded = expandedStep === step.step;
|
|
167
|
-
return (_jsxs("div", { className: "border-border overflow-hidden rounded-lg border", children: [_jsxs("button", { onClick: () => setExpandedStep(isExpanded ? null : step.step), className: "hover:bg-muted/50 flex w-full items-center gap-3 p-3 text-left transition-colors", children: [_jsx("div", { className: "bg-primary flex h-6 w-6 shrink-0 items-center justify-center rounded-full", children: _jsx(Check, { size: 12, className: "text-white" }) }), _jsx("span", { className: "text-muted-foreground", children: info?.icon }), _jsx("span", { className: "text-foreground flex-1 text-sm", children: info?.label }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [(step.metadata.durationMs / 1000).toFixed(1), "s"] }), isExpanded ? (_jsx(ChevronUp, { size: 14, className: "text-muted-foreground" })) : (_jsx(ChevronDown, { size: 14, className: "text-muted-foreground" }))] }), isExpanded && (_jsxs("div", { className: "border-border border-t px-3 pt-2 pb-3", children: [_jsx("ul", { className: "space-y-1", children: step.metadata.changes.map((change, i) => (_jsxs("li", { className: "text-muted-foreground flex items-start gap-2 text-xs", children: [_jsx(ArrowRight, { size: 10, className: "mt-0.5 shrink-0" }), change] }, i))) }), _jsxs("p", { className: "text-muted-foreground mt-2 text-xs", children: ["Tokens: ", step.metadata.tokensUsed.toLocaleString()] })] }))] }, step.step));
|
|
168
|
-
})] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Review the generated page in the canvas after accepting. You can always undo to revert." })] }))] }), _jsxs("div", { className: "border-border flex items-center justify-end gap-3 border-t px-6 py-4", children: [phase === 'prompt' && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: handleClose, className: "text-muted-foreground hover:text-foreground px-4 py-2 text-sm transition-colors", children: "Cancel" }), _jsxs("button", { onClick: handleGenerate, disabled: !prompt.trim(), className: "bg-primary hover:bg-primary/90 flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(Sparkles, { size: 14 }), "Generate Page"] })] })), phase === 'generating' && (_jsx("button", { onClick: handleClose, className: "text-muted-foreground hover:text-foreground px-4 py-2 text-sm transition-colors", children: "Cancel" })), phase === 'review' && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: () => {
|
|
169
|
-
setPhase('prompt');
|
|
170
|
-
setResult(null);
|
|
171
|
-
}, className: "text-muted-foreground hover:text-foreground px-4 py-2 text-sm transition-colors", children: "Regenerate" }), _jsxs("button", { onClick: handleAccept, className: "bg-primary hover:bg-primary/90 flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white transition-colors", children: [_jsx(Check, { size: 14 }), "Accept & Apply"] })] }))] })] })] }));
|
|
161
|
+
: isCurrent
|
|
162
|
+
? 'border-primary/50 bg-primary/10'
|
|
163
|
+
: 'border-border bg-muted/30'}`, children: [_jsx("div", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full", children: isComplete ? (_jsx("div", { className: "bg-primary flex h-6 w-6 items-center justify-center rounded-full", children: _jsx(Check, { size: 12, className: "text-primary-foreground" }) })) : isCurrent ? (_jsx(Loader2, { size: 16, className: "text-primary animate-spin" })) : (_jsx("div", { className: "bg-muted border-border h-6 w-6 rounded-full border" })) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-muted-foreground", children: step.icon }), _jsx("span", { className: `text-sm ${isCurrent || isComplete ? 'text-foreground' : 'text-muted-foreground'}`, children: step.label })] })] }, step.key));
|
|
164
|
+
}) })] })), phase === 'review' && result && (_jsxs("div", { className: "space-y-5", children: [_jsxs("div", { className: "bg-primary/5 border-primary/20 flex items-center gap-3 rounded-lg border p-4", children: [_jsx("div", { className: "bg-primary/10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full", children: _jsx(Sparkles, { size: 18, className: "text-primary" }) }), _jsxs("div", { children: [_jsx("p", { className: "text-foreground text-sm font-medium", children: "Page generated successfully" }), _jsxs("p", { className: "text-muted-foreground mt-0.5 text-xs", children: [result.totalTokensUsed.toLocaleString(), " tokens", ' \u00B7 ', (result.totalDurationMs / 1000).toFixed(1), "s", ' \u00B7 ', result.steps.length, " step", result.steps.length !== 1 ? 's' : ''] })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx("h3", { className: "text-foreground text-sm font-medium", children: "Generation steps" }), result.steps.map((step) => {
|
|
165
|
+
const info = ALL_STEPS.find((s) => s.key === step.step);
|
|
166
|
+
const isExpanded = expandedStep === step.step;
|
|
167
|
+
return (_jsxs("div", { className: "border-border overflow-hidden rounded-lg border", children: [_jsxs("button", { onClick: () => setExpandedStep(isExpanded ? null : step.step), className: "hover:bg-muted/50 flex w-full items-center gap-3 p-3 text-left transition-colors", children: [_jsx("div", { className: "bg-primary flex h-6 w-6 shrink-0 items-center justify-center rounded-full", children: _jsx(Check, { size: 12, className: "text-primary-foreground" }) }), _jsx("span", { className: "text-muted-foreground", children: info?.icon }), _jsx("span", { className: "text-foreground flex-1 text-sm", children: info?.label }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [(step.metadata.durationMs / 1000).toFixed(1), "s"] }), isExpanded ? (_jsx(ChevronUp, { size: 14, className: "text-muted-foreground" })) : (_jsx(ChevronDown, { size: 14, className: "text-muted-foreground" }))] }), isExpanded && (_jsxs("div", { className: "border-border border-t px-3 pt-2 pb-3", children: [_jsx("ul", { className: "space-y-1", children: step.metadata.changes.map((change, i) => (_jsxs("li", { className: "text-muted-foreground flex items-start gap-2 text-xs", children: [_jsx(ArrowRight, { size: 10, className: "mt-0.5 shrink-0" }), change] }, i))) }), _jsxs("p", { className: "text-muted-foreground mt-2 text-xs", children: ["Tokens: ", step.metadata.tokensUsed.toLocaleString()] })] }))] }, step.step));
|
|
168
|
+
})] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Review the generated page in the canvas after accepting. You can always undo to revert." })] }))] }), _jsxs("div", { className: "border-border flex items-center justify-end gap-3 border-t px-6 py-4", children: [phase === 'prompt' && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: handleClose, className: "text-muted-foreground hover:text-foreground px-4 py-2 text-sm transition-colors", children: "Cancel" }), _jsxs("button", { onClick: handleGenerate, disabled: !prompt.trim(), className: "bg-primary text-primary-foreground hover:bg-primary/90 flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(Sparkles, { size: 14 }), "Generate Page"] })] })), phase === 'generating' && (_jsx("button", { onClick: handleClose, className: "text-muted-foreground hover:text-foreground px-4 py-2 text-sm transition-colors", children: "Cancel" })), phase === 'review' && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: () => {
|
|
169
|
+
setPhase('prompt');
|
|
170
|
+
setResult(null);
|
|
171
|
+
}, className: "text-muted-foreground hover:text-foreground px-4 py-2 text-sm transition-colors", children: "Regenerate" }), _jsxs("button", { onClick: handleAccept, className: "bg-primary text-primary-foreground hover:bg-primary/90 flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors", children: [_jsx(Check, { size: 14 }), "Accept & Apply"] })] }))] })] })] }) }));
|
|
172
172
|
}
|
|
173
173
|
//# sourceMappingURL=AIGenerateDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIGenerateDialog.js","sourceRoot":"","sources":["../../../src/views/page-builder/AIGenerateDialog.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AIGenerateDialog.js","sourceRoot":"","sources":["../../../src/views/page-builder/AIGenerateDialog.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/AdminRoot.tsx
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
3
|
import { useState, useMemo, useEffect, useRef, useCallback } from 'react'
|
|
4
|
+
import * as Dialog from '@radix-ui/react-dialog'
|
|
4
5
|
import { toast } from 'sonner'
|
|
5
6
|
import { Layout } from './layout/Layout.js'
|
|
7
|
+
import { adminPortalContainer } from './lib/portal-container.js'
|
|
6
8
|
import { useAdminRouter } from './router/index.js'
|
|
7
9
|
import { cmsApi, ensureCsrfToken } from './lib/api.js'
|
|
8
10
|
import {
|
|
@@ -692,42 +694,45 @@ function AdminShell({
|
|
|
692
694
|
onLogout={handleLogout}
|
|
693
695
|
>
|
|
694
696
|
<ErrorBoundary>{renderView()}</ErrorBoundary>
|
|
695
|
-
{shortcutHelpOpen
|
|
697
|
+
<ShortcutHelp open={shortcutHelpOpen} onClose={() => setShortcutHelpOpen(false)} />
|
|
696
698
|
</Layout>
|
|
697
699
|
)
|
|
698
700
|
}
|
|
699
701
|
|
|
700
|
-
function ShortcutHelp({ onClose }: { onClose: () => void }) {
|
|
702
|
+
function ShortcutHelp({ open, onClose }: { open: boolean; onClose: () => void }) {
|
|
701
703
|
return (
|
|
702
|
-
<
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
<div className="bg-card text-card-foreground border-border mx-4 w-full max-w-sm rounded-xl border p-6 shadow-2xl">
|
|
709
|
-
<h3 className="mb-4 text-lg font-semibold">Keyboard Shortcuts</h3>
|
|
710
|
-
<div className="space-y-3 text-sm">
|
|
711
|
-
{[
|
|
712
|
-
['⌘ K', 'Open search'],
|
|
713
|
-
['⌘ S', 'Save document'],
|
|
714
|
-
['⌘ /', 'Toggle this help'],
|
|
715
|
-
['Esc', 'Close panel / modal'],
|
|
716
|
-
].map(([key, desc]) => (
|
|
717
|
-
<div key={key} className="flex items-center justify-between">
|
|
718
|
-
<span className="text-muted-foreground">{desc}</span>
|
|
719
|
-
<kbd className="bg-muted rounded px-2 py-1 font-mono text-xs">{key}</kbd>
|
|
720
|
-
</div>
|
|
721
|
-
))}
|
|
722
|
-
</div>
|
|
723
|
-
<button
|
|
724
|
-
onClick={onClose}
|
|
725
|
-
className="bg-primary text-primary-foreground mt-4 w-full rounded-lg py-2 text-sm hover:opacity-90"
|
|
704
|
+
<Dialog.Root open={open} onOpenChange={(next) => !next && onClose()}>
|
|
705
|
+
<Dialog.Portal container={adminPortalContainer()}>
|
|
706
|
+
<Dialog.Overlay className="fixed inset-0 z-100 bg-black/50" />
|
|
707
|
+
<Dialog.Content
|
|
708
|
+
aria-describedby={undefined}
|
|
709
|
+
className="bg-card text-card-foreground border-border fixed top-1/2 left-1/2 z-100 mx-4 w-[calc(100%-2rem)] max-w-sm -translate-x-1/2 -translate-y-1/2 rounded-xl border p-6 shadow-2xl focus:outline-none"
|
|
726
710
|
>
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
711
|
+
<Dialog.Title className="mb-4 text-lg font-medium">Keyboard Shortcuts</Dialog.Title>
|
|
712
|
+
<div className="space-y-3 text-sm">
|
|
713
|
+
{[
|
|
714
|
+
['⌘ K', 'Open search'],
|
|
715
|
+
['⌘ S', 'Save document'],
|
|
716
|
+
['⌘ /', 'Toggle this help'],
|
|
717
|
+
['Esc', 'Close panel / modal'],
|
|
718
|
+
].map(([key, desc]) => (
|
|
719
|
+
<div key={key} className="flex items-center justify-between">
|
|
720
|
+
<span className="text-muted-foreground">{desc}</span>
|
|
721
|
+
<kbd className="bg-muted rounded px-2 py-1 font-mono text-xs">{key}</kbd>
|
|
722
|
+
</div>
|
|
723
|
+
))}
|
|
724
|
+
</div>
|
|
725
|
+
<Dialog.Close asChild>
|
|
726
|
+
<button
|
|
727
|
+
type="button"
|
|
728
|
+
className="bg-primary text-primary-foreground focus-visible:ring-ring mt-4 w-full rounded-lg py-2 text-sm hover:opacity-90 focus-visible:ring-2 focus-visible:outline-none"
|
|
729
|
+
>
|
|
730
|
+
Close
|
|
731
|
+
</button>
|
|
732
|
+
</Dialog.Close>
|
|
733
|
+
</Dialog.Content>
|
|
734
|
+
</Dialog.Portal>
|
|
735
|
+
</Dialog.Root>
|
|
731
736
|
)
|
|
732
737
|
}
|
|
733
738
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
3
|
+
import { fireEvent, render, screen } from '@testing-library/react'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The shared admin Modal is built on Radix Dialog. These tests pin the
|
|
7
|
+
* accessibility contract that the migration introduced: the surface is exposed
|
|
8
|
+
* as a labelled dialog, the icon-only close control has an accessible name, and
|
|
9
|
+
* Escape / close both fire `onClose`. Hand-rolled `<div>` overlays gave us none
|
|
10
|
+
* of this.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const { Modal } = await import('../../components/ui/Modal.js')
|
|
14
|
+
|
|
15
|
+
describe('Modal accessibility', () => {
|
|
16
|
+
it('does not render content while closed', () => {
|
|
17
|
+
render(
|
|
18
|
+
<Modal open={false} onClose={() => {}} title="Edit page">
|
|
19
|
+
<p>Body</p>
|
|
20
|
+
</Modal>,
|
|
21
|
+
)
|
|
22
|
+
expect(screen.queryByRole('dialog')).toBeNull()
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
it('exposes a labelled dialog with an accessible close button', () => {
|
|
26
|
+
render(
|
|
27
|
+
<Modal open onClose={() => {}} title="Edit page">
|
|
28
|
+
<p>Body</p>
|
|
29
|
+
</Modal>,
|
|
30
|
+
)
|
|
31
|
+
// The title becomes the dialog's accessible name via aria-labelledby.
|
|
32
|
+
expect(screen.getByRole('dialog', { name: 'Edit page' })).toBeTruthy()
|
|
33
|
+
expect(screen.getByRole('button', { name: 'Close dialog' })).toBeTruthy()
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
it('fires onClose when the close button is activated', () => {
|
|
37
|
+
const onClose = vi.fn()
|
|
38
|
+
render(
|
|
39
|
+
<Modal open onClose={onClose} title="Edit page">
|
|
40
|
+
<p>Body</p>
|
|
41
|
+
</Modal>,
|
|
42
|
+
)
|
|
43
|
+
fireEvent.click(screen.getByRole('button', { name: 'Close dialog' }))
|
|
44
|
+
expect(onClose).toHaveBeenCalledTimes(1)
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
it('fires onClose when Escape is pressed', () => {
|
|
48
|
+
const onClose = vi.fn()
|
|
49
|
+
render(
|
|
50
|
+
<Modal open onClose={onClose} title="Edit page">
|
|
51
|
+
<p>Body</p>
|
|
52
|
+
</Modal>,
|
|
53
|
+
)
|
|
54
|
+
fireEvent.keyDown(document.body, { key: 'Escape' })
|
|
55
|
+
expect(onClose).toHaveBeenCalled()
|
|
56
|
+
})
|
|
57
|
+
})
|
|
@@ -191,10 +191,10 @@ export function FolderTree({
|
|
|
191
191
|
<div
|
|
192
192
|
className={`group flex cursor-pointer items-center gap-1 rounded-md px-2 py-1.5 text-sm transition-colors ${
|
|
193
193
|
isActive
|
|
194
|
-
? 'bg-
|
|
194
|
+
? 'bg-primary/10 text-primary font-medium'
|
|
195
195
|
: isDragOver
|
|
196
|
-
? 'bg-
|
|
197
|
-
: 'text-
|
|
196
|
+
? 'bg-primary/15 ring-primary/40 ring-2'
|
|
197
|
+
: 'text-foreground hover:bg-muted'
|
|
198
198
|
}`}
|
|
199
199
|
style={{ paddingLeft: `${8 + depth * 16}px` }}
|
|
200
200
|
onClick={() => onSelect({ type: 'folder', folderId: folder.id })}
|
|
@@ -208,7 +208,7 @@ export function FolderTree({
|
|
|
208
208
|
>
|
|
209
209
|
<button
|
|
210
210
|
type="button"
|
|
211
|
-
className={`rounded p-0.5 transition-colors
|
|
211
|
+
className={`hover:bg-muted rounded p-0.5 transition-colors ${hasChildren ? '' : 'invisible'}`}
|
|
212
212
|
onClick={(e) => {
|
|
213
213
|
e.stopPropagation()
|
|
214
214
|
toggleExpand(folder.id)
|
|
@@ -222,9 +222,9 @@ export function FolderTree({
|
|
|
222
222
|
</button>
|
|
223
223
|
|
|
224
224
|
{isExpanded ? (
|
|
225
|
-
<FolderOpen className="h-4 w-4 shrink-0
|
|
225
|
+
<FolderOpen className="text-primary h-4 w-4 shrink-0" />
|
|
226
226
|
) : (
|
|
227
|
-
<FolderIcon className="h-4 w-4 shrink-0
|
|
227
|
+
<FolderIcon className="text-muted-foreground h-4 w-4 shrink-0" />
|
|
228
228
|
)}
|
|
229
229
|
|
|
230
230
|
{editingId === folder.id ? (
|
|
@@ -238,7 +238,7 @@ export function FolderTree({
|
|
|
238
238
|
if (e.key === 'Enter') handleRename(folder.id)
|
|
239
239
|
if (e.key === 'Escape') setEditingId(null)
|
|
240
240
|
}}
|
|
241
|
-
className="min-w-0 flex-1 rounded border
|
|
241
|
+
className="border-primary/50 focus:ring-ring min-w-0 flex-1 rounded border px-1 py-0 text-sm focus:ring-1 focus:outline-none"
|
|
242
242
|
onClick={(e) => e.stopPropagation()}
|
|
243
243
|
/>
|
|
244
244
|
) : (
|
|
@@ -246,18 +246,18 @@ export function FolderTree({
|
|
|
246
246
|
)}
|
|
247
247
|
|
|
248
248
|
{count !== undefined && !editingId && (
|
|
249
|
-
<span className="text-
|
|
249
|
+
<span className="text-muted-foreground text-xs tabular-nums">{count}</span>
|
|
250
250
|
)}
|
|
251
251
|
|
|
252
252
|
<button
|
|
253
253
|
type="button"
|
|
254
|
-
className="rounded p-0.5 opacity-0 transition-all group-hover:opacity-100
|
|
254
|
+
className="hover:bg-muted rounded p-0.5 opacity-0 transition-all group-hover:opacity-100"
|
|
255
255
|
onClick={(e) => {
|
|
256
256
|
e.stopPropagation()
|
|
257
257
|
setContextMenu({ id: folder.id, x: e.clientX, y: e.clientY })
|
|
258
258
|
}}
|
|
259
259
|
>
|
|
260
|
-
<MoreHorizontal className="h-3.5 w-3.5
|
|
260
|
+
<MoreHorizontal className="text-muted-foreground h-3.5 w-3.5" />
|
|
261
261
|
</button>
|
|
262
262
|
</div>
|
|
263
263
|
|
|
@@ -269,7 +269,7 @@ export function FolderTree({
|
|
|
269
269
|
className="flex items-center gap-1 px-2 py-1"
|
|
270
270
|
style={{ paddingLeft: `${24 + (depth + 1) * 16}px` }}
|
|
271
271
|
>
|
|
272
|
-
<FolderIcon className="h-4 w-4 shrink-0
|
|
272
|
+
<FolderIcon className="text-muted-foreground h-4 w-4 shrink-0" />
|
|
273
273
|
<input
|
|
274
274
|
ref={newFolderInputRef}
|
|
275
275
|
type="text"
|
|
@@ -284,7 +284,7 @@ export function FolderTree({
|
|
|
284
284
|
}
|
|
285
285
|
}}
|
|
286
286
|
placeholder="Folder name..."
|
|
287
|
-
className="min-w-0 flex-1 rounded border
|
|
287
|
+
className="border-primary/50 focus:ring-ring min-w-0 flex-1 rounded border px-1 py-0 text-sm focus:ring-1 focus:outline-none"
|
|
288
288
|
/>
|
|
289
289
|
</div>
|
|
290
290
|
)}
|
|
@@ -297,7 +297,7 @@ export function FolderTree({
|
|
|
297
297
|
if (loading) {
|
|
298
298
|
return (
|
|
299
299
|
<div className="flex items-center justify-center py-8">
|
|
300
|
-
<Loader2 className="h-5 w-5 animate-spin
|
|
300
|
+
<Loader2 className="text-muted-foreground h-5 w-5 animate-spin" />
|
|
301
301
|
</div>
|
|
302
302
|
)
|
|
303
303
|
}
|
|
@@ -309,8 +309,8 @@ export function FolderTree({
|
|
|
309
309
|
type="button"
|
|
310
310
|
className={`flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors ${
|
|
311
311
|
isSelected({ type: 'smart', smart: 'all' })
|
|
312
|
-
? 'bg-
|
|
313
|
-
: 'text-
|
|
312
|
+
? 'bg-primary/10 text-primary font-medium'
|
|
313
|
+
: 'text-foreground hover:bg-muted'
|
|
314
314
|
}`}
|
|
315
315
|
onClick={() => onSelect({ type: 'smart', smart: 'all' })}
|
|
316
316
|
onDragOver={(e) => handleDragOver(e, null)}
|
|
@@ -320,7 +320,7 @@ export function FolderTree({
|
|
|
320
320
|
<LayoutGrid className="h-4 w-4 shrink-0" />
|
|
321
321
|
<span className="flex-1 text-left">All</span>
|
|
322
322
|
{totalCount !== undefined && (
|
|
323
|
-
<span className="text-
|
|
323
|
+
<span className="text-muted-foreground text-xs tabular-nums">{totalCount}</span>
|
|
324
324
|
)}
|
|
325
325
|
</button>
|
|
326
326
|
|
|
@@ -328,15 +328,15 @@ export function FolderTree({
|
|
|
328
328
|
type="button"
|
|
329
329
|
className={`flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors ${
|
|
330
330
|
isSelected({ type: 'smart', smart: 'recent' })
|
|
331
|
-
? 'bg-
|
|
332
|
-
: 'text-
|
|
331
|
+
? 'bg-primary/10 text-primary font-medium'
|
|
332
|
+
: 'text-foreground hover:bg-muted'
|
|
333
333
|
}`}
|
|
334
334
|
onClick={() => onSelect({ type: 'smart', smart: 'recent' })}
|
|
335
335
|
>
|
|
336
336
|
<Clock className="h-4 w-4 shrink-0" />
|
|
337
337
|
<span className="flex-1 text-left">Recent</span>
|
|
338
338
|
{recentCount !== undefined && (
|
|
339
|
-
<span className="text-
|
|
339
|
+
<span className="text-muted-foreground text-xs tabular-nums">{recentCount}</span>
|
|
340
340
|
)}
|
|
341
341
|
</button>
|
|
342
342
|
|
|
@@ -344,27 +344,27 @@ export function FolderTree({
|
|
|
344
344
|
type="button"
|
|
345
345
|
className={`flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors ${
|
|
346
346
|
isSelected({ type: 'smart', smart: 'uncategorized' })
|
|
347
|
-
? 'bg-
|
|
348
|
-
: 'text-
|
|
347
|
+
? 'bg-primary/10 text-primary font-medium'
|
|
348
|
+
: 'text-foreground hover:bg-muted'
|
|
349
349
|
}`}
|
|
350
350
|
onClick={() => onSelect({ type: 'smart', smart: 'uncategorized' })}
|
|
351
351
|
>
|
|
352
352
|
<Inbox className="h-4 w-4 shrink-0" />
|
|
353
353
|
<span className="flex-1 text-left">Uncategorized</span>
|
|
354
354
|
{uncategorizedCount !== undefined && (
|
|
355
|
-
<span className="text-
|
|
355
|
+
<span className="text-muted-foreground text-xs tabular-nums">{uncategorizedCount}</span>
|
|
356
356
|
)}
|
|
357
357
|
</button>
|
|
358
358
|
</div>
|
|
359
359
|
|
|
360
|
-
<div className="my-1 border-t
|
|
360
|
+
<div className="border-border my-1 border-t" />
|
|
361
361
|
|
|
362
362
|
<div className="flex-1 space-y-0.5 overflow-y-auto px-1 py-1">
|
|
363
363
|
{folders.map((folder) => renderFolder(folder, 0))}
|
|
364
364
|
|
|
365
365
|
{creatingIn === null && (
|
|
366
366
|
<div className="flex items-center gap-1 px-2 py-1">
|
|
367
|
-
<FolderIcon className="ml-5 h-4 w-4 shrink-0
|
|
367
|
+
<FolderIcon className="text-muted-foreground ml-5 h-4 w-4 shrink-0" />
|
|
368
368
|
<input
|
|
369
369
|
ref={newFolderInputRef}
|
|
370
370
|
type="text"
|
|
@@ -379,20 +379,20 @@ export function FolderTree({
|
|
|
379
379
|
}
|
|
380
380
|
}}
|
|
381
381
|
placeholder="Folder name..."
|
|
382
|
-
className="min-w-0 flex-1 rounded border
|
|
382
|
+
className="border-primary/50 focus:ring-ring min-w-0 flex-1 rounded border px-1 py-0 text-sm focus:ring-1 focus:outline-none"
|
|
383
383
|
/>
|
|
384
384
|
</div>
|
|
385
385
|
)}
|
|
386
386
|
</div>
|
|
387
387
|
|
|
388
|
-
<div className="border-
|
|
388
|
+
<div className="border-border border-t p-2">
|
|
389
389
|
<button
|
|
390
390
|
type="button"
|
|
391
391
|
onClick={() => {
|
|
392
392
|
setCreatingIn(null)
|
|
393
393
|
setNewFolderName('')
|
|
394
394
|
}}
|
|
395
|
-
className="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm
|
|
395
|
+
className="text-muted-foreground hover:bg-muted flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm transition-colors"
|
|
396
396
|
>
|
|
397
397
|
<Plus className="h-4 w-4" />
|
|
398
398
|
New Folder
|
|
@@ -401,12 +401,12 @@ export function FolderTree({
|
|
|
401
401
|
|
|
402
402
|
{contextMenu && (
|
|
403
403
|
<div
|
|
404
|
-
className="fixed z-50 min-w-[160px] rounded-lg border
|
|
404
|
+
className="border-border bg-card fixed z-50 min-w-[160px] rounded-lg border py-1 shadow-lg"
|
|
405
405
|
style={{ left: contextMenu.x, top: contextMenu.y }}
|
|
406
406
|
>
|
|
407
407
|
<button
|
|
408
408
|
type="button"
|
|
409
|
-
className="flex w-full items-center gap-2 px-3 py-1.5 text-sm
|
|
409
|
+
className="text-foreground hover:bg-muted flex w-full items-center gap-2 px-3 py-1.5 text-sm transition-colors"
|
|
410
410
|
onClick={() => {
|
|
411
411
|
const folder = findFolder(folders, contextMenu.id)
|
|
412
412
|
if (folder) {
|
|
@@ -421,7 +421,7 @@ export function FolderTree({
|
|
|
421
421
|
</button>
|
|
422
422
|
<button
|
|
423
423
|
type="button"
|
|
424
|
-
className="flex w-full items-center gap-2 px-3 py-1.5 text-sm
|
|
424
|
+
className="text-foreground hover:bg-muted flex w-full items-center gap-2 px-3 py-1.5 text-sm transition-colors"
|
|
425
425
|
onClick={() => {
|
|
426
426
|
setCreatingIn(contextMenu.id)
|
|
427
427
|
setNewFolderName('')
|
|
@@ -432,10 +432,10 @@ export function FolderTree({
|
|
|
432
432
|
<FolderPlus className="h-3.5 w-3.5" />
|
|
433
433
|
New Subfolder
|
|
434
434
|
</button>
|
|
435
|
-
<div className="my-1 border-t
|
|
435
|
+
<div className="border-border my-1 border-t" />
|
|
436
436
|
<button
|
|
437
437
|
type="button"
|
|
438
|
-
className="flex w-full items-center gap-2 px-3 py-1.5 text-sm
|
|
438
|
+
className="text-destructive hover:bg-destructive/10 flex w-full items-center gap-2 px-3 py-1.5 text-sm transition-colors"
|
|
439
439
|
onClick={() => {
|
|
440
440
|
handleDelete(contextMenu.id)
|
|
441
441
|
setContextMenu(null)
|