@chat-js/cli 0.6.1 → 0.6.3

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 (154) hide show
  1. package/dist/index.js +17065 -16667
  2. package/package.json +1 -1
  3. package/templates/chat-app/app/(auth)/login/page.tsx +3 -3
  4. package/templates/chat-app/app/(chat)/api/chat/route.ts +4 -60
  5. package/templates/chat-app/app/not-found.tsx +2 -2
  6. package/templates/chat-app/chat.config.ts +3 -0
  7. package/templates/chat-app/components/ai-elements/actions.tsx +44 -44
  8. package/templates/chat-app/components/ai-elements/artifact.tsx +92 -92
  9. package/templates/chat-app/components/ai-elements/code-block.tsx +143 -143
  10. package/templates/chat-app/components/ai-elements/context.tsx +313 -313
  11. package/templates/chat-app/components/ai-elements/conversation.tsx +65 -65
  12. package/templates/chat-app/components/ai-elements/extra/conversation-content-scroll-area.tsx +29 -29
  13. package/templates/chat-app/components/ai-elements/extra/mcp-tool-header.tsx +27 -27
  14. package/templates/chat-app/components/ai-elements/message.tsx +341 -344
  15. package/templates/chat-app/components/ai-elements/parseIncompleteMarkdown.tsx +122 -122
  16. package/templates/chat-app/components/ai-elements/prompt-input.tsx +1059 -1059
  17. package/templates/chat-app/components/ai-elements/reasoning.tsx +131 -131
  18. package/templates/chat-app/components/ai-elements/response.tsx +15 -12
  19. package/templates/chat-app/components/ai-elements/sandbox.tsx +84 -84
  20. package/templates/chat-app/components/ai-elements/shimmer.tsx +47 -47
  21. package/templates/chat-app/components/ai-elements/suggestion.tsx +33 -33
  22. package/templates/chat-app/components/ai-elements/tool.tsx +118 -118
  23. package/templates/chat-app/components/app-sidebar-history-conditional.tsx +3 -3
  24. package/templates/chat-app/components/app-sidebar.tsx +3 -3
  25. package/templates/chat-app/components/connectors-dropdown.tsx +6 -3
  26. package/templates/chat-app/components/deep-research-progress.tsx +1 -1
  27. package/templates/chat-app/components/header-breadcrumb.tsx +14 -11
  28. package/templates/chat-app/components/internal-link.tsx +73 -0
  29. package/templates/chat-app/components/login-form.tsx +5 -5
  30. package/templates/chat-app/components/message-parts.tsx +1 -71
  31. package/templates/chat-app/components/model-selector.tsx +3 -3
  32. package/templates/chat-app/components/new-chat-button.tsx +4 -4
  33. package/templates/chat-app/components/part/document-common.tsx +3 -3
  34. package/templates/chat-app/components/part/document-tool.tsx +3 -3
  35. package/templates/chat-app/components/part/message-annotations.tsx +2 -2
  36. package/templates/chat-app/components/part/tool-part.tsx +92 -0
  37. package/templates/chat-app/components/project-chat-item.tsx +2 -2
  38. package/templates/chat-app/components/research-progress.tsx +2 -2
  39. package/templates/chat-app/components/research-task.tsx +1 -1
  40. package/templates/chat-app/components/research-tasks.tsx +1 -1
  41. package/templates/chat-app/components/settings/connectors-settings.tsx +4 -4
  42. package/templates/chat-app/components/settings/mcp-details-page.tsx +5 -5
  43. package/templates/chat-app/components/settings/settings-nav.tsx +3 -3
  44. package/templates/chat-app/components/sidebar-chat-item.tsx +4 -12
  45. package/templates/chat-app/components/sidebar-project-item.tsx +4 -11
  46. package/templates/chat-app/components/sidebar-top-row.tsx +7 -7
  47. package/templates/chat-app/components/sidebar-user-nav.tsx +3 -3
  48. package/templates/chat-app/components/signup-form.tsx +8 -5
  49. package/templates/chat-app/components/source-badge.tsx +3 -9
  50. package/templates/chat-app/components/sources.tsx +1 -1
  51. package/templates/chat-app/components/ui/accordion.tsx +32 -32
  52. package/templates/chat-app/components/ui/alert-dialog.tsx +103 -103
  53. package/templates/chat-app/components/ui/alert.tsx +36 -36
  54. package/templates/chat-app/components/ui/avatar.tsx +28 -28
  55. package/templates/chat-app/components/ui/badge.tsx +22 -22
  56. package/templates/chat-app/components/ui/breadcrumb.tsx +72 -72
  57. package/templates/chat-app/components/ui/button-group.tsx +58 -58
  58. package/templates/chat-app/components/ui/button.tsx +45 -45
  59. package/templates/chat-app/components/ui/card.tsx +65 -65
  60. package/templates/chat-app/components/ui/checkbox.tsx +16 -16
  61. package/templates/chat-app/components/ui/collapsible.tsx +1 -1
  62. package/templates/chat-app/components/ui/command.tsx +137 -137
  63. package/templates/chat-app/components/ui/dialog.tsx +94 -94
  64. package/templates/chat-app/components/ui/drawer.tsx +68 -68
  65. package/templates/chat-app/components/ui/dropdown-menu.tsx +184 -184
  66. package/templates/chat-app/components/ui/empty.tsx +76 -76
  67. package/templates/chat-app/components/ui/extra/action-container.tsx +3 -3
  68. package/templates/chat-app/components/ui/extra/scroll-area-viewport-ref.tsx +24 -24
  69. package/templates/chat-app/components/ui/form.tsx +112 -112
  70. package/templates/chat-app/components/ui/hover-card.tsx +25 -25
  71. package/templates/chat-app/components/ui/input-group.tsx +126 -126
  72. package/templates/chat-app/components/ui/input.tsx +13 -13
  73. package/templates/chat-app/components/ui/label.tsx +12 -12
  74. package/templates/chat-app/components/ui/popover.tsx +25 -25
  75. package/templates/chat-app/components/ui/progress.tsx +19 -19
  76. package/templates/chat-app/components/ui/resizable.tsx +27 -27
  77. package/templates/chat-app/components/ui/scroll-area.tsx +30 -30
  78. package/templates/chat-app/components/ui/select.tsx +108 -108
  79. package/templates/chat-app/components/ui/separator.tsx +16 -16
  80. package/templates/chat-app/components/ui/sheet.tsx +91 -91
  81. package/templates/chat-app/components/ui/sidebar.tsx +615 -615
  82. package/templates/chat-app/components/ui/skeleton.tsx +7 -7
  83. package/templates/chat-app/components/ui/slider.tsx +50 -50
  84. package/templates/chat-app/components/ui/spinner.tsx +8 -8
  85. package/templates/chat-app/components/ui/switch.tsx +16 -16
  86. package/templates/chat-app/components/ui/table.tsx +71 -71
  87. package/templates/chat-app/components/ui/tabs.tsx +31 -31
  88. package/templates/chat-app/components/ui/textarea.tsx +10 -10
  89. package/templates/chat-app/components/ui/toggle.tsx +31 -31
  90. package/templates/chat-app/components/ui/tooltip.tsx +48 -48
  91. package/templates/chat-app/components/upgrade-cta/limit-display.tsx +7 -7
  92. package/templates/chat-app/components/upgrade-cta/login-cta-banner.tsx +3 -3
  93. package/templates/chat-app/components/upgrade-cta/login-prompt.tsx +3 -3
  94. package/templates/chat-app/hooks/use-mobile.ts +13 -13
  95. package/templates/chat-app/lib/ai/core-chat-agent.ts +25 -14
  96. package/templates/chat-app/lib/ai/eval-agent.ts +4 -5
  97. package/templates/chat-app/lib/ai/gateway-model-defaults.ts +24 -0
  98. package/templates/chat-app/lib/ai/installed-tools.ts +12 -0
  99. package/templates/chat-app/lib/ai/mcp/mcp-client.ts +2 -2
  100. package/templates/chat-app/lib/ai/models.generated.ts +4236 -4585
  101. package/templates/chat-app/lib/ai/tool-renderer-registry.ts +31 -0
  102. package/templates/chat-app/lib/ai/types.ts +15 -20
  103. package/templates/chat-app/lib/config-requirements.ts +11 -6
  104. package/templates/chat-app/lib/config-schema.ts +24 -0
  105. package/templates/chat-app/lib/stores/hooks-message-parts.ts +1 -1
  106. package/templates/chat-app/lib/utils.ts +157 -157
  107. package/templates/chat-app/package.json +1 -1
  108. package/templates/chat-app/scripts/check-env.ts +229 -2
  109. package/templates/chat-app/tools/chatjs/_shared/lib/tool-part.ts +5 -0
  110. package/templates/chat-app/{components/part/weather.tsx → tools/chatjs/get-weather/renderer.tsx} +24 -38
  111. package/templates/chat-app/{components/part/retrieve-url.tsx → tools/chatjs/retrieve-url/renderer.tsx} +20 -15
  112. package/templates/chat-app/{lib/ai/tools/retrieve-url.ts → tools/chatjs/retrieve-url/tool.ts} +46 -7
  113. package/templates/chat-app/tools/chatjs/tools.ts +16 -0
  114. package/templates/chat-app/tools/chatjs/ui.ts +17 -0
  115. package/templates/chat-app/tools/chatjs/word-count/renderer.tsx +50 -0
  116. package/templates/chat-app/tools/chatjs/word-count/tool.ts +30 -0
  117. package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.ts +3 -5
  118. package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/deep-research.ts +2 -3
  119. package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/pipeline.ts +1 -1
  120. package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/types.ts +1 -1
  121. package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/utils.ts +7 -7
  122. package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/types.ts +1 -1
  123. package/templates/chat-app/{lib/ai/tools → tools/platform}/generate-video.ts +4 -6
  124. package/templates/chat-app/{lib/ai/tools → tools/platform}/read-document.ts +2 -2
  125. package/templates/chat-app/{lib/ai/tools → tools/platform}/steps/multi-query-web-search.ts +1 -1
  126. package/templates/chat-app/{lib/ai/tools → tools/platform}/steps/web-search.ts +1 -1
  127. package/templates/chat-app/{lib/ai/tools → tools/platform}/tools.ts +54 -30
  128. package/templates/chat-app/{lib/ai/tools → tools/platform}/web-search.ts +7 -5
  129. package/templates/electron/CHANGELOG.md +16 -2
  130. package/templates/electron/package.json +1 -1
  131. package/templates/chat-app/lib/ai/tools/tools-definitions.ts +0 -83
  132. /package/templates/chat-app/{lib/ai/tools/get-weather.ts → tools/chatjs/get-weather/tool.ts} +0 -0
  133. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.javascript.ts +0 -0
  134. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.python.ts +0 -0
  135. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.shared.test.ts +0 -0
  136. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.shared.ts +0 -0
  137. /package/templates/chat-app/{lib/ai/tools → tools/platform}/code-execution.types.ts +0 -0
  138. /package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/configuration.ts +0 -0
  139. /package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/prompts.ts +0 -0
  140. /package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/researcher-agent.ts +0 -0
  141. /package/templates/chat-app/{lib/ai/tools → tools/platform}/deep-research/supervisor-agent.ts +0 -0
  142. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/code-guidelines.ts +0 -0
  143. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/create-code-document.ts +0 -0
  144. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/create-sheet-document.ts +0 -0
  145. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/create-text-document.ts +0 -0
  146. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/edit-code-document.ts +0 -0
  147. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/edit-sheet-document.ts +0 -0
  148. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/edit-text-document.ts +0 -0
  149. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/sheet-guidelines.ts +0 -0
  150. /package/templates/chat-app/{lib/ai/tools → tools/platform}/documents/text-guidelines.ts +0 -0
  151. /package/templates/chat-app/{lib/ai/tools → tools/platform}/generate-image.ts +0 -0
  152. /package/templates/chat-app/{lib/ai/tools → tools/platform}/research-updates-schema.ts +0 -0
  153. /package/templates/chat-app/{lib/ai/tools → tools/platform}/steps/search-utils.ts +0 -0
  154. /package/templates/chat-app/{lib/ai/tools → tools/platform}/types.ts +0 -0
