betterstart-cli 0.0.118 → 0.0.120

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 (128) hide show
  1. package/dist/assets/adapters/next/integrations/resend/actions/render-password-reset-email.ts +5 -5
  2. package/dist/assets/adapters/next/templates/init/admin-globals.css +169 -61
  3. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-branding-skeleton.tsx +1 -1
  4. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu-skeleton.tsx +1 -1
  5. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx +3 -3
  6. package/dist/assets/adapters/next/templates/init/components/layouts/content-skeleton.tsx +13 -13
  7. package/dist/assets/adapters/next/templates/init/components/layouts/sidebar-branding.tsx +2 -2
  8. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid-body.tsx +1 -1
  9. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid-header.tsx +1 -1
  10. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid.tsx +1 -1
  11. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table-pagination.tsx +2 -2
  12. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +3 -7
  13. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +2 -2
  14. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/plain-code-fallback.tsx +1 -1
  15. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +1 -1
  16. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +2 -2
  17. package/dist/assets/adapters/next/templates/init/components/shared/entity-metadata.tsx +1 -1
  18. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +2 -2
  19. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +2 -2
  20. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-drawer.tsx +2 -2
  21. package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +2 -2
  22. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +5 -5
  23. package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-item.tsx +3 -3
  24. package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +2 -2
  25. package/dist/assets/adapters/next/templates/init/components/shared/media/media-preview.tsx +1 -1
  26. package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +1 -1
  27. package/dist/assets/adapters/next/templates/init/components/shared/page-header.tsx +1 -1
  28. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-drag-overlay-item.tsx +1 -1
  29. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-item.tsx +1 -1
  30. package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +3 -3
  31. package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +2 -2
  32. package/dist/assets/adapters/next/templates/init/pages/forgot-password-page-skeleton.tsx +8 -8
  33. package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +2 -2
  34. package/dist/assets/adapters/next/templates/init/pages/login-page-skeleton.tsx +8 -8
  35. package/dist/assets/adapters/next/templates/init/pages/minimal-account-shell.tsx +1 -1
  36. package/dist/assets/adapters/next/templates/init/pages/profile/profile-form.tsx +2 -2
  37. package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +3 -6
  38. package/dist/assets/adapters/next/templates/init/pages/reset-password-page-skeleton.tsx +8 -8
  39. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-columns.tsx +4 -4
  40. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-row.tsx +2 -2
  41. package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-columns.tsx +1 -1
  42. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/delete-webhook-dialog.tsx +1 -1
  43. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-endpoint-dialog.tsx +12 -16
  44. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-columns.tsx +9 -9
  45. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-columns.tsx +7 -7
  46. package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +4 -4
  47. package/dist/assets/adapters/next/templates/init/utils/editor/inline-math-node-view.ts +1 -1
  48. package/dist/assets/adapters/next/templates/init/utils/editor/raw-content-block-node-view.ts +1 -1
  49. package/dist/assets/adapters/next/templates/init/utils/email/render-form-submission-rows.ts +1 -1
  50. package/dist/assets/adapters/next/templates/init/utils/email/render-notification-email.ts +3 -3
  51. package/dist/assets/adapters/next/templates/init/utils/email/render-thank-you-email.ts +3 -3
  52. package/dist/assets/shared-assets/react-admin/custom/content-editor/index.tsx +1 -1
  53. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-bubble-menu.tsx +1 -1
  54. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-editor-controls.tsx +1 -1
  55. package/dist/assets/shared-assets/react-admin/custom/content-editor/remove-table-part-icon.tsx +1 -1
  56. package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +2 -2
  57. package/dist/assets/shared-assets/react-admin/custom/content-editor/slash-command-menu.tsx +2 -4
  58. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +2 -2
  59. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-add-controls.tsx +4 -4
  60. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +1 -1
  61. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/removable-image-node/removable-image-node.tsx +3 -3
  62. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/highlight-swatch.tsx +2 -2
  63. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover-content.tsx +1 -1
  64. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +1 -1
  65. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/highlight-color-button.tsx +2 -2
  66. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +1 -1
  67. package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +9 -10
  68. package/dist/assets/shared-assets/react-admin/custom/dynamic-list-field.tsx +2 -2
  69. package/dist/assets/shared-assets/react-admin/custom/gallery-field.tsx +4 -4
  70. package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +2 -3
  71. package/dist/assets/shared-assets/react-admin/custom/icons-column-skeleton.tsx +2 -2
  72. package/dist/assets/shared-assets/react-admin/custom/media-field.tsx +3 -3
  73. package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +1 -1
  74. package/dist/assets/shared-assets/react-admin/custom/placeholder-card.tsx +2 -2
  75. package/dist/assets/shared-assets/react-admin/custom/placeholder.tsx +3 -3
  76. package/dist/assets/shared-assets/react-admin/custom/sortable-gallery-item.tsx +1 -1
  77. package/dist/assets/shared-assets/react-admin/custom/upload-dropzone.tsx +3 -5
  78. package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +3 -3
  79. package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +4 -4
  80. package/dist/assets/shared-assets/react-admin/ui/alert.tsx +2 -2
  81. package/dist/assets/shared-assets/react-admin/ui/avatar.tsx +5 -5
  82. package/dist/assets/shared-assets/react-admin/ui/badge.tsx +2 -3
  83. package/dist/assets/shared-assets/react-admin/ui/breadcrumb.tsx +1 -1
  84. package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +4 -4
  85. package/dist/assets/shared-assets/react-admin/ui/button.tsx +2 -2
  86. package/dist/assets/shared-assets/react-admin/ui/calendar.tsx +15 -21
  87. package/dist/assets/shared-assets/react-admin/ui/card.tsx +5 -5
  88. package/dist/assets/shared-assets/react-admin/ui/carousel.tsx +2 -2
  89. package/dist/assets/shared-assets/react-admin/ui/chart.tsx +4 -4
  90. package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +1 -1
  91. package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +6 -6
  92. package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +7 -7
  93. package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +3 -3
  94. package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +5 -5
  95. package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +8 -8
  96. package/dist/assets/shared-assets/react-admin/ui/empty.tsx +5 -5
  97. package/dist/assets/shared-assets/react-admin/ui/field.tsx +6 -12
  98. package/dist/assets/shared-assets/react-admin/ui/form.tsx +2 -2
  99. package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +1 -1
  100. package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +6 -6
  101. package/dist/assets/shared-assets/react-admin/ui/input-otp.tsx +2 -2
  102. package/dist/assets/shared-assets/react-admin/ui/input.tsx +1 -1
  103. package/dist/assets/shared-assets/react-admin/ui/item.tsx +4 -4
  104. package/dist/assets/shared-assets/react-admin/ui/kbd.tsx +1 -1
  105. package/dist/assets/shared-assets/react-admin/ui/label.tsx +1 -1
  106. package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +10 -10
  107. package/dist/assets/shared-assets/react-admin/ui/native-select.tsx +1 -1
  108. package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +5 -5
  109. package/dist/assets/shared-assets/react-admin/ui/popover.tsx +3 -7
  110. package/dist/assets/shared-assets/react-admin/ui/progress.tsx +3 -3
  111. package/dist/assets/shared-assets/react-admin/ui/radio-group.tsx +2 -2
  112. package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
  113. package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +2 -2
  114. package/dist/assets/shared-assets/react-admin/ui/select.tsx +4 -4
  115. package/dist/assets/shared-assets/react-admin/ui/sheet.tsx +3 -3
  116. package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +16 -16
  117. package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
  118. package/dist/assets/shared-assets/react-admin/ui/slider.tsx +2 -2
  119. package/dist/assets/shared-assets/react-admin/ui/switch.tsx +2 -2
  120. package/dist/assets/shared-assets/react-admin/ui/table.tsx +2 -6
  121. package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +3 -3
  122. package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +1 -1
  123. package/dist/assets/shared-assets/react-admin/ui/toggle-group.tsx +2 -2
  124. package/dist/assets/shared-assets/react-admin/ui/toggle.tsx +1 -1
  125. package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +2 -2
  126. package/dist/cli.js +105 -77
  127. package/dist/cli.js.map +1 -1
  128. package/package.json +1 -1
