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
@@ -19,18 +19,20 @@ export function TableButton({ disabled, editor, onInsertTable }: TableButtonProp
19
19
 
20
20
  return (
21
21
  <Popover open={tableButton.isOpen} onOpenChange={tableButton.setIsOpen}>
22
- <PopoverTrigger asChild>
23
- <Button
24
- type="button"
25
- variant="ghost"
26
- size="sm"
27
- disabled={tableButton.isDisabled}
28
- aria-label="Insert table"
29
- title="Table"
30
- >
31
- <TableIcon />
32
- <span className="tiptap-button-text">Table</span>
33
- </Button>
22
+ <PopoverTrigger
23
+ render={
24
+ <Button
25
+ type="button"
26
+ variant="ghost"
27
+ size="sm"
28
+ disabled={tableButton.isDisabled}
29
+ aria-label="Insert table"
30
+ title="Table"
31
+ />
32
+ }
33
+ >
34
+ <TableIcon />
35
+ <span className="tiptap-button-text">Table</span>
34
36
  </PopoverTrigger>
35
37
  <PopoverContent align="start" className="w-72 p-4">
36
38
  <div className="flex flex-col gap-3" onKeyDownCapture={tableButton.handleKeyDown}>
@@ -2,6 +2,7 @@
2
2
 
3
3
  import type { ControlAvailability, ControlShortcut, ControlTooltip } from '../control-options'
4
4
  import type { UseBlockquoteConfig } from '@admin/hooks/content-editor/use-blockquote'
5
+ import type { BaseUIEvent } from '@base-ui/react'
5
6
  import { Button } from '@admin/components/ui/button'
6
7
  import { useBlockquote } from '@admin/hooks/content-editor/use-blockquote'
7
8
  import { useTiptapEditor } from '@admin/hooks/content-editor/use-tiptap-editor'
@@ -48,7 +49,7 @@ export function BlockquoteButton({
48
49
  )
49
50
 
50
51
  const handleClick = useCallback(
51
- (event: React.MouseEvent<HTMLButtonElement>) => {
52
+ (event: BaseUIEvent<React.MouseEvent<HTMLButtonElement>>) => {
52
53
  onClick?.(event)
53
54
  if (event.defaultPrevented) return
54
55
  handleToggle()
@@ -2,6 +2,7 @@
2
2
 
3
3
  import type { ControlAvailability, ControlShortcut, ControlTooltip } from '../control-options'
4
4
  import type { UseCodeBlockConfig } from '@admin/hooks/content-editor/use-code-block'
5
+ import type { BaseUIEvent } from '@base-ui/react'
5
6
  import { Button } from '@admin/components/ui/button'
6
7
  import { useCodeBlock } from '@admin/hooks/content-editor/use-code-block'
7
8
  import { useTiptapEditor } from '@admin/hooks/content-editor/use-tiptap-editor'
@@ -46,7 +47,7 @@ export function CodeBlockButton({
46
47
  })
47
48
 
48
49
  const handleClick = useCallback(
49
- (event: React.MouseEvent<HTMLButtonElement>) => {
50
+ (event: BaseUIEvent<React.MouseEvent<HTMLButtonElement>>) => {
50
51
  onClick?.(event)
51
52
  if (event.defaultPrevented) return
52
53
  handleToggle()
@@ -2,6 +2,7 @@
2
2
 
3
3
  import type { ControlAvailability, ControlShortcut, ControlTooltip } from '../control-options'
4
4
  import type { UseColorHighlightConfig } from '@admin/hooks/content-editor/use-color-highlight'
5
+ import type { BaseUIEvent } from '@base-ui/react'
5
6
  import { Button } from '@admin/components/ui/button'
6
7
  import { useColorHighlight } from '@admin/hooks/content-editor/use-color-highlight'
7
8
  import { useTiptapEditor } from '@admin/hooks/content-editor/use-tiptap-editor'
@@ -59,7 +60,7 @@ export function ColorHighlightButton({
59
60
  })
60
61
 
61
62
  const handleClick = useCallback(
62
- (event: React.MouseEvent<HTMLButtonElement>) => {
63
+ (event: BaseUIEvent<React.MouseEvent<HTMLButtonElement>>) => {
63
64
  onClick?.(event)
64
65
  if (event.defaultPrevented) return
65
66
  handleColorHighlight()
@@ -69,20 +69,22 @@ export function ColorHighlightPopover({
69
69
 
70
70
  return (
71
71
  <Popover open={isOpen} onOpenChange={handleOpenChange}>
72
- <PopoverTrigger asChild>
73
- <ColorHighlightPopoverButton
74
- disabled={disabled || !canColorHighlight}
75
- data-active-state={isActive ? 'on' : 'off'}
76
- data-disabled={disabled || !canColorHighlight}
77
- aria-pressed={isActive}
78
- aria-label={label}
79
- title={label}
80
- tooltip={tooltip}
81
- {...props}
82
- ref={ref}
83
- >
84
- <Icon />
85
- </ColorHighlightPopoverButton>
72
+ <PopoverTrigger
73
+ render={
74
+ <ColorHighlightPopoverButton
75
+ disabled={disabled || !canColorHighlight}
76
+ data-active-state={isActive ? 'on' : 'off'}
77
+ data-disabled={disabled || !canColorHighlight}
78
+ aria-pressed={isActive}
79
+ aria-label={label}
80
+ title={label}
81
+ tooltip={tooltip}
82
+ {...props}
83
+ ref={ref}
84
+ />
85
+ }
86
+ >
87
+ <Icon />
86
88
  </PopoverTrigger>
87
89
  <PopoverContent
88
90
  aria-label="Highlight colors"
@@ -31,19 +31,21 @@ export function SourceColorHighlightPopover({
31
31
 
32
32
  return (
33
33
  <Popover open={isOpen} onOpenChange={setIsOpen}>
34
- <PopoverTrigger asChild>
35
- <ColorHighlightPopoverButton
36
- disabled={disabled}
37
- data-active-state="off"
38
- data-disabled={disabled}
39
- aria-pressed={false}
40
- aria-label="Highlight"
41
- title="Highlight"
42
- tooltip={tooltip}
43
- {...props}
44
- >
45
- <HighlighterIcon />
46
- </ColorHighlightPopoverButton>
34
+ <PopoverTrigger
35
+ render={
36
+ <ColorHighlightPopoverButton
37
+ disabled={disabled}
38
+ data-active-state="off"
39
+ data-disabled={disabled}
40
+ aria-pressed={false}
41
+ aria-label="Highlight"
42
+ title="Highlight"
43
+ tooltip={tooltip}
44
+ {...props}
45
+ />
46
+ }
47
+ >
48
+ <HighlighterIcon />
47
49
  </PopoverTrigger>
48
50
  <PopoverContent
49
51
  aria-label="Highlight colors"
@@ -27,7 +27,7 @@ export function HeadingDropdownMenuItem({
27
27
  disabled={!canToggle}
28
28
  aria-label={label}
29
29
  title={label}
30
- onSelect={() => handleToggle()}
30
+ onClick={() => handleToggle()}
31
31
  >
32
32
  <Icon />
33
33
  <span className="tiptap-button-text">{label}</span>
@@ -61,40 +61,42 @@ export function HeadingDropdownMenu({
61
61
 
62
62
  return (
63
63
  <DropdownMenu modal={false} open={isOpen} onOpenChange={handleOpenChange}>
64
- <DropdownMenuTrigger asChild>
65
- <Button
66
- type="button"
67
- variant="ghost"
68
- data-active-state={isActive ? 'on' : 'off'}
69
- role="button"
70
- tabIndex={-1}
71
- disabled={!canToggle}
72
- data-disabled={!canToggle}
73
- aria-label="Format text as heading"
74
- aria-pressed={isActive}
75
- title={getControlTooltipTitle(tooltip, 'Heading')}
76
- size="icon-sm"
77
- className="w-auto px-2"
78
- {...buttonProps}
79
- ref={ref}
80
- onPointerDown={(event) => event.preventDefault()}
81
- onClick={() => handleOpenChange(!isOpen)}
82
- >
83
- {children ? (
84
- children
85
- ) : (
86
- <>
87
- <Icon />
88
- <ChevronDownIcon className="tiptap-button-dropdown-small" />
89
- </>
90
- )}
91
- </Button>
92
- </DropdownMenuTrigger>
64
+ <DropdownMenuTrigger
65
+ render={
66
+ <Button
67
+ type="button"
68
+ variant="ghost"
69
+ data-active-state={isActive ? 'on' : 'off'}
70
+ role="button"
71
+ tabIndex={-1}
72
+ disabled={!canToggle}
73
+ data-disabled={!canToggle}
74
+ aria-label="Format text as heading"
75
+ aria-pressed={isActive}
76
+ title={getControlTooltipTitle(tooltip, 'Heading')}
77
+ size="icon-sm"
78
+ className="w-auto px-2"
79
+ {...buttonProps}
80
+ ref={ref}
81
+ onPointerDown={(event) => event.preventDefault()}
82
+ onClick={() => handleOpenChange(!isOpen)}
83
+ >
84
+ {children ? (
85
+ children
86
+ ) : (
87
+ <>
88
+ <Icon />
89
+ <ChevronDownIcon className="tiptap-button-dropdown-small" />
90
+ </>
91
+ )}
92
+ </Button>
93
+ }
94
+ ></DropdownMenuTrigger>
93
95
 
94
96
  <DropdownMenuContent
95
97
  align="start"
96
98
  className="w-auto min-w-40"
97
- onCloseAutoFocus={(event) => event.preventDefault()}
99
+ finalFocus={false}
98
100
  portalled={false}
99
101
  >
100
102
  <DropdownMenuGroup>
@@ -3,6 +3,7 @@
3
3
  import type * as React from 'react'
4
4
  import type { LinkButtonProps } from './link-button'
5
5
  import type { LinkMainProps } from './link-main'
6
+ import type { BaseUIEvent } from '@base-ui/react'
6
7
  import { Popover, PopoverContent, PopoverTrigger } from '@admin/components/ui/popover'
7
8
  import { LinkIcon } from 'lucide-react'
8
9
  import { useCallback, useState } from 'react'
@@ -52,7 +53,7 @@ export function LinkControlPopover({
52
53
  }, [handleOnOpenChange, setLink])
53
54
 
54
55
  const handleClick = useCallback(
55
- (event: React.MouseEvent<HTMLButtonElement>) => {
56
+ (event: BaseUIEvent<React.MouseEvent<HTMLButtonElement>>) => {
56
57
  onClick?.(event)
57
58
  if (event.defaultPrevented) return
58
59
  handleOnOpenChange(!isOpen)
@@ -62,19 +63,21 @@ export function LinkControlPopover({
62
63
 
63
64
  return (
64
65
  <Popover open={isOpen} onOpenChange={handleOnOpenChange}>
65
- <PopoverTrigger asChild>
66
- <LinkButton
67
- {...buttonProps}
68
- disabled={isDisabled}
69
- data-active-state={isActive ? 'on' : 'off'}
70
- data-disabled={isDisabled}
71
- aria-label={label}
72
- aria-pressed={isActive}
73
- onClick={handleClick}
74
- ref={ref}
75
- >
76
- {children ?? <LinkIcon />}
77
- </LinkButton>
66
+ <PopoverTrigger
67
+ render={
68
+ <LinkButton
69
+ {...buttonProps}
70
+ disabled={isDisabled}
71
+ data-active-state={isActive ? 'on' : 'off'}
72
+ data-disabled={isDisabled}
73
+ aria-label={label}
74
+ aria-pressed={isActive}
75
+ onClick={handleClick}
76
+ ref={ref}
77
+ />
78
+ }
79
+ >
80
+ {children ?? <LinkIcon />}
78
81
  </PopoverTrigger>
79
82
 
80
83
  <PopoverContent className="w-auto max-w-[calc(100vw-2rem)]">
@@ -36,7 +36,7 @@ export function ListDropdownMenuItem({
36
36
  disabled={!canToggle}
37
37
  aria-label={itemLabel}
38
38
  title={itemLabel}
39
- onSelect={() => handleToggle()}
39
+ onClick={() => handleToggle()}
40
40
  >
41
41
  <Icon />
42
42
  <span className="tiptap-button-text">{label}</span>
@@ -59,32 +59,34 @@ export function ListDropdownMenu({
59
59
 
60
60
  return (
61
61
  <DropdownMenu modal={false} open={isOpen} onOpenChange={handleOnOpenChange}>
62
- <DropdownMenuTrigger asChild>
63
- <Button
64
- type="button"
65
- variant="ghost"
66
- data-active-state={isActive ? 'on' : 'off'}
67
- role="button"
68
- tabIndex={-1}
69
- disabled={!canToggle}
70
- data-disabled={!canToggle}
71
- aria-label="List options"
72
- title={getControlTooltipTitle(tooltip, 'List')}
73
- size="icon-sm"
74
- className="w-auto px-2"
75
- {...props}
76
- onPointerDown={(event) => event.preventDefault()}
77
- onClick={() => handleOnOpenChange(!isOpen)}
78
- >
79
- <Icon />
80
- <ChevronDownIcon className="tiptap-button-dropdown-small" />
81
- </Button>
62
+ <DropdownMenuTrigger
63
+ render={
64
+ <Button
65
+ type="button"
66
+ variant="ghost"
67
+ data-active-state={isActive ? 'on' : 'off'}
68
+ role="button"
69
+ tabIndex={-1}
70
+ disabled={!canToggle}
71
+ data-disabled={!canToggle}
72
+ aria-label="List options"
73
+ title={getControlTooltipTitle(tooltip, 'List')}
74
+ size="icon-sm"
75
+ className="w-auto px-2"
76
+ {...props}
77
+ onPointerDown={(event) => event.preventDefault()}
78
+ onClick={() => handleOnOpenChange(!isOpen)}
79
+ />
80
+ }
81
+ >
82
+ <Icon />
83
+ <ChevronDownIcon className="tiptap-button-dropdown-small" />
82
84
  </DropdownMenuTrigger>
83
85
 
84
86
  <DropdownMenuContent
85
87
  align="start"
86
88
  className="w-auto min-w-40"
87
- onCloseAutoFocus={(event) => event.preventDefault()}
89
+ finalFocus={false}
88
90
  portalled={false}
89
91
  >
90
92
  <DropdownMenuGroup>
@@ -2,6 +2,7 @@
2
2
 
3
3
  import type { ControlAvailability, ControlShortcut, ControlTooltip } from '../control-options'
4
4
  import type { UseMarkConfig } from '@admin/hooks/content-editor/use-mark'
5
+ import type { BaseUIEvent } from '@base-ui/react'
5
6
  import { Button } from '@admin/components/ui/button'
6
7
  import { useMark } from '@admin/hooks/content-editor/use-mark'
7
8
  import { useTiptapEditor } from '@admin/hooks/content-editor/use-tiptap-editor'
@@ -48,7 +49,7 @@ export function MarkButton({
48
49
  })
49
50
 
50
51
  const handleClick = useCallback(
51
- (event: React.MouseEvent<HTMLButtonElement>) => {
52
+ (event: BaseUIEvent<React.MouseEvent<HTMLButtonElement>>) => {
52
53
  onClick?.(event)
53
54
  if (event.defaultPrevented) return
54
55
  handleMark()
@@ -2,6 +2,7 @@
2
2
 
3
3
  import type { ControlAvailability, ControlShortcut, ControlTooltip } from '../control-options'
4
4
  import type { UseUndoRedoConfig } from '@admin/hooks/content-editor/use-undo-redo'
5
+ import type { BaseUIEvent } from '@base-ui/react'
5
6
  import { Button } from '@admin/components/ui/button'
6
7
  import { useTiptapEditor } from '@admin/hooks/content-editor/use-tiptap-editor'
7
8
  import { useUndoRedo } from '@admin/hooks/content-editor/use-undo-redo'
@@ -48,7 +49,7 @@ export function UndoRedoButton({
48
49
  })
49
50
 
50
51
  const handleClick = useCallback(
51
- (event: React.MouseEvent<HTMLButtonElement>) => {
52
+ (event: BaseUIEvent<React.MouseEvent<HTMLButtonElement>>) => {
52
53
  onClick?.(event)
53
54
  if (event.defaultPrevented) return
54
55
  handleAction()
@@ -32,20 +32,22 @@ export function DatePicker({
32
32
 
33
33
  return (
34
34
  <Popover open={open} onOpenChange={setOpen}>
35
- <PopoverTrigger asChild>
36
- <Button
37
- variant="outline"
38
- size="lg"
39
- className={cn(
40
- 'w-full justify-start pl-3! text-left font-normal',
41
- { 'text-muted-foreground': !date },
42
- className
43
- )}
44
- disabled={disabled}
45
- >
46
- <CalendarIcon className="size-4" />
47
- {date ? format(date, 'PPP') : <span>{placeholder}</span>}
48
- </Button>
35
+ <PopoverTrigger
36
+ render={
37
+ <Button
38
+ variant="outline"
39
+ size="lg"
40
+ className={cn(
41
+ 'w-full justify-start pl-3! text-left font-normal',
42
+ { 'text-muted-foreground': !date },
43
+ className
44
+ )}
45
+ disabled={disabled}
46
+ />
47
+ }
48
+ >
49
+ <CalendarIcon className="size-4" />
50
+ {date ? format(date, 'PPP') : <span>{placeholder}</span>}
49
51
  </PopoverTrigger>
50
52
  <PopoverContent className="w-auto overflow-hidden p-0" align="start">
51
53
  <Calendar
@@ -130,12 +130,14 @@ export function DateRangePicker({
130
130
  }
131
131
  }}
132
132
  >
133
- <PopoverTrigger asChild>
134
- <Button variant="outline" className={cn('w-[206px]', className)} disabled={disabled}>
135
- <CalendarIcon />
136
- <span className="min-w-0 flex-1 truncate text-left tabular-nums">{triggerLabel}</span>
137
- <ChevronDown />
138
- </Button>
133
+ <PopoverTrigger
134
+ render={
135
+ <Button variant="outline" className={cn('w-[206px]', className)} disabled={disabled} />
136
+ }
137
+ >
138
+ <CalendarIcon />
139
+ <span className="min-w-0 flex-1 truncate text-left tabular-nums">{triggerLabel}</span>
140
+ <ChevronDown />
139
141
  </PopoverTrigger>
140
142
  <PopoverContent className="w-[282px] gap-0 overflow-hidden rounded-sm p-0" align="start">
141
143
  <Calendar
@@ -346,16 +346,17 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
346
346
  }, [isPopoverVisible, virtualizer])
347
347
 
348
348
  const selectedIconName = (value || selectedIcon) as IconName | undefined
349
+ const trigger = React.isValidElement(children) ? (
350
+ children
351
+ ) : (
352
+ <Button variant="outline" size="lg">
353
+ {selectedIconName ? <DynamicIcon name={selectedIconName} /> : triggerPlaceholder}
354
+ </Button>
355
+ )
349
356
 
350
357
  return (
351
358
  <Popover open={open ?? isOpen} onOpenChange={handleOpenChange} modal={modal}>
352
- <PopoverTrigger ref={ref} asChild {...props}>
353
- {children || (
354
- <Button variant="outline" size="lg">
355
- {selectedIconName ? <DynamicIcon name={selectedIconName} /> : triggerPlaceholder}
356
- </Button>
357
- )}
358
- </PopoverTrigger>
359
+ <PopoverTrigger ref={ref} render={trigger} {...props} />
359
360
  <PopoverContent className="w-64 p-2">
360
361
  {searchable && (
361
362
  <Input placeholder={searchPlaceholder} onChange={handleSearchChange} className="mb-2" />
@@ -170,10 +170,8 @@ export function NestedObjectListField({
170
170
 
171
171
  <CardContent className="p-0!">
172
172
  <Accordion
173
- type="single"
174
- collapsible
175
- value={expanded}
176
- onValueChange={handleExpandedChange}
173
+ value={expanded ? [expanded] : []}
174
+ onValueChange={(nextValue) => handleExpandedChange(nextValue[0] ?? '')}
177
175
  className="border-none"
178
176
  >
179
177
  {items.map((_, index) => (
@@ -1,47 +1,34 @@
1
- 'use client'
2
-
3
- import type * as React from 'react'
4
1
  import { cn } from '@admin/utils/shared/cn'
2
+ import { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'
5
3
  import { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'
6
- import { Accordion as AccordionPrimitive } from 'radix-ui'
7
4
 
8
- function Accordion({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {
5
+ function Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {
9
6
  return (
10
7
  <AccordionPrimitive.Root
11
8
  data-slot="accordion"
12
- className={cn(
13
- 'flex w-full flex-col overflow-hidden rounded-sm border border-border bg-card shadow-2xl/1',
14
- className
15
- )}
9
+ className={cn('flex w-full flex-col overflow-hidden rounded-2xl border', className)}
16
10
  {...props}
17
11
  />
18
12
  )
19
13
  }
20
14
 
21
- function AccordionItem({
22
- className,
23
- ...props
24
- }: React.ComponentProps<typeof AccordionPrimitive.Item>) {
15
+ function AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {
25
16
  return (
26
17
  <AccordionPrimitive.Item
27
18
  data-slot="accordion-item"
28
- className={cn('not-last:border-b data-open:bg-background', className)}
19
+ className={cn('not-last:border-b data-open:bg-muted/50', className)}
29
20
  {...props}
30
21
  />
31
22
  )
32
23
  }
33
24
 
34
- function AccordionTrigger({
35
- className,
36
- children,
37
- ...props
38
- }: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
25
+ function AccordionTrigger({ className, children, ...props }: AccordionPrimitive.Trigger.Props) {
39
26
  return (
40
27
  <AccordionPrimitive.Header className="flex">
41
28
  <AccordionPrimitive.Trigger
42
29
  data-slot="accordion-trigger"
43
30
  className={cn(
44
- 'group/accordion-trigger relative flex flex-1 items-start justify-between gap-6 border border-transparent p-4 text-left text-sm font-medium transition-all outline-none disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-foreground',
31
+ 'group/accordion-trigger relative flex flex-1 items-start justify-between gap-6 border border-transparent p-4 text-left text-sm font-medium transition-all outline-none hover:underline aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground',
45
32
  className
46
33
  )}
47
34
  {...props}
@@ -60,26 +47,22 @@ function AccordionTrigger({
60
47
  )
61
48
  }
62
49
 
63
- function AccordionContent({
64
- className,
65
- children,
66
- ...props
67
- }: React.ComponentProps<typeof AccordionPrimitive.Content>) {
50
+ function AccordionContent({ className, children, ...props }: AccordionPrimitive.Panel.Props) {
68
51
  return (
69
- <AccordionPrimitive.Content
52
+ <AccordionPrimitive.Panel
70
53
  data-slot="accordion-content"
71
54
  className="overflow-hidden px-4 text-sm data-open:animate-accordion-down data-closed:animate-accordion-up"
72
55
  {...props}
73
56
  >
74
57
  <div
75
58
  className={cn(
76
- 'h-auto pt-0 pb-4 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',
59
+ 'h-(--accordion-panel-height) pt-0 pb-4 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',
77
60
  className
78
61
  )}
79
62
  >
80
63
  {children}
81
64
  </div>
82
- </AccordionPrimitive.Content>
65
+ </AccordionPrimitive.Panel>
83
66
  )
84
67
  }
85
68