@@ -8,162 +8,162 @@ import { Textarea } from "@/components/ui/textarea";
8
8
  import { cn } from "@/lib/utils";
9
9
 
10
10
  function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
11
- return (
12
- <div
13
- className={cn(
14
- "group/input-group relative flex w-full items-center rounded-md border border-input shadow-xs outline-none transition-[color,box-shadow] dark:bg-input/30",
15
- "h-9 min-w-0 has-[>textarea]:h-auto",
11
+ return (
12
+ <div
13
+ className={cn(
14
+ "group/input-group relative flex w-full items-center rounded-md border border-input shadow-xs outline-none transition-[color,box-shadow] dark:bg-input/30",
15
+ "h-9 min-w-0 has-[>textarea]:h-auto",
16
16
 
17
- // Variants based on alignment.
18
- "has-[>[data-align=inline-start]]:[&>input]:pl-2",
19
- "has-[>[data-align=inline-end]]:[&>input]:pr-2",
20
- "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
21
- "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
17
+ // Variants based on alignment.
18
+ "has-[>[data-align=inline-start]]:[&>input]:pl-2",
19
+ "has-[>[data-align=inline-end]]:[&>input]:pr-2",
20
+ "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
21
+ "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
22
22
 
23
- // Focus state.
24
- "has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50",
23
+ // Focus state.
24
+ "has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50",
25
25
 
26
- // Error state.
27
- "has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
26
+ // Error state.
27
+ "has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
28
28
 
29
- className
30
- )}
31
- data-slot="input-group"
32
- role="group"
33
- {...props}
34
- />
35
- );
29
+ className,
30
+ )}
31
+ data-slot="input-group"
32
+ role="group"
33
+ {...props}
34
+ />
35
+ );
36
36
  }
