fluxy-bot 0.8.9 → 0.9.0

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 (106) hide show
  1. package/README.md +53 -84
  2. package/bin/cli.js +1717 -6
  3. package/components.json +18 -18
  4. package/package.json +98 -109
  5. package/postcss.config.js +3 -3
  6. package/scripts/install.ps1 +1 -1
  7. package/scripts/install.sh +1 -1
  8. package/scripts/postinstall.js +47 -58
  9. package/shared/ai.ts +118 -202
  10. package/shared/config.ts +37 -39
  11. package/shared/logger.ts +6 -14
  12. package/shared/paths.ts +10 -16
  13. package/shared/relay.ts +89 -98
  14. package/supervisor/backend.ts +77 -89
  15. package/supervisor/chat/ARCHITECTURE.md +13 -14
  16. package/supervisor/chat/OnboardWizard.tsx +2194 -3419
  17. package/supervisor/chat/fluxy-main.tsx +495 -633
  18. package/supervisor/chat/fluxy.html +24 -36
  19. package/supervisor/chat/onboard-main.tsx +8 -8
  20. package/supervisor/chat/onboard.html +10 -13
  21. package/supervisor/chat/src/components/Chat/AudioBubble.tsx +94 -108
  22. package/supervisor/chat/src/components/Chat/ChatView.tsx +14 -36
  23. package/supervisor/chat/src/components/Chat/ImageLightbox.tsx +71 -89
  24. package/supervisor/chat/src/components/Chat/InputBar.tsx +498 -728
  25. package/supervisor/chat/src/components/Chat/MessageBubble.tsx +154 -246
  26. package/supervisor/chat/src/components/Chat/MessageList.tsx +114 -138
  27. package/supervisor/chat/src/components/Chat/TypingIndicator.tsx +38 -50
  28. package/supervisor/chat/src/components/LoginScreen.tsx +245 -296
  29. package/supervisor/chat/src/hooks/useChat.ts +210 -259
  30. package/supervisor/chat/src/hooks/useFluxyChat.ts +232 -322
  31. package/supervisor/chat/src/hooks/useSpeechRecognition.ts +126 -148
  32. package/supervisor/chat/src/lib/auth.ts +20 -23
  33. package/supervisor/chat/src/lib/ws-client.ts +113 -125
  34. package/supervisor/chat/src/styles/globals.css +76 -85
  35. package/supervisor/file-saver.ts +39 -52
  36. package/supervisor/fluxy-agent.ts +213 -292
  37. package/supervisor/index.ts +895 -1263
  38. package/supervisor/scheduler.ts +237 -299
  39. package/supervisor/tunnel.ts +113 -167
  40. package/supervisor/vite-dev.ts +51 -61
  41. package/supervisor/widget.js +135 -147
  42. package/supervisor/worker.ts +45 -49
  43. package/tsconfig.json +18 -24
  44. package/vite.config.ts +48 -55
  45. package/vite.fluxy.config.ts +34 -34
  46. package/worker/claude-auth.ts +202 -265
  47. package/worker/codex-auth.ts +144 -181
  48. package/worker/db.ts +63 -191
  49. package/worker/index.ts +601 -842
  50. package/workspace/MYSELF.md +1 -1
  51. package/workspace/PULSE.json +6 -6
  52. package/workspace/backend/index.ts +16 -19
  53. package/workspace/client/index.html +47 -60
  54. package/workspace/client/public/manifest.json +21 -21
  55. package/workspace/client/public/sw.js +29 -31
  56. package/workspace/client/src/App.tsx +91 -136
  57. package/workspace/client/src/components/Dashboard/DashboardPage.tsx +68 -72
  58. package/workspace/client/src/components/ErrorBoundary.tsx +11 -11
  59. package/workspace/client/src/components/Layout/DashboardLayout.tsx +35 -35
  60. package/workspace/client/src/components/Layout/Footer.tsx +12 -12
  61. package/workspace/client/src/components/Layout/MobileNav.tsx +23 -23
  62. package/workspace/client/src/components/Layout/Sidebar.tsx +81 -81
  63. package/workspace/client/src/components/ui/avatar.tsx +85 -85
  64. package/workspace/client/src/components/ui/badge.tsx +40 -41
  65. package/workspace/client/src/components/ui/button.tsx +56 -57
  66. package/workspace/client/src/components/ui/card.tsx +75 -75
  67. package/workspace/client/src/components/ui/dialog.tsx +114 -117
  68. package/workspace/client/src/components/ui/dropdown-menu.tsx +191 -199
  69. package/workspace/client/src/components/ui/input.tsx +17 -17
  70. package/workspace/client/src/components/ui/scroll-area.tsx +47 -47
  71. package/workspace/client/src/components/ui/select.tsx +145 -151
  72. package/workspace/client/src/components/ui/separator.tsx +21 -21
  73. package/workspace/client/src/components/ui/sheet.tsx +102 -102
  74. package/workspace/client/src/components/ui/skeleton.tsx +10 -10
  75. package/workspace/client/src/components/ui/switch.tsx +26 -26
  76. package/workspace/client/src/components/ui/tabs.tsx +69 -69
  77. package/workspace/client/src/components/ui/textarea.tsx +14 -14
  78. package/workspace/client/src/components/ui/tooltip.tsx +37 -37
  79. package/workspace/client/src/lib/utils.ts +1 -1
  80. package/workspace/client/src/main.tsx +3 -3
  81. package/workspace/client/src/styles/globals.css +76 -85
  82. package/workspace/skills/code-reviewer/.claude-plugin/plugin.json +3 -3
  83. package/workspace/skills/code-reviewer/skills/code-reviewer/SKILL.md +0 -6
  84. package/workspace/skills/daily-standup/.claude-plugin/plugin.json +3 -3
  85. package/workspace/skills/daily-standup/skills/daily-standup/SKILL.md +0 -7
  86. package/workspace/skills/workspace-helper/.claude-plugin/plugin.json +3 -3
  87. package/workspace/skills/workspace-helper/skills/workspace-helper/SKILL.md +0 -2
  88. package/bin/cli.backup.js +0 -2138
  89. package/cli/commands/daemon.ts +0 -42
  90. package/cli/commands/init.ts +0 -32
  91. package/cli/commands/start.ts +0 -113
  92. package/cli/commands/tunnel.temp.ts +0 -206
  93. package/cli/commands/tunnel.ts +0 -227
  94. package/cli/commands/update.ts +0 -163
  95. package/cli/core/base-adapter.ts +0 -156
  96. package/cli/core/cloudflared.ts +0 -113
  97. package/cli/core/config.ts +0 -73
  98. package/cli/core/os-detector.ts +0 -43
  99. package/cli/core/server.ts +0 -109
  100. package/cli/core/types.ts +0 -15
  101. package/cli/index.ts +0 -72
  102. package/cli/platforms/darwin.ts +0 -146
  103. package/cli/platforms/index.ts +0 -21
  104. package/cli/platforms/linux.ts +0 -156
  105. package/cli/platforms/win32.ts +0 -34
  106. package/cli/utils/ui.ts +0 -37
