@gunjo/ui 0.0.1-alpha.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 (88) hide show
  1. package/README.md +129 -0
  2. package/design/atoms-metadata.json +82 -0
  3. package/design/molecules-metadata.json +130 -0
  4. package/design/organisms-metadata.json +38 -0
  5. package/design/templates-metadata.json +38 -0
  6. package/package.json +158 -0
  7. package/src/components/atoms/Alert.tsx +63 -0
  8. package/src/components/atoms/Avatar.tsx +57 -0
  9. package/src/components/atoms/Badge.tsx +30 -0
  10. package/src/components/atoms/Button.tsx +29 -0
  11. package/src/components/atoms/ButtonVariants.ts +37 -0
  12. package/src/components/atoms/Checkbox.tsx +52 -0
  13. package/src/components/atoms/Img.tsx +102 -0
  14. package/src/components/atoms/Input.tsx +37 -0
  15. package/src/components/atoms/Kbd.tsx +22 -0
  16. package/src/components/atoms/Label.tsx +22 -0
  17. package/src/components/atoms/Progress.tsx +38 -0
  18. package/src/components/atoms/RadioGroup.tsx +86 -0
  19. package/src/components/atoms/Select.tsx +28 -0
  20. package/src/components/atoms/Separator.tsx +33 -0
  21. package/src/components/atoms/Skeleton.tsx +36 -0
  22. package/src/components/atoms/Slider.tsx +26 -0
  23. package/src/components/atoms/Spinner.tsx +34 -0
  24. package/src/components/atoms/Switch.tsx +47 -0
  25. package/src/components/atoms/Textarea.tsx +34 -0
  26. package/src/components/atoms/ToggleGroup.tsx +60 -0
  27. package/src/components/atoms/ToolPill.tsx +77 -0
  28. package/src/components/atoms/generated/default-variant-keys.ts +36 -0
  29. package/src/components/atoms/generated/variant-keys.ts +61 -0
  30. package/src/components/generated/component-manifest.ts +741 -0
  31. package/src/components/generated/component-style-hints.ts +1262 -0
  32. package/src/components/molecules/AIChatInput.tsx +140 -0
  33. package/src/components/molecules/AIChatMessage.tsx +109 -0
  34. package/src/components/molecules/Accordion.tsx +99 -0
  35. package/src/components/molecules/Breadcrumb.tsx +115 -0
  36. package/src/components/molecules/Calendar.tsx +60 -0
  37. package/src/components/molecules/Card.tsx +78 -0
  38. package/src/components/molecules/Carousel.tsx +261 -0
  39. package/src/components/molecules/Command.tsx +152 -0
  40. package/src/components/molecules/ContextMenu.tsx +200 -0
  41. package/src/components/molecules/Dialog.tsx +122 -0
  42. package/src/components/molecules/DropdownMenu.tsx +200 -0
  43. package/src/components/molecules/FilterButton.tsx +133 -0
  44. package/src/components/molecules/Form.tsx +90 -0
  45. package/src/components/molecules/HoverCard.tsx +29 -0
  46. package/src/components/molecules/List.tsx +120 -0
  47. package/src/components/molecules/Menubar.tsx +231 -0
  48. package/src/components/molecules/Modal.tsx +66 -0
  49. package/src/components/molecules/NotificationCenter.tsx +118 -0
  50. package/src/components/molecules/Pagination.tsx +118 -0
  51. package/src/components/molecules/Popover.tsx +31 -0
  52. package/src/components/molecules/ProgressWidget.tsx +40 -0
  53. package/src/components/molecules/Resizable.tsx +47 -0
  54. package/src/components/molecules/ScrollArea.tsx +48 -0
  55. package/src/components/molecules/Sheet.tsx +140 -0
  56. package/src/components/molecules/SidebarItem.tsx +134 -0
  57. package/src/components/molecules/SortButton.tsx +56 -0
  58. package/src/components/molecules/StatusBar.tsx +41 -0
  59. package/src/components/molecules/Stepper.tsx +108 -0
  60. package/src/components/molecules/Table.tsx +117 -0
  61. package/src/components/molecules/Tabs.tsx +64 -0
  62. package/src/components/molecules/Toast.tsx +57 -0
  63. package/src/components/molecules/Tooltip.tsx +30 -0
  64. package/src/components/molecules/generated/default-variant-keys.ts +22 -0
  65. package/src/components/molecules/generated/variant-keys.ts +33 -0
  66. package/src/components/organisms/AppRail.tsx +28 -0
  67. package/src/components/organisms/CommandPalette.tsx +58 -0
  68. package/src/components/organisms/FileUploader.tsx +151 -0
  69. package/src/components/organisms/FloatingPanel.tsx +46 -0
  70. package/src/components/organisms/InspectorPanel.tsx +65 -0
  71. package/src/components/organisms/RightRail.tsx +29 -0
  72. package/src/components/organisms/ShareModal.tsx +182 -0
  73. package/src/components/organisms/SpatialCanvas.tsx +36 -0
  74. package/src/components/organisms/ToastProvider.tsx +49 -0
  75. package/src/components/templates/AuthTemplate.tsx +58 -0
  76. package/src/components/templates/BannalyzeTemplate.tsx +55 -0
  77. package/src/components/templates/ChatTemplate.tsx +55 -0
  78. package/src/components/templates/DashboardTemplate.tsx +34 -0
  79. package/src/components/templates/EditorTemplate.tsx +46 -0
  80. package/src/components/templates/KanbanTemplate.tsx +38 -0
  81. package/src/components/templates/LandingTemplate.tsx +53 -0
  82. package/src/components/templates/MediaLibraryTemplate.tsx +55 -0
  83. package/src/components/templates/SettingsTemplate.tsx +48 -0
  84. package/src/globals.css +108 -0
  85. package/src/index.ts +89 -0
  86. package/src/lib/utils.ts +6 -0
  87. package/tailwind-preset.js +11 -0
  88. package/tailwind-theme-extend.cjs +86 -0
