@creezio/shell-ui 0.22.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 (232) hide show
  1. package/README.md +336 -0
  2. package/dist/adapters/nav-shell.d.ts +54 -0
  3. package/dist/adapters/nav-shell.d.ts.map +1 -0
  4. package/dist/adapters/nav-shell.js +112 -0
  5. package/dist/adapters/nav-shell.js.map +1 -0
  6. package/dist/brand.d.ts +64 -0
  7. package/dist/brand.d.ts.map +1 -0
  8. package/dist/brand.js +59 -0
  9. package/dist/brand.js.map +1 -0
  10. package/dist/core-nav.d.ts +17 -0
  11. package/dist/core-nav.d.ts.map +1 -0
  12. package/dist/core-nav.js +40 -0
  13. package/dist/core-nav.js.map +1 -0
  14. package/dist/index.d.ts +29 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +24 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/lib/api-scopes.d.ts +24 -0
  19. package/dist/lib/api-scopes.d.ts.map +1 -0
  20. package/dist/lib/api-scopes.js +78 -0
  21. package/dist/lib/api-scopes.js.map +1 -0
  22. package/dist/lib/catalog-suspense-key.d.ts +3 -0
  23. package/dist/lib/catalog-suspense-key.d.ts.map +1 -0
  24. package/dist/lib/catalog-suspense-key.js +12 -0
  25. package/dist/lib/catalog-suspense-key.js.map +1 -0
  26. package/dist/lib/data-changed.d.ts +51 -0
  27. package/dist/lib/data-changed.d.ts.map +1 -0
  28. package/dist/lib/data-changed.js +227 -0
  29. package/dist/lib/data-changed.js.map +1 -0
  30. package/dist/lib/desktop-home-path.d.ts +14 -0
  31. package/dist/lib/desktop-home-path.d.ts.map +1 -0
  32. package/dist/lib/desktop-home-path.js +29 -0
  33. package/dist/lib/desktop-home-path.js.map +1 -0
  34. package/dist/lib/geo-distance.d.ts +6 -0
  35. package/dist/lib/geo-distance.d.ts.map +1 -0
  36. package/dist/lib/geo-distance.js +27 -0
  37. package/dist/lib/geo-distance.js.map +1 -0
  38. package/dist/lib/img.d.ts +2 -0
  39. package/dist/lib/img.d.ts.map +1 -0
  40. package/dist/lib/img.js +40 -0
  41. package/dist/lib/img.js.map +1 -0
  42. package/dist/lib/keepalive-eviction.d.ts +14 -0
  43. package/dist/lib/keepalive-eviction.d.ts.map +1 -0
  44. package/dist/lib/keepalive-eviction.js +44 -0
  45. package/dist/lib/keepalive-eviction.js.map +1 -0
  46. package/dist/lib/ops-track.d.ts +29 -0
  47. package/dist/lib/ops-track.d.ts.map +1 -0
  48. package/dist/lib/ops-track.js +37 -0
  49. package/dist/lib/ops-track.js.map +1 -0
  50. package/dist/lib/optimize-cover-url.d.ts +10 -0
  51. package/dist/lib/optimize-cover-url.d.ts.map +1 -0
  52. package/dist/lib/optimize-cover-url.js +80 -0
  53. package/dist/lib/optimize-cover-url.js.map +1 -0
  54. package/dist/lib/page-trails.d.ts +9 -0
  55. package/dist/lib/page-trails.d.ts.map +1 -0
  56. package/dist/lib/page-trails.js +20 -0
  57. package/dist/lib/page-trails.js.map +1 -0
  58. package/dist/lib/public-origin.d.ts +32 -0
  59. package/dist/lib/public-origin.d.ts.map +1 -0
  60. package/dist/lib/public-origin.js +125 -0
  61. package/dist/lib/public-origin.js.map +1 -0
  62. package/dist/lib/server-incident.d.ts +12 -0
  63. package/dist/lib/server-incident.d.ts.map +1 -0
  64. package/dist/lib/server-incident.js +72 -0
  65. package/dist/lib/server-incident.js.map +1 -0
  66. package/dist/lib/tab-document-url.d.ts +13 -0
  67. package/dist/lib/tab-document-url.d.ts.map +1 -0
  68. package/dist/lib/tab-document-url.js +60 -0
  69. package/dist/lib/tab-document-url.js.map +1 -0
  70. package/dist/lib/utils.d.ts +20 -0
  71. package/dist/lib/utils.d.ts.map +1 -0
  72. package/dist/lib/utils.js +87 -0
  73. package/dist/lib/utils.js.map +1 -0
  74. package/dist/nav-catalog.d.ts +97 -0
  75. package/dist/nav-catalog.d.ts.map +1 -0
  76. package/dist/nav-catalog.js +282 -0
  77. package/dist/nav-catalog.js.map +1 -0
  78. package/dist/registry.d.ts +11 -0
  79. package/dist/registry.d.ts.map +1 -0
  80. package/dist/registry.js +60 -0
  81. package/dist/registry.js.map +1 -0
  82. package/dist/types.d.ts +22 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +2 -0
  85. package/dist/types.js.map +1 -0
  86. package/dist-cjs/adapters/nav-shell.js +115 -0
  87. package/dist-cjs/adapters/nav-shell.js.map +1 -0
  88. package/dist-cjs/brand.js +66 -0
  89. package/dist-cjs/brand.js.map +1 -0
  90. package/dist-cjs/core-nav.js +43 -0
  91. package/dist-cjs/core-nav.js.map +1 -0
  92. package/dist-cjs/index.js +95 -0
  93. package/dist-cjs/index.js.map +1 -0
  94. package/dist-cjs/lib/api-scopes.js +86 -0
  95. package/dist-cjs/lib/api-scopes.js.map +1 -0
  96. package/dist-cjs/lib/catalog-suspense-key.js +15 -0
  97. package/dist-cjs/lib/catalog-suspense-key.js.map +1 -0
  98. package/dist-cjs/lib/data-changed.js +236 -0
  99. package/dist-cjs/lib/data-changed.js.map +1 -0
  100. package/dist-cjs/lib/desktop-home-path.js +34 -0
  101. package/dist-cjs/lib/desktop-home-path.js.map +1 -0
  102. package/dist-cjs/lib/geo-distance.js +30 -0
  103. package/dist-cjs/lib/geo-distance.js.map +1 -0
  104. package/dist-cjs/lib/img.js +43 -0
  105. package/dist-cjs/lib/img.js.map +1 -0
  106. package/dist-cjs/lib/keepalive-eviction.js +49 -0
  107. package/dist-cjs/lib/keepalive-eviction.js.map +1 -0
  108. package/dist-cjs/lib/ops-track.js +41 -0
  109. package/dist-cjs/lib/ops-track.js.map +1 -0
  110. package/dist-cjs/lib/optimize-cover-url.js +83 -0
  111. package/dist-cjs/lib/optimize-cover-url.js.map +1 -0
  112. package/dist-cjs/lib/page-trails.js +25 -0
  113. package/dist-cjs/lib/page-trails.js.map +1 -0
  114. package/dist-cjs/lib/public-origin.js +130 -0
  115. package/dist-cjs/lib/public-origin.js.map +1 -0
  116. package/dist-cjs/lib/server-incident.js +75 -0
  117. package/dist-cjs/lib/server-incident.js.map +1 -0
  118. package/dist-cjs/lib/tab-document-url.js +65 -0
  119. package/dist-cjs/lib/tab-document-url.js.map +1 -0
  120. package/dist-cjs/lib/utils.js +97 -0
  121. package/dist-cjs/lib/utils.js.map +1 -0
  122. package/dist-cjs/nav-catalog.js +293 -0
  123. package/dist-cjs/nav-catalog.js.map +1 -0
  124. package/dist-cjs/package.json +3 -0
  125. package/dist-cjs/registry.js +64 -0
  126. package/dist-cjs/registry.js.map +1 -0
  127. package/dist-cjs/types.js +3 -0
  128. package/dist-cjs/types.js.map +1 -0
  129. package/package.json +163 -0
  130. package/ui/app-error-boundary.tsx +59 -0
  131. package/ui/data-table.tsx +121 -0
  132. package/ui/desktop/auth-window-chrome.tsx +51 -0
  133. package/ui/desktop/desktop-bridge.tsx +87 -0
  134. package/ui/desktop/external-site-slot.tsx +313 -0
  135. package/ui/desktop/external-site-surface.ts +58 -0
  136. package/ui/desktop/site-link.tsx +105 -0
  137. package/ui/desktop/window-chrome-controls.tsx +5 -0
  138. package/ui/desktop-types.ts +30 -0
  139. package/ui/faceted-filters.tsx +119 -0
  140. package/ui/global-search-host.ts +20 -0
  141. package/ui/global-search.tsx +66 -0
  142. package/ui/index.ts +178 -0
  143. package/ui/kit.ts +30 -0
  144. package/ui/layout/app-shell.tsx +58 -0
  145. package/ui/layout/desktop-update-banner.tsx +100 -0
  146. package/ui/layout/entity-header.tsx +44 -0
  147. package/ui/layout/native-os-nav.ts +104 -0
  148. package/ui/layout/nav-catalog-loader.tsx +98 -0
  149. package/ui/layout/nav-icons.ts +67 -0
  150. package/ui/layout/page-chrome.tsx +90 -0
  151. package/ui/layout/page-toolbar-context.tsx +82 -0
  152. package/ui/layout/sandbox-banner.tsx +38 -0
  153. package/ui/layout/section-view-shell.tsx +73 -0
  154. package/ui/layout/sidebar-host.ts +144 -0
  155. package/ui/layout/sidebar.tsx +1150 -0
  156. package/ui/lib/ai-screencast-hub.ts +127 -0
  157. package/ui/lib/ai-workspace-client.ts +46 -0
  158. package/ui/lib/aid.ts +22 -0
  159. package/ui/lib/desktop-host.ts +114 -0
  160. package/ui/lib/fleet-tracker-client.ts +237 -0
  161. package/ui/lib/hermes-ui.ts +114 -0
  162. package/ui/lib/n8n-ui.ts +115 -0
  163. package/ui/lib/use-creezio-resource.tsx +121 -0
  164. package/ui/lib/use-shell-ui-brand.ts +22 -0
  165. package/ui/list-toolbar.tsx +309 -0
  166. package/ui/os-pages/desktop-settings-page.tsx +158 -0
  167. package/ui/os-pages/index.ts +8 -0
  168. package/ui/page-loading/entity-page-loading.tsx +59 -0
  169. package/ui/page-loading/list-page-loading.tsx +61 -0
  170. package/ui/pagination.tsx +56 -0
  171. package/ui/primitives/avatar.tsx +33 -0
  172. package/ui/primitives/badge.tsx +36 -0
  173. package/ui/primitives/breadcrumb.tsx +93 -0
  174. package/ui/primitives/button.tsx +44 -0
  175. package/ui/primitives/card.tsx +44 -0
  176. package/ui/primitives/chart.tsx +317 -0
  177. package/ui/primitives/command.tsx +111 -0
  178. package/ui/primitives/dialog.tsx +100 -0
  179. package/ui/primitives/dropdown-menu.tsx +187 -0
  180. package/ui/primitives/input.tsx +19 -0
  181. package/ui/primitives/label.tsx +17 -0
  182. package/ui/primitives/resizable.tsx +45 -0
  183. package/ui/primitives/scroll-area.tsx +41 -0
  184. package/ui/primitives/select.tsx +73 -0
  185. package/ui/primitives/separator.tsx +26 -0
  186. package/ui/primitives/sheet.tsx +90 -0
  187. package/ui/primitives/skeleton.tsx +7 -0
  188. package/ui/primitives/sonner.tsx +22 -0
  189. package/ui/primitives/tabs.tsx +51 -0
  190. package/ui/primitives/textarea.tsx +22 -0
  191. package/ui/primitives/tooltip.tsx +31 -0
  192. package/ui/pwa/client-error-reporter.tsx +62 -0
  193. package/ui/pwa/register-sw.tsx +50 -0
  194. package/ui/range-filters.tsx +174 -0
  195. package/ui/search/global-search-config.ts +32 -0
  196. package/ui/search/global-search-provider.tsx +528 -0
  197. package/ui/search/search-history.ts +74 -0
  198. package/ui/search-input.tsx +146 -0
  199. package/ui/settings/account-settings.tsx +140 -0
  200. package/ui/settings/agent-profile-settings.tsx +184 -0
  201. package/ui/settings/api-keys-settings.tsx +349 -0
  202. package/ui/settings/desktop-background-settings.tsx +128 -0
  203. package/ui/settings/desktop-connection-settings.tsx +251 -0
  204. package/ui/settings/desktop-embed-env-panel.tsx +257 -0
  205. package/ui/settings/desktop-fleet-telemetry-settings.tsx +269 -0
  206. package/ui/settings/desktop-hermes-settings.tsx +341 -0
  207. package/ui/settings/desktop-llm-keys.tsx +192 -0
  208. package/ui/settings/desktop-n8n-settings.tsx +306 -0
  209. package/ui/settings/desktop-tunnel.tsx +264 -0
  210. package/ui/settings/desktop-update-settings.tsx +175 -0
  211. package/ui/settings/factory-reset-settings.tsx +89 -0
  212. package/ui/settings/host-only-settings.tsx +62 -0
  213. package/ui/settings/locked-config-field.tsx +30 -0
  214. package/ui/settings/ops-diagnostic-settings.tsx +242 -0
  215. package/ui/settings/search-reindex-settings.tsx +158 -0
  216. package/ui/settings/server-mode-cards.tsx +801 -0
  217. package/ui/theme/tailwind-preset.cjs +82 -0
  218. package/ui/theme/theme.css +328 -0
  219. package/ui/workspace/ai-activity-panel-host.tsx +19 -0
  220. package/ui/workspace/ai-workspace-agent-host.tsx +54 -0
  221. package/ui/workspace/ai-workspace-banner.tsx +168 -0
  222. package/ui/workspace/impersonation-banner.tsx +39 -0
  223. package/ui/workspace/keep-alive.tsx +220 -0
  224. package/ui/workspace/tab-workspace-context.tsx +1172 -0
  225. package/ui/workspace/tab-workspace-host.ts +89 -0
  226. package/ui/workspace/types.ts +500 -0
  227. package/ui/workspace/use-location-search.tsx +50 -0
  228. package/ui/workspace/window-chrome-controls.tsx +116 -0
  229. package/ui/workspace/workspace-config.ts +47 -0
  230. package/ui/workspace/workspace-root.tsx +147 -0
  231. package/ui/workspace/workspace-shell.tsx +292 -0
  232. package/ui/workspace/workspace-tab-bar.tsx +572 -0