37
37
 
38
38
  const inputGroupAddonVariants = cva(
39
- "flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 font-medium text-muted-foreground text-sm group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
40
- {
41
- variants: {
42
- align: {
43
- "inline-start":
44
- "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
45
- "inline-end":
46
- "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
47
- "block-start":
48
- "order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3",
49
- "block-end":
50
- "order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3",
51
- },
52
- },
53
- defaultVariants: {
54
- align: "inline-start",
55
- },
56
- }
39
+ "flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 font-medium text-muted-foreground text-sm group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
40
+ {
41
+ variants: {
42
+ align: {
43
+ "inline-start":
44
+ "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
45
+ "inline-end":
46
+ "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
47
+ "block-start":
48
+ "order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3",
49
+ "block-end":
50
+ "order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3",
51
+ },
52
+ },
53
+ defaultVariants: {
54
+ align: "inline-start",
55
+ },
56
+ },
57
57
  );
58
58
 
59
59
  function InputGroupAddon({
60
- className,
61
- align = "inline-start",
62
- ...props
60
+ className,
61
+ align = "inline-start",
62
+ ...props
63
63
  }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>) {
64
- return (
65
- <div
66
- className={cn(inputGroupAddonVariants({ align }), className)}
67
- data-align={align}
68
- data-slot="input-group-addon"
69
- onClick={(e) => {
70
- if ((e.target as HTMLElement).closest("button")) {
71
- return;
72
- }
73
- e.currentTarget.parentElement?.querySelector("input")?.focus();
74
- }}
75
- role="group"
76
- {...props}
77
- />
78
- );
64
+ return (
65
+ <div
66
+ className={cn(inputGroupAddonVariants({ align }), className)}
67
+ data-align={align}
68
+ data-slot="input-group-addon"
69
+ onClick={(e) => {
70
+ if ((e.target as HTMLElement).closest("button")) {
71
+ return;
72
+ }
73
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
74
+ }}
75
+ role="group"
76
+ {...props}
77
+ />
78
+ );
79
79
  }