@@ -0,0 +1,55 @@
1
+ import * as React from "react"
2
+ import { cn } from "../../lib/utils"
3
+
4
+ interface MediaLibraryTemplateProps extends React.HTMLAttributes<HTMLDivElement> {
5
+ header?: React.ReactNode
6
+ sidebar?: React.ReactNode
7
+ details?: React.ReactNode
8
+ children: React.ReactNode
9
+ }
10
+
11
+ export function MediaLibraryTemplate({
12
+ children,
13
+ header,
14
+ sidebar,
15
+ details,
16
+ className,
17
+ ...props
18
+ }: MediaLibraryTemplateProps) {
19
+ return (
20
+ <div className={cn("flex flex-col w-[1280px] h-[720px] h-screen w-full overflow-hidden bg-background", className)} {...props}>
21
+ {/* Header */}
22
+ {header && (
23
+ <div className="flex-shrink-0 z-20 border-b bg-background">
24
+ <div className="flex h-14 items-center px-4">
25
+ {header}
26
+ </div>
27
+ </div>
28
+ )}
29
+
30
+ {/* Main Content Area */}
31
+ <div className="flex flex-1 overflow-hidden relative">
32
+ {/* Left Sidebar (Folders/Collections) */}
33
+ {sidebar && (
34
+ <aside className="group flex-shrink-0 w-64 border-r bg-muted/10 hidden md:block overflow-y-auto">
35
+ {sidebar}
36
+ </aside>
37
+ )}
38
+
39
+ {/* Asset Grid / Center Area */}
40
+ <main className="flex-1 relative overflow-hidden flex flex-col bg-background">
41
+ <div className="w-full h-full overflow-auto">
42
+ {children}
43
+ </div>
44
+ </main>
45
+
46
+ {/* Right Details Panel (Asset Metadata) */}
47
+ {details && (
48
+ <aside className="flex-shrink-0 w-80 border-l bg-background hidden lg:block overflow-y-auto">
49
+ {details}
50
+ </aside>
51
+ )}
52
+ </div>
53
+ </div>
54
+ )
55
+ }
@@ -0,0 +1,48 @@
1
+ import * as React from "react"
2
+ import { cn } from "../../lib/utils"
3
+
4
+ interface SettingsTemplateProps extends React.HTMLAttributes<HTMLDivElement> {
5
+ title?: string
6
+ description?: string
7
+ navigation?: React.ReactNode
8
+ children: React.ReactNode
9
+ }
10
+
11
+ export function SettingsTemplate({
12
+ children,
13
+ navigation,
14
+ title = "Settings",
15
+ description = "Manage your account settings and preferences.",
16
+ className,
17
+ ...props
18
+ }: SettingsTemplateProps) {
19
+ return (
20
+ <>
21
+ <div className={cn("md:hidden flex flex-col items-center w-[1280px] h-[720px] gap-4 w-full h-auto", className)} {...props}>
22
+ {/* Mobile View Placeholder or simple stack */}
23
+ <div className="p-4 space-y-4">
24
+ <h1 className="text-2xl font-bold">{title}</h1>
25
+ {navigation}
26
+ {children}
27
+ </div>
28
+ </div>
29
+ <div className={cn("hidden flex flex-col items-center w-[1280px] h-[720px] gap-4 space-y-6 p-10 pb-16 md:block", className)} {...props}>
30
+ <div className="space-y-0.5">
31
+ <h2 className="text-2xl font-bold tracking-tight">{title}</h2>
32
+ <p className="text-muted-foreground">
33
+ {description}
34
+ </p>
35
+ </div>
36
+ <div data-orientation="horizontal" role="none" className="shrink-0 bg-border h-[1px] w-full my-6"></div>
37
+ <div className="flex flex-col space-y-8 lg:flex-row lg:space-x-12 lg:space-y-0">
38
+ <aside className="-mx-4 lg:w-1/5">
39
+ {navigation}
40
+ </aside>
41
+ <div className="flex-1 lg:max-w-2xl">
42
+ {children}
43
+ </div>
44
+ </div>
45
+ </div>
46
+ </>
47
+ )
48
+ }
@@ -0,0 +1,108 @@
1
+ @layer base {
2
+ :root {
3
+ --warning: 45 93% 47%;
4
+ --success: 142 71% 45%;
5
+ --info: 217 91% 60%;
6
+ --overlay: 0 0% 0%;
7
+ --background: 0 0% 100%;
8
+ --foreground: 240 20% 6%;
9
+
10
+ --card: 0 0% 100%;
11
+ --card-foreground: 240 20% 6%;
12
+
13
+ --popover: 0 0% 100%;
14
+ --popover-foreground: 240 20% 6%;
15
+
16
+ --primary: 217 91% 60%;
17
+ --primary-foreground: 210 40% 98%;
18
+
19
+ --secondary: 210 40% 96%;
20
+ --secondary-foreground: 240 6% 10%;
21
+
22
+ --muted: 210 40% 96%;
23
+ --muted-foreground: 215 16% 47%;
24
+
25
+ --accent: 210 40% 96%;
26
+ --accent-foreground: 240 6% 10%;
27
+
28
+ --destructive: 0 84% 60%;
29
+ --destructive-foreground: 210 40% 98%;
30
+
31
+ --border: 214 32% 91%;
32
+ --input: 214 32% 91%;
33
+ --ring: 217 91% 60%;
34
+
35
+ --radius: 0.5rem;
36
+
37
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
38
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
39
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
40
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
41
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
42
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
43
+ --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
44
+ --shadow-none: none;
45
+
46
+ --duration-75: 75ms;
47
+ --duration-100: 100ms;
48
+ --duration-150: 150ms;
49
+ --duration-200: 200ms;
50
+ --duration-300: 300ms;
51
+ --duration-500: 500ms;
52
+ --duration-700: 700ms;
53
+ --duration-1000: 1000ms;
54
+ --ease-linear: linear;
55
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
56
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
57
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
58
+ }
59
+
60
+ .dark {
61
+ --background: 222.2 84% 4.9%;
62
+ --foreground: 210 40% 98%;
63
+
64
+ --card: 222.2 84% 4.9%;
65
+ --card-foreground: 210 40% 98%;
66
+
67
+ --popover: 222.2 84% 4.9%;
68
+ --popover-foreground: 210 40% 98%;
69
+
70
+ --primary: 217.2 91.2% 59.8%;
71
+ --primary-foreground: 222.2 47.4% 11.2%;
72
+
73
+ --secondary: 217.2 32.6% 17.5%;
74
+ --secondary-foreground: 210 40% 98%;
75
+
76
+ --muted: 217.2 32.6% 17.5%;
77
+ --muted-foreground: 215 20.2% 65.1%;
78
+
79
+ --accent: 217.2 32.6% 17.5%;
80
+ --accent-foreground: 210 40% 98%;
81
+
82
+ --destructive: 0 62.8% 30.6%;
83
+ --destructive-foreground: 210 40% 98%;
84
+
85
+ --border: 217.2 32.6% 17.5%;
86
+ --input: 217.2 32.6% 17.5%;
87
+ --ring: 224.3 76.3% 48%;
88
+
89
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.2);
90
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2), 0 1px 2px -1px rgb(0 0 0 / 0.2);
91
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.2), 0 2px 4px -2px rgb(0 0 0 / 0.2);
92
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.2), 0 4px 6px -4px rgb(0 0 0 / 0.2);
93
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.2), 0 8px 10px -6px rgb(0 0 0 / 0.2);
94
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.4);
95
+ --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.1);
96
+ --shadow-none: none;
97
+ }
98
+ }
99
+
100
+ @layer base {
101
+ * {
102
+ @apply border-border;
103
+ }
104
+
105
+ body {
106
+ @apply bg-background text-foreground;
107
+ }
108
+ }
package/src/index.ts ADDED
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @gunjo/ui – Design system component library.
3
+ * Generated by `npm run design:sync:components`. Do not edit manually.
4
+ */
5
+
6
+ /** Atoms */
7
+ export * from './components/atoms/Alert';
8
+ export * from './components/atoms/Avatar';
9
+ export * from './components/atoms/Badge';
10
+ export * from './components/atoms/Button';
11
+ export * from './components/atoms/Checkbox';
12
+ export * from './components/atoms/Img';
13
+ export * from './components/atoms/Input';
14
+ export * from './components/atoms/Kbd';
15
+ export * from './components/atoms/Label';
16
+ export * from './components/atoms/Progress';
17
+ export * from './components/atoms/RadioGroup';
18
+ export * from './components/atoms/Select';
19
+ export * from './components/atoms/Separator';
20
+ export * from './components/atoms/Skeleton';
21
+ export * from './components/atoms/Slider';
22
+ export * from './components/atoms/Spinner';
23
+ export * from './components/atoms/Switch';
24
+ export * from './components/atoms/Textarea';
25
+ export * from './components/atoms/ToggleGroup';
26
+ export * from './components/atoms/ToolPill';
27
+ export * from './components/atoms/ButtonVariants';
28
+
29
+ /** Molecules */
30
+ export * from './components/molecules/Accordion';
31
+ export * from './components/molecules/AIChatInput';
32
+ export * from './components/molecules/AIChatMessage';
33
+ export * from './components/molecules/Breadcrumb';
34
+ export * from './components/molecules/Calendar';
35
+ export * from './components/molecules/Card';
36
+ export * from './components/molecules/Carousel';
37
+ export * from './components/molecules/Command';
38
+ export * from './components/molecules/ContextMenu';
39
+ export * from './components/molecules/Dialog';
40
+ export * from './components/molecules/DropdownMenu';
41
+ export * from './components/molecules/FilterButton';
42
+ export * from './components/molecules/Form';
43
+ export * from './components/molecules/HoverCard';
44
+ export * from './components/molecules/List';
45
+ export * from './components/molecules/Menubar';
46
+ export * from './components/molecules/Modal';
47
+ export * from './components/molecules/NotificationCenter';
48
+ export * from './components/molecules/Pagination';
49
+ export * from './components/molecules/Popover';
50
+ export * from './components/molecules/ProgressWidget';
51
+ export * from './components/molecules/Resizable';
52
+ export * from './components/molecules/ScrollArea';
53
+ export * from './components/molecules/Sheet';
54
+ export * from './components/molecules/SidebarItem';
55
+ export * from './components/molecules/SortButton';
56
+ export * from './components/molecules/StatusBar';
57
+ export * from './components/molecules/Stepper';
58
+ export * from './components/molecules/Table';
59
+ export * from './components/molecules/Tabs';
60
+ export * from './components/molecules/Toast';
61
+ export * from './components/molecules/Tooltip';
62
+
63
+ /** Organisms */
64
+ export * from './components/organisms/AppRail';
65
+ export * from './components/organisms/CommandPalette';
66
+ export * from './components/organisms/FileUploader';
67
+ export * from './components/organisms/FloatingPanel';
68
+ export * from './components/organisms/InspectorPanel';
69
+ export * from './components/organisms/RightRail';
70
+ export * from './components/organisms/ShareModal';
71
+ export * from './components/organisms/SpatialCanvas';
72
+ export * from './components/organisms/ToastProvider';
73
+
74
+ /** Templates */
75
+ export * from './components/templates/AuthTemplate';
76
+ export * from './components/templates/BannalyzeTemplate';
77
+ export * from './components/templates/ChatTemplate';
78
+ export * from './components/templates/DashboardTemplate';
79
+ export * from './components/templates/EditorTemplate';
80
+ export * from './components/templates/KanbanTemplate';
81
+ export * from './components/templates/LandingTemplate';
82
+ export * from './components/templates/MediaLibraryTemplate';
83
+ export * from './components/templates/SettingsTemplate';
84
+
85
+ /** Utility */
86
+ export { cn } from './lib/utils';
87
+ export { componentManifest } from './components/generated/component-manifest';
88
+ export { componentStyleHints } from './components/generated/component-style-hints';
89
+
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
@@ -0,0 +1,11 @@
1
+ const themeExtend = require("./tailwind-theme-extend.cjs");
2
+
3
+ /** @type {import('tailwindcss').Config} */
4
+ module.exports = {
5
+ theme: {
6
+ extend: themeExtend
7
+ },
8
+ plugins: [
9
+ require("tailwindcss-animate")
10
+ ],
11
+ };
@@ -0,0 +1,86 @@
1
+ module.exports = {
2
+ colors: {
3
+ border: "hsl(var(--border))",
4
+ input: "hsl(var(--input))",
5
+ ring: "hsl(var(--ring))",
6
+ overlay: "hsl(var(--overlay))",
7
+ info: "hsl(var(--info))",
8
+ success: "hsl(var(--success))",
9
+ warning: "hsl(var(--warning))",
10
+ background: "hsl(var(--background))",
11
+ foreground: "hsl(var(--foreground))",
12
+ primary: {
13
+ DEFAULT: "hsl(var(--primary))",
14
+ foreground: "hsl(var(--primary-foreground))",
15
+ },
16
+ secondary: {
17
+ DEFAULT: "hsl(var(--secondary))",
18
+ foreground: "hsl(var(--secondary-foreground))",
19
+ },
20
+ destructive: {
21
+ DEFAULT: "hsl(var(--destructive))",
22
+ foreground: "hsl(var(--destructive-foreground))",
23
+ },
24
+ muted: {
25
+ DEFAULT: "hsl(var(--muted))",
26
+ foreground: "hsl(var(--muted-foreground))",
27
+ },
28
+ accent: {
29
+ DEFAULT: "hsl(var(--accent))",
30
+ foreground: "hsl(var(--accent-foreground))",
31
+ },
32
+ popover: {
33
+ DEFAULT: "hsl(var(--popover))",
34
+ foreground: "hsl(var(--popover-foreground))",
35
+ },
36
+ card: {
37
+ DEFAULT: "hsl(var(--card))",
38
+ foreground: "hsl(var(--card-foreground))",
39
+ },
40
+ },
41
+ borderRadius: {
42
+ lg: "var(--radius)",
43
+ md: "calc(var(--radius) - 2px)",
44
+ sm: "calc(var(--radius) - 4px)",
45
+ },
46
+ boxShadow: {
47
+ sm: "var(--shadow-sm)",
48
+ DEFAULT: "var(--shadow)",
49
+ md: "var(--shadow-md)",
50
+ lg: "var(--shadow-lg)",
51
+ xl: "var(--shadow-xl)",
52
+ "2xl": "var(--shadow-2xl)",
53
+ inner: "var(--shadow-inner)",
54
+ none: "var(--shadow-none)",
55
+ },
56
+ transitionDuration: {
57
+ 75: "var(--duration-75)",
58
+ 100: "var(--duration-100)",
59
+ 150: "var(--duration-150)",
60
+ 200: "var(--duration-200)",
61
+ 300: "var(--duration-300)",
62
+ 500: "var(--duration-500)",
63
+ 700: "var(--duration-700)",
64
+ 1000: "var(--duration-1000)",
65
+ },
66
+ transitionTimingFunction: {
67
+ linear: "var(--ease-linear)",
68
+ in: "var(--ease-in)",
69
+ out: "var(--ease-out)",
70
+ "in-out": "var(--ease-in-out)",
71
+ },
72
+ keyframes: {
73
+ "accordion-down": {
74
+ from: { height: "0" },
75
+ to: { height: "var(--radix-accordion-content-height)" },
76
+ },
77
+ "accordion-up": {
78
+ from: { height: "var(--radix-accordion-content-height)" },
79
+ to: { height: "0" },
80
+ },
81
+ },
82
+ animation: {
83
+ "accordion-down": "accordion-down var(--duration-200) var(--ease-out)",
84
+ "accordion-up": "accordion-up var(--duration-200) var(--ease-out)",
85
+ },
86
+ };