@baseplate-dev/react-generators 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/dist/constants/react-packages.d.ts +1 -1
  2. package/dist/constants/react-packages.js +1 -1
  3. package/dist/constants/react-packages.js.map +1 -1
  4. package/dist/generators/admin/_providers/admin-crud-action-container.d.ts +18 -0
  5. package/dist/generators/admin/_providers/admin-crud-action-container.d.ts.map +1 -0
  6. package/dist/generators/admin/_providers/admin-crud-action-container.js +3 -0
  7. package/dist/generators/admin/_providers/admin-crud-action-container.js.map +1 -0
  8. package/dist/generators/admin/_providers/index.d.ts +1 -0
  9. package/dist/generators/admin/_providers/index.d.ts.map +1 -1
  10. package/dist/generators/admin/_providers/index.js +1 -0
  11. package/dist/generators/admin/_providers/index.js.map +1 -1
  12. package/dist/generators/admin/admin-bull-board/admin-bull-board.generator.d.ts +88 -3
  13. package/dist/generators/admin/admin-bull-board/admin-bull-board.generator.d.ts.map +1 -1
  14. package/dist/generators/admin/admin-bull-board/generated/index.d.ts +176 -6
  15. package/dist/generators/admin/admin-bull-board/generated/index.d.ts.map +1 -1
  16. package/dist/generators/admin/admin-bull-board/generated/template-renderers.d.ts +88 -3
  17. package/dist/generators/admin/admin-bull-board/generated/template-renderers.d.ts.map +1 -1
  18. package/dist/generators/admin/admin-bull-board/generated/typed-templates.d.ts +88 -3
  19. package/dist/generators/admin/admin-bull-board/generated/typed-templates.d.ts.map +1 -1
  20. package/dist/generators/admin/admin-components/admin-components.generator.d.ts +88 -3
  21. package/dist/generators/admin/admin-components/admin-components.generator.d.ts.map +1 -1
  22. package/dist/generators/admin/admin-components/generated/index.d.ts +440 -15
  23. package/dist/generators/admin/admin-components/generated/index.d.ts.map +1 -1
  24. package/dist/generators/admin/admin-components/generated/template-renderers.d.ts +88 -3
  25. package/dist/generators/admin/admin-components/generated/template-renderers.d.ts.map +1 -1
  26. package/dist/generators/admin/admin-components/generated/typed-templates.d.ts +704 -24
  27. package/dist/generators/admin/admin-components/generated/typed-templates.d.ts.map +1 -1
  28. package/dist/generators/admin/admin-crud-delete-action/admin-crud-delete-action.generator.d.ts +228 -0
  29. package/dist/generators/admin/admin-crud-delete-action/admin-crud-delete-action.generator.d.ts.map +1 -0
  30. package/dist/generators/admin/admin-crud-delete-action/admin-crud-delete-action.generator.js +99 -0
  31. package/dist/generators/admin/admin-crud-delete-action/admin-crud-delete-action.generator.js.map +1 -0
  32. package/dist/generators/admin/admin-crud-delete-action/index.d.ts +2 -0
  33. package/dist/generators/admin/admin-crud-delete-action/index.d.ts.map +1 -0
  34. package/dist/generators/admin/admin-crud-delete-action/index.js +2 -0
  35. package/dist/generators/admin/admin-crud-delete-action/index.js.map +1 -0
  36. package/dist/generators/admin/admin-crud-edit/admin-crud-edit.generator.d.ts +311 -9
  37. package/dist/generators/admin/admin-crud-edit/admin-crud-edit.generator.d.ts.map +1 -1
  38. package/dist/generators/admin/admin-crud-edit/admin-crud-edit.generator.js +27 -27
  39. package/dist/generators/admin/admin-crud-edit/admin-crud-edit.generator.js.map +1 -1
  40. package/dist/generators/admin/admin-crud-edit/generated/index.d.ts +196 -10
  41. package/dist/generators/admin/admin-crud-edit/generated/index.d.ts.map +1 -1
  42. package/dist/generators/admin/admin-crud-edit/generated/template-renderers.d.ts +91 -3
  43. package/dist/generators/admin/admin-crud-edit/generated/template-renderers.d.ts.map +1 -1
  44. package/dist/generators/admin/admin-crud-edit/generated/template-renderers.js +6 -0
  45. package/dist/generators/admin/admin-crud-edit/generated/template-renderers.js.map +1 -1
  46. package/dist/generators/admin/admin-crud-edit/generated/typed-templates.d.ts +108 -7
  47. package/dist/generators/admin/admin-crud-edit/generated/typed-templates.d.ts.map +1 -1
  48. package/dist/generators/admin/admin-crud-edit/generated/typed-templates.js +17 -4
  49. package/dist/generators/admin/admin-crud-edit/generated/typed-templates.js.map +1 -1
  50. package/dist/generators/admin/admin-crud-edit/templates/create.tsx +3 -0
  51. package/dist/generators/admin/admin-crud-edit/templates/edit-form.tsx +17 -5
  52. package/dist/generators/admin/admin-crud-edit/templates/edit.tsx +12 -5
  53. package/dist/generators/admin/admin-crud-edit/templates/route.tsx +9 -0
  54. package/dist/generators/admin/admin-crud-edit-action/admin-crud-edit-action.generator.d.ts +221 -0
  55. package/dist/generators/admin/admin-crud-edit-action/admin-crud-edit-action.generator.d.ts.map +1 -0
  56. package/dist/generators/admin/admin-crud-edit-action/admin-crud-edit-action.generator.js +67 -0
  57. package/dist/generators/admin/admin-crud-edit-action/admin-crud-edit-action.generator.js.map +1 -0
  58. package/dist/generators/admin/admin-crud-edit-action/index.d.ts +2 -0
  59. package/dist/generators/admin/admin-crud-edit-action/index.d.ts.map +1 -0
  60. package/dist/generators/admin/admin-crud-edit-action/index.js +2 -0
  61. package/dist/generators/admin/admin-crud-edit-action/index.js.map +1 -0
  62. package/dist/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.d.ts +88 -3
  63. package/dist/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.d.ts.map +1 -1
  64. package/dist/generators/admin/admin-crud-embedded-form/generated/index.d.ts +176 -6
  65. package/dist/generators/admin/admin-crud-embedded-form/generated/index.d.ts.map +1 -1
  66. package/dist/generators/admin/admin-crud-embedded-form/generated/template-renderers.d.ts +88 -3
  67. package/dist/generators/admin/admin-crud-embedded-form/generated/template-renderers.d.ts.map +1 -1
  68. package/dist/generators/admin/admin-crud-embedded-form/generated/typed-templates.d.ts +88 -3
  69. package/dist/generators/admin/admin-crud-embedded-form/generated/typed-templates.d.ts.map +1 -1
  70. package/dist/generators/admin/admin-crud-enum-input/admin-crud-enum-input.generator.d.ts +88 -3
  71. package/dist/generators/admin/admin-crud-enum-input/admin-crud-enum-input.generator.d.ts.map +1 -1
  72. package/dist/generators/admin/admin-crud-foreign-column/admin-crud-foreign-column.generator.d.ts +20 -0
  73. package/dist/generators/admin/admin-crud-foreign-column/admin-crud-foreign-column.generator.d.ts.map +1 -0
  74. package/dist/generators/admin/admin-crud-foreign-column/admin-crud-foreign-column.generator.js +67 -0
  75. package/dist/generators/admin/admin-crud-foreign-column/admin-crud-foreign-column.generator.js.map +1 -0
  76. package/dist/generators/admin/admin-crud-foreign-column/index.d.ts +2 -0
  77. package/dist/generators/admin/admin-crud-foreign-column/index.d.ts.map +1 -0
  78. package/dist/generators/admin/admin-crud-foreign-column/index.js +2 -0
  79. package/dist/generators/admin/admin-crud-foreign-column/index.js.map +1 -0
  80. package/dist/generators/admin/admin-crud-foreign-input/admin-crud-foreign-input.generator.d.ts +88 -3
  81. package/dist/generators/admin/admin-crud-foreign-input/admin-crud-foreign-input.generator.d.ts.map +1 -1
  82. package/dist/generators/admin/admin-crud-list/admin-crud-list.generator.d.ts +306 -8
  83. package/dist/generators/admin/admin-crud-list/admin-crud-list.generator.d.ts.map +1 -1
  84. package/dist/generators/admin/admin-crud-list/admin-crud-list.generator.js +65 -22
  85. package/dist/generators/admin/admin-crud-list/admin-crud-list.generator.js.map +1 -1
  86. package/dist/generators/admin/admin-crud-list/generated/index.d.ts +273 -27
  87. package/dist/generators/admin/admin-crud-list/generated/index.d.ts.map +1 -1
  88. package/dist/generators/admin/admin-crud-list/generated/template-renderers.d.ts +88 -8
  89. package/dist/generators/admin/admin-crud-list/generated/template-renderers.d.ts.map +1 -1
  90. package/dist/generators/admin/admin-crud-list/generated/template-renderers.js +1 -4
  91. package/dist/generators/admin/admin-crud-list/generated/template-renderers.js.map +1 -1
  92. package/dist/generators/admin/admin-crud-list/generated/typed-templates.d.ts +185 -19
  93. package/dist/generators/admin/admin-crud-list/generated/typed-templates.d.ts.map +1 -1
  94. package/dist/generators/admin/admin-crud-list/generated/typed-templates.js +7 -12
  95. package/dist/generators/admin/admin-crud-list/generated/typed-templates.js.map +1 -1
  96. package/dist/generators/admin/admin-crud-list/templates/index.tsx +7 -21
  97. package/dist/generators/admin/admin-crud-list/templates/table.tsx +53 -0
  98. package/dist/generators/admin/admin-crud-password-input/admin-crud-password-input.generator.d.ts +88 -3
  99. package/dist/generators/admin/admin-crud-password-input/admin-crud-password-input.generator.d.ts.map +1 -1
  100. package/dist/generators/admin/admin-crud-text-column/admin-crud-text-column.generator.d.ts +11 -0
  101. package/dist/generators/admin/admin-crud-text-column/admin-crud-text-column.generator.d.ts.map +1 -0
  102. package/dist/generators/admin/admin-crud-text-column/admin-crud-text-column.generator.js +35 -0
  103. package/dist/generators/admin/admin-crud-text-column/admin-crud-text-column.generator.js.map +1 -0
  104. package/dist/generators/admin/admin-crud-text-column/index.d.ts +2 -0
  105. package/dist/generators/admin/admin-crud-text-column/index.d.ts.map +1 -0
  106. package/dist/generators/admin/admin-crud-text-column/index.js +2 -0
  107. package/dist/generators/admin/admin-crud-text-column/index.js.map +1 -0
  108. package/dist/generators/admin/admin-crud-text-input/admin-crud-text-input.generator.d.ts +88 -3
  109. package/dist/generators/admin/admin-crud-text-input/admin-crud-text-input.generator.d.ts.map +1 -1
  110. package/dist/generators/admin/admin-home/admin-home.generator.d.ts +88 -3
  111. package/dist/generators/admin/admin-home/admin-home.generator.d.ts.map +1 -1
  112. package/dist/generators/admin/admin-home/generated/index.d.ts +176 -6
  113. package/dist/generators/admin/admin-home/generated/index.d.ts.map +1 -1
  114. package/dist/generators/admin/admin-home/generated/template-renderers.d.ts +88 -3
  115. package/dist/generators/admin/admin-home/generated/template-renderers.d.ts.map +1 -1
  116. package/dist/generators/admin/admin-home/generated/typed-templates.d.ts +88 -3
  117. package/dist/generators/admin/admin-home/generated/typed-templates.d.ts.map +1 -1
  118. package/dist/generators/admin/admin-home/templates/routes/index.tsx +0 -1
  119. package/dist/generators/admin/admin-layout/admin-layout.generator.d.ts +176 -6
  120. package/dist/generators/admin/admin-layout/admin-layout.generator.d.ts.map +1 -1
  121. package/dist/generators/admin/admin-layout/admin-layout.generator.js +14 -9
  122. package/dist/generators/admin/admin-layout/admin-layout.generator.js.map +1 -1
  123. package/dist/generators/admin/admin-layout/generated/index.d.ts +746 -145
  124. package/dist/generators/admin/admin-layout/generated/index.d.ts.map +1 -1
  125. package/dist/generators/admin/admin-layout/generated/template-paths.d.ts +2 -0
  126. package/dist/generators/admin/admin-layout/generated/template-paths.d.ts.map +1 -1
  127. package/dist/generators/admin/admin-layout/generated/template-paths.js +2 -0
  128. package/dist/generators/admin/admin-layout/generated/template-paths.js.map +1 -1
  129. package/dist/generators/admin/admin-layout/generated/template-renderers.d.ts +92 -7
  130. package/dist/generators/admin/admin-layout/generated/template-renderers.d.ts.map +1 -1
  131. package/dist/generators/admin/admin-layout/generated/template-renderers.js +10 -9
  132. package/dist/generators/admin/admin-layout/generated/template-renderers.js.map +1 -1
  133. package/dist/generators/admin/admin-layout/generated/typed-templates.d.ts +1179 -5
  134. package/dist/generators/admin/admin-layout/generated/typed-templates.d.ts.map +1 -1
  135. package/dist/generators/admin/admin-layout/generated/typed-templates.js +42 -13
  136. package/dist/generators/admin/admin-layout/generated/typed-templates.js.map +1 -1
  137. package/dist/generators/admin/admin-layout/templates/components/layouts/admin-layout.tsx +21 -34
  138. package/dist/generators/admin/admin-layout/templates/components/layouts/app-breadcrumbs.tsx +53 -0
  139. package/dist/generators/admin/admin-layout/templates/components/layouts/app-sidebar.tsx +50 -0
  140. package/dist/generators/admin/admin-layout/templates/routes/route.tsx +3 -0
  141. package/dist/generators/admin/index.d.ts +4 -3
  142. package/dist/generators/admin/index.d.ts.map +1 -1
  143. package/dist/generators/admin/index.js +4 -3
  144. package/dist/generators/admin/index.js.map +1 -1
  145. package/dist/generators/auth/auth-errors/auth-errors.generator.d.ts +88 -3
  146. package/dist/generators/auth/auth-errors/auth-errors.generator.d.ts.map +1 -1
  147. package/dist/generators/core/react-components/generated/index.d.ts +137 -4
  148. package/dist/generators/core/react-components/generated/index.d.ts.map +1 -1
  149. package/dist/generators/core/react-components/generated/template-paths.d.ts +12 -1
  150. package/dist/generators/core/react-components/generated/template-paths.d.ts.map +1 -1
  151. package/dist/generators/core/react-components/generated/template-paths.js +12 -1
  152. package/dist/generators/core/react-components/generated/template-paths.js.map +1 -1
  153. package/dist/generators/core/react-components/generated/ts-import-providers.d.ts +264 -9
  154. package/dist/generators/core/react-components/generated/ts-import-providers.d.ts.map +1 -1
  155. package/dist/generators/core/react-components/generated/ts-import-providers.js +168 -6
  156. package/dist/generators/core/react-components/generated/ts-import-providers.js.map +1 -1
  157. package/dist/generators/core/react-components/generated/typed-templates.d.ts +98 -2
  158. package/dist/generators/core/react-components/generated/typed-templates.d.ts.map +1 -1
  159. package/dist/generators/core/react-components/generated/typed-templates.js +257 -7
  160. package/dist/generators/core/react-components/generated/typed-templates.js.map +1 -1
  161. package/dist/generators/core/react-components/react-components.generator.d.ts +176 -6
  162. package/dist/generators/core/react-components/react-components.generator.d.ts.map +1 -1
  163. package/dist/generators/core/react-components/templates/components/ui/badge.tsx +77 -0
  164. package/dist/generators/core/react-components/templates/components/ui/breadcrumb.tsx +122 -0
  165. package/dist/generators/core/react-components/templates/components/ui/command.tsx +186 -0
  166. package/dist/generators/core/react-components/templates/components/ui/dropdown.tsx +284 -0
  167. package/dist/generators/core/react-components/templates/components/ui/multi-combobox-field.tsx +135 -0
  168. package/dist/generators/core/react-components/templates/components/ui/multi-combobox.tsx +333 -0
  169. package/dist/generators/core/react-components/templates/components/ui/separator.tsx +35 -0
  170. package/dist/generators/core/react-components/templates/components/ui/sheet.tsx +155 -0
  171. package/dist/generators/core/react-components/templates/components/ui/sidebar.tsx +778 -0
  172. package/dist/generators/core/react-components/templates/components/ui/skeleton.tsx +23 -0
  173. package/dist/generators/core/react-components/templates/components/ui/tooltip.tsx +63 -0
  174. package/dist/generators/core/react-components/templates/src/hooks/use-mobile.ts +32 -0
  175. package/dist/generators/core/react-error-boundary/generated/index.d.ts +176 -6
  176. package/dist/generators/core/react-error-boundary/generated/index.d.ts.map +1 -1
  177. package/dist/generators/core/react-error-boundary/generated/template-renderers.d.ts +88 -3
  178. package/dist/generators/core/react-error-boundary/generated/template-renderers.d.ts.map +1 -1
  179. package/dist/generators/core/react-error-boundary/generated/typed-templates.d.ts +88 -3
  180. package/dist/generators/core/react-error-boundary/generated/typed-templates.d.ts.map +1 -1
  181. package/dist/generators/core/react-error-boundary/react-error-boundary.generator.d.ts +88 -3
  182. package/dist/generators/core/react-error-boundary/react-error-boundary.generator.d.ts.map +1 -1
  183. package/dist/generators/core/react-router/generated/index.d.ts +176 -6
  184. package/dist/generators/core/react-router/generated/index.d.ts.map +1 -1
  185. package/dist/generators/core/react-router/generated/template-renderers.d.ts +88 -3
  186. package/dist/generators/core/react-router/generated/template-renderers.d.ts.map +1 -1
  187. package/dist/generators/core/react-router/generated/typed-templates.d.ts +88 -3
  188. package/dist/generators/core/react-router/generated/typed-templates.d.ts.map +1 -1
  189. package/dist/generators/core/react-router/react-router.generator.d.ts +88 -3
  190. package/dist/generators/core/react-router/react-router.generator.d.ts.map +1 -1
  191. package/dist/generators/core/react-router/templates/src/app/router.tsx +7 -1
  192. package/package.json +5 -5
  193. package/dist/generators/admin/admin-crud-column/admin-crud-column.generator.d.ts +0 -12
  194. package/dist/generators/admin/admin-crud-column/admin-crud-column.generator.d.ts.map +0 -1
  195. package/dist/generators/admin/admin-crud-column/admin-crud-column.generator.js +0 -52
  196. package/dist/generators/admin/admin-crud-column/admin-crud-column.generator.js.map +0 -1
  197. package/dist/generators/admin/admin-crud-column/index.d.ts +0 -2
  198. package/dist/generators/admin/admin-crud-column/index.d.ts.map +0 -1
  199. package/dist/generators/admin/admin-crud-column/index.js +0 -2
  200. package/dist/generators/admin/admin-crud-column/index.js.map +0 -1
  201. package/dist/generators/admin/admin-crud-foreign-display/admin-crud-foreign-display.generator.d.ts +0 -17
  202. package/dist/generators/admin/admin-crud-foreign-display/admin-crud-foreign-display.generator.d.ts.map +0 -1
  203. package/dist/generators/admin/admin-crud-foreign-display/admin-crud-foreign-display.generator.js +0 -60
  204. package/dist/generators/admin/admin-crud-foreign-display/admin-crud-foreign-display.generator.js.map +0 -1
  205. package/dist/generators/admin/admin-crud-foreign-display/index.d.ts +0 -2
  206. package/dist/generators/admin/admin-crud-foreign-display/index.d.ts.map +0 -1
  207. package/dist/generators/admin/admin-crud-foreign-display/index.js +0 -2
  208. package/dist/generators/admin/admin-crud-foreign-display/index.js.map +0 -1
  209. package/dist/generators/admin/admin-crud-list/templates/Table.tsx +0 -91
  210. package/dist/generators/admin/admin-crud-text-display/admin-crud-text-display.generator.d.ts +0 -8
  211. package/dist/generators/admin/admin-crud-text-display/admin-crud-text-display.generator.d.ts.map +0 -1
  212. package/dist/generators/admin/admin-crud-text-display/admin-crud-text-display.generator.js +0 -28
  213. package/dist/generators/admin/admin-crud-text-display/admin-crud-text-display.generator.js.map +0 -1
  214. package/dist/generators/admin/admin-crud-text-display/index.d.ts +0 -2
  215. package/dist/generators/admin/admin-crud-text-display/index.d.ts.map +0 -1
  216. package/dist/generators/admin/admin-crud-text-display/index.js +0 -2
  217. package/dist/generators/admin/admin-crud-text-display/index.js.map +0 -1
  218. package/dist/generators/core/react-components/templates/components/ui/sidebar-layout.tsx +0 -70