80
80
 
81
81
  const inputGroupButtonVariants = cva(
82
- "flex items-center gap-2 text-sm shadow-none",
83
- {
84
- variants: {
85
- size: {
86
- xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5",
87
- sm: "h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5",
88
- "icon-xs":
89
- "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
90
- "icon-sm": "size-8 p-0 has-[>svg]:p-0",
91
- },
92
- },
93
- defaultVariants: {
94
- size: "xs",
95
- },
96
- }
82
+ "flex items-center gap-2 text-sm shadow-none",
83
+ {
84
+ variants: {
85
+ size: {
86
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5",
87
+ sm: "h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5",
88
+ "icon-xs":
89
+ "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
90
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0",
91
+ },
92
+ },
93
+ defaultVariants: {
94
+ size: "xs",
95
+ },
96
+ },
97
97
  );
98
98
 
99
99
  function InputGroupButton({
100
- className,
101
- type = "button",
102
- variant = "ghost",
103
- size = "xs",
104
- ...props
100
+ className,
101
+ type = "button",
102
+ variant = "ghost",
103
+ size = "xs",
104
+ ...props
105
105
  }: Omit<React.ComponentProps<typeof Button>, "size"> &
106
- VariantProps<typeof inputGroupButtonVariants>) {
107
- return (
108
- <Button
109
- className={cn(inputGroupButtonVariants({ size }), className)}
110
- data-size={size}
111
- type={type}
112
- variant={variant}
113
- {...props}
114
- />
115
- );
106
+ VariantProps<typeof inputGroupButtonVariants>) {
107
+ return (
108
+ <Button
109
+ className={cn(inputGroupButtonVariants({ size }), className)}
110
+ data-size={size}
111
+ type={type}
112
+ variant={variant}
113
+ {...props}
114
+ />
115
+ );
116
116
  }
