@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 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>) => void;
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 declare function FormEngine(props: FormEngineProps): React.JSX.Element;
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 {};