@twoux/ui 0.0.0-stage → 0.1.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.
Files changed (325) hide show
  1. package/LICENSE.md +61 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/NOTICE.md +64 -0
  4. package/README.md +211 -2
  5. package/SHADCN-DIFF.md +228 -0
  6. package/agent/AGENTS.md +358 -0
  7. package/agent/docs-md/accessibility.md +49 -0
  8. package/agent/docs-md/action-catalogue.md +81 -0
  9. package/agent/docs-md/actions.md +74 -0
  10. package/agent/docs-md/agent-activity-log.md +70 -0
  11. package/agent/docs-md/agent-permissions.md +82 -0
  12. package/agent/docs-md/agent-run.md +90 -0
  13. package/agent/docs-md/agents-on-behalf.md +74 -0
  14. package/agent/docs-md/ai-column.md +85 -0
  15. package/agent/docs-md/ai-origin-label.md +70 -0
  16. package/agent/docs-md/announcing-features.md +73 -0
  17. package/agent/docs-md/answer-actions.md +81 -0
  18. package/agent/docs-md/app-shell.md +114 -0
  19. package/agent/docs-md/artifact-card.md +89 -0
  20. package/agent/docs-md/ask-on-screen.md +72 -0
  21. package/agent/docs-md/assistant-page.md +100 -0
  22. package/agent/docs-md/assistant-panel.md +142 -0
  23. package/agent/docs-md/avatar.md +82 -0
  24. package/agent/docs-md/banner.md +106 -0
  25. package/agent/docs-md/board.md +163 -0
  26. package/agent/docs-md/breadcrumb.md +89 -0
  27. package/agent/docs-md/breakdown-table.md +97 -0
  28. package/agent/docs-md/bulk-action-bar.md +112 -0
  29. package/agent/docs-md/button.md +293 -0
  30. package/agent/docs-md/card.md +115 -0
  31. package/agent/docs-md/change-list.md +99 -0
  32. package/agent/docs-md/change-request.md +166 -0
  33. package/agent/docs-md/chart-area.md +87 -0
  34. package/agent/docs-md/chart-bar.md +100 -0
  35. package/agent/docs-md/chart-box-plot.md +88 -0
  36. package/agent/docs-md/chart-bullet.md +89 -0
  37. package/agent/docs-md/chart-candlestick.md +112 -0
  38. package/agent/docs-md/chart-card-line.md +120 -0
  39. package/agent/docs-md/chart-donut.md +90 -0
  40. package/agent/docs-md/chart-drill-down.md +72 -0
  41. package/agent/docs-md/chart-funnel.md +71 -0
  42. package/agent/docs-md/chart-heatmap.md +76 -0
  43. package/agent/docs-md/chart-histogram.md +81 -0
  44. package/agent/docs-md/chart-map.md +165 -0
  45. package/agent/docs-md/chart-mixed.md +88 -0
  46. package/agent/docs-md/chart-price.md +92 -0
  47. package/agent/docs-md/chart-radial-bars.md +109 -0
  48. package/agent/docs-md/chart-radial-lines.md +111 -0
  49. package/agent/docs-md/chart-sankey.md +104 -0
  50. package/agent/docs-md/chart-scatter.md +87 -0
  51. package/agent/docs-md/chart-share-bar.md +89 -0
  52. package/agent/docs-md/chart-treemap.md +98 -0
  53. package/agent/docs-md/chart-waterfall.md +93 -0
  54. package/agent/docs-md/checkbox.md +131 -0
  55. package/agent/docs-md/choosing-selection-control.md +71 -0
  56. package/agent/docs-md/citations-sources.md +79 -0
  57. package/agent/docs-md/citing-sources.md +63 -0
  58. package/agent/docs-md/clarify-before-acting.md +69 -0
  59. package/agent/docs-md/clarifying-question.md +92 -0
  60. package/agent/docs-md/code-block.md +174 -0
  61. package/agent/docs-md/colours.md +87 -0
  62. package/agent/docs-md/columns-menu.md +140 -0
  63. package/agent/docs-md/combobox.md +161 -0
  64. package/agent/docs-md/command-palette.md +126 -0
  65. package/agent/docs-md/confidence-note.md +87 -0
  66. package/agent/docs-md/configurable-dashboard.md +76 -0
  67. package/agent/docs-md/confirmation-dialog.md +93 -0
  68. package/agent/docs-md/connected-tools.md +80 -0
  69. package/agent/docs-md/connector-picker.md +127 -0
  70. package/agent/docs-md/consistency.md +53 -0
  71. package/agent/docs-md/content-density.md +61 -0
  72. package/agent/docs-md/conversation-history.md +78 -0
  73. package/agent/docs-md/create-record.md +80 -0
  74. package/agent/docs-md/csv-import.md +88 -0
  75. package/agent/docs-md/dashboard-items.md +78 -0
  76. package/agent/docs-md/data-export.md +61 -0
  77. package/agent/docs-md/data-grid.md +137 -0
  78. package/agent/docs-md/data-vis-colours.md +76 -0
  79. package/agent/docs-md/data-visualisation.md +76 -0
  80. package/agent/docs-md/date-picker.md +178 -0
  81. package/agent/docs-md/delete-record.md +75 -0
  82. package/agent/docs-md/dense-table.md +495 -0
  83. package/agent/docs-md/design-tokens.md +53 -0
  84. package/agent/docs-md/disabled-read-only.md +75 -0
  85. package/agent/docs-md/drag-and-drop.md +74 -0
  86. package/agent/docs-md/dropdown-menu.md +137 -0
  87. package/agent/docs-md/edit-record.md +73 -0
  88. package/agent/docs-md/empty-loading-error.md +78 -0
  89. package/agent/docs-md/empty-state.md +128 -0
  90. package/agent/docs-md/error-messages.md +75 -0
  91. package/agent/docs-md/error-state.md +123 -0
  92. package/agent/docs-md/export-menu.md +86 -0
  93. package/agent/docs-md/feedback-prompt.md +88 -0
  94. package/agent/docs-md/field-mapping.md +78 -0
  95. package/agent/docs-md/file-drop.md +110 -0
  96. package/agent/docs-md/filter-bar.md +138 -0
  97. package/agent/docs-md/filter-panel.md +103 -0
  98. package/agent/docs-md/filtering-search.md +79 -0
  99. package/agent/docs-md/follow-ups-starters.md +79 -0
  100. package/agent/docs-md/form-validation.md +95 -0
  101. package/agent/docs-md/generated-columns.md +65 -0
  102. package/agent/docs-md/generated-drafts-files.md +71 -0
  103. package/agent/docs-md/grouped-list.md +89 -0
  104. package/agent/docs-md/guide-cue.md +170 -0
  105. package/agent/docs-md/help-panel.md +103 -0
  106. package/agent/docs-md/help-system.md +74 -0
  107. package/agent/docs-md/iconography.md +49 -0
  108. package/agent/docs-md/inbox.md +108 -0
  109. package/agent/docs-md/inline-editing-validation.md +80 -0
  110. package/agent/docs-md/inline-input-in-answer.md +70 -0
  111. package/agent/docs-md/items-palette.md +116 -0
  112. package/agent/docs-md/keyboard-model.md +47 -0
  113. package/agent/docs-md/keyboard-navigation.md +68 -0
  114. package/agent/docs-md/keyboard-shortcut-hint.md +87 -0
  115. package/agent/docs-md/keyboard-shortcut-sheet.md +90 -0
  116. package/agent/docs-md/labelling-ai-output.md +66 -0
  117. package/agent/docs-md/layout.md +47 -0
  118. package/agent/docs-md/list-table.md +254 -0
  119. package/agent/docs-md/loading-skeleton.md +91 -0
  120. package/agent/docs-md/managing-agents.md +71 -0
  121. package/agent/docs-md/message-composer.md +105 -0
  122. package/agent/docs-md/migrating.md +49 -0
  123. package/agent/docs-md/motion.md +93 -0
  124. package/agent/docs-md/navigation.md +76 -0
  125. package/agent/docs-md/notification-channels.md +65 -0
  126. package/agent/docs-md/notifications-decision.md +100 -0
  127. package/agent/docs-md/onboarding-step.md +114 -0
  128. package/agent/docs-md/order-book.md +108 -0
  129. package/agent/docs-md/page-header.md +96 -0
  130. package/agent/docs-md/pagination.md +88 -0
  131. package/agent/docs-md/pane-layout.md +105 -0
  132. package/agent/docs-md/period-comparison.md +66 -0
  133. package/agent/docs-md/plan-card.md +120 -0
  134. package/agent/docs-md/popover-rules.md +88 -0
  135. package/agent/docs-md/prompt-editor.md +90 -0
  136. package/agent/docs-md/propose-apply.md +65 -0
  137. package/agent/docs-md/provider-logo.md +97 -0
  138. package/agent/docs-md/radio.md +83 -0
  139. package/agent/docs-md/ranked-list.md +102 -0
  140. package/agent/docs-md/reasoning-progress.md +72 -0
  141. package/agent/docs-md/record-detail.md +71 -0
  142. package/agent/docs-md/regenerating-answers.md +70 -0
  143. package/agent/docs-md/run-status-bar.md +94 -0
  144. package/agent/docs-md/saved-tasks-schedules.md +63 -0
  145. package/agent/docs-md/saved-views.md +149 -0
  146. package/agent/docs-md/saving-views.md +68 -0
  147. package/agent/docs-md/scheduler.md +258 -0
  148. package/agent/docs-md/secondary-panels.md +72 -0
  149. package/agent/docs-md/segmented-control.md +88 -0
  150. package/agent/docs-md/selection-bulk-actions.md +70 -0
  151. package/agent/docs-md/separator.md +75 -0
  152. package/agent/docs-md/setup-checklist.md +92 -0
  153. package/agent/docs-md/shape-elevation.md +55 -0
  154. package/agent/docs-md/sheet-grid.md +211 -0
  155. package/agent/docs-md/side-panel.md +134 -0
  156. package/agent/docs-md/sign-in.md +114 -0
  157. package/agent/docs-md/spacing.md +55 -0
  158. package/agent/docs-md/split-button.md +100 -0
  159. package/agent/docs-md/stat-compare.md +82 -0
  160. package/agent/docs-md/static-dashboard.md +75 -0
  161. package/agent/docs-md/status-badge.md +140 -0
  162. package/agent/docs-md/step-card.md +75 -0
  163. package/agent/docs-md/stepper.md +92 -0
  164. package/agent/docs-md/suggested-changes.md +91 -0
  165. package/agent/docs-md/switch.md +78 -0
  166. package/agent/docs-md/table-settings.md +81 -0
  167. package/agent/docs-md/tabs.md +85 -0
  168. package/agent/docs-md/tag-input.md +108 -0
  169. package/agent/docs-md/tag.md +79 -0
  170. package/agent/docs-md/task-builder.md +87 -0
  171. package/agent/docs-md/team-instructions.md +72 -0
  172. package/agent/docs-md/templates-gallery.md +85 -0
  173. package/agent/docs-md/text-input.md +160 -0
  174. package/agent/docs-md/thinking-steps.md +89 -0
  175. package/agent/docs-md/timeline.md +189 -0
  176. package/agent/docs-md/timestamp.md +84 -0
  177. package/agent/docs-md/timestamps.md +70 -0
  178. package/agent/docs-md/toast.md +117 -0
  179. package/agent/docs-md/tooltip.md +90 -0
  180. package/agent/docs-md/typography.md +62 -0
  181. package/agent/docs-md/undo-destructive.md +66 -0
  182. package/agent/docs-md/unsaved-changes.md +71 -0
  183. package/agent/docs-md/usage-meter.md +80 -0
  184. package/agent/docs-md/user-feedback.md +71 -0
  185. package/agent/docs-md/voice-and-tone.md +60 -0
  186. package/agent/docs-md/why-choice.md +93 -0
  187. package/agent/docs-md/workspace-onboarding.md +74 -0
  188. package/agent/docs-md/writing.md +48 -0
  189. package/agent/llms-full.txt +18369 -0
  190. package/agent/llms.txt +198 -0
  191. package/agent/skills/twoux-audit/SKILL.md +49 -0
  192. package/agent/skills/twoux-build/SKILL.md +39 -0
  193. package/agent/skills/twoux-design/SKILL.md +54 -0
  194. package/agent/skills/twoux-write/SKILL.md +32 -0
  195. package/bin/check.mjs +123 -0
  196. package/bin/docs.mjs +24 -0
  197. package/bin/guard.mjs +27 -0
  198. package/bin/init.mjs +113 -0
  199. package/bin/knowledge.mjs +87 -0
  200. package/bin/mcp.mjs +116 -0
  201. package/bin/theme.mjs +168 -0
  202. package/bin/twoux.mjs +25 -0
  203. package/package.json +80 -3
  204. package/registry/jobs.json +1028 -0
  205. package/registry/palette.json +770 -0
  206. package/registry/rules.json +913 -0
  207. package/src/components/agent-review.tsx +364 -0
  208. package/src/components/ai-basics.tsx +212 -0
  209. package/src/components/ai-work.tsx +304 -0
  210. package/src/components/ai.tsx +227 -0
  211. package/src/components/alert-dialog.tsx +203 -0
  212. package/src/components/alert.tsx +86 -0
  213. package/src/components/avatar.tsx +114 -0
  214. package/src/components/badge.tsx +59 -0
  215. package/src/components/board.tsx +397 -0
  216. package/src/components/breadcrumb.tsx +114 -0
  217. package/src/components/button-group.tsx +90 -0
  218. package/src/components/button.tsx +109 -0
  219. package/src/components/calendar.tsx +247 -0
  220. package/src/components/card.tsx +102 -0
  221. package/src/components/chart-map.tsx +336 -0
  222. package/src/components/charts-more.tsx +1331 -0
  223. package/src/components/charts-radial.tsx +328 -0
  224. package/src/components/charts.tsx +390 -0
  225. package/src/components/checkbox.tsx +40 -0
  226. package/src/components/code.tsx +139 -0
  227. package/src/components/collapsible.tsx +37 -0
  228. package/src/components/combobox.tsx +339 -0
  229. package/src/components/command-extras.tsx +11 -0
  230. package/src/components/command.tsx +196 -0
  231. package/src/components/data-grid.tsx +213 -0
  232. package/src/components/data-table.tsx +334 -0
  233. package/src/components/data-views.tsx +740 -0
  234. package/src/components/date-picker.tsx +686 -0
  235. package/src/components/dense-table.tsx +207 -0
  236. package/src/components/dialog.tsx +162 -0
  237. package/src/components/dropdown-menu.tsx +264 -0
  238. package/src/components/empty.tsx +114 -0
  239. package/src/components/feedback-prompt.tsx +80 -0
  240. package/src/components/field.tsx +254 -0
  241. package/src/components/fields.tsx +112 -0
  242. package/src/components/flow.tsx +840 -0
  243. package/src/components/guide-cue.tsx +273 -0
  244. package/src/components/inbox.tsx +113 -0
  245. package/src/components/input-group.tsx +176 -0
  246. package/src/components/input.tsx +26 -0
  247. package/src/components/kbd.tsx +34 -0
  248. package/src/components/label.tsx +27 -0
  249. package/src/components/labels.tsx +176 -0
  250. package/src/components/motion.tsx +136 -0
  251. package/src/components/onboarding.tsx +454 -0
  252. package/src/components/order-book.tsx +185 -0
  253. package/src/components/pane-layout.tsx +417 -0
  254. package/src/components/popover.tsx +96 -0
  255. package/src/components/provider-logos.data.ts +49 -0
  256. package/src/components/radio-group.tsx +52 -0
  257. package/src/components/scheduler.tsx +997 -0
  258. package/src/components/segmented-control.tsx +28 -0
  259. package/src/components/select.tsx +195 -0
  260. package/src/components/separator.tsx +31 -0
  261. package/src/components/sheet.tsx +148 -0
  262. package/src/components/shell.tsx +426 -0
  263. package/src/components/shortcut-sheet.tsx +83 -0
  264. package/src/components/skeleton.tsx +18 -0
  265. package/src/components/sonner.tsx +107 -0
  266. package/src/components/spinner.tsx +13 -0
  267. package/src/components/split-button.tsx +58 -0
  268. package/src/components/stepper.tsx +78 -0
  269. package/src/components/switch.tsx +43 -0
  270. package/src/components/table.tsx +126 -0
  271. package/src/components/tabs.tsx +118 -0
  272. package/src/components/tag-input.tsx +253 -0
  273. package/src/components/textarea.tsx +21 -0
  274. package/src/components/theme.tsx +80 -0
  275. package/src/components/timeline.tsx +408 -0
  276. package/src/components/toggle-group.tsx +87 -0
  277. package/src/components/toggle.tsx +54 -0
  278. package/src/components/tooltip.tsx +65 -0
  279. package/src/components/workspace-actions.tsx +294 -0
  280. package/src/components/workspace-import.tsx +465 -0
  281. package/src/components/workspace.tsx +1884 -0
  282. package/src/index.ts +80 -0
  283. package/src/lib/active-indicator.tsx +53 -0
  284. package/src/lib/chart-kit.tsx +72 -0
  285. package/src/lib/cn.ts +6 -0
  286. package/src/lib/shortcuts.tsx +61 -0
  287. package/src/lib/workspace.tsx +10 -0
  288. package/src/shadcn/alert-dialog.tsx +196 -0
  289. package/src/shadcn/alert.tsx +65 -0
  290. package/src/shadcn/avatar.tsx +108 -0
  291. package/src/shadcn/badge.tsx +47 -0
  292. package/src/shadcn/breadcrumb.tsx +108 -0
  293. package/src/shadcn/button-group.tsx +83 -0
  294. package/src/shadcn/button.tsx +63 -0
  295. package/src/shadcn/calendar.tsx +220 -0
  296. package/src/shadcn/card.tsx +91 -0
  297. package/src/shadcn/checkbox.tsx +31 -0
  298. package/src/shadcn/collapsible.tsx +33 -0
  299. package/src/shadcn/command.tsx +184 -0
  300. package/src/shadcn/dialog.tsx +158 -0
  301. package/src/shadcn/dropdown-menu.tsx +256 -0
  302. package/src/shadcn/empty.tsx +103 -0
  303. package/src/shadcn/field.tsx +248 -0
  304. package/src/shadcn/input-group.tsx +170 -0
  305. package/src/shadcn/input.tsx +20 -0
  306. package/src/shadcn/kbd.tsx +28 -0
  307. package/src/shadcn/label.tsx +23 -0
  308. package/src/shadcn/popover.tsx +88 -0
  309. package/src/shadcn/radio-group.tsx +44 -0
  310. package/src/shadcn/select.tsx +189 -0
  311. package/src/shadcn/separator.tsx +27 -0
  312. package/src/shadcn/sheet.tsx +142 -0
  313. package/src/shadcn/skeleton.tsx +13 -0
  314. package/src/shadcn/sonner.tsx +40 -0
  315. package/src/shadcn/switch.tsx +34 -0
  316. package/src/shadcn/table.tsx +115 -0
  317. package/src/shadcn/tabs.tsx +90 -0
  318. package/src/shadcn/textarea.tsx +17 -0
  319. package/src/shadcn/toggle-group.tsx +83 -0
  320. package/src/shadcn/toggle.tsx +46 -0
  321. package/src/shadcn/tooltip.tsx +56 -0
  322. package/src/styles/palette.css +127 -0
  323. package/src/styles/theme.css +35 -0
  324. package/src/styles/twoux.css +236 -0
  325. package/theme.json +14 -0
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Generated from shadcn/ui new-york-v4 "alert-dialog" by scripts/tailor-shadcn.mjs. Do not edit by hand.
3
+ * TwoUX changes:
4
+ * - Confirmations are 420px wide at most
5
+ * - Body text readable at 6:1, not the muted grey
6
+ * - Smaller media tile
7
+ */
8
+ "use client"
9
+
10
+ import * as React from "react"
11
+ import { cn } from "../lib/cn"
12
+ import { AlertDialog as AlertDialogPrimitive } from "radix-ui"
13
+
14
+ import { Button } from "./button"
15
+
16
+ function AlertDialog({
17
+ ...props
18
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {
19
+ return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />
20
+ }
21
+
22
+ function AlertDialogTrigger({
23
+ ...props
24
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {
25
+ return (
26
+ <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />
27
+ )
28
+ }
29
+
30
+ function AlertDialogPortal({
31
+ ...props
32
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {
33
+ return (
34
+ <AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" {...props} />
35
+ )
36
+ }
37
+
38
+ function AlertDialogOverlay({
39
+ className,
40
+ ...props
41
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {
42
+ return (
43
+ <AlertDialogPrimitive.Overlay
44
+ data-slot="alert-dialog-overlay"
45
+ className={cn(
46
+ "fixed inset-0 z-50 bg-scrim data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
47
+ className
48
+ )}
49
+ {...props}
50
+ />
51
+ )
52
+ }
53
+
54
+ function AlertDialogContent({
55
+ className,
56
+ size = "default",
57
+ ...props
58
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {
59
+ size?: "default" | "sm"
60
+ }) {
61
+ return (
62
+ <AlertDialogPortal>
63
+ <AlertDialogOverlay />
64
+ <AlertDialogPrimitive.Content
65
+ data-slot="alert-dialog-content"
66
+ data-size={size}
67
+ className={cn(
68
+ "group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-md border border-line bg-background p-5 shadow-pop duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-[420px]",
69
+ className
70
+ )}
71
+ {...props}
72
+ />
73
+ </AlertDialogPortal>
74
+ )
75
+ }
76
+
77
+ function AlertDialogHeader({
78
+ className,
79
+ ...props
80
+ }: React.ComponentProps<"div">) {
81
+ return (
82
+ <div
83
+ data-slot="alert-dialog-header"
84
+ className={cn(
85
+ "grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",
86
+ className
87
+ )}
88
+ {...props}
89
+ />
90
+ )
91
+ }
92
+
93
+ function AlertDialogFooter({
94
+ className,
95
+ ...props
96
+ }: React.ComponentProps<"div">) {
97
+ return (
98
+ <div
99
+ data-slot="alert-dialog-footer"
100
+ className={cn(
101
+ "flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
102
+ className
103
+ )}
104
+ {...props}
105
+ />
106
+ )
107
+ }
108
+
109
+ function AlertDialogTitle({
110
+ className,
111
+ ...props
112
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {
113
+ return (
114
+ <AlertDialogPrimitive.Title
115
+ data-slot="alert-dialog-title"
116
+ className={cn(
117
+ "text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",
118
+ className
119
+ )}
120
+ {...props}
121
+ />
122
+ )
123
+ }
124
+
125
+ function AlertDialogDescription({
126
+ className,
127
+ ...props
128
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {
129
+ return (
130
+ <AlertDialogPrimitive.Description
131
+ data-slot="alert-dialog-description"
132
+ className={cn("text-base text-ink-2", className)}
133
+ {...props}
134
+ />
135
+ )
136
+ }
137
+
138
+ function AlertDialogMedia({
139
+ className,
140
+ ...props
141
+ }: React.ComponentProps<"div">) {
142
+ return (
143
+ <div
144
+ data-slot="alert-dialog-media"
145
+ className={cn(
146
+ "mb-1 inline-flex size-10 items-center justify-center rounded-sm bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-5",
147
+ className
148
+ )}
149
+ {...props}
150
+ />
151
+ )
152
+ }
153
+
154
+ function AlertDialogAction({
155
+ className,
156
+ variant = "default",
157
+ size = "default",
158
+ ...props
159
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Action> &
160
+ Pick<React.ComponentProps<typeof Button>, "variant" | "size">) {
161
+ return (
162
+ <Button variant={variant} size={size} asChild>
163
+ <AlertDialogPrimitive.Action
164
+ data-slot="alert-dialog-action"
165
+ className={cn(className)}
166
+ {...props}
167
+ />
168
+ </Button>
169
+ )
170
+ }
171
+
172
+ function AlertDialogCancel({
173
+ className,
174
+ variant = "outline",
175
+ size = "default",
176
+ ...props
177
+ }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &
178
+ Pick<React.ComponentProps<typeof Button>, "variant" | "size">) {
179
+ return (
180
+ <Button variant={variant} size={size} asChild>
181
+ <AlertDialogPrimitive.Cancel
182
+ data-slot="alert-dialog-cancel"
183
+ className={cn(className)}
184
+ {...props}
185
+ />
186
+ </Button>
187
+ )
188
+ }
189
+
190
+ export {
191
+ AlertDialog,
192
+ AlertDialogAction,
193
+ AlertDialogCancel,
194
+ AlertDialogContent,
195
+ AlertDialogDescription,
196
+ AlertDialogFooter,
197
+ AlertDialogHeader,
198
+ AlertDialogMedia,
199
+ AlertDialogOverlay,
200
+ AlertDialogPortal,
201
+ AlertDialogTitle,
202
+ AlertDialogTrigger,
203
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Generated from shadcn/ui new-york-v4 "alert" by scripts/tailor-shadcn.mjs. Do not edit by hand.
3
+ * TwoUX changes:
4
+ * - Compact banner: 8px corners, 14px icon, room for one action on the right
5
+ * - Information is neutral grey, not blue: colour is kept for problems
6
+ * - Errors: soft red fill and edge, dark text; adds warning
7
+ * - Only errors interrupt a screen reader (role alert); information and warnings are polite (role status)
8
+ * - Title wraps instead of being cut to one line
9
+ * - Adds AlertAction: Dismiss (ghost) then one action, on the right
10
+ */
11
+ import * as React from "react"
12
+ import { cva, type VariantProps } from "class-variance-authority"
13
+ import { cn } from "../lib/cn"
14
+
15
+ const alertVariants = cva(
16
+ "relative grid w-full grid-cols-[0_1fr_auto] items-start gap-y-0.5 rounded-sm border px-3 py-2.5 text-base has-[>svg]:grid-cols-[calc(var(--spacing)*3.5)_1fr_auto] has-[>svg]:gap-x-2.5 [&>svg]:size-3.5 [&>svg]:translate-y-[3px] [&>svg]:text-current",
17
+ {
18
+ variants: {
19
+ variant: {
20
+ default: "border-line bg-surface-2 text-ink [&>svg]:text-ink-2",
21
+ destructive:
22
+ "border-bad-line bg-bad-bg text-ink *:data-[slot=alert-description]:text-ink-2 [&>svg]:text-bad",
23
+ warning: "border-warn-line bg-warn-bg text-ink *:data-[slot=alert-description]:text-ink-2 [&>svg]:text-warn",
24
+ },
25
+ },
26
+ defaultVariants: {
27
+ variant: "default",
28
+ },
29
+ }
30
+ )
31
+
32
+ function Alert({
33
+ className,
34
+ variant,
35
+ ...props
36
+ }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>) {
37
+ return (
38
+ <div
39
+ data-slot="alert"
40
+ role={variant === "destructive" ? "alert" : "status"}
41
+ className={cn(alertVariants({ variant }), className)}
42
+ {...props}
43
+ />
44
+ )
45
+ }
46
+
47
+ function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
48
+ return (
49
+ <div
50
+ data-slot="alert-title"
51
+ className={cn(
52
+ "col-start-2 min-h-5 font-medium",
53
+ className
54
+ )}
55
+ {...props}
56
+ />
57
+ )
58
+ }
59
+
60
+ function AlertDescription({
61
+ className,
62
+ ...props
63
+ }: React.ComponentProps<"div">) {
64
+ return (
65
+ <div
66
+ data-slot="alert-description"
67
+ className={cn(
68
+ "col-start-2 grid justify-items-start gap-1 text-base text-ink-2",
69
+ className
70
+ )}
71
+ {...props}
72
+ />
73
+ )
74
+ }
75
+
76
+ function AlertAction({ className, ...props }: React.ComponentProps<"div">) {
77
+ return (
78
+ <div
79
+ data-slot="alert-action"
80
+ className={cn("col-start-3 row-span-2 row-start-1 -my-1 flex items-center gap-1 self-center pl-2", className)}
81
+ {...props}
82
+ />
83
+ )
84
+ }
85
+
86
+ export { Alert, AlertTitle, AlertDescription, AlertAction }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Generated from shadcn/ui new-york-v4 "avatar" by scripts/tailor-shadcn.mjs. Do not edit by hand.
3
+ * TwoUX changes:
4
+ * - 22px by default (18px small, 32px large); initials 11px semibold in white on a per-person colour
5
+ * - Stacks overlap by 6px with a 2px white ring
6
+ */
7
+ "use client"
8
+
9
+ import * as React from "react"
10
+ import { cn } from "../lib/cn"
11
+ import { Avatar as AvatarPrimitive } from "radix-ui"
12
+
13
+ function Avatar({
14
+ className,
15
+ size = "default",
16
+ ...props
17
+ }: React.ComponentProps<typeof AvatarPrimitive.Root> & {
18
+ size?: "default" | "sm" | "lg"
19
+ }) {
20
+ return (
21
+ <AvatarPrimitive.Root
22
+ data-slot="avatar"
23
+ data-size={size}
24
+ className={cn(
25
+ "group/avatar relative flex size-5.5 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-8 data-[size=sm]:size-4.5",
26
+ className
27
+ )}
28
+ {...props}
29
+ />
30
+ )
31
+ }
32
+
33
+ function AvatarImage({
34
+ className,
35
+ ...props
36
+ }: React.ComponentProps<typeof AvatarPrimitive.Image>) {
37
+ return (
38
+ <AvatarPrimitive.Image
39
+ data-slot="avatar-image"
40
+ className={cn("aspect-square size-full", className)}
41
+ {...props}
42
+ />
43
+ )
44
+ }
45
+
46
+ function AvatarFallback({
47
+ className,
48
+ ...props
49
+ }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
50
+ return (
51
+ <AvatarPrimitive.Fallback
52
+ data-slot="avatar-fallback"
53
+ className={cn(
54
+ "flex size-full items-center justify-center rounded-full bg-(--avatar,var(--color-neutral-600)) text-xs font-semibold text-white group-data-[size=lg]/avatar:text-sm",
55
+ className
56
+ )}
57
+ {...props}
58
+ />
59
+ )
60
+ }
61
+
62
+ function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) {
63
+ return (
64
+ <span
65
+ data-slot="avatar-badge"
66
+ className={cn(
67
+ "absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none",
68
+ "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
69
+ "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
70
+ "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
71
+ className
72
+ )}
73
+ {...props}
74
+ />
75
+ )
76
+ }
77
+
78
+ function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) {
79
+ return (
80
+ <div
81
+ data-slot="avatar-group"
82
+ className={cn(
83
+ "group/avatar-group flex -space-x-1.5 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-surface",
84
+ className
85
+ )}
86
+ {...props}
87
+ />
88
+ )
89
+ }
90
+
91
+ function AvatarGroupCount({
92
+ className,
93
+ ...props
94
+ }: React.ComponentProps<"div">) {
95
+ return (
96
+ <div
97
+ data-slot="avatar-group-count"
98
+ className={cn(
99
+ "relative flex size-5.5 shrink-0 items-center justify-center rounded-full bg-hover text-xs font-medium text-ink-2 ring-2 ring-surface group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
100
+ className
101
+ )}
102
+ {...props}
103
+ />
104
+ )
105
+ }
106
+
107
+ export {
108
+ Avatar,
109
+ AvatarImage,
110
+ AvatarFallback,
111
+ AvatarBadge,
112
+ AvatarGroup,
113
+ AvatarGroupCount,
114
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Generated from shadcn/ui new-york-v4 "badge" by scripts/tailor-shadcn.mjs. Do not edit by hand.
3
+ * TwoUX changes:
4
+ * - Status badges are small soft pills, square-ish to read as labels, not buttons
5
+ * - Soft tones: the word carries the meaning, colour repeats it (WCAG 1.4.1)
6
+ * - Adds dot: a leading dot for scanning long columns
7
+ */
8
+ import * as React from "react"
9
+ import { cva, type VariantProps } from "class-variance-authority"
10
+ import { cn } from "../lib/cn"
11
+ import { Slot } from "radix-ui"
12
+
13
+ const badgeVariants = cva(
14
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden h-5 rounded-xs border border-transparent px-1.5 text-sm font-medium whitespace-nowrap transition-[color,background-color,border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out) focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:not-focus-visible:border-destructive-edge [&>svg]:pointer-events-none [&>svg]:size-3",
15
+ {
16
+ variants: {
17
+ variant: {
18
+ default: "border-primary/30 bg-primary-soft text-primary-ink",
19
+ success: "border-ok-line bg-ok-bg text-ok",
20
+ warning: "border-warn-line bg-warn-bg text-warn",
21
+ secondary: "border-neutral-line bg-neutral-bg text-neutral",
22
+ destructive: "border-bad-line bg-bad-bg text-bad",
23
+ outline:
24
+ "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
25
+ ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
26
+ link: "text-primary underline-offset-4 [a&]:hover:underline",
27
+ },
28
+ },
29
+ defaultVariants: {
30
+ variant: "default",
31
+ },
32
+ }
33
+ )
34
+
35
+ function Badge({
36
+ className,
37
+ variant = "default",
38
+ asChild = false,
39
+ dot = false,
40
+ children,
41
+ ...props
42
+ }: React.ComponentProps<"span"> &
43
+ VariantProps<typeof badgeVariants> & { asChild?: boolean; dot?: boolean }) {
44
+ const Comp = asChild ? Slot.Root : "span"
45
+
46
+ return (
47
+ <Comp
48
+ data-slot="badge"
49
+ data-variant={variant}
50
+ className={cn(badgeVariants({ variant }), className)}
51
+ {...props}
52
+ >
53
+ {dot && !asChild && <span aria-hidden="true" className="size-1.5 rounded-full bg-current" />}
54
+ {children}
55
+ </Comp>
56
+ )
57
+ }
58
+
59
+ export { Badge, badgeVariants }