117
117
 
118
118
  function InputGroupText({ className, ...props }: React.ComponentProps<"span">) {
119
- return (
120
- <span
121
- className={cn(
122
- "flex items-center gap-2 text-muted-foreground text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
123
- className
124
- )}
125
- {...props}
126
- />
127
- );
119
+ return (
120
+ <span
121
+ className={cn(
122
+ "flex items-center gap-2 text-muted-foreground text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
123
+ className,
124
+ )}
125
+ {...props}
126
+ />
127
+ );
128
128
  }
129
129
 
130
130
  function InputGroupInput({
131
- className,
132
- ...props
131
+ className,
132
+ ...props
133
133
  }: React.ComponentProps<"input">) {
134
- return (
135
- <Input
136
- className={cn(
137
- "flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",
138
- className
139
- )}
140
- data-slot="input-group-control"
141
- {...props}
142
- />
143
- );
134
+ return (
135
+ <Input
136
+ className={cn(
137
+ "flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",
138
+ className,
139
+ )}
140
+ data-slot="input-group-control"
141
+ {...props}
142
+ />
143
+ );
144
144
  }
145
145
 
146
146
  function InputGroupTextarea({
147
- className,
148
- ...props
147
+ className,
148
+ ...props
149
149
  }: React.ComponentProps<"textarea">) {
150
- return (
151
- <Textarea
152
- className={cn(
153
- "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent",
154
- className
155
- )}
156
- data-slot="input-group-control"
157
- {...props}
158
- />
159
- );
150
+ return (
151
+ <Textarea
152
+ className={cn(
153
+ "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent",
154
+ className,
155
+ )}
156
+ data-slot="input-group-control"
157
+ {...props}
158
+ />
159
+ );
160
160
  }
161
161
 
162
162
  export {
163
- InputGroup,
164
- InputGroupAddon,
165
- InputGroupButton,
166
- InputGroupText,
167
- InputGroupInput,
168
- InputGroupTextarea,
163
+ InputGroup,
164
+ InputGroupAddon,
165
+ InputGroupButton,
166
+ InputGroupInput,
167
+ InputGroupText,
168
+ InputGroupTextarea,
169
169
  };
@@ -3,19 +3,19 @@ import type * as React from "react";
3
3
  import { cn } from "@/lib/utils";
4
4
 
5
5
  function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
- return (
7
- <input
8
- className={cn(
9
- "flex h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30",
10
- "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
11
- "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
12
- className
13
- )}
14
- data-slot="input"
15
- type={type}
16
- {...props}
17
- />
18
- );
6
+ return (
7
+ <input
8
+ className={cn(
9
+ "flex h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30",
10
+ "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
11
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
12
+ className,
13
+ )}
14
+ data-slot="input"
15
+ type={type}
16
+ {...props}
17
+ />
18
+ );
19
19
  }
20
20
 
21
21
  export { Input };
@@ -6,19 +6,19 @@ import type * as React from "react";
6
6
  import { cn } from "@/lib/utils";
7
7
 
8
8
  function Label({
9
- className,
10
- ...props
9
+ className,
10
+ ...props
11
11
  }: React.ComponentProps<typeof LabelPrimitive.Root>) {
12
- return (
13
- <LabelPrimitive.Root
14
- className={cn(
15
- "flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",
16
- className
17
- )}
18
- data-slot="label"
19
- {...props}
20
- />
21
- );
12
+ return (
13
+ <LabelPrimitive.Root
14
+ className={cn(
15
+ "flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",
16
+ className,
17
+ )}
18
+ data-slot="label"
19
+ {...props}
20
+ />
21
+ );
22
22
  }
