@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.
Files changed (146) hide show
  1. package/README.md +9 -5
  2. package/dist/components/ai-extraction-review/ai-extraction-review.d.ts +52 -0
  3. package/dist/components/ai-extraction-review/ai-extraction-review.d.ts.map +1 -0
  4. package/dist/components/ai-extraction-review/ai-extraction-review.js +249 -0
  5. package/dist/components/ai-extraction-review/ai-extraction-review.js.map +1 -0
  6. package/dist/components/ai-extraction-review/extraction-model.d.ts +94 -0
  7. package/dist/components/ai-extraction-review/extraction-model.d.ts.map +1 -0
  8. package/dist/components/ai-extraction-review/extraction-model.js +91 -0
  9. package/dist/components/ai-extraction-review/extraction-model.js.map +1 -0
  10. package/dist/components/ai-extraction-review/index.d.ts +3 -0
  11. package/dist/components/ai-extraction-review/index.js +3 -0
  12. package/dist/components/ai-extraction-review/meta.js +17 -0
  13. package/dist/components/ai-extraction-review/meta.js.map +1 -0
  14. package/dist/components/ai-suggested-value/ai-suggested-value.d.ts +72 -0
  15. package/dist/components/ai-suggested-value/ai-suggested-value.d.ts.map +1 -0
  16. package/dist/components/ai-suggested-value/ai-suggested-value.js +126 -0
  17. package/dist/components/ai-suggested-value/ai-suggested-value.js.map +1 -0
  18. package/dist/components/ai-suggested-value/index.d.ts +2 -0
  19. package/dist/components/ai-suggested-value/index.js +2 -0
  20. package/dist/components/ai-suggested-value/meta.js +17 -0
  21. package/dist/components/ai-suggested-value/meta.js.map +1 -0
  22. package/dist/components/alert/alert.d.ts +1 -1
  23. package/dist/components/avatar/avatar.d.ts +1 -1
  24. package/dist/components/badge/badge.d.ts +1 -1
  25. package/dist/components/button/button.d.ts +1 -1
  26. package/dist/components/confirm-typed/confirm-typed.d.ts +47 -0
  27. package/dist/components/confirm-typed/confirm-typed.d.ts.map +1 -0
  28. package/dist/components/confirm-typed/confirm-typed.js +106 -0
  29. package/dist/components/confirm-typed/confirm-typed.js.map +1 -0
  30. package/dist/components/confirm-typed/index.d.ts +2 -0
  31. package/dist/components/confirm-typed/index.js +2 -0
  32. package/dist/components/confirm-typed/meta.js +17 -0
  33. package/dist/components/confirm-typed/meta.js.map +1 -0
  34. package/dist/components/cron-editor/cron-editor.d.ts +36 -0
  35. package/dist/components/cron-editor/cron-editor.d.ts.map +1 -0
  36. package/dist/components/cron-editor/cron-editor.js +493 -0
  37. package/dist/components/cron-editor/cron-editor.js.map +1 -0
  38. package/dist/components/cron-editor/cron-expression.d.ts +82 -0
  39. package/dist/components/cron-editor/cron-expression.d.ts.map +1 -0
  40. package/dist/components/cron-editor/cron-expression.js +352 -0
  41. package/dist/components/cron-editor/cron-expression.js.map +1 -0
  42. package/dist/components/cron-editor/index.d.ts +3 -0
  43. package/dist/components/cron-editor/index.js +3 -0
  44. package/dist/components/cron-editor/meta.js +17 -0
  45. package/dist/components/cron-editor/meta.js.map +1 -0
  46. package/dist/components/dns-record/dns-record.d.ts +61 -0
  47. package/dist/components/dns-record/dns-record.d.ts.map +1 -0
  48. package/dist/components/dns-record/dns-record.js +227 -0
  49. package/dist/components/dns-record/dns-record.js.map +1 -0
  50. package/dist/components/dns-record/index.d.ts +2 -0
  51. package/dist/components/dns-record/index.js +2 -0
  52. package/dist/components/dns-record/meta.js +17 -0
  53. package/dist/components/dns-record/meta.js.map +1 -0
  54. package/dist/components/permission-matrix/index.d.ts +3 -0
  55. package/dist/components/permission-matrix/index.js +3 -0
  56. package/dist/components/permission-matrix/meta.js +17 -0
  57. package/dist/components/permission-matrix/meta.js.map +1 -0
  58. package/dist/components/permission-matrix/permission-matrix.d.ts +46 -0
  59. package/dist/components/permission-matrix/permission-matrix.d.ts.map +1 -0
  60. package/dist/components/permission-matrix/permission-matrix.js +199 -0
  61. package/dist/components/permission-matrix/permission-matrix.js.map +1 -0
  62. package/dist/components/permission-matrix/permission-model.d.ts +53 -0
  63. package/dist/components/permission-matrix/permission-model.d.ts.map +1 -0
  64. package/dist/components/permission-matrix/permission-model.js +64 -0
  65. package/dist/components/permission-matrix/permission-model.js.map +1 -0
  66. package/dist/components/progress/progress.d.ts +1 -1
  67. package/dist/components/secret-field/index.d.ts +2 -0
  68. package/dist/components/secret-field/index.js +2 -0
  69. package/dist/components/secret-field/meta.js +17 -0
  70. package/dist/components/secret-field/meta.js.map +1 -0
  71. package/dist/components/secret-field/secret-field.d.ts +58 -0
  72. package/dist/components/secret-field/secret-field.d.ts.map +1 -0
  73. package/dist/components/secret-field/secret-field.js +168 -0
  74. package/dist/components/secret-field/secret-field.js.map +1 -0
  75. package/dist/components/session-expiry/index.d.ts +2 -0
  76. package/dist/components/session-expiry/index.js +2 -0
  77. package/dist/components/session-expiry/meta.js +17 -0
  78. package/dist/components/session-expiry/meta.js.map +1 -0
  79. package/dist/components/session-expiry/session-expiry.d.ts +64 -0
  80. package/dist/components/session-expiry/session-expiry.d.ts.map +1 -0
  81. package/dist/components/session-expiry/session-expiry.js +185 -0
  82. package/dist/components/session-expiry/session-expiry.js.map +1 -0
  83. package/dist/components/shortcut-recorder/index.d.ts +3 -0
  84. package/dist/components/shortcut-recorder/index.js +3 -0
  85. package/dist/components/shortcut-recorder/meta.js +17 -0
  86. package/dist/components/shortcut-recorder/meta.js.map +1 -0
  87. package/dist/components/shortcut-recorder/shortcut-model.d.ts +67 -0
  88. package/dist/components/shortcut-recorder/shortcut-model.d.ts.map +1 -0
  89. package/dist/components/shortcut-recorder/shortcut-model.js +168 -0
  90. package/dist/components/shortcut-recorder/shortcut-model.js.map +1 -0
  91. package/dist/components/shortcut-recorder/shortcut-recorder.d.ts +47 -0
  92. package/dist/components/shortcut-recorder/shortcut-recorder.d.ts.map +1 -0
  93. package/dist/components/shortcut-recorder/shortcut-recorder.js +212 -0
  94. package/dist/components/shortcut-recorder/shortcut-recorder.js.map +1 -0
  95. package/dist/components/spinner/spinner.d.ts +1 -1
  96. package/dist/components/sync-status/index.d.ts +2 -0
  97. package/dist/components/sync-status/index.js +2 -0
  98. package/dist/components/sync-status/meta.js +17 -0
  99. package/dist/components/sync-status/meta.js.map +1 -0
  100. package/dist/components/sync-status/sync-status.d.ts +65 -0
  101. package/dist/components/sync-status/sync-status.d.ts.map +1 -0
  102. package/dist/components/sync-status/sync-status.js +103 -0
  103. package/dist/components/sync-status/sync-status.js.map +1 -0
  104. package/dist/components/toast/toast.d.ts +1 -1
  105. package/dist/index.d.ts +25 -1
  106. package/dist/index.js +16 -2
  107. package/dist/registry/components.d.ts.map +1 -1
  108. package/dist/registry/components.js +73 -53
  109. package/dist/registry/components.js.map +1 -1
  110. package/package.json +4 -4
  111. package/src/components/ai-extraction-review/ai-extraction-review.tsx +492 -0
  112. package/src/components/ai-extraction-review/extraction-model.ts +159 -0
  113. package/src/components/ai-extraction-review/index.ts +13 -0
  114. package/src/components/ai-extraction-review/meta.ts +24 -0
  115. package/src/components/ai-suggested-value/ai-suggested-value.tsx +295 -0
  116. package/src/components/ai-suggested-value/index.ts +6 -0
  117. package/src/components/ai-suggested-value/meta.ts +24 -0
  118. package/src/components/confirm-typed/confirm-typed.tsx +191 -0
  119. package/src/components/confirm-typed/index.ts +1 -0
  120. package/src/components/confirm-typed/meta.ts +22 -0
  121. package/src/components/cron-editor/cron-editor.tsx +676 -0
  122. package/src/components/cron-editor/cron-expression.ts +552 -0
  123. package/src/components/cron-editor/index.ts +23 -0
  124. package/src/components/cron-editor/meta.ts +23 -0
  125. package/src/components/dns-record/dns-record.tsx +315 -0
  126. package/src/components/dns-record/index.ts +7 -0
  127. package/src/components/dns-record/meta.ts +21 -0
  128. package/src/components/permission-matrix/index.ts +14 -0
  129. package/src/components/permission-matrix/meta.ts +23 -0
  130. package/src/components/permission-matrix/permission-matrix.tsx +368 -0
  131. package/src/components/permission-matrix/permission-model.ts +120 -0
  132. package/src/components/secret-field/index.ts +6 -0
  133. package/src/components/secret-field/meta.ts +21 -0
  134. package/src/components/secret-field/secret-field.tsx +284 -0
  135. package/src/components/session-expiry/index.ts +9 -0
  136. package/src/components/session-expiry/meta.ts +23 -0
  137. package/src/components/session-expiry/session-expiry.tsx +321 -0
  138. package/src/components/shortcut-recorder/index.ts +19 -0
  139. package/src/components/shortcut-recorder/meta.ts +22 -0
  140. package/src/components/shortcut-recorder/shortcut-model.ts +204 -0
  141. package/src/components/shortcut-recorder/shortcut-recorder.tsx +336 -0
  142. package/src/components/sync-status/index.ts +9 -0
  143. package/src/components/sync-status/meta.ts +21 -0
  144. package/src/components/sync-status/sync-status.tsx +217 -0
  145. package/src/index.ts +10 -0
  146. 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,