@@ -1,265 +1,257 @@
1
- 'use client';
1
+ "use client"
2
2
 
3
- import * as React from 'react';
4
- import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';
5
- import { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';
3
+ import * as React from "react"
4
+ import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"
5
+ import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui"
6
6
 
7
- import { cn } from '@/lib/utils';
7
+ import { cn } from "@/lib/utils"
8
8
 
9
9
  function DropdownMenu({
10
- ...props
10
+ ...props
11
11
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
12
- return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
12
+ return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />
13
13
  }
14
14
 
15
15
  function DropdownMenuPortal({
16
- ...props
16
+ ...props
17
17
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
18
- return (
19
- <DropdownMenuPrimitive.Portal
20
- data-slot="dropdown-menu-portal"
21
- {...props}
22
- />
23
- );
18
+ return (
19
+ <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
20
+ )
24
21
  }
25
22
 
26
23
  function DropdownMenuTrigger({
27
- ...props
24
+ ...props
28
25
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
29
- return (
30
- <DropdownMenuPrimitive.Trigger
31
- data-slot="dropdown-menu-trigger"
32
- {...props}
33
- />
34
- );
26
+ return (
27
+ <DropdownMenuPrimitive.Trigger
28
+ data-slot="dropdown-menu-trigger"
29
+ {...props}
30
+ />
31
+ )
35
32
  }
36
33
 
37
34
  function DropdownMenuContent({
38
- className,
39
- sideOffset = 4,
40
- ...props
35
+ className,
36
+ sideOffset = 4,
37
+ ...props
41
38
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
42
- return (
43
- <DropdownMenuPrimitive.Portal>
44
- <DropdownMenuPrimitive.Content
45
- data-slot="dropdown-menu-content"
46
- sideOffset={sideOffset}
47
- className={cn(
48
- 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 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 p-1 shadow-md',
49
- className
50
- )}
51
- {...props}
52
- />
53
- </DropdownMenuPrimitive.Portal>
54
- );
39
+ return (
40
+ <DropdownMenuPrimitive.Portal>
41
+ <DropdownMenuPrimitive.Content
42
+ data-slot="dropdown-menu-content"
43
+ sideOffset={sideOffset}
44
+ className={cn(
45
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 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 p-1 shadow-md",
46
+ className
47
+ )}
48
+ {...props}
49
+ />
50
+ </DropdownMenuPrimitive.Portal>
51
+ )
55
52
  }
56
53
 
57
54
  function DropdownMenuGroup({
58
- ...props
55
+ ...props
59
56
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
60
- return (
61
- <DropdownMenuPrimitive.Group
62
- data-slot="dropdown-menu-group"
63
- {...props}
64
- />
65
- );
57
+ return (
58
+ <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
59
+ )
66
60
  }
67
61
 
68
62
  function DropdownMenuItem({
69
- className,
70
- inset,
71
- variant = 'default',
72
- ...props
63
+ className,
64
+ inset,
65
+ variant = "default",
66
+ ...props
73
67
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
74
- inset?: boolean;
75
- variant?: 'default' | 'destructive';
68
+ inset?: boolean
69
+ variant?: "default" | "destructive"
76
70
  }) {
77
- return (
78
- <DropdownMenuPrimitive.Item
79
- data-slot="dropdown-menu-item"
80
- data-inset={inset}
81
- data-variant={variant}
82
- className={cn(
83
- "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
84
- className
85
- )}
86
- {...props}
87
- />
88
- );
71
+ return (
72
+ <DropdownMenuPrimitive.Item
73
+ data-slot="dropdown-menu-item"
74
+ data-inset={inset}
75
+ data-variant={variant}
76
+ className={cn(
77
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
78
+ className
79
+ )}
80
+ {...props}
81
+ />
82
+ )
89
83
  }
90
84
 
91
85
  function DropdownMenuCheckboxItem({
92
- className,
93
- children,
94
- checked,
95
- ...props
86
+ className,
87
+ children,
88
+ checked,
89
+ ...props
96
90
  }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {
97
- return (
98
- <DropdownMenuPrimitive.CheckboxItem
99
- data-slot="dropdown-menu-checkbox-item"
100
- className={cn(
101
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
102
- className
103
- )}
104
- checked={checked}
105
- {...props}
106
- >
107
- <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
108
- <DropdownMenuPrimitive.ItemIndicator>
109
- <CheckIcon className="size-4" />
110
- </DropdownMenuPrimitive.ItemIndicator>
111
- </span>
112
- {children}
113
- </DropdownMenuPrimitive.CheckboxItem>
114
- );
91
+ return (
92
+ <DropdownMenuPrimitive.CheckboxItem
93
+ data-slot="dropdown-menu-checkbox-item"
94
+ className={cn(
95
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
96
+ className
97
+ )}
98
+ checked={checked}
99
+ {...props}
100
+ >
101
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
102
+ <DropdownMenuPrimitive.ItemIndicator>
103
+ <CheckIcon className="size-4" />
104
+ </DropdownMenuPrimitive.ItemIndicator>
105
+ </span>
106
+ {children}
107
+ </DropdownMenuPrimitive.CheckboxItem>
108
+ )
115
109
  }
116
110
 
117
111
  function DropdownMenuRadioGroup({
118
- ...props
112
+ ...props
119
113
  }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
120
- return (
121
- <DropdownMenuPrimitive.RadioGroup
122
- data-slot="dropdown-menu-radio-group"
123
- {...props}
124
- />
125
- );
114
+ return (
115
+ <DropdownMenuPrimitive.RadioGroup
116
+ data-slot="dropdown-menu-radio-group"
117
+ {...props}
118
+ />
119
+ )
126
120
  }
127
121
 
128
122
  function DropdownMenuRadioItem({
129
- className,
130
- children,
131
- ...props
123
+ className,
124
+ children,
125
+ ...props
132
126
  }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {
133
- return (
134
- <DropdownMenuPrimitive.RadioItem
135
- data-slot="dropdown-menu-radio-item"
136
- className={cn(
137
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
138
- className
139
- )}
140
- {...props}
141
- >
142
- <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
143
- <DropdownMenuPrimitive.ItemIndicator>
144
- <CircleIcon className="size-2 fill-current" />
145
- </DropdownMenuPrimitive.ItemIndicator>
146
- </span>
147
- {children}
148
- </DropdownMenuPrimitive.RadioItem>
149
- );
127
+ return (
128
+ <DropdownMenuPrimitive.RadioItem
129
+ data-slot="dropdown-menu-radio-item"
130
+ className={cn(
131
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
132
+ className
133
+ )}
134
+ {...props}
135
+ >
136
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
137
+ <DropdownMenuPrimitive.ItemIndicator>
138
+ <CircleIcon className="size-2 fill-current" />
139
+ </DropdownMenuPrimitive.ItemIndicator>
140
+ </span>
141
+ {children}
142
+ </DropdownMenuPrimitive.RadioItem>
143
+ )
150
144
  }
151
145
 
152
146
  function DropdownMenuLabel({
153
- className,
154
- inset,
155
- ...props
147
+ className,
148
+ inset,
149
+ ...props
156
150
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
157
- inset?: boolean;
151
+ inset?: boolean
158
152
  }) {
159
- return (
160
- <DropdownMenuPrimitive.Label
161
- data-slot="dropdown-menu-label"
162
- data-inset={inset}
163
- className={cn(
164
- 'px-2 py-1.5 text-sm font-medium data-[inset]:pl-8',
165
- className
166
- )}
167
- {...props}
168
- />
169
- );
153
+ return (
154
+ <DropdownMenuPrimitive.Label
155
+ data-slot="dropdown-menu-label"
156
+ data-inset={inset}
157
+ className={cn(
158
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
159
+ className
160
+ )}
161
+ {...props}
162
+ />
163
+ )
170
164
  }
171
165
 
172
166
  function DropdownMenuSeparator({
173
- className,
174
- ...props
167
+ className,
168
+ ...props
175
169
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {
176
- return (
177
- <DropdownMenuPrimitive.Separator
178
- data-slot="dropdown-menu-separator"
179
- className={cn('bg-border -mx-1 my-1 h-px', className)}
180
- {...props}
181
- />
182
- );
170
+ return (
171
+ <DropdownMenuPrimitive.Separator
172
+ data-slot="dropdown-menu-separator"
173
+ className={cn("bg-border -mx-1 my-1 h-px", className)}
174
+ {...props}
175
+ />
176
+ )
183
177
  }
184
178
 
185
179
  function DropdownMenuShortcut({
186
- className,
187
- ...props
188
- }: React.ComponentProps<'span'>) {
189
- return (
190
- <span
191
- data-slot="dropdown-menu-shortcut"
192
- className={cn(
193
- 'text-muted-foreground ml-auto text-xs tracking-widest',
194
- className
195
- )}
196
- {...props}
197
- />
198
- );
180
+ className,
181
+ ...props
182
+ }: React.ComponentProps<"span">) {
183
+ return (
184
+ <span
185
+ data-slot="dropdown-menu-shortcut"
186
+ className={cn(
187
+ "text-muted-foreground ml-auto text-xs tracking-widest",
188
+ className
189
+ )}
190
+ {...props}
191
+ />
192
+ )
199
193
  }
200
194
 
201
195
  function DropdownMenuSub({
202
- ...props
196
+ ...props
203
197
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
204
- return (
205
- <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
206
- );
198
+ return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
207
199
  }
208
200
 
209
201
  function DropdownMenuSubTrigger({
210
- className,
211
- inset,
212
- children,
213
- ...props
202
+ className,
203
+ inset,
204
+ children,
205
+ ...props
214
206
  }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
215
- inset?: boolean;
207
+ inset?: boolean
216
208
  }) {
217
- return (
218
- <DropdownMenuPrimitive.SubTrigger
219
- data-slot="dropdown-menu-sub-trigger"
220
- data-inset={inset}
221
- className={cn(
222
- "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
223
- className
224
- )}
225
- {...props}
226
- >
227
- {children}
228
- <ChevronRightIcon className="ml-auto size-4" />
229
- </DropdownMenuPrimitive.SubTrigger>
230
- );
209
+ return (
210
+ <DropdownMenuPrimitive.SubTrigger
211
+ data-slot="dropdown-menu-sub-trigger"
212
+ data-inset={inset}
213
+ className={cn(
214
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
215
+ className
216
+ )}
217
+ {...props}
218
+ >
219
+ {children}
220
+ <ChevronRightIcon className="ml-auto size-4" />
221
+ </DropdownMenuPrimitive.SubTrigger>
222
+ )
231
223
  }
232
224
 
233
225
  function DropdownMenuSubContent({
234
- className,
235
- ...props
226
+ className,
227
+ ...props
236
228
  }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
237
- return (
238
- <DropdownMenuPrimitive.SubContent
239
- data-slot="dropdown-menu-sub-content"
240
- className={cn(
241
- 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',
242
- className
243
- )}
244
- {...props}
245
- />
246
- );
229
+ return (
230
+ <DropdownMenuPrimitive.SubContent
231
+ data-slot="dropdown-menu-sub-content"
232
+ className={cn(
233
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
234
+ className
235
+ )}
236
+ {...props}
237
+ />
238
+ )
247
239
  }
248
240
 
249
241
  export {
250
- DropdownMenu,
251
- DropdownMenuPortal,
252
- DropdownMenuTrigger,
253
- DropdownMenuContent,
254
- DropdownMenuGroup,
255
- DropdownMenuLabel,
256
- DropdownMenuItem,
257
- DropdownMenuCheckboxItem,
258
- DropdownMenuRadioGroup,
259
- DropdownMenuRadioItem,
260
- DropdownMenuSeparator,
261
- DropdownMenuShortcut,
262
- DropdownMenuSub,
263
- DropdownMenuSubTrigger,
264
- DropdownMenuSubContent
265
- };
242
+ DropdownMenu,
243
+ DropdownMenuPortal,
244
+ DropdownMenuTrigger,
245
+ DropdownMenuContent,
246
+ DropdownMenuGroup,
247
+ DropdownMenuLabel,
248
+ DropdownMenuItem,
249
+ DropdownMenuCheckboxItem,
250
+ DropdownMenuRadioGroup,
251
+ DropdownMenuRadioItem,
252
+ DropdownMenuSeparator,
253
+ DropdownMenuShortcut,
254
+ DropdownMenuSub,
255
+ DropdownMenuSubTrigger,
256
+ DropdownMenuSubContent,
257
+ }
@@ -1,21 +1,21 @@
1
- import * as React from 'react';
1
+ import * as React from "react"
2
2
 
3
- import { cn } from '@/lib/utils';
3
+ import { cn } from "@/lib/utils"
4
4
 
5
- function Input({ className, type, ...props }: React.ComponentProps<'input'>) {
6
- return (
7
- <input
8
- type={type}
9
- data-slot="input"
10
- className={cn(
11
- 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
12
- 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',
13
- 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
14
- className
15
- )}
16
- {...props}
17
- />
18
- );
5
+ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
+ return (
7
+ <input
8
+ type={type}
9
+ data-slot="input"
10
+ className={cn(
11
+ "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
12
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
13
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
14
+ className
15
+ )}
16
+ {...props}
17
+ />
18
+ )
19
19
  }
20
20
 
21
- export { Input };
21
+ export { Input }
@@ -1,58 +1,58 @@
1
- 'use client';
1
+ "use client"
2
2
 
3
- import * as React from 'react';
4
- import { ScrollArea as ScrollAreaPrimitive } from 'radix-ui';
3
+ import * as React from "react"
4
+ import { ScrollArea as ScrollAreaPrimitive } from "radix-ui"
5
5
 
6
- import { cn } from '@/lib/utils';
6
+ import { cn } from "@/lib/utils"
7
7
 
8
8
  function ScrollArea({
9
- className,
10
- children,
11
- ...props
9
+ className,
10
+ children,
11
+ ...props
12
12
  }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {
13
- return (
14
- <ScrollAreaPrimitive.Root
15
- data-slot="scroll-area"
16
- className={cn('relative', className)}
17
- {...props}
18
- >
19
- <ScrollAreaPrimitive.Viewport
20
- data-slot="scroll-area-viewport"
21
- className="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1"
22
- >
23
- {children}
24
- </ScrollAreaPrimitive.Viewport>
25
- <ScrollBar />
26
- <ScrollAreaPrimitive.Corner />
27
- </ScrollAreaPrimitive.Root>
28
- );
13
+ return (
14
+ <ScrollAreaPrimitive.Root
15
+ data-slot="scroll-area"
16
+ className={cn("relative", className)}
17
+ {...props}
18
+ >
19
+ <ScrollAreaPrimitive.Viewport
20
+ data-slot="scroll-area-viewport"
21
+ className="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1"
22
+ >
23
+ {children}
24
+ </ScrollAreaPrimitive.Viewport>
25
+ <ScrollBar />
26
+ <ScrollAreaPrimitive.Corner />
27
+ </ScrollAreaPrimitive.Root>
28
+ )
29
29
  }
30
30
 
31
31
  function ScrollBar({
32
- className,
33
- orientation = 'vertical',
34
- ...props
32
+ className,
33
+ orientation = "vertical",
34
+ ...props
35
35
  }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {
36
- return (
37
- <ScrollAreaPrimitive.ScrollAreaScrollbar
38
- data-slot="scroll-area-scrollbar"
39
- orientation={orientation}
40
- className={cn(
41
- 'flex touch-none p-px transition-colors select-none',
42
- orientation === 'vertical' &&
43
- 'h-full w-2.5 border-l border-l-transparent',
44
- orientation === 'horizontal' &&
45
- 'h-2.5 flex-col border-t border-t-transparent',
46
- className
47
- )}
48
- {...props}
49
- >
50
- <ScrollAreaPrimitive.ScrollAreaThumb
51
- data-slot="scroll-area-thumb"
52
- className="bg-border relative flex-1 rounded-full"
53
- />
54
- </ScrollAreaPrimitive.ScrollAreaScrollbar>
55
- );
36
+ return (
37
+ <ScrollAreaPrimitive.ScrollAreaScrollbar
38
+ data-slot="scroll-area-scrollbar"
39
+ orientation={orientation}
40
+ className={cn(
41
+ "flex touch-none p-px transition-colors select-none",
42
+ orientation === "vertical" &&
43
+ "h-full w-2.5 border-l border-l-transparent",
44
+ orientation === "horizontal" &&
45
+ "h-2.5 flex-col border-t border-t-transparent",
46
+ className
47
+ )}
48
+ {...props}
49
+ >
50
+ <ScrollAreaPrimitive.ScrollAreaThumb
51
+ data-slot="scroll-area-thumb"
52
+ className="bg-border relative flex-1 rounded-full"
53
+ />
54
+ </ScrollAreaPrimitive.ScrollAreaScrollbar>
55
+ )
56
56
  }
57
57
 
58
- export { ScrollArea, ScrollBar };
58
+ export { ScrollArea, ScrollBar }