@dyrected/admin 2.6.0 → 2.6.1
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 +101 -4
- package/dist/components/forms/form-engine.d.ts +13 -2
- package/dist/components/workflow/WorkflowPanel.d.ts +8 -1
- package/dist/components/workflow/draft-live-compare-sheet.d.ts +6 -0
- package/dist/components/workflow/workflow-transition-controls.d.ts +60 -0
- package/dist/index.mjs +1501 -332
- package/dist/lib/draft-live-compare.d.ts +38 -0
- package/dist/lib/draft-live-compare.test.d.ts +1 -0
- package/dist/lib/workflow-autosave.d.ts +18 -0
- package/dist/lib/workflow-autosave.test.d.ts +1 -0
- package/dist/lib/workflow-ui.d.ts +21 -0
- package/dist/lib/workflow-ui.test.d.ts +1 -0
- package/package.json +4 -4
package/dist/admin.css
CHANGED
|
@@ -1631,6 +1631,10 @@
|
|
|
1631
1631
|
height: 92dvh;
|
|
1632
1632
|
}
|
|
1633
1633
|
|
|
1634
|
+
.dy-h-\[calc\(100vh-132px\)\]{
|
|
1635
|
+
height: calc(100vh - 132px);
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1634
1638
|
.dy-h-\[calc\(100vh-200px\)\]{
|
|
1635
1639
|
height: calc(100vh - 200px);
|
|
1636
1640
|
}
|
|
@@ -1755,6 +1759,10 @@
|
|
|
1755
1759
|
min-height: 3rem;
|
|
1756
1760
|
}
|
|
1757
1761
|
|
|
1762
|
+
.dy-min-h-28{
|
|
1763
|
+
min-height: 7rem;
|
|
1764
|
+
}
|
|
1765
|
+
|
|
1758
1766
|
.dy-min-h-56{
|
|
1759
1767
|
min-height: 14rem;
|
|
1760
1768
|
}
|
|
@@ -1955,6 +1963,10 @@
|
|
|
1955
1963
|
width: 56px;
|
|
1956
1964
|
}
|
|
1957
1965
|
|
|
1966
|
+
.dy-w-\[96vw\]{
|
|
1967
|
+
width: 96vw;
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1958
1970
|
.dy-w-\[calc\(100vw-1rem\)\]{
|
|
1959
1971
|
width: calc(100vw - 1rem);
|
|
1960
1972
|
}
|
|
@@ -2316,10 +2328,6 @@
|
|
|
2316
2328
|
user-select: all;
|
|
2317
2329
|
}
|
|
2318
2330
|
|
|
2319
|
-
.dy-resize-none{
|
|
2320
|
-
resize: none;
|
|
2321
|
-
}
|
|
2322
|
-
|
|
2323
2331
|
.dy-resize-y{
|
|
2324
2332
|
resize: vertical;
|
|
2325
2333
|
}
|
|
@@ -2581,6 +2589,10 @@
|
|
|
2581
2589
|
white-space: nowrap;
|
|
2582
2590
|
}
|
|
2583
2591
|
|
|
2592
|
+
.dy-whitespace-pre-wrap{
|
|
2593
|
+
white-space: pre-wrap;
|
|
2594
|
+
}
|
|
2595
|
+
|
|
2584
2596
|
.dy-break-words{
|
|
2585
2597
|
overflow-wrap: break-word;
|
|
2586
2598
|
}
|
|
@@ -2617,6 +2629,10 @@
|
|
|
2617
2629
|
border-radius: calc(var(--radius) - 2px);
|
|
2618
2630
|
}
|
|
2619
2631
|
|
|
2632
|
+
.dy-rounded-none{
|
|
2633
|
+
border-radius: 0px;
|
|
2634
|
+
}
|
|
2635
|
+
|
|
2620
2636
|
.dy-rounded-sm{
|
|
2621
2637
|
border-radius: calc(var(--radius) - 4px);
|
|
2622
2638
|
}
|
|
@@ -2830,10 +2846,20 @@
|
|
|
2830
2846
|
border-color: rgb(239 68 68 / 0.2);
|
|
2831
2847
|
}
|
|
2832
2848
|
|
|
2849
|
+
.dy-border-rose-200{
|
|
2850
|
+
--tw-border-opacity: 1;
|
|
2851
|
+
border-color: rgb(254 205 211 / var(--tw-border-opacity, 1));
|
|
2852
|
+
}
|
|
2853
|
+
|
|
2833
2854
|
.dy-border-sidebar-border{
|
|
2834
2855
|
border-color: hsl(var(--sidebar-border));
|
|
2835
2856
|
}
|
|
2836
2857
|
|
|
2858
|
+
.dy-border-sky-200{
|
|
2859
|
+
--tw-border-opacity: 1;
|
|
2860
|
+
border-color: rgb(186 230 253 / var(--tw-border-opacity, 1));
|
|
2861
|
+
}
|
|
2862
|
+
|
|
2837
2863
|
.dy-border-transparent{
|
|
2838
2864
|
border-color: transparent;
|
|
2839
2865
|
}
|
|
@@ -3076,6 +3102,10 @@
|
|
|
3076
3102
|
background-color: hsl(var(--muted) / 0.3);
|
|
3077
3103
|
}
|
|
3078
3104
|
|
|
3105
|
+
.dy-bg-muted\/35{
|
|
3106
|
+
background-color: hsl(var(--muted) / 0.35);
|
|
3107
|
+
}
|
|
3108
|
+
|
|
3079
3109
|
.dy-bg-muted\/40{
|
|
3080
3110
|
background-color: hsl(var(--muted) / 0.4);
|
|
3081
3111
|
}
|
|
@@ -3135,6 +3165,11 @@
|
|
|
3135
3165
|
background-color: rgb(239 68 68 / 0.1);
|
|
3136
3166
|
}
|
|
3137
3167
|
|
|
3168
|
+
.dy-bg-rose-50{
|
|
3169
|
+
--tw-bg-opacity: 1;
|
|
3170
|
+
background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));
|
|
3171
|
+
}
|
|
3172
|
+
|
|
3138
3173
|
.dy-bg-secondary{
|
|
3139
3174
|
background-color: hsl(var(--secondary));
|
|
3140
3175
|
}
|
|
@@ -3147,6 +3182,11 @@
|
|
|
3147
3182
|
background-color: hsl(var(--sidebar-border));
|
|
3148
3183
|
}
|
|
3149
3184
|
|
|
3185
|
+
.dy-bg-sky-50{
|
|
3186
|
+
--tw-bg-opacity: 1;
|
|
3187
|
+
background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1));
|
|
3188
|
+
}
|
|
3189
|
+
|
|
3150
3190
|
.dy-bg-transparent{
|
|
3151
3191
|
background-color: transparent;
|
|
3152
3192
|
}
|
|
@@ -3367,6 +3407,11 @@
|
|
|
3367
3407
|
padding-bottom: 1rem;
|
|
3368
3408
|
}
|
|
3369
3409
|
|
|
3410
|
+
.dy-py-5{
|
|
3411
|
+
padding-top: 1.25rem;
|
|
3412
|
+
padding-bottom: 1.25rem;
|
|
3413
|
+
}
|
|
3414
|
+
|
|
3370
3415
|
.dy-py-6{
|
|
3371
3416
|
padding-top: 1.5rem;
|
|
3372
3417
|
padding-bottom: 1.5rem;
|
|
@@ -3645,6 +3690,10 @@
|
|
|
3645
3690
|
letter-spacing: 0.12em;
|
|
3646
3691
|
}
|
|
3647
3692
|
|
|
3693
|
+
.dy-tracking-\[0\.18em\]{
|
|
3694
|
+
letter-spacing: 0.18em;
|
|
3695
|
+
}
|
|
3696
|
+
|
|
3648
3697
|
.dy-tracking-tight{
|
|
3649
3698
|
letter-spacing: -0.025em;
|
|
3650
3699
|
}
|
|
@@ -3877,6 +3926,11 @@
|
|
|
3877
3926
|
color: rgb(127 29 29 / var(--tw-text-opacity, 1));
|
|
3878
3927
|
}
|
|
3879
3928
|
|
|
3929
|
+
.dy-text-rose-700{
|
|
3930
|
+
--tw-text-opacity: 1;
|
|
3931
|
+
color: rgb(190 18 60 / var(--tw-text-opacity, 1));
|
|
3932
|
+
}
|
|
3933
|
+
|
|
3880
3934
|
.dy-text-secondary-foreground{
|
|
3881
3935
|
color: hsl(var(--secondary-foreground));
|
|
3882
3936
|
}
|
|
@@ -3889,6 +3943,11 @@
|
|
|
3889
3943
|
color: hsl(var(--sidebar-foreground) / 0.7);
|
|
3890
3944
|
}
|
|
3891
3945
|
|
|
3946
|
+
.dy-text-sky-700{
|
|
3947
|
+
--tw-text-opacity: 1;
|
|
3948
|
+
color: rgb(3 105 161 / var(--tw-text-opacity, 1));
|
|
3949
|
+
}
|
|
3950
|
+
|
|
3892
3951
|
.dy-text-white{
|
|
3893
3952
|
--tw-text-opacity: 1;
|
|
3894
3953
|
color: rgb(255 255 255 / var(--tw-text-opacity, 1));
|
|
@@ -4076,6 +4135,11 @@
|
|
|
4076
4135
|
--tw-ring-offset-color: hsl(var(--background));
|
|
4077
4136
|
}
|
|
4078
4137
|
|
|
4138
|
+
.dy-backdrop-blur{
|
|
4139
|
+
--tw-backdrop-blur: blur(8px);
|
|
4140
|
+
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
|
|
4141
|
+
}
|
|
4142
|
+
|
|
4079
4143
|
.dy-backdrop-blur-\[1px\]{
|
|
4080
4144
|
--tw-backdrop-blur: blur(1px);
|
|
4081
4145
|
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
|
|
@@ -4950,6 +5014,10 @@
|
|
|
4950
5014
|
color: hsl(var(--primary-foreground));
|
|
4951
5015
|
}
|
|
4952
5016
|
|
|
5017
|
+
.hover\:dy-text-primary\/80:hover{
|
|
5018
|
+
color: hsl(var(--primary) / 0.8);
|
|
5019
|
+
}
|
|
5020
|
+
|
|
4953
5021
|
.hover\:dy-text-sidebar-accent-foreground:hover{
|
|
4954
5022
|
color: hsl(var(--sidebar-accent-foreground));
|
|
4955
5023
|
}
|
|
@@ -4962,6 +5030,10 @@
|
|
|
4962
5030
|
opacity: 1;
|
|
4963
5031
|
}
|
|
4964
5032
|
|
|
5033
|
+
.hover\:dy-opacity-85:hover{
|
|
5034
|
+
opacity: 0.85;
|
|
5035
|
+
}
|
|
5036
|
+
|
|
4965
5037
|
.hover\:dy-shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{
|
|
4966
5038
|
--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));
|
|
4967
5039
|
--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
|
|
@@ -6287,6 +6359,10 @@
|
|
|
6287
6359
|
display: block;
|
|
6288
6360
|
}
|
|
6289
6361
|
|
|
6362
|
+
.lg\:dy-inline{
|
|
6363
|
+
display: inline;
|
|
6364
|
+
}
|
|
6365
|
+
|
|
6290
6366
|
.lg\:dy-flex{
|
|
6291
6367
|
display: flex;
|
|
6292
6368
|
}
|
|
@@ -6311,6 +6387,10 @@
|
|
|
6311
6387
|
width: 33.333333%;
|
|
6312
6388
|
}
|
|
6313
6389
|
|
|
6390
|
+
.lg\:dy-w-auto{
|
|
6391
|
+
width: auto;
|
|
6392
|
+
}
|
|
6393
|
+
|
|
6314
6394
|
.lg\:dy-max-w-6xl{
|
|
6315
6395
|
max-width: 72rem;
|
|
6316
6396
|
}
|
|
@@ -6319,6 +6399,10 @@
|
|
|
6319
6399
|
flex: 1 1 0%;
|
|
6320
6400
|
}
|
|
6321
6401
|
|
|
6402
|
+
.lg\:dy-grid-cols-2{
|
|
6403
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
6404
|
+
}
|
|
6405
|
+
|
|
6322
6406
|
.lg\:dy-grid-cols-4{
|
|
6323
6407
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
6324
6408
|
}
|
|
@@ -6339,10 +6423,18 @@
|
|
|
6339
6423
|
align-items: flex-end;
|
|
6340
6424
|
}
|
|
6341
6425
|
|
|
6426
|
+
.lg\:dy-justify-start{
|
|
6427
|
+
justify-content: flex-start;
|
|
6428
|
+
}
|
|
6429
|
+
|
|
6342
6430
|
.lg\:dy-justify-between{
|
|
6343
6431
|
justify-content: space-between;
|
|
6344
6432
|
}
|
|
6345
6433
|
|
|
6434
|
+
.lg\:dy-gap-2{
|
|
6435
|
+
gap: 0.5rem;
|
|
6436
|
+
}
|
|
6437
|
+
|
|
6346
6438
|
.lg\:dy-gap-4{
|
|
6347
6439
|
gap: 1rem;
|
|
6348
6440
|
}
|
|
@@ -6365,6 +6457,11 @@
|
|
|
6365
6457
|
border-right-width: 0px;
|
|
6366
6458
|
}
|
|
6367
6459
|
|
|
6460
|
+
.lg\:dy-px-3{
|
|
6461
|
+
padding-left: 0.75rem;
|
|
6462
|
+
padding-right: 0.75rem;
|
|
6463
|
+
}
|
|
6464
|
+
|
|
6368
6465
|
.lg\:dy-px-4{
|
|
6369
6466
|
padding-left: 1rem;
|
|
6370
6467
|
padding-right: 1rem;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { Field as FieldSchema, Block as BlockSchema } from '@dyrected/sdk';
|
|
3
|
+
import { WorkflowAutosaveState } from '../../lib/workflow-autosave';
|
|
3
4
|
export type { FieldSchema, BlockSchema };
|
|
4
5
|
interface FormEngineProps {
|
|
5
6
|
collection: string;
|
|
6
7
|
fields: FieldSchema[];
|
|
7
8
|
defaultValues?: Record<string, unknown>;
|
|
8
|
-
onSubmit: (data: Record<string, unknown>) =>
|
|
9
|
+
onSubmit: (data: Record<string, unknown>) => Promise<unknown> | unknown;
|
|
9
10
|
onChange?: (isDirty: boolean) => void;
|
|
10
11
|
isLoading?: boolean;
|
|
11
12
|
submitLabel?: string;
|
|
@@ -30,5 +31,15 @@ interface FormEngineProps {
|
|
|
30
31
|
* (e.g. "Page"). Falls back to a capitalised collection slug.
|
|
31
32
|
*/
|
|
32
33
|
defaultTabLabel?: string;
|
|
34
|
+
autosave?: {
|
|
35
|
+
enabled: boolean;
|
|
36
|
+
delayMs?: number;
|
|
37
|
+
onSave: (data: Record<string, unknown>) => Promise<void>;
|
|
38
|
+
onStatusChange?: (state: WorkflowAutosaveState) => void;
|
|
39
|
+
};
|
|
33
40
|
}
|
|
34
|
-
export
|
|
41
|
+
export interface FormEngineHandle {
|
|
42
|
+
submitCurrentDraft: () => Promise<unknown>;
|
|
43
|
+
isDirty: () => boolean;
|
|
44
|
+
}
|
|
45
|
+
export declare const FormEngine: React.ForwardRefExoticComponent<FormEngineProps & React.RefAttributes<FormEngineHandle>>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { WorkflowMetadata } from '@dyrected/core';
|
|
2
|
+
import { PrepareWorkflowTransition } from './workflow-transition-controls';
|
|
2
3
|
interface WorkflowState {
|
|
3
4
|
name: string;
|
|
4
5
|
label: string;
|
|
@@ -26,6 +27,12 @@ interface WorkflowPanelProps {
|
|
|
26
27
|
availableTransitions?: string[];
|
|
27
28
|
};
|
|
28
29
|
workflowConfig: WorkflowConfig;
|
|
30
|
+
onCompareToLive?: () => void;
|
|
31
|
+
compareToLiveEnabled?: boolean;
|
|
32
|
+
compareToLiveReason?: string | null;
|
|
33
|
+
onSaveDraft?: () => Promise<void> | void;
|
|
34
|
+
saveDraftPending?: boolean;
|
|
35
|
+
prepareTransition?: PrepareWorkflowTransition;
|
|
29
36
|
}
|
|
30
|
-
export declare function WorkflowPanel({ collection, documentId, workflowMeta, workflowConfig, }: WorkflowPanelProps): import("react").JSX.Element;
|
|
37
|
+
export declare function WorkflowPanel({ collection, documentId, workflowMeta, workflowConfig, onCompareToLive, compareToLiveEnabled, compareToLiveReason, onSaveDraft, saveDraftPending, prepareTransition, }: WorkflowPanelProps): import("react").JSX.Element;
|
|
31
38
|
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DraftLiveComparison } from '../../lib/draft-live-compare';
|
|
2
|
+
export declare function DraftLiveCompareSheet({ open, onOpenChange, comparison, }: {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange: (open: boolean) => void;
|
|
5
|
+
comparison: DraftLiveComparison;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { WorkflowConfig, WorkflowMetadata, WorkflowTransition } from '@dyrected/core';
|
|
2
|
+
import { TransitionOptions } from '@dyrected/sdk';
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
export interface WorkflowCapableClient {
|
|
5
|
+
transition<T = unknown>(collection: string, id: string, transitionName: string, opts?: TransitionOptions): Promise<T>;
|
|
6
|
+
}
|
|
7
|
+
export type PreparedWorkflowTransitionContext = {
|
|
8
|
+
documentIds: string[];
|
|
9
|
+
documentLabels?: Record<string, string | undefined>;
|
|
10
|
+
expectedRevisions?: Record<string, number | undefined>;
|
|
11
|
+
invalidateQueryKeys?: Array<readonly unknown[]>;
|
|
12
|
+
};
|
|
13
|
+
export type PrepareWorkflowTransition = (transition: WorkflowTransition) => Promise<PreparedWorkflowTransitionContext | null>;
|
|
14
|
+
type TransitionExecutionResult = {
|
|
15
|
+
transition: WorkflowTransition;
|
|
16
|
+
successCount: number;
|
|
17
|
+
failureCount: number;
|
|
18
|
+
firstError?: Error;
|
|
19
|
+
};
|
|
20
|
+
export declare function WorkflowTransitionSplitButton({ collection, documentId, workflowConfig, workflowMeta, invalidateQueryKeys, onComplete, onPendingChange, onSaveDraft, saveDraftPending, documentLabel, className, prepareTransition, }: {
|
|
21
|
+
collection: string;
|
|
22
|
+
documentId: string;
|
|
23
|
+
workflowConfig: WorkflowConfig;
|
|
24
|
+
workflowMeta: WorkflowMetadata;
|
|
25
|
+
invalidateQueryKeys?: Array<readonly unknown[]>;
|
|
26
|
+
onComplete?: (result: TransitionExecutionResult) => void;
|
|
27
|
+
onPendingChange?: (pending: boolean) => void;
|
|
28
|
+
onSaveDraft?: () => Promise<void> | void;
|
|
29
|
+
saveDraftPending?: boolean;
|
|
30
|
+
documentLabel?: string;
|
|
31
|
+
className?: string;
|
|
32
|
+
prepareTransition?: PrepareWorkflowTransition;
|
|
33
|
+
}): React.JSX.Element;
|
|
34
|
+
export declare function WorkflowTransitionMenu({ collection, documentIds, workflowConfig, transitions, expectedRevisions, invalidateQueryKeys, onComplete, trigger, documentLabels, align, sideOffset, disabled, }: {
|
|
35
|
+
collection: string;
|
|
36
|
+
documentIds: string[];
|
|
37
|
+
workflowConfig: WorkflowConfig;
|
|
38
|
+
transitions: WorkflowTransition[];
|
|
39
|
+
expectedRevisions?: Record<string, number | undefined>;
|
|
40
|
+
invalidateQueryKeys?: Array<readonly unknown[]>;
|
|
41
|
+
onComplete?: (result: TransitionExecutionResult) => void;
|
|
42
|
+
trigger: React.ReactNode;
|
|
43
|
+
documentLabels?: Record<string, string | undefined>;
|
|
44
|
+
align?: "start" | "center" | "end";
|
|
45
|
+
sideOffset?: number;
|
|
46
|
+
disabled?: boolean;
|
|
47
|
+
}): React.JSX.Element;
|
|
48
|
+
export declare function WorkflowTransitionPanelActions({ collection, documentId, workflowConfig, workflowMeta, onSaveDraft, saveDraftPending, prepareTransition, }: {
|
|
49
|
+
collection: string;
|
|
50
|
+
documentId: string;
|
|
51
|
+
workflowConfig: WorkflowConfig;
|
|
52
|
+
workflowMeta: WorkflowMetadata;
|
|
53
|
+
onSaveDraft?: () => Promise<void> | void;
|
|
54
|
+
saveDraftPending?: boolean;
|
|
55
|
+
prepareTransition?: PrepareWorkflowTransition;
|
|
56
|
+
}): React.JSX.Element;
|
|
57
|
+
export declare function WorkflowDetailsMenuItem({ onSelect, }: {
|
|
58
|
+
onSelect: () => void;
|
|
59
|
+
}): React.JSX.Element;
|
|
60
|
+
export {};
|