@multicomma/arkcn 0.1.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 (237) hide show
  1. package/README.md +78 -0
  2. package/bin/arkcn.mjs +78 -0
  3. package/cli/commands.mjs +251 -0
  4. package/cli/project.mjs +168 -0
  5. package/cli/registry.mjs +50 -0
  6. package/cli/ui.mjs +46 -0
  7. package/mcp/server.mjs +149 -0
  8. package/package.json +201 -0
  9. package/registry/base.css +680 -0
  10. package/registry/index.json +1833 -0
  11. package/registry/items/accordion.json +18 -0
  12. package/registry/items/activity-feed.json +18 -0
  13. package/registry/items/alert-dialog.json +18 -0
  14. package/registry/items/alert.json +17 -0
  15. package/registry/items/angle-slider.json +17 -0
  16. package/registry/items/app-shell.json +28 -0
  17. package/registry/items/aspect-ratio.json +13 -0
  18. package/registry/items/attachment.json +19 -0
  19. package/registry/items/avatar.json +17 -0
  20. package/registry/items/badge.json +18 -0
  21. package/registry/items/breadcrumb.json +18 -0
  22. package/registry/items/bubble.json +18 -0
  23. package/registry/items/button-group.json +19 -0
  24. package/registry/items/button.json +18 -0
  25. package/registry/items/calendar.json +19 -0
  26. package/registry/items/canvas.json +24 -0
  27. package/registry/items/card.json +15 -0
  28. package/registry/items/carousel.json +19 -0
  29. package/registry/items/cascader.json +23 -0
  30. package/registry/items/chart.json +17 -0
  31. package/registry/items/chat.json +23 -0
  32. package/registry/items/checkbox.json +18 -0
  33. package/registry/items/clipboard.json +19 -0
  34. package/registry/items/collapsible.json +15 -0
  35. package/registry/items/color-picker.json +19 -0
  36. package/registry/items/combobox.json +20 -0
  37. package/registry/items/command.json +21 -0
  38. package/registry/items/comment-thread.json +25 -0
  39. package/registry/items/context-menu.json +18 -0
  40. package/registry/items/controllable.json +14 -0
  41. package/registry/items/data-grid.json +24 -0
  42. package/registry/items/data-table-adapter.json +14 -0
  43. package/registry/items/data-table.json +32 -0
  44. package/registry/items/date-input.json +17 -0
  45. package/registry/items/dialog.json +19 -0
  46. package/registry/items/direction.json +13 -0
  47. package/registry/items/drag-preview.json +16 -0
  48. package/registry/items/drawer.json +18 -0
  49. package/registry/items/dropdown-menu.json +18 -0
  50. package/registry/items/editable.json +17 -0
  51. package/registry/items/empty.json +17 -0
  52. package/registry/items/field.json +19 -0
  53. package/registry/items/file-upload.json +19 -0
  54. package/registry/items/floating-panel.json +19 -0
  55. package/registry/items/floating-toolbar.json +16 -0
  56. package/registry/items/form.json +14 -0
  57. package/registry/items/format.json +15 -0
  58. package/registry/items/gantt.json +22 -0
  59. package/registry/items/history.json +14 -0
  60. package/registry/items/hotkeys.json +18 -0
  61. package/registry/items/hover-card.json +17 -0
  62. package/registry/items/image-cropper.json +17 -0
  63. package/registry/items/input-group.json +20 -0
  64. package/registry/items/input-otp.json +18 -0
  65. package/registry/items/input.json +15 -0
  66. package/registry/items/item.json +19 -0
  67. package/registry/items/json-tree-view.json +17 -0
  68. package/registry/items/kanban.json +26 -0
  69. package/registry/items/kbd.json +15 -0
  70. package/registry/items/label.json +15 -0
  71. package/registry/items/live-region.json +16 -0
  72. package/registry/items/marker.json +18 -0
  73. package/registry/items/marquee.json +17 -0
  74. package/registry/items/menubar.json +19 -0
  75. package/registry/items/message.json +15 -0
  76. package/registry/items/navigation-menu.json +19 -0
  77. package/registry/items/node-graph.json +22 -0
  78. package/registry/items/number-input.json +18 -0
  79. package/registry/items/pagination.json +18 -0
  80. package/registry/items/password-input.json +18 -0
  81. package/registry/items/popconfirm.json +20 -0
  82. package/registry/items/popover.json +18 -0
  83. package/registry/items/progress.json +17 -0
  84. package/registry/items/qr-code.json +17 -0
  85. package/registry/items/query-builder.json +23 -0
  86. package/registry/items/radio-group.json +17 -0
  87. package/registry/items/rating-group.json +18 -0
  88. package/registry/items/resizable.json +17 -0
  89. package/registry/items/rich-text-editor.json +37 -0
  90. package/registry/items/row-layout.json +15 -0
  91. package/registry/items/scheduler.json +23 -0
  92. package/registry/items/scroll-area.json +17 -0
  93. package/registry/items/segment-group.json +17 -0
  94. package/registry/items/select.json +19 -0
  95. package/registry/items/separator.json +15 -0
  96. package/registry/items/sheet.json +19 -0
  97. package/registry/items/sidebar.json +27 -0
  98. package/registry/items/signature-pad.json +19 -0
  99. package/registry/items/skeleton.json +15 -0
  100. package/registry/items/slider.json +17 -0
  101. package/registry/items/sonner.json +17 -0
  102. package/registry/items/spinner.json +17 -0
  103. package/registry/items/steps.json +19 -0
  104. package/registry/items/swap.json +17 -0
  105. package/registry/items/switch.json +17 -0
  106. package/registry/items/table.json +16 -0
  107. package/registry/items/tabs.json +18 -0
  108. package/registry/items/tags-input.json +18 -0
  109. package/registry/items/textarea.json +15 -0
  110. package/registry/items/time.json +14 -0
  111. package/registry/items/timer.json +18 -0
  112. package/registry/items/toc.json +17 -0
  113. package/registry/items/toggle-group.json +19 -0
  114. package/registry/items/toggle.json +18 -0
  115. package/registry/items/tooltip.json +17 -0
  116. package/registry/items/tour.json +19 -0
  117. package/registry/items/transfer-list.json +24 -0
  118. package/registry/items/tree-select.json +24 -0
  119. package/registry/items/tree-view.json +18 -0
  120. package/registry/items/use-mobile.json +13 -0
  121. package/registry/items/utils.json +17 -0
  122. package/registry/items/virtual-list.json +16 -0
  123. package/src/components/ui/accordion.tsx +111 -0
  124. package/src/components/ui/activity-feed.tsx +228 -0
  125. package/src/components/ui/alert-dialog.tsx +204 -0
  126. package/src/components/ui/alert.tsx +55 -0
  127. package/src/components/ui/angle-slider.tsx +117 -0
  128. package/src/components/ui/app-shell.tsx +985 -0
  129. package/src/components/ui/aspect-ratio.tsx +35 -0
  130. package/src/components/ui/attachment.tsx +193 -0
  131. package/src/components/ui/avatar.tsx +94 -0
  132. package/src/components/ui/badge.tsx +45 -0
  133. package/src/components/ui/breadcrumb.tsx +93 -0
  134. package/src/components/ui/bubble.tsx +119 -0
  135. package/src/components/ui/button-group.tsx +79 -0
  136. package/src/components/ui/button.tsx +65 -0
  137. package/src/components/ui/calendar.tsx +172 -0
  138. package/src/components/ui/canvas.tsx +723 -0
  139. package/src/components/ui/card.tsx +69 -0
  140. package/src/components/ui/carousel.tsx +228 -0
  141. package/src/components/ui/cascader.tsx +754 -0
  142. package/src/components/ui/chart.tsx +303 -0
  143. package/src/components/ui/chat.tsx +544 -0
  144. package/src/components/ui/checkbox.tsx +94 -0
  145. package/src/components/ui/clipboard.tsx +94 -0
  146. package/src/components/ui/collapsible.tsx +32 -0
  147. package/src/components/ui/color-picker.tsx +441 -0
  148. package/src/components/ui/combobox.tsx +400 -0
  149. package/src/components/ui/command.tsx +292 -0
  150. package/src/components/ui/comment-thread.tsx +923 -0
  151. package/src/components/ui/context-menu.tsx +331 -0
  152. package/src/components/ui/data-grid.tsx +1227 -0
  153. package/src/components/ui/data-table.tsx +993 -0
  154. package/src/components/ui/date-input.tsx +103 -0
  155. package/src/components/ui/dialog.tsx +159 -0
  156. package/src/components/ui/direction.tsx +32 -0
  157. package/src/components/ui/drawer.tsx +200 -0
  158. package/src/components/ui/dropdown-menu.tsx +329 -0
  159. package/src/components/ui/editable.tsx +90 -0
  160. package/src/components/ui/empty.tsx +86 -0
  161. package/src/components/ui/field.tsx +218 -0
  162. package/src/components/ui/file-upload.tsx +204 -0
  163. package/src/components/ui/floating-panel.tsx +199 -0
  164. package/src/components/ui/floating-toolbar.tsx +79 -0
  165. package/src/components/ui/format.tsx +22 -0
  166. package/src/components/ui/gantt.tsx +950 -0
  167. package/src/components/ui/hotkeys.tsx +340 -0
  168. package/src/components/ui/hover-card.tsx +83 -0
  169. package/src/components/ui/image-cropper.tsx +100 -0
  170. package/src/components/ui/input-group.tsx +133 -0
  171. package/src/components/ui/input-otp.tsx +82 -0
  172. package/src/components/ui/input.tsx +18 -0
  173. package/src/components/ui/item.tsx +174 -0
  174. package/src/components/ui/json-tree-view.tsx +37 -0
  175. package/src/components/ui/kanban.tsx +884 -0
  176. package/src/components/ui/kbd.tsx +20 -0
  177. package/src/components/ui/label.tsx +30 -0
  178. package/src/components/ui/live-region.tsx +54 -0
  179. package/src/components/ui/marker.tsx +66 -0
  180. package/src/components/ui/marquee.tsx +61 -0
  181. package/src/components/ui/menubar.tsx +456 -0
  182. package/src/components/ui/message.tsx +74 -0
  183. package/src/components/ui/navigation-menu.tsx +202 -0
  184. package/src/components/ui/node-graph.tsx +1723 -0
  185. package/src/components/ui/number-input.tsx +148 -0
  186. package/src/components/ui/pagination.tsx +88 -0
  187. package/src/components/ui/password-input.tsx +104 -0
  188. package/src/components/ui/popconfirm.tsx +149 -0
  189. package/src/components/ui/popover.tsx +126 -0
  190. package/src/components/ui/progress.tsx +114 -0
  191. package/src/components/ui/qr-code.tsx +51 -0
  192. package/src/components/ui/query-builder.tsx +938 -0
  193. package/src/components/ui/radio-group.tsx +108 -0
  194. package/src/components/ui/rating-group.tsx +91 -0
  195. package/src/components/ui/resizable.tsx +41 -0
  196. package/src/components/ui/rich-text-editor.tsx +845 -0
  197. package/src/components/ui/scheduler.tsx +1164 -0
  198. package/src/components/ui/scroll-area.tsx +82 -0
  199. package/src/components/ui/segment-group.tsx +95 -0
  200. package/src/components/ui/select.tsx +354 -0
  201. package/src/components/ui/separator.tsx +32 -0
  202. package/src/components/ui/sheet.tsx +130 -0
  203. package/src/components/ui/sidebar.tsx +665 -0
  204. package/src/components/ui/signature-pad.tsx +112 -0
  205. package/src/components/ui/skeleton.tsx +7 -0
  206. package/src/components/ui/slider.tsx +183 -0
  207. package/src/components/ui/sonner.tsx +37 -0
  208. package/src/components/ui/spinner.tsx +16 -0
  209. package/src/components/ui/steps.tsx +152 -0
  210. package/src/components/ui/swap.tsx +33 -0
  211. package/src/components/ui/switch.tsx +83 -0
  212. package/src/components/ui/table.tsx +72 -0
  213. package/src/components/ui/tabs.tsx +100 -0
  214. package/src/components/ui/tags-input.tsx +153 -0
  215. package/src/components/ui/textarea.tsx +17 -0
  216. package/src/components/ui/timer.tsx +67 -0
  217. package/src/components/ui/toc.tsx +64 -0
  218. package/src/components/ui/toggle-group.tsx +89 -0
  219. package/src/components/ui/toggle.tsx +46 -0
  220. package/src/components/ui/tooltip.tsx +113 -0
  221. package/src/components/ui/tour.tsx +168 -0
  222. package/src/components/ui/transfer-list.tsx +700 -0
  223. package/src/components/ui/tree-select.tsx +638 -0
  224. package/src/components/ui/tree-view.tsx +217 -0
  225. package/src/components/ui/virtual-list.tsx +343 -0
  226. package/src/hooks/use-mobile.ts +19 -0
  227. package/src/lib/controllable.ts +31 -0
  228. package/src/lib/data-table-adapter.ts +67 -0
  229. package/src/lib/drag-preview.ts +39 -0
  230. package/src/lib/form.ts +39 -0
  231. package/src/lib/history.ts +55 -0
  232. package/src/lib/row-layout.ts +81 -0
  233. package/src/lib/table.ts +483 -0
  234. package/src/lib/time.ts +37 -0
  235. package/src/lib/utils.ts +6 -0
  236. package/src/styles/arkcn.css +764 -0
  237. package/src/styles/index.css +3 -0