@@ -0,0 +1,187 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
5
+ import { Check, ChevronRight, Circle } from "lucide-react";
6
+ import { cn } from "@creezio/shell-ui";
7
+
8
+ const DropdownMenu = DropdownMenuPrimitive.Root;
9
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
10
+ const DropdownMenuGroup = DropdownMenuPrimitive.Group;
11
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
12
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub;
13
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
14
+
15
+ const DropdownMenuSubTrigger = React.forwardRef<
16
+ React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
17
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
18
+ inset?: boolean;
19
+ }
20
+ >(({ className, inset, children, ...props }, ref) => (
21
+ <DropdownMenuPrimitive.SubTrigger
22
+ ref={ref}
23
+ className={cn(
24
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100",
25
+ inset && "pl-8",
26
+ className,
27
+ )}
28
+ {...props}
29
+ >
30
+ {children}
31
+ <ChevronRight className="ml-auto h-4 w-4" />
32
+ </DropdownMenuPrimitive.SubTrigger>
33
+ ));
34
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
35
+
36
+ const DropdownMenuSubContent = React.forwardRef<
37
+ React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
38
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
39
+ >(({ className, ...props }, ref) => (
40
+ <DropdownMenuPrimitive.SubContent
41
+ ref={ref}
42
+ className={cn(
43
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border border-slate-200 bg-white p-1 text-slate-900 shadow-lg",
44
+ className,
45
+ )}
46
+ {...props}
47
+ />
48
+ ));
49
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
50
+
51
+ const DropdownMenuContent = React.forwardRef<
52
+ React.ElementRef<typeof DropdownMenuPrimitive.Content>,
53
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
54
+ >(({ className, sideOffset = 4, ...props }, ref) => (
55
+ <DropdownMenuPrimitive.Portal>
56
+ <DropdownMenuPrimitive.Content
57
+ ref={ref}
58
+ sideOffset={sideOffset}
59
+ className={cn(
60
+ "z-50 min-w-[12rem] overflow-hidden rounded-md border border-slate-200 bg-white p-1 text-slate-900 shadow-md",
61
+ className,
62
+ )}
63
+ {...props}
64
+ />
65
+ </DropdownMenuPrimitive.Portal>
66
+ ));
67
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
68
+
69
+ const DropdownMenuItem = React.forwardRef<
70
+ React.ElementRef<typeof DropdownMenuPrimitive.Item>,
71
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
72
+ inset?: boolean;
73
+ }
74
+ >(({ className, inset, ...props }, ref) => (
75
+ <DropdownMenuPrimitive.Item
76
+ ref={ref}
77
+ className={cn(
78
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-slate-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
79
+ inset && "pl-8",
80
+ className,
81
+ )}
82
+ {...props}
83
+ />
84
+ ));
85
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
86
+
87
+ const DropdownMenuCheckboxItem = React.forwardRef<
88
+ React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
89
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
90
+ >(({ className, children, checked, ...props }, ref) => (
91
+ <DropdownMenuPrimitive.CheckboxItem
92
+ ref={ref}
93
+ className={cn(
94
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-slate-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
95
+ className,
96
+ )}
97
+ checked={checked}
98
+ {...props}
99
+ >
100
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
101
+ <DropdownMenuPrimitive.ItemIndicator>
102
+ <Check className="h-4 w-4" />
103
+ </DropdownMenuPrimitive.ItemIndicator>
104
+ </span>
105
+ {children}
106
+ </DropdownMenuPrimitive.CheckboxItem>
107
+ ));
108
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
109
+
110
+ const DropdownMenuRadioItem = React.forwardRef<
111
+ React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
112
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
113
+ >(({ className, children, ...props }, ref) => (
114
+ <DropdownMenuPrimitive.RadioItem
115
+ ref={ref}
116
+ className={cn(
117
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-slate-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
118
+ className,
119
+ )}
120
+ {...props}
121
+ >
122
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
123
+ <DropdownMenuPrimitive.ItemIndicator>
124
+ <Circle className="h-2 w-2 fill-current" />
125
+ </DropdownMenuPrimitive.ItemIndicator>
126
+ </span>
127
+ {children}
128
+ </DropdownMenuPrimitive.RadioItem>
129
+ ));
130
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
131
+
132
+ const DropdownMenuLabel = React.forwardRef<
133
+ React.ElementRef<typeof DropdownMenuPrimitive.Label>,
134
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
135
+ inset?: boolean;
136
+ }
137
+ >(({ className, inset, ...props }, ref) => (
138
+ <DropdownMenuPrimitive.Label
139
+ ref={ref}
140
+ className={cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className)}
141
+ {...props}
142
+ />
143
+ ));
144
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
145
+
146
+ const DropdownMenuSeparator = React.forwardRef<
147
+ React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
148
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
149
+ >(({ className, ...props }, ref) => (
150
+ <DropdownMenuPrimitive.Separator
151
+ ref={ref}
152
+ className={cn("-mx-1 my-1 h-px bg-slate-100", className)}
153
+ {...props}
154
+ />
155
+ ));
156
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
157
+
158
+ function DropdownMenuShortcut({
159
+ className,
160
+ ...props
161
+ }: React.HTMLAttributes<HTMLSpanElement>) {
162
+ return (
163
+ <span
164
+ className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
165
+ {...props}
166
+ />
167
+ );
168
+ }
169
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
170
+
171
+ export {
172
+ DropdownMenu,
173
+ DropdownMenuTrigger,
174
+ DropdownMenuContent,
175
+ DropdownMenuItem,
176
+ DropdownMenuCheckboxItem,
177
+ DropdownMenuRadioItem,
178
+ DropdownMenuLabel,
179
+ DropdownMenuSeparator,
180
+ DropdownMenuShortcut,
181
+ DropdownMenuGroup,
182
+ DropdownMenuPortal,
183
+ DropdownMenuSub,
184
+ DropdownMenuSubContent,
185
+ DropdownMenuSubTrigger,
186
+ DropdownMenuRadioGroup,
187
+ };
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ import { cn } from "@creezio/shell-ui";
3
+
4
+ const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<"input">>(
5
+ ({ className, type, ...props }, ref) => (
6
+ <input
7
+ type={type}
8
+ className={cn(
9
+ "flex h-9 w-full rounded-md border border-slate-200 bg-white px-3 py-1 text-sm shadow-sm transition-colors placeholder:text-slate-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:cursor-not-allowed disabled:opacity-50",
10
+ className,
11
+ )}
12
+ ref={ref}
13
+ {...props}
14
+ />
15
+ ),
16
+ );
17
+ Input.displayName = "Input";
18
+
19
+ export { Input };
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import * as LabelPrimitive from "@radix-ui/react-label";
3
+ import { cn } from "@creezio/shell-ui";
4
+
5
+ const Label = React.forwardRef<
6
+ React.ElementRef<typeof LabelPrimitive.Root>,
7
+ React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>
8
+ >(({ className, ...props }, ref) => (
9
+ <LabelPrimitive.Root
10
+ ref={ref}
11
+ className={cn("text-sm font-medium leading-none text-slate-700", className)}
12
+ {...props}
13
+ />
14
+ ));
15
+ Label.displayName = LabelPrimitive.Root.displayName;
16
+
17
+ export { Label };
@@ -0,0 +1,45 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { GripVertical } from "lucide-react";
5
+ import * as ResizablePrimitive from "react-resizable-panels";
6
+ import { cn } from "@creezio/shell-ui";
7
+
8
+ const ResizablePanelGroup = ({
9
+ className,
10
+ ...props
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
+ />
19
+ );
20
+
21
+ const ResizablePanel = ResizablePrimitive.Panel;
22
+
23
+ const ResizableHandle = ({
24
+ withHandle,
25
+ className,
26
+ ...props
27
+ }: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
28
+ withHandle?: boolean;
29
+ }) => (
30
+ <ResizablePrimitive.PanelResizeHandle
31
+ className={cn(
32
+ "relative flex w-px items-center justify-center bg-[#ebe4d8] 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-slate-400 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-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[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 border-[#e6e0d4] bg-white">
39
+ <GripVertical className="h-2.5 w-2.5 text-[#9aa1b2]" />
40
+ </div>
41
+ )}
42
+ </ResizablePrimitive.PanelResizeHandle>
43
+ );
44
+
45
+ export { ResizablePanelGroup, ResizablePanel, ResizableHandle };
@@ -0,0 +1,41 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
5
+ import { cn } from "@creezio/shell-ui";
6
+
7
+ const ScrollArea = React.forwardRef<
8
+ React.ElementRef<typeof ScrollAreaPrimitive.Root>,
9
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
10
+ >(({ className, children, ...props }, ref) => (
11
+ <ScrollAreaPrimitive.Root ref={ref} className={cn("relative overflow-hidden", className)} {...props}>
12
+ <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
13
+ {children}
14
+ </ScrollAreaPrimitive.Viewport>
15
+ <ScrollBar />
16
+ <ScrollAreaPrimitive.Corner />
17
+ </ScrollAreaPrimitive.Root>
18
+ ));
19
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
20
+
21
+ const ScrollBar = React.forwardRef<
22
+ React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
23
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
24
+ >(({ className, orientation = "vertical", ...props }, ref) => (
25
+ <ScrollAreaPrimitive.ScrollAreaScrollbar
26
+ ref={ref}
27
+ orientation={orientation}
28
+ className={cn(
29
+ "flex touch-none select-none transition-colors",
30
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-px",
31
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-px",
32
+ className,
33
+ )}
34
+ {...props}
35
+ >
36
+ <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-slate-300" />
37
+ </ScrollAreaPrimitive.ScrollAreaScrollbar>
38
+ ));
39
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
40
+
41
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,73 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SelectPrimitive from "@radix-ui/react-select";
5
+ import { Check, ChevronDown } from "lucide-react";
6
+ import { cn } from "@creezio/shell-ui";
7
+
8
+ const Select = SelectPrimitive.Root;
9
+ const SelectValue = SelectPrimitive.Value;
10
+
11
+ const SelectTrigger = React.forwardRef<
12
+ React.ElementRef<typeof SelectPrimitive.Trigger>,
13
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>
14
+ >(({ className, children, ...props }, ref) => (
15
+ <SelectPrimitive.Trigger
16
+ ref={ref}
17
+ className={cn(
18
+ "flex h-9 w-full items-center justify-between rounded-md border border-slate-200 bg-white px-3 py-2 text-sm shadow-sm focus:outline-none focus:ring-2 focus:ring-slate-400 disabled:cursor-not-allowed disabled:opacity-50",
19
+ className,
20
+ )}
21
+ {...props}
22
+ >
23
+ {children}
24
+ <SelectPrimitive.Icon asChild>
25
+ <ChevronDown className="h-4 w-4 opacity-50" />
26
+ </SelectPrimitive.Icon>
27
+ </SelectPrimitive.Trigger>
28
+ ));
29
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
30
+
31
+ const SelectContent = React.forwardRef<
32
+ React.ElementRef<typeof SelectPrimitive.Content>,
33
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
34
+ >(({ className, children, position = "popper", ...props }, ref) => (
35
+ <SelectPrimitive.Portal>
36
+ <SelectPrimitive.Content
37
+ ref={ref}
38
+ className={cn(
39
+ "relative z-50 max-h-72 min-w-[8rem] overflow-hidden rounded-md border border-slate-200 bg-white text-slate-900 shadow-md",
40
+ className,
41
+ )}
42
+ position={position}
43
+ {...props}
44
+ >
45
+ <SelectPrimitive.Viewport className="p-1">{children}</SelectPrimitive.Viewport>
46
+ </SelectPrimitive.Content>
47
+ </SelectPrimitive.Portal>
48
+ ));
49
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
50
+
51
+ const SelectItem = React.forwardRef<
52
+ React.ElementRef<typeof SelectPrimitive.Item>,
53
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
54
+ >(({ className, children, ...props }, ref) => (
55
+ <SelectPrimitive.Item
56
+ ref={ref}
57
+ className={cn(
58
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-slate-100",
59
+ className,
60
+ )}
61
+ {...props}
62
+ >
63
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
64
+ <SelectPrimitive.ItemIndicator>
65
+ <Check className="h-4 w-4" />
66
+ </SelectPrimitive.ItemIndicator>
67
+ </span>
68
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
69
+ </SelectPrimitive.Item>
70
+ ));
71
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
72
+
73
+ export { Select, SelectValue, SelectTrigger, SelectContent, SelectItem };
@@ -0,0 +1,26 @@
1
+ "use client";
2
+
3
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
4
+ import { cn } from "@creezio/shell-ui";
5
+
6
+ function Separator({
7
+ className,
8
+ orientation = "horizontal",
9
+ decorative = true,
10
+ ...props
11
+ }: React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>) {
12
+ return (
13
+ <SeparatorPrimitive.Root
14
+ decorative={decorative}
15
+ orientation={orientation}
16
+ className={cn(
17
+ "shrink-0 bg-slate-200",
18
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
19
+ className,
20
+ )}
21
+ {...props}
22
+ />
23
+ );
24
+ }
25
+
26
+ export { Separator };
@@ -0,0 +1,90 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
5
+ import { X } from "lucide-react";
6
+ import { cn } from "@creezio/shell-ui";
7
+
8
+ const Sheet = DialogPrimitive.Root;
9
+ const SheetTrigger = DialogPrimitive.Trigger;
10
+ const SheetClose = DialogPrimitive.Close;
11
+ const SheetPortal = DialogPrimitive.Portal;
12
+
13
+ const SheetOverlay = React.forwardRef<
14
+ React.ElementRef<typeof DialogPrimitive.Overlay>,
15
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
16
+ >(({ className, ...props }, ref) => (
17
+ <DialogPrimitive.Overlay
18
+ ref={ref}
19
+ className={cn("fixed inset-0 z-50 bg-black/40", className)}
20
+ {...props}
21
+ />
22
+ ));
23
+ SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
24
+
25
+ const SheetContent = React.forwardRef<
26
+ React.ElementRef<typeof DialogPrimitive.Content>,
27
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {
28
+ side?: "right" | "left";
29
+ }
30
+ >(({ className, children, side = "right", ...props }, ref) => (
31
+ <SheetPortal>
32
+ <SheetOverlay />
33
+ <DialogPrimitive.Content
34
+ ref={ref}
35
+ className={cn(
36
+ "fixed z-50 flex h-full w-full max-w-md flex-col border-slate-200 bg-white shadow-xl transition ease-in-out",
37
+ side === "right" ? "inset-y-0 right-0 border-l" : "inset-y-0 left-0 border-r",
38
+ className,
39
+ )}
40
+ {...props}
41
+ >
42
+ {children}
43
+ <DialogPrimitive.Close className="absolute right-3 top-3 rounded-md p-1 opacity-70 hover:bg-slate-100 hover:opacity-100">
44
+ <X className="h-4 w-4" />
45
+ <span className="sr-only">Fermer</span>
46
+ </DialogPrimitive.Close>
47
+ </DialogPrimitive.Content>
48
+ </SheetPortal>
49
+ ));
50
+ SheetContent.displayName = "SheetContent";
51
+
52
+ function SheetHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
53
+ return <div className={cn("flex flex-col gap-1 border-b border-slate-100 px-4 py-3 pr-12", className)} {...props} />;
54
+ }
55
+
56
+ function SheetTitle({
57
+ className,
58
+ ...props
59
+ }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>) {
60
+ return (
61
+ <DialogPrimitive.Title
62
+ className={cn("text-base font-semibold text-slate-900", className)}
63
+ {...props}
64
+ />
65
+ );
66
+ }
67
+
68
+ function SheetDescription({
69
+ className,
70
+ ...props
71
+ }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>) {
72
+ return (
73
+ <DialogPrimitive.Description
74
+ className={cn("text-sm text-slate-500", className)}
75
+ {...props}
76
+ />
77
+ );
78
+ }
79
+
80
+ export {
81
+ Sheet,
82
+ SheetTrigger,
83
+ SheetClose,
84
+ SheetPortal,
85
+ SheetOverlay,
86
+ SheetContent,
87
+ SheetHeader,
88
+ SheetTitle,
89
+ SheetDescription,
90
+ };
@@ -0,0 +1,7 @@
1
+ import { cn } from "@creezio/shell-ui";
2
+
3
+ function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
4
+ return <div className={cn("animate-pulse rounded-md bg-slate-200", className)} {...props} />;
5
+ }
6
+
7
+ export { Skeleton };
@@ -0,0 +1,22 @@
1
+ "use client";
2
+
3
+ import { Toaster as Sonner } from "sonner";
4
+
5
+ type ToasterProps = React.ComponentProps<typeof Sonner>;
6
+
7
+ function Toaster({ ...props }: ToasterProps) {
8
+ return (
9
+ <Sonner
10
+ theme="light"
11
+ className="toaster group"
12
+ toastOptions={{
13
+ classNames: {
14
+ toast: "group toast border border-slate-200 bg-white text-slate-900 shadow-lg",
15
+ },
16
+ }}
17
+ {...props}
18
+ />
19
+ );
20
+ }
21
+
22
+ export { Toaster };
@@ -0,0 +1,51 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
5
+ import { cn } from "@creezio/shell-ui";
6
+
7
+ const Tabs = TabsPrimitive.Root;
8
+
9
+ const TabsList = React.forwardRef<
10
+ React.ElementRef<typeof TabsPrimitive.List>,
11
+ React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>
12
+ >(({ className, ...props }, ref) => (
13
+ <TabsPrimitive.List
14
+ ref={ref}
15
+ className={cn(
16
+ "inline-flex h-10 items-center justify-start gap-1 rounded-lg bg-slate-100 p-1 text-slate-600",
17
+ className,
18
+ )}
19
+ {...props}
20
+ />
21
+ ));
22
+ TabsList.displayName = TabsPrimitive.List.displayName;
23
+
24
+ const TabsTrigger = React.forwardRef<
25
+ React.ElementRef<typeof TabsPrimitive.Trigger>,
26
+ React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>
27
+ >(({ className, ...props }, ref) => (
28
+ <TabsPrimitive.Trigger
29
+ ref={ref}
30
+ className={cn(
31
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-white data-[state=active]:text-slate-900 data-[state=active]:shadow-sm",
32
+ className,
33
+ )}
34
+ {...props}
35
+ />
36
+ ));
37
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
38
+
39
+ const TabsContent = React.forwardRef<
40
+ React.ElementRef<typeof TabsPrimitive.Content>,
41
+ React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>
42
+ >(({ className, ...props }, ref) => (
43
+ <TabsPrimitive.Content
44
+ ref={ref}
45
+ className={cn("mt-4 focus-visible:outline-none", className)}
46
+ {...props}
47
+ />
48
+ ));
49
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
50
+
51
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,22 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { cn } from "@creezio/shell-ui";
5
+
6
+ export type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;
7
+
8
+ const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
9
+ ({ className, ...props }, ref) => (
10
+ <textarea
11
+ ref={ref}
12
+ className={cn(
13
+ "flex min-h-[80px] w-full rounded-md border border-[#e6e0d4] bg-white px-3 py-2 text-sm text-[#14182f] placeholder:text-[#9aa1b2] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:cursor-not-allowed disabled:opacity-50",
14
+ className,
15
+ )}
16
+ {...props}
17
+ />
18
+ ),
19
+ );
20
+ Textarea.displayName = "Textarea";
21
+
22
+ export { Textarea };
@@ -0,0 +1,31 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
5
+ import { cn } from "@creezio/shell-ui";
6
+
7
+ const TooltipProvider = TooltipPrimitive.Provider;
8
+
9
+ const Tooltip = TooltipPrimitive.Root;
10
+
11
+ const TooltipTrigger = TooltipPrimitive.Trigger;
12
+
13
+ const TooltipContent = React.forwardRef<
14
+ React.ElementRef<typeof TooltipPrimitive.Content>,
15
+ React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
16
+ >(({ className, sideOffset = 4, ...props }, ref) => (
17
+ <TooltipPrimitive.Portal>
18
+ <TooltipPrimitive.Content
19
+ ref={ref}
20
+ sideOffset={sideOffset}
21
+ className={cn(
22
+ "z-50 overflow-hidden rounded-md bg-[#14182f] px-3 py-1.5 text-xs text-white 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",
23
+ className,
24
+ )}
25
+ {...props}
26
+ />
27
+ </TooltipPrimitive.Portal>
28
+ ));
29
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
30
+
31
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };