torch-glare 2.5.2 → 2.5.4
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/apps/lib/components/ActionButton.tsx +39 -6
- package/apps/lib/components/Badge.tsx +5 -2
- package/apps/lib/components/BadgeField.tsx +1 -1
- package/apps/lib/components/Button.tsx +4 -4
- package/apps/lib/components/Calendar.tsx +7 -17
- package/apps/lib/components/ColorPicker.tsx +1 -1
- package/apps/lib/components/DataViews/data-views.tsx +1 -1
- package/apps/lib/components/DataViews/filters/filters.tsx +1 -1
- package/apps/lib/components/DataViews/header.tsx +5 -2
- package/apps/lib/components/DataViews/panel/section.tsx +3 -1
- package/apps/lib/components/DataViews/views/board-view.tsx +3 -1
- package/apps/lib/components/DataViews/views/inbox-view.tsx +4 -1
- package/apps/lib/components/DataViews/views/pane-views.tsx +5 -1
- package/apps/lib/components/DataViews/views/table-view.tsx +67 -8
- package/apps/lib/components/DataViews/views/tree-view.tsx +5 -3
- package/apps/lib/components/Drawer.tsx +18 -1
- package/apps/lib/components/FormBuilder/context.ts +9 -1
- package/apps/lib/components/FormBuilder/submit.tsx +11 -2
- package/apps/lib/components/FormBuilder/types.ts +5 -1
- package/apps/lib/components/FormRenderer/form-renderer.tsx +15 -3
- package/apps/lib/components/FormRenderer/stepper.tsx +35 -14
- package/apps/lib/components/FormRenderer/types.ts +1 -1
- package/apps/lib/components/Input.tsx +19 -4
- package/apps/lib/components/Popover.tsx +93 -55
- package/apps/lib/components/SearchableSelect.tsx +12 -11
- package/apps/lib/components/SearchableTree.tsx +10 -11
- package/apps/lib/components/SearchableTreeDialog.tsx +10 -11
- package/apps/lib/components/SectionBlock.tsx +14 -2
- package/apps/lib/components/Select.tsx +35 -11
- package/apps/lib/components/SimpleSelect.tsx +2 -2
- package/apps/lib/components/SlideDatePicker.tsx +17 -4
- package/apps/lib/components/Stepper.tsx +329 -180
- package/apps/lib/components/Switch.tsx +2 -2
- package/apps/lib/components/Table.tsx +55 -30
- package/apps/lib/components/Textarea.tsx +29 -4
- package/apps/lib/components/TreeDropDown.tsx +18 -6
- package/apps/lib/components/TreeFolder/TreeFolder.tsx +61 -61
- package/apps/lib/registry.json +7 -16
- package/apps/lib/tsconfig.tsbuildinfo +1 -1
- package/docs/components/action-button.md +3 -1
- package/docs/components/data-views/index.md +7 -0
- package/docs/components/form-builder.md +4 -2
- package/docs/components/form-renderer.md +1 -1
- package/docs/components/stepper.md +119 -24
- package/docs/components/table.md +33 -0
- package/docs/how-to/forms-with-form-builder.md +3 -1
- package/docs/reference/tailwind-plugins.md +42 -0
- package/docs/tutorials/getting-started.md +32 -11
- package/package.json +1 -1
- package/apps/lib/components/FormStepper.tsx +0 -272
- package/docs/components/form-stepper.md +0 -250
|
@@ -18,7 +18,21 @@ const Table = React.forwardRef<
|
|
|
18
18
|
<table
|
|
19
19
|
data-theme={theme}
|
|
20
20
|
ref={ref}
|
|
21
|
-
|
|
21
|
+
// `overflow-hidden` is the default, and it is load-bearing twice over: the table is `w-auto`,
|
|
22
|
+
// so one wider than its container would otherwise push the whole page wide and put a horizontal
|
|
23
|
+
// scrollbar on the layout; and callers that give the table a radius rely on it to clip the
|
|
24
|
+
// square header band out of the rounded corners.
|
|
25
|
+
//
|
|
26
|
+
// The cost is that it makes the table its own scroll container, and `TableHeader`'s `sticky`
|
|
27
|
+
// resolves against the *nearest* scrollport — so inside a clipping table the header pins to a
|
|
28
|
+
// box that never scrolls, i.e. does nothing. That is the right default: a header only benefits
|
|
29
|
+
// from sticking when the table sits in a scroller, and such a caller passes `overflow-visible`
|
|
30
|
+
// (tailwind-merge lets theirs win) to bind it to that scroller instead. Only do that where the
|
|
31
|
+
// scroller is `min-w-0`, or the width problem above comes back — `DataViews`' table view is the
|
|
32
|
+
// worked example.
|
|
33
|
+
//
|
|
34
|
+
// `[border-collapse:separate]` is what lets the header cells keep their borders while stuck.
|
|
35
|
+
className={cn("overflow-visible w-auto [border-collapse:separate] border-spacing-0", className)}
|
|
22
36
|
{...props}
|
|
23
37
|
>
|
|
24
38
|
{props.children}
|
|
@@ -34,9 +48,20 @@ const TableHeader = React.forwardRef<
|
|
|
34
48
|
ref={ref}
|
|
35
49
|
// The header band is one continuous bar, not a per-cell background — a background on each
|
|
36
50
|
// `<th>` would paint over the half of the previous column's resize handle that overhangs
|
|
37
|
-
// the boundary.
|
|
51
|
+
// the boundary. That is also why `sticky` sits here rather than on the `<th>`s: per-cell
|
|
52
|
+
// sticky would leave this background behind and let rows show through it.
|
|
53
|
+
//
|
|
54
|
+
// `z-20` clears the `z-10` on the resize handle and sort button inside the cells. In a table
|
|
55
|
+
// that never scrolls vertically, `sticky` keeps the element in flow and changes nothing.
|
|
56
|
+
//
|
|
57
|
+
// The band's token is translucent (`#0003`), so once rows do slide under it they read through.
|
|
58
|
+
// Making it opaque is deliberately NOT done here: it would mean naming one surface colour, and
|
|
59
|
+
// this header paints over whatever its caller sits on — forcing a surface would visibly recolour
|
|
60
|
+
// every table not on that one. A caller whose table actually scrolls supplies the opaque
|
|
61
|
+
// background itself, where the surface is known; `DataViews`' table view is the worked example.
|
|
38
62
|
className={cn(
|
|
39
63
|
"bg-background-presentation-form-header backdrop-blur-[8px]",
|
|
64
|
+
"sticky top-0 z-20",
|
|
40
65
|
"shadow-[0px_4px_8px_0px_rgba(0,0,0,0.15)]",
|
|
41
66
|
className,
|
|
42
67
|
)}
|
|
@@ -108,28 +133,28 @@ const MIN_COLUMN_WIDTH = 40;
|
|
|
108
133
|
const TableHead = React.forwardRef<
|
|
109
134
|
HTMLTableCellElement,
|
|
110
135
|
React.ThHTMLAttributes<HTMLTableCellElement> &
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
136
|
+
TableHeadVariantsProps &
|
|
137
|
+
React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
138
|
+
sortType?: "asc" | "desc" | undefined;
|
|
139
|
+
onSort?: () => void;
|
|
140
|
+
/** Column name for the sort button's accessible label. */
|
|
141
|
+
sortLabel?: string;
|
|
142
|
+
/**
|
|
143
|
+
* Called with the new width (px) while the column is being drag-resized. Pass it to take
|
|
144
|
+
* **control** of the width — the header then renders `style.width` and expects you to
|
|
145
|
+
* feed the new value back. Required whenever the table needs a definite width
|
|
146
|
+
* (`table-layout: fixed`), because only the owner of every column width can total them.
|
|
147
|
+
* Omit for uncontrolled resizing, where the header keeps the width itself.
|
|
148
|
+
*/
|
|
149
|
+
onResize?: (width: number) => void;
|
|
150
|
+
/**
|
|
151
|
+
* Classes for the inner layout box (the flex row holding the label and sort toggle).
|
|
152
|
+
* `className` and every other prop go to the `<th>` — reach for this only when you need
|
|
153
|
+
* to restyle the content box itself, e.g. its typography or colour.
|
|
154
|
+
*/
|
|
155
|
+
contentClassName?: string;
|
|
156
|
+
isDummy?: boolean;
|
|
157
|
+
}
|
|
133
158
|
>(
|
|
134
159
|
(
|
|
135
160
|
{
|
|
@@ -287,11 +312,11 @@ const TableCell = React.forwardRef<
|
|
|
287
312
|
// Never fade a dummy cell — its content is a centred checkbox or drag handle, not
|
|
288
313
|
// clippable text.
|
|
289
314
|
fade &&
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
315
|
+
!isDummy && [
|
|
316
|
+
"[mask-image:linear-gradient(to_right,black_0%,black_0%,black_75%,transparent_100%)]",
|
|
317
|
+
"rtl:[mask-image:linear-gradient(to_left,black_0%,black_0%,black_75%,transparent_100%)]",
|
|
318
|
+
"[&:has(input)]:[mask-image:none]",
|
|
319
|
+
],
|
|
295
320
|
{ "min-w-fit justify-center": isDummy },
|
|
296
321
|
childrenClassName,
|
|
297
322
|
)}
|
|
@@ -307,7 +332,7 @@ const TableCheckbox = React.forwardRef<
|
|
|
307
332
|
React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
308
333
|
id: string;
|
|
309
334
|
}
|
|
310
|
-
|
|
335
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- id destructured to exclude it from the props spread onto Checkbox
|
|
311
336
|
>(({ className, id, ...props }, ref) => {
|
|
312
337
|
return (
|
|
313
338
|
<div className={cn(["flex items-center justify-center"], className)}>
|
|
@@ -7,12 +7,19 @@ import { cva, VariantProps } from "class-variance-authority";
|
|
|
7
7
|
const textareaStyles = cva(
|
|
8
8
|
[
|
|
9
9
|
"border",
|
|
10
|
-
|
|
10
|
+
// `radius/xl` (12px). Figma's TextArea-Field has two sizes — S is `radius/lg` (8px) and M is
|
|
11
|
+
// `radius/xl` — and this component has no size variant: it renders its `Label` wrapper at
|
|
12
|
+
// `size="M"` below, so M is the size it actually is. Supporting S properly needs a real `size`
|
|
13
|
+
// prop, which is an API change rather than a radius one.
|
|
14
|
+
"rounded-radius-xl",
|
|
11
15
|
"px-[8px]",
|
|
12
16
|
"py-[12px]",
|
|
13
17
|
"outline-none",
|
|
14
18
|
"typography-body-large-regular",
|
|
15
|
-
|
|
19
|
+
// A floor for the empty field — without one, `field-sizing: content` collapses it to a single
|
|
20
|
+
// 50px line. No `!` — twMerge does not dedupe an important class against a plain one, so `!`
|
|
21
|
+
// here would make the height impossible to override from a caller's `className`.
|
|
22
|
+
"min-h-[200px]",
|
|
16
23
|
"transition-[border,background-color,color,caret-color,box-shadow]",
|
|
17
24
|
"ease-in-out",
|
|
18
25
|
"duration-150",
|
|
@@ -29,7 +36,7 @@ const textareaStyles = cva(
|
|
|
29
36
|
"disabled:text-border-presentation-action-disabled",
|
|
30
37
|
"disabled:cursor-not-allowed",
|
|
31
38
|
"disabled:placeholder-border-presentation-action-disabled",
|
|
32
|
-
"
|
|
39
|
+
"w-full min-w-[100px] max-w-[100%]",
|
|
33
40
|
],
|
|
34
41
|
{
|
|
35
42
|
variants: {
|
|
@@ -54,6 +61,14 @@ interface TextareaProps
|
|
|
54
61
|
secondaryLabel?: string; // Additional label text
|
|
55
62
|
direction?: "row" | "column";
|
|
56
63
|
theme?: "dark" | "light" | "default";
|
|
64
|
+
/**
|
|
65
|
+
* Grow the field to fit its content as the user types, instead of scrolling inside a fixed box.
|
|
66
|
+
* On by default, via CSS `field-sizing: content`. Set a `max-h-*` on the field to cap the growth —
|
|
67
|
+
* past the cap it scrolls. Note `rows` has no effect while this is on: the browser sizes the field
|
|
68
|
+
* from its content, so an empty field starts at one line. Pass `autoResize={false}` for the old
|
|
69
|
+
* fixed-height box with a drag handle.
|
|
70
|
+
*/
|
|
71
|
+
autoResize?: boolean;
|
|
57
72
|
}
|
|
58
73
|
|
|
59
74
|
// Textarea component definition
|
|
@@ -68,6 +83,7 @@ const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
|
|
|
68
83
|
direction = "row",
|
|
69
84
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
70
85
|
theme, // excluded from ...props spread
|
|
86
|
+
autoResize = true,
|
|
71
87
|
...props
|
|
72
88
|
},
|
|
73
89
|
ref,
|
|
@@ -82,7 +98,16 @@ const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
|
|
|
82
98
|
size={"M"}
|
|
83
99
|
className={cn(className)}
|
|
84
100
|
>
|
|
85
|
-
<textarea
|
|
101
|
+
<textarea
|
|
102
|
+
// Auto-grow is pure CSS. Written as an arbitrary *property* rather than as
|
|
103
|
+
// `field-sizing-content`: that utility only exists in Tailwind v4 and this project is on
|
|
104
|
+
// v3, where it compiled to no rule at all and left the computed `field-sizing` at `fixed`.
|
|
105
|
+
// The drag handle goes away with it — the height is content-driven, and a manual drag
|
|
106
|
+
// would pin it and silently stop the growing.
|
|
107
|
+
className={cn(textareaStyles({ state }), autoResize && "[field-sizing:content] resize-none")}
|
|
108
|
+
ref={ref}
|
|
109
|
+
{...props}
|
|
110
|
+
/>
|
|
86
111
|
</Label>
|
|
87
112
|
);
|
|
88
113
|
},
|
|
@@ -6,9 +6,9 @@ import { HTMLAttributes, ReactNode, useEffect, useState } from "react";
|
|
|
6
6
|
const TreeDropDownVariants = cva(
|
|
7
7
|
[
|
|
8
8
|
"cursor-pointer flex px-[6px] h-[40px] gap-2 justify-start items-center w-full",
|
|
9
|
-
"text-content-system-global-primary border-
|
|
9
|
+
"text-content-system-global-primary border-s-[2px] border-transparent outline-none",
|
|
10
10
|
"hover:bg-white-alpha-075 hover:border-black-300 hover:text-content-system-action-primary-hover hover:gap-[14px]",
|
|
11
|
-
"rounded-
|
|
11
|
+
"rounded-e-[4px] text-start whitespace-nowrap transition-all duration-150 ease-in-out",
|
|
12
12
|
],
|
|
13
13
|
{
|
|
14
14
|
variants: {
|
|
@@ -20,19 +20,31 @@ const TreeDropDownVariants = cva(
|
|
|
20
20
|
true: "hover:gap-[8px]",
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
|
+
// The active row is a fixed dark slab, so its colours are pinned locally rather than taken from
|
|
24
|
+
// the theme. Previously the fill was theme-invariant while the text was not: on a light-themed
|
|
25
|
+
// page the row rendered near-black with near-black text, and the label was unreadable. The
|
|
26
|
+
// values below are exactly what the dark sidebar already rendered, so its look is unchanged.
|
|
23
27
|
compoundVariants: [
|
|
24
28
|
{
|
|
25
29
|
active: true,
|
|
26
30
|
variant: "default",
|
|
27
31
|
className: [
|
|
28
|
-
"bg-
|
|
32
|
+
"bg-purple-1000 border-purple-600 [&_button]:bg-purple-alpha-15",
|
|
33
|
+
"hover:bg-purple-1000 hover:border-purple-600",
|
|
34
|
+
// Descendants carry their own theme-driven text colours (headings, badges), so the
|
|
35
|
+
// foreground has to be forced here or it follows the page instead of the slab.
|
|
36
|
+
"text-content-presentation-global-primary-light",
|
|
37
|
+
"[&_*]:!text-content-presentation-global-primary-light",
|
|
29
38
|
],
|
|
30
39
|
},
|
|
31
40
|
{
|
|
32
41
|
active: true,
|
|
33
42
|
variant: "secondary",
|
|
34
43
|
className: [
|
|
35
|
-
"bg-wavy-navy-1000 border-
|
|
44
|
+
"bg-wavy-navy-1000 border-blue-sparkle-600 [&_button]:bg-blue-sparkle-alpha-15",
|
|
45
|
+
"hover:bg-wavy-navy-1000 hover:border-blue-sparkle-600",
|
|
46
|
+
"text-content-presentation-global-primary-light",
|
|
47
|
+
"[&_*]:!text-content-presentation-global-primary-light",
|
|
36
48
|
],
|
|
37
49
|
},
|
|
38
50
|
],
|
|
@@ -86,14 +98,14 @@ export const TreeDropDown = ({
|
|
|
86
98
|
</div>
|
|
87
99
|
<div
|
|
88
100
|
className={cn(
|
|
89
|
-
"mt-0
|
|
101
|
+
"mt-0 ps-[22px] relative overflow-auto scrollbar-hide transition-all duration-500 ease-in-out",
|
|
90
102
|
{
|
|
91
103
|
"max-h-[20000px] mt-1": isActive,
|
|
92
104
|
"max-h-0": !isActive,
|
|
93
105
|
},
|
|
94
106
|
)}
|
|
95
107
|
>
|
|
96
|
-
<span className="h-full w-[1px] bg-border-system-global-primary absolute
|
|
108
|
+
<span className="h-full w-[1px] bg-border-system-global-primary absolute start-[21px] top-0 rounded-sm z-10" />
|
|
97
109
|
<div className={cn("h-full flex flex-col gap-1 w-full", childrenContainerClassName)}>
|
|
98
110
|
{props.children}
|
|
99
111
|
</div>
|
|
@@ -311,68 +311,68 @@ export const TreeFolder = forwardRef<TreeFolderHandle, TreeFolderProps>(
|
|
|
311
311
|
|
|
312
312
|
<TreeFolderStyles />
|
|
313
313
|
<DndContext {...contextProps}>
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
314
|
+
<div ref={scrollRef} role="tree" className="tf-scroll flex-1 min-h-0 overflow-auto pt-[6px]">
|
|
315
|
+
{isEmpty ? (
|
|
316
|
+
(emptyState ?? (
|
|
317
|
+
<div className="text-xs text-content-presentation-global-tertiary p-3">
|
|
318
|
+
Nothing here yet.
|
|
319
|
+
</div>
|
|
320
|
+
))
|
|
321
|
+
) : (
|
|
322
|
+
<div className="min-w-max" style={stripStyle}>
|
|
323
|
+
<DragList ids={ids} makeRoom={false}>
|
|
324
|
+
{visibleRows.map((row, idx) => {
|
|
325
|
+
const prevRow = visibleRows[idx - 1];
|
|
326
|
+
const nextRow = visibleRows[idx + 1];
|
|
327
|
+
const isSelected = selectedId === row.node.id;
|
|
328
|
+
const isDescendant = isDescendantOfSelected(row.node.id) && !isSelected;
|
|
329
|
+
const inBand = isSelected || isDescendant;
|
|
330
|
+
|
|
331
|
+
// Neighbour-aware band rounding: a row is "in-band" if it's the selected
|
|
332
|
+
// node itself or one of its descendants. The Set lookup handles deep nesting.
|
|
333
|
+
const prevInBand =
|
|
334
|
+
inBand &&
|
|
335
|
+
!!prevRow &&
|
|
336
|
+
(prevRow.node.id === selectedId || descendantIdSet.has(prevRow.node.id));
|
|
337
|
+
const nextInBand =
|
|
338
|
+
inBand &&
|
|
339
|
+
!!nextRow &&
|
|
340
|
+
(nextRow.node.id === selectedId || descendantIdSet.has(nextRow.node.id));
|
|
341
|
+
|
|
342
|
+
const isDragging = dragIdSet.has(row.node.id);
|
|
343
|
+
const isDropTargetInside =
|
|
344
|
+
dropTarget?.rowId === row.node.id && dropTarget.position === "inside";
|
|
345
|
+
const isDropBefore =
|
|
346
|
+
dropTarget?.rowId === row.node.id && dropTarget.position === "before";
|
|
347
|
+
const isDropAfter =
|
|
348
|
+
dropTarget?.rowId === row.node.id && dropTarget.position === "after";
|
|
349
|
+
|
|
350
|
+
return (
|
|
351
|
+
<TreeFolderRow
|
|
352
|
+
key={row.node.id}
|
|
353
|
+
row={row}
|
|
354
|
+
rowHeight={rowHeight}
|
|
355
|
+
indent={indent}
|
|
356
|
+
iconFor={iconFor}
|
|
357
|
+
isSelected={isSelected}
|
|
358
|
+
isAncestor={isAncestorFn(row.node.id) && !isSelected}
|
|
359
|
+
isDescendantOfSelected={isDescendant}
|
|
360
|
+
isPrevInBand={prevInBand}
|
|
361
|
+
isNextInBand={nextInBand}
|
|
362
|
+
isDragging={isDragging}
|
|
363
|
+
isDropTargetInside={isDropTargetInside}
|
|
364
|
+
isDropBefore={isDropBefore}
|
|
365
|
+
isDropAfter={isDropAfter}
|
|
366
|
+
dndEnabled={dndEnabled}
|
|
367
|
+
onSelect={handleSelect}
|
|
368
|
+
onToggle={handleToggle}
|
|
369
|
+
/>
|
|
370
|
+
);
|
|
371
|
+
})}
|
|
372
|
+
</DragList>
|
|
319
373
|
</div>
|
|
320
|
-
)
|
|
321
|
-
|
|
322
|
-
<div className="min-w-max" style={stripStyle}>
|
|
323
|
-
<DragList ids={ids} makeRoom={false}>
|
|
324
|
-
{visibleRows.map((row, idx) => {
|
|
325
|
-
const prevRow = visibleRows[idx - 1];
|
|
326
|
-
const nextRow = visibleRows[idx + 1];
|
|
327
|
-
const isSelected = selectedId === row.node.id;
|
|
328
|
-
const isDescendant = isDescendantOfSelected(row.node.id) && !isSelected;
|
|
329
|
-
const inBand = isSelected || isDescendant;
|
|
330
|
-
|
|
331
|
-
// Neighbour-aware band rounding: a row is "in-band" if it's the selected
|
|
332
|
-
// node itself or one of its descendants. The Set lookup handles deep nesting.
|
|
333
|
-
const prevInBand =
|
|
334
|
-
inBand &&
|
|
335
|
-
!!prevRow &&
|
|
336
|
-
(prevRow.node.id === selectedId || descendantIdSet.has(prevRow.node.id));
|
|
337
|
-
const nextInBand =
|
|
338
|
-
inBand &&
|
|
339
|
-
!!nextRow &&
|
|
340
|
-
(nextRow.node.id === selectedId || descendantIdSet.has(nextRow.node.id));
|
|
341
|
-
|
|
342
|
-
const isDragging = dragIdSet.has(row.node.id);
|
|
343
|
-
const isDropTargetInside =
|
|
344
|
-
dropTarget?.rowId === row.node.id && dropTarget.position === "inside";
|
|
345
|
-
const isDropBefore =
|
|
346
|
-
dropTarget?.rowId === row.node.id && dropTarget.position === "before";
|
|
347
|
-
const isDropAfter =
|
|
348
|
-
dropTarget?.rowId === row.node.id && dropTarget.position === "after";
|
|
349
|
-
|
|
350
|
-
return (
|
|
351
|
-
<TreeFolderRow
|
|
352
|
-
key={row.node.id}
|
|
353
|
-
row={row}
|
|
354
|
-
rowHeight={rowHeight}
|
|
355
|
-
indent={indent}
|
|
356
|
-
iconFor={iconFor}
|
|
357
|
-
isSelected={isSelected}
|
|
358
|
-
isAncestor={isAncestorFn(row.node.id) && !isSelected}
|
|
359
|
-
isDescendantOfSelected={isDescendant}
|
|
360
|
-
isPrevInBand={prevInBand}
|
|
361
|
-
isNextInBand={nextInBand}
|
|
362
|
-
isDragging={isDragging}
|
|
363
|
-
isDropTargetInside={isDropTargetInside}
|
|
364
|
-
isDropBefore={isDropBefore}
|
|
365
|
-
isDropAfter={isDropAfter}
|
|
366
|
-
dndEnabled={dndEnabled}
|
|
367
|
-
onSelect={handleSelect}
|
|
368
|
-
onToggle={handleToggle}
|
|
369
|
-
/>
|
|
370
|
-
);
|
|
371
|
-
})}
|
|
372
|
-
</DragList>
|
|
373
|
-
</div>
|
|
374
|
-
)}
|
|
375
|
-
</div>
|
|
374
|
+
)}
|
|
375
|
+
</div>
|
|
376
376
|
</DndContext>
|
|
377
377
|
</div>
|
|
378
378
|
);
|
package/apps/lib/registry.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.5.
|
|
2
|
+
"version": "2.5.4",
|
|
3
3
|
"generatedBy": "scripts/bin/generateRegistry",
|
|
4
4
|
"npmVersions": {
|
|
5
5
|
"@dnd-kit/core": "^6.3.1",
|
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
"react-day-picker"
|
|
187
187
|
],
|
|
188
188
|
"registryDependencies": [
|
|
189
|
-
"components/
|
|
189
|
+
"components/ActionButton",
|
|
190
190
|
"components/SimpleSelect",
|
|
191
191
|
"utils/cn"
|
|
192
192
|
]
|
|
@@ -457,25 +457,13 @@
|
|
|
457
457
|
"components/Button",
|
|
458
458
|
"components/Drawer",
|
|
459
459
|
"components/FormBuilder",
|
|
460
|
-
"components/FormStepper",
|
|
461
460
|
"components/HeaderBar",
|
|
462
461
|
"components/SectionBlock",
|
|
462
|
+
"components/Stepper",
|
|
463
463
|
"components/TabFormItem",
|
|
464
464
|
"utils/cn"
|
|
465
465
|
]
|
|
466
466
|
},
|
|
467
|
-
{
|
|
468
|
-
"name": "FormStepper",
|
|
469
|
-
"type": "components",
|
|
470
|
-
"path": "components/FormStepper.tsx",
|
|
471
|
-
"npmDependencies": [
|
|
472
|
-
"class-variance-authority"
|
|
473
|
-
],
|
|
474
|
-
"registryDependencies": [
|
|
475
|
-
"utils/cn",
|
|
476
|
-
"utils/types"
|
|
477
|
-
]
|
|
478
|
-
},
|
|
479
467
|
{
|
|
480
468
|
"name": "FormSummary",
|
|
481
469
|
"type": "components",
|
|
@@ -714,6 +702,7 @@
|
|
|
714
702
|
"class-variance-authority"
|
|
715
703
|
],
|
|
716
704
|
"registryDependencies": [
|
|
705
|
+
"components/ActionButton",
|
|
717
706
|
"components/Button",
|
|
718
707
|
"components/DropdownMenu",
|
|
719
708
|
"components/Input",
|
|
@@ -743,6 +732,7 @@
|
|
|
743
732
|
"path": "components/SearchableTree.tsx",
|
|
744
733
|
"npmDependencies": [],
|
|
745
734
|
"registryDependencies": [
|
|
735
|
+
"components/ActionButton",
|
|
746
736
|
"components/Button",
|
|
747
737
|
"components/Input",
|
|
748
738
|
"components/Popover",
|
|
@@ -757,6 +747,7 @@
|
|
|
757
747
|
"path": "components/SearchableTreeDialog.tsx",
|
|
758
748
|
"npmDependencies": [],
|
|
759
749
|
"registryDependencies": [
|
|
750
|
+
"components/ActionButton",
|
|
760
751
|
"components/Button",
|
|
761
752
|
"components/Dialog",
|
|
762
753
|
"components/Input",
|
|
@@ -793,7 +784,7 @@
|
|
|
793
784
|
"class-variance-authority"
|
|
794
785
|
],
|
|
795
786
|
"registryDependencies": [
|
|
796
|
-
"components/
|
|
787
|
+
"components/ActionButton",
|
|
797
788
|
"components/DropdownMenu",
|
|
798
789
|
"components/Tooltip",
|
|
799
790
|
"utils/cn",
|