@@ -24,7 +24,7 @@ export function EntityVersionItem({
24
24
  const authorLabel = author?.name || author?.email || 'System'
25
25
 
26
26
  return (
27
- <div className="flex items-center justify-between gap-3 rounded-sm border border-border px-3 py-3 shadow-input">
27
+ <div className="flex items-center justify-between gap-3 rounded border border-border px-3 py-3 shadow-input">
28
28
  <div className="flex min-w-0 items-center gap-3">
29
29
  <Avatar size="sm">
30
30
  {author?.image ? <AvatarImage src={author.image} alt={authorLabel} /> : null}
@@ -36,7 +36,7 @@ export function EntityVersionItem({
36
36
  <Badge variant="secondary">v{version.version}</Badge>
37
37
  </div>
38
38
  <Tooltip>
39
- <TooltipTrigger render={<p className="w-fit text-xs text-muted-foreground" />}>
39
+ <TooltipTrigger render={<p className="w-fit text-muted-foreground" />}>
40
40
  Saved {formatDistanceToNow(createdDate, { addSuffix: true })}
41
41
  </TooltipTrigger>
42
42
  <TooltipContent>{format(createdDate, 'PPpp')}</TooltipContent>
@@ -22,7 +22,7 @@ export function EntityVersionsCurrentRow({ updatedAt, author }: EntityVersionsCu
22
22
  const authorLabel = author?.name || author?.email || 'System'
23
23
 
24
24
  return (
25
- <div className="flex items-center justify-between gap-3 rounded-sm border border-border bg-card px-3 py-3 shadow-input">
25
+ <div className="flex items-center justify-between gap-3 rounded border border-border bg-card px-3 py-3 shadow-input">
26
26
  <div className="flex min-w-0 items-center gap-3">
27
27
  <Avatar size="sm">
28
28
  {author?.image ? <AvatarImage src={author.image} alt={authorLabel} /> : null}
@@ -34,7 +34,7 @@ export function EntityVersionsCurrentRow({ updatedAt, author }: EntityVersionsCu
34
34
  <Badge variant="outline">Current</Badge>
35
35
  </div>
36
36
  <Tooltip>
37
- <TooltipTrigger render={<p className="w-fit text-xs text-muted-foreground" />}>
37
+ <TooltipTrigger render={<p className="w-fit text-muted-foreground" />}>
38
38
  Edited {formatDistanceToNow(updatedDate, { addSuffix: true })}
39
39
  </TooltipTrigger>
40
40
  <TooltipContent>{format(updatedDate, 'PPpp')}</TooltipContent>
@@ -54,12 +54,12 @@ export function EntityVersionsDrawer({
54
54
  <div className="flex flex-col gap-1 px-6">
55
55
  <EntityVersionsCurrentRow updatedAt={currentUpdatedAt} author={currentAuthor} />
56
56
  {isPending ? (
57
- <p className="rounded-sm border border-dashed border-border px-3 py-6 text-center text-sm text-muted-foreground">
57
+ <p className="rounded border border-dashed border-border px-3 py-6 text-center text-muted-foreground">
58
58
  Loading versions…
59
59
  </p>
60
60
  ) : null}
61
61
  {!isPending && versions.length === 0 ? (
62
- <p className="rounded-sm border border-dashed border-border px-3 py-6 text-center text-sm text-muted-foreground">
62
+ <p className="rounded border border-dashed border-border px-3 py-6 text-center text-muted-foreground">
63
63
  No previous versions yet.
64
64
  </p>
65
65
  ) : null}
@@ -94,7 +94,7 @@ export function EditMediaDialogContent({
94
94
  <DrawerContent className="h-full w-full overflow-hidden">
95
95
  <div
96
96
  ref={handleDrawerContainerRef}
97
- className="pointer-events-none absolute inset-3 z-20 overflow-hidden rounded-sm"
97
+ className="pointer-events-none absolute inset-3 z-20 overflow-hidden rounded"
98
98
  />
99
99
  <div className="relative z-10 flex min-h-0 flex-1 flex-col gap-3 overflow-hidden">
100
100
  <DrawerHeader>
@@ -109,7 +109,7 @@ export function EditMediaDialogContent({
109
109
  >
110
110
  <Card>
111
111
  <CardContent className="p-0">
112
- <div className="relative aspect-video overflow-hidden rounded-sm bg-background">
112
+ <div className="relative aspect-video overflow-hidden rounded bg-background">
113
113
  <MediaPreview media={media} showMetadata />
114
114
  </div>
115
115
  </CardContent>
@@ -111,18 +111,18 @@ export function MediaDeleteDrawer({
111
111
  </DrawerTrigger>
112
112
  <DrawerContent className="pointer-events-auto max-h-[calc(100%-1rem)] overflow-hidden p-3 outline-none">
113
113
  <div
114
- className="overflow-hidden rounded-sm border border-border bg-popover text-sm text-popover-foreground shadow-2xl transition-[height] duration-200 ease-out"
114
+ className="overflow-hidden rounded border border-border bg-popover text-popover-foreground shadow-2xl transition-[height] duration-200 ease-out"
115
115
  style={contentHeight ? { height: contentHeight } : undefined}
116
116
  >
117
117
  <div ref={contentRef} className="max-h-[calc(100vh-8rem)] overflow-y-auto px-4 pt-4 pb-4">
118
- <div aria-hidden="true" className="mx-auto mb-5 h-1.5 w-20 rounded-sm bg-muted" />
119
- <div className="mb-3 flex size-10 items-center justify-center rounded-sm bg-destructive/10 text-foreground">
118
+ <div aria-hidden="true" className="mx-auto mb-5 h-1.5 w-20 rounded bg-muted" />
119
+ <div className="mb-3 flex size-10 items-center justify-center rounded bg-destructive/10 text-foreground">
120
120
  <TriangleAlert className="size-5" />
121
121
  </div>
122
- <DrawerTitle className="font-heading text-base font-medium text-foreground">
122
+ <DrawerTitle className="font-heading font-medium text-foreground">
123
123
  Delete this media?
124
124
  </DrawerTitle>
125
- <DrawerDescription className="mt-1 text-sm text-muted-foreground">
125
+ <DrawerDescription className="mt-1 text-muted-foreground">
126
126
  This deletes {media.filename} from the media library. The stored file is not deleted.
127
127
  </DrawerDescription>
128
128
  <div className="mt-5 grid grid-cols-2 gap-2">
@@ -34,7 +34,7 @@ export const MediaGridItem = React.memo(function MediaGridItem({
34
34
  'border-highlight': selected
35
35
  })}
36
36
  >
37
- <div className="flex aspect-square size-full overflow-hidden rounded-sm border border-border bg-background">
37
+ <div className="flex aspect-square size-full overflow-hidden rounded border border-border bg-background">
38
38
  <MediaPreview media={item} isFilled />
39
39
  </div>
40
40
 
@@ -42,7 +42,7 @@ export const MediaGridItem = React.memo(function MediaGridItem({
42
42
  <Checkbox
43
43
  aria-label={selected ? `Deselect ${item.filename}` : `Select ${item.filename}`}
44
44
  tabIndex={-1}
45
- className={cn('absolute top-3 right-3 z-10 rounded-sm bg-card', {
45
+ className={cn('absolute top-3 right-3 z-10 rounded bg-card', {
46
46
  'ring ring-white': selected
47
47
  })}
48
48
  checked={selected}
@@ -52,7 +52,7 @@ export const MediaGridItem = React.memo(function MediaGridItem({
52
52
  </CardContent>
53
53
  <CardFooter>
54
54
  <span
55
- className={cn('w-full truncate text-sm text-muted-foreground', {
55
+ className={cn('w-full truncate text-muted-foreground', {
56
56
  'group-hover:text-foreground': Boolean(onClick)
57
57
  })}
58
58
  >
@@ -79,7 +79,7 @@ export function MediaGridPagination({
79
79
  >
80
80
  {!isMinimal && (
81
81
  <div className="flex items-center gap-2">
82
- <span className="text-sm text-muted-foreground">{perPage}</span>
82
+ <span className="text-muted-foreground">{perPage}</span>
83
83
  <Select value={pageSizeValue} onValueChange={handlePageSizeChange}>
84
84
  <SelectTrigger className="h-8 w-25">
85
85
  <SelectValue>{pageSize}</SelectValue>
@@ -101,7 +101,7 @@ export function MediaGridPagination({
101
101
  </Button>
102
102
 
103
103
  {!isMinimal && (
104
- <div className="text-sm text-muted-foreground">
104
+ <div className="text-muted-foreground">
105
105
  Page {page} of {pageCount}
106
106
  </div>
107
107
  )}
@@ -37,7 +37,7 @@ export function MediaPreview({ media, isFilled = false, showMetadata = false }:
37
37
  />
38
38
 
39
39
  {showMetadata && (
40
- <div className="pointer-events-none absolute inset-x-0 bottom-0 z-10 flex w-full items-center justify-between gap-4 bg-[linear-gradient(to_top,color-mix(in_oklab,var(--primary)_86%,transparent)_0%,color-mix(in_oklab,var(--primary)_52%,transparent)_48%,transparent_100%)] px-3 py-2 text-left text-xs font-medium text-white">
40
+ <div className="pointer-events-none absolute inset-x-0 bottom-0 z-10 flex w-full items-center justify-between gap-4 bg-[linear-gradient(to_top,color-mix(in_oklab,var(--primary)_86%,transparent)_0%,color-mix(in_oklab,var(--primary)_52%,transparent)_48%,transparent_100%)] px-3 py-2 text-left font-medium text-white">
41
41
  <p className="truncate">{media.filename}</p>
42
42
  <p className="shrink-0">
43
43
  {media.contentType} &middot; {(media.size / 1024).toFixed(1)} KB
@@ -142,7 +142,7 @@ export function MediaUrlImporter({ onImportFromUrl, accept, className }: MediaUr
142
142
  </Form>
143
143
 
144
144
  <div className="flex w-full flex-col items-center text-center">
145
- <p className="text-sm text-muted-foreground">{urlHelpText}</p>
145
+ <p className="text-muted-foreground">{urlHelpText}</p>
146
146
  </div>
147
147
  </div>
148
148
  </CardContent>
@@ -32,7 +32,7 @@ export function PageHeader({
32
32
  )}
33
33
  </div>
34
34
  <div className="flex min-w-0 items-center justify-center gap-2">
35
- <h2 className="truncate text-sm font-medium tracking-tight">{title}</h2>
35
+ <h2 className="truncate font-medium tracking-tight">{title}</h2>
36
36
  </div>
37
37
  <div className="flex w-full min-w-0 items-center justify-end gap-2">
38
38
  {children}
@@ -9,7 +9,7 @@ export function DragOverlayItem({ label }: { label: string }) {
9
9
  className="w-full shrink-0 cursor-grabbing touch-none justify-start gap-2 px-2 font-normal"
10
10
  >
11
11
  <GripVertical strokeWidth={1} />
12
- <span className="min-w-0 truncate text-sm">{label}</span>
12
+ <span className="min-w-0 truncate">{label}</span>
13
13
  </Button>
14
14
  )
15
15
  }
@@ -25,7 +25,7 @@ export function SortableItem({ id, label }: SortOrderItemData) {
25
25
  {...listeners}
26
26
  >
27
27
  <GripVertical strokeWidth={1} />
28
- <span className="min-w-0 truncate text-sm">{label}</span>
28
+ <span className="min-w-0 truncate">{label}</span>
29
29
  </Button>
30
30
  </div>
31
31
  )
@@ -46,7 +46,7 @@ export default function DashboardPage() {
46
46
  <CardContent className="p-10!">
47
47
  <div className="grid grid-cols-2 gap-10">
48
48
  <div className="flex w-full flex-col gap-1">
49
- <p className="text-base font-medium">Hey, let's get started</p>
49
+ <p className="font-medium">Hey, let's get started</p>
50
50
  <p className="text-muted-foreground">
51
51
  Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quos.
52
52
  </p>
@@ -64,12 +64,12 @@ export default function DashboardPage() {
64
64
  <div className="flex w-full flex-col gap-1">
65
65
  {envVariables.map((env) => (
66
66
  <div
67
- className="flex w-full flex-col rounded-sm border border-border bg-card py-2 pr-2 pl-4 shadow-card"
67
+ className="flex w-full flex-col rounded border border-border bg-card py-2 pr-2 pl-4 shadow-card"
68
68
  key={env.name}
69
69
  >
70
70
  <div className="flex items-center justify-between">
71
71
  <div className="flex items-center gap-2">
72
- <span className="">{env.label}</span>
72
+ <span>{env.label}</span>
73
73
  <Badge variant={env.value ? 'success' : 'destructive'}>
74
74
  {env.value ? 'Connected' : 'Not configured'}
75
75
  </Badge>
@@ -82,7 +82,7 @@ export function ForgotPasswordForm({ className, ...props }: React.ComponentProps
82
82
  >
83
83
  <FieldGroup className="gap-10 pb-12">
84
84
  <div className="flex flex-col items-start">
85
- <h1 className="text-xl font-medium">Forgot password</h1>
85
+ <h1 className="font-medium">Forgot password</h1>
86
86
  <p className="text-balance text-muted-foreground">
87
87
  Enter your email and we&apos;ll send you a reset link when email delivery is
88
88
  enabled
@@ -110,7 +110,7 @@ export function ForgotPasswordForm({ className, ...props }: React.ComponentProps
110
110
  </Field>
111
111
  <Link
112
112
  href="/admin/login"
113
- className="text-center text-sm underline-offset-4 hover:underline"
113
+ className="text-center underline-offset-4 hover:underline"
114
114
  >
115
115
  Back to sign in
116
116
  </Link>
@@ -1,21 +1,21 @@
1
1
  export function ForgotPasswordPageSkeleton() {
2
2
  return (
3
- <div className="overflow-hidden rounded-sm border bg-card">
3
+ <div className="overflow-hidden rounded border bg-card">
4
4
  <div className="grid grid-cols-[5fr_7fr]">
5
5
  <div className="block min-h-auth-forgot-panel bg-muted" />
6
6
  <div className="flex min-h-auth-forgot-panel flex-col gap-10 p-20">
7
7
  <div className="space-y-3">
8
- <div className="h-6 w-40 animate-pulse rounded-md bg-muted" />
9
- <div className="h-4 w-full max-w-72 animate-pulse rounded-md bg-muted" />
10
- <div className="h-4 w-52 animate-pulse rounded-md bg-muted" />
8
+ <div className="h-6 w-40 animate-pulse rounded bg-muted" />
9
+ <div className="h-4 w-full max-w-72 animate-pulse rounded bg-muted" />
10
+ <div className="h-4 w-52 animate-pulse rounded bg-muted" />
11
11
  </div>
12
12
  <div className="space-y-4">
13
13
  <div className="space-y-2">
14
- <div className="h-4 w-12 animate-pulse rounded-md bg-muted" />
15
- <div className="h-10 w-full animate-pulse rounded-md bg-muted" />
14
+ <div className="h-4 w-12 animate-pulse rounded bg-muted" />
15
+ <div className="h-10 w-full animate-pulse rounded bg-muted" />
16
16
  </div>
17
- <div className="h-10 w-full animate-pulse rounded-md bg-muted" />
18
- <div className="mx-auto h-4 w-20 animate-pulse rounded-md bg-muted" />
17
+ <div className="h-10 w-full animate-pulse rounded bg-muted" />
18
+ <div className="mx-auto h-4 w-20 animate-pulse rounded bg-muted" />
19
19
  </div>
20
20
  </div>
21
21
  </div>
@@ -98,7 +98,7 @@ export function LoginForm({ className, ...props }: React.ComponentProps<'div'>)
98
98
  >
99
99
  <FieldGroup className="gap-10 pb-12">
100
100
  <div className="flex flex-col items-start">
101
- <h1 className="text-xl font-medium">Sign In</h1>
101
+ <h1 className="font-medium">Sign In</h1>
102
102
  </div>
103
103
  <div className="flex flex-col gap-4">
104
104
  <Field>
@@ -119,7 +119,7 @@ export function LoginForm({ className, ...props }: React.ComponentProps<'div'>)
119
119
  <FieldLabel htmlFor="password">Password</FieldLabel>
120
120
  <Link
121
121
  href="/admin/forgot-password"
122
- className="ml-auto text-sm underline-offset-4 hover:underline"
122
+ className="ml-auto underline-offset-4 hover:underline"
123
123
  tabIndex={-1}
124
124
  >
125
125
  Forgot password?
@@ -1,23 +1,23 @@
1
1
  export function LoginPageSkeleton() {
2
2
  return (
3
- <div className="overflow-hidden rounded-sm border bg-card">
3
+ <div className="overflow-hidden rounded border bg-card">
4
4
  <div className="grid grid-cols-[5fr_7fr]">
5
5
  <div className="block min-h-auth-login-panel bg-muted" />
6
6
  <div className="flex min-h-auth-login-panel flex-col gap-10 p-20">
7
7
  <div className="space-y-3">
8
- <div className="h-6 w-32 animate-pulse rounded-md bg-muted" />
9
- <div className="h-4 w-40 animate-pulse rounded-md bg-muted" />
8
+ <div className="h-6 w-32 animate-pulse rounded bg-muted" />
9
+ <div className="h-4 w-40 animate-pulse rounded bg-muted" />
10
10
  </div>
11
11
  <div className="space-y-4">
12
12
  <div className="space-y-2">
13
- <div className="h-4 w-12 animate-pulse rounded-md bg-muted" />
14
- <div className="h-10 w-full animate-pulse rounded-md bg-muted" />
13
+ <div className="h-4 w-12 animate-pulse rounded bg-muted" />
14
+ <div className="h-10 w-full animate-pulse rounded bg-muted" />
15
15
  </div>
16
16
  <div className="space-y-2">
17
- <div className="h-4 w-20 animate-pulse rounded-md bg-muted" />
18
- <div className="h-10 w-full animate-pulse rounded-md bg-muted" />
17
+ <div className="h-4 w-20 animate-pulse rounded bg-muted" />
18
+ <div className="h-10 w-full animate-pulse rounded bg-muted" />
19
19
  </div>
20
- <div className="h-10 w-full animate-pulse rounded-md bg-muted" />
20
+ <div className="h-10 w-full animate-pulse rounded bg-muted" />
21
21
  </div>
22
22
  </div>
23
23
  </div>
@@ -13,7 +13,7 @@ export function MinimalAccountShell({
13
13
  <header className="sticky top-0 z-50 flex h-14 items-center justify-between border-b bg-background px-6">
14
14
  <Link
15
15
  href="/admin/profile"
16
- className="text-sm font-medium transition-colors hover:text-foreground/80"
16
+ className="font-medium transition-colors hover:text-foreground/80"
17
17
  >
18
18
  {name}
19
19
  </Link>
@@ -201,7 +201,7 @@ export function ProfileForm({ user }: ProfileFormProps) {
201
201
  <div className="flex items-center gap-4 pl-1">
202
202
  <Avatar className="size-12">
203
203
  <AvatarImage src={imageValue || undefined} />
204
- <AvatarFallback className="text-lg font-semibold">
204
+ <AvatarFallback className="font-semibold">
205
205
  {user.name?.charAt(0) ?? '?'}
206
206
  </AvatarFallback>
207
207
  </Avatar>
@@ -393,7 +393,7 @@ export function ProfileForm({ user }: ProfileFormProps) {
393
393
  <CardDescription>Send a password reset link to your email address</CardDescription>
394
394
  </CardHeader>
395
395
  <CardContent>
396
- <p className="text-sm text-muted-foreground">
396
+ <p className="text-muted-foreground">
397
397
  A reset link will be sent to{' '}
398
398
  <span className="font-medium text-foreground">{user.email}</span>
399
399
  </p>
@@ -64,15 +64,12 @@ export function ResetPasswordForm({ className, ...props }: React.ComponentProps<
64
64
  <div className="p-20">
65
65
  <FieldGroup className="gap-10 pb-12">
66
66
  <div className="flex flex-col items-start">
67
- <h1 className="text-xl font-medium">Invalid reset link</h1>
67
+ <h1 className="font-medium">Invalid reset link</h1>
68
68
  <p className="text-balance text-muted-foreground">
69
69
  This password reset link is invalid or has expired. Please request a new one.
70
70
  </p>
71
71
  </div>
72
- <Link
73
- href="/admin/forgot-password"
74
- className="text-sm underline-offset-4 hover:underline"
75
- >
72
+ <Link href="/admin/forgot-password" className="underline-offset-4 hover:underline">
76
73
  Request a new reset link
77
74
  </Link>
78
75
  </FieldGroup>
@@ -123,7 +120,7 @@ export function ResetPasswordForm({ className, ...props }: React.ComponentProps<
123
120
  >
124
121
  <FieldGroup className="gap-10 pb-12">
125
122
  <div className="flex flex-col items-start">
126
- <h1 className="text-xl font-medium">Reset password</h1>
123
+ <h1 className="font-medium">Reset password</h1>
127
124
  <p className="text-balance text-muted-foreground">
128
125
  Enter your new password below
129
126
  </p>
@@ -1,23 +1,23 @@
1
1
  export function ResetPasswordPageSkeleton() {
2
2
  return (
3
- <div className="overflow-hidden rounded-sm border bg-card">
3
+ <div className="overflow-hidden rounded border bg-card">
4
4
  <div className="grid grid-cols-[5fr_7fr]">
5
5
  <div className="block min-h-auth-reset-panel bg-muted" />
6
6
  <div className="flex min-h-auth-reset-panel flex-col gap-10 p-20">
7
7
  <div className="space-y-3">
8
- <div className="h-6 w-36 animate-pulse rounded-md bg-muted" />
9
- <div className="h-4 w-56 animate-pulse rounded-md bg-muted" />
8
+ <div className="h-6 w-36 animate-pulse rounded bg-muted" />
9
+ <div className="h-4 w-56 animate-pulse rounded bg-muted" />
10
10
  </div>
11
11
  <div className="space-y-4">
12
12
  <div className="space-y-2">
13
- <div className="h-4 w-28 animate-pulse rounded-md bg-muted" />
14
- <div className="h-10 w-full animate-pulse rounded-md bg-muted" />
13
+ <div className="h-4 w-28 animate-pulse rounded bg-muted" />
14
+ <div className="h-10 w-full animate-pulse rounded bg-muted" />
15
15
  </div>
16
16
  <div className="space-y-2">
17
- <div className="h-4 w-32 animate-pulse rounded-md bg-muted" />
18
- <div className="h-10 w-full animate-pulse rounded-md bg-muted" />
17
+ <div className="h-4 w-32 animate-pulse rounded bg-muted" />
18
+ <div className="h-10 w-full animate-pulse rounded bg-muted" />
19
19
  </div>
20
- <div className="h-10 w-full animate-pulse rounded-md bg-muted" />
20
+ <div className="h-10 w-full animate-pulse rounded bg-muted" />
21
21
  </div>
22
22
  </div>
23
23
  </div>
@@ -53,7 +53,7 @@ function SortableAuditLogHeader({
53
53
  <Button
54
54
  variant="ghost"
55
55
  onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}
56
- className="group w-full min-w-0 scale-100! justify-start overflow-hidden rounded-none border-none bg-transparent! px-0!"
56
+ className="group w-full min-w-0 scale-100! justify-start overflow-hidden border-none bg-transparent! px-0!"
57
57
  aria-label={`Sort by ${label}, ${sortLabel}`}
58
58
  aria-sort={
59
59
  sortDirection === 'asc' ? 'ascending' : sortDirection === 'desc' ? 'descending' : 'none'
@@ -82,7 +82,7 @@ export function createAuditLogColumns(): ColumnDef<AuditLogEntry>[] {
82
82
  <span className="truncate font-medium">
83
83
  {row.original.targetLabel ?? row.original.targetId ?? 'Unknown'}
84
84
  </span>
85
- <span className="truncate text-xs text-muted-foreground">{row.original.targetType}</span>
85
+ <span className="truncate text-muted-foreground">{row.original.targetType}</span>
86
86
  </div>
87
87
  )
88
88
  },
@@ -95,7 +95,7 @@ export function createAuditLogColumns(): ColumnDef<AuditLogEntry>[] {
95
95
  <span className="truncate">
96
96
  {row.original.actorEmail ?? row.original.actorName ?? 'Unknown'}
97
97
  </span>
98
- <span className="truncate text-xs text-muted-foreground">
98
+ <span className="truncate text-muted-foreground">
99
99
  {row.original.actorRole ?? 'No role'}
100
100
  </span>
101
101
  </div>
@@ -120,7 +120,7 @@ export function createAuditLogColumns(): ColumnDef<AuditLogEntry>[] {
120
120
  cell: ({ row }) => (
121
121
  <div className="text-muted-foreground">
122
122
  <div className="truncate">{row.original.sourceType}</div>
123
- <div className="truncate text-xs">{row.original.ipAddress ?? 'No IP'}</div>
123
+ <div className="truncate">{row.original.ipAddress ?? 'No IP'}</div>
124
124
  </div>
125
125
  )
126
126
  },
@@ -8,8 +8,8 @@ interface AuditLogDetailRowProps {
8
8
  export function AuditLogDetailRow({ label, value }: AuditLogDetailRowProps) {
9
9
  return (
10
10
  <div className="grid grid-cols-audit-detail gap-3 border-b border-border px-4 py-2 last:border-b-0">
11
- <dt className="text-sm font-medium text-muted-foreground">{label}</dt>
12
- <dd className="min-w-0 text-sm break-words text-foreground">{value || 'Unknown'}</dd>
11
+ <dt className="font-medium text-muted-foreground">{label}</dt>
12
+ <dd className="min-w-0 break-words text-foreground">{value || 'Unknown'}</dd>
13
13
  </div>
14
14
  )
15
15
  }
@@ -22,7 +22,7 @@ export function createFormSettingsColumns(isPending: boolean): ColumnDef<FormSet
22
22
  isPending ? (
23
23
  <span className="text-muted-foreground">Loading…</span>
24
24
  ) : row.original.notificationEmails ? (
25
- <span className="truncate font-mono text-xs">{row.original.notificationEmails}</span>
25
+ <span className="truncate font-mono">{row.original.notificationEmails}</span>
26
26
  ) : (
27
27
  <span className="text-muted-foreground">No emails configured</span>
28
28
  )
@@ -63,7 +63,7 @@ export function DeleteWebhookDialog({ webhook, open, onOpenChange }: DeleteWebho
63
63
  </DialogDescription>
64
64
  </DialogHeader>
65
65
  <DialogBody>
66
- <p className="text-sm text-muted-foreground">This action cannot be undone.</p>
66
+ <p className="text-muted-foreground">This action cannot be undone.</p>
67
67
  </DialogBody>
68
68
  <DialogFooter showCloseButton={true}>
69
69
  <Button
@@ -244,7 +244,7 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
244
244
  control={form.control}
245
245
  name="enabled"
246
246
  render={({ field }) => (
247
- <FormItem className="flex items-center justify-between rounded-md border border-border px-3 py-2">
247
+ <FormItem className="flex items-center justify-between rounded border border-border px-3 py-2">
248
248
  <FormLabel>Enabled</FormLabel>
249
249
  <FormControl>
250
250
  <Switch
@@ -257,10 +257,10 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
257
257
  )}
258
258
  />
259
259
  {isEdit && (
260
- <div className="space-y-2 rounded-md border border-border p-3">
261
- <p className="text-sm leading-none font-medium">Signing secret</p>
260
+ <div className="space-y-2 rounded border border-border p-3">
261
+ <p className="leading-none font-medium">Signing secret</p>
262
262
  <div className="flex items-center gap-2">
263
- <span className="min-w-0 flex-1 truncate font-mono text-xs">
263
+ <span className="min-w-0 flex-1 truncate font-mono">
264
264
  {secret ?? 'whsec_••••••••••••••••'}
265
265
  </span>
266
266
  <Button
@@ -286,7 +286,7 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
286
286
  {regenerateSecretMutation.isPending ? 'Regenerating…' : 'Regenerate'}
287
287
  </Button>
288
288
  </div>
289
- <p className="text-xs text-muted-foreground">
289
+ <p className="text-muted-foreground">
290
290
  Requests carry x-webhook-id, x-webhook-timestamp, and an HMAC-SHA256
291
291
  x-webhook-signature of the body.
292
292
  </p>
@@ -299,8 +299,8 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
299
299
  render={() => (
300
300
  <React.Fragment>
301
301
  {formSources.length > 0 && (
302
- <fieldset className="space-y-2 rounded-md border border-border p-3">
303
- <legend className="px-1 text-xs font-medium tracking-wide text-muted-foreground uppercase">
302
+ <fieldset className="space-y-2 rounded border border-border p-3">
303
+ <legend className="px-1 font-medium tracking-wide text-muted-foreground uppercase">
304
304
  Events · Forms
305
305
  </legend>
306
306
  {formSources.flatMap((source) =>
@@ -315,17 +315,15 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
315
315
  disabled={isPending}
316
316
  />
317
317
  </FormControl>
318
- <FormLabel className="font-mono text-xs font-normal">
319
- {event}
320
- </FormLabel>
318
+ <FormLabel className="font-mono font-normal">{event}</FormLabel>
321
319
  </FormItem>
322
320
  ))
323
321
  )}
324
322
  </fieldset>
325
323
  )}
326
324
  {contentSources.length > 0 && (
327
- <fieldset className="space-y-2 rounded-md border border-border p-3">
328
- <legend className="px-1 text-xs font-medium tracking-wide text-muted-foreground uppercase">
325
+ <fieldset className="space-y-2 rounded border border-border p-3">
326
+ <legend className="px-1 font-medium tracking-wide text-muted-foreground uppercase">
329
327
  Events · Entities
330
328
  </legend>
331
329
  {contentSources.flatMap((source) =>
@@ -340,9 +338,7 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
340
338
  disabled={isPending}
341
339
  />
342
340
  </FormControl>
343
- <FormLabel className="font-mono text-xs font-normal">
344
- {event}
345
- </FormLabel>
341
+ <FormLabel className="font-mono font-normal">{event}</FormLabel>
346
342
  </FormItem>
347
343
  ))
348
344
  )}
@@ -353,7 +349,7 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
353
349
  />
354
350
  )}
355
351
  {formSources.length === 0 && contentSources.length === 0 && (
356
- <p className="text-sm text-muted-foreground">
352
+ <p className="text-muted-foreground">
357
353
  No schemas yet — generate an entity or form schema to subscribe this endpoint to
358
354
  its events.
359
355
  </p>