betterstart-cli 0.0.106 → 0.0.108

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/templates/init/admin-globals.css +1 -61
  2. package/dist/assets/adapters/next/templates/init/components/layouts/admin-header.tsx +2 -19
  3. package/dist/assets/adapters/next/templates/init/components/layouts/admin-nav-link.tsx +10 -8
  4. package/dist/assets/adapters/next/templates/init/components/layouts/admin-providers.tsx +4 -7
  5. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-nav-link-skeleton.tsx +1 -5
  6. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx +53 -48
  7. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sign-out.tsx +2 -2
  8. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table-pagination.tsx +3 -1
  9. package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +3 -5
  10. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +2 -5
  11. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/dev-mode-code-mirror.tsx +4 -5
  12. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/dev-mode-types.ts +0 -1
  13. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +1 -1
  14. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +1 -1
  15. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +5 -7
  16. package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +9 -10
  17. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +2 -4
  18. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-restore-dialog.tsx +2 -4
  19. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +2 -4
  20. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-drawer.tsx +1 -1
  21. package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog.tsx +2 -2
  22. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-dialog.tsx +5 -5
  23. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +52 -53
  24. package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +3 -1
  25. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +3 -5
  26. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-source-mode.tsx +2 -11
  27. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor.ts +1 -2
  28. package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +1 -1
  29. package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +1 -1
  30. package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +2 -2
  31. package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +2 -2
  32. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-drawer.tsx +1 -1
  33. package/dist/assets/adapters/next/templates/init/pages/settings/forms/form-notifications-drawer.tsx +5 -5
  34. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-actions.tsx +20 -20
  35. package/dist/assets/adapters/next/templates/init/pages/users/change-password-dialog.tsx +7 -5
  36. package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +3 -5
  37. package/dist/assets/adapters/next/templates/init/pages/users/create-user-dialog.tsx +1 -3
  38. package/dist/assets/adapters/next/templates/init/pages/users/delete-user-dialog.tsx +11 -5
  39. package/dist/assets/adapters/next/templates/init/pages/users/edit-role-dialog.tsx +1 -1
  40. package/dist/assets/shared-assets/react-admin/custom/content-editor/main-toolbar-content.tsx +3 -3
  41. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-popover-button.tsx +13 -11
  42. package/dist/assets/shared-assets/react-admin/custom/content-editor/mobile-toolbar-content.tsx +1 -1
  43. package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +1 -5
  44. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode-dropdown-button.tsx +16 -14
  45. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +5 -17
  46. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +0 -1
  47. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-button.tsx +14 -12
  48. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +2 -1
  49. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +2 -1
  50. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +2 -1
  51. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +16 -14
  52. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +15 -13
  53. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu-item.tsx +1 -1
  54. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +32 -30
  55. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-control-popover.tsx +17 -14
  56. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu-item.tsx +1 -1
  57. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu.tsx +23 -21
  58. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +2 -1
  59. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +2 -1
  60. package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +16 -14
  61. package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +8 -6
  62. package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +8 -7
  63. package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -4
  64. package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +11 -28
  65. package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +30 -47
  66. package/dist/assets/shared-assets/react-admin/ui/alert.tsx +4 -4
  67. package/dist/assets/shared-assets/react-admin/ui/aspect-ratio.tsx +18 -5
  68. package/dist/assets/shared-assets/react-admin/ui/avatar.tsx +10 -13
  69. package/dist/assets/shared-assets/react-admin/ui/badge.tsx +24 -21
  70. package/dist/assets/shared-assets/react-admin/ui/breadcrumb.tsx +20 -19
  71. package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +25 -24
  72. package/dist/assets/shared-assets/react-admin/ui/button.tsx +22 -31
  73. package/dist/assets/shared-assets/react-admin/ui/calendar.tsx +10 -7
  74. package/dist/assets/shared-assets/react-admin/ui/card.tsx +6 -16
  75. package/dist/assets/shared-assets/react-admin/ui/carousel.tsx +20 -17
  76. package/dist/assets/shared-assets/react-admin/ui/chart.tsx +18 -26
  77. package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +3 -4
  78. package/dist/assets/shared-assets/react-admin/ui/collapsible.tsx +6 -10
  79. package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +9 -25
  80. package/dist/assets/shared-assets/react-admin/ui/command.tsx +7 -6
  81. package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +77 -79
  82. package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +29 -54
  83. package/dist/assets/shared-assets/react-admin/ui/direction.tsx +1 -18
  84. package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +121 -49
  85. package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +120 -131
  86. package/dist/assets/shared-assets/react-admin/ui/empty.tsx +3 -3
  87. package/dist/assets/shared-assets/react-admin/ui/field.tsx +20 -30
  88. package/dist/assets/shared-assets/react-admin/ui/form.tsx +27 -31
  89. package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +26 -18
  90. package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +26 -13
  91. package/dist/assets/shared-assets/react-admin/ui/input-otp.tsx +3 -3
  92. package/dist/assets/shared-assets/react-admin/ui/input.tsx +4 -3
  93. package/dist/assets/shared-assets/react-admin/ui/item.tsx +26 -19
  94. package/dist/assets/shared-assets/react-admin/ui/kbd.tsx +1 -1
  95. package/dist/assets/shared-assets/react-admin/ui/label.tsx +18 -14
  96. package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +80 -73
  97. package/dist/assets/shared-assets/react-admin/ui/native-select.tsx +3 -3
  98. package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +40 -39
  99. package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +18 -11
  100. package/dist/assets/shared-assets/react-admin/ui/popover.tsx +31 -30
  101. package/dist/assets/shared-assets/react-admin/ui/progress.tsx +51 -16
  102. package/dist/assets/shared-assets/react-admin/ui/radio-group.tsx +11 -17
  103. package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
  104. package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +9 -13
  105. package/dist/assets/shared-assets/react-admin/ui/select.tsx +66 -60
  106. package/dist/assets/shared-assets/react-admin/ui/separator.tsx +3 -10
  107. package/dist/assets/shared-assets/react-admin/ui/sheet.tsx +22 -27
  108. package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +144 -126
  109. package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
  110. package/dist/assets/shared-assets/react-admin/ui/slider.tsx +27 -29
  111. package/dist/assets/shared-assets/react-admin/ui/sonner.tsx +10 -8
  112. package/dist/assets/shared-assets/react-admin/ui/spinner.tsx +4 -3
  113. package/dist/assets/shared-assets/react-admin/ui/switch.tsx +4 -5
  114. package/dist/assets/shared-assets/react-admin/ui/table.tsx +8 -21
  115. package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +11 -16
  116. package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +2 -2
  117. package/dist/assets/shared-assets/react-admin/ui/toggle-group.tsx +12 -11
  118. package/dist/assets/shared-assets/react-admin/ui/toggle.tsx +4 -5
  119. package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +29 -27
  120. package/dist/{chunk-OYU73Q2W.js → chunk-PSDUGFMD.js} +2 -2
  121. package/dist/{chunk-OYU73Q2W.js.map → chunk-PSDUGFMD.js.map} +1 -1
  122. package/dist/cli.js +122 -137
  123. package/dist/cli.js.map +1 -1
  124. package/dist/{read-namespaced-template-EIH2NPDJ.js → read-namespaced-template-TSATYQPP.js} +2 -2
  125. package/package.json +1 -1
  126. package/dist/assets/adapters/next/templates/init/hooks/use-admin-theme.tsx +0 -72
  127. package/dist/assets/adapters/next/templates/init/utils/theme/system.ts +0 -6
  128. /package/dist/{read-namespaced-template-EIH2NPDJ.js.map → read-namespaced-template-TSATYQPP.js.map} +0 -0
