@dyrected/admin 2.5.61 → 2.5.63
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/admin.css +122 -7
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/command.d.ts +1 -1
- package/dist/index.mjs +245 -108
- package/dist/lib/workflow-badge.d.ts +6 -0
- package/dist/providers/dyrected-provider.d.ts +2 -2
- package/dist/types/admin-components.d.ts +2 -1
- package/package.json +4 -4
package/dist/admin.css
CHANGED
|
@@ -221,8 +221,8 @@
|
|
|
221
221
|
--destructive: 0 72% 58%;
|
|
222
222
|
--destructive-foreground: 0 0% 100%;
|
|
223
223
|
|
|
224
|
-
--border: 256
|
|
225
|
-
--input: 256
|
|
224
|
+
--border: 256 18% 28%;
|
|
225
|
+
--input: 256 18% 28%;
|
|
226
226
|
--ring: 259 100% 70% / 0.34;
|
|
227
227
|
|
|
228
228
|
--sidebar-background: 240 10% 4%;
|
|
@@ -2771,6 +2771,11 @@
|
|
|
2771
2771
|
border-color: rgb(16 185 129 / 0.2);
|
|
2772
2772
|
}
|
|
2773
2773
|
|
|
2774
|
+
.dy-border-green-200{
|
|
2775
|
+
--tw-border-opacity: 1;
|
|
2776
|
+
border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));
|
|
2777
|
+
}
|
|
2778
|
+
|
|
2774
2779
|
.dy-border-input{
|
|
2775
2780
|
border-color: hsl(var(--input));
|
|
2776
2781
|
}
|
|
@@ -3024,11 +3029,6 @@
|
|
|
3024
3029
|
background-color: hsl(var(--destructive) / 0.9);
|
|
3025
3030
|
}
|
|
3026
3031
|
|
|
3027
|
-
.dy-bg-emerald-100{
|
|
3028
|
-
--tw-bg-opacity: 1;
|
|
3029
|
-
background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));
|
|
3030
|
-
}
|
|
3031
|
-
|
|
3032
3032
|
.dy-bg-emerald-50{
|
|
3033
3033
|
--tw-bg-opacity: 1;
|
|
3034
3034
|
background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1));
|
|
@@ -3043,6 +3043,11 @@
|
|
|
3043
3043
|
background-color: rgb(16 185 129 / 0.1);
|
|
3044
3044
|
}
|
|
3045
3045
|
|
|
3046
|
+
.dy-bg-green-100{
|
|
3047
|
+
--tw-bg-opacity: 1;
|
|
3048
|
+
background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));
|
|
3049
|
+
}
|
|
3050
|
+
|
|
3046
3051
|
.dy-bg-green-500\/10{
|
|
3047
3052
|
background-color: rgb(34 197 94 / 0.1);
|
|
3048
3053
|
}
|
|
@@ -3770,6 +3775,11 @@
|
|
|
3770
3775
|
color: rgb(22 163 74 / var(--tw-text-opacity, 1));
|
|
3771
3776
|
}
|
|
3772
3777
|
|
|
3778
|
+
.dy-text-green-700{
|
|
3779
|
+
--tw-text-opacity: 1;
|
|
3780
|
+
color: rgb(21 128 61 / var(--tw-text-opacity, 1));
|
|
3781
|
+
}
|
|
3782
|
+
|
|
3773
3783
|
.dy-text-muted-foreground{
|
|
3774
3784
|
color: hsl(var(--muted-foreground));
|
|
3775
3785
|
}
|
|
@@ -5566,25 +5576,121 @@
|
|
|
5566
5576
|
padding: 0px !important;
|
|
5567
5577
|
}
|
|
5568
5578
|
|
|
5579
|
+
.dark\:dy-border-amber-500\/30:is(.dy-dark *){
|
|
5580
|
+
border-color: rgb(245 158 11 / 0.3);
|
|
5581
|
+
}
|
|
5582
|
+
|
|
5583
|
+
.dark\:dy-border-blue-500\/30:is(.dy-dark *){
|
|
5584
|
+
border-color: rgb(59 130 246 / 0.3);
|
|
5585
|
+
}
|
|
5586
|
+
|
|
5587
|
+
.dark\:dy-border-border\/80:is(.dy-dark *){
|
|
5588
|
+
border-color: hsl(var(--border) / 0.8);
|
|
5589
|
+
}
|
|
5590
|
+
|
|
5591
|
+
.dark\:dy-border-emerald-500\/30:is(.dy-dark *){
|
|
5592
|
+
border-color: rgb(16 185 129 / 0.3);
|
|
5593
|
+
}
|
|
5594
|
+
|
|
5595
|
+
.dark\:dy-border-green-500\/30:is(.dy-dark *){
|
|
5596
|
+
border-color: rgb(34 197 94 / 0.3);
|
|
5597
|
+
}
|
|
5598
|
+
|
|
5599
|
+
.dark\:dy-border-red-500\/30:is(.dy-dark *){
|
|
5600
|
+
border-color: rgb(239 68 68 / 0.3);
|
|
5601
|
+
}
|
|
5602
|
+
|
|
5603
|
+
.dark\:dy-bg-amber-400:is(.dy-dark *){
|
|
5604
|
+
--tw-bg-opacity: 1;
|
|
5605
|
+
background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1));
|
|
5606
|
+
}
|
|
5607
|
+
|
|
5608
|
+
.dark\:dy-bg-amber-600:is(.dy-dark *){
|
|
5609
|
+
--tw-bg-opacity: 1;
|
|
5610
|
+
background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1));
|
|
5611
|
+
}
|
|
5612
|
+
|
|
5613
|
+
.dark\:dy-bg-blue-400:is(.dy-dark *){
|
|
5614
|
+
--tw-bg-opacity: 1;
|
|
5615
|
+
background-color: rgb(96 165 250 / var(--tw-bg-opacity, 1));
|
|
5616
|
+
}
|
|
5617
|
+
|
|
5618
|
+
.dark\:dy-bg-blue-600:is(.dy-dark *){
|
|
5619
|
+
--tw-bg-opacity: 1;
|
|
5620
|
+
background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
|
|
5621
|
+
}
|
|
5622
|
+
|
|
5623
|
+
.dark\:dy-bg-emerald-400:is(.dy-dark *){
|
|
5624
|
+
--tw-bg-opacity: 1;
|
|
5625
|
+
background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1));
|
|
5626
|
+
}
|
|
5627
|
+
|
|
5628
|
+
.dark\:dy-bg-foreground\/60:is(.dy-dark *){
|
|
5629
|
+
background-color: hsl(var(--foreground) / 0.6);
|
|
5630
|
+
}
|
|
5631
|
+
|
|
5632
|
+
.dark\:dy-bg-green-600:is(.dy-dark *){
|
|
5633
|
+
--tw-bg-opacity: 1;
|
|
5634
|
+
background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));
|
|
5635
|
+
}
|
|
5636
|
+
|
|
5637
|
+
.dark\:dy-bg-muted\/60:is(.dy-dark *){
|
|
5638
|
+
background-color: hsl(var(--muted) / 0.6);
|
|
5639
|
+
}
|
|
5640
|
+
|
|
5641
|
+
.dark\:dy-bg-red-400:is(.dy-dark *){
|
|
5642
|
+
--tw-bg-opacity: 1;
|
|
5643
|
+
background-color: rgb(248 113 113 / var(--tw-bg-opacity, 1));
|
|
5644
|
+
}
|
|
5645
|
+
|
|
5646
|
+
.dark\:dy-bg-red-600:is(.dy-dark *){
|
|
5647
|
+
--tw-bg-opacity: 1;
|
|
5648
|
+
background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));
|
|
5649
|
+
}
|
|
5650
|
+
|
|
5569
5651
|
.dark\:dy-bg-white\/5:is(.dy-dark *){
|
|
5570
5652
|
background-color: rgb(255 255 255 / 0.05);
|
|
5571
5653
|
}
|
|
5572
5654
|
|
|
5655
|
+
.dark\:dy-text-amber-300:is(.dy-dark *){
|
|
5656
|
+
--tw-text-opacity: 1;
|
|
5657
|
+
color: rgb(252 211 77 / var(--tw-text-opacity, 1));
|
|
5658
|
+
}
|
|
5659
|
+
|
|
5573
5660
|
.dark\:dy-text-amber-400:is(.dy-dark *){
|
|
5574
5661
|
--tw-text-opacity: 1;
|
|
5575
5662
|
color: rgb(251 191 36 / var(--tw-text-opacity, 1));
|
|
5576
5663
|
}
|
|
5577
5664
|
|
|
5665
|
+
.dark\:dy-text-blue-300:is(.dy-dark *){
|
|
5666
|
+
--tw-text-opacity: 1;
|
|
5667
|
+
color: rgb(147 197 253 / var(--tw-text-opacity, 1));
|
|
5668
|
+
}
|
|
5669
|
+
|
|
5578
5670
|
.dark\:dy-text-blue-400:is(.dy-dark *){
|
|
5579
5671
|
--tw-text-opacity: 1;
|
|
5580
5672
|
color: rgb(96 165 250 / var(--tw-text-opacity, 1));
|
|
5581
5673
|
}
|
|
5582
5674
|
|
|
5675
|
+
.dark\:dy-text-emerald-300:is(.dy-dark *){
|
|
5676
|
+
--tw-text-opacity: 1;
|
|
5677
|
+
color: rgb(110 231 183 / var(--tw-text-opacity, 1));
|
|
5678
|
+
}
|
|
5679
|
+
|
|
5583
5680
|
.dark\:dy-text-emerald-400:is(.dy-dark *){
|
|
5584
5681
|
--tw-text-opacity: 1;
|
|
5585
5682
|
color: rgb(52 211 153 / var(--tw-text-opacity, 1));
|
|
5586
5683
|
}
|
|
5587
5684
|
|
|
5685
|
+
.dark\:dy-text-foreground\/80:is(.dy-dark *){
|
|
5686
|
+
color: hsl(var(--foreground) / 0.8);
|
|
5687
|
+
}
|
|
5688
|
+
|
|
5689
|
+
.dark\:dy-text-green-300:is(.dy-dark *){
|
|
5690
|
+
--tw-text-opacity: 1;
|
|
5691
|
+
color: rgb(134 239 172 / var(--tw-text-opacity, 1));
|
|
5692
|
+
}
|
|
5693
|
+
|
|
5588
5694
|
.dark\:dy-text-green-400:is(.dy-dark *){
|
|
5589
5695
|
--tw-text-opacity: 1;
|
|
5590
5696
|
color: rgb(74 222 128 / var(--tw-text-opacity, 1));
|
|
@@ -5595,6 +5701,15 @@
|
|
|
5595
5701
|
color: rgb(192 132 252 / var(--tw-text-opacity, 1));
|
|
5596
5702
|
}
|
|
5597
5703
|
|
|
5704
|
+
.dark\:dy-text-red-300:is(.dy-dark *){
|
|
5705
|
+
--tw-text-opacity: 1;
|
|
5706
|
+
color: rgb(252 165 165 / var(--tw-text-opacity, 1));
|
|
5707
|
+
}
|
|
5708
|
+
|
|
5709
|
+
.dark\:focus-visible\:dy-border-primary\/45:focus-visible:is(.dy-dark *){
|
|
5710
|
+
border-color: hsl(var(--primary) / 0.45);
|
|
5711
|
+
}
|
|
5712
|
+
|
|
5598
5713
|
@media (min-width: 640px){
|
|
5599
5714
|
|
|
5600
5715
|
.sm\:dy-order-1{
|
|
@@ -2,7 +2,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
declare const buttonVariants: (props?: {
|
|
4
4
|
variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost";
|
|
5
|
-
size?: "
|
|
5
|
+
size?: "icon" | "default" | "sm" | "lg";
|
|
6
6
|
} & import('class-variance-authority/types').ClassProp) => string;
|
|
7
7
|
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
8
8
|
asChild?: boolean;
|
|
@@ -48,7 +48,7 @@ declare const CommandGroup: React.ForwardRefExoticComponent<Omit<{
|
|
|
48
48
|
ref?: React.Ref<HTMLDivElement>;
|
|
49
49
|
} & {
|
|
50
50
|
asChild?: boolean;
|
|
51
|
-
}, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild">, "
|
|
51
|
+
}, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild">, "heading" | "value"> & {
|
|
52
52
|
heading?: React.ReactNode;
|
|
53
53
|
value?: string;
|
|
54
54
|
forceMount?: boolean;
|
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import React, { Component, StrictMode, createContext, createElement, useCallback
|
|
|
3
3
|
import { createRoot } from "react-dom/client";
|
|
4
4
|
import { HashRouter, Link, MemoryRouter, Route, Routes, useLocation, useNavigate, useParams, useSearchParams } from "react-router-dom";
|
|
5
5
|
import { QueryClient, QueryClientProvider, keepPreviousData, useInfiniteQuery, useMutation, useQueries, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
6
|
-
import { PREVIEW_TOKEN_PARAM, createClient } from "@dyrected/sdk";
|
|
6
|
+
import { DyrectedError, PREVIEW_TOKEN_PARAM, createClient } from "@dyrected/sdk";
|
|
7
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import { AlertCircle, AlertTriangle, AlignCenter, AlignLeft, AlignRight, Archive, ArrowDown, ArrowLeft, ArrowRight, ArrowUp, ArrowUpDown, ArrowUpRight, Bold, Braces, Calendar, Check, CheckCircle, CheckCircle2, ChevronDown, ChevronLeft, ChevronLeftIcon, ChevronRight, ChevronRightIcon, ChevronUp, ChevronsUpDown, Circle, Clock, Clock3, Code, Copy, Database, Download, ExternalLink, Eye, EyeOff, FileDown, FileIcon, FileText, FileUp, Filter, Globe, GripVertical, Heading1, Heading2, Heading3, Heading4, Heading5, Heading6, History, Home, Image as Image$1, Info, Italic, KeyRound, Layers, LayoutDashboard, LayoutGrid, Library, Link as Link$1, List, ListOrdered, Loader2, Lock, LogOut, Mail, Menu, Monitor, Moon, MoreHorizontal, MousePointer2, PanelLeftClose, PanelLeftOpen, Pencil, Play, Plus, Quote, RotateCcw, Save, Scissors, Search, Settings, Settings2, Share2, Shield, Smartphone, Sparkles, Star, Strikethrough, Sun, Table, Trash2, Underline, Undo2, Upload, UploadCloud, Users, Video, Volume2, Workflow, X, XCircle, icons } from "lucide-react";
|
|
9
9
|
import { clsx } from "clsx";
|
|
@@ -67,6 +67,35 @@ function useDyrected() {
|
|
|
67
67
|
}
|
|
68
68
|
//#endregion
|
|
69
69
|
//#region src/providers/dyrected-provider.tsx
|
|
70
|
+
function resolveBlock(block, registry) {
|
|
71
|
+
return {
|
|
72
|
+
...block,
|
|
73
|
+
fields: block.fields.map((field) => resolveFieldBlocks(field, registry))
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function resolveFieldBlocks(field, registry) {
|
|
77
|
+
const next = { ...field };
|
|
78
|
+
if (next.fields) next.fields = next.fields.map((child) => resolveFieldBlocks(child, registry));
|
|
79
|
+
if (next.type === "blocks" && next.blockReferences?.length) {
|
|
80
|
+
next.blocks = next.blockReferences.map((slug) => registry.get(slug)).filter((block) => !!block);
|
|
81
|
+
next.blocks = next.blocks.map((block) => resolveBlock(block, registry));
|
|
82
|
+
} else if (next.blocks) next.blocks = next.blocks.map((block) => resolveBlock(block, registry));
|
|
83
|
+
return next;
|
|
84
|
+
}
|
|
85
|
+
function resolveSchemas(schema) {
|
|
86
|
+
const registry = new Map((schema.blocks ?? []).map((block) => [block.slug, block]));
|
|
87
|
+
return {
|
|
88
|
+
...schema,
|
|
89
|
+
collections: schema.collections.map((collection) => ({
|
|
90
|
+
...collection,
|
|
91
|
+
fields: collection.fields.map((field) => resolveFieldBlocks(field, registry))
|
|
92
|
+
})),
|
|
93
|
+
globals: schema.globals.map((global) => ({
|
|
94
|
+
...global,
|
|
95
|
+
fields: global.fields.map((field) => resolveFieldBlocks(field, registry))
|
|
96
|
+
}))
|
|
97
|
+
};
|
|
98
|
+
}
|
|
70
99
|
function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBaseUrl, siteId: initialSiteId, initialToken, defaultTechStack, components }) {
|
|
71
100
|
const [baseUrl, setBaseUrl] = useState(() => initialBaseUrl || (typeof window !== "undefined" ? localStorage.getItem("dyrected_url") : null) || "");
|
|
72
101
|
const [apiKey, setApiKey] = useState(() => initialApiKey || (typeof window !== "undefined" ? localStorage.getItem("dyrected_key") : null) || void 0);
|
|
@@ -94,7 +123,8 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
94
123
|
};
|
|
95
124
|
client.getSchemas().then((nextSchemas) => {
|
|
96
125
|
if (cancelled) return;
|
|
97
|
-
|
|
126
|
+
const resolved = resolveSchemas(nextSchemas);
|
|
127
|
+
setSchemas((prev) => prev === resolved ? prev : resolved);
|
|
98
128
|
}, (err) => {
|
|
99
129
|
if (cancelled) return;
|
|
100
130
|
console.error("Failed to fetch schemas:", err);
|
|
@@ -108,6 +138,16 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
108
138
|
useEffect(() => {
|
|
109
139
|
if (initialToken && client) client.setToken(initialToken);
|
|
110
140
|
}, [initialToken, client]);
|
|
141
|
+
const clearPersistedAuthState = useCallback((nextClient) => {
|
|
142
|
+
localStorage.removeItem("dyrected_token");
|
|
143
|
+
localStorage.removeItem("dyrected_admin_auth_collection");
|
|
144
|
+
(nextClient ?? client)?.clearToken();
|
|
145
|
+
setAuthCollectionSlug(null);
|
|
146
|
+
setUser(null);
|
|
147
|
+
}, [client]);
|
|
148
|
+
const shouldClearStoredAuth = useCallback((error) => {
|
|
149
|
+
return error instanceof DyrectedError && (error.statusCode === 401 || error.statusCode === 404);
|
|
150
|
+
}, []);
|
|
111
151
|
const setAuth = useCallback((newUrl, newKey, newSiteId) => {
|
|
112
152
|
localStorage.setItem("dyrected_url", newUrl);
|
|
113
153
|
localStorage.setItem("dyrected_key", newKey);
|
|
@@ -119,11 +159,7 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
119
159
|
}, []);
|
|
120
160
|
const setToken = useCallback((token, collectionSlug) => {
|
|
121
161
|
if (!token) {
|
|
122
|
-
|
|
123
|
-
localStorage.removeItem("dyrected_admin_auth_collection");
|
|
124
|
-
if (client) client.clearToken();
|
|
125
|
-
setAuthCollectionSlug(null);
|
|
126
|
-
setUser(null);
|
|
162
|
+
clearPersistedAuthState(client);
|
|
127
163
|
return;
|
|
128
164
|
}
|
|
129
165
|
const resolvedCollectionSlug = collectionSlug || authCollectionSlug || getAdminCollectionSlug(schemas);
|
|
@@ -134,12 +170,20 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
134
170
|
}
|
|
135
171
|
if (client) {
|
|
136
172
|
client.setToken(token);
|
|
137
|
-
if (resolvedCollectionSlug) client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), () =>
|
|
173
|
+
if (resolvedCollectionSlug) client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), (error) => {
|
|
174
|
+
if (shouldClearStoredAuth(error)) {
|
|
175
|
+
clearPersistedAuthState(client);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
setUser(null);
|
|
179
|
+
});
|
|
138
180
|
}
|
|
139
181
|
}, [
|
|
140
182
|
authCollectionSlug,
|
|
183
|
+
clearPersistedAuthState,
|
|
141
184
|
client,
|
|
142
|
-
schemas
|
|
185
|
+
schemas,
|
|
186
|
+
shouldClearStoredAuth
|
|
143
187
|
]);
|
|
144
188
|
useEffect(() => {
|
|
145
189
|
if (initialToken || !client || !schemas || activeUser) return;
|
|
@@ -147,21 +191,39 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
147
191
|
const resolvedCollectionSlug = authCollectionSlug || getAdminCollectionSlug(schemas);
|
|
148
192
|
if (!token || !resolvedCollectionSlug) return;
|
|
149
193
|
client.setToken(token);
|
|
150
|
-
client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), () =>
|
|
194
|
+
client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), (error) => {
|
|
195
|
+
if (shouldClearStoredAuth(error)) {
|
|
196
|
+
clearPersistedAuthState(client);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
setUser(null);
|
|
200
|
+
});
|
|
151
201
|
}, [
|
|
152
202
|
activeUser,
|
|
153
203
|
authCollectionSlug,
|
|
204
|
+
clearPersistedAuthState,
|
|
154
205
|
client,
|
|
155
206
|
initialToken,
|
|
156
|
-
schemas
|
|
207
|
+
schemas,
|
|
208
|
+
shouldClearStoredAuth
|
|
157
209
|
]);
|
|
158
210
|
const logout = useCallback(() => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
211
|
+
(async () => {
|
|
212
|
+
const resolvedCollectionSlug = authCollectionSlug || getAdminCollectionSlug(schemas);
|
|
213
|
+
try {
|
|
214
|
+
if (client && resolvedCollectionSlug) await client.collection(resolvedCollectionSlug).logout();
|
|
215
|
+
} catch (error) {
|
|
216
|
+
console.warn("Failed to revoke admin session during logout:", error);
|
|
217
|
+
} finally {
|
|
218
|
+
clearPersistedAuthState(client);
|
|
219
|
+
}
|
|
220
|
+
})();
|
|
221
|
+
}, [
|
|
222
|
+
authCollectionSlug,
|
|
223
|
+
clearPersistedAuthState,
|
|
224
|
+
client,
|
|
225
|
+
schemas
|
|
226
|
+
]);
|
|
165
227
|
return /* @__PURE__ */ jsx(DyrectedContext.Provider, {
|
|
166
228
|
value: {
|
|
167
229
|
client,
|
|
@@ -976,7 +1038,7 @@ function isNewerVersion(latest, current) {
|
|
|
976
1038
|
return false;
|
|
977
1039
|
}
|
|
978
1040
|
function useUpdateCheck() {
|
|
979
|
-
const currentVersion = "2.5.
|
|
1041
|
+
const currentVersion = "2.5.63";
|
|
980
1042
|
const [updateInfo, setUpdateInfo] = useState(() => {
|
|
981
1043
|
if (typeof window === "undefined") return null;
|
|
982
1044
|
const cacheKey = "dyrected_latest_release";
|
|
@@ -1202,7 +1264,7 @@ function getStatusLabel(doc) {
|
|
|
1202
1264
|
}
|
|
1203
1265
|
function Dashboard() {
|
|
1204
1266
|
const { client, components, user } = useDyrected();
|
|
1205
|
-
const currentVersion = "2.5.
|
|
1267
|
+
const currentVersion = "2.5.63";
|
|
1206
1268
|
const [latestVersion, setLatestVersion] = useState(() => {
|
|
1207
1269
|
if (typeof window === "undefined") return null;
|
|
1208
1270
|
return localStorage.getItem("dyrected_latest_release");
|
|
@@ -1537,7 +1599,7 @@ function Dashboard() {
|
|
|
1537
1599
|
var Input = React$1.forwardRef(({ className, type, ...props }, ref) => {
|
|
1538
1600
|
return /* @__PURE__ */ jsx("input", {
|
|
1539
1601
|
type,
|
|
1540
|
-
className: cn("dy-flex dy-h-12 dy-w-full dy-rounded-xl dy-border dy-border-border/
|
|
1602
|
+
className: cn("dy-flex dy-h-12 dy-w-full dy-rounded-xl dy-border dy-border-border/50 dark:dy-border-border/80 dy-bg-background dy-px-4 dy-py-2 dy-text-base dy-transition-all", "placeholder:dy-text-muted-foreground/60 focus-visible:dy-outline-none focus-visible:dy-border-primary/30 dark:focus-visible:dy-border-primary/45 focus-visible:dy-bg-background focus-visible:dy-shadow-md", "disabled:dy-cursor-not-allowed disabled:dy-opacity-50 md:dy-text-sm dy-shadow-sm", className),
|
|
1541
1603
|
ref,
|
|
1542
1604
|
...props
|
|
1543
1605
|
});
|
|
@@ -2282,6 +2344,34 @@ var Checkbox = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
2282
2344
|
}));
|
|
2283
2345
|
Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
2284
2346
|
//#endregion
|
|
2347
|
+
//#region src/lib/workflow-badge.ts
|
|
2348
|
+
var WORKFLOW_BADGE_COLORS = {
|
|
2349
|
+
success: "dy-bg-green-100 dy-text-green-700 dy-border-green-200 dark:dy-bg-green-600 dark:dy-text-green-300 dark:dy-border-green-500/30",
|
|
2350
|
+
warning: "dy-bg-amber-100 dy-text-amber-700 dy-border-amber-200 dark:dy-bg-amber-600 dark:dy-text-amber-300 dark:dy-border-amber-500/30",
|
|
2351
|
+
danger: "dy-bg-red-100 dy-text-red-700 dy-border-red-200 dark:dy-bg-red-600 dark:dy-text-red-300 dark:dy-border-red-500/30",
|
|
2352
|
+
info: "dy-bg-blue-100 dy-text-blue-700 dy-border-blue-200 dark:dy-bg-blue-600 dark:dy-text-blue-300 dark:dy-border-blue-500/30",
|
|
2353
|
+
neutral: "dy-bg-muted dy-text-muted-foreground dy-border-border dark:dy-bg-muted/60 dark:dy-text-foreground/80 dark:dy-border-border/80"
|
|
2354
|
+
};
|
|
2355
|
+
function getWorkflowBadgePresentation(color) {
|
|
2356
|
+
if (!color) return {
|
|
2357
|
+
className: WORKFLOW_BADGE_COLORS.neutral,
|
|
2358
|
+
style: void 0
|
|
2359
|
+
};
|
|
2360
|
+
const preset = WORKFLOW_BADGE_COLORS[color];
|
|
2361
|
+
if (preset) return {
|
|
2362
|
+
className: preset,
|
|
2363
|
+
style: void 0
|
|
2364
|
+
};
|
|
2365
|
+
return {
|
|
2366
|
+
className: "",
|
|
2367
|
+
style: {
|
|
2368
|
+
color,
|
|
2369
|
+
borderColor: `color-mix(in srgb, ${color} 32%, white)`,
|
|
2370
|
+
backgroundColor: `color-mix(in srgb, ${color} 14%, white)`
|
|
2371
|
+
}
|
|
2372
|
+
};
|
|
2373
|
+
}
|
|
2374
|
+
//#endregion
|
|
2285
2375
|
//#region src/components/ui/progress.tsx
|
|
2286
2376
|
var Progress = React$1.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx(ProgressPrimitive.Root, {
|
|
2287
2377
|
ref,
|
|
@@ -3923,7 +4013,7 @@ function MediaLibraryDialog({ collection, isOpen, onOpenChange, selectedValues,
|
|
|
3923
4013
|
})]
|
|
3924
4014
|
})]
|
|
3925
4015
|
}), /* @__PURE__ */ jsxs(TabsList, {
|
|
3926
|
-
className: "dy-grid dy-h-auto dy-grid-cols-3 dy-bg-muted/50 dy-p-1 dy-rounded-
|
|
4016
|
+
className: "dy-grid dy-h-auto dy-grid-cols-3 dy-bg-muted/50 dy-p-1 dy-rounded-lg sm:dy-flex",
|
|
3927
4017
|
children: [
|
|
3928
4018
|
/* @__PURE__ */ jsxs(TabsTrigger, {
|
|
3929
4019
|
value: "library",
|
|
@@ -3958,7 +4048,7 @@ function MediaLibraryDialog({ collection, isOpen, onOpenChange, selectedValues,
|
|
|
3958
4048
|
className: "dy-relative dy-flex-1 dy-group",
|
|
3959
4049
|
children: [/* @__PURE__ */ jsx(Search, { className: "dy-absolute dy-left-3.5 dy-top-1/2 dy--translate-y-1/2 dy-h-4 dy-w-4 dy-text-muted-foreground dy-group-focus-within:dy-text-primary dy-transition-colors" }), /* @__PURE__ */ jsx(Input, {
|
|
3960
4050
|
placeholder: "Search your media library...",
|
|
3961
|
-
className: "dy-pl-11 dy-h-11 dy-rounded-
|
|
4051
|
+
className: "dy-pl-11 dy-h-11 dy-rounded-lg dy-border-muted dy-bg-muted/10 focus:dy-bg-background dy-transition-all",
|
|
3962
4052
|
value: searchQuery,
|
|
3963
4053
|
onChange: (e) => setSearchQuery(e.target.value)
|
|
3964
4054
|
})]
|
|
@@ -4079,12 +4169,12 @@ function MediaLibraryDialog({ collection, isOpen, onOpenChange, selectedValues,
|
|
|
4079
4169
|
}), /* @__PURE__ */ jsx("div", {
|
|
4080
4170
|
className: "dy-space-y-3 dy-border-t dy-border-muted/20 dy-pt-4 md:dy-pt-6",
|
|
4081
4171
|
children: multiple ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Button, {
|
|
4082
|
-
className: "dy-w-full dy-h-11 dy-rounded-
|
|
4172
|
+
className: "dy-w-full dy-h-11 dy-rounded-lg dy-shadow-sm dy-font-bold dy-tracking-tight dy-transition-all",
|
|
4083
4173
|
variant: sVals.some((v) => v === selectedItem.id || v === selectedItem.filename || v === selectedItem.url) ? "outline" : "default",
|
|
4084
4174
|
onClick: () => onSelect(selectedItem.id, selectedItem),
|
|
4085
4175
|
children: sVals.some((v) => v === selectedItem.id || v === selectedItem.filename || v === selectedItem.url) ? "Deselect Item" : "Add to Selection"
|
|
4086
4176
|
}), sVals.length > 0 && /* @__PURE__ */ jsxs(Button, {
|
|
4087
|
-
className: "dy-w-full dy-h-11 dy-rounded-
|
|
4177
|
+
className: "dy-w-full dy-h-11 dy-rounded-lg dy-shadow-xl dy-bg-primary hover:dy-bg-primary/90 dy-font-bold dy-tracking-tight dy-transition-all dy-group",
|
|
4088
4178
|
onClick: handleConfirm,
|
|
4089
4179
|
children: [/* @__PURE__ */ jsxs("span", { children: [
|
|
4090
4180
|
"Confirm ",
|
|
@@ -4093,7 +4183,7 @@ function MediaLibraryDialog({ collection, isOpen, onOpenChange, selectedValues,
|
|
|
4093
4183
|
sVals.length === 1 ? "Asset" : "Assets"
|
|
4094
4184
|
] }), /* @__PURE__ */ jsx(Sparkles, { className: "dy-ml-2 dy-h-4 dy-w-4 dy-opacity-50 dy-group-hover:dy-opacity-100 dy-group-hover:dy-scale-110 dy-transition-all" })]
|
|
4095
4185
|
})] }) : /* @__PURE__ */ jsx(Button, {
|
|
4096
|
-
className: "dy-w-full dy-h-11 dy-rounded-
|
|
4186
|
+
className: "dy-w-full dy-h-11 dy-rounded-lg dy-shadow-lg dy-font-bold dy-tracking-tight dy-bg-primary hover:dy-bg-primary/90 dy-transition-all",
|
|
4097
4187
|
onClick: () => {
|
|
4098
4188
|
onSelect(selectedItem.id, selectedItem);
|
|
4099
4189
|
onOpenChange(false);
|
|
@@ -4233,7 +4323,7 @@ function MediaLibraryDialog({ collection, isOpen, onOpenChange, selectedValues,
|
|
|
4233
4323
|
/* @__PURE__ */ jsxs("div", {
|
|
4234
4324
|
className: "dy-flex dy-items-center dy-gap-3 dy-p-4 dy-rounded-2xl dy-bg-muted/20 dy-border dy-border-muted/30",
|
|
4235
4325
|
children: [/* @__PURE__ */ jsx("div", {
|
|
4236
|
-
className: "dy-p-2 dy-bg-background dy-rounded-
|
|
4326
|
+
className: "dy-p-2 dy-bg-background dy-rounded-lg dy-shadow-sm dy-text-muted-foreground",
|
|
4237
4327
|
children: /* @__PURE__ */ jsx(Info, { className: "dy-h-4 dy-w-4" })
|
|
4238
4328
|
}), /* @__PURE__ */ jsxs("p", {
|
|
4239
4329
|
className: "dy-text-[11px] dy-text-muted-foreground/80 dy-font-medium dy-leading-relaxed",
|
|
@@ -4766,7 +4856,7 @@ function MediaPicker({ collection, value, onChange, label, variant = "default",
|
|
|
4766
4856
|
isDragActive && /* @__PURE__ */ jsx("div", {
|
|
4767
4857
|
className: "dy-absolute dy-inset-0 dy-z-50 dy-bg-primary/10 dy-backdrop-blur-[2px] dy-border-2 dy-border-dashed dy-border-primary dy-rounded-2xl dy-flex dy-items-center dy-justify-center dy-pointer-events-none",
|
|
4768
4858
|
children: /* @__PURE__ */ jsxs("div", {
|
|
4769
|
-
className: "dy-bg-card dy-p-4 dy-rounded-
|
|
4859
|
+
className: "dy-bg-card dy-p-4 dy-rounded-lg dy-shadow-xl dy-flex dy-items-center dy-gap-2",
|
|
4770
4860
|
children: [/* @__PURE__ */ jsx(UploadCloud, { className: "dy-h-5 dy-w-5 dy-text-primary dy-animate-bounce" }), /* @__PURE__ */ jsx("p", {
|
|
4771
4861
|
className: "dy-text-xs dy-font-bold",
|
|
4772
4862
|
children: "Drop to upload & select"
|
|
@@ -4776,7 +4866,7 @@ function MediaPicker({ collection, value, onChange, label, variant = "default",
|
|
|
4776
4866
|
uploading && /* @__PURE__ */ jsx("div", {
|
|
4777
4867
|
className: "dy-absolute dy-inset-0 dy-z-50 dy-bg-background/60 dy-backdrop-blur-[1px] dy-rounded-2xl dy-flex dy-items-center dy-justify-center dy-pointer-events-none",
|
|
4778
4868
|
children: /* @__PURE__ */ jsxs("div", {
|
|
4779
|
-
className: "dy-bg-card dy-p-4 dy-rounded-
|
|
4869
|
+
className: "dy-bg-card dy-p-4 dy-rounded-lg dy-shadow-xl dy-w-56 dy-max-w-[80%] dy-space-y-2",
|
|
4780
4870
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
4781
4871
|
className: "dy-flex dy-items-center dy-justify-between dy-gap-2",
|
|
4782
4872
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -4804,7 +4894,7 @@ function MediaPicker({ collection, value, onChange, label, variant = "default",
|
|
|
4804
4894
|
children: [/* @__PURE__ */ jsxs("button", {
|
|
4805
4895
|
type: "button",
|
|
4806
4896
|
onClick: () => setIsOpen(true),
|
|
4807
|
-
className: "dy-group dy-relative dy-aspect-square dy-rounded-
|
|
4897
|
+
className: "dy-group dy-relative dy-aspect-square dy-rounded-lg dy-border-2 dy-border-dashed dy-border-muted hover:dy-border-primary/40 hover:dy-bg-primary/5 dy-transition-all dy-flex dy-flex-col dy-items-center dy-justify-center dy-gap-3 dy-overflow-hidden",
|
|
4808
4898
|
children: [
|
|
4809
4899
|
/* @__PURE__ */ jsx("div", { className: "dy-absolute dy-inset-0 dy-bg-primary/5 dy-opacity-0 dy-group-hover:dy-opacity-100 dy-transition-opacity" }),
|
|
4810
4900
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -4828,7 +4918,7 @@ function MediaPicker({ collection, value, onChange, label, variant = "default",
|
|
|
4828
4918
|
return /* @__PURE__ */ jsx("div", {
|
|
4829
4919
|
className: "dy-relative dy-group dy-animate-in dy-zoom-in dy-duration-300",
|
|
4830
4920
|
children: /* @__PURE__ */ jsxs("div", {
|
|
4831
|
-
className: cn("dy-relative dy-aspect-square dy-rounded-
|
|
4921
|
+
className: cn("dy-relative dy-aspect-square dy-rounded-lg dy-overflow-hidden dy-border-2 dy-bg-muted/20 dy-transition-all dy-shadow-sm", index === 0 ? "dy-border-primary dy-ring-4 dy-ring-primary/10" : "dy-border-border/40 hover:dy-border-border/80"),
|
|
4832
4922
|
children: [
|
|
4833
4923
|
item ? /* @__PURE__ */ jsx("img", {
|
|
4834
4924
|
src: getPreviewUrl(item),
|
|
@@ -4906,7 +4996,7 @@ function MediaPicker({ collection, value, onChange, label, variant = "default",
|
|
|
4906
4996
|
isDragActive && /* @__PURE__ */ jsx("div", {
|
|
4907
4997
|
className: "dy-absolute dy-inset-0 dy-z-50 dy-bg-primary/10 dy-backdrop-blur-[2px] dy-border-2 dy-border-dashed dy-border-primary dy-rounded-2xl dy-flex dy-items-center dy-justify-center dy-pointer-events-none",
|
|
4908
4998
|
children: /* @__PURE__ */ jsxs("div", {
|
|
4909
|
-
className: "dy-bg-card dy-p-3 dy-rounded-
|
|
4999
|
+
className: "dy-bg-card dy-p-3 dy-rounded-lg dy-shadow-xl dy-flex dy-items-center dy-gap-2",
|
|
4910
5000
|
children: [/* @__PURE__ */ jsx(UploadCloud, { className: "dy-h-4 dy-w-4 dy-text-primary dy-animate-bounce" }), /* @__PURE__ */ jsx("p", {
|
|
4911
5001
|
className: "dy-text-[11px] dy-font-bold",
|
|
4912
5002
|
children: "Drop file here"
|
|
@@ -4916,7 +5006,7 @@ function MediaPicker({ collection, value, onChange, label, variant = "default",
|
|
|
4916
5006
|
uploading && /* @__PURE__ */ jsx("div", {
|
|
4917
5007
|
className: "dy-absolute dy-inset-0 dy-z-50 dy-bg-background/60 dy-backdrop-blur-[1px] dy-rounded-2xl dy-flex dy-items-center dy-justify-center dy-pointer-events-none",
|
|
4918
5008
|
children: /* @__PURE__ */ jsxs("div", {
|
|
4919
|
-
className: "dy-bg-card dy-p-3 dy-rounded-
|
|
5009
|
+
className: "dy-bg-card dy-p-3 dy-rounded-lg dy-shadow-xl dy-w-48 dy-max-w-[85%] dy-space-y-2",
|
|
4920
5010
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
4921
5011
|
className: "dy-flex dy-items-center dy-justify-between dy-gap-2",
|
|
4922
5012
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -4948,7 +5038,7 @@ function MediaPicker({ collection, value, onChange, label, variant = "default",
|
|
|
4948
5038
|
type: "button",
|
|
4949
5039
|
onClick: () => setIsOpen(true),
|
|
4950
5040
|
disabled,
|
|
4951
|
-
className: "dy-group dy-relative dy-aspect-square dy-rounded-
|
|
5041
|
+
className: "dy-group dy-relative dy-aspect-square dy-rounded-lg dy-border-2 dy-border-dashed dy-border-muted hover:dy-border-primary/40 hover:dy-bg-primary/5 disabled:dy-cursor-not-allowed disabled:dy-opacity-60 dy-transition-all dy-flex dy-flex-col dy-items-center dy-justify-center dy-gap-3 dy-overflow-hidden",
|
|
4952
5042
|
children: [
|
|
4953
5043
|
/* @__PURE__ */ jsx("div", { className: "dy-absolute dy-inset-0 dy-bg-primary/5 dy-opacity-0 dy-group-hover:dy-opacity-100 dy-transition-opacity" }),
|
|
4954
5044
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -4971,7 +5061,7 @@ function MediaPicker({ collection, value, onChange, label, variant = "default",
|
|
|
4971
5061
|
const item = localMediaCache.find((m) => m.id === valId || m.filename === valId || m.url === valId);
|
|
4972
5062
|
const previewUrl = item ? getPreviewUrl(item) : val ? getMediaUrl(val, client?.getBaseUrl() || "") : "";
|
|
4973
5063
|
return /* @__PURE__ */ jsxs("div", {
|
|
4974
|
-
className: "dy-relative dy-aspect-square dy-group dy-rounded-
|
|
5064
|
+
className: "dy-relative dy-aspect-square dy-group dy-rounded-lg dy-overflow-hidden dy-border-2 dy-border-primary dy-ring-4 dy-ring-primary/10 dy-transition-all dy-bg-muted/20 dy-shadow-sm",
|
|
4975
5065
|
children: [
|
|
4976
5066
|
/* @__PURE__ */ jsx("button", {
|
|
4977
5067
|
type: "button",
|
|
@@ -5787,10 +5877,10 @@ function JsonEditor({ value, onChange, label, disabled }) {
|
|
|
5787
5877
|
value: internalValue,
|
|
5788
5878
|
onChange: handleChange,
|
|
5789
5879
|
disabled,
|
|
5790
|
-
className: cn("dy-font-mono dy-text-xs dy-min-h-[180px] dy-bg-muted/15 dy-border-dashed focus-visible:dy-ring-1 dy-rounded-
|
|
5880
|
+
className: cn("dy-font-mono dy-text-xs dy-min-h-[180px] dy-bg-muted/15 dy-border-dashed focus-visible:dy-ring-1 dy-rounded-lg", error && "dy-border-destructive/60 focus-visible:dy-ring-destructive/30"),
|
|
5791
5881
|
placeholder: "{ \"key\": \"value\" }"
|
|
5792
5882
|
}) : /* @__PURE__ */ jsx(ScrollArea, {
|
|
5793
|
-
className: "dy-h-[180px] dy-w-full dy-rounded-
|
|
5883
|
+
className: "dy-h-[180px] dy-w-full dy-rounded-lg dy-border dy-border-dashed dy-border-border/60 dy-bg-muted/15 dy-p-4",
|
|
5794
5884
|
children: value ? /* @__PURE__ */ jsx("div", {
|
|
5795
5885
|
className: "dy-flex dy-flex-col",
|
|
5796
5886
|
children: /* @__PURE__ */ jsx(JsonTreeNode, {
|
|
@@ -6310,7 +6400,7 @@ function JoinField({ schema, control }) {
|
|
|
6310
6400
|
return /* @__PURE__ */ jsxs("div", {
|
|
6311
6401
|
className: "dy-space-y-3",
|
|
6312
6402
|
children: [data && data.length > 0 ? /* @__PURE__ */ jsx("div", {
|
|
6313
|
-
className: "dy-divide-y dy-divide-border/30 dy-rounded-
|
|
6403
|
+
className: "dy-divide-y dy-divide-border/30 dy-rounded-lg dy-border dy-border-border/40 dy-overflow-hidden",
|
|
6314
6404
|
children: data.map((item) => /* @__PURE__ */ jsxs("button", {
|
|
6315
6405
|
type: "button",
|
|
6316
6406
|
onClick: () => navigate(`/collections/${targetCollection}/edit/${item.id}`),
|
|
@@ -6324,7 +6414,7 @@ function JoinField({ schema, control }) {
|
|
|
6324
6414
|
}), /* @__PURE__ */ jsx(ExternalLink, { className: "dy-h-3 dy-w-3 dy-text-muted-foreground/30 dy-opacity-0 dy-group-hover:dy-opacity-100 dy-transition-opacity dy-shrink-0 dy-ml-2" })]
|
|
6325
6415
|
}, item.id))
|
|
6326
6416
|
}) : /* @__PURE__ */ jsx("div", {
|
|
6327
|
-
className: "dy-rounded-
|
|
6417
|
+
className: "dy-rounded-lg dy-border dy-border-dashed dy-border-border/40 dy-bg-muted/5 dy-px-4 dy-py-6 dy-text-center",
|
|
6328
6418
|
children: /* @__PURE__ */ jsxs("p", {
|
|
6329
6419
|
className: "dy-text-xs dy-text-muted-foreground/60 dy-italic",
|
|
6330
6420
|
children: [
|
|
@@ -6337,7 +6427,7 @@ function JoinField({ schema, control }) {
|
|
|
6337
6427
|
type: "button",
|
|
6338
6428
|
variant: "outline",
|
|
6339
6429
|
size: "sm",
|
|
6340
|
-
className: "dy-h-8 dy-text-[11px] dy-font-bold dy-rounded-
|
|
6430
|
+
className: "dy-h-8 dy-text-[11px] dy-font-bold dy-rounded-lg dy-border-primary/20 hover:dy-bg-primary/5 hover:dy-text-primary dy-transition-all dy-shadow-sm",
|
|
6341
6431
|
onClick: () => navigate(`/collections/${targetCollection}/new?${onField}=${docId}`),
|
|
6342
6432
|
children: [
|
|
6343
6433
|
/* @__PURE__ */ jsx(Plus, { className: "dy-w-3 dy-h-3 dy-mr-1.5" }),
|
|
@@ -6613,7 +6703,7 @@ function SelectField({ schema, field, disabled, collection, siblingValues }) {
|
|
|
6613
6703
|
role: "combobox",
|
|
6614
6704
|
"aria-expanded": open,
|
|
6615
6705
|
disabled: disabled || isDynamic && isLoading,
|
|
6616
|
-
className: cn("dy-h-12 dy-w-full dy-justify-between dy-rounded-
|
|
6706
|
+
className: cn("dy-h-12 dy-w-full dy-justify-between dy-rounded-lg dy-border-border/40 dy-bg-background/50 dy-px-4 dy-font-normal dy-shadow-sm dy-transition-all hover:dy-shadow-md", !selectedOption && "dy-text-muted-foreground"),
|
|
6617
6707
|
children: [/* @__PURE__ */ jsx("span", {
|
|
6618
6708
|
className: "dy-truncate",
|
|
6619
6709
|
children: selectedOption?.label || (currentValue && !selectedOption ? currentValue : placeholder)
|
|
@@ -6637,7 +6727,7 @@ function SelectField({ schema, field, disabled, collection, siblingValues }) {
|
|
|
6637
6727
|
})]
|
|
6638
6728
|
})
|
|
6639
6729
|
}), /* @__PURE__ */ jsx(PopoverContent, {
|
|
6640
|
-
className: "dy-w-[var(--radix-popover-trigger-width)] dy-p-0 dy-rounded-
|
|
6730
|
+
className: "dy-w-[var(--radix-popover-trigger-width)] dy-p-0 dy-rounded-lg dy-border-border/40 dy-shadow-xl",
|
|
6641
6731
|
align: "start",
|
|
6642
6732
|
children: /* @__PURE__ */ jsxs(Command$1, {
|
|
6643
6733
|
shouldFilter: !isDynamic,
|
|
@@ -6744,7 +6834,7 @@ function RadioField({ schema, field, disabled, collection, siblingValues }) {
|
|
|
6744
6834
|
1,
|
|
6745
6835
|
2,
|
|
6746
6836
|
3
|
|
6747
|
-
].map((i) => /* @__PURE__ */ jsx("div", { className: "dy-h-12 dy-w-32 dy-rounded-
|
|
6837
|
+
].map((i) => /* @__PURE__ */ jsx("div", { className: "dy-h-12 dy-w-32 dy-rounded-lg dy-bg-muted dy-animate-pulse" }, i))
|
|
6748
6838
|
});
|
|
6749
6839
|
return /* @__PURE__ */ jsx(RadioGroup, {
|
|
6750
6840
|
onValueChange: field.onChange,
|
|
@@ -6759,7 +6849,7 @@ function RadioField({ schema, field, disabled, collection, siblingValues }) {
|
|
|
6759
6849
|
className: "dy-peer dy-absolute dy-left-4 dy-z-10"
|
|
6760
6850
|
}), /* @__PURE__ */ jsx(Label, {
|
|
6761
6851
|
htmlFor: `${field.name}-${opt.value}`,
|
|
6762
|
-
className: cn("dy-flex dy-flex-1 dy-items-center dy-pl-12 dy-pr-4 dy-py-3 dy-rounded-
|
|
6852
|
+
className: cn("dy-flex dy-flex-1 dy-items-center dy-pl-12 dy-pr-4 dy-py-3 dy-rounded-lg dy-border dy-border-border/40 dy-bg-background/50 dy-cursor-pointer dy-transition-all hover:dy-bg-background/80 hover:dy-shadow-sm", "dy-peer-data-[state=checked]:dy-border-primary dy-peer-data-[state=checked]:dy-bg-primary/5 dy-peer-data-[state=checked]:dy-shadow-md dy-peer-data-[state=checked]:dy-ring-1 dy-peer-data-[state=checked]:dy-ring-primary/20", "dy-text-sm dy-font-medium dy-text-foreground/70 dy-peer-data-[state=checked]:dy-text-primary"),
|
|
6763
6853
|
children: opt.label
|
|
6764
6854
|
})]
|
|
6765
6855
|
}, opt.value))
|
|
@@ -6843,7 +6933,7 @@ function MultiSelect({ options, value = [], onChange, label, placeholder = "Sele
|
|
|
6843
6933
|
role: "combobox",
|
|
6844
6934
|
"aria-expanded": open,
|
|
6845
6935
|
disabled: disabled || isDynamic && isLoading,
|
|
6846
|
-
className: "dy-min-h-12 dy-w-full dy-justify-between dy-rounded-
|
|
6936
|
+
className: "dy-min-h-12 dy-w-full dy-justify-between dy-rounded-lg dy-border-border/40 dy-bg-background/50 dy-px-4 dy-font-normal dy-shadow-sm dy-transition-all hover:dy-shadow-md",
|
|
6847
6937
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
6848
6938
|
className: "dy-flex dy-min-w-0 dy-flex-1 dy-flex-wrap dy-items-center dy-gap-1",
|
|
6849
6939
|
children: [value.length === 0 && /* @__PURE__ */ jsx("span", {
|
|
@@ -6889,7 +6979,7 @@ function MultiSelect({ options, value = [], onChange, label, placeholder = "Sele
|
|
|
6889
6979
|
})]
|
|
6890
6980
|
})
|
|
6891
6981
|
}), /* @__PURE__ */ jsx(PopoverContent, {
|
|
6892
|
-
className: "dy-w-[var(--radix-popover-trigger-width)] dy-p-0 dy-rounded-
|
|
6982
|
+
className: "dy-w-[var(--radix-popover-trigger-width)] dy-p-0 dy-rounded-lg dy-border-border/40 dy-shadow-xl",
|
|
6893
6983
|
align: "start",
|
|
6894
6984
|
children: /* @__PURE__ */ jsxs(Command$1, {
|
|
6895
6985
|
shouldFilter: !isDynamic,
|
|
@@ -6979,7 +7069,7 @@ function InlinePicker({ open, setOpen, triggerRef, children }) {
|
|
|
6979
7069
|
triggerRef
|
|
6980
7070
|
]);
|
|
6981
7071
|
return /* @__PURE__ */ jsx("div", {
|
|
6982
|
-
className: cn("dy-absolute dy-left-0 dy-top-full dy-z-50 dy-mt-1 dy-rounded-
|
|
7072
|
+
className: cn("dy-absolute dy-left-0 dy-top-full dy-z-50 dy-mt-1 dy-rounded-lg dy-border dy-border-border/50 dy-bg-popover dy-shadow-2xl dy-transition-[opacity,transform] dy-duration-100 dy-origin-top-left", open ? "dy-opacity-100 dy-scale-100 dy-pointer-events-auto" : "dy-opacity-0 dy-scale-95 dy-pointer-events-none dy-invisible"),
|
|
6983
7073
|
inert: !open ? true : void 0,
|
|
6984
7074
|
children
|
|
6985
7075
|
});
|
|
@@ -7367,7 +7457,7 @@ function IconPicker({ schema, field, disabled }) {
|
|
|
7367
7457
|
type: "button",
|
|
7368
7458
|
variant: "outline",
|
|
7369
7459
|
disabled,
|
|
7370
|
-
className: "dy-flex-1 dy-justify-start dy-gap-3 dy-h-12 dy-rounded-
|
|
7460
|
+
className: "dy-flex-1 dy-justify-start dy-gap-3 dy-h-12 dy-rounded-lg dy-border-border/40 dy-bg-background/50 dy-font-normal hover:dy-shadow-md dy-transition-all",
|
|
7371
7461
|
children: SelectedIcon ? /* @__PURE__ */ jsxs(Fragment, { children: [React$1.createElement(SelectedIcon, { className: "dy-h-5 dy-w-5 dy-text-primary dy-shrink-0" }), /* @__PURE__ */ jsx("span", {
|
|
7372
7462
|
className: "dy-text-sm dy-text-foreground/80",
|
|
7373
7463
|
children: selectedIconName
|
|
@@ -7457,7 +7547,7 @@ function IconPicker({ schema, field, disabled }) {
|
|
|
7457
7547
|
]
|
|
7458
7548
|
})]
|
|
7459
7549
|
}), SelectedIcon && /* @__PURE__ */ jsx("div", {
|
|
7460
|
-
className: "dy-flex dy-items-center dy-justify-center dy-h-12 dy-w-12 dy-rounded-
|
|
7550
|
+
className: "dy-flex dy-items-center dy-justify-center dy-h-12 dy-w-12 dy-rounded-lg dy-border dy-border-border/40 dy-bg-background/50 dy-shrink-0",
|
|
7461
7551
|
children: React$1.createElement(SelectedIcon, { className: "dy-h-6 dy-w-6 dy-text-foreground/70" })
|
|
7462
7552
|
})]
|
|
7463
7553
|
});
|
|
@@ -8134,7 +8224,7 @@ function SortableBlockItem({ id, index, item, schema, basePath, control, remove,
|
|
|
8134
8224
|
return /* @__PURE__ */ jsxs("div", {
|
|
8135
8225
|
ref: setNodeRef,
|
|
8136
8226
|
style,
|
|
8137
|
-
className: cn("dy-group dy-bg-card dy-border dy-rounded-
|
|
8227
|
+
className: cn("dy-group dy-bg-card dy-border dy-rounded-lg dy-overflow-hidden dy-transition-all", active ? "dy-border-primary dy-ring-1 dy-ring-primary/40 dy-shadow-sm" : "dy-border-border/50 hover:dy-border-border hover:dy-shadow-sm", isDragging && "dy-shadow-xl dy-ring-2 dy-ring-primary/40 dy-border-primary/50"),
|
|
8138
8228
|
children: [
|
|
8139
8229
|
/* @__PURE__ */ jsxs("div", {
|
|
8140
8230
|
className: "dy-flex dy-items-center dy-gap-3 dy-px-3 dy-py-3 dy-cursor-pointer dy-select-none",
|
|
@@ -8361,7 +8451,7 @@ function BlockBuilder({ schema, basePath, control, collection, documentId }) {
|
|
|
8361
8451
|
children: ["Add Block", /* @__PURE__ */ jsx(Plus, { className: "dy-w-3 dy-h-3 dy-ml-1.5" })]
|
|
8362
8452
|
})
|
|
8363
8453
|
}), /* @__PURE__ */ jsxs(DialogContent, {
|
|
8364
|
-
className: "dy-max-w-md md:dy-max-w-4xl dy-p-6 dy-rounded-
|
|
8454
|
+
className: "dy-max-w-md md:dy-max-w-4xl dy-p-6 dy-rounded-lg dy-border-border/40 dy-shadow-2xl !dy-flex dy-flex-col dy-max-h-[85vh] dy-overflow-hidden",
|
|
8365
8455
|
children: [
|
|
8366
8456
|
/* @__PURE__ */ jsxs(DialogHeader, {
|
|
8367
8457
|
className: "dy-pb-2 dy-flex-shrink-0",
|
|
@@ -8392,7 +8482,7 @@ function BlockBuilder({ schema, basePath, control, collection, documentId }) {
|
|
|
8392
8482
|
}) : filteredBlocks.map((block) => {
|
|
8393
8483
|
return /* @__PURE__ */ jsxs("div", {
|
|
8394
8484
|
onClick: () => handleAddBlock(block),
|
|
8395
|
-
className: "dy-group dy-border dy-border-muted/30 dy-rounded-
|
|
8485
|
+
className: "dy-group dy-border dy-border-muted/30 dy-rounded-lg dy-p-4 dy-flex dy-items-start dy-gap-3 hover:dy-border-primary/40 hover:dy-bg-primary/[0.02] dy-transition-all dy-cursor-pointer dy-select-none",
|
|
8396
8486
|
children: [/* @__PURE__ */ jsx("div", {
|
|
8397
8487
|
className: "dy-p-2.5 dy-bg-muted/50 dy-rounded-lg dy-text-muted-foreground/60 group-hover:dy-text-primary group-hover:dy-bg-primary/10 dy-transition-colors",
|
|
8398
8488
|
children: /* @__PURE__ */ jsx(resolveAdminIcon(block.icon, Layers), { className: "dy-w-4 dy-h-4" })
|
|
@@ -8415,7 +8505,7 @@ function BlockBuilder({ schema, basePath, control, collection, documentId }) {
|
|
|
8415
8505
|
})
|
|
8416
8506
|
})]
|
|
8417
8507
|
}), fields.length === 0 ? /* @__PURE__ */ jsxs("div", {
|
|
8418
|
-
className: "dy-text-center dy-p-8 dy-border dy-border-dashed dy-border-border/40 dy-rounded-
|
|
8508
|
+
className: "dy-text-center dy-p-8 dy-border dy-border-dashed dy-border-border/40 dy-rounded-lg dy-bg-muted/10 dy-flex dy-flex-col dy-items-center dy-gap-3",
|
|
8419
8509
|
children: [/* @__PURE__ */ jsx("p", {
|
|
8420
8510
|
className: "dy-text-[11px] dy-text-muted-foreground/50",
|
|
8421
8511
|
children: "No blocks added yet."
|
|
@@ -8674,7 +8764,7 @@ function SortableArrayItem({ id, index, schema, basePath, control, remove, move,
|
|
|
8674
8764
|
type: "button",
|
|
8675
8765
|
variant: "ghost",
|
|
8676
8766
|
size: "icon",
|
|
8677
|
-
className: "dy-h-10 dy-w-10 dy-rounded-
|
|
8767
|
+
className: "dy-h-10 dy-w-10 dy-rounded-lg dy-text-muted-foreground/30 hover:dy-text-destructive hover:dy-bg-destructive/10 sm:dy-h-8 sm:dy-w-8",
|
|
8678
8768
|
onClick: (event) => {
|
|
8679
8769
|
event.stopPropagation();
|
|
8680
8770
|
setShowDeleteConfirm(true);
|
|
@@ -8685,7 +8775,7 @@ function SortableArrayItem({ id, index, schema, basePath, control, remove, move,
|
|
|
8685
8775
|
type: "button",
|
|
8686
8776
|
variant: "ghost",
|
|
8687
8777
|
size: "icon",
|
|
8688
|
-
className: "dy-h-10 dy-w-10 dy-rounded-
|
|
8778
|
+
className: "dy-h-10 dy-w-10 dy-rounded-lg dy-text-muted-foreground hover:dy-bg-muted hover:dy-text-foreground sm:dy-h-8 sm:dy-w-8",
|
|
8689
8779
|
onClick: (event) => {
|
|
8690
8780
|
event.stopPropagation();
|
|
8691
8781
|
onToggleExpand();
|
|
@@ -8698,7 +8788,7 @@ function SortableArrayItem({ id, index, schema, basePath, control, remove, move,
|
|
|
8698
8788
|
type: "button",
|
|
8699
8789
|
variant: "ghost",
|
|
8700
8790
|
size: "icon",
|
|
8701
|
-
className: "dy-h-10 dy-w-10 dy-rounded-
|
|
8791
|
+
className: "dy-h-10 dy-w-10 dy-rounded-lg dy-text-muted-foreground hover:dy-bg-muted hover:dy-text-foreground sm:dy-h-8 sm:dy-w-8",
|
|
8702
8792
|
onClick: (event) => event.stopPropagation(),
|
|
8703
8793
|
title: "Item actions",
|
|
8704
8794
|
children: /* @__PURE__ */ jsx(MoreHorizontal, { className: "dy-w-4 dy-h-4" })
|
|
@@ -8793,7 +8883,7 @@ function SimpleArrayItem({ id, index, field, basePath, remove, move, onDuplicate
|
|
|
8793
8883
|
zIndex: isDragging ? 50 : 1,
|
|
8794
8884
|
opacity: isDragging ? .9 : 1
|
|
8795
8885
|
},
|
|
8796
|
-
className: cn("dy-group dy-flex dy-items-center dy-gap-1.5 dy-rounded-
|
|
8886
|
+
className: cn("dy-group dy-flex dy-items-center dy-gap-1.5 dy-rounded-lg dy-px-1 dy-py-1 dy-transition-colors", isDragging ? "dy-bg-muted/40 dy-shadow-lg dy-ring-1 dy-ring-primary/30" : "hover:dy-bg-muted/30"),
|
|
8797
8887
|
children: [
|
|
8798
8888
|
/* @__PURE__ */ jsx("div", {
|
|
8799
8889
|
...attributes,
|
|
@@ -8812,7 +8902,7 @@ function SimpleArrayItem({ id, index, field, basePath, remove, move, onDuplicate
|
|
|
8812
8902
|
type: "button",
|
|
8813
8903
|
variant: "ghost",
|
|
8814
8904
|
size: "icon",
|
|
8815
|
-
className: "dy-h-9 dy-w-9 dy-flex-shrink-0 dy-rounded-
|
|
8905
|
+
className: "dy-h-9 dy-w-9 dy-flex-shrink-0 dy-rounded-lg dy-text-muted-foreground/50 dy-opacity-0 dy-transition-opacity group-hover:dy-opacity-100 focus:dy-opacity-100 data-[state=open]:dy-opacity-100 hover:dy-bg-muted hover:dy-text-foreground sm:dy-h-8 sm:dy-w-8",
|
|
8816
8906
|
title: "Item actions",
|
|
8817
8907
|
children: /* @__PURE__ */ jsx(MoreHorizontal, { className: "dy-w-4 dy-h-4" })
|
|
8818
8908
|
})
|
|
@@ -9024,14 +9114,14 @@ function ArrayFieldRenderer({ schema, basePath, control, renderField }) {
|
|
|
9024
9114
|
type: "button",
|
|
9025
9115
|
variant: "outline",
|
|
9026
9116
|
size: "sm",
|
|
9027
|
-
className: "dy-h-9 dy-text-[11px] dy-font-bold dy-rounded-
|
|
9117
|
+
className: "dy-h-9 dy-text-[11px] dy-font-bold dy-rounded-lg dy-border-primary/20 hover:dy-bg-primary/5 hover:dy-text-primary dy-transition-all dy-shadow-sm",
|
|
9028
9118
|
onClick: () => setIsBulkOpen(true),
|
|
9029
9119
|
children: "Bulk Add Images"
|
|
9030
9120
|
}), /* @__PURE__ */ jsxs(Button, {
|
|
9031
9121
|
type: "button",
|
|
9032
9122
|
variant: "outline",
|
|
9033
9123
|
size: "sm",
|
|
9034
|
-
className: "dy-h-9 dy-text-[11px] dy-font-bold dy-rounded-
|
|
9124
|
+
className: "dy-h-9 dy-text-[11px] dy-font-bold dy-rounded-lg dy-border-primary/20 hover:dy-bg-primary/5 hover:dy-text-primary dy-transition-all dy-shadow-sm",
|
|
9035
9125
|
onClick: addItem,
|
|
9036
9126
|
children: [
|
|
9037
9127
|
/* @__PURE__ */ jsx(Plus, { className: "dy-w-3.5 dy-h-3.5 dy-mr-1.5" }),
|
|
@@ -9241,7 +9331,7 @@ function FormFieldRenderer({ schema, basePath, control, collection, documentId }
|
|
|
9241
9331
|
documentId
|
|
9242
9332
|
});
|
|
9243
9333
|
if (jexlError) return /* @__PURE__ */ jsxs("div", {
|
|
9244
|
-
className: "dy-space-y-2 dy-border dy-border-destructive/30 dy-bg-destructive/5 dy-p-3 dy-rounded-
|
|
9334
|
+
className: "dy-space-y-2 dy-border dy-border-destructive/30 dy-bg-destructive/5 dy-p-3 dy-rounded-lg dy-my-2",
|
|
9245
9335
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
9246
9336
|
className: "dy-text-xs dy-font-semibold dy-text-destructive dy-flex dy-items-center dy-gap-2",
|
|
9247
9337
|
children: [/* @__PURE__ */ jsxs("span", { children: [
|
|
@@ -9420,7 +9510,7 @@ function FormFieldRendererInner({ schema, basePath, control, collection, canUpda
|
|
|
9420
9510
|
name: fullPath,
|
|
9421
9511
|
render: ({ field: formField }) => /* @__PURE__ */ jsxs(FormItem, {
|
|
9422
9512
|
"data-dy-field": schema.name,
|
|
9423
|
-
className: cn(isSwitchBoolean ? "dy-flex dy-flex-row dy-items-center dy-justify-between dy-rounded-
|
|
9513
|
+
className: cn(isSwitchBoolean ? "dy-flex dy-flex-row dy-items-center dy-justify-between dy-rounded-lg dy-border dy-border-border/40 dy-p-4 dy-bg-background/50 dy-shadow-sm dy-space-y-0" : isBoolean ? "dy-flex dy-flex-row-reverse dy-items-start dy-justify-end dy-gap-3 dy-space-y-0" : hideLabel ? "dy-space-y-0" : "dy-space-y-3"),
|
|
9424
9514
|
children: [
|
|
9425
9515
|
!hideLabel && /* @__PURE__ */ jsxs("div", {
|
|
9426
9516
|
className: cn(isBoolean ? "dy-space-y-1" : "dy-flex dy-items-center dy-flex-wrap dy-gap-2 dy-mb-1"),
|
|
@@ -9832,7 +9922,7 @@ function FormEngineInner({ collection, fields, defaultValues = {}, onSubmit, onC
|
|
|
9832
9922
|
...form.register(field.name)
|
|
9833
9923
|
}, field.name)),
|
|
9834
9924
|
flatErrors.length > 0 && /* @__PURE__ */ jsxs("div", {
|
|
9835
|
-
className: "dy-p-4 dy-rounded-
|
|
9925
|
+
className: "dy-p-4 dy-rounded-lg dy-bg-destructive/10 dy-border dy-border-destructive/20 dy-text-destructive dy-space-y-2",
|
|
9836
9926
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
9837
9927
|
className: "dy-flex dy-items-center dy-gap-2 dy-font-semibold",
|
|
9838
9928
|
children: [/* @__PURE__ */ jsx(AlertCircle, { className: "dy-h-4 dy-w-4 dy-shrink-0" }), /* @__PURE__ */ jsx("span", { children: "Please resolve the following validation errors:" })]
|
|
@@ -9867,7 +9957,7 @@ function FormEngineInner({ collection, fields, defaultValues = {}, onSubmit, onC
|
|
|
9867
9957
|
}),
|
|
9868
9958
|
fieldsContent,
|
|
9869
9959
|
hasPassword && passwordChangeMode !== null && /* @__PURE__ */ jsxs("div", {
|
|
9870
|
-
className: "dy-rounded-
|
|
9960
|
+
className: "dy-rounded-lg dy-border dy-border-border dy-p-5 dy-space-y-4",
|
|
9871
9961
|
children: [
|
|
9872
9962
|
/* @__PURE__ */ jsxs("div", {
|
|
9873
9963
|
className: "dy-flex dy-items-center dy-gap-2 dy-text-sm dy-font-semibold dy-text-muted-foreground dy-uppercase dy-tracking-wide",
|
|
@@ -10847,6 +10937,23 @@ function SortableColumnItem({ id, label, visible, onToggleVisible }) {
|
|
|
10847
10937
|
]
|
|
10848
10938
|
});
|
|
10849
10939
|
}
|
|
10940
|
+
function resolvePublishedStateName(schema, item) {
|
|
10941
|
+
const hasPublishingState = !!(schema?.workflow || schema?.drafts);
|
|
10942
|
+
const workflowConfig = schema?.workflow;
|
|
10943
|
+
const workflowMeta = item?._workflow;
|
|
10944
|
+
const workflowState = workflowConfig && workflowMeta ? workflowConfig.states?.find((state) => state.name === workflowMeta.state) : null;
|
|
10945
|
+
if (workflowState) return workflowState.published ? "Published" : "Draft";
|
|
10946
|
+
if (!hasPublishingState) return null;
|
|
10947
|
+
const plainStatus = item.status;
|
|
10948
|
+
if (plainStatus === "published") return "Published";
|
|
10949
|
+
if (plainStatus === "draft") return "Draft";
|
|
10950
|
+
return null;
|
|
10951
|
+
}
|
|
10952
|
+
function resolveWorkflowState(schema, item) {
|
|
10953
|
+
const workflowConfig = schema?.workflow;
|
|
10954
|
+
const workflowMeta = item?._workflow;
|
|
10955
|
+
return workflowConfig && workflowMeta ? workflowConfig.states?.find((state) => state.name === workflowMeta.state) ?? null : null;
|
|
10956
|
+
}
|
|
10850
10957
|
function CollectionListPage({ slug }) {
|
|
10851
10958
|
const { client, components, user } = useDyrected();
|
|
10852
10959
|
const queryClient = useQueryClient();
|
|
@@ -11191,6 +11298,7 @@ function CollectionListPage({ slug }) {
|
|
|
11191
11298
|
const allColumnNames = visibleColumnNames;
|
|
11192
11299
|
const firstVisibleFieldName = visibleColumnNames.find((name) => fieldByName.has(name));
|
|
11193
11300
|
const titleFieldName = visibleColumnNames.includes(schema.admin?.useAsTitle || "") ? schema.admin?.useAsTitle : firstVisibleFieldName;
|
|
11301
|
+
const showPublishingStatus = !!(schema.workflow || schema.drafts);
|
|
11194
11302
|
const deleteAccess = schema.access?.delete;
|
|
11195
11303
|
const canDeleteRow = (item) => {
|
|
11196
11304
|
if (deleteAccess === false) return false;
|
|
@@ -11333,6 +11441,29 @@ function CollectionListPage({ slug }) {
|
|
|
11333
11441
|
const systemColumn = makeSystemColumn(name);
|
|
11334
11442
|
if (systemColumn) cols.push(systemColumn);
|
|
11335
11443
|
});
|
|
11444
|
+
if (showPublishingStatus) cols.push({
|
|
11445
|
+
id: "publishingStatus",
|
|
11446
|
+
header: "Status",
|
|
11447
|
+
enableHiding: false,
|
|
11448
|
+
cell: ({ row }) => {
|
|
11449
|
+
const status = resolvePublishedStateName(schema, row.original);
|
|
11450
|
+
if (!status) return /* @__PURE__ */ jsx("span", {
|
|
11451
|
+
className: "dy-text-xs dy-text-muted-foreground",
|
|
11452
|
+
children: "-"
|
|
11453
|
+
});
|
|
11454
|
+
const workflowState = resolveWorkflowState(schema, row.original);
|
|
11455
|
+
const badgePresentation = workflowState ? getWorkflowBadgePresentation(workflowState.color) : {
|
|
11456
|
+
className: status === "Published" ? WORKFLOW_BADGE_COLORS.success : WORKFLOW_BADGE_COLORS.warning,
|
|
11457
|
+
style: void 0
|
|
11458
|
+
};
|
|
11459
|
+
return /* @__PURE__ */ jsx(Badge, {
|
|
11460
|
+
variant: "outline",
|
|
11461
|
+
className: cn("dy-px-2 dy-py-0 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider dy-shrink-0", badgePresentation.className),
|
|
11462
|
+
style: badgePresentation.style,
|
|
11463
|
+
children: status
|
|
11464
|
+
});
|
|
11465
|
+
}
|
|
11466
|
+
});
|
|
11336
11467
|
return cols;
|
|
11337
11468
|
}, [
|
|
11338
11469
|
schema,
|
|
@@ -11815,10 +11946,10 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", collectionSlu
|
|
|
11815
11946
|
const [tokenSrc, setTokenSrc] = useState(null);
|
|
11816
11947
|
const [tokenError, setTokenError] = useState(null);
|
|
11817
11948
|
const lastDataKeyRef = useRef(null);
|
|
11949
|
+
const dataKey = safeStringify(data);
|
|
11818
11950
|
useEffect(() => {
|
|
11819
11951
|
if (mode !== "token" || !client || !collectionSlug) return;
|
|
11820
|
-
|
|
11821
|
-
if (key === lastDataKeyRef.current) return;
|
|
11952
|
+
if (dataKey === lastDataKeyRef.current) return;
|
|
11822
11953
|
let cancelled = false;
|
|
11823
11954
|
const timer = setTimeout(async () => {
|
|
11824
11955
|
try {
|
|
@@ -11828,7 +11959,7 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", collectionSlu
|
|
|
11828
11959
|
data
|
|
11829
11960
|
});
|
|
11830
11961
|
if (cancelled) return;
|
|
11831
|
-
lastDataKeyRef.current =
|
|
11962
|
+
lastDataKeyRef.current = dataKey;
|
|
11832
11963
|
setTokenSrc(withPreviewToken(previewUrl, token));
|
|
11833
11964
|
setTokenError(null);
|
|
11834
11965
|
} catch (err) {
|
|
@@ -11846,7 +11977,7 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", collectionSlu
|
|
|
11846
11977
|
collectionSlug,
|
|
11847
11978
|
documentId,
|
|
11848
11979
|
previewUrl,
|
|
11849
|
-
|
|
11980
|
+
dataKey
|
|
11850
11981
|
]);
|
|
11851
11982
|
const iframeSrc = mode === "token" ? tokenSrc ?? previewUrl : previewUrl;
|
|
11852
11983
|
useEffect(() => {
|
|
@@ -11997,29 +12128,29 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", collectionSlu
|
|
|
11997
12128
|
//#region src/components/workflow/WorkflowPanel.tsx
|
|
11998
12129
|
var STATE_COLORS = {
|
|
11999
12130
|
success: {
|
|
12000
|
-
bg: "dy-bg-emerald-50 dy-border-emerald-200",
|
|
12001
|
-
text: "dy-text-emerald-700",
|
|
12002
|
-
dot: "dy-bg-emerald-500"
|
|
12131
|
+
bg: "dy-bg-emerald-50 dy-border-emerald-200 dark:dy-bg-emerald-500/12 dark:dy-border-emerald-500/30",
|
|
12132
|
+
text: "dy-text-emerald-700 dark:dy-text-emerald-300",
|
|
12133
|
+
dot: "dy-bg-emerald-500 dark:dy-bg-emerald-400"
|
|
12003
12134
|
},
|
|
12004
12135
|
warning: {
|
|
12005
|
-
bg: "dy-bg-amber-50 dy-border-amber-200",
|
|
12006
|
-
text: "dy-text-amber-700",
|
|
12007
|
-
dot: "dy-bg-amber-500"
|
|
12136
|
+
bg: "dy-bg-amber-50 dy-border-amber-200 dark:dy-bg-amber-500/12 dark:dy-border-amber-500/30",
|
|
12137
|
+
text: "dy-text-amber-700 dark:dy-text-amber-300",
|
|
12138
|
+
dot: "dy-bg-amber-500 dark:dy-bg-amber-400"
|
|
12008
12139
|
},
|
|
12009
12140
|
danger: {
|
|
12010
|
-
bg: "dy-bg-red-50 dy-border-red-200",
|
|
12011
|
-
text: "dy-text-red-700",
|
|
12012
|
-
dot: "dy-bg-red-500"
|
|
12141
|
+
bg: "dy-bg-red-50 dy-border-red-200 dark:dy-bg-red-500/12 dark:dy-border-red-500/30",
|
|
12142
|
+
text: "dy-text-red-700 dark:dy-text-red-300",
|
|
12143
|
+
dot: "dy-bg-red-500 dark:dy-bg-red-400"
|
|
12013
12144
|
},
|
|
12014
12145
|
info: {
|
|
12015
|
-
bg: "dy-bg-blue-50 dy-border-blue-200",
|
|
12016
|
-
text: "dy-text-blue-700",
|
|
12017
|
-
dot: "dy-bg-blue-500"
|
|
12146
|
+
bg: "dy-bg-blue-50 dy-border-blue-200 dark:dy-bg-blue-500/12 dark:dy-border-blue-500/30",
|
|
12147
|
+
text: "dy-text-blue-700 dark:dy-text-blue-300",
|
|
12148
|
+
dot: "dy-bg-blue-500 dark:dy-bg-blue-400"
|
|
12018
12149
|
},
|
|
12019
12150
|
neutral: {
|
|
12020
|
-
bg: "dy-bg-muted/40 dy-border-border/60",
|
|
12021
|
-
text: "dy-text-muted-foreground",
|
|
12022
|
-
dot: "dy-bg-muted-foreground/60"
|
|
12151
|
+
bg: "dy-bg-muted/40 dy-border-border/60 dark:dy-bg-muted/60 dark:dy-border-border/80",
|
|
12152
|
+
text: "dy-text-muted-foreground dark:dy-text-foreground/80",
|
|
12153
|
+
dot: "dy-bg-muted-foreground/60 dark:dy-bg-foreground/60"
|
|
12023
12154
|
}
|
|
12024
12155
|
};
|
|
12025
12156
|
function stateColors(color) {
|
|
@@ -12145,7 +12276,7 @@ function WorkflowPanel({ collection, documentId, workflowMeta, workflowConfig })
|
|
|
12145
12276
|
return /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs(Button, {
|
|
12146
12277
|
size: "sm",
|
|
12147
12278
|
variant: t.unpublish || t.name === "reject" ? "outline" : "default",
|
|
12148
|
-
className: cn("dy-w-full dy-h-9 dy-rounded-
|
|
12279
|
+
className: cn("dy-w-full dy-h-9 dy-rounded-lg dy-text-xs dy-font-semibold dy-justify-start dy-gap-2", isWaiting && "dy-ring-2 dy-ring-primary/30"),
|
|
12149
12280
|
disabled: transitionMutation.isPending,
|
|
12150
12281
|
onClick: () => handleTransitionClick(t),
|
|
12151
12282
|
children: [isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "dy-h-3.5 dy-w-3.5 dy-animate-spin" }) : /* @__PURE__ */ jsx(StateIcon, { color: workflowConfig.states.find((s) => s.name === t.to)?.color }), t.label]
|
|
@@ -12591,7 +12722,7 @@ function EditEntryPage() {
|
|
|
12591
12722
|
]);
|
|
12592
12723
|
const hasWorkflow = !!schema?.workflow;
|
|
12593
12724
|
const syncShowWorkflow = useState(() => (next) => {
|
|
12594
|
-
setActiveTab((prev) => next ? "
|
|
12725
|
+
setActiveTab((prev) => next ? "workflow" : prev === "workflow" ? "edit" : prev);
|
|
12595
12726
|
})[0];
|
|
12596
12727
|
useEffect(() => {
|
|
12597
12728
|
if (!hasWorkflow || schemaPreviewUrl) return;
|
|
@@ -12698,6 +12829,11 @@ function EditEntryPage() {
|
|
|
12698
12829
|
const currentStatus = entry?.status || "draft";
|
|
12699
12830
|
const workflowState = workflowConfig && workflowMeta ? workflowConfig.states?.find((s) => s.name === workflowMeta.state) : null;
|
|
12700
12831
|
const isPublished = workflowState ? !!workflowState.published : currentStatus === "published";
|
|
12832
|
+
const statusBadgeLabel = workflowState ? workflowState.label || workflowState.name : currentStatus === "published" ? "Published" : currentStatus === "draft" ? "Draft" : String(currentStatus);
|
|
12833
|
+
const workflowBadgePresentation = workflowState ? getWorkflowBadgePresentation(workflowState.color) : {
|
|
12834
|
+
className: isPublished ? WORKFLOW_BADGE_COLORS.success : WORKFLOW_BADGE_COLORS.warning,
|
|
12835
|
+
style: void 0
|
|
12836
|
+
};
|
|
12701
12837
|
const showStatusBadge = workflowConfig ? !!workflowMeta : hasStatus;
|
|
12702
12838
|
const siteUrl = getSiteUrl(schemas?.admin?.siteUrl);
|
|
12703
12839
|
const previewUrl = resolvePreviewUrl(schema.admin?.previewUrl, previewData || entry, siteUrl);
|
|
@@ -12825,9 +12961,10 @@ function EditEntryPage() {
|
|
|
12825
12961
|
className: "dy-text-base dy-font-serif dy-font-bold dy-tracking-tight dy-text-foreground dy-truncate",
|
|
12826
12962
|
children: ["New ", schema?.labels?.singular || schema?.slug]
|
|
12827
12963
|
}), showStatusBadge && /* @__PURE__ */ jsx(Badge, {
|
|
12828
|
-
className: cn("dy-px-2 dy-py-0 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider dy-shrink-0",
|
|
12964
|
+
className: cn("dy-px-2 dy-py-0 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider dy-shrink-0", workflowBadgePresentation.className),
|
|
12965
|
+
style: workflowBadgePresentation.style,
|
|
12829
12966
|
variant: "outline",
|
|
12830
|
-
children:
|
|
12967
|
+
children: statusBadgeLabel
|
|
12831
12968
|
})]
|
|
12832
12969
|
}),
|
|
12833
12970
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -12856,10 +12993,10 @@ function EditEntryPage() {
|
|
|
12856
12993
|
}),
|
|
12857
12994
|
workflowAvailable && /* @__PURE__ */ jsx(HeaderAction, {
|
|
12858
12995
|
icon: Workflow,
|
|
12859
|
-
label: "
|
|
12860
|
-
active: activeTab === "
|
|
12861
|
-
title: activeTab === "
|
|
12862
|
-
onClick: () => setActiveTab((tab) => tab === "
|
|
12996
|
+
label: "Workflow",
|
|
12997
|
+
active: activeTab === "workflow",
|
|
12998
|
+
title: activeTab === "workflow" ? "Hide workflow transitions" : "Show workflow transitions",
|
|
12999
|
+
onClick: () => setActiveTab((tab) => tab === "workflow" ? "edit" : "workflow")
|
|
12863
13000
|
}),
|
|
12864
13001
|
schema?.audit && isEdit && canReadAudit && /* @__PURE__ */ jsx(HeaderAction, {
|
|
12865
13002
|
icon: History,
|
|
@@ -12968,7 +13105,7 @@ function EditEntryPage() {
|
|
|
12968
13105
|
children: /* @__PURE__ */ jsxs("div", {
|
|
12969
13106
|
className: "dy-space-y-4",
|
|
12970
13107
|
children: [
|
|
12971
|
-
activeTab === "
|
|
13108
|
+
activeTab === "workflow" && workflowAvailable && /* @__PURE__ */ jsx("div", {
|
|
12972
13109
|
className: "dy-animate-in dy-fade-in dy-duration-200 dy-max-w-3xl dy-mx-auto dy-py-6",
|
|
12973
13110
|
children: /* @__PURE__ */ jsx(WorkflowPanel, {
|
|
12974
13111
|
collection: slug,
|
|
@@ -13661,7 +13798,7 @@ function MediaPage({ collectionSlug, schema }) {
|
|
|
13661
13798
|
className: "dy-relative dy-w-full sm:dy-max-w-sm",
|
|
13662
13799
|
children: [/* @__PURE__ */ jsx(Search, { className: "dy-absolute dy-left-3 dy-top-1/2 dy--translate-y-1/2 dy-h-4 dy-w-4 dy-text-muted-foreground/60" }), /* @__PURE__ */ jsx(Input, {
|
|
13663
13800
|
placeholder: "Search assets by filename...",
|
|
13664
|
-
className: "dy-pl-10 dy-h-11 dy-bg-card dy-border-border/60 dy-rounded-
|
|
13801
|
+
className: "dy-pl-10 dy-h-11 dy-bg-card dy-border-border/60 dy-rounded-lg dy-shadow-sm focus-visible:dy-ring-primary/20",
|
|
13665
13802
|
value: search,
|
|
13666
13803
|
onChange: (e) => setSearch(e.target.value)
|
|
13667
13804
|
})]
|
|
@@ -13671,14 +13808,14 @@ function MediaPage({ collectionSlug, schema }) {
|
|
|
13671
13808
|
value: sortValue,
|
|
13672
13809
|
onValueChange: (v) => setSortValue(v),
|
|
13673
13810
|
children: [/* @__PURE__ */ jsxs(SelectTrigger, {
|
|
13674
|
-
className: "dy-h-11 dy-w-full dy-rounded-
|
|
13811
|
+
className: "dy-h-11 dy-w-full dy-rounded-lg dy-bg-card dy-border-border/60 dy-shadow-sm sm:dy-w-44",
|
|
13675
13812
|
children: [/* @__PURE__ */ jsx(ArrowUpDown, { className: "dy-h-4 dy-w-4 dy-text-muted-foreground/70" }), /* @__PURE__ */ jsx(SelectValue, { placeholder: "Sort by" })]
|
|
13676
13813
|
}), /* @__PURE__ */ jsx(SelectContent, { children: SORT_OPTIONS.map((opt) => /* @__PURE__ */ jsx(SelectItem, {
|
|
13677
13814
|
value: opt.value,
|
|
13678
13815
|
children: opt.label
|
|
13679
13816
|
}, opt.value)) })]
|
|
13680
13817
|
}), /* @__PURE__ */ jsxs("div", {
|
|
13681
|
-
className: "dy-flex dy-h-11 dy-items-center dy-rounded-
|
|
13818
|
+
className: "dy-flex dy-h-11 dy-items-center dy-rounded-lg dy-border dy-border-border/60 dy-bg-card dy-p-1 dy-shadow-sm",
|
|
13682
13819
|
children: [/* @__PURE__ */ jsx(Button, {
|
|
13683
13820
|
type: "button",
|
|
13684
13821
|
variant: "ghost",
|
|
@@ -13936,7 +14073,7 @@ function MediaCard({ item, baseUrl, onDelete, onClick, isSelected }) {
|
|
|
13936
14073
|
const previewUrl = getMediaPreviewUrl(item, baseUrl);
|
|
13937
14074
|
const hasPreview = (isImage || isExternalVideo) && !!previewUrl;
|
|
13938
14075
|
return /* @__PURE__ */ jsxs(Card, {
|
|
13939
|
-
className: cn("dy-overflow-hidden dy-group dy-relative dy-border-border/40 dy-bg-card dy-shadow-sm hover:dy-shadow-xl dy-transition-all dy-duration-300 dy-rounded-
|
|
14076
|
+
className: cn("dy-overflow-hidden dy-group dy-relative dy-border-border/40 dy-bg-card dy-shadow-sm hover:dy-shadow-xl dy-transition-all dy-duration-300 dy-rounded-lg dy-cursor-pointer", isSelected && "dy-ring-2 dy-ring-primary dy-ring-offset-2 dy-shadow-lg dy-scale-[0.98]"),
|
|
13940
14077
|
onClick,
|
|
13941
14078
|
children: [
|
|
13942
14079
|
/* @__PURE__ */ jsx(CardHeader, {
|
|
@@ -14071,7 +14208,7 @@ function MediaDetailsDialog({ item, collectionSlug, onClose, baseUrl, onUpdate,
|
|
|
14071
14208
|
children: [/* @__PURE__ */ jsx("div", {
|
|
14072
14209
|
className: "dy-relative dy-flex dy-w-full dy-flex-none dy-items-center dy-justify-center dy-border-b dy-border-border/40 dy-bg-muted/15 dy-p-3 sm:dy-p-5 md:dy-h-full md:dy-min-h-0 md:dy-w-3/5 md:dy-flex-shrink md:dy-border-b-0 md:dy-border-r lg:dy-w-2/3",
|
|
14073
14210
|
children: /* @__PURE__ */ jsx("div", {
|
|
14074
|
-
className: "dy-relative dy-flex dy-h-[40dvh] dy-min-h-[220px] dy-max-h-80 dy-w-full dy-max-w-full dy-items-center dy-justify-center dy-overflow-hidden dy-rounded-
|
|
14211
|
+
className: "dy-relative dy-flex dy-h-[40dvh] dy-min-h-[220px] dy-max-h-80 dy-w-full dy-max-w-full dy-items-center dy-justify-center dy-overflow-hidden dy-rounded-lg dy-border dy-border-border/40 dy-bg-checkered dy-shadow-inner md:dy-h-full md:dy-max-h-full",
|
|
14075
14212
|
children: embedUrl ? /* @__PURE__ */ jsx("iframe", {
|
|
14076
14213
|
src: embedUrl,
|
|
14077
14214
|
title: item.filename,
|
|
@@ -14119,7 +14256,7 @@ function MediaDetailsDialog({ item, collectionSlug, onClose, baseUrl, onUpdate,
|
|
|
14119
14256
|
className: "dy-text-xs dy-text-muted-foreground",
|
|
14120
14257
|
children: ["Uploaded on ", item.createdAt ? new Date(item.createdAt).toLocaleDateString() : "N/A"]
|
|
14121
14258
|
})] }), /* @__PURE__ */ jsxs("div", {
|
|
14122
|
-
className: "dy-grid dy-grid-cols-2 dy-gap-x-4 dy-gap-y-3 dy-bg-muted/30 dy-p-3.5 dy-rounded-
|
|
14259
|
+
className: "dy-grid dy-grid-cols-2 dy-gap-x-4 dy-gap-y-3 dy-bg-muted/30 dy-p-3.5 dy-rounded-lg dy-border dy-border-border/40",
|
|
14123
14260
|
children: [
|
|
14124
14261
|
/* @__PURE__ */ jsxs("div", {
|
|
14125
14262
|
className: "dy-space-y-0.5",
|
|
@@ -14227,7 +14364,7 @@ function MediaDetailsDialog({ item, collectionSlug, onClose, baseUrl, onUpdate,
|
|
|
14227
14364
|
}), /* @__PURE__ */ jsxs("div", {
|
|
14228
14365
|
className: "dy-flex dy-flex-shrink-0 dy-flex-col dy-gap-3 dy-border-t dy-border-border/40 dy-bg-muted/5 dy-p-4 sm:dy-p-6",
|
|
14229
14366
|
children: [hasChanges && /* @__PURE__ */ jsx(Button, {
|
|
14230
|
-
className: "dy-w-full dy-h-11 dy-rounded-
|
|
14367
|
+
className: "dy-w-full dy-h-11 dy-rounded-lg dy-font-bold dy-bg-primary dy-text-card dy-shadow-lg dy-shadow-primary/20 dy-animate-in dy-fade-in dy-slide-in-from-bottom-2",
|
|
14231
14368
|
onClick: handleSave,
|
|
14232
14369
|
disabled: isSaving,
|
|
14233
14370
|
children: isSaving ? "Saving..." : "Save Changes"
|
|
@@ -14235,7 +14372,7 @@ function MediaDetailsDialog({ item, collectionSlug, onClose, baseUrl, onUpdate,
|
|
|
14235
14372
|
className: "dy-grid dy-grid-cols-2 dy-gap-2 sm:dy-flex",
|
|
14236
14373
|
children: [
|
|
14237
14374
|
collectionSlug && /* @__PURE__ */ jsx(Button, {
|
|
14238
|
-
className: "dy-col-span-2 dy-h-11 dy-rounded-
|
|
14375
|
+
className: "dy-col-span-2 dy-h-11 dy-rounded-lg dy-font-bold dy-gap-2 dy-bg-card sm:dy-flex-1",
|
|
14239
14376
|
variant: "outline",
|
|
14240
14377
|
asChild: true,
|
|
14241
14378
|
children: /* @__PURE__ */ jsxs(Link, {
|
|
@@ -14244,7 +14381,7 @@ function MediaDetailsDialog({ item, collectionSlug, onClose, baseUrl, onUpdate,
|
|
|
14244
14381
|
})
|
|
14245
14382
|
}),
|
|
14246
14383
|
/* @__PURE__ */ jsx(Button, {
|
|
14247
|
-
className: cn("dy-h-11 dy-rounded-
|
|
14384
|
+
className: cn("dy-h-11 dy-rounded-lg dy-font-bold dy-gap-2 dy-bg-card", collectionSlug ? "dy-px-3" : "dy-flex-1"),
|
|
14248
14385
|
variant: "outline",
|
|
14249
14386
|
asChild: true,
|
|
14250
14387
|
title: "Open Original File",
|
|
@@ -14257,14 +14394,14 @@ function MediaDetailsDialog({ item, collectionSlug, onClose, baseUrl, onUpdate,
|
|
|
14257
14394
|
}),
|
|
14258
14395
|
isImage && item.mimeType !== "image/svg+xml" && /* @__PURE__ */ jsxs(Button, {
|
|
14259
14396
|
onClick: () => setIsCropOpen(true),
|
|
14260
|
-
className: cn("dy-h-11 dy-rounded-
|
|
14397
|
+
className: cn("dy-h-11 dy-rounded-lg dy-font-bold dy-gap-2 dy-bg-card", collectionSlug ? "dy-px-3" : "dy-flex-1"),
|
|
14261
14398
|
variant: "outline",
|
|
14262
14399
|
title: "Crop Image",
|
|
14263
14400
|
children: [/* @__PURE__ */ jsx(Scissors, { className: "dy-h-4 dy-w-4" }), !collectionSlug && "Crop"]
|
|
14264
14401
|
}),
|
|
14265
14402
|
onDelete && /* @__PURE__ */ jsx(Button, {
|
|
14266
14403
|
onClick: onDelete,
|
|
14267
|
-
className: "dy-h-11 dy-px-4 dy-rounded-
|
|
14404
|
+
className: "dy-h-11 dy-px-4 dy-rounded-lg dy-text-destructive hover:dy-bg-destructive/10 hover:dy-text-destructive dy-transition-colors",
|
|
14268
14405
|
variant: "ghost",
|
|
14269
14406
|
title: "Delete Permanently",
|
|
14270
14407
|
children: /* @__PURE__ */ jsx(Trash2, { className: "dy-h-4 dy-w-4" })
|
|
@@ -14395,7 +14532,7 @@ function FileUploader({ collectionSlug, files, setFiles, onComplete }) {
|
|
|
14395
14532
|
/* @__PURE__ */ jsx("div", {
|
|
14396
14533
|
className: "dy-max-h-[240px] dy-overflow-auto dy-space-y-2 dy-pr-2 dy-custom-scrollbar",
|
|
14397
14534
|
children: files.map((file, idx) => /* @__PURE__ */ jsxs("div", {
|
|
14398
|
-
className: "dy-flex dy-items-center dy-justify-between dy-p-3 dy-bg-muted/30 dy-border dy-border-border/40 dy-rounded-
|
|
14535
|
+
className: "dy-flex dy-items-center dy-justify-between dy-p-3 dy-bg-muted/30 dy-border dy-border-border/40 dy-rounded-lg dy-text-sm dy-group dy-transition-colors hover:dy-bg-muted/50",
|
|
14399
14536
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
14400
14537
|
className: "dy-flex dy-items-center dy-gap-3 dy-truncate",
|
|
14401
14538
|
children: [/* @__PURE__ */ jsx("div", {
|
|
@@ -14426,7 +14563,7 @@ function FileUploader({ collectionSlug, files, setFiles, onComplete }) {
|
|
|
14426
14563
|
children: /* @__PURE__ */ jsx(Button, {
|
|
14427
14564
|
onClick: handleUpload,
|
|
14428
14565
|
disabled: uploading || files.length === 0,
|
|
14429
|
-
className: "dy-w-full dy-h-12 dy-rounded-
|
|
14566
|
+
className: "dy-w-full dy-h-12 dy-rounded-lg dy-bg-primary hover:dy-bg-primary/90 dy-text-card dy-font-bold dy-shadow-lg dy-shadow-primary/20 dy-transition-all active:dy-scale-[0.98]",
|
|
14430
14567
|
children: uploading ? /* @__PURE__ */ jsxs("span", {
|
|
14431
14568
|
className: "dy-flex dy-items-center dy-gap-2",
|
|
14432
14569
|
children: [/* @__PURE__ */ jsx("div", { className: "dy-h-4 dy-w-4 dy-border-2 dy-border-card/30 dy-border-t-card dy-rounded-full dy-animate-spin" }), "Uploading Assets..."]
|
|
@@ -14471,7 +14608,7 @@ function FileUploader({ collectionSlug, files, setFiles, onComplete }) {
|
|
|
14471
14608
|
}), /* @__PURE__ */ jsx(Button, {
|
|
14472
14609
|
onClick: handleAddUrl,
|
|
14473
14610
|
disabled: addingUrl || !externalUrl.trim(),
|
|
14474
|
-
className: "dy-h-12 dy-rounded-
|
|
14611
|
+
className: "dy-h-12 dy-rounded-lg dy-bg-primary hover:dy-bg-primary/90 dy-text-card dy-font-bold dy-shadow-lg dy-shadow-primary/20 dy-transition-all active:dy-scale-[0.98] sm:dy-w-auto",
|
|
14475
14612
|
children: addingUrl ? /* @__PURE__ */ jsxs("span", {
|
|
14476
14613
|
className: "dy-flex dy-items-center dy-gap-2",
|
|
14477
14614
|
children: [/* @__PURE__ */ jsx("div", { className: "dy-h-4 dy-w-4 dy-border-2 dy-border-card/30 dy-border-t-card dy-rounded-full dy-animate-spin" }), "Adding…"]
|
|
@@ -14672,7 +14809,7 @@ function SetupPromptUI({ config }) {
|
|
|
14672
14809
|
setCopied(true);
|
|
14673
14810
|
window.setTimeout(() => setCopied(false), 1800);
|
|
14674
14811
|
}
|
|
14675
|
-
const currentVersion = "2.5.
|
|
14812
|
+
const currentVersion = "2.5.63";
|
|
14676
14813
|
const [latestVersion, setLatestVersion] = useState(() => {
|
|
14677
14814
|
if (typeof window === "undefined") return null;
|
|
14678
14815
|
return localStorage.getItem("dyrected_latest_release");
|
|
@@ -15750,7 +15887,7 @@ function AdminUI({ apiKey, baseUrl = "/dyrected", siteId, onNavigate, isEmbedded
|
|
|
15750
15887
|
onNavigate,
|
|
15751
15888
|
isEmbedded
|
|
15752
15889
|
}) }) }), /* @__PURE__ */ jsx(Toaster$1, {
|
|
15753
|
-
position: "top-
|
|
15890
|
+
position: "top-center",
|
|
15754
15891
|
expand: true,
|
|
15755
15892
|
richColors: true
|
|
15756
15893
|
})] }) })
|
|
@@ -15796,7 +15933,7 @@ function AdminStandalone({ apiKey, baseUrl, siteId }) {
|
|
|
15796
15933
|
baseUrl,
|
|
15797
15934
|
siteId,
|
|
15798
15935
|
children: /* @__PURE__ */ jsx(AdminThemeProvider, { children: /* @__PURE__ */ jsxs(AdminThemedRoot, { children: [/* @__PURE__ */ jsx(QueryProvider, { children: /* @__PURE__ */ jsx(MemoryRouter, { children: /* @__PURE__ */ jsx(AdminRoutes, {}) }) }), /* @__PURE__ */ jsx(Toaster$1, {
|
|
15799
|
-
position: "top-
|
|
15936
|
+
position: "top-center",
|
|
15800
15937
|
expand: true,
|
|
15801
15938
|
richColors: true
|
|
15802
15939
|
})] }) })
|
|
@@ -7,6 +7,6 @@ export interface DyrectedProviderProps {
|
|
|
7
7
|
siteId?: string;
|
|
8
8
|
initialToken?: string;
|
|
9
9
|
defaultTechStack?: string;
|
|
10
|
-
components?: DyrectedContextType[
|
|
10
|
+
components?: DyrectedContextType["components"];
|
|
11
11
|
}
|
|
12
|
-
export declare function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBaseUrl, siteId: initialSiteId, initialToken, defaultTechStack, components }: DyrectedProviderProps): React.JSX.Element;
|
|
12
|
+
export declare function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBaseUrl, siteId: initialSiteId, initialToken, defaultTechStack, components, }: DyrectedProviderProps): React.JSX.Element;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ComponentType } from 'react';
|
|
2
|
-
import { AdminConfig, CollectionConfig, GlobalConfig, PublicAdminAuthConfig } from '@dyrected/core';
|
|
2
|
+
import { AdminConfig, Block, CollectionConfig, GlobalConfig, PublicAdminAuthConfig } from '@dyrected/core';
|
|
3
3
|
import { DyrectedClient, PaginatedResult } from '@dyrected/sdk';
|
|
4
4
|
/** All collection and global schemas returned by the backend, plus optional admin config. */
|
|
5
5
|
export interface AdminSchemas {
|
|
6
|
+
blocks?: Block[];
|
|
6
7
|
collections: CollectionConfig[];
|
|
7
8
|
globals: GlobalConfig[];
|
|
8
9
|
admin?: AdminConfig;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dyrected/admin",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.63",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -64,9 +64,9 @@
|
|
|
64
64
|
"tailwind-merge": "^3.5.0",
|
|
65
65
|
"tailwindcss-animate": "^1.0.7",
|
|
66
66
|
"zod": "^3.25.76",
|
|
67
|
-
"@dyrected/core": "^2.5.
|
|
68
|
-
"@dyrected/
|
|
69
|
-
"@dyrected/
|
|
67
|
+
"@dyrected/core": "^2.5.63",
|
|
68
|
+
"@dyrected/sdk": "^2.5.63",
|
|
69
|
+
"@dyrected/knowledge": "^0.2.15"
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
72
72
|
"@tanstack/react-query": "^5.0.0",
|