@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.
- package/package.json +1 -1
- package/registry/index.json +1 -1
- package/registry/items/accordion.json +302 -0
- package/registry/items/activity-feed.json +408 -0
- package/registry/items/alert-dialog.json +676 -0
- package/registry/items/alert.json +113 -0
- package/registry/items/angle-slider.json +378 -0
- package/registry/items/app-shell.json +2654 -1
- package/registry/items/aspect-ratio.json +36 -0
- package/registry/items/attachment.json +299 -1
- package/registry/items/avatar.json +213 -0
- package/registry/items/badge.json +44 -0
- package/registry/items/breadcrumb.json +191 -0
- package/registry/items/bubble.json +146 -0
- package/registry/items/button-group.json +110 -0
- package/registry/items/button.json +52 -0
- package/registry/items/calendar.json +499 -1
- package/registry/items/canvas.json +446 -1
- package/registry/items/card.json +192 -0
- package/registry/items/carousel.json +208 -1
- package/registry/items/cascader.json +797 -1
- package/registry/items/chart.json +1764 -1
- package/registry/items/chat.json +993 -0
- package/registry/items/checkbox.json +503 -0
- package/registry/items/clipboard.json +308 -0
- package/registry/items/collapsible.json +226 -0
- package/registry/items/color-picker.json +1261 -0
- package/registry/items/combobox.json +1123 -1
- package/registry/items/command.json +837 -1
- package/registry/items/comment-thread.json +952 -1
- package/registry/items/context-menu.json +1344 -1
- package/registry/items/data-grid.json +449 -1
- package/registry/items/data-table.json +1310 -1
- package/registry/items/date-input.json +476 -0
- package/registry/items/dialog.json +592 -0
- package/registry/items/direction.json +29 -1
- package/registry/items/drawer.json +797 -0
- package/registry/items/dropdown-menu.json +1311 -1
- package/registry/items/editable.json +503 -0
- package/registry/items/empty.json +166 -0
- package/registry/items/field.json +286 -1
- package/registry/items/file-upload.json +638 -0
- package/registry/items/floating-panel.json +720 -0
- package/registry/items/floating-toolbar.json +43 -0
- package/registry/items/format.json +109 -0
- package/registry/items/gantt.json +773 -1
- package/registry/items/hooks/use-mobile.json +1 -0
- package/registry/items/hotkeys.json +99 -1
- package/registry/items/hover-card.json +357 -0
- package/registry/items/image-cropper.json +431 -0
- package/registry/items/input-group.json +189 -0
- package/registry/items/input-otp.json +181 -0
- package/registry/items/input.json +28 -0
- package/registry/items/item.json +308 -0
- package/registry/items/json-tree-view.json +336 -0
- package/registry/items/kanban.json +624 -1
- package/registry/items/kbd.json +54 -0
- package/registry/items/label.json +28 -0
- package/registry/items/lib/controllable.json +1 -0
- package/registry/items/lib/data-table-adapter.json +1 -0
- package/registry/items/lib/drag-preview.json +1 -0
- package/registry/items/lib/form.json +1 -0
- package/registry/items/lib/history.json +1 -0
- package/registry/items/lib/row-layout.json +1 -0
- package/registry/items/lib/table.json +1 -0
- package/registry/items/lib/time.json +1 -0
- package/registry/items/lib/utils.json +1 -0
- package/registry/items/live-region.json +43 -0
- package/registry/items/marker.json +96 -0
- package/registry/items/marquee.json +300 -0
- package/registry/items/menubar.json +1282 -1
- package/registry/items/message.json +166 -0
- package/registry/items/navigation-menu.json +561 -1
- package/registry/items/node-graph.json +1037 -1
- package/registry/items/number-input.json +519 -0
- package/registry/items/pagination.json +244 -1
- package/registry/items/password-input.json +311 -0
- package/registry/items/popconfirm.json +566 -0
- package/registry/items/popover.json +615 -0
- package/registry/items/progress.json +516 -0
- package/registry/items/qr-code.json +249 -0
- package/registry/items/query-builder.json +1368 -1
- package/registry/items/radio-group.json +362 -0
- package/registry/items/rating-group.json +304 -0
- package/registry/items/resizable.json +242 -1
- package/registry/items/rich-text-editor.json +934 -1
- package/registry/items/scheduler.json +1013 -1
- package/registry/items/scroll-area.json +227 -0
- package/registry/items/segment-group.json +363 -0
- package/registry/items/select.json +956 -0
- package/registry/items/separator.json +45 -1
- package/registry/items/sheet.json +592 -0
- package/registry/items/sidebar.json +785 -1
- package/registry/items/signature-pad.json +330 -0
- package/registry/items/skeleton.json +28 -0
- package/registry/items/slider.json +799 -0
- package/registry/items/sonner.json +135 -0
- package/registry/items/spinner.json +28 -0
- package/registry/items/steps.json +483 -0
- package/registry/items/swap.json +107 -0
- package/registry/items/switch.json +362 -0
- package/registry/items/table.json +210 -0
- package/registry/items/tabs.json +326 -0
- package/registry/items/tags-input.json +640 -0
- package/registry/items/textarea.json +28 -0
- package/registry/items/timer.json +289 -0
- package/registry/items/toc.json +372 -0
- package/registry/items/toggle-group.json +214 -1
- package/registry/items/toggle.json +124 -0
- package/registry/items/tooltip.json +417 -0
- package/registry/items/tour.json +498 -0
- package/registry/items/transfer-list.json +609 -1
- package/registry/items/tree-select.json +742 -1
- package/registry/items/tree-view.json +794 -0
- package/registry/items/virtual-list.json +214 -1
- package/src/components/ui/app-shell.tsx +11 -0
- package/src/components/ui/attachment.tsx +1 -0
- package/src/components/ui/calendar.tsx +1 -0
- package/src/components/ui/canvas.tsx +8 -0
- package/src/components/ui/carousel.tsx +3 -0
- package/src/components/ui/cascader.tsx +1 -0
- package/src/components/ui/chart.tsx +10 -0
- package/src/components/ui/combobox.tsx +3 -0
- package/src/components/ui/command.tsx +1 -0
- package/src/components/ui/comment-thread.tsx +11 -0
- package/src/components/ui/context-menu.tsx +6 -0
- package/src/components/ui/data-grid.tsx +8 -0
- package/src/components/ui/data-table.tsx +6 -0
- package/src/components/ui/direction.tsx +2 -0
- package/src/components/ui/dropdown-menu.tsx +6 -0
- package/src/components/ui/field.tsx +1 -0
- package/src/components/ui/gantt.tsx +15 -0
- package/src/components/ui/hotkeys.tsx +3 -0
- package/src/components/ui/kanban.tsx +3 -0
- package/src/components/ui/menubar.tsx +6 -0
- package/src/components/ui/navigation-menu.tsx +1 -0
- package/src/components/ui/node-graph.tsx +23 -0
- package/src/components/ui/pagination.tsx +1 -0
- package/src/components/ui/query-builder.tsx +7 -0
- package/src/components/ui/resizable.tsx +1 -0
- package/src/components/ui/rich-text-editor.tsx +54 -0
- package/src/components/ui/scheduler.tsx +26 -0
- package/src/components/ui/separator.tsx +1 -0
- package/src/components/ui/sidebar.tsx +5 -0
- package/src/components/ui/toggle-group.tsx +3 -0
- package/src/components/ui/transfer-list.tsx +11 -0
- package/src/components/ui/tree-select.tsx +5 -0
- 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
|
}) {
|
|
@@ -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
|