@@ -0,0 +1,186 @@
1
+ // @ts-nocheck
2
+
3
+ 'use client';
4
+
5
+ import type * as React from 'react';
6
+
7
+ import { cn } from '$cn';
8
+ import {
9
+ Dialog,
10
+ DialogContent,
11
+ DialogDescription,
12
+ DialogHeader,
13
+ DialogTitle,
14
+ } from '$dialog';
15
+ import { Command as CommandPrimitive } from 'cmdk';
16
+ import { MdSearch } from 'react-icons/md';
17
+
18
+ /**
19
+ * Fast, composable, unstyled command menu for React.
20
+ *
21
+ * https://ui.shadcn.com/docs/components/command
22
+ */
23
+ function Command({
24
+ className,
25
+ ...props
26
+ }: React.ComponentProps<typeof CommandPrimitive>): React.ReactElement {
27
+ return (
28
+ <CommandPrimitive
29
+ data-slot="command"
30
+ className={cn(
31
+ 'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',
32
+ className,
33
+ )}
34
+ {...props}
35
+ />
36
+ );
37
+ }
38
+
39
+ function CommandDialog({
40
+ title = 'Command Palette',
41
+ description = 'Search for a command to run...',
42
+ children,
43
+ ...props
44
+ }: React.ComponentProps<typeof Dialog> & {
45
+ title?: string;
46
+ description?: string;
47
+ }): React.ReactElement {
48
+ return (
49
+ <Dialog {...props}>
50
+ <DialogHeader className="sr-only">
51
+ <DialogTitle>{title}</DialogTitle>
52
+ <DialogDescription>{description}</DialogDescription>
53
+ </DialogHeader>
54
+ <DialogContent className="overflow-hidden p-0">
55
+ <Command className="**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
56
+ {children}
57
+ </Command>
58
+ </DialogContent>
59
+ </Dialog>
60
+ );
61
+ }
62
+
63
+ function CommandInput({
64
+ className,
65
+ ...props
66
+ }: React.ComponentProps<typeof CommandPrimitive.Input>): React.ReactElement {
67
+ return (
68
+ <div
69
+ data-slot="command-input-wrapper"
70
+ className="flex h-9 items-center gap-2 border-b px-3"
71
+ >
72
+ <MdSearch className="size-4 shrink-0 opacity-50" />
73
+ <CommandPrimitive.Input
74
+ data-slot="command-input"
75
+ className={cn(
76
+ 'flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',
77
+ className,
78
+ )}
79
+ {...props}
80
+ />
81
+ </div>
82
+ );
83
+ }
84
+
85
+ function CommandList({
86
+ className,
87
+ ...props
88
+ }: React.ComponentProps<typeof CommandPrimitive.List>): React.ReactElement {
89
+ return (
90
+ <CommandPrimitive.List
91
+ data-slot="command-list"
92
+ className={cn(
93
+ 'max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto',
94
+ className,
95
+ )}
96
+ {...props}
97
+ />
98
+ );
99
+ }
100
+
101
+ function CommandEmpty({
102
+ ...props
103
+ }: React.ComponentProps<typeof CommandPrimitive.Empty>): React.ReactElement {
104
+ return (
105
+ <CommandPrimitive.Empty
106
+ data-slot="command-empty"
107
+ className="py-6 text-center text-sm"
108
+ {...props}
109
+ />
110
+ );
111
+ }
112
+
113
+ function CommandGroup({
114
+ className,
115
+ ...props
116
+ }: React.ComponentProps<typeof CommandPrimitive.Group>): React.ReactElement {
117
+ return (
118
+ <CommandPrimitive.Group
119
+ data-slot="command-group"
120
+ className={cn(
121
+ 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground',
122
+ className,
123
+ )}
124
+ {...props}
125
+ />
126
+ );
127
+ }
128
+
129
+ function CommandSeparator({
130
+ className,
131
+ ...props
132
+ }: React.ComponentProps<
133
+ typeof CommandPrimitive.Separator
134
+ >): React.ReactElement {
135
+ return (
136
+ <CommandPrimitive.Separator
137
+ data-slot="command-separator"
138
+ className={cn('-mx-1 h-px bg-border', className)}
139
+ {...props}
140
+ />
141
+ );
142
+ }
143
+
144
+ function CommandItem({
145
+ className,
146
+ ...props
147
+ }: React.ComponentProps<typeof CommandPrimitive.Item>): React.ReactElement {
148
+ return (
149
+ <CommandPrimitive.Item
150
+ data-slot="command-item"
151
+ className={cn(
152
+ "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
153
+ className,
154
+ )}
155
+ {...props}
156
+ />
157
+ );
158
+ }
159
+
160
+ function CommandShortcut({
161
+ className,
162
+ ...props
163
+ }: React.ComponentProps<'span'>): React.ReactElement {
164
+ return (
165
+ <span
166
+ data-slot="command-shortcut"
167
+ className={cn(
168
+ 'ml-auto text-xs tracking-widest text-muted-foreground',
169
+ className,
170
+ )}
171
+ {...props}
172
+ />
173
+ );
174
+ }
175
+
176
+ export {
177
+ Command,
178
+ CommandDialog,
179
+ CommandEmpty,
180
+ CommandGroup,
181
+ CommandInput,
182
+ CommandItem,
183
+ CommandList,
184
+ CommandSeparator,
185
+ CommandShortcut,
186
+ };
@@ -0,0 +1,284 @@
1
+ // @ts-nocheck
2
+
3
+ 'use client';
4
+
5
+ import type * as React from 'react';
6
+
7
+ import { cn } from '$cn';
8
+ import { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';
9
+ import { MdCheck, MdChevronRight, MdCircle } from 'react-icons/md';
10
+
11
+ /**
12
+ * Displays a menu to the user — such as a set of actions or functions — triggered by a button.
13
+ *
14
+ * https://ui.shadcn.com/docs/components/dropdown-menu
15
+ */
16
+ function DropdownMenu({
17
+ ...props
18
+ }: React.ComponentProps<
19
+ typeof DropdownMenuPrimitive.Root
20
+ >): React.ReactElement {
21
+ return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
22
+ }
23
+
24
+ function DropdownMenuPortal({
25
+ ...props
26
+ }: React.ComponentProps<
27
+ typeof DropdownMenuPrimitive.Portal
28
+ >): React.ReactElement {
29
+ return (
30
+ <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
31
+ );
32
+ }
33
+
34
+ function DropdownMenuTrigger({
35
+ ...props
36
+ }: React.ComponentProps<
37
+ typeof DropdownMenuPrimitive.Trigger
38
+ >): React.ReactElement {
39
+ return (
40
+ <DropdownMenuPrimitive.Trigger
41
+ data-slot="dropdown-menu-trigger"
42
+ {...props}
43
+ />
44
+ );
45
+ }
46
+
47
+ function DropdownMenuContent({
48
+ className,
49
+ sideOffset = 4,
50
+ ...props
51
+ }: React.ComponentProps<
52
+ typeof DropdownMenuPrimitive.Content
53
+ >): React.ReactElement {
54
+ return (
55
+ <DropdownMenuPrimitive.Portal>
56
+ <DropdownMenuPrimitive.Content
57
+ data-slot="dropdown-menu-content"
58
+ sideOffset={sideOffset}
59
+ className={cn(
60
+ 'z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',
61
+ className,
62
+ )}
63
+ {...props}
64
+ />
65
+ </DropdownMenuPrimitive.Portal>
66
+ );
67
+ }
68
+
69
+ function DropdownMenuGroup({
70
+ ...props
71
+ }: React.ComponentProps<
72
+ typeof DropdownMenuPrimitive.Group
73
+ >): React.ReactElement {
74
+ return (
75
+ <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
76
+ );
77
+ }
78
+
79
+ function DropdownMenuItem({
80
+ className,
81
+ inset,
82
+ variant = 'default',
83
+ ...props
84
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
85
+ inset?: boolean;
86
+ variant?: 'default' | 'destructive';
87
+ }): React.ReactElement {
88
+ return (
89
+ <DropdownMenuPrimitive.Item
90
+ data-slot="dropdown-menu-item"
91
+ data-inset={inset}
92
+ data-variant={variant}
93
+ className={cn(
94
+ "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive",
95
+ className,
96
+ )}
97
+ {...props}
98
+ />
99
+ );
100
+ }
101
+
102
+ function DropdownMenuCheckboxItem({
103
+ className,
104
+ children,
105
+ checked,
106
+ ...props
107
+ }: React.ComponentProps<
108
+ typeof DropdownMenuPrimitive.CheckboxItem
109
+ >): React.ReactElement {
110
+ return (
111
+ <DropdownMenuPrimitive.CheckboxItem
112
+ data-slot="dropdown-menu-checkbox-item"
113
+ className={cn(
114
+ "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
115
+ className,
116
+ )}
117
+ checked={checked}
118
+ {...props}
119
+ >
120
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
121
+ <DropdownMenuPrimitive.ItemIndicator>
122
+ <MdCheck className="size-4" />
123
+ </DropdownMenuPrimitive.ItemIndicator>
124
+ </span>
125
+ {children}
126
+ </DropdownMenuPrimitive.CheckboxItem>
127
+ );
128
+ }
129
+
130
+ function DropdownMenuRadioGroup({
131
+ ...props
132
+ }: React.ComponentProps<
133
+ typeof DropdownMenuPrimitive.RadioGroup
134
+ >): React.ReactElement {
135
+ return (
136
+ <DropdownMenuPrimitive.RadioGroup
137
+ data-slot="dropdown-menu-radio-group"
138
+ {...props}
139
+ />
140
+ );
141
+ }
142
+
143
+ function DropdownMenuRadioItem({
144
+ className,
145
+ children,
146
+ ...props
147
+ }: React.ComponentProps<
148
+ typeof DropdownMenuPrimitive.RadioItem
149
+ >): React.ReactElement {
150
+ return (
151
+ <DropdownMenuPrimitive.RadioItem
152
+ data-slot="dropdown-menu-radio-item"
153
+ className={cn(
154
+ "relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
155
+ className,
156
+ )}
157
+ {...props}
158
+ >
159
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
160
+ <DropdownMenuPrimitive.ItemIndicator>
161
+ <MdCircle className="size-2 fill-current" />
162
+ </DropdownMenuPrimitive.ItemIndicator>
163
+ </span>
164
+ {children}
165
+ </DropdownMenuPrimitive.RadioItem>
166
+ );
167
+ }
168
+
169
+ function DropdownMenuLabel({
170
+ className,
171
+ inset,
172
+ ...props
173
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
174
+ inset?: boolean;
175
+ }): React.ReactElement {
176
+ return (
177
+ <DropdownMenuPrimitive.Label
178
+ data-slot="dropdown-menu-label"
179
+ data-inset={inset}
180
+ className={cn(
181
+ 'px-2 py-1.5 text-sm font-medium data-[inset]:pl-8',
182
+ className,
183
+ )}
184
+ {...props}
185
+ />
186
+ );
187
+ }
188
+
189
+ function DropdownMenuSeparator({
190
+ className,
191
+ ...props
192
+ }: React.ComponentProps<
193
+ typeof DropdownMenuPrimitive.Separator
194
+ >): React.ReactElement {
195
+ return (
196
+ <DropdownMenuPrimitive.Separator
197
+ data-slot="dropdown-menu-separator"
198
+ className={cn('-mx-1 my-1 h-px bg-border', className)}
199
+ {...props}
200
+ />
201
+ );
202
+ }
203
+
204
+ function DropdownMenuShortcut({
205
+ className,
206
+ ...props
207
+ }: React.ComponentProps<'span'>): React.ReactElement {
208
+ return (
209
+ <span
210
+ data-slot="dropdown-menu-shortcut"
211
+ className={cn(
212
+ 'ml-auto text-xs tracking-widest text-muted-foreground',
213
+ className,
214
+ )}
215
+ {...props}
216
+ />
217
+ );
218
+ }
219
+
220
+ function DropdownMenuSub({
221
+ ...props
222
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>): React.ReactElement {
223
+ return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />;
224
+ }
225
+
226
+ function DropdownMenuSubTrigger({
227
+ className,
228
+ inset,
229
+ children,
230
+ ...props
231
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
232
+ inset?: boolean;
233
+ }): React.ReactElement {
234
+ return (
235
+ <DropdownMenuPrimitive.SubTrigger
236
+ data-slot="dropdown-menu-sub-trigger"
237
+ data-inset={inset}
238
+ className={cn(
239
+ 'flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground',
240
+ className,
241
+ )}
242
+ {...props}
243
+ >
244
+ {children}
245
+ <MdChevronRight className="ml-auto size-4" />
246
+ </DropdownMenuPrimitive.SubTrigger>
247
+ );
248
+ }
249
+
250
+ function DropdownMenuSubContent({
251
+ className,
252
+ ...props
253
+ }: React.ComponentProps<
254
+ typeof DropdownMenuPrimitive.SubContent
255
+ >): React.ReactElement {
256
+ return (
257
+ <DropdownMenuPrimitive.SubContent
258
+ data-slot="dropdown-menu-sub-content"
259
+ className={cn(
260
+ 'z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',
261
+ className,
262
+ )}
263
+ {...props}
264
+ />
265
+ );
266
+ }
267
+
268
+ export {
269
+ DropdownMenu,
270
+ DropdownMenuCheckboxItem,
271
+ DropdownMenuContent,
272
+ DropdownMenuGroup,
273
+ DropdownMenuItem,
274
+ DropdownMenuLabel,
275
+ DropdownMenuPortal,
276
+ DropdownMenuRadioGroup,
277
+ DropdownMenuRadioItem,
278
+ DropdownMenuSeparator,
279
+ DropdownMenuShortcut,
280
+ DropdownMenuSub,
281
+ DropdownMenuSubContent,
282
+ DropdownMenuSubTrigger,
283
+ DropdownMenuTrigger,
284
+ };
@@ -0,0 +1,135 @@
1
+ // @ts-nocheck
2
+
3
+ import type {
4
+ AddOptionRequiredFields,
5
+ FormFieldProps,
6
+ MultiSelectOptionProps,
7
+ } from '$typesForm';
8
+ import type React from 'react';
9
+ import type { Control, FieldPath, FieldValues } from 'react-hook-form';
10
+
11
+ import {
12
+ FormControl,
13
+ FormDescription,
14
+ FormItem,
15
+ FormLabel,
16
+ FormMessage,
17
+ } from '$formItem';
18
+ import { useControllerMerged } from '$hooksUseControllerMerged';
19
+ import {
20
+ MultiCombobox,
21
+ MultiComboboxContent,
22
+ MultiComboboxEmpty,
23
+ MultiComboboxInput,
24
+ MultiComboboxItem,
25
+ } from '$multiCombobox';
26
+
27
+ export interface MultiComboboxFieldProps<OptionType>
28
+ extends MultiSelectOptionProps<OptionType>,
29
+ FormFieldProps {
30
+ className?: string;
31
+ noResultsText?: React.ReactNode;
32
+ disabled?: boolean;
33
+ }
34
+
35
+ /**
36
+ * Field with label and error states that wraps a MultiCombobox component.
37
+ */
38
+ function MultiComboboxField<OptionType>({
39
+ label,
40
+ description,
41
+ error,
42
+ value,
43
+ placeholder,
44
+ options,
45
+ renderItemLabel,
46
+ onChange,
47
+ getOptionLabel = (val) => (val as { label: string }).label,
48
+ getOptionValue = (val) => (val as { value: string }).value,
49
+ className,
50
+ noResultsText,
51
+ ...props
52
+ }: MultiComboboxFieldProps<OptionType> &
53
+ AddOptionRequiredFields<OptionType>): React.ReactElement {
54
+ const selectedOptions = value
55
+ ?.map((val) => options.find((option) => getOptionValue(option) === val))
56
+ .filter((x) => x !== undefined);
57
+ const selectedValues = selectedOptions?.map((option) => ({
58
+ label: getOptionLabel(option),
59
+ value: getOptionValue(option),
60
+ }));
61
+
62
+ return (
63
+ <FormItem error={error} className={className}>
64
+ <FormLabel>{label}</FormLabel>
65
+ <MultiCombobox
66
+ value={selectedValues}
67
+ onChange={(value) => {
68
+ const newValues = new Set(value.map((val) => val.value));
69
+ onChange?.(
70
+ options.map(getOptionValue).filter((val) => newValues.has(val)),
71
+ );
72
+ }}
73
+ {...props}
74
+ >
75
+ <FormControl>
76
+ <MultiComboboxInput placeholder={placeholder} />
77
+ </FormControl>
78
+ <MultiComboboxContent>
79
+ {options.map((option) => {
80
+ const val = getOptionValue(option);
81
+ const label = getOptionLabel(option);
82
+ return (
83
+ <MultiComboboxItem value={val} key={val} label={label}>
84
+ {renderItemLabel
85
+ ? renderItemLabel(option, {
86
+ selected: value?.includes(val) ?? false,
87
+ })
88
+ : label}
89
+ </MultiComboboxItem>
90
+ );
91
+ })}
92
+ <MultiComboboxEmpty>
93
+ {noResultsText ?? 'No results found'}
94
+ </MultiComboboxEmpty>
95
+ </MultiComboboxContent>
96
+ </MultiCombobox>
97
+ <FormDescription>{description}</FormDescription>
98
+ <FormMessage />
99
+ </FormItem>
100
+ );
101
+ }
102
+
103
+ interface MultiComboboxFieldControllerProps<
104
+ OptionType,
105
+ TFieldValues extends FieldValues = FieldValues,
106
+ TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
107
+ > extends Omit<MultiComboboxFieldProps<OptionType>, 'value'> {
108
+ control: Control<TFieldValues>;
109
+ name: TFieldName;
110
+ }
111
+
112
+ function MultiComboboxFieldController<
113
+ OptionType,
114
+ TFieldValues extends FieldValues = FieldValues,
115
+ TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
116
+ >({
117
+ name,
118
+ control,
119
+ ...rest
120
+ }: MultiComboboxFieldControllerProps<OptionType, TFieldValues, TFieldName> &
121
+ AddOptionRequiredFields<OptionType>): React.ReactElement {
122
+ const {
123
+ field,
124
+ fieldState: { error },
125
+ } = useControllerMerged({ name, control }, rest);
126
+
127
+ const restProps = rest as MultiComboboxFieldProps<OptionType> &
128
+ AddOptionRequiredFields<OptionType>;
129
+
130
+ return (
131
+ <MultiComboboxField error={error?.message} {...restProps} {...field} />
132
+ );
133
+ }
134
+
135
+ export { MultiComboboxField, MultiComboboxFieldController };