@designfever/web-review-kit 0.1.0
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/README.md +241 -0
- package/dist/chunk-U5K2YGGL.js +3486 -0
- package/dist/chunk-U5K2YGGL.js.map +1 -0
- package/dist/index.cjs +3524 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +26 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/react-shell.cjs +8841 -0
- package/dist/react-shell.cjs.map +1 -0
- package/dist/react-shell.d.cts +156 -0
- package/dist/react-shell.d.ts +156 -0
- package/dist/react-shell.js +5844 -0
- package/dist/react-shell.js.map +1 -0
- package/dist/types-D_mNjOHx.d.cts +183 -0
- package/dist/types-D_mNjOHx.d.ts +183 -0
- package/docs/README.md +37 -0
- package/docs/adapter-handoff.md +146 -0
- package/docs/concept.md +102 -0
- package/docs/df-sheet-adapter.md +336 -0
- package/docs/df-sheet-next.md +222 -0
- package/docs/initial-plan.md +226 -0
- package/docs/installation.md +222 -0
- package/docs/package-split-checkpoint.md +79 -0
- package/docs/presence-handoff.md +138 -0
- package/docs/review-feedback-2026-06-20.md +267 -0
- package/docs/smoke-baseline-2026-06-20.md +41 -0
- package/docs/stabilize-ui-work-guide.md +243 -0
- package/docs/supabase-presence.md +198 -0
- package/docs/supabase-review-items.md +365 -0
- package/docs/supabase.md +205 -0
- package/package.json +61 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { f as ReviewItemScope, s as ReviewSource, o as ReviewMode, W as WebReviewKitAdapter, a as ReviewItemStatus, e as ReviewItem, q as ReviewRulerConfig } from './types-D_mNjOHx.cjs';
|
|
3
|
+
|
|
4
|
+
type ReviewShellViewportKind = Exclude<ReviewItemScope, 'dom'>;
|
|
5
|
+
type ReviewShellViewportPreset = {
|
|
6
|
+
label: string;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
kind?: ReviewShellViewportKind;
|
|
10
|
+
designWidth?: number;
|
|
11
|
+
designHeight?: number;
|
|
12
|
+
};
|
|
13
|
+
type ReviewShellPage = {
|
|
14
|
+
href: string;
|
|
15
|
+
};
|
|
16
|
+
type ReviewShellGlobEntries = Record<string, unknown>;
|
|
17
|
+
type ReviewShellStatusOption = {
|
|
18
|
+
value: ReviewItemStatus;
|
|
19
|
+
label: string;
|
|
20
|
+
};
|
|
21
|
+
type ReviewShellUpdateStatusInput = {
|
|
22
|
+
id: string;
|
|
23
|
+
item: ReviewItem;
|
|
24
|
+
status: ReviewItemStatus;
|
|
25
|
+
statusOption: ReviewShellStatusOption;
|
|
26
|
+
statusIndex: number;
|
|
27
|
+
};
|
|
28
|
+
type ReviewShellSubmissionPatch = Partial<Pick<ReviewItem, 'externalIssueId' | 'externalIssueUrl' | 'submittedAt' | 'submitStatus' | 'submitError'>>;
|
|
29
|
+
type ReviewShellSyncSubmissionInput = {
|
|
30
|
+
id: string;
|
|
31
|
+
item: ReviewItem;
|
|
32
|
+
patch: ReviewShellSubmissionPatch;
|
|
33
|
+
};
|
|
34
|
+
type ReviewShellAdapter = {
|
|
35
|
+
label: ReviewSource;
|
|
36
|
+
pageId?: string;
|
|
37
|
+
get: WebReviewKitAdapter['get'];
|
|
38
|
+
list: WebReviewKitAdapter['list'];
|
|
39
|
+
create: WebReviewKitAdapter['create'];
|
|
40
|
+
statusOptions?: readonly ReviewShellStatusOption[];
|
|
41
|
+
updateStatus?: (input: ReviewShellUpdateStatusInput) => Promise<ReviewItem>;
|
|
42
|
+
syncSubmission?: (input: ReviewShellSyncSubmissionInput) => Promise<ReviewItem>;
|
|
43
|
+
remove?: WebReviewKitAdapter['remove'];
|
|
44
|
+
};
|
|
45
|
+
type ReviewShellAdapterMap = {
|
|
46
|
+
local: WebReviewKitAdapter;
|
|
47
|
+
remote?: WebReviewKitAdapter | null;
|
|
48
|
+
remotePageId?: string;
|
|
49
|
+
};
|
|
50
|
+
type ReviewShellAdapters = ReviewShellAdapterMap | ReviewShellAdapter[];
|
|
51
|
+
type ReviewPresenceStatus = 'idle' | 'reviewing' | 'editing';
|
|
52
|
+
type ReviewPresenceViewport = {
|
|
53
|
+
label: string;
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
kind: ReviewShellViewportKind;
|
|
57
|
+
};
|
|
58
|
+
type ReviewPresenceState = {
|
|
59
|
+
projectId: string;
|
|
60
|
+
sessionId: string;
|
|
61
|
+
userId: string;
|
|
62
|
+
displayName: string;
|
|
63
|
+
color: string;
|
|
64
|
+
routeKey: string;
|
|
65
|
+
target: string;
|
|
66
|
+
source: ReviewSource;
|
|
67
|
+
viewport: ReviewPresenceViewport;
|
|
68
|
+
mode: ReviewMode;
|
|
69
|
+
selectedItemId?: string | null;
|
|
70
|
+
selectedReviewNumber?: number | null;
|
|
71
|
+
status: ReviewPresenceStatus;
|
|
72
|
+
updatedAt: string;
|
|
73
|
+
};
|
|
74
|
+
type ReviewPresenceUser = ReviewPresenceState;
|
|
75
|
+
type ReviewPresenceContext = {
|
|
76
|
+
projectId: string;
|
|
77
|
+
sessionId: string;
|
|
78
|
+
userId: string;
|
|
79
|
+
displayName: string;
|
|
80
|
+
color: string;
|
|
81
|
+
initialState: ReviewPresenceState;
|
|
82
|
+
};
|
|
83
|
+
type ReviewPresenceSession = {
|
|
84
|
+
update: (state: Partial<ReviewPresenceState>) => void | Promise<void>;
|
|
85
|
+
subscribe: (callback: (users: ReviewPresenceUser[]) => void) => () => void;
|
|
86
|
+
disconnect: () => void | Promise<void>;
|
|
87
|
+
};
|
|
88
|
+
type ReviewPresenceAdapter = {
|
|
89
|
+
label: string;
|
|
90
|
+
connect: (context: ReviewPresenceContext) => Promise<ReviewPresenceSession> | ReviewPresenceSession;
|
|
91
|
+
};
|
|
92
|
+
interface CreateReviewPagesOptions {
|
|
93
|
+
root?: string;
|
|
94
|
+
exclude?: (href: string) => boolean;
|
|
95
|
+
}
|
|
96
|
+
interface ReviewShellProps {
|
|
97
|
+
projectId: string;
|
|
98
|
+
pages: ReviewShellPage[];
|
|
99
|
+
adapters: ReviewShellAdapters;
|
|
100
|
+
presets?: ReviewShellViewportPreset[];
|
|
101
|
+
ruler?: ReviewRulerConfig;
|
|
102
|
+
initialPrompt?: string;
|
|
103
|
+
reviewPathPrefix?: string;
|
|
104
|
+
presence?: ReviewPresenceAdapter;
|
|
105
|
+
}
|
|
106
|
+
interface ReviewShellMountOptions extends ReviewShellProps {
|
|
107
|
+
rootId?: string;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
declare const createReviewPagesFromGlob: (entries: ReviewShellGlobEntries, options?: CreateReviewPagesOptions) => ReviewShellPage[];
|
|
111
|
+
|
|
112
|
+
declare const DEFAULT_REVIEW_VIEWPORT_PRESETS: ReviewShellViewportPreset[];
|
|
113
|
+
|
|
114
|
+
type LocalPresenceAdapterOptions = {
|
|
115
|
+
channelName?: string;
|
|
116
|
+
heartbeatMs?: number;
|
|
117
|
+
staleMs?: number;
|
|
118
|
+
};
|
|
119
|
+
declare const createLocalPresenceAdapter: (options?: LocalPresenceAdapterOptions) => ReviewPresenceAdapter;
|
|
120
|
+
declare const createFallbackPresenceAdapter: (primaryAdapter: ReviewPresenceAdapter, fallbackAdapter: ReviewPresenceAdapter) => ReviewPresenceAdapter;
|
|
121
|
+
|
|
122
|
+
type SupabaseRealtimeStatus = 'SUBSCRIBED' | 'CHANNEL_ERROR' | 'TIMED_OUT' | 'CLOSED' | string;
|
|
123
|
+
type SupabaseRealtimeChannel = {
|
|
124
|
+
topic?: string;
|
|
125
|
+
on: (type: 'presence', filter: {
|
|
126
|
+
event: 'sync' | 'join' | 'leave';
|
|
127
|
+
}, callback: () => void) => SupabaseRealtimeChannel;
|
|
128
|
+
subscribe: (callback: (status: SupabaseRealtimeStatus, error?: Error) => void) => SupabaseRealtimeChannel;
|
|
129
|
+
track: (payload: ReviewPresenceUser) => Promise<unknown>;
|
|
130
|
+
untrack: () => Promise<unknown>;
|
|
131
|
+
presenceState: () => Record<string, unknown[]>;
|
|
132
|
+
teardown?: () => void;
|
|
133
|
+
};
|
|
134
|
+
type SupabasePresenceClient = {
|
|
135
|
+
channel: (topic: string, options?: {
|
|
136
|
+
config?: {
|
|
137
|
+
private?: boolean;
|
|
138
|
+
presence?: {
|
|
139
|
+
key?: string;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
}) => SupabaseRealtimeChannel;
|
|
143
|
+
getChannels?: () => SupabaseRealtimeChannel[];
|
|
144
|
+
removeChannel: (channel: SupabaseRealtimeChannel) => Promise<unknown>;
|
|
145
|
+
};
|
|
146
|
+
type SupabasePresenceAdapterOptions = {
|
|
147
|
+
client: SupabasePresenceClient;
|
|
148
|
+
channelPrefix?: string;
|
|
149
|
+
private?: boolean;
|
|
150
|
+
};
|
|
151
|
+
declare const createSupabasePresenceAdapter: ({ client, channelPrefix, private: isPrivate, }: SupabasePresenceAdapterOptions) => ReviewPresenceAdapter;
|
|
152
|
+
|
|
153
|
+
declare const ReviewShell: ({ projectId, pages, adapters, presets, ruler, initialPrompt, reviewPathPrefix, presence }: ReviewShellProps) => React.JSX.Element;
|
|
154
|
+
declare const mountReviewShell: (options: ReviewShellMountOptions) => void;
|
|
155
|
+
|
|
156
|
+
export { type CreateReviewPagesOptions, DEFAULT_REVIEW_VIEWPORT_PRESETS, type LocalPresenceAdapterOptions, type ReviewPresenceAdapter, type ReviewPresenceContext, type ReviewPresenceSession, type ReviewPresenceState, type ReviewPresenceStatus, type ReviewPresenceUser, ReviewShell, type ReviewShellAdapter, type ReviewShellAdapters, type ReviewShellGlobEntries, type ReviewShellMountOptions, type ReviewShellPage, type ReviewShellProps, type ReviewShellStatusOption, type ReviewShellViewportKind, type ReviewShellViewportPreset, type SupabasePresenceAdapterOptions, type SupabasePresenceClient, createFallbackPresenceAdapter, createLocalPresenceAdapter, createReviewPagesFromGlob, createSupabasePresenceAdapter, mountReviewShell };
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { f as ReviewItemScope, s as ReviewSource, o as ReviewMode, W as WebReviewKitAdapter, a as ReviewItemStatus, e as ReviewItem, q as ReviewRulerConfig } from './types-D_mNjOHx.js';
|
|
3
|
+
|
|
4
|
+
type ReviewShellViewportKind = Exclude<ReviewItemScope, 'dom'>;
|
|
5
|
+
type ReviewShellViewportPreset = {
|
|
6
|
+
label: string;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
kind?: ReviewShellViewportKind;
|
|
10
|
+
designWidth?: number;
|
|
11
|
+
designHeight?: number;
|
|
12
|
+
};
|
|
13
|
+
type ReviewShellPage = {
|
|
14
|
+
href: string;
|
|
15
|
+
};
|
|
16
|
+
type ReviewShellGlobEntries = Record<string, unknown>;
|
|
17
|
+
type ReviewShellStatusOption = {
|
|
18
|
+
value: ReviewItemStatus;
|
|
19
|
+
label: string;
|
|
20
|
+
};
|
|
21
|
+
type ReviewShellUpdateStatusInput = {
|
|
22
|
+
id: string;
|
|
23
|
+
item: ReviewItem;
|
|
24
|
+
status: ReviewItemStatus;
|
|
25
|
+
statusOption: ReviewShellStatusOption;
|
|
26
|
+
statusIndex: number;
|
|
27
|
+
};
|
|
28
|
+
type ReviewShellSubmissionPatch = Partial<Pick<ReviewItem, 'externalIssueId' | 'externalIssueUrl' | 'submittedAt' | 'submitStatus' | 'submitError'>>;
|
|
29
|
+
type ReviewShellSyncSubmissionInput = {
|
|
30
|
+
id: string;
|
|
31
|
+
item: ReviewItem;
|
|
32
|
+
patch: ReviewShellSubmissionPatch;
|
|
33
|
+
};
|
|
34
|
+
type ReviewShellAdapter = {
|
|
35
|
+
label: ReviewSource;
|
|
36
|
+
pageId?: string;
|
|
37
|
+
get: WebReviewKitAdapter['get'];
|
|
38
|
+
list: WebReviewKitAdapter['list'];
|
|
39
|
+
create: WebReviewKitAdapter['create'];
|
|
40
|
+
statusOptions?: readonly ReviewShellStatusOption[];
|
|
41
|
+
updateStatus?: (input: ReviewShellUpdateStatusInput) => Promise<ReviewItem>;
|
|
42
|
+
syncSubmission?: (input: ReviewShellSyncSubmissionInput) => Promise<ReviewItem>;
|
|
43
|
+
remove?: WebReviewKitAdapter['remove'];
|
|
44
|
+
};
|
|
45
|
+
type ReviewShellAdapterMap = {
|
|
46
|
+
local: WebReviewKitAdapter;
|
|
47
|
+
remote?: WebReviewKitAdapter | null;
|
|
48
|
+
remotePageId?: string;
|
|
49
|
+
};
|
|
50
|
+
type ReviewShellAdapters = ReviewShellAdapterMap | ReviewShellAdapter[];
|
|
51
|
+
type ReviewPresenceStatus = 'idle' | 'reviewing' | 'editing';
|
|
52
|
+
type ReviewPresenceViewport = {
|
|
53
|
+
label: string;
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
kind: ReviewShellViewportKind;
|
|
57
|
+
};
|
|
58
|
+
type ReviewPresenceState = {
|
|
59
|
+
projectId: string;
|
|
60
|
+
sessionId: string;
|
|
61
|
+
userId: string;
|
|
62
|
+
displayName: string;
|
|
63
|
+
color: string;
|
|
64
|
+
routeKey: string;
|
|
65
|
+
target: string;
|
|
66
|
+
source: ReviewSource;
|
|
67
|
+
viewport: ReviewPresenceViewport;
|
|
68
|
+
mode: ReviewMode;
|
|
69
|
+
selectedItemId?: string | null;
|
|
70
|
+
selectedReviewNumber?: number | null;
|
|
71
|
+
status: ReviewPresenceStatus;
|
|
72
|
+
updatedAt: string;
|
|
73
|
+
};
|
|
74
|
+
type ReviewPresenceUser = ReviewPresenceState;
|
|
75
|
+
type ReviewPresenceContext = {
|
|
76
|
+
projectId: string;
|
|
77
|
+
sessionId: string;
|
|
78
|
+
userId: string;
|
|
79
|
+
displayName: string;
|
|
80
|
+
color: string;
|
|
81
|
+
initialState: ReviewPresenceState;
|
|
82
|
+
};
|
|
83
|
+
type ReviewPresenceSession = {
|
|
84
|
+
update: (state: Partial<ReviewPresenceState>) => void | Promise<void>;
|
|
85
|
+
subscribe: (callback: (users: ReviewPresenceUser[]) => void) => () => void;
|
|
86
|
+
disconnect: () => void | Promise<void>;
|
|
87
|
+
};
|
|
88
|
+
type ReviewPresenceAdapter = {
|
|
89
|
+
label: string;
|
|
90
|
+
connect: (context: ReviewPresenceContext) => Promise<ReviewPresenceSession> | ReviewPresenceSession;
|
|
91
|
+
};
|
|
92
|
+
interface CreateReviewPagesOptions {
|
|
93
|
+
root?: string;
|
|
94
|
+
exclude?: (href: string) => boolean;
|
|
95
|
+
}
|
|
96
|
+
interface ReviewShellProps {
|
|
97
|
+
projectId: string;
|
|
98
|
+
pages: ReviewShellPage[];
|
|
99
|
+
adapters: ReviewShellAdapters;
|
|
100
|
+
presets?: ReviewShellViewportPreset[];
|
|
101
|
+
ruler?: ReviewRulerConfig;
|
|
102
|
+
initialPrompt?: string;
|
|
103
|
+
reviewPathPrefix?: string;
|
|
104
|
+
presence?: ReviewPresenceAdapter;
|
|
105
|
+
}
|
|
106
|
+
interface ReviewShellMountOptions extends ReviewShellProps {
|
|
107
|
+
rootId?: string;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
declare const createReviewPagesFromGlob: (entries: ReviewShellGlobEntries, options?: CreateReviewPagesOptions) => ReviewShellPage[];
|
|
111
|
+
|
|
112
|
+
declare const DEFAULT_REVIEW_VIEWPORT_PRESETS: ReviewShellViewportPreset[];
|
|
113
|
+
|
|
114
|
+
type LocalPresenceAdapterOptions = {
|
|
115
|
+
channelName?: string;
|
|
116
|
+
heartbeatMs?: number;
|
|
117
|
+
staleMs?: number;
|
|
118
|
+
};
|
|
119
|
+
declare const createLocalPresenceAdapter: (options?: LocalPresenceAdapterOptions) => ReviewPresenceAdapter;
|
|
120
|
+
declare const createFallbackPresenceAdapter: (primaryAdapter: ReviewPresenceAdapter, fallbackAdapter: ReviewPresenceAdapter) => ReviewPresenceAdapter;
|
|
121
|
+
|
|
122
|
+
type SupabaseRealtimeStatus = 'SUBSCRIBED' | 'CHANNEL_ERROR' | 'TIMED_OUT' | 'CLOSED' | string;
|
|
123
|
+
type SupabaseRealtimeChannel = {
|
|
124
|
+
topic?: string;
|
|
125
|
+
on: (type: 'presence', filter: {
|
|
126
|
+
event: 'sync' | 'join' | 'leave';
|
|
127
|
+
}, callback: () => void) => SupabaseRealtimeChannel;
|
|
128
|
+
subscribe: (callback: (status: SupabaseRealtimeStatus, error?: Error) => void) => SupabaseRealtimeChannel;
|
|
129
|
+
track: (payload: ReviewPresenceUser) => Promise<unknown>;
|
|
130
|
+
untrack: () => Promise<unknown>;
|
|
131
|
+
presenceState: () => Record<string, unknown[]>;
|
|
132
|
+
teardown?: () => void;
|
|
133
|
+
};
|
|
134
|
+
type SupabasePresenceClient = {
|
|
135
|
+
channel: (topic: string, options?: {
|
|
136
|
+
config?: {
|
|
137
|
+
private?: boolean;
|
|
138
|
+
presence?: {
|
|
139
|
+
key?: string;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
}) => SupabaseRealtimeChannel;
|
|
143
|
+
getChannels?: () => SupabaseRealtimeChannel[];
|
|
144
|
+
removeChannel: (channel: SupabaseRealtimeChannel) => Promise<unknown>;
|
|
145
|
+
};
|
|
146
|
+
type SupabasePresenceAdapterOptions = {
|
|
147
|
+
client: SupabasePresenceClient;
|
|
148
|
+
channelPrefix?: string;
|
|
149
|
+
private?: boolean;
|
|
150
|
+
};
|
|
151
|
+
declare const createSupabasePresenceAdapter: ({ client, channelPrefix, private: isPrivate, }: SupabasePresenceAdapterOptions) => ReviewPresenceAdapter;
|
|
152
|
+
|
|
153
|
+
declare const ReviewShell: ({ projectId, pages, adapters, presets, ruler, initialPrompt, reviewPathPrefix, presence }: ReviewShellProps) => React.JSX.Element;
|
|
154
|
+
declare const mountReviewShell: (options: ReviewShellMountOptions) => void;
|
|
155
|
+
|
|
156
|
+
export { type CreateReviewPagesOptions, DEFAULT_REVIEW_VIEWPORT_PRESETS, type LocalPresenceAdapterOptions, type ReviewPresenceAdapter, type ReviewPresenceContext, type ReviewPresenceSession, type ReviewPresenceState, type ReviewPresenceStatus, type ReviewPresenceUser, ReviewShell, type ReviewShellAdapter, type ReviewShellAdapters, type ReviewShellGlobEntries, type ReviewShellMountOptions, type ReviewShellPage, type ReviewShellProps, type ReviewShellStatusOption, type ReviewShellViewportKind, type ReviewShellViewportPreset, type SupabasePresenceAdapterOptions, type SupabasePresenceClient, createFallbackPresenceAdapter, createLocalPresenceAdapter, createReviewPagesFromGlob, createSupabasePresenceAdapter, mountReviewShell };
|