@dowel-ui/react 0.4.0 → 0.5.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 +9 -5
- package/dist/components/ai-extraction-review/ai-extraction-review.d.ts +52 -0
- package/dist/components/ai-extraction-review/ai-extraction-review.d.ts.map +1 -0
- package/dist/components/ai-extraction-review/ai-extraction-review.js +249 -0
- package/dist/components/ai-extraction-review/ai-extraction-review.js.map +1 -0
- package/dist/components/ai-extraction-review/extraction-model.d.ts +94 -0
- package/dist/components/ai-extraction-review/extraction-model.d.ts.map +1 -0
- package/dist/components/ai-extraction-review/extraction-model.js +91 -0
- package/dist/components/ai-extraction-review/extraction-model.js.map +1 -0
- package/dist/components/ai-extraction-review/index.d.ts +3 -0
- package/dist/components/ai-extraction-review/index.js +3 -0
- package/dist/components/ai-extraction-review/meta.js +17 -0
- package/dist/components/ai-extraction-review/meta.js.map +1 -0
- package/dist/components/ai-suggested-value/ai-suggested-value.d.ts +72 -0
- package/dist/components/ai-suggested-value/ai-suggested-value.d.ts.map +1 -0
- package/dist/components/ai-suggested-value/ai-suggested-value.js +126 -0
- package/dist/components/ai-suggested-value/ai-suggested-value.js.map +1 -0
- package/dist/components/ai-suggested-value/index.d.ts +2 -0
- package/dist/components/ai-suggested-value/index.js +2 -0
- package/dist/components/ai-suggested-value/meta.js +17 -0
- package/dist/components/ai-suggested-value/meta.js.map +1 -0
- package/dist/components/alert/alert.d.ts +1 -1
- package/dist/components/avatar/avatar.d.ts +1 -1
- package/dist/components/badge/badge.d.ts +1 -1
- package/dist/components/button/button.d.ts +1 -1
- package/dist/components/confirm-typed/confirm-typed.d.ts +47 -0
- package/dist/components/confirm-typed/confirm-typed.d.ts.map +1 -0
- package/dist/components/confirm-typed/confirm-typed.js +106 -0
- package/dist/components/confirm-typed/confirm-typed.js.map +1 -0
- package/dist/components/confirm-typed/index.d.ts +2 -0
- package/dist/components/confirm-typed/index.js +2 -0
- package/dist/components/confirm-typed/meta.js +17 -0
- package/dist/components/confirm-typed/meta.js.map +1 -0
- package/dist/components/cron-editor/cron-editor.d.ts +36 -0
- package/dist/components/cron-editor/cron-editor.d.ts.map +1 -0
- package/dist/components/cron-editor/cron-editor.js +493 -0
- package/dist/components/cron-editor/cron-editor.js.map +1 -0
- package/dist/components/cron-editor/cron-expression.d.ts +82 -0
- package/dist/components/cron-editor/cron-expression.d.ts.map +1 -0
- package/dist/components/cron-editor/cron-expression.js +352 -0
- package/dist/components/cron-editor/cron-expression.js.map +1 -0
- package/dist/components/cron-editor/index.d.ts +3 -0
- package/dist/components/cron-editor/index.js +3 -0
- package/dist/components/cron-editor/meta.js +17 -0
- package/dist/components/cron-editor/meta.js.map +1 -0
- package/dist/components/dns-record/dns-record.d.ts +61 -0
- package/dist/components/dns-record/dns-record.d.ts.map +1 -0
- package/dist/components/dns-record/dns-record.js +227 -0
- package/dist/components/dns-record/dns-record.js.map +1 -0
- package/dist/components/dns-record/index.d.ts +2 -0
- package/dist/components/dns-record/index.js +2 -0
- package/dist/components/dns-record/meta.js +17 -0
- package/dist/components/dns-record/meta.js.map +1 -0
- package/dist/components/permission-matrix/index.d.ts +3 -0
- package/dist/components/permission-matrix/index.js +3 -0
- package/dist/components/permission-matrix/meta.js +17 -0
- package/dist/components/permission-matrix/meta.js.map +1 -0
- package/dist/components/permission-matrix/permission-matrix.d.ts +46 -0
- package/dist/components/permission-matrix/permission-matrix.d.ts.map +1 -0
- package/dist/components/permission-matrix/permission-matrix.js +199 -0
- package/dist/components/permission-matrix/permission-matrix.js.map +1 -0
- package/dist/components/permission-matrix/permission-model.d.ts +53 -0
- package/dist/components/permission-matrix/permission-model.d.ts.map +1 -0
- package/dist/components/permission-matrix/permission-model.js +64 -0
- package/dist/components/permission-matrix/permission-model.js.map +1 -0
- package/dist/components/progress/progress.d.ts +1 -1
- package/dist/components/secret-field/index.d.ts +2 -0
- package/dist/components/secret-field/index.js +2 -0
- package/dist/components/secret-field/meta.js +17 -0
- package/dist/components/secret-field/meta.js.map +1 -0
- package/dist/components/secret-field/secret-field.d.ts +58 -0
- package/dist/components/secret-field/secret-field.d.ts.map +1 -0
- package/dist/components/secret-field/secret-field.js +168 -0
- package/dist/components/secret-field/secret-field.js.map +1 -0
- package/dist/components/session-expiry/index.d.ts +2 -0
- package/dist/components/session-expiry/index.js +2 -0
- package/dist/components/session-expiry/meta.js +17 -0
- package/dist/components/session-expiry/meta.js.map +1 -0
- package/dist/components/session-expiry/session-expiry.d.ts +64 -0
- package/dist/components/session-expiry/session-expiry.d.ts.map +1 -0
- package/dist/components/session-expiry/session-expiry.js +185 -0
- package/dist/components/session-expiry/session-expiry.js.map +1 -0
- package/dist/components/shortcut-recorder/index.d.ts +3 -0
- package/dist/components/shortcut-recorder/index.js +3 -0
- package/dist/components/shortcut-recorder/meta.js +17 -0
- package/dist/components/shortcut-recorder/meta.js.map +1 -0
- package/dist/components/shortcut-recorder/shortcut-model.d.ts +67 -0
- package/dist/components/shortcut-recorder/shortcut-model.d.ts.map +1 -0
- package/dist/components/shortcut-recorder/shortcut-model.js +168 -0
- package/dist/components/shortcut-recorder/shortcut-model.js.map +1 -0
- package/dist/components/shortcut-recorder/shortcut-recorder.d.ts +47 -0
- package/dist/components/shortcut-recorder/shortcut-recorder.d.ts.map +1 -0
- package/dist/components/shortcut-recorder/shortcut-recorder.js +212 -0
- package/dist/components/shortcut-recorder/shortcut-recorder.js.map +1 -0
- package/dist/components/spinner/spinner.d.ts +1 -1
- package/dist/components/sync-status/index.d.ts +2 -0
- package/dist/components/sync-status/index.js +2 -0
- package/dist/components/sync-status/meta.js +17 -0
- package/dist/components/sync-status/meta.js.map +1 -0
- package/dist/components/sync-status/sync-status.d.ts +65 -0
- package/dist/components/sync-status/sync-status.d.ts.map +1 -0
- package/dist/components/sync-status/sync-status.js +103 -0
- package/dist/components/sync-status/sync-status.js.map +1 -0
- package/dist/components/toast/toast.d.ts +1 -1
- package/dist/index.d.ts +25 -1
- package/dist/index.js +16 -2
- package/dist/registry/components.d.ts.map +1 -1
- package/dist/registry/components.js +73 -53
- package/dist/registry/components.js.map +1 -1
- package/package.json +4 -4
- package/src/components/ai-extraction-review/ai-extraction-review.tsx +492 -0
- package/src/components/ai-extraction-review/extraction-model.ts +159 -0
- package/src/components/ai-extraction-review/index.ts +13 -0
- package/src/components/ai-extraction-review/meta.ts +24 -0
- package/src/components/ai-suggested-value/ai-suggested-value.tsx +295 -0
- package/src/components/ai-suggested-value/index.ts +6 -0
- package/src/components/ai-suggested-value/meta.ts +24 -0
- package/src/components/confirm-typed/confirm-typed.tsx +191 -0
- package/src/components/confirm-typed/index.ts +1 -0
- package/src/components/confirm-typed/meta.ts +22 -0
- package/src/components/cron-editor/cron-editor.tsx +676 -0
- package/src/components/cron-editor/cron-expression.ts +552 -0
- package/src/components/cron-editor/index.ts +23 -0
- package/src/components/cron-editor/meta.ts +23 -0
- package/src/components/dns-record/dns-record.tsx +315 -0
- package/src/components/dns-record/index.ts +7 -0
- package/src/components/dns-record/meta.ts +21 -0
- package/src/components/permission-matrix/index.ts +14 -0
- package/src/components/permission-matrix/meta.ts +23 -0
- package/src/components/permission-matrix/permission-matrix.tsx +368 -0
- package/src/components/permission-matrix/permission-model.ts +120 -0
- package/src/components/secret-field/index.ts +6 -0
- package/src/components/secret-field/meta.ts +21 -0
- package/src/components/secret-field/secret-field.tsx +284 -0
- package/src/components/session-expiry/index.ts +9 -0
- package/src/components/session-expiry/meta.ts +23 -0
- package/src/components/session-expiry/session-expiry.tsx +321 -0
- package/src/components/shortcut-recorder/index.ts +19 -0
- package/src/components/shortcut-recorder/meta.ts +22 -0
- package/src/components/shortcut-recorder/shortcut-model.ts +204 -0
- package/src/components/shortcut-recorder/shortcut-recorder.tsx +336 -0
- package/src/components/sync-status/index.ts +9 -0
- package/src/components/sync-status/meta.ts +21 -0
- package/src/components/sync-status/sync-status.tsx +217 -0
- package/src/index.ts +10 -0
- package/src/registry/components.ts +20 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, useSyncExternalStore, type ComponentPropsWithRef } from "react";
|
|
4
|
+
|
|
5
|
+
import { Button } from "@/components/button";
|
|
6
|
+
import { cn } from "@/lib/utils";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* "Offline — 3 changes will sync when you're back."
|
|
10
|
+
*
|
|
11
|
+
* Linear, Notion, Figma and Google Docs each built this, and nothing in a
|
|
12
|
+
* component library touches network state at all. It is small, and it is
|
|
13
|
+
* the difference between an app that loses work and one that says it is
|
|
14
|
+
* holding it: the moment a request fails, the reader needs to know whether
|
|
15
|
+
* to keep typing, and whether what they typed a minute ago is anywhere.
|
|
16
|
+
*
|
|
17
|
+
* Two things this gets right that the obvious version gets wrong.
|
|
18
|
+
*
|
|
19
|
+
* `navigator.onLine` is believed in one direction only. False is reliable —
|
|
20
|
+
* the interface is down. True means only that there is an interface, not
|
|
21
|
+
* that the server is reachable, so an application's own failed request is
|
|
22
|
+
* the real signal and takes precedence. The hook is exported for the rest
|
|
23
|
+
* of the app to share the same reading.
|
|
24
|
+
*
|
|
25
|
+
* Announcements are for transitions, not states. Every save flips
|
|
26
|
+
* "Saving…" to "Saved", and a live region on that text narrates the whole
|
|
27
|
+
* session. So the visible text is not live; a separate region says something
|
|
28
|
+
* only when the situation changes — went offline, came back, could not sync —
|
|
29
|
+
* which is when a reader who is typing needs to be told.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
export type SyncState = "synced" | "pending" | "syncing" | "offline" | "error";
|
|
33
|
+
|
|
34
|
+
export interface SyncInput {
|
|
35
|
+
/** From `useOnlineStatus`, or your own reading. */
|
|
36
|
+
online: boolean;
|
|
37
|
+
/** Changes waiting to be sent. */
|
|
38
|
+
pending?: number;
|
|
39
|
+
/** A send is in flight. */
|
|
40
|
+
syncing?: boolean;
|
|
41
|
+
/** The last send failed, in the reader's language. Takes precedence over `online`. */
|
|
42
|
+
error?: string | null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Which state the inputs amount to. Error beats offline beats syncing beats
|
|
47
|
+
* pending beats synced: each one is the thing the reader most needs to know
|
|
48
|
+
* given the others.
|
|
49
|
+
*/
|
|
50
|
+
export function syncState({
|
|
51
|
+
online,
|
|
52
|
+
pending = 0,
|
|
53
|
+
syncing = false,
|
|
54
|
+
error,
|
|
55
|
+
}: SyncInput): SyncState {
|
|
56
|
+
if (error) return "error";
|
|
57
|
+
if (!online) return "offline";
|
|
58
|
+
if (syncing) return "syncing";
|
|
59
|
+
if (pending > 0) return "pending";
|
|
60
|
+
return "synced";
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const changes = (n: number) => `${String(n)} ${n === 1 ? "change" : "changes"}`;
|
|
64
|
+
|
|
65
|
+
/** The state as a sentence. Used for the visible text and the announcement. */
|
|
66
|
+
export function describeSyncState(
|
|
67
|
+
state: SyncState,
|
|
68
|
+
pending = 0,
|
|
69
|
+
error?: string | null,
|
|
70
|
+
): string {
|
|
71
|
+
switch (state) {
|
|
72
|
+
case "synced":
|
|
73
|
+
return "All changes saved";
|
|
74
|
+
case "pending":
|
|
75
|
+
return `${changes(pending)} waiting to save`;
|
|
76
|
+
case "syncing":
|
|
77
|
+
return pending > 0 ? `Saving ${changes(pending)}…` : "Saving…";
|
|
78
|
+
case "offline":
|
|
79
|
+
return pending > 0
|
|
80
|
+
? `Offline. ${changes(pending)} will save when you're back online.`
|
|
81
|
+
: "Offline. Changes will save when you're back online.";
|
|
82
|
+
case "error":
|
|
83
|
+
return pending > 0
|
|
84
|
+
? `Could not save ${changes(pending)}. ${error ?? ""}`.trim()
|
|
85
|
+
: `Could not save. ${error ?? ""}`.trim();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* The browser's reading of the network, as an external store. The server
|
|
90
|
+
snapshot is "online": a page rendered on the server has no interface to
|
|
91
|
+
report, and rendering "offline" into HTML would be a lie until hydration. */
|
|
92
|
+
function subscribeOnline(callback: () => void) {
|
|
93
|
+
window.addEventListener("online", callback);
|
|
94
|
+
window.addEventListener("offline", callback);
|
|
95
|
+
return () => {
|
|
96
|
+
window.removeEventListener("online", callback);
|
|
97
|
+
window.removeEventListener("offline", callback);
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const readOnline = () => navigator.onLine;
|
|
101
|
+
const readOnlineOnServer = () => true;
|
|
102
|
+
|
|
103
|
+
/** Whether the browser believes it has a network. False is reliable; true is not. */
|
|
104
|
+
export function useOnlineStatus(): boolean {
|
|
105
|
+
return useSyncExternalStore(subscribeOnline, readOnline, readOnlineOnServer);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface SyncStatusProps
|
|
109
|
+
extends Omit<ComponentPropsWithRef<"div">, "children">, Omit<SyncInput, "online"> {
|
|
110
|
+
/** Omit to read the browser's own status. */
|
|
111
|
+
online?: boolean;
|
|
112
|
+
/** When the last save succeeded. Shown as a time, not a relative phrase, so no clock is needed. */
|
|
113
|
+
lastSyncedAt?: Date;
|
|
114
|
+
locale?: string;
|
|
115
|
+
/** Offered when a save failed. */
|
|
116
|
+
onRetry?: () => void;
|
|
117
|
+
/**
|
|
118
|
+
* Announce transitions. On by default, because going offline is the one
|
|
119
|
+
* thing a reader who is typing has to be told; syncing itself never
|
|
120
|
+
* announces, whichever way this is set.
|
|
121
|
+
*/
|
|
122
|
+
announce?: boolean;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function SyncStatus({
|
|
126
|
+
className,
|
|
127
|
+
online: onlineProp,
|
|
128
|
+
pending = 0,
|
|
129
|
+
syncing = false,
|
|
130
|
+
error,
|
|
131
|
+
lastSyncedAt,
|
|
132
|
+
locale,
|
|
133
|
+
onRetry,
|
|
134
|
+
announce = true,
|
|
135
|
+
...props
|
|
136
|
+
}: SyncStatusProps) {
|
|
137
|
+
const browserOnline = useOnlineStatus();
|
|
138
|
+
const online = onlineProp ?? browserOnline;
|
|
139
|
+
const state = syncState({ online, pending, syncing, error });
|
|
140
|
+
const text = describeSyncState(state, pending, error);
|
|
141
|
+
|
|
142
|
+
// Said once, when the situation changes. Adjusted during render so the
|
|
143
|
+
// announcement lands in the same commit as the state it describes. Syncing
|
|
144
|
+
// and pending are the ordinary churn of saving and are never announced.
|
|
145
|
+
const [seen, setSeen] = useState(state);
|
|
146
|
+
const [announcement, setAnnouncement] = useState("");
|
|
147
|
+
// A failure is over when a save lands, not when the retry starts, so the
|
|
148
|
+
// recovery is remembered across the syncing in between.
|
|
149
|
+
const [recovering, setRecovering] = useState(false);
|
|
150
|
+
if (seen !== state) {
|
|
151
|
+
const from = seen;
|
|
152
|
+
setSeen(state);
|
|
153
|
+
if (state === "offline" || state === "error") {
|
|
154
|
+
setAnnouncement(text);
|
|
155
|
+
setRecovering(false);
|
|
156
|
+
} else if (from === "offline") {
|
|
157
|
+
setAnnouncement(
|
|
158
|
+
pending > 0 ? `Back online. Saving ${changes(pending)}.` : "Back online.",
|
|
159
|
+
);
|
|
160
|
+
} else if ((from === "error" || recovering) && state === "synced") {
|
|
161
|
+
setAnnouncement("Saved.");
|
|
162
|
+
setRecovering(false);
|
|
163
|
+
} else if (from === "error") {
|
|
164
|
+
setRecovering(true);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const savedAt =
|
|
169
|
+
lastSyncedAt !== undefined
|
|
170
|
+
? new Intl.DateTimeFormat(locale, { timeStyle: "short" }).format(lastSyncedAt)
|
|
171
|
+
: null;
|
|
172
|
+
|
|
173
|
+
return (
|
|
174
|
+
<div
|
|
175
|
+
data-slot="sync-status"
|
|
176
|
+
data-state={state}
|
|
177
|
+
className={cn("flex flex-wrap items-center gap-x-2 gap-y-1 text-xs", className)}
|
|
178
|
+
{...props}
|
|
179
|
+
>
|
|
180
|
+
{/* The dot is decoration. The word is the status. */}
|
|
181
|
+
<span
|
|
182
|
+
aria-hidden="true"
|
|
183
|
+
className={cn(
|
|
184
|
+
"size-2 shrink-0 rounded-full",
|
|
185
|
+
state === "synced" && "bg-success",
|
|
186
|
+
state === "pending" && "bg-muted-foreground",
|
|
187
|
+
state === "syncing" && "animate-pulse-soft bg-info",
|
|
188
|
+
state === "offline" && "bg-warning",
|
|
189
|
+
state === "error" && "bg-destructive",
|
|
190
|
+
)}
|
|
191
|
+
/>
|
|
192
|
+
<span
|
|
193
|
+
data-slot="sync-status-text"
|
|
194
|
+
className={cn(
|
|
195
|
+
state === "offline" && "text-warning",
|
|
196
|
+
state === "error" && "text-destructive",
|
|
197
|
+
(state === "synced" || state === "pending" || state === "syncing") &&
|
|
198
|
+
"text-muted-foreground",
|
|
199
|
+
)}
|
|
200
|
+
>
|
|
201
|
+
{text}
|
|
202
|
+
{savedAt && state === "synced" ? ` at ${savedAt}` : null}
|
|
203
|
+
</span>
|
|
204
|
+
|
|
205
|
+
{state === "error" && onRetry ? (
|
|
206
|
+
<Button variant="outline" size="sm" className="h-6 px-2 text-xs" onClick={onRetry}>
|
|
207
|
+
Retry
|
|
208
|
+
</Button>
|
|
209
|
+
) : null}
|
|
210
|
+
|
|
211
|
+
{/* Present from the start, so the first transition is heard. */}
|
|
212
|
+
<span role="status" aria-live={announce ? "polite" : "off"} className="sr-only">
|
|
213
|
+
{announce ? announcement : ""}
|
|
214
|
+
</span>
|
|
215
|
+
</div>
|
|
216
|
+
);
|
|
217
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -8,12 +8,14 @@ export * from "./components/ai-agent-status";
|
|
|
8
8
|
export * from "./components/ai-approval-request";
|
|
9
9
|
export * from "./components/ai-conversation";
|
|
10
10
|
export * from "./components/ai-disclosure";
|
|
11
|
+
export * from "./components/ai-extraction-review";
|
|
11
12
|
export * from "./components/ai-message";
|
|
12
13
|
export * from "./components/ai-model-selector";
|
|
13
14
|
export * from "./components/ai-prompt-input";
|
|
14
15
|
export * from "./components/ai-reasoning";
|
|
15
16
|
export * from "./components/ai-response";
|
|
16
17
|
export * from "./components/ai-sources";
|
|
18
|
+
export * from "./components/ai-suggested-value";
|
|
17
19
|
export * from "./components/ai-token-usage";
|
|
18
20
|
export * from "./components/ai-tool";
|
|
19
21
|
export * from "./components/alert";
|
|
@@ -26,10 +28,13 @@ export * from "./components/checkbox";
|
|
|
26
28
|
export * from "./components/code-block";
|
|
27
29
|
export * from "./components/combobox";
|
|
28
30
|
export * from "./components/command";
|
|
31
|
+
export * from "./components/confirm-typed";
|
|
32
|
+
export * from "./components/cron-editor";
|
|
29
33
|
export * from "./components/data-table";
|
|
30
34
|
export * from "./components/date-picker";
|
|
31
35
|
export * from "./components/dialog";
|
|
32
36
|
export * from "./components/diff-viewer";
|
|
37
|
+
export * from "./components/dns-record";
|
|
33
38
|
export * from "./components/drawer";
|
|
34
39
|
export * from "./components/dropdown-menu";
|
|
35
40
|
export * from "./components/empty-state";
|
|
@@ -42,16 +47,21 @@ export * from "./components/meter";
|
|
|
42
47
|
export * from "./components/metric-delta";
|
|
43
48
|
export * from "./components/record-diff";
|
|
44
49
|
export * from "./components/pagination";
|
|
50
|
+
export * from "./components/permission-matrix";
|
|
45
51
|
export * from "./components/popover";
|
|
46
52
|
export * from "./components/progress";
|
|
47
53
|
export * from "./components/radio-group";
|
|
54
|
+
export * from "./components/secret-field";
|
|
48
55
|
export * from "./components/select";
|
|
49
56
|
export * from "./components/separator";
|
|
57
|
+
export * from "./components/session-expiry";
|
|
50
58
|
export * from "./components/sheet";
|
|
59
|
+
export * from "./components/shortcut-recorder";
|
|
51
60
|
export * from "./components/skeleton";
|
|
52
61
|
export * from "./components/slider";
|
|
53
62
|
export * from "./components/spinner";
|
|
54
63
|
export * from "./components/switch";
|
|
64
|
+
export * from "./components/sync-status";
|
|
55
65
|
export * from "./components/table";
|
|
56
66
|
export * from "./components/tabs";
|
|
57
67
|
export * from "./components/tags-input";
|
|
@@ -8,6 +8,7 @@ import { meta as aiAgentStatusMeta } from "@/components/ai-agent-status/meta";
|
|
|
8
8
|
import { meta as aiApprovalRequestMeta } from "@/components/ai-approval-request/meta";
|
|
9
9
|
import { meta as aiConversationMeta } from "@/components/ai-conversation/meta";
|
|
10
10
|
import { meta as aiDisclosureMeta } from "@/components/ai-disclosure/meta";
|
|
11
|
+
import { meta as aiExtractionReviewMeta } from "@/components/ai-extraction-review/meta";
|
|
11
12
|
import { meta as aiInlineCompletionMeta } from "@/components/ai-inline-completion/meta";
|
|
12
13
|
import { meta as aiMessageMeta } from "@/components/ai-message/meta";
|
|
13
14
|
import { meta as aiModelSelectorMeta } from "@/components/ai-model-selector/meta";
|
|
@@ -16,6 +17,7 @@ import { meta as aiReasoningMeta } from "@/components/ai-reasoning/meta";
|
|
|
16
17
|
import { meta as aiResponseMeta } from "@/components/ai-response/meta";
|
|
17
18
|
import { meta as aiSourcesMeta } from "@/components/ai-sources/meta";
|
|
18
19
|
import { meta as aiStructuredOutputMeta } from "@/components/ai-structured-output/meta";
|
|
20
|
+
import { meta as aiSuggestedValueMeta } from "@/components/ai-suggested-value/meta";
|
|
19
21
|
import { meta as aiTokenUsageMeta } from "@/components/ai-token-usage/meta";
|
|
20
22
|
import { meta as aiToolMeta } from "@/components/ai-tool/meta";
|
|
21
23
|
import { meta as alertMeta } from "@/components/alert/meta";
|
|
@@ -28,10 +30,13 @@ import { meta as checkboxMeta } from "@/components/checkbox/meta";
|
|
|
28
30
|
import { meta as codeBlockMeta } from "@/components/code-block/meta";
|
|
29
31
|
import { meta as comboboxMeta } from "@/components/combobox/meta";
|
|
30
32
|
import { meta as commandMeta } from "@/components/command/meta";
|
|
33
|
+
import { meta as confirmTypedMeta } from "@/components/confirm-typed/meta";
|
|
34
|
+
import { meta as cronEditorMeta } from "@/components/cron-editor/meta";
|
|
31
35
|
import { meta as dataTableMeta } from "@/components/data-table/meta";
|
|
32
36
|
import { meta as datePickerMeta } from "@/components/date-picker/meta";
|
|
33
37
|
import { meta as dialogMeta } from "@/components/dialog/meta";
|
|
34
38
|
import { meta as diffViewerMeta } from "@/components/diff-viewer/meta";
|
|
39
|
+
import { meta as dnsRecordMeta } from "@/components/dns-record/meta";
|
|
35
40
|
import { meta as drawerMeta } from "@/components/drawer/meta";
|
|
36
41
|
import { meta as dropdownMenuMeta } from "@/components/dropdown-menu/meta";
|
|
37
42
|
import { meta as emptyStateMeta } from "@/components/empty-state/meta";
|
|
@@ -43,17 +48,22 @@ import { meta as logViewerMeta } from "@/components/log-viewer/meta";
|
|
|
43
48
|
import { meta as meterMeta } from "@/components/meter/meta";
|
|
44
49
|
import { meta as metricDeltaMeta } from "@/components/metric-delta/meta";
|
|
45
50
|
import { meta as paginationMeta } from "@/components/pagination/meta";
|
|
51
|
+
import { meta as permissionMatrixMeta } from "@/components/permission-matrix/meta";
|
|
46
52
|
import { meta as popoverMeta } from "@/components/popover/meta";
|
|
47
53
|
import { meta as progressMeta } from "@/components/progress/meta";
|
|
48
54
|
import { meta as radioGroupMeta } from "@/components/radio-group/meta";
|
|
49
55
|
import { meta as recordDiffMeta } from "@/components/record-diff/meta";
|
|
56
|
+
import { meta as secretFieldMeta } from "@/components/secret-field/meta";
|
|
50
57
|
import { meta as selectMeta } from "@/components/select/meta";
|
|
51
58
|
import { meta as separatorMeta } from "@/components/separator/meta";
|
|
59
|
+
import { meta as sessionExpiryMeta } from "@/components/session-expiry/meta";
|
|
52
60
|
import { meta as sheetMeta } from "@/components/sheet/meta";
|
|
61
|
+
import { meta as shortcutRecorderMeta } from "@/components/shortcut-recorder/meta";
|
|
53
62
|
import { meta as skeletonMeta } from "@/components/skeleton/meta";
|
|
54
63
|
import { meta as sliderMeta } from "@/components/slider/meta";
|
|
55
64
|
import { meta as spinnerMeta } from "@/components/spinner/meta";
|
|
56
65
|
import { meta as switchMeta } from "@/components/switch/meta";
|
|
66
|
+
import { meta as syncStatusMeta } from "@/components/sync-status/meta";
|
|
57
67
|
import { meta as tableMeta } from "@/components/table/meta";
|
|
58
68
|
import { meta as tabsMeta } from "@/components/tabs/meta";
|
|
59
69
|
import { meta as tagsInputMeta } from "@/components/tags-input/meta";
|
|
@@ -81,6 +91,7 @@ export const componentMetas: ComponentMeta[] = [
|
|
|
81
91
|
aiApprovalRequestMeta,
|
|
82
92
|
aiConversationMeta,
|
|
83
93
|
aiDisclosureMeta,
|
|
94
|
+
aiExtractionReviewMeta,
|
|
84
95
|
aiInlineCompletionMeta,
|
|
85
96
|
aiMessageMeta,
|
|
86
97
|
aiModelSelectorMeta,
|
|
@@ -89,6 +100,7 @@ export const componentMetas: ComponentMeta[] = [
|
|
|
89
100
|
aiResponseMeta,
|
|
90
101
|
aiSourcesMeta,
|
|
91
102
|
aiStructuredOutputMeta,
|
|
103
|
+
aiSuggestedValueMeta,
|
|
92
104
|
aiTokenUsageMeta,
|
|
93
105
|
aiToolMeta,
|
|
94
106
|
alertMeta,
|
|
@@ -101,10 +113,13 @@ export const componentMetas: ComponentMeta[] = [
|
|
|
101
113
|
codeBlockMeta,
|
|
102
114
|
comboboxMeta,
|
|
103
115
|
commandMeta,
|
|
116
|
+
confirmTypedMeta,
|
|
117
|
+
cronEditorMeta,
|
|
104
118
|
dataTableMeta,
|
|
105
119
|
datePickerMeta,
|
|
106
120
|
dialogMeta,
|
|
107
121
|
diffViewerMeta,
|
|
122
|
+
dnsRecordMeta,
|
|
108
123
|
drawerMeta,
|
|
109
124
|
dropdownMenuMeta,
|
|
110
125
|
emptyStateMeta,
|
|
@@ -116,17 +131,22 @@ export const componentMetas: ComponentMeta[] = [
|
|
|
116
131
|
meterMeta,
|
|
117
132
|
metricDeltaMeta,
|
|
118
133
|
paginationMeta,
|
|
134
|
+
permissionMatrixMeta,
|
|
119
135
|
popoverMeta,
|
|
120
136
|
progressMeta,
|
|
121
137
|
radioGroupMeta,
|
|
122
138
|
recordDiffMeta,
|
|
139
|
+
secretFieldMeta,
|
|
123
140
|
selectMeta,
|
|
124
141
|
separatorMeta,
|
|
142
|
+
sessionExpiryMeta,
|
|
125
143
|
sheetMeta,
|
|
144
|
+
shortcutRecorderMeta,
|
|
126
145
|
skeletonMeta,
|
|
127
146
|
sliderMeta,
|
|
128
147
|
spinnerMeta,
|
|
129
148
|
switchMeta,
|
|
149
|
+
syncStatusMeta,
|
|
130
150
|
tableMeta,
|
|
131
151
|
tabsMeta,
|
|
132
152
|
tagsInputMeta,
|