git0 0.3.17 → 0.3.18

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 (59) hide show
  1. package/docs/README.md +20 -0
  2. package/docs/app/(home)/docs-home.css +235 -0
  3. package/docs/app/(home)/layout.tsx +12 -0
  4. package/docs/app/(home)/page.tsx +27 -0
  5. package/docs/app/docs/[[...slug]]/page.tsx +84 -0
  6. package/docs/app/docs/api/docs-search/route.ts +11 -0
  7. package/docs/app/docs/layout.tsx +16 -0
  8. package/docs/app/docs/llms-full.txt/route.ts +15 -0
  9. package/docs/app/docs/llms.mdx/docs/[[...slug]]/route.ts +24 -0
  10. package/docs/app/globals.css +814 -0
  11. package/docs/app/layout.config.tsx +32 -0
  12. package/docs/app/layout.tsx +22 -0
  13. package/docs/app/provider.tsx +20 -0
  14. package/docs/cli.json +11 -0
  15. package/docs/components/DocsHomepage/code-example.tsx +123 -0
  16. package/docs/components/DocsHomepage/features-grid.tsx +92 -0
  17. package/docs/components/DocsHomepage/footer.tsx +58 -0
  18. package/docs/components/DocsHomepage/hero-section.tsx +114 -0
  19. package/docs/components/DocsHomepage/project-types.tsx +114 -0
  20. package/docs/components/fumadocs/ai/ask-ai-dropdown.tsx +299 -0
  21. package/docs/components/fumadocs/ai/llm-copy-button.tsx +61 -0
  22. package/docs/components/fumadocs/api/api-page.client.tsx +7 -0
  23. package/docs/components/fumadocs/api/api-page.tsx +7 -0
  24. package/docs/components/fumadocs/layout/breadcrumb.tsx +36 -0
  25. package/docs/components/fumadocs/layout/search.tsx +55 -0
  26. package/docs/components/fumadocs/layout/theme-dropdown.tsx +3 -0
  27. package/docs/components/fumadocs/layout/theme-provider.tsx +15 -0
  28. package/docs/components/fumadocs/layout/theme-toggle.tsx +40 -0
  29. package/docs/components/ui/badge.tsx +50 -0
  30. package/docs/components/ui/button.tsx +66 -0
  31. package/docs/components/ui/collapsible.tsx +44 -0
  32. package/docs/components/ui/slider.tsx +36 -0
  33. package/docs/components/ui/tooltip.tsx +63 -0
  34. package/docs/components/ui/video-modal.tsx +238 -0
  35. package/docs/content/docs/fm.mdx +11 -0
  36. package/docs/content/docs/git0.mdx +104 -0
  37. package/docs/content/docs/github-api.mdx +764 -0
  38. package/docs/content/docs/index.mdx +98 -0
  39. package/docs/content/docs/meta.json +15 -0
  40. package/docs/content/docs/modules.mdx +10 -0
  41. package/docs/lib/fumadocs/customize-docs.ts +47 -0
  42. package/docs/lib/fumadocs/generate-api-docs.ts +73 -0
  43. package/docs/lib/fumadocs/source.tsx +50 -0
  44. package/docs/lib/utils.ts +10 -0
  45. package/docs/mdx-components.tsx +21 -0
  46. package/docs/next-env.d.ts +7 -0
  47. package/docs/next.config.ts +35 -0
  48. package/docs/package.json +61 -0
  49. package/docs/postcss.config.mjs +5 -0
  50. package/docs/public/apple-touch-icon.png +0 -0
  51. package/docs/public/favicon-192.png +0 -0
  52. package/docs/public/favicon-512.png +0 -0
  53. package/docs/public/favicon.ico +0 -0
  54. package/docs/public/manifest.webmanifest +14 -0
  55. package/docs/source.config.ts +29 -0
  56. package/docs/tsconfig.json +50 -0
  57. package/docs/vite.config.ts +2 -0
  58. package/docs/wrangler.jsonc +13 -0
  59. package/package.json +1 -1
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @file collapsible.tsx
3
+ * @description Collapsible component for hiding/showing content, built with Radix UI.
4
+ */
5
+ // @ts-nocheck - Radix UI types incompatible with React 19 children prop
6
+ 'use client';
7
+ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
8
+ import React, { forwardRef, useEffect, useState } from 'react';
9
+ import { cn } from '@/lib/utils';
10
+
11
+ const Collapsible = CollapsiblePrimitive.Root as any;
12
+
13
+ const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger as any;
14
+
15
+ const CollapsibleContent = forwardRef<
16
+ HTMLDivElement,
17
+ React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.CollapsibleContent>
18
+ >(({ children, ...props }, ref) => {
19
+ const [mounted, setMounted] = useState(false);
20
+
21
+ useEffect(() => {
22
+ setMounted(true);
23
+ }, []);
24
+
25
+ return (
26
+ <CollapsiblePrimitive.CollapsibleContent
27
+ ref={ref}
28
+ {...props}
29
+ className={cn(
30
+ 'overflow-hidden',
31
+ mounted &&
32
+ 'data-[state=closed]:animate-fd-collapsible-up data-[state=open]:animate-fd-collapsible-down',
33
+ props.className,
34
+ )}
35
+ >
36
+ {children}
37
+ </CollapsiblePrimitive.CollapsibleContent>
38
+ );
39
+ });
40
+
41
+ CollapsibleContent.displayName =
42
+ CollapsiblePrimitive.CollapsibleContent.displayName;
43
+
44
+ export { Collapsible, CollapsibleTrigger, CollapsibleContent };
@@ -0,0 +1,36 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ type SliderProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, "type" | "onChange" | "value"> & {
8
+ value?: number[]
9
+ onValueChange?: (value: number[]) => void
10
+ }
11
+
12
+ const Slider = React.forwardRef<HTMLInputElement, SliderProps>(
13
+ ({ className, value = [0], onValueChange, min = 0, max = 100, step = 1, ...props }, ref) => {
14
+ return (
15
+ <input
16
+ ref={ref}
17
+ type="range"
18
+ min={min}
19
+ max={max}
20
+ step={step}
21
+ value={value[0] ?? 0}
22
+ onChange={(event) => onValueChange?.([Number(event.target.value)])}
23
+ className={cn(
24
+ "h-2 w-full cursor-pointer appearance-none rounded-full bg-slate-800 accent-sky-400",
25
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sky-400 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950",
26
+ className,
27
+ )}
28
+ {...props}
29
+ />
30
+ )
31
+ },
32
+ )
33
+
34
+ Slider.displayName = "Slider"
35
+
36
+ export { Slider }
@@ -0,0 +1,63 @@
1
+ // @ts-nocheck - Radix UI types incompatible with React 19 children prop
2
+ "use client"
3
+
4
+ import * as React from "react"
5
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip"
6
+
7
+ import { cn } from "@/lib/utils"
8
+
9
+ function TooltipProvider({
10
+ delayDuration = 0,
11
+ ...props
12
+ }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
13
+ return (
14
+ <TooltipPrimitive.Provider
15
+ data-slot="tooltip-provider"
16
+ delayDuration={delayDuration}
17
+ {...props}
18
+ />
19
+ )
20
+ }
21
+
22
+ function Tooltip({
23
+ ...props
24
+ }: React.ComponentProps<typeof TooltipPrimitive.Root>) {
25
+ return (
26
+ <TooltipProvider>
27
+ <TooltipPrimitive.Root data-slot="tooltip" {...props} />
28
+ </TooltipProvider>
29
+ )
30
+ }
31
+
32
+ function TooltipTrigger({
33
+ children,
34
+ ...props
35
+ }: React.ComponentProps<typeof TooltipPrimitive.Trigger> & { children?: React.ReactNode }) {
36
+ return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props}>{children}</TooltipPrimitive.Trigger>
37
+ }
38
+
39
+ function TooltipContent({
40
+ className,
41
+ sideOffset = 4,
42
+ children,
43
+ ...props
44
+ }: React.ComponentProps<typeof TooltipPrimitive.Content>) {
45
+ return (
46
+ <TooltipPrimitive.Portal>
47
+ <TooltipPrimitive.Content
48
+ data-slot="tooltip-content"
49
+ sideOffset={sideOffset}
50
+ className={cn(
51
+ "bg-slate-950 border-slate-800 text-slate-100 z-50 overflow-hidden rounded-md border px-3 py-1.5 text-xs shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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",
52
+ className
53
+ )}
54
+ {...props}
55
+ >
56
+ {children}
57
+ <TooltipPrimitive.Arrow className="fill-slate-950" />
58
+ </TooltipPrimitive.Content>
59
+ </TooltipPrimitive.Portal>
60
+ )
61
+ }
62
+
63
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
@@ -0,0 +1,238 @@
1
+ /**
2
+ * @file video-modal.tsx
3
+ * @description Modal component specifically designed for playing video content.
4
+ */
5
+ // @ts-nocheck - Radix UI types incompatible with React 19 children prop
6
+ 'use client'
7
+
8
+ import * as React from 'react'
9
+ import * as DialogPrimitive from '@radix-ui/react-dialog'
10
+ import { cn } from "@/lib/utils"
11
+
12
+ function VideoModal({
13
+ ...props
14
+ }: React.ComponentProps<typeof DialogPrimitive.Root>) {
15
+ return <DialogPrimitive.Root data-slot="video-modal" {...props} />
16
+ }
17
+
18
+ function VideoModalTrigger({
19
+ children,
20
+ ...props
21
+ }: React.ComponentProps<typeof DialogPrimitive.Trigger> & { children?: React.ReactNode }) {
22
+ return <DialogPrimitive.Trigger data-slot="video-modal-trigger" {...props}>{children}</DialogPrimitive.Trigger>
23
+ }
24
+
25
+ function VideoModalPortal({
26
+ ...props
27
+ }: React.ComponentProps<typeof DialogPrimitive.Portal>) {
28
+ return <DialogPrimitive.Portal data-slot="video-modal-portal" {...props} />
29
+ }
30
+
31
+ function VideoModalClose({
32
+ ...props
33
+ }: React.ComponentProps<typeof DialogPrimitive.Close>) {
34
+ return <DialogPrimitive.Close data-slot="video-modal-close" {...props} />
35
+ }
36
+
37
+ const VideoModalOverlay = React.forwardRef<
38
+ React.ElementRef<typeof DialogPrimitive.Overlay>,
39
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
40
+ >(({ className, ...props }, ref) => (
41
+ <DialogPrimitive.Overlay
42
+ ref={ref}
43
+ className={cn(
44
+ 'data-[state=closed]:animate-modal-fade-out data-[state=open]:animate-modal-fade-in fixed inset-0 z-50 backdrop-blur-xl',
45
+ className,
46
+ )}
47
+ {...props}
48
+ />
49
+ ))
50
+ VideoModalOverlay.displayName = DialogPrimitive.Overlay.displayName
51
+
52
+ const VideoModalContent = React.forwardRef<
53
+ React.ElementRef<typeof DialogPrimitive.Content>,
54
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
55
+ >(({ className, children, ...props }, ref) => (
56
+ <VideoModalPortal>
57
+ <VideoModalOverlay />
58
+ <DialogPrimitive.Content
59
+ ref={ref}
60
+ className={cn(
61
+ 'fixed left-1/2 top-1/2 z-50 flex h-screen w-screen -translate-x-1/2 -translate-y-1/2 items-center justify-center p-3',
62
+ 'data-[state=closed]:animate-modal-fade-out data-[state=open]:animate-modal-fade-in data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[50%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[50%] transition-all',
63
+ className,
64
+ )}
65
+ {...props}
66
+ >
67
+ <div className="relative mx-auto flex size-full items-center justify-center rounded-2xl border border-gray-950/[.1] bg-gray-50/[.2] dark:border-gray-50/[.1] dark:bg-gray-950/[.5]">
68
+ {/* Mobile close button */}
69
+ <CloseIcon isMobile />
70
+
71
+ <div className="flex h-4/5 w-full max-w-5xl gap-6">
72
+ {/* Desktop close button */}
73
+ <CloseIcon />
74
+ <div className="flex w-full flex-col max-lg:p-4 max-lg:text-center">
75
+ {children}
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </DialogPrimitive.Content>
80
+ </VideoModalPortal>
81
+ ))
82
+
83
+ VideoModalContent.displayName = DialogPrimitive.Content.displayName
84
+
85
+ const VideoModalTitle = React.forwardRef<
86
+ React.ElementRef<typeof DialogPrimitive.Title>,
87
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
88
+ >(({ className, ...props }, ref) => (
89
+ <DialogPrimitive.Title
90
+ ref={ref}
91
+ className={cn(
92
+ 'mb-4 text-4xl font-bold text-gray-950 dark:text-gray-50',
93
+ className,
94
+ )}
95
+ {...props}
96
+ />
97
+ ))
98
+ VideoModalTitle.displayName = DialogPrimitive.Title.displayName
99
+
100
+ const VideoModalDescription = React.forwardRef<
101
+ React.ElementRef<typeof DialogPrimitive.Description>,
102
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
103
+ >(({ className, ...props }, ref) => (
104
+ <DialogPrimitive.Description
105
+ ref={ref}
106
+ className={cn(
107
+ 'mb-6 text-xl text-gray-950/80 dark:text-gray-50/70',
108
+ className,
109
+ )}
110
+ {...props}
111
+ />
112
+ ))
113
+ VideoModalDescription.displayName = DialogPrimitive.Description.displayName
114
+
115
+ const VideoPreview = React.forwardRef<
116
+ HTMLDivElement,
117
+ React.HTMLAttributes<HTMLDivElement>
118
+ >(({ className, children, ...props }, ref) => (
119
+ <div
120
+ ref={ref}
121
+ className={cn(
122
+ 'absolute inset-0 z-10 transition-opacity duration-500 group-[.playing]:pointer-events-none group-[.playing]:opacity-0',
123
+ className,
124
+ )}
125
+ {...props}
126
+ >
127
+ {children}
128
+ </div>
129
+ ))
130
+ VideoPreview.displayName = 'VideoPreview'
131
+
132
+ const VideoPlayButton = React.forwardRef<
133
+ HTMLDivElement,
134
+ React.HTMLAttributes<HTMLDivElement>
135
+ >(({ className, children, ...props }, ref) => (
136
+ <div
137
+ ref={ref}
138
+ className={cn(
139
+ 'absolute inset-0 z-20 flex items-center justify-center transition-opacity duration-300 group-[.playing]:pointer-events-none group-[.playing]:opacity-0',
140
+ className,
141
+ )}
142
+ {...props}
143
+ >
144
+ {children}
145
+ </div>
146
+ ))
147
+ VideoPlayButton.displayName = 'VideoPlayButton'
148
+
149
+ const VideoPlayer = React.forwardRef<
150
+ HTMLDivElement,
151
+ React.HTMLAttributes<HTMLDivElement>
152
+ >(({ className, children, ...props }, ref) => {
153
+ const [isPlaying, setIsPlaying] = React.useState(false)
154
+
155
+ return (
156
+ <div
157
+ ref={ref}
158
+ className={cn(
159
+ 'group relative aspect-video max-w-4xl overflow-hidden rounded-xl border border-gray-950/[.1] object-cover dark:border-gray-50/[.1]',
160
+ isPlaying && 'playing',
161
+ className,
162
+ )}
163
+ onClick={() => setIsPlaying(true)}
164
+ {...props}
165
+ >
166
+ {children}
167
+ </div>
168
+ )
169
+ })
170
+ VideoPlayer.displayName = 'VideoPlayer'
171
+
172
+ const VideoModalVideo = React.forwardRef<
173
+ HTMLDivElement,
174
+ React.HTMLAttributes<HTMLDivElement>
175
+ >(({ className, children, ...props }, ref) => (
176
+ <div
177
+ ref={ref}
178
+ className={cn(
179
+ 'aspect-video max-w-4xl overflow-hidden rounded-xl border border-gray-950/[.1] object-cover shadow-xl dark:border-gray-50/[.1]',
180
+ className,
181
+ )}
182
+ {...props}
183
+ >
184
+ {children}
185
+ </div>
186
+ ))
187
+ VideoModalVideo.displayName = 'VideoModalVideo'
188
+
189
+ const CloseIcon = React.forwardRef<
190
+ React.ElementRef<typeof VideoModalClose>,
191
+ React.ComponentPropsWithoutRef<typeof VideoModalClose> & {
192
+ isMobile?: boolean
193
+ }
194
+ >(({ className, isMobile = false, ...props }, ref) => (
195
+ <VideoModalClose
196
+ ref={ref}
197
+ className={cn(
198
+ 'rounded-full border border-gray-950/[.1] bg-gray-950/[.01] p-2 transition duration-300 hover:bg-gray-950/[.05] dark:border-gray-50/[.1] dark:bg-gray-50/[.10] dark:hover:bg-gray-50/[.15]',
199
+ isMobile
200
+ ? 'absolute right-4 top-4 lg:hidden'
201
+ : 'hidden self-start lg:block',
202
+ className,
203
+ )}
204
+ {...props}
205
+ >
206
+ <svg
207
+ fill="none"
208
+ height="12"
209
+ viewBox="0 0 12 12"
210
+ width="12"
211
+ xmlns="http://www.w3.org/2000/svg"
212
+ >
213
+ <path
214
+ d="M1 1L11 11M11 1L1 11"
215
+ className="stroke-current"
216
+ strokeLinecap="round"
217
+ strokeLinejoin="round"
218
+ strokeWidth="1.5"
219
+ >
220
+ </path>
221
+ </svg>
222
+ <span className="sr-only">Close</span>
223
+ </VideoModalClose>
224
+ ))
225
+
226
+ CloseIcon.displayName = 'CloseIcon'
227
+
228
+ export {
229
+ VideoModal,
230
+ VideoModalTrigger,
231
+ VideoModalContent,
232
+ VideoModalTitle,
233
+ VideoModalDescription,
234
+ VideoModalVideo,
235
+ VideoPreview,
236
+ VideoPlayButton,
237
+ VideoPlayer,
238
+ }
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: fm
3
+ description: Terminal file manager bundled with git0.
4
+ ---
5
+
6
+ `fm` is a keyboard-driven terminal file manager that ships as one of git0's bins.
7
+ It is not built — the bin points straight at `src/fm.js`.
8
+
9
+ ```bash
10
+ fm
11
+ ```
@@ -0,0 +1,104 @@
1
+ ---
2
+ title: git0
3
+ description: Project setup functions — dependency installation and IDE launching.
4
+ ---
5
+
6
+ ## installDependencies()
7
+
8
+ ```ts
9
+ function installDependencies(targetDir: string): Promise<void>;
10
+ ```
11
+
12
+ Defined in: [src/git0.js:207](https://github.com/vtempest/git0/blob/59ed406649e41b4d7072fd6657f693b571f0088e/src/git0.js#L207)
13
+
14
+ Automatically detects project type and installs dependencies
15
+ Supports Node.js, Docker, Python, Rust, and Go projects
16
+
17
+ ### Parameters
18
+
19
+ <table>
20
+ <thead>
21
+ <tr>
22
+ <th>Parameter</th>
23
+ <th>Type</th>
24
+ <th>Description</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <tr>
29
+ <td>
30
+
31
+ `targetDir`
32
+
33
+ </td>
34
+ <td>
35
+
36
+ `string`
37
+
38
+ </td>
39
+ <td>
40
+
41
+ Path to the project directory
42
+
43
+ </td>
44
+ </tr>
45
+ </tbody>
46
+ </table>
47
+
48
+ ### Returns
49
+
50
+ `Promise`&lt;`void`&gt;
51
+
52
+ ### Export
53
+
54
+ ### Async
55
+
56
+ ***
57
+
58
+ ## openInIDE()
59
+
60
+ ```ts
61
+ function openInIDE(targetDir: string): void;
62
+ ```
63
+
64
+ Defined in: [src/git0.js:157](https://github.com/vtempest/git0/blob/59ed406649e41b4d7072fd6657f693b571f0088e/src/git0.js#L157)
65
+
66
+ Opens a directory in the first available IDE/editor
67
+ Also attempts to open a README or package.json file after 3 seconds
68
+
69
+ ### Parameters
70
+
71
+ <table>
72
+ <thead>
73
+ <tr>
74
+ <th>Parameter</th>
75
+ <th>Type</th>
76
+ <th>Description</th>
77
+ </tr>
78
+ </thead>
79
+ <tbody>
80
+ <tr>
81
+ <td>
82
+
83
+ `targetDir`
84
+
85
+ </td>
86
+ <td>
87
+
88
+ `string`
89
+
90
+ </td>
91
+ <td>
92
+
93
+ Path to the directory to open
94
+
95
+ </td>
96
+ </tr>
97
+ </tbody>
98
+ </table>
99
+
100
+ ### Returns
101
+
102
+ `void`
103
+
104
+ ### Export