@@ -0,0 +1,108 @@
1
+ import * as React from "react"
2
+ import { cn } from "@/lib/utils"
3
+ import { RadioGroup as RadioGroupPrimitive } from "@ark-ui/react"
4
+
5
+ function RadioGroup({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {
6
+ return <RadioGroupPrimitive.Root data-slot="radio-group" className={cn("grid w-full gap-2", className)} {...props} />
7
+ }
8
+
9
+ function RadioGroupContext({ ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Context>) {
10
+ return <RadioGroupPrimitive.Context {...props} />
11
+ }
12
+
13
+ function RadioGroupLabel({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Label>) {
14
+ return (
15
+ <RadioGroupPrimitive.Label
16
+ data-slot="radio-group-label"
17
+ className={cn("text-sm font-medium", className)}
18
+ {...props}
19
+ />
20
+ )
21
+ }
22
+
23
+ function RadioGroupIndicator({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Indicator>) {
24
+ return (
25
+ <RadioGroupPrimitive.Indicator
26
+ data-slot="radio-group-indicator"
27
+ className={cn("rounded-md bg-background shadow-sm", className)}
28
+ {...props}
29
+ />
30
+ )
31
+ }
32
+
33
+ /** `id` is omitted: set part ids through the root `ids` prop so Ark's internal lookups keep working. */
34
+ function RadioGroupItem({
35
+ className,
36
+ children,
37
+ ...props
38
+ }: Omit<React.ComponentProps<typeof RadioGroupPrimitive.Item>, "id">) {
39
+ return (
40
+ <RadioGroupPrimitive.Item
41
+ data-slot="radio-group-item"
42
+ className="group/radio-group-item peer inline-flex items-center gap-2"
43
+ {...props}
44
+ >
45
+ <RadioGroupItemControl className={className} />
46
+ {children && <RadioGroupItemText>{children}</RadioGroupItemText>}
47
+ <RadioGroupItemHiddenInput />
48
+ </RadioGroupPrimitive.Item>
49
+ )
50
+ }
51
+
52
+ function RadioGroupItemContext({ ...props }: React.ComponentProps<typeof RadioGroupPrimitive.ItemContext>) {
53
+ return <RadioGroupPrimitive.ItemContext {...props} />
54
+ }
55
+
56
+ /** `id` is omitted: set part ids through the root `ids` prop so Ark's internal lookups keep working. */
57
+ function RadioGroupItemControl({
58
+ className,
59
+ children,
60
+ ...props
61
+ }: Omit<React.ComponentProps<typeof RadioGroupPrimitive.ItemControl>, "id">) {
62
+ return (
63
+ <RadioGroupPrimitive.ItemControl
64
+ data-slot="radio-group-item-control"
65
+ className={cn(
66
+ "group/radio-group-item-control relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-focus-visible/field-label:ring-0 group-has-focus-visible/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 data-focus-visible:border-ring data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-invalid:border-destructive data-invalid:ring-3 data-invalid:ring-destructive/20 dark:bg-input/30 dark:data-invalid:border-destructive/50 dark:data-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-focus-visible/field-label:data-checked:border-primary data-invalid:data-checked:border-primary dark:data-checked:bg-primary data-disabled:cursor-not-allowed data-disabled:opacity-50",
67
+ className
68
+ )}
69
+ {...props}
70
+ >
71
+ {children ?? (
72
+ <span
73
+ data-slot="radio-group-indicator"
74
+ className="absolute top-1/2 left-1/2 hidden size-2 -translate-1/2 rounded-full bg-primary-foreground group-data-checked/radio-group-item-control:block"
75
+ />
76
+ )}
77
+ </RadioGroupPrimitive.ItemControl>
78
+ )
79
+ }
80
+
81
+ function RadioGroupItemText({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.ItemText>) {
82
+ return (
83
+ <RadioGroupPrimitive.ItemText
84
+ data-slot="radio-group-item-text"
85
+ className={cn("text-sm leading-none select-none data-disabled:opacity-50", className)}
86
+ {...props}
87
+ />
88
+ )
89
+ }
90
+
91
+ /** `id` is omitted: set part ids through the root `ids` prop so Ark's internal lookups keep working. */
92
+ function RadioGroupItemHiddenInput({
93
+ ...props
94
+ }: Omit<React.ComponentProps<typeof RadioGroupPrimitive.ItemHiddenInput>, "id">) {
95
+ return <RadioGroupPrimitive.ItemHiddenInput {...props} />
96
+ }
97
+
98
+ export {
99
+ RadioGroup,
100
+ RadioGroupContext,
101
+ RadioGroupIndicator,
102
+ RadioGroupItem,
103
+ RadioGroupItemContext,
104
+ RadioGroupItemControl,
105
+ RadioGroupItemHiddenInput,
106
+ RadioGroupItemText,
107
+ RadioGroupLabel,
108
+ }
@@ -0,0 +1,91 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { cn } from "@/lib/utils"
5
+ import { RatingGroup as RatingGroupPrimitive } from "@ark-ui/react"
6
+ import { StarIcon, StarHalfIcon } from "lucide-react"
7
+
8
+ function RatingGroup({ className, children, ...props }: React.ComponentProps<typeof RatingGroupPrimitive.Root>) {
9
+ return (
10
+ <RatingGroupPrimitive.Root data-slot="rating-group" className={cn("flex flex-col gap-1.5", className)} {...props}>
11
+ {children ?? (
12
+ <RatingGroupControl>
13
+ <RatingGroupContext>
14
+ {({ items }) => items.map((index) => <RatingGroupItem key={index} index={index} />)}
15
+ </RatingGroupContext>
16
+ <RatingGroupHiddenInput />
17
+ </RatingGroupControl>
18
+ )}
19
+ </RatingGroupPrimitive.Root>
20
+ )
21
+ }
22
+
23
+ function RatingGroupContext({ ...props }: React.ComponentProps<typeof RatingGroupPrimitive.Context>) {
24
+ return <RatingGroupPrimitive.Context {...props} />
25
+ }
26
+
27
+ function RatingGroupLabel({ className, ...props }: React.ComponentProps<typeof RatingGroupPrimitive.Label>) {
28
+ return (
29
+ <RatingGroupPrimitive.Label
30
+ data-slot="rating-group-label"
31
+ className={cn("text-sm font-medium select-none", className)}
32
+ {...props}
33
+ />
34
+ )
35
+ }
36
+
37
+ function RatingGroupControl({ className, ...props }: React.ComponentProps<typeof RatingGroupPrimitive.Control>) {
38
+ return (
39
+ <RatingGroupPrimitive.Control
40
+ data-slot="rating-group-control"
41
+ className={cn(
42
+ "inline-flex items-center gap-0.5 rounded-md outline-none focus-visible:ring-3 focus-visible:ring-ring/50",
43
+ className
44
+ )}
45
+ {...props}
46
+ />
47
+ )
48
+ }
49
+
50
+ function RatingGroupItem({ className, children, ...props }: React.ComponentProps<typeof RatingGroupPrimitive.Item>) {
51
+ return (
52
+ <RatingGroupPrimitive.Item
53
+ data-slot="rating-group-item"
54
+ className={cn(
55
+ "group/rating-group-item inline-flex cursor-pointer text-muted-foreground/40 transition-colors data-highlighted:text-primary data-readonly:cursor-default data-disabled:cursor-not-allowed [&_svg]:size-5",
56
+ className
57
+ )}
58
+ {...props}
59
+ >
60
+ {children ?? (
61
+ <RatingGroupPrimitive.ItemContext>
62
+ {({ half, highlighted }) =>
63
+ half ? (
64
+ <StarHalfIcon className="fill-current" />
65
+ ) : (
66
+ <StarIcon className={highlighted ? "fill-current" : undefined} />
67
+ )
68
+ }
69
+ </RatingGroupPrimitive.ItemContext>
70
+ )}
71
+ </RatingGroupPrimitive.Item>
72
+ )
73
+ }
74
+
75
+ function RatingGroupItemContext({ ...props }: React.ComponentProps<typeof RatingGroupPrimitive.ItemContext>) {
76
+ return <RatingGroupPrimitive.ItemContext {...props} />
77
+ }
78
+
79
+ function RatingGroupHiddenInput({ ...props }: React.ComponentProps<typeof RatingGroupPrimitive.HiddenInput>) {
80
+ return <RatingGroupPrimitive.HiddenInput {...props} />
81
+ }
82
+
83
+ export {
84
+ RatingGroup,
85
+ RatingGroupContext,
86
+ RatingGroupControl,
87
+ RatingGroupHiddenInput,
88
+ RatingGroupItem,
89
+ RatingGroupItemContext,
90
+ RatingGroupLabel,
91
+ }
@@ -0,0 +1,41 @@
1
+ "use client"
2
+
3
+ import { cn } from "@/lib/utils"
4
+ import * as ResizablePrimitive from "react-resizable-panels"
5
+
6
+ function ResizablePanelGroup({ className, ...props }: ResizablePrimitive.GroupProps) {
7
+ return (
8
+ <ResizablePrimitive.Group
9
+ data-slot="resizable-panel-group"
10
+ className={cn("flex size-full aria-[orientation=vertical]:flex-col", className)}
11
+ {...props}
12
+ />
13
+ )
14
+ }
15
+
16
+ function ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {
17
+ return <ResizablePrimitive.Panel data-slot="resizable-panel" {...props} />
18
+ }
19
+
20
+ function ResizableHandle({
21
+ withHandle,
22
+ className,
23
+ ...props
24
+ }: ResizablePrimitive.SeparatorProps & {
25
+ withHandle?: boolean
26
+ }) {
27
+ return (
28
+ <ResizablePrimitive.Separator
29
+ data-slot="resizable-handle"
30
+ className={cn(
31
+ "relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90",
32
+ className
33
+ )}
34
+ {...props}
35
+ >
36
+ {withHandle && <div className="z-10 flex h-6 w-1 shrink-0 rounded-lg bg-border" />}
37
+ </ResizablePrimitive.Separator>
38
+ )
39
+ }
40
+
41
+ export { ResizableHandle, ResizablePanel, ResizablePanelGroup }