@multicomma/arkcn 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/package.json +1 -1
  2. package/registry/index.json +1 -1
  3. package/registry/items/accordion.json +302 -0
  4. package/registry/items/activity-feed.json +408 -0
  5. package/registry/items/alert-dialog.json +676 -0
  6. package/registry/items/alert.json +113 -0
  7. package/registry/items/angle-slider.json +378 -0
  8. package/registry/items/app-shell.json +2654 -1
  9. package/registry/items/aspect-ratio.json +36 -0
  10. package/registry/items/attachment.json +299 -1
  11. package/registry/items/avatar.json +213 -0
  12. package/registry/items/badge.json +44 -0
  13. package/registry/items/breadcrumb.json +191 -0
  14. package/registry/items/bubble.json +146 -0
  15. package/registry/items/button-group.json +110 -0
  16. package/registry/items/button.json +52 -0
  17. package/registry/items/calendar.json +499 -1
  18. package/registry/items/canvas.json +446 -1
  19. package/registry/items/card.json +192 -0
  20. package/registry/items/carousel.json +208 -1
  21. package/registry/items/cascader.json +797 -1
  22. package/registry/items/chart.json +1764 -1
  23. package/registry/items/chat.json +993 -0
  24. package/registry/items/checkbox.json +503 -0
  25. package/registry/items/clipboard.json +308 -0
  26. package/registry/items/collapsible.json +226 -0
  27. package/registry/items/color-picker.json +1261 -0
  28. package/registry/items/combobox.json +1123 -1
  29. package/registry/items/command.json +837 -1
  30. package/registry/items/comment-thread.json +952 -1
  31. package/registry/items/context-menu.json +1344 -1
  32. package/registry/items/data-grid.json +449 -1
  33. package/registry/items/data-table.json +1310 -1
  34. package/registry/items/date-input.json +476 -0
  35. package/registry/items/dialog.json +592 -0
  36. package/registry/items/direction.json +29 -1
  37. package/registry/items/drawer.json +797 -0
  38. package/registry/items/dropdown-menu.json +1311 -1
  39. package/registry/items/editable.json +503 -0
  40. package/registry/items/empty.json +166 -0
  41. package/registry/items/field.json +286 -1
  42. package/registry/items/file-upload.json +638 -0
  43. package/registry/items/floating-panel.json +720 -0
  44. package/registry/items/floating-toolbar.json +43 -0
  45. package/registry/items/format.json +109 -0
  46. package/registry/items/gantt.json +773 -1
  47. package/registry/items/hooks/use-mobile.json +1 -0
  48. package/registry/items/hotkeys.json +99 -1
  49. package/registry/items/hover-card.json +357 -0
  50. package/registry/items/image-cropper.json +431 -0
  51. package/registry/items/input-group.json +189 -0
  52. package/registry/items/input-otp.json +181 -0
  53. package/registry/items/input.json +28 -0
  54. package/registry/items/item.json +308 -0
  55. package/registry/items/json-tree-view.json +336 -0
  56. package/registry/items/kanban.json +624 -1
  57. package/registry/items/kbd.json +54 -0
  58. package/registry/items/label.json +28 -0
  59. package/registry/items/lib/controllable.json +1 -0
  60. package/registry/items/lib/data-table-adapter.json +1 -0
  61. package/registry/items/lib/drag-preview.json +1 -0
  62. package/registry/items/lib/form.json +1 -0
  63. package/registry/items/lib/history.json +1 -0
  64. package/registry/items/lib/row-layout.json +1 -0
  65. package/registry/items/lib/table.json +1 -0
  66. package/registry/items/lib/time.json +1 -0
  67. package/registry/items/lib/utils.json +1 -0
  68. package/registry/items/live-region.json +43 -0
  69. package/registry/items/marker.json +96 -0
  70. package/registry/items/marquee.json +300 -0
  71. package/registry/items/menubar.json +1282 -1
  72. package/registry/items/message.json +166 -0
  73. package/registry/items/navigation-menu.json +561 -1
  74. package/registry/items/node-graph.json +1037 -1
  75. package/registry/items/number-input.json +519 -0
  76. package/registry/items/pagination.json +244 -1
  77. package/registry/items/password-input.json +311 -0
  78. package/registry/items/popconfirm.json +566 -0
  79. package/registry/items/popover.json +615 -0
  80. package/registry/items/progress.json +516 -0
  81. package/registry/items/qr-code.json +249 -0
  82. package/registry/items/query-builder.json +1368 -1
  83. package/registry/items/radio-group.json +362 -0
  84. package/registry/items/rating-group.json +304 -0
  85. package/registry/items/resizable.json +242 -1
  86. package/registry/items/rich-text-editor.json +934 -1
  87. package/registry/items/scheduler.json +1013 -1
  88. package/registry/items/scroll-area.json +227 -0
  89. package/registry/items/segment-group.json +363 -0
  90. package/registry/items/select.json +956 -0
  91. package/registry/items/separator.json +45 -1
  92. package/registry/items/sheet.json +592 -0
  93. package/registry/items/sidebar.json +785 -1
  94. package/registry/items/signature-pad.json +330 -0
  95. package/registry/items/skeleton.json +28 -0
  96. package/registry/items/slider.json +799 -0
  97. package/registry/items/sonner.json +135 -0
  98. package/registry/items/spinner.json +28 -0
  99. package/registry/items/steps.json +483 -0
  100. package/registry/items/swap.json +107 -0
  101. package/registry/items/switch.json +362 -0
  102. package/registry/items/table.json +210 -0
  103. package/registry/items/tabs.json +326 -0
  104. package/registry/items/tags-input.json +640 -0
  105. package/registry/items/textarea.json +28 -0
  106. package/registry/items/timer.json +289 -0
  107. package/registry/items/toc.json +372 -0
  108. package/registry/items/toggle-group.json +214 -1
  109. package/registry/items/toggle.json +124 -0
  110. package/registry/items/tooltip.json +417 -0
  111. package/registry/items/tour.json +498 -0
  112. package/registry/items/transfer-list.json +609 -1
  113. package/registry/items/tree-select.json +742 -1
  114. package/registry/items/tree-view.json +794 -0
  115. package/registry/items/virtual-list.json +214 -1
  116. package/src/components/ui/app-shell.tsx +11 -0
  117. package/src/components/ui/attachment.tsx +1 -0
  118. package/src/components/ui/calendar.tsx +1 -0
  119. package/src/components/ui/canvas.tsx +8 -0
  120. package/src/components/ui/carousel.tsx +3 -0
  121. package/src/components/ui/cascader.tsx +1 -0
  122. package/src/components/ui/chart.tsx +10 -0
  123. package/src/components/ui/combobox.tsx +3 -0
  124. package/src/components/ui/command.tsx +1 -0
  125. package/src/components/ui/comment-thread.tsx +11 -0
  126. package/src/components/ui/context-menu.tsx +6 -0
  127. package/src/components/ui/data-grid.tsx +8 -0
  128. package/src/components/ui/data-table.tsx +6 -0
  129. package/src/components/ui/direction.tsx +2 -0
  130. package/src/components/ui/dropdown-menu.tsx +6 -0
  131. package/src/components/ui/field.tsx +1 -0
  132. package/src/components/ui/gantt.tsx +15 -0
  133. package/src/components/ui/hotkeys.tsx +3 -0
  134. package/src/components/ui/kanban.tsx +3 -0
  135. package/src/components/ui/menubar.tsx +6 -0
  136. package/src/components/ui/navigation-menu.tsx +1 -0
  137. package/src/components/ui/node-graph.tsx +23 -0
  138. package/src/components/ui/pagination.tsx +1 -0
  139. package/src/components/ui/query-builder.tsx +7 -0
  140. package/src/components/ui/resizable.tsx +1 -0
  141. package/src/components/ui/rich-text-editor.tsx +54 -0
  142. package/src/components/ui/scheduler.tsx +26 -0
  143. package/src/components/ui/separator.tsx +1 -0
  144. package/src/components/ui/sidebar.tsx +5 -0
  145. package/src/components/ui/toggle-group.tsx +3 -0
  146. package/src/components/ui/transfer-list.tsx +11 -0
  147. package/src/components/ui/tree-select.tsx +5 -0
  148. package/src/components/ui/virtual-list.tsx +7 -0
