@dowel-ui/react 0.5.0 → 0.7.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 (218) hide show
  1. package/README.md +1 -1
  2. package/dist/blocks/admin-dashboard/meta.js +31 -0
  3. package/dist/blocks/admin-dashboard/meta.js.map +1 -0
  4. package/dist/blocks/agent-console/meta.js +27 -0
  5. package/dist/blocks/agent-console/meta.js.map +1 -0
  6. package/dist/blocks/ai-dashboard/meta.js +25 -0
  7. package/dist/blocks/ai-dashboard/meta.js.map +1 -0
  8. package/dist/blocks/ai-workspace/meta.js +33 -0
  9. package/dist/blocks/ai-workspace/meta.js.map +1 -0
  10. package/dist/blocks/analytics/meta.js +24 -0
  11. package/dist/blocks/analytics/meta.js.map +1 -0
  12. package/dist/blocks/billing/meta.js +25 -0
  13. package/dist/blocks/billing/meta.js.map +1 -0
  14. package/dist/blocks/command-center/meta.js +28 -0
  15. package/dist/blocks/command-center/meta.js.map +1 -0
  16. package/dist/blocks/crm/meta.js +32 -0
  17. package/dist/blocks/crm/meta.js.map +1 -0
  18. package/dist/blocks/onboarding/meta.js +23 -0
  19. package/dist/blocks/onboarding/meta.js.map +1 -0
  20. package/dist/components/accordion/accordion.js +1 -1
  21. package/dist/components/accordion/accordion.js.map +1 -1
  22. package/dist/components/activity-feed/activity-feed.js +1 -1
  23. package/dist/components/activity-feed/activity-feed.js.map +1 -1
  24. package/dist/components/ai-agent-plan/ai-agent-plan.js +1 -1
  25. package/dist/components/ai-agent-plan/ai-agent-plan.js.map +1 -1
  26. package/dist/components/ai-extraction-review/ai-extraction-review.js +1 -1
  27. package/dist/components/ai-extraction-review/ai-extraction-review.js.map +1 -1
  28. package/dist/components/ai-prompt-input/ai-prompt-input.js +1 -1
  29. package/dist/components/ai-prompt-input/ai-prompt-input.js.map +1 -1
  30. package/dist/components/ai-reasoning/ai-reasoning.js +1 -1
  31. package/dist/components/ai-reasoning/ai-reasoning.js.map +1 -1
  32. package/dist/components/ai-response/ai-response.js +2 -2
  33. package/dist/components/ai-response/ai-response.js.map +1 -1
  34. package/dist/components/ai-tool/ai-tool.js +2 -2
  35. package/dist/components/ai-tool/ai-tool.js.map +1 -1
  36. package/dist/components/alert/alert.d.ts +1 -1
  37. package/dist/components/avatar/avatar.d.ts +1 -1
  38. package/dist/components/badge/badge.d.ts +1 -1
  39. package/dist/components/breadcrumb/breadcrumb.d.ts +52 -0
  40. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
  41. package/dist/components/breadcrumb/breadcrumb.js +141 -0
  42. package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
  43. package/dist/components/breadcrumb/index.d.ts +2 -0
  44. package/dist/components/breadcrumb/index.js +2 -0
  45. package/dist/components/breadcrumb/meta.js +17 -0
  46. package/dist/components/breadcrumb/meta.js.map +1 -0
  47. package/dist/components/button/button.d.ts +1 -1
  48. package/dist/components/calendar/calendar.js +2 -2
  49. package/dist/components/calendar/calendar.js.map +1 -1
  50. package/dist/components/code-block/code-block.js +1 -1
  51. package/dist/components/code-block/code-block.js.map +1 -1
  52. package/dist/components/collapsible/collapsible.d.ts +30 -0
  53. package/dist/components/collapsible/collapsible.d.ts.map +1 -0
  54. package/dist/components/collapsible/collapsible.js +38 -0
  55. package/dist/components/collapsible/collapsible.js.map +1 -0
  56. package/dist/components/collapsible/index.d.ts +2 -0
  57. package/dist/components/collapsible/index.js +2 -0
  58. package/dist/components/collapsible/meta.js +17 -0
  59. package/dist/components/collapsible/meta.js.map +1 -0
  60. package/dist/components/combobox/combobox.js +2 -2
  61. package/dist/components/combobox/combobox.js.map +1 -1
  62. package/dist/components/command/command.js +1 -1
  63. package/dist/components/command/command.js.map +1 -1
  64. package/dist/components/data-table/data-table.d.ts.map +1 -1
  65. package/dist/components/data-table/data-table.js +4 -1
  66. package/dist/components/data-table/data-table.js.map +1 -1
  67. package/dist/components/dialog/dialog.js +2 -2
  68. package/dist/components/dialog/dialog.js.map +1 -1
  69. package/dist/components/diff-viewer/diff-viewer.js +4 -4
  70. package/dist/components/diff-viewer/diff-viewer.js.map +1 -1
  71. package/dist/components/direction/direction.d.ts +35 -0
  72. package/dist/components/direction/direction.d.ts.map +1 -0
  73. package/dist/components/direction/direction.js +14 -0
  74. package/dist/components/direction/direction.js.map +1 -0
  75. package/dist/components/direction/index.d.ts +2 -0
  76. package/dist/components/direction/index.js +2 -0
  77. package/dist/components/direction/meta.js +17 -0
  78. package/dist/components/direction/meta.js.map +1 -0
  79. package/dist/components/drawer/drawer.js +1 -1
  80. package/dist/components/drawer/drawer.js.map +1 -1
  81. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  82. package/dist/components/dropdown-menu/dropdown-menu.js +9 -8
  83. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  84. package/dist/components/input/input.js +1 -1
  85. package/dist/components/input/input.js.map +1 -1
  86. package/dist/components/log-viewer/log-viewer.js +2 -2
  87. package/dist/components/log-viewer/log-viewer.js.map +1 -1
  88. package/dist/components/meter/meter.js +1 -1
  89. package/dist/components/meter/meter.js.map +1 -1
  90. package/dist/components/pagination/pagination.d.ts.map +1 -1
  91. package/dist/components/pagination/pagination.js +3 -2
  92. package/dist/components/pagination/pagination.js.map +1 -1
  93. package/dist/components/permission-matrix/permission-matrix.js +3 -3
  94. package/dist/components/permission-matrix/permission-matrix.js.map +1 -1
  95. package/dist/components/progress/progress.d.ts +1 -1
  96. package/dist/components/record-diff/record-diff.js +4 -4
  97. package/dist/components/record-diff/record-diff.js.map +1 -1
  98. package/dist/components/select/select.js +2 -2
  99. package/dist/components/select/select.js.map +1 -1
  100. package/dist/components/sheet/sheet.d.ts.map +1 -1
  101. package/dist/components/sheet/sheet.js +2 -2
  102. package/dist/components/sheet/sheet.js.map +1 -1
  103. package/dist/components/sidebar/index.d.ts +2 -0
  104. package/dist/components/sidebar/index.js +2 -0
  105. package/dist/components/sidebar/meta.js +17 -0
  106. package/dist/components/sidebar/meta.js.map +1 -0
  107. package/dist/components/sidebar/sidebar.d.ts +69 -0
  108. package/dist/components/sidebar/sidebar.d.ts.map +1 -0
  109. package/dist/components/sidebar/sidebar.js +256 -0
  110. package/dist/components/sidebar/sidebar.js.map +1 -0
  111. package/dist/components/spinner/spinner.d.ts +1 -1
  112. package/dist/components/table/table.js +2 -2
  113. package/dist/components/table/table.js.map +1 -1
  114. package/dist/components/tags-input/tags-input.js +1 -1
  115. package/dist/components/tags-input/tags-input.js.map +1 -1
  116. package/dist/components/textarea/index.d.ts +2 -0
  117. package/dist/components/textarea/index.js +2 -0
  118. package/dist/components/textarea/meta.js +17 -0
  119. package/dist/components/textarea/meta.js.map +1 -0
  120. package/dist/components/textarea/textarea.d.ts +43 -0
  121. package/dist/components/textarea/textarea.d.ts.map +1 -0
  122. package/dist/components/textarea/textarea.js +119 -0
  123. package/dist/components/textarea/textarea.js.map +1 -0
  124. package/dist/components/time-range-picker/time-range-picker.js +3 -3
  125. package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
  126. package/dist/components/toast/toast.d.ts +1 -1
  127. package/dist/components/toast/toast.d.ts.map +1 -1
  128. package/dist/components/toast/toast.js +2 -2
  129. package/dist/components/toast/toast.js.map +1 -1
  130. package/dist/index.d.ts +12 -2
  131. package/dist/index.js +7 -2
  132. package/dist/lib/styles.d.ts +16 -1
  133. package/dist/lib/styles.d.ts.map +1 -1
  134. package/dist/lib/styles.js +16 -1
  135. package/dist/lib/styles.js.map +1 -1
  136. package/dist/registry/blocks.d.ts.map +1 -1
  137. package/dist/registry/blocks.js +27 -9
  138. package/dist/registry/blocks.js.map +1 -1
  139. package/dist/registry/components.d.ts.map +1 -1
  140. package/dist/registry/components.js +60 -50
  141. package/dist/registry/components.js.map +1 -1
  142. package/dist/registry/schema.d.ts +8 -0
  143. package/dist/registry/schema.d.ts.map +1 -1
  144. package/dist/registry/schema.js.map +1 -1
  145. package/package.json +5 -4
  146. package/src/components/accordion/accordion.tsx +1 -1
  147. package/src/components/activity-feed/activity-feed.tsx +1 -1
  148. package/src/components/ai-agent-plan/ai-agent-plan.tsx +0 -0
  149. package/src/components/ai-extraction-review/ai-extraction-review.tsx +1 -1
  150. package/src/components/ai-prompt-input/ai-prompt-input.tsx +1 -1
  151. package/src/components/ai-reasoning/ai-reasoning.tsx +1 -1
  152. package/src/components/ai-response/ai-response.tsx +2 -2
  153. package/src/components/ai-tool/ai-tool.tsx +2 -2
  154. package/src/components/breadcrumb/breadcrumb.tsx +157 -0
  155. package/src/components/breadcrumb/index.ts +10 -0
  156. package/src/components/breadcrumb/meta.ts +19 -0
  157. package/src/components/calendar/calendar.tsx +2 -2
  158. package/src/components/code-block/code-block.tsx +1 -1
  159. package/src/components/collapsible/collapsible.tsx +63 -0
  160. package/src/components/collapsible/index.ts +6 -0
  161. package/src/components/collapsible/meta.ts +16 -0
  162. package/src/components/combobox/combobox.tsx +2 -2
  163. package/src/components/command/command.tsx +1 -1
  164. package/src/components/data-table/data-table.tsx +14 -3
  165. package/src/components/dialog/dialog.tsx +2 -2
  166. package/src/components/diff-viewer/diff-viewer.tsx +4 -4
  167. package/src/components/direction/direction.tsx +38 -0
  168. package/src/components/direction/index.ts +1 -0
  169. package/src/components/direction/meta.ts +19 -0
  170. package/src/components/drawer/drawer.tsx +1 -1
  171. package/src/components/dropdown-menu/dropdown-menu.tsx +14 -8
  172. package/src/components/input/input.tsx +1 -1
  173. package/src/components/log-viewer/log-viewer.tsx +2 -2
  174. package/src/components/meter/meter.tsx +1 -1
  175. package/src/components/pagination/pagination.tsx +13 -2
  176. package/src/components/permission-matrix/permission-matrix.tsx +4 -4
  177. package/src/components/record-diff/record-diff.tsx +4 -4
  178. package/src/components/select/select.tsx +2 -2
  179. package/src/components/sheet/sheet.tsx +8 -4
  180. package/src/components/sidebar/index.ts +19 -0
  181. package/src/components/sidebar/meta.ts +25 -0
  182. package/src/components/sidebar/sidebar.tsx +374 -0
  183. package/src/components/table/table.tsx +3 -3
  184. package/src/components/tags-input/tags-input.tsx +1 -1
  185. package/src/components/textarea/index.ts +1 -0
  186. package/src/components/textarea/meta.ts +21 -0
  187. package/src/components/textarea/textarea.tsx +210 -0
  188. package/src/components/time-range-picker/time-range-picker.tsx +3 -3
  189. package/src/components/toast/toast.tsx +14 -6
  190. package/src/index.ts +5 -0
  191. package/src/lib/styles.ts +16 -0
  192. package/src/registry/blocks.ts +18 -0
  193. package/src/registry/components.ts +10 -0
  194. package/src/registry/schema.ts +8 -0
  195. package/src/blocks/admin-users/admin-users.tsx +0 -251
  196. package/src/blocks/admin-users/index.ts +0 -1
  197. package/src/blocks/admin-users/meta.ts +0 -27
  198. package/src/blocks/ai-chat/ai-chat.tsx +0 -280
  199. package/src/blocks/ai-chat/index.ts +0 -7
  200. package/src/blocks/ai-chat/meta.ts +0 -32
  201. package/src/blocks/dashboard/dashboard.tsx +0 -192
  202. package/src/blocks/dashboard/index.ts +0 -6
  203. package/src/blocks/dashboard/meta.ts +0 -18
  204. package/src/blocks/forgot-password/forgot-password.tsx +0 -158
  205. package/src/blocks/forgot-password/index.ts +0 -1
  206. package/src/blocks/forgot-password/meta.ts +0 -18
  207. package/src/blocks/login/index.ts +0 -1
  208. package/src/blocks/login/login.tsx +0 -178
  209. package/src/blocks/login/meta.ts +0 -18
  210. package/src/blocks/pricing/index.ts +0 -1
  211. package/src/blocks/pricing/meta.ts +0 -18
  212. package/src/blocks/pricing/pricing.tsx +0 -176
  213. package/src/blocks/settings/index.ts +0 -6
  214. package/src/blocks/settings/meta.ts +0 -29
  215. package/src/blocks/settings/settings.tsx +0 -317
  216. package/src/blocks/signup/index.ts +0 -1
  217. package/src/blocks/signup/meta.ts +0 -18
  218. package/src/blocks/signup/signup.tsx +0 -240
@@ -1,240 +0,0 @@
1
- "use client";
2
-
3
- import { useState, type FormEvent } from "react";
4
-
5
- import { Button } from "@/components/button";
6
- import {
7
- Card,
8
- CardContent,
9
- CardDescription,
10
- CardFooter,
11
- CardHeader,
12
- CardTitle,
13
- } from "@/components/card";
14
- import { Checkbox } from "@/components/checkbox";
15
- import {
16
- Form,
17
- FormControl,
18
- FormDescription,
19
- FormField,
20
- FormLabel,
21
- FormMessage,
22
- } from "@/components/form";
23
- import { Input } from "@/components/input";
24
- import { Progress } from "@/components/progress";
25
- import { cn } from "@/lib/utils";
26
-
27
- /**
28
- * An account creation form.
29
- *
30
- * The password strength meter is the interesting part. It is a hint, not a
31
- * gate: the requirement is a length minimum, and the meter tells people how
32
- * they are doing without inventing rules about symbols that push everyone
33
- * towards the same predictable substitutions.
34
- */
35
-
36
- export interface SignupBlockProps {
37
- onSubmit?: (values: { name: string; email: string; password: string }) => void;
38
- error?: string;
39
- pending?: boolean;
40
- loginHref?: string;
41
- /** Minimum password length. Length is the requirement that actually helps. */
42
- minPasswordLength?: number;
43
- className?: string;
44
- }
45
-
46
- interface Strength {
47
- score: number;
48
- label: string;
49
- tone: "destructive" | "warning" | "success";
50
- }
51
-
52
- /**
53
- * A rough strength estimate.
54
- *
55
- * Deliberately crude, and deliberately not a validation rule. Its only job is
56
- * to nudge; the form is gated on length alone.
57
- */
58
- export function estimatePasswordStrength(password: string, minLength: number): Strength {
59
- if (password.length === 0)
60
- return { score: 0, label: "Enter a password", tone: "destructive" };
61
-
62
- let score = Math.min(60, (password.length / (minLength * 2)) * 60);
63
- if (/[a-z]/.test(password) && /[A-Z]/.test(password)) score += 15;
64
- if (/\d/.test(password)) score += 10;
65
- if (/[^\w\s]/.test(password)) score += 15;
66
-
67
- const rounded = Math.min(100, Math.round(score));
68
- if (password.length < minLength)
69
- return { score: rounded, label: "Too short", tone: "destructive" };
70
- if (rounded < 60) return { score: rounded, label: "Weak", tone: "warning" };
71
- if (rounded < 85) return { score: rounded, label: "Good", tone: "success" };
72
- return { score: rounded, label: "Strong", tone: "success" };
73
- }
74
-
75
- export function SignupBlock({
76
- onSubmit,
77
- error,
78
- pending = false,
79
- loginHref = "/login",
80
- minPasswordLength = 12,
81
- className,
82
- }: SignupBlockProps) {
83
- const [name, setName] = useState("");
84
- const [email, setEmail] = useState("");
85
- const [password, setPassword] = useState("");
86
- const [accepted, setAccepted] = useState(false);
87
- const [touched, setTouched] = useState(false);
88
-
89
- const strength = estimatePasswordStrength(password, minPasswordLength);
90
- const emailError =
91
- touched && !email.includes("@") ? "Enter a valid email address." : undefined;
92
- const passwordError =
93
- touched && password.length < minPasswordLength
94
- ? `Use at least ${String(minPasswordLength)} characters.`
95
- : undefined;
96
- const termsError = touched && !accepted ? "Accept the terms to continue." : undefined;
97
-
98
- function handleSubmit(event: FormEvent<HTMLFormElement>) {
99
- event.preventDefault();
100
- setTouched(true);
101
- if (!email.includes("@") || password.length < minPasswordLength || !accepted) return;
102
- onSubmit?.({ name, email, password });
103
- }
104
-
105
- return (
106
- <Card className={cn("w-full max-w-sm", className)}>
107
- <CardHeader>
108
- <CardTitle>Create an account</CardTitle>
109
- <CardDescription>Start building in a couple of minutes.</CardDescription>
110
- </CardHeader>
111
-
112
- <CardContent>
113
- <Form onSubmit={handleSubmit} className="gap-4">
114
- {error ? (
115
- <p role="alert" className="text-sm font-medium text-destructive">
116
- {error}
117
- </p>
118
- ) : null}
119
-
120
- <FormField name="name">
121
- <FormLabel>Name</FormLabel>
122
- <FormControl>
123
- <Input
124
- autoComplete="name"
125
- placeholder="Ada Lovelace"
126
- value={name}
127
- disabled={pending}
128
- onChange={(event) => {
129
- setName(event.target.value);
130
- }}
131
- />
132
- </FormControl>
133
- </FormField>
134
-
135
- <FormField name="email" error={emailError}>
136
- <FormLabel>Email</FormLabel>
137
- <FormControl>
138
- <Input
139
- type="email"
140
- autoComplete="email"
141
- placeholder="you@example.com"
142
- value={email}
143
- disabled={pending}
144
- onChange={(event) => {
145
- setEmail(event.target.value);
146
- }}
147
- />
148
- </FormControl>
149
- <FormMessage />
150
- </FormField>
151
-
152
- <FormField name="password" error={passwordError}>
153
- <FormLabel>Password</FormLabel>
154
- <FormControl>
155
- <Input
156
- type="password"
157
- autoComplete="new-password"
158
- value={password}
159
- disabled={pending}
160
- onChange={(event) => {
161
- setPassword(event.target.value);
162
- }}
163
- />
164
- </FormControl>
165
- <FormDescription>At least {minPasswordLength} characters.</FormDescription>
166
- <FormMessage />
167
- </FormField>
168
-
169
- {password.length > 0 ? (
170
- <div className="grid gap-1.5">
171
- <div className="flex items-center justify-between text-xs">
172
- <span className="text-muted-foreground">Password strength</span>
173
- <span
174
- className={cn(
175
- strength.tone === "success"
176
- ? "text-success"
177
- : strength.tone === "warning"
178
- ? "text-warning"
179
- : "text-destructive",
180
- )}
181
- >
182
- {strength.label}
183
- </span>
184
- </div>
185
- {/* The label above already says the strength, so the bar is a
186
- summary rather than a second thing to read. */}
187
- <Progress
188
- value={strength.score}
189
- size="sm"
190
- tone={
191
- strength.tone === "success"
192
- ? "success"
193
- : strength.tone === "warning"
194
- ? "warning"
195
- : "destructive"
196
- }
197
- aria-hidden="true"
198
- />
199
- </div>
200
- ) : null}
201
-
202
- <FormField name="terms" error={termsError}>
203
- <div className="flex items-start gap-2">
204
- <FormControl>
205
- <Checkbox
206
- className="mt-0.5"
207
- checked={accepted}
208
- disabled={pending}
209
- onCheckedChange={(checked) => {
210
- setAccepted(checked === true);
211
- }}
212
- />
213
- </FormControl>
214
- {/* FormLabel, not a Label with a guessed htmlFor: the field
215
- generates the control's id, so anything hard-coded points at
216
- nothing and leaves the checkbox unnamed. */}
217
- <FormLabel className="text-sm leading-snug font-normal">
218
- I agree to the terms of service and privacy policy.
219
- </FormLabel>
220
- </div>
221
- <FormMessage />
222
- </FormField>
223
-
224
- <Button type="submit" loading={pending} className="w-full">
225
- Create account
226
- </Button>
227
- </Form>
228
- </CardContent>
229
-
230
- <CardFooter className="justify-center">
231
- <p className="text-sm text-muted-foreground">
232
- Already have an account?{" "}
233
- <a href={loginHref} className="font-medium text-primary underline underline-offset-4">
234
- Sign in
235
- </a>
236
- </p>
237
- </CardFooter>
238
- </Card>
239
- );
240
- }