@@ -4,10 +4,16 @@ import * as React from 'react'
4
4
  import type { AdminMedia } from '@admin/types'
5
5
  import { deleteMedia } from '@admin/actions/media'
6
6
  import { Button } from '@admin/components/ui/button'
7
+ import {
8
+ Drawer,
9
+ DrawerContent,
10
+ DrawerDescription,
11
+ DrawerTitle,
12
+ DrawerTrigger
13
+ } from '@admin/components/ui/drawer'
7
14
  import { Spinner } from '@admin/components/ui/spinner'
8
15
  import { Trash2, TriangleAlert } from 'lucide-react'
9
16
  import { toast } from 'sonner'
10
- import { Drawer as DrawerPrimitive } from 'vaul'
11
17
 
12
18
  interface MediaDeleteDrawerProps {
13
19
  media: AdminMedia
@@ -90,63 +96,56 @@ export function MediaDeleteDrawer({
90
96
  }
91
97
 
92
98
  return (
93
- <DrawerPrimitive.Root
99
+ <Drawer
94
100
  container={container}
95
- direction="bottom"
96
- dismissible={!isPending}
101
+ swipeDirection="down"
102
+ disablePointerDismissal={isPending}
97
103
  open={open}
98
104
  onOpenChange={handleOpenChange}
99
105
  >
100
- <DrawerPrimitive.Trigger asChild>
101
- <Button variant="destructive" disabled={disabled || isPending || !container}>
102
- <Trash2 />
103
- Delete media
104
- </Button>
105
- </DrawerPrimitive.Trigger>
106
- <DrawerPrimitive.Portal>
107
- <DrawerPrimitive.Overlay className="pointer-events-auto absolute inset-0 z-20 bg-black/45 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0" />
108
- <DrawerPrimitive.Content className="pointer-events-auto absolute inset-x-0 bottom-0 z-30 max-h-[calc(100%-1rem)] overflow-hidden p-3 outline-none">
109
- <div
110
- className="overflow-hidden rounded-sm border border-border bg-popover text-sm text-popover-foreground shadow-2xl transition-[height] duration-200 ease-out"
111
- style={contentHeight ? { height: contentHeight } : undefined}
112
- >
113
- <div
114
- ref={contentRef}
115
- className="max-h-[calc(100vh-8rem)] overflow-y-auto px-4 pt-4 pb-4"
116
- >
117
- <div aria-hidden="true" className="mx-auto mb-5 h-1.5 w-20 rounded-sm bg-muted" />
118
- <div className="mb-3 flex size-10 items-center justify-center rounded-sm bg-destructive/10 text-foreground">
119
- <TriangleAlert className="size-5" />
120
- </div>
121
- <DrawerPrimitive.Title className="font-heading text-base font-medium text-foreground">
122
- Delete this media?
123
- </DrawerPrimitive.Title>
124
- <DrawerPrimitive.Description className="mt-1 text-sm text-muted-foreground">
125
- This deletes {media.filename} from the media library. The stored file is not
126
- deleted.
127
- </DrawerPrimitive.Description>
128
- <div className="mt-5 grid grid-cols-2 gap-2">
129
- <Button
130
- variant="secondary"
131
- onClick={() => handleOpenChange(false)}
132
- disabled={isPending}
133
- >
134
- Cancel
135
- </Button>
136
- <Button
137
- variant="destructive"
138
- onClick={() => void handleDelete()}
139
- disabled={isPending}
140
- aria-busy={isPending}
141
- >
142
- {isPending && <Spinner />}
143
- {isPending ? 'Deleting…' : 'Delete media'}
144
- </Button>
145
- </div>
106
+ <DrawerTrigger
107
+ render={<Button variant="destructive" disabled={disabled || isPending || !container} />}
108
+ >
109
+ <Trash2 />
110
+ Delete media
111
+ </DrawerTrigger>
112
+ <DrawerContent className="pointer-events-auto max-h-[calc(100%-1rem)] overflow-hidden p-3 outline-none">
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"
115
+ style={contentHeight ? { height: contentHeight } : undefined}
116
+ >
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">
120
+ <TriangleAlert className="size-5" />
121
+ </div>
122
+ <DrawerTitle className="font-heading text-base font-medium text-foreground">
123
+ Delete this media?
124
+ </DrawerTitle>
125
+ <DrawerDescription className="mt-1 text-sm text-muted-foreground">
126
+ This deletes {media.filename} from the media library. The stored file is not deleted.
127
+ </DrawerDescription>
128
+ <div className="mt-5 grid grid-cols-2 gap-2">
129
+ <Button
130
+ variant="secondary"
131
+ onClick={() => handleOpenChange(false)}
132
+ disabled={isPending}
133
+ >
134
+ Cancel
135
+ </Button>
136
+ <Button
137
+ variant="destructive"
138
+ onClick={() => void handleDelete()}
139
+ disabled={isPending}
140
+ aria-busy={isPending}
141
+ >
142
+ {isPending && <Spinner />}
143
+ {isPending ? 'Deleting…' : 'Delete media'}
144
+ </Button>
146
145
  </div>
147
146
  </div>
148
- </DrawerPrimitive.Content>
149
- </DrawerPrimitive.Portal>
150
- </DrawerPrimitive.Root>
147
+ </div>
148
+ </DrawerContent>
149
+ </Drawer>
151
150
  )
152
151
  }
@@ -41,7 +41,9 @@ export function MediaGridPagination({
41
41
  const perPage = 'Rows per page'
42
42
 
43
43
  const handlePageSizeChange = React.useCallback(
44
- (value: string) => {
44
+ (value: string | null) => {
45
+ if (value === null) return
46
+
45
47
  React.startTransition(() => {
46
48
  onPageSizeChange(Number(value))
47
49
  onPageChange(1)
@@ -187,10 +187,10 @@ export function SortOrderDialog({
187
187
  onDragCancel={handleDragCancel}
188
188
  >
189
189
  <Drawer
190
- direction="right"
190
+ swipeDirection="right"
191
191
  open={open}
192
192
  onOpenChange={onOpenChange}
193
- onAnimationEnd={handleDrawerAnimationEnd}
193
+ onOpenChangeComplete={handleDrawerAnimationEnd}
194
194
  >
195
195
  <DrawerContent className="h-full w-full overflow-hidden">
196
196
  <div className="relative z-10 flex min-h-0 flex-1 flex-col gap-3 overflow-hidden">
@@ -231,9 +231,7 @@ export function SortOrderDialog({
231
231
  {isSaving && <Spinner />}
232
232
  {isSaving ? 'Saving…' : 'Save'}
233
233
  </Button>
234
- <DrawerClose asChild>
235
- <Button variant="outline">Close</Button>
236
- </DrawerClose>
234
+ <DrawerClose render={<Button variant="outline" />}>Close</DrawerClose>
237
235
  </DrawerFooter>
238
236
  </div>
239
237
  </DrawerContent>
@@ -9,7 +9,6 @@ import type { QueryClient } from '@tanstack/react-query'
9
9
  import type { ReactCodeMirrorRef } from '@uiw/react-codemirror'
10
10
  import type { Root } from 'react-dom/client'
11
11
  import { MediaField } from '@admin/components/custom/media-field'
12
- import { useTheme } from '@admin/hooks/use-admin-theme'
13
12
  import { applyCursorChange } from '@admin/utils/editor/apply-cursor-change'
14
13
  import { applyCursorChangeIfAvailable } from '@admin/utils/editor/apply-cursor-change-if-available'
15
14
  import { createMarkdownTableText } from '@admin/utils/editor/create-markdown-table-text'
@@ -33,11 +32,12 @@ import { redo, redoDepth, undo, undoDepth } from '@codemirror/commands'
33
32
  import { markdown } from '@codemirror/lang-markdown'
34
33
  import { Decoration, EditorView, WidgetType } from '@codemirror/view'
35
34
  import { QueryClientProvider, useQueryClient } from '@tanstack/react-query'
36
- import { githubDarkInit, githubLightInit } from '@uiw/codemirror-theme-github'
35
+ import { githubLightInit } from '@uiw/codemirror-theme-github'
37
36
  import { NuqsAdapter } from 'nuqs/adapters/react'
38
37
  import { createRoot } from 'react-dom/client'
39
38
 
40
39
  const ADMIN_MONO_FONT_FAMILY = 'var(--font-geist-mono), ui-monospace, SFMono-Regular, monospace'
40
+ const editorTheme = githubLightInit({ settings: { fontFamily: ADMIN_MONO_FONT_FAMILY } })
41
41
 
42
42
  type MarkdownMediaGalleryWidgetProps = {
43
43
  widgetId: number
@@ -150,15 +150,6 @@ export function useContentEditorSourceMode({
150
150
  const [isMarkdownLinkActive, setIsMarkdownLinkActive] = React.useState(false)
151
151
  const [canUndoMarkdownChange, setCanUndoMarkdownChange] = React.useState(false)
152
152
  const [canRedoMarkdownChange, setCanRedoMarkdownChange] = React.useState(false)
153
- const { resolvedTheme } = useTheme()
154
- const editorTheme = React.useMemo(
155
- () =>
156
- resolvedTheme === 'dark'
157
- ? githubDarkInit({ settings: { fontFamily: ADMIN_MONO_FONT_FAMILY } })
158
- : githubLightInit({ settings: { fontFamily: ADMIN_MONO_FONT_FAMILY } }),
159
- [resolvedTheme]
160
- )
161
-
162
153
  const valueRef = React.useRef(value)
163
154
  valueRef.current = value
164
155
  const onChangeRef = React.useRef(onChange)
@@ -99,8 +99,7 @@ export function useContentEditor({
99
99
  autocomplete: 'off',
100
100
  autocorrect: 'off',
101
101
  autocapitalize: 'off',
102
- class:
103
- 'simple-editor content-editor-prose prose prose-sm max-w-none dark:prose-invert focus:outline-none'
102
+ class: 'simple-editor content-editor-prose prose prose-sm max-w-none focus:outline-none'
104
103
  },
105
104
  handleKeyDown: (_view, event) => handleSlashKeyDown(event)
106
105
  },
@@ -51,7 +51,7 @@ export default function DashboardPage() {
51
51
  </p>
52
52
  </div>
53
53
  <div className="flex w-full flex-col">
54
- <Accordion type="single" collapsible defaultValue="item-1">
54
+ <Accordion defaultValue={['item-1']}>
55
55
  <AccordionItem value="item-1">
56
56
  <AccordionTrigger>
57
57
  <div className="flex items-center gap-3">
@@ -54,7 +54,7 @@ export function ForgotPasswordForm({ className, ...props }: React.ComponentProps
54
54
  alt=""
55
55
  fill
56
56
  sizes="(min-width: 768px) 42vw, 0px"
57
- className="object-cover dark:brightness-[0.2] dark:grayscale"
57
+ className="object-cover"
58
58
  />
59
59
  </div>
60
60
  <div className="p-6 md:p-20">
@@ -60,7 +60,7 @@ export function LoginForm({ className, ...props }: React.ComponentProps<'div'>)
60
60
  alt=""
61
61
  fill
62
62
  sizes="(min-width: 768px) 42vw, 0px"
63
- className="object-cover dark:brightness-[0.2] dark:grayscale"
63
+ className="object-cover"
64
64
  />
65
65
  </div>
66
66
  <form onSubmit={handleSubmit} className="p-6 md:p-20">
@@ -70,7 +70,7 @@ export function LoginForm({ className, ...props }: React.ComponentProps<'div'>)
70
70
  <p className="text-balance text-muted-foreground">Sign in to your account</p>
71
71
  </div>
72
72
  {resetSuccess ? (
73
- <div className="rounded-md bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400">
73
+ <div className="rounded-md bg-emerald-500/10 p-3 text-sm text-emerald-700">
74
74
  Password reset. Sign in with your new password.
75
75
  </div>
76
76
  ) : null}
@@ -37,7 +37,7 @@ export function ResetPasswordForm({ className, ...props }: React.ComponentProps<
37
37
  alt=""
38
38
  fill
39
39
  sizes="(min-width: 768px) 42vw, 0px"
40
- className="object-cover dark:brightness-[0.2] dark:grayscale"
40
+ className="object-cover"
41
41
  />
42
42
  </div>
43
43
  <div className="p-6 md:p-20">
@@ -104,7 +104,7 @@ export function ResetPasswordForm({ className, ...props }: React.ComponentProps<
104
104
  alt=""
105
105
  fill
106
106
  sizes="(min-width: 768px) 42vw, 0px"
107
- className="object-cover dark:brightness-[0.2] dark:grayscale"
107
+ className="object-cover"
108
108
  />
109
109
  </div>
110
110
  <form onSubmit={handleSubmit} className="p-6 md:p-20">
@@ -36,7 +36,7 @@ function formatMetadata(metadata: Record<string, unknown> | null): string {
36
36
 
37
37
  export function AuditLogDetailDrawer({ auditLog, open, onOpenChange }: AuditLogDetailDrawerProps) {
38
38
  return (
39
- <Drawer direction="right" open={open} onOpenChange={onOpenChange} modal>
39
+ <Drawer swipeDirection="right" open={open} onOpenChange={onOpenChange} modal>
40
40
  <DrawerContent className="h-full sm:max-w-xl">
41
41
  <DrawerHeader>
42
42
  <DrawerTitle>Audit Event</DrawerTitle>
@@ -82,7 +82,7 @@ export function FormNotificationsDrawer({
82
82
  const isPending = mutation.isPending
83
83
 
84
84
  return (
85
- <Drawer direction="right" open={open} onOpenChange={onOpenChange} modal>
85
+ <Drawer swipeDirection="right" open={open} onOpenChange={onOpenChange} modal>
86
86
  <DrawerContent className="h-full sm:max-w-xl">
87
87
  <Form {...form}>
88
88
  <form
@@ -128,10 +128,10 @@ export function FormNotificationsDrawer({
128
128
  </ScrollArea>
129
129
 
130
130
  <DrawerFooter className="flex-row justify-end">
131
- <DrawerClose asChild>
132
- <Button type="button" variant="outline" size="lg" disabled={isPending}>
133
- Cancel
134
- </Button>
131
+ <DrawerClose
132
+ render={<Button type="button" variant="outline" size="lg" disabled={isPending} />}
133
+ >
134
+ Cancel
135
135
  </DrawerClose>
136
136
  <Button
137
137
  type="submit"
@@ -23,33 +23,33 @@ export function WebhookActions({ webhook, onEdit, onDelete }: WebhookActionsProp
23
23
 
24
24
  return (
25
25
  <DropdownMenu>
26
- <DropdownMenuTrigger asChild>
27
- <Button
28
- variant="ghost"
29
- className="size-8 p-0"
30
- aria-label={`Open webhook actions for ${webhook.name}`}
31
- >
32
- <span className="sr-only">Open webhook actions</span>
33
- {sendTest.isPending ? (
34
- <Spinner className="size-4" />
35
- ) : (
36
- <MoreHorizontal className="size-4" />
37
- )}
38
- </Button>
39
- </DropdownMenuTrigger>
26
+ <DropdownMenuTrigger
27
+ render={
28
+ <Button
29
+ variant="ghost"
30
+ className="size-8 p-0"
31
+ aria-label={`Open webhook actions for ${webhook.name}`}
32
+ >
33
+ <span className="sr-only">Open webhook actions</span>
34
+ {sendTest.isPending ? (
35
+ <Spinner className="size-4" />
36
+ ) : (
37
+ <MoreHorizontal className="size-4" />
38
+ )}
39
+ </Button>
40
+ }
41
+ />
40
42
  <DropdownMenuContent align="end">
41
43
  <DropdownMenuItem
44
+ closeOnClick={false}
42
45
  disabled={sendTest.isPending}
43
46
  aria-busy={sendTest.isPending}
44
- onSelect={(event) => {
45
- event.preventDefault()
46
- sendTest.mutate(webhook.id)
47
- }}
47
+ onClick={() => sendTest.mutate(webhook.id)}
48
48
  >
49
49
  {sendTest.isPending ? 'Testing…' : 'Test'}
50
50
  </DropdownMenuItem>
51
- <DropdownMenuItem onSelect={() => onEdit(webhook)}>Edit</DropdownMenuItem>
52
- <DropdownMenuItem variant="destructive" onSelect={() => onDelete(webhook)}>
51
+ <DropdownMenuItem onClick={() => onEdit(webhook)}>Edit</DropdownMenuItem>
52
+ <DropdownMenuItem variant="destructive" onClick={() => onDelete(webhook)}>
53
53
  Delete
54
54
  </DropdownMenuItem>
55
55
  </DropdownMenuContent>
@@ -134,11 +134,13 @@ export function ChangePasswordDialog({
134
134
 
135
135
  return (
136
136
  <Dialog open={open} onOpenChange={handleOpenChange}>
137
- <DialogTrigger asChild>
138
- <DropdownMenuItem onSelect={(event) => event.preventDefault()}>
139
- <KeySquare className="size-4" />
140
- Change password
141
- </DropdownMenuItem>
137
+ <DialogTrigger
138
+ render={
139
+ <DropdownMenuItem closeOnClick={false} onClick={(event) => event.preventDefault()} />
140
+ }
141
+ >
142
+ <KeySquare className="size-4" />
143
+ Change password
142
144
  </DialogTrigger>
143
145
  <DialogContent className="sm:max-w-135">
144
146
  <Form {...form}>
@@ -148,11 +148,9 @@ export const columns: ColumnDef<User>[] = [
148
148
  return (
149
149
  <div className="flex justify-end">
150
150
  <DropdownMenu>
151
- <DropdownMenuTrigger asChild>
152
- <Button variant="ghost" className="size-8 p-0">
153
- <span className="sr-only">Open menu</span>
154
- <MoreHorizontal className="size-4" />
155
- </Button>
151
+ <DropdownMenuTrigger render={<Button variant="ghost" className="size-8 p-0" />}>
152
+ <span className="sr-only">Open menu</span>
153
+ <MoreHorizontal className="size-4" />
156
154
  </DropdownMenuTrigger>
157
155
  <DropdownMenuContent align="end">
158
156
  {!isCurrentUser ? (
@@ -108,9 +108,7 @@ export function CreateUserDialog() {
108
108
 
109
109
  return (
110
110
  <Dialog open={open} onOpenChange={handleOpenChange}>
111
- <DialogTrigger asChild>
112
- <Button>Create User</Button>
113
- </DialogTrigger>
111
+ <DialogTrigger render={<Button />}>Create User</DialogTrigger>
114
112
  <DialogContent className="sm:max-w-135">
115
113
  <Form {...form}>
116
114
  <form onSubmit={form.handleSubmit((values) => mutation.mutate(values))}>
@@ -104,11 +104,17 @@ export function DeleteUserDialog({ userId, userName, isCurrentUser }: DeleteUser
104
104
 
105
105
  return (
106
106
  <AlertDialog open={open} onOpenChange={handleOpenChange}>
107
- <AlertDialogTrigger asChild>
108
- <DropdownMenuItem variant="destructive" onSelect={(event) => event.preventDefault()}>
109
- <Trash className="size-4" />
110
- Delete user
111
- </DropdownMenuItem>
107
+ <AlertDialogTrigger
108
+ render={
109
+ <DropdownMenuItem
110
+ variant="destructive"
111
+ closeOnClick={false}
112
+ onClick={(event) => event.preventDefault()}
113
+ />
114
+ }
115
+ >
116
+ <Trash className="size-4" />
117
+ Delete user
112
118
  </AlertDialogTrigger>
113
119
  <AlertDialogContent>
114
120
  <Form {...form}>
@@ -56,7 +56,7 @@ export function EditRoleDialog({ userId, currentRole, userName, children }: Edit
56
56
 
57
57
  return (
58
58
  <Dialog open={open} onOpenChange={setOpen}>
59
- <DialogTrigger asChild>{children}</DialogTrigger>
59
+ <DialogTrigger render={children as React.ReactElement} />
60
60
  <DialogContent className="sm:max-w-87.5">
61
61
  <DialogHeader>
62
62
  <DialogTitle>Edit Role</DialogTitle>
@@ -49,7 +49,7 @@ export function MainToolbarContent({
49
49
  <UndoRedoButton action="redo" />
50
50
  </div>
51
51
 
52
- <Separator orientation="vertical" decorative className="mx-1 my-auto h-[65%] self-center" />
52
+ <Separator orientation="vertical" className="mx-1 my-auto h-[65%] self-center" />
53
53
 
54
54
  <div className="flex items-center gap-0.5">
55
55
  <HeadingDropdownMenu />
@@ -59,7 +59,7 @@ export function MainToolbarContent({
59
59
  <HorizontalRuleButton editor={editor} />
60
60
  </div>
61
61
 
62
- <Separator orientation="vertical" decorative className="mx-1 my-auto h-[65%] self-center" />
62
+ <Separator orientation="vertical" className="mx-1 my-auto h-[65%] self-center" />
63
63
 
64
64
  <div className="flex items-center gap-0.5">
65
65
  <MarkButton type="bold" />
@@ -75,7 +75,7 @@ export function MainToolbarContent({
75
75
  {!isMobile ? <LinkPopover /> : <LinkButton onClick={onLinkClick} />}
76
76
  </div>
77
77
 
78
- <Separator orientation="vertical" decorative className="mx-1 my-auto h-[65%] self-center" />
78
+ <Separator orientation="vertical" className="mx-1 my-auto h-[65%] self-center" />
79
79
 
80
80
  <div className="flex items-center">
81
81
  <TableButton editor={editor} />
@@ -36,17 +36,19 @@ export function MathPopoverButton({
36
36
 
37
37
  return (
38
38
  <Popover open={isOpen} onOpenChange={setIsOpen}>
39
- <PopoverTrigger asChild>
40
- <MathButton
41
- {...buttonProps}
42
- text={text}
43
- disabled={disabled || !canInsert}
44
- aria-label="Insert math"
45
- title="Math"
46
- onPointerDown={(event) => event.preventDefault()}
47
- onClick={() => setIsOpen((current) => !current)}
48
- />
49
- </PopoverTrigger>
39
+ <PopoverTrigger
40
+ render={
41
+ <MathButton
42
+ {...buttonProps}
43
+ text={text}
44
+ disabled={disabled || !canInsert}
45
+ aria-label="Insert math"
46
+ title="Math"
47
+ onPointerDown={(event) => event.preventDefault()}
48
+ onClick={() => setIsOpen((current) => !current)}
49
+ />
50
+ }
51
+ />
50
52
  <PopoverContent align="start" className="w-auto gap-0 p-0">
51
53
  <MathEditorControls
52
54
  disabled={disabled || !canInsert}
@@ -38,7 +38,7 @@ export function MobileToolbarContent({
38
38
  </Button>
39
39
  </div>
40
40
 
41
- <Separator orientation="vertical" decorative className="mx-1 my-auto h-[65%] self-center" />
41
+ <Separator orientation="vertical" className="mx-1 my-auto h-[65%] self-center" />
42
42
 
43
43
  {type === 'highlighter' ? (
44
44
  <ColorHighlightPopoverContent />
@@ -117,11 +117,7 @@ export function SelectionBubbleMenu({ editor }: { editor: Editor }) {
117
117
  />
118
118
  </div>
119
119
 
120
- <Separator
121
- orientation="vertical"
122
- decorative
123
- className="mx-1 my-auto h-[65%] self-center"
124
- />
120
+ <Separator orientation="vertical" className="mx-1 my-auto h-[65%] self-center" />
125
121
 
126
122
  <div className="flex items-center gap-0.5">
127
123
  <MarkButton editor={editor} type="bold" />
@@ -29,20 +29,22 @@ export function SourceModeDropdownButton({
29
29
 
30
30
  return (
31
31
  <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>
32
- <DropdownMenuTrigger asChild>
33
- <Button
34
- type="button"
35
- variant="ghost"
36
- size="icon-sm"
37
- className="w-auto px-2"
38
- aria-label={ariaLabel ?? label}
39
- title={label}
40
- onPointerDown={(event) => event.preventDefault()}
41
- onClick={() => setIsOpen((current) => !current)}
42
- >
43
- <Icon />
44
- <ChevronDownIcon className="tiptap-button-dropdown-small" />
45
- </Button>
32
+ <DropdownMenuTrigger
33
+ render={
34
+ <Button
35
+ type="button"
36
+ variant="ghost"
37
+ size="icon-sm"
38
+ className="w-auto px-2"
39
+ aria-label={ariaLabel ?? label}
40
+ title={label}
41
+ onPointerDown={(event) => event.preventDefault()}
42
+ onClick={() => setIsOpen((current) => !current)}
43
+ />
44
+ }
45
+ >
46
+ <Icon />
47
+ <ChevronDownIcon className="tiptap-button-dropdown-small" />
46
48
  </DropdownMenuTrigger>
47
49
  <DropdownMenuContent align="start" className="w-auto min-w-40">
48
50
  <DropdownMenuGroup>{children}</DropdownMenuGroup>
@@ -152,11 +152,7 @@ export function SourceMode({
152
152
  </Button>
153
153
  </div>
154
154
 
155
- <Separator
156
- orientation="vertical"
157
- decorative
158
- className="mx-1 my-auto h-[65%] self-center"
159
- />
155
+ <Separator orientation="vertical" className="mx-1 my-auto h-[65%] self-center" />
160
156
 
161
157
  <div className="flex items-center gap-0.5">
162
158
  <SourceModeDropdownButton
@@ -173,7 +169,7 @@ export function SourceMode({
173
169
  disabled={disabled}
174
170
  aria-label={option.label}
175
171
  title={option.label}
176
- onSelect={() => applyHeading(option.level)}
172
+ onClick={() => applyHeading(option.level)}
177
173
  >
178
174
  <Icon />
179
175
  <span className="tiptap-button-text">{option.label}</span>
@@ -191,7 +187,7 @@ export function SourceMode({
191
187
  disabled={disabled}
192
188
  aria-label={option.label}
193
189
  title={option.label}
194
- onSelect={() => applyList(option.type)}
190
+ onClick={() => applyList(option.type)}
195
191
  >
196
192
  <Icon />
197
193
  <span className="tiptap-button-text">{option.label}</span>
@@ -234,11 +230,7 @@ export function SourceMode({
234
230
  </Button>
235
231
  </div>
236
232
 
237
- <Separator
238
- orientation="vertical"
239
- decorative
240
- className="mx-1 my-auto h-[65%] self-center"
241
- />
233
+ <Separator orientation="vertical" className="mx-1 my-auto h-[65%] self-center" />
242
234
 
243
235
  <div className="flex items-center gap-0.5">
244
236
  {[
@@ -300,11 +292,7 @@ export function SourceMode({
300
292
  />
301
293
  </div>
302
294
 
303
- <Separator
304
- orientation="vertical"
305
- decorative
306
- className="mx-1 my-auto h-[65%] self-center"
307
- />
295
+ <Separator orientation="vertical" className="mx-1 my-auto h-[65%] self-center" />
308
296
 
309
297
  <div className="flex items-center">
310
298
  <TableButton disabled={disabled} onInsertTable={insertTable} />
@@ -230,7 +230,6 @@ export function TableBubbleMenu({ editor }: { editor: Editor }) {
230
230
  </div>
231
231
  <Separator
232
232
  orientation="vertical"
233
- decorative
234
233
  className="mx-1 my-auto h-5 w-px self-center bg-border opacity-100"
235
234
  />
236
235
  <div className="flex items-center gap-0.5">