23
23
 
24
24
  export { Label };
@@ -6,43 +6,43 @@ import type * as React from "react";
6
6
  import { cn } from "@/lib/utils";
7
7
 
8
8
  function Popover({
9
- ...props
9
+ ...props
10
10
  }: React.ComponentProps<typeof PopoverPrimitive.Root>) {
11
- return <PopoverPrimitive.Root data-slot="popover" {...props} />;
11
+ return <PopoverPrimitive.Root data-slot="popover" {...props} />;
12
12
  }
13
13
 
14
14
  function PopoverTrigger({
15
- ...props
15
+ ...props
16
16
  }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {
17
- return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
17
+ return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
18
18
  }
19
19
 
20
20
  function PopoverContent({
21
- className,
22
- align = "center",
23
- sideOffset = 4,
24
- ...props
21
+ className,
22
+ align = "center",
23
+ sideOffset = 4,
24
+ ...props
25
25
  }: React.ComponentProps<typeof PopoverPrimitive.Content>) {
26
- return (
27
- <PopoverPrimitive.Portal>
28
- <PopoverPrimitive.Content
29
- align={align}
30
- className={cn(
31
- "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 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=closed]:animate-out data-[state=open]:animate-in",
32
- className
33
- )}
34
- data-slot="popover-content"
35
- sideOffset={sideOffset}
36
- {...props}
37
- />
38
- </PopoverPrimitive.Portal>
39
- );
26
+ return (
27
+ <PopoverPrimitive.Portal>
28
+ <PopoverPrimitive.Content
29
+ align={align}
30
+ className={cn(
31
+ "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 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=closed]:animate-out data-[state=open]:animate-in",
32
+ className,
33
+ )}
34
+ data-slot="popover-content"
35
+ sideOffset={sideOffset}
36
+ {...props}
37
+ />
38
+ </PopoverPrimitive.Portal>
39
+ );
40
40
  }
41
41
 
42
42
  function PopoverAnchor({
43
- ...props
43
+ ...props
44
44
  }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {
45
- return <PopoverPrimitive.Anchor data-slot="popover-anchor" {...props} />;
45
+ return <PopoverPrimitive.Anchor data-slot="popover-anchor" {...props} />;
46
46
  }
47
47
 
48
- export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
48
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -6,26 +6,26 @@ import type * as React from "react";
6
6
  import { cn } from "@/lib/utils";
7
7
 
8
8
  function Progress({
9
- className,
10
- value,
11
- ...props
9
+ className,
10
+ value,
11
+ ...props
12
12
  }: React.ComponentProps<typeof ProgressPrimitive.Root>) {
13
- return (
14
- <ProgressPrimitive.Root
15
- className={cn(
16
- "relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
17
- className
18
- )}
19
- data-slot="progress"
20
- {...props}
21
- >
22
- <ProgressPrimitive.Indicator
23
- className="h-full w-full flex-1 bg-primary transition-all"
24
- data-slot="progress-indicator"
25
- style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
26
- />
27
- </ProgressPrimitive.Root>
28
- );
13
+ return (
14
+ <ProgressPrimitive.Root
15
+ className={cn(
16
+ "relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
17
+ className,
18
+ )}
19
+ data-slot="progress"
20
+ {...props}
21
+ >
22
+ <ProgressPrimitive.Indicator
23
+ className="h-full w-full flex-1 bg-primary transition-all"
24
+ data-slot="progress-indicator"
25
+ style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
26
+ />
27
+ </ProgressPrimitive.Root>
28
+ );
29
29
  }
30
30
 
31
31
  export { Progress };
@@ -6,40 +6,40 @@ import * as ResizablePrimitive from "react-resizable-panels";
6
6
  import { cn } from "@/lib/utils";
7
7
 
8
8
  const ResizablePanelGroup = ({
9
- className,
10
- ...props
9
+ className,
10
+ ...props
11
11
  }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => (
12
- <ResizablePrimitive.PanelGroup
13
- className={cn(
14
- "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
15
- className
16
- )}
17
- {...props}
18
- />
12
+ <ResizablePrimitive.PanelGroup
13
+ className={cn(
14
+ "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
15
+ className,
16
+ )}
17
+ {...props}
18
+ />
19
19
  );
20
20
 
21
21
  const ResizablePanel = ResizablePrimitive.Panel;
22
22
 
23
23
  const ResizableHandle = ({
24
- withHandle,
25
- className,
26
- ...props
24
+ withHandle,
25
+ className,
26
+ ...props
27
27
  }: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
28
- withHandle?: boolean;
28
+ withHandle?: boolean;
29
29
  }) => (
30
- <ResizablePrimitive.PanelResizeHandle
31
- className={cn(
32
- "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90",
33
- className
34
- )}
35
- {...props}
36
- >
37
- {withHandle && (
38
- <div className="z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border">
39
- <GripVertical className="h-2.5 w-2.5" />
40
- </div>
41
- )}
42
- </ResizablePrimitive.PanelResizeHandle>
30
+ <ResizablePrimitive.PanelResizeHandle
31
+ className={cn(
32
+ "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90",
33
+ className,
34
+ )}
35
+ {...props}
36
+ >
37
+ {withHandle && (
38
+ <div className="z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border">
39
+ <GripVertical className="h-2.5 w-2.5" />
40
+ </div>
41
+ )}
42
+ </ResizablePrimitive.PanelResizeHandle>
43
43
  );
44
44
 
45
- export { ResizablePanelGroup, ResizablePanel, ResizableHandle };
45
+ export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
@@ -6,42 +6,42 @@ import * as React from "react";
6
6
  import { cn } from "@/lib/utils";
7
7
 
8
8
  const ScrollArea = React.forwardRef<
9
- React.ElementRef<typeof ScrollAreaPrimitive.Root>,
10
- React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
9
+ React.ElementRef<typeof ScrollAreaPrimitive.Root>,
10
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
11
11
  >(({ className, children, ...props }, ref) => (
12
- <ScrollAreaPrimitive.Root
13
- className={cn("relative overflow-hidden", className)}
14
- ref={ref}
15
- {...props}
16
- >
17
- <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
18
- {children}
19
- </ScrollAreaPrimitive.Viewport>
20
- <ScrollBar />
21
- <ScrollAreaPrimitive.Corner />
22
- </ScrollAreaPrimitive.Root>
12
+ <ScrollAreaPrimitive.Root
13
+ className={cn("relative overflow-hidden", className)}
14
+ ref={ref}
15
+ {...props}
16
+ >
17
+ <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
18
+ {children}
19
+ </ScrollAreaPrimitive.Viewport>
20
+ <ScrollBar />
21
+ <ScrollAreaPrimitive.Corner />
22
+ </ScrollAreaPrimitive.Root>
23
23
  ));
24
24
  ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
25
25
 
26
26
  const ScrollBar = React.forwardRef<
27
- React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
28
- React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
27
+ React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
28
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
29
29
  >(({ className, orientation = "vertical", ...props }, ref) => (
30
- <ScrollAreaPrimitive.ScrollAreaScrollbar
31
- className={cn(
32
- "flex touch-none select-none transition-colors",
33
- orientation === "vertical" &&
34
- "h-full w-2.5 border-l border-l-transparent p-[1px]",
35
- orientation === "horizontal" &&
36
- "h-2.5 flex-col border-t border-t-transparent p-[1px]",
37
- className
38
- )}
39
- orientation={orientation}
40
- ref={ref}
41
- {...props}
42
- >
43
- <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
44
- </ScrollAreaPrimitive.ScrollAreaScrollbar>
30
+ <ScrollAreaPrimitive.ScrollAreaScrollbar
31
+ className={cn(
32
+ "flex touch-none select-none transition-colors",
33
+ orientation === "vertical" &&
34
+ "h-full w-2.5 border-l border-l-transparent p-[1px]",
35
+ orientation === "horizontal" &&
36
+ "h-2.5 flex-col border-t border-t-transparent p-[1px]",
37
+ className,
38
+ )}
39
+ orientation={orientation}
40
+ ref={ref}
41
+ {...props}
42
+ >
43
+ <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
44
+ </ScrollAreaPrimitive.ScrollAreaScrollbar>
45
45
  ));
46
46
  ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
47
47