@@ -57,14 +57,20 @@ type CreateState = { start: Date; end: Date } | null
57
57
  type SchedulerContextValue = {
58
58
  date: Date
59
59
  setDate: (date: Date) => void
60
+ /** Controlled view: `day`, `week`, or `month`. */
60
61
  view: SchedulerView
61
62
  setView: (view: SchedulerView) => void
62
63
  range: { start: Date; end: Date }
63
64
  days: Date[]
65
+ /** First day of the week, 0 for Sunday. */
64
66
  weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6
67
+ /** Pixels per hour in the time grid. */
65
68
  hourHeight: number
69
+ /** Snap and keyboard step in minutes. */
66
70
  slotMinutes: number
71
+ /** First hour shown in the time grid. */
67
72
  minHour: number
73
+ /** Last hour shown in the time grid. */
68
74
  maxHour: number
69
75
  editable: boolean
70
76
  interaction: Interaction | null
@@ -98,7 +104,9 @@ function visibleRange(date: Date, view: SchedulerView, weekStartsOn: SchedulerCo
98
104
  if (view === "day") return { start: startOfDay(date), end: startOfDay(date) }
99
105
  if (view === "week") return { start: startOfWeek(date, { weekStartsOn }), end: endOfWeek(date, { weekStartsOn }) }
100
106
  return {
107
+ /** Event start. */
101
108
  start: startOfWeek(startOfMonth(date), { weekStartsOn }),
109
+ /** Event end. */
102
110
  end: endOfWeek(endOfMonth(date), { weekStartsOn }),
103
111
  }
104
112
  }
@@ -127,17 +135,28 @@ function Scheduler({
127
135
  ...props
128
136
  }: Omit<React.ComponentProps<"div">, "onChange"> & {
129
137
  date?: Date
138
+ /** Initial anchor date when uncontrolled. */
130
139
  defaultDate?: Date
140
+ /** Called when the anchor date changes. */
131
141
  onDateChange?: (date: Date) => void
142
+ /** Controlled view: `day`, `week`, or `month`. */
132
143
  view?: SchedulerView
144
+ /** Initial view when uncontrolled. */
133
145
  defaultView?: SchedulerView
146
+ /** Called when the view changes. */
134
147
  onViewChange?: (view: SchedulerView) => void
148
+ /** First day of the week, 0 for Sunday. */
135
149
  weekStartsOn?: SchedulerContextValue["weekStartsOn"]
150
+ /** Pixels per hour in the time grid. */
136
151
  hourHeight?: number
152
+ /** Snap and keyboard step in minutes. */
137
153
  slotMinutes?: number
154
+ /** First hour shown in the time grid. */
138
155
  minHour?: number
156
+ /** Last hour shown in the time grid. */
139
157
  maxHour?: number
140
158
  editable?: boolean
159
+ /** Called with `{ id, start, end }` snapped to `slotMinutes` after a move, resize, or keyboard change. */
141
160
  onEventChange?: (change: SchedulerEventChange) => void
142
161
  /** Drag on empty time (or a month cell click) proposes a new event. */
143
162
  onCreate?: (range: { start: Date; end: Date; allDay?: boolean }) => void
@@ -268,7 +287,9 @@ function Scheduler({
268
287
  const column = (pointer.currentTarget as HTMLElement).getBoundingClientRect()
269
288
  const originMin = yToMinutes(pointer.clientY - column.top)
270
289
  let current: NonNullable<CreateState> = {
290
+ /** Event start. */
271
291
  start: withMinutes(day, originMin),
292
+ /** Event end. */
272
293
  end: withMinutes(day, originMin + slotMinutes),
273
294
  }
274
295
  let dragged = false
@@ -352,14 +373,18 @@ function Scheduler({
352
373
  const next =
353
374
  part === "end"
354
375
  ? {
376
+ /** Event start. */
355
377
  start: event.start,
378
+ /** Event end. */
356
379
  end: addMinutes(
357
380
  event.end,
358
381
  Math.max(deltaMinutes, slotMinutes - differenceInMinutes(event.end, event.start))
359
382
  ),
360
383
  }
361
384
  : {
385
+ /** Event start. */
362
386
  start: addDays(addMinutes(event.start, deltaMinutes), deltaDays),
387
+ /** Event end. */
363
388
  end: addDays(addMinutes(event.end, deltaMinutes), deltaDays),
364
389
  }
365
390
  onEventChangeRef.current?.({ id: event.id, ...next })
@@ -772,6 +797,7 @@ function SchedulerDayColumn<T extends EventLike>({
772
797
  ...props
773
798
  }: Omit<React.ComponentProps<"div">, "children"> & {
774
799
  date: Date
800
+ /** Events shown in this column; overlaps are laid out side by side. */
775
801
  events: T[]
776
802
  children: (event: T) => React.ReactNode
777
803
  }) {
@@ -12,6 +12,7 @@ function Separator({
12
12
  ...props
13
13
  }: React.ComponentProps<"div"> & {
14
14
  orientation?: "horizontal" | "vertical"
15
+ /** Hide the separator from assistive technology. */
15
16
  decorative?: boolean
16
17
  }) {
17
18
  return (
@@ -141,6 +141,7 @@ function Sidebar({
141
141
  }: React.ComponentProps<"div"> & {
142
142
  side?: "left" | "right"
143
143
  variant?: "sidebar" | "floating" | "inset"
144
+ /** Collapse mode: `offcanvas`, `icon`, or `none`. */
144
145
  collapsible?: "offcanvas" | "icon" | "none"
145
146
  }) {
146
147
  const { isMobile, state, openMobile, setOpenMobile } = useSidebar()
@@ -473,6 +474,7 @@ function SidebarMenuButton({
473
474
  ...props
474
475
  }: React.ComponentProps<"button"> & {
475
476
  asChild?: boolean
477
+ /** Marks the current item. */
476
478
  isActive?: boolean
477
479
  tooltip?: string | React.ComponentProps<typeof TooltipContent>
478
480
  } & VariantProps<typeof sidebarMenuButtonVariants>) {
@@ -516,6 +518,7 @@ function SidebarMenuAction({
516
518
  ...props
517
519
  }: React.ComponentProps<"button"> & {
518
520
  asChild?: boolean
521
+ /** Only reveal the action when the item is hovered or focused. */
519
522
  showOnHover?: boolean
520
523
  }) {
521
524
  const Comp = ark.button
@@ -555,6 +558,7 @@ function SidebarMenuSkeleton({
555
558
  showIcon = false,
556
559
  ...props
557
560
  }: React.ComponentProps<"div"> & {
561
+ /** Render an icon placeholder in the skeleton. */
558
562
  showIcon?: boolean
559
563
  }) {
560
564
  // Random width between 50 to 90%.
@@ -617,6 +621,7 @@ function SidebarMenuSubButton({
617
621
  }: React.ComponentProps<"a"> & {
618
622
  asChild?: boolean
619
623
  size?: "sm" | "md"
624
+ /** Marks the current item. */
620
625
  isActive?: boolean
621
626
  }) {
622
627
  const Comp = ark.a
@@ -9,12 +9,14 @@ import { toggleVariants } from "@/components/ui/toggle"
9
9
 
10
10
  const ToggleGroupVariantContext = React.createContext<
11
11
  VariantProps<typeof toggleVariants> & {
12
+ /** Gap between items; 0 joins them into one control. */
12
13
  spacing?: number
13
14
  orientation?: "horizontal" | "vertical"
14
15
  }
15
16
  >({
16
17
  size: "default",
17
18
  variant: "default",
19
+ /** Gap between items; 0 joins them into one control. */
18
20
  spacing: 2,
19
21
  orientation: "horizontal",
20
22
  })
@@ -29,6 +31,7 @@ function ToggleGroup({
29
31
  ...props
30
32
  }: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &
31
33
  VariantProps<typeof toggleVariants> & {
34
+ /** Gap between items; 0 joins them into one control. */
32
35
  spacing?: number
33
36
  }) {
34
37
  return (
@@ -27,16 +27,22 @@ type TransferListItemBase = { value: string; label: string; disabled?: boolean }
27
27
  type TransferListValueChangeDetails<T> = {
28
28
  /** Values now on the target side, in catalog order. */
29
29
  value: string[]
30
+ /** Every item, in catalog order. */
30
31
  items: T[]
31
32
  /** What just moved and where. */
32
33
  moved: T[]
34
+ /** `right` moves source to target; `left` moves target to source. */
33
35
  direction: TransferListDirection
34
36
  }
35
37
 
36
38
  type TransferListContextValue<T = TransferListItemBase> = {
39
+ /** Every item, in catalog order. */
37
40
  items: T[]
41
+ /** Unique value for an item. */
38
42
  itemToValue: (item: T) => string
43
+ /** Label for an item. */
39
44
  itemToString: (item: T) => string
45
+ /** Returns true for items that can never move. */
40
46
  itemDisabled: (item: T) => boolean
41
47
  value: string[]
42
48
  /** Items on each side, in catalog order. */
@@ -78,9 +84,13 @@ const sideOf = (direction: TransferListDirection): TransferListSide => (directio
78
84
  /* ---------------------------------- root --------------------------------- */
79
85
 
80
86
  type TransferListProps<T> = Omit<React.ComponentProps<"div">, "defaultValue" | "onChange"> & {
87
+ /** Every item, in catalog order. */
81
88
  items: T[]
89
+ /** Unique value for an item. */
82
90
  itemToValue?: (item: T) => string
91
+ /** Label for an item. */
83
92
  itemToString?: (item: T) => string
93
+ /** Returns true for items that can never move. */
84
94
  itemDisabled?: (item: T) => boolean
85
95
  /** Values on the target side. Kept in catalog order. */
86
96
  value?: string[]
@@ -205,6 +215,7 @@ function TransferList<T = TransferListItemBase>({
205
215
  )
206
216
  onValueChange?.({
207
217
  value: next,
218
+ /** Every item, in catalog order. */
208
219
  items: items.filter((i) => next.includes(itemToValue(i))),
209
220
  moved: movedItems,
210
221
  direction,
@@ -63,6 +63,7 @@ type TreeSelectContextValue<T extends TreeNode = TreeNode> = {
63
63
  multiple: boolean
64
64
  selectableBranches: boolean
65
65
  closeOnSelect: boolean
66
+ /** Controlled open branches. */
66
67
  expandedValue: string[]
67
68
  setExpandedValue: (value: string[]) => void
68
69
  open: boolean
@@ -107,8 +108,11 @@ type TreeSelectProps<T extends TreeNode> = Omit<
107
108
  selectableBranches?: boolean
108
109
  /** Close after a pick. Defaults to `!multiple`. */
109
110
  closeOnSelect?: boolean
111
+ /** Controlled open branches. */
110
112
  expandedValue?: string[]
113
+ /** Branches open initially when uncontrolled. */
111
114
  defaultExpandedValue?: string[]
115
+ /** Called when branches open or close. */
112
116
  onExpandedChange?: (details: { expandedValue: string[] }) => void
113
117
  open?: boolean
114
118
  defaultOpen?: boolean
@@ -328,6 +332,7 @@ function TreeSelectValue<T extends TreeNode>({
328
332
  ...props
329
333
  }: Omit<React.ComponentProps<"span">, "children"> & {
330
334
  placeholder?: React.ReactNode
335
+ /** Rendered between the selected labels. */
331
336
  separator?: string
332
337
  children?: (nodes: T[]) => React.ReactNode
333
338
  }) {
@@ -19,6 +19,7 @@ type VirtualItem = {
19
19
  type ScrollAlign = "auto" | "start" | "center" | "end"
20
20
 
21
21
  type VirtualListContextValue = {
22
+ /** Total number of rows. */
22
23
  count: number
23
24
  items: VirtualItem[]
24
25
  totalSize: number
@@ -28,6 +29,7 @@ type VirtualListContextValue = {
28
29
  scrollToIndex: (index: number, options?: { align?: ScrollAlign; behavior?: ScrollBehavior }) => void
29
30
  scrollToOffset: (offset: number, behavior?: ScrollBehavior) => void
30
31
  viewportRef: React.RefObject<HTMLDivElement | null>
32
+ /** Stable React key for a row index. */
31
33
  getItemKey: (index: number) => React.Key
32
34
  }
33
35
 
@@ -56,14 +58,19 @@ function findIndex(starts: Float64Array, count: number, offset: number) {
56
58
  /* ---------------------------------- root --------------------------------- */
57
59
 
58
60
  type VirtualListProps = Omit<React.ComponentProps<"div">, "children"> & {
61
+ /** Total number of rows. */
59
62
  count: number
60
63
  /** Row height before measurement (a number, or per index). */
61
64
  estimateSize?: number | ((index: number) => number)
62
65
  /** Rows rendered beyond the visible window on each side. */
63
66
  overscan?: number
67
+ /** Space between rows in px. */
64
68
  gap?: number
69
+ /** Space before the first row in px. */
65
70
  paddingStart?: number
71
+ /** Space after the last row in px. */
66
72
  paddingEnd?: number
73
+ /** Stable React key for a row index. */
67
74
  getItemKey?: (index: number) => React.Key
68
75
  /** Fires when the rendered window changes. */
69
76
  onRangeChange?: (range: { start: number; end: number } | null) => void