@rebasepro/ui 0.12.1-canary.gf5f1d39 → 0.13.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.
- package/dist/components/Button.d.ts +2 -1
- package/dist/components/Menubar.d.ts +9 -2
- package/dist/components/SearchBar.d.ts +1 -1
- package/dist/components/VirtualTable/VirtualTable.d.ts +12 -6
- package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
- package/dist/components/index.d.ts +0 -1
- package/dist/icons/GitHubIcon.d.ts +1 -1
- package/dist/icons/HandleIcon.d.ts +3 -1
- package/dist/index.css +29 -61
- package/dist/index.d.ts +2 -1
- package/dist/index.es.js +484 -298
- package/dist/index.es.js.map +1 -1
- package/dist/src/index.css +29 -61
- package/dist/src/theme.css +109 -0
- package/dist/styles.d.ts +28 -0
- package/dist/theme.css +109 -0
- package/dist/util/chip_colors.d.ts +29 -3
- package/dist/views/CollectionView/index.d.ts +0 -6
- package/dist/views/Kanban/BoardColumn.d.ts +1 -0
- package/dist/views/Kanban/BoardSortableList.d.ts +2 -1
- package/dist/views/Kanban/board_types.d.ts +10 -0
- package/dist/views/Kanban/placement.d.ts +26 -0
- package/dist/views/index.d.ts +0 -1
- package/package.json +31 -29
- package/src/components/BooleanSwitch.tsx +44 -17
- package/src/components/BooleanSwitchWithLabel.tsx +6 -6
- package/src/components/Button.tsx +9 -13
- package/src/components/Checkbox.tsx +16 -6
- package/src/components/Chip.tsx +5 -2
- package/src/components/ColorPicker.tsx +56 -43
- package/src/components/DateTimeField.tsx +18 -6
- package/src/components/DialogActions.tsx +3 -1
- package/src/components/IconButton.tsx +35 -6
- package/src/components/Menubar.tsx +19 -3
- package/src/components/MultiSelect.tsx +9 -5
- package/src/components/SearchBar.tsx +6 -4
- package/src/components/Select.tsx +6 -6
- package/src/components/TextField.tsx +17 -7
- package/src/components/VirtualTable/VirtualTable.performance.test.tsx +35 -341
- package/src/components/VirtualTable/VirtualTable.tsx +19 -1
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +6 -1
- package/src/components/index.tsx +2 -1
- package/src/icons/GitHubIcon.tsx +11 -5
- package/src/icons/HandleIcon.tsx +15 -2
- package/src/index.css +29 -61
- package/src/index.ts +2 -1
- package/src/styles.ts +47 -0
- package/src/theme.css +109 -0
- package/src/util/chip_colors.ts +109 -67
- package/src/views/CollectionView/index.ts +6 -11
- package/src/views/Kanban/Board.tsx +80 -117
- package/src/views/Kanban/BoardColumn.tsx +3 -0
- package/src/views/Kanban/BoardSortableList.tsx +16 -4
- package/src/views/Kanban/board_types.ts +10 -0
- package/src/views/Kanban/placement.ts +62 -0
- package/src/views/index.ts +1 -1
- package/dist/views/TableView.d.ts +0 -6
- package/src/views/TableView.tsx +0 -7
package/dist/index.es.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import * as React$1 from "react";
|
|
3
3
|
import React, { Children, createContext, createRef, forwardRef, memo, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
4
|
+
import * as Collapsible from "@radix-ui/react-collapsible";
|
|
4
5
|
import { clsx } from "clsx";
|
|
5
6
|
import { twMerge } from "tailwind-merge";
|
|
6
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
-
import * as Collapsible from "@radix-ui/react-collapsible";
|
|
8
8
|
import { AlertCircleIcon, AlertCircleIcon as AlertCircleIcon$1, AlertTriangleIcon, AlignLeftIcon, AppWindow, ArrowDownIcon, ArrowDownToLineIcon, ArrowLeftIcon, ArrowLeftIcon as ArrowLeftIcon$1, ArrowRightFromLineIcon, ArrowRightIcon, ArrowRightLeftIcon, ArrowRightToLineIcon, ArrowUpDownIcon, ArrowUpIcon, ArrowUpIcon as ArrowUpIcon$1, ArrowUpToLineIcon, BoldIcon, BookOpenIcon, CalendarIcon, CalendarIcon as CalendarIcon$1, CheckCircle2Icon, CheckCircleIcon, CheckIcon, CheckIcon as CheckIcon$1, CheckSquareIcon, ChevronDownIcon, ChevronDownIcon as ChevronDownIcon$1, ChevronLeftIcon, ChevronLeftIcon as ChevronLeftIcon$1, ChevronRightIcon, ChevronRightIcon as ChevronRightIcon$1, ChevronUpIcon, ChevronUpIcon as ChevronUpIcon$1, ChevronsLeftIcon, ChevronsRightIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, CircleUserIcon, CodeIcon, ColumnsIcon, CopyIcon, DatabaseIcon, DollarSignIcon, DownloadIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FileIcon, FileSearchIcon, FileTextIcon, FilterIcon, FilterIcon as FilterIcon$1, FilterXIcon, FlagIcon, FolderIcon, FolderKanbanIcon, FolderPlusIcon, FolderUpIcon, FunctionSquareIcon, GitBranchIcon, GlobeIcon, HashIcon, Heading1Icon, Heading2Icon, Heading3Icon, HelpCircleIcon, HistoryIcon, HomeIcon, ImageIcon, ImageIcon as ImageIcon$1, ImageOffIcon, InfoIcon, ItalicIcon, Kanban, KanbanIcon, KeyIcon, KeyRoundIcon, LanguagesIcon, LayoutGrid, LayoutGridIcon, LayoutList, Link2Icon, LinkIcon, ListIcon, ListOrderedIcon, ListPlusIcon, ListTodoIcon, LoaderIcon, LockIcon, LogOutIcon, MailIcon, Maximize2Icon, MenuIcon, MessageCircleIcon, MinusCircleIcon, MinusIcon, MinusIcon as MinusIcon$1, MoonIcon, MoreVerticalIcon, Music2Icon, PanelLeftIcon, PauseIcon, PenLineIcon, PencilIcon, PhoneIcon, PinIcon, PlayIcon, PlusIcon, QuoteIcon, RefreshCcwIcon, RefreshCwIcon, RefreshCwIcon as RefreshCwIcon$1, RepeatIcon, Rows3Icon, SaveIcon, SearchIcon, SearchIcon as SearchIcon$1, SendIcon, Settings2, SettingsIcon, ShieldAlertIcon, ShieldIcon, ShoppingCartIcon, SlidersHorizontalIcon, SquareIcon, StarIcon, StickyNoteIcon, StrikethroughIcon, SunIcon, SunMoonIcon, Table2, TableIcon, TagIcon, TerminalIcon, TextIcon, Trash2Icon, TrendingUpIcon, TypeIcon, UnderlineIcon, UndoIcon, Unlink2Icon, UploadCloudIcon, UploadIcon, UserCheckIcon, UserIcon, UserPlus, UsersIcon, VideoIcon, VoteIcon, Wand2Icon, WrenchIcon, XCircleIcon, XIcon, XIcon as XIcon$1, icons as lucideIcons } from "lucide-react";
|
|
9
9
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
10
10
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
@@ -28,10 +28,50 @@ import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
|
28
28
|
import { FixedSizeList } from "react-window";
|
|
29
29
|
import useMeasure from "react-use-measure";
|
|
30
30
|
import { SortableContext, arrayMove, horizontalListSortingStrategy, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable";
|
|
31
|
-
import { DndContext, DragOverlay, PointerSensor, closestCenter, useDroppable, useSensor, useSensors } from "@dnd-kit/core";
|
|
31
|
+
import { DndContext, DragOverlay, PointerSensor, closestCenter, closestCorners, useDroppable, useSensor, useSensors } from "@dnd-kit/core";
|
|
32
32
|
import * as Portal from "@radix-ui/react-portal";
|
|
33
33
|
import { Slot } from "@radix-ui/react-slot";
|
|
34
34
|
import { CSS } from "@dnd-kit/utilities";
|
|
35
|
+
//#region src/styles.ts
|
|
36
|
+
var CONTROL_HEIGHT = {
|
|
37
|
+
smallest: 28,
|
|
38
|
+
small: 32,
|
|
39
|
+
medium: 40,
|
|
40
|
+
large: 48,
|
|
41
|
+
xl: 56,
|
|
42
|
+
"2xl": 64
|
|
43
|
+
};
|
|
44
|
+
/** Tailwind min-height class per control size. Keep in sync with CONTROL_HEIGHT. */
|
|
45
|
+
var controlHeightMixin = {
|
|
46
|
+
smallest: "min-h-[28px]",
|
|
47
|
+
small: "min-h-[32px]",
|
|
48
|
+
medium: "min-h-[40px]",
|
|
49
|
+
large: "min-h-[48px]",
|
|
50
|
+
xl: "min-h-[56px]",
|
|
51
|
+
"2xl": "min-h-[64px]"
|
|
52
|
+
};
|
|
53
|
+
/** Horizontal padding paired with each size, so gutters scale with height. */
|
|
54
|
+
var controlPaddingMixin = {
|
|
55
|
+
smallest: "px-2",
|
|
56
|
+
small: "px-2",
|
|
57
|
+
medium: "px-3",
|
|
58
|
+
large: "px-4",
|
|
59
|
+
xl: "px-6",
|
|
60
|
+
"2xl": "px-10"
|
|
61
|
+
};
|
|
62
|
+
var focusedDisabled = "focus-visible:ring-0 focus-visible:ring-offset-0";
|
|
63
|
+
var focusedInvisibleMixin = "focus:bg-opacity-70 focus:bg-surface-accent-100 focus:dark:bg-white/[0.07] focus:bg-surface-accent-100/70";
|
|
64
|
+
var focusedClasses = "z-30 outline-hidden outline-none ring-2 ring-primary ring-opacity-50 ring-primary/50 ring-offset-0 ring-offset-transparent ";
|
|
65
|
+
var fieldBackgroundMixin = "bg-surface-accent-200/50 dark:bg-white/[0.055]";
|
|
66
|
+
var fieldBackgroundInvisibleMixin = "bg-surface-accent-200/0 dark:bg-white/0";
|
|
67
|
+
var fieldBackgroundDisabledMixin = "bg-surface-accent-200/50 dark:bg-white/[0.03]";
|
|
68
|
+
var fieldBackgroundHoverMixin = "hover:bg-surface-accent-200/70 hover:dark:bg-white/[0.09]";
|
|
69
|
+
var defaultBorderMixin = "border-surface-200 dark:border-surface-700/60 ";
|
|
70
|
+
var paperMixin = "bg-white rounded-lg dark:bg-surface-900 border border-surface-200 dark:border-surface-700";
|
|
71
|
+
var cardMixin = "bg-white dark:bg-surface-900 rounded-lg border border-surface-200 dark:border-surface-700";
|
|
72
|
+
var cardClickableMixin = "hover:bg-primary/5 dark:hover:bg-primary/5 cursor-pointer transition-colors duration-150";
|
|
73
|
+
var cardSelectedMixin = "bg-primary-bg/30 dark:bg-primary-bg/10 ring-1 ring-primary/75";
|
|
74
|
+
//#endregion
|
|
35
75
|
//#region src/util/cls.ts
|
|
36
76
|
function cls(...classes) {
|
|
37
77
|
return twMerge(clsx(classes));
|
|
@@ -70,129 +110,200 @@ function hashString(str) {
|
|
|
70
110
|
}
|
|
71
111
|
//#endregion
|
|
72
112
|
//#region src/util/chip_colors.ts
|
|
73
|
-
var
|
|
113
|
+
var CHIP_HUES = [
|
|
114
|
+
"blue",
|
|
115
|
+
"cyan",
|
|
116
|
+
"teal",
|
|
117
|
+
"green",
|
|
118
|
+
"yellow",
|
|
119
|
+
"orange",
|
|
120
|
+
"red",
|
|
121
|
+
"pink",
|
|
122
|
+
"purple",
|
|
123
|
+
"gray",
|
|
124
|
+
"indigo",
|
|
125
|
+
"violet",
|
|
126
|
+
"fuchsia",
|
|
127
|
+
"rose",
|
|
128
|
+
"emerald"
|
|
129
|
+
];
|
|
130
|
+
var HUE_STOPS = {
|
|
74
131
|
blue: {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
132
|
+
pale: "#cfdfff",
|
|
133
|
+
mid: "#9cc7ff",
|
|
134
|
+
solid: "#2d7ff9",
|
|
135
|
+
deep: "#2750ae",
|
|
136
|
+
text: "#102046"
|
|
137
|
+
},
|
|
138
|
+
cyan: {
|
|
139
|
+
pale: "#d0f0fd",
|
|
140
|
+
mid: "#77d1f3",
|
|
141
|
+
solid: "#18bfff",
|
|
142
|
+
deep: "#0b76b7",
|
|
143
|
+
text: "#04283f"
|
|
79
144
|
},
|
|
80
145
|
teal: {
|
|
81
|
-
|
|
146
|
+
pale: "#c2f5e9",
|
|
147
|
+
mid: "#72ddc3",
|
|
148
|
+
solid: "#20d9d2",
|
|
149
|
+
deep: "#06a09b",
|
|
82
150
|
text: "#012524",
|
|
83
|
-
|
|
84
|
-
darkText: "#daf3e9"
|
|
85
|
-
},
|
|
86
|
-
yellow: {
|
|
87
|
-
color: "#ffeab6",
|
|
88
|
-
text: "#3b2501",
|
|
89
|
-
darkColor: "#b87503",
|
|
90
|
-
darkText: "#ffeab6"
|
|
91
|
-
},
|
|
92
|
-
pink: {
|
|
93
|
-
color: "#ffdaf6",
|
|
94
|
-
text: "#400832",
|
|
95
|
-
darkColor: "#b2158b",
|
|
96
|
-
darkText: "#ffdaf6"
|
|
151
|
+
onDeep: "#daf3e9"
|
|
97
152
|
},
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
153
|
+
green: {
|
|
154
|
+
pale: "#d1f7c4",
|
|
155
|
+
mid: "#93e088",
|
|
156
|
+
solid: "#20c933",
|
|
157
|
+
deep: "#338a17",
|
|
158
|
+
text: "#0b1d05"
|
|
103
159
|
},
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
160
|
+
yellow: {
|
|
161
|
+
pale: "#ffeab6",
|
|
162
|
+
mid: "#ffd66e",
|
|
163
|
+
solid: "#fcb400",
|
|
164
|
+
deep: "#b87503",
|
|
165
|
+
text: "#3b2501"
|
|
109
166
|
},
|
|
110
167
|
orange: {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
green: {
|
|
117
|
-
color: "#d1f7c4",
|
|
118
|
-
text: "#0b1d05",
|
|
119
|
-
darkColor: "#338a17",
|
|
120
|
-
darkText: "#d1f7c4"
|
|
168
|
+
pale: "#fee2d5",
|
|
169
|
+
mid: "#ffa981",
|
|
170
|
+
solid: "#ff6f2c",
|
|
171
|
+
deep: "#d74d26",
|
|
172
|
+
text: "#6b2613"
|
|
121
173
|
},
|
|
122
174
|
red: {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
175
|
+
pale: "#ffdce5",
|
|
176
|
+
mid: "#ff9eb7",
|
|
177
|
+
solid: "#f82b60",
|
|
178
|
+
deep: "#ba1e45",
|
|
179
|
+
text: "#4c0c1c"
|
|
180
|
+
},
|
|
181
|
+
pink: {
|
|
182
|
+
pale: "#ffdaf6",
|
|
183
|
+
mid: "#f99de2",
|
|
184
|
+
solid: "#ff08c2",
|
|
185
|
+
deep: "#b2158b",
|
|
186
|
+
text: "#400832"
|
|
187
|
+
},
|
|
188
|
+
purple: {
|
|
189
|
+
pale: "#ede2fe",
|
|
190
|
+
mid: "#cdb0ff",
|
|
191
|
+
solid: "#8b46ff",
|
|
192
|
+
deep: "#6b1cb0",
|
|
193
|
+
text: "#280b42"
|
|
127
194
|
},
|
|
128
195
|
gray: {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
196
|
+
pale: "#eeeeee",
|
|
197
|
+
mid: "#cccccc",
|
|
198
|
+
solid: "#666666",
|
|
199
|
+
deep: "#444444",
|
|
200
|
+
text: "#040404"
|
|
133
201
|
},
|
|
134
202
|
indigo: {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
203
|
+
pale: "#e0e7ff",
|
|
204
|
+
mid: "#a5b4fc",
|
|
205
|
+
solid: "#6366f1",
|
|
206
|
+
deep: "#4f46e5",
|
|
207
|
+
text: "#312e81"
|
|
139
208
|
},
|
|
140
209
|
violet: {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
210
|
+
pale: "#ede9fe",
|
|
211
|
+
mid: "#c4b5fd",
|
|
212
|
+
solid: "#8b5cf6",
|
|
213
|
+
deep: "#7c3aed",
|
|
214
|
+
text: "#4c1d95"
|
|
145
215
|
},
|
|
146
216
|
fuchsia: {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
217
|
+
pale: "#fae8ff",
|
|
218
|
+
mid: "#f0abfc",
|
|
219
|
+
solid: "#d946ef",
|
|
220
|
+
deep: "#c026d3",
|
|
221
|
+
text: "#701a75"
|
|
151
222
|
},
|
|
152
223
|
rose: {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
224
|
+
pale: "#ffe4e6",
|
|
225
|
+
mid: "#fda4af",
|
|
226
|
+
solid: "#f43f5e",
|
|
227
|
+
deep: "#e11d48",
|
|
228
|
+
text: "#881337"
|
|
157
229
|
},
|
|
158
230
|
emerald: {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
231
|
+
pale: "#d1fae5",
|
|
232
|
+
mid: "#6ee7b7",
|
|
233
|
+
solid: "#10b981",
|
|
234
|
+
deep: "#059669",
|
|
235
|
+
text: "#064e3b"
|
|
163
236
|
}
|
|
164
237
|
};
|
|
238
|
+
function tone(stops, chipTone) {
|
|
239
|
+
const onDeep = stops.onDeep ?? stops.pale;
|
|
240
|
+
switch (chipTone) {
|
|
241
|
+
case "Light": return {
|
|
242
|
+
color: stops.mid,
|
|
243
|
+
text: stops.text,
|
|
244
|
+
darkColor: stops.solid,
|
|
245
|
+
darkText: "#fff"
|
|
246
|
+
};
|
|
247
|
+
case "Dark": return {
|
|
248
|
+
color: stops.solid,
|
|
249
|
+
text: "#fff",
|
|
250
|
+
darkColor: stops.solid,
|
|
251
|
+
darkText: "#fff"
|
|
252
|
+
};
|
|
253
|
+
case "Darker": return {
|
|
254
|
+
color: stops.deep,
|
|
255
|
+
text: onDeep,
|
|
256
|
+
darkColor: stops.deep,
|
|
257
|
+
darkText: onDeep
|
|
258
|
+
};
|
|
259
|
+
default: return {
|
|
260
|
+
color: stops.pale,
|
|
261
|
+
text: stops.text,
|
|
262
|
+
darkColor: stops.deep,
|
|
263
|
+
darkText: onDeep
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
var CHIP_TONES = [
|
|
268
|
+
"Lighter",
|
|
269
|
+
"Light",
|
|
270
|
+
"Dark",
|
|
271
|
+
"Darker"
|
|
272
|
+
];
|
|
273
|
+
function buildChipColors() {
|
|
274
|
+
const colors = {};
|
|
275
|
+
for (const hue of CHIP_HUES) {
|
|
276
|
+
const stops = HUE_STOPS[hue];
|
|
277
|
+
for (const chipTone of CHIP_TONES) colors[`${hue}${chipTone}`] = tone(stops, chipTone);
|
|
278
|
+
colors[hue] = tone(stops, "Lighter");
|
|
279
|
+
}
|
|
280
|
+
return colors;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Every chip scheme, keyed by hue and tone.
|
|
284
|
+
*
|
|
285
|
+
* This table used to hold four tones per hue and was flattened to one, which
|
|
286
|
+
* left `blueDark`, `redDarker` and friends resolving to `undefined` — a chip
|
|
287
|
+
* with a colour in its config rendering with no colour at all — and left seeded
|
|
288
|
+
* chips picking from ten schemes, so a five-value enum routinely drew the same
|
|
289
|
+
* background three times. The tones are generated from {@link HUE_STOPS} now,
|
|
290
|
+
* so a new hue brings its whole family with it.
|
|
291
|
+
*/
|
|
292
|
+
var CHIP_COLORS = buildChipColors();
|
|
293
|
+
/**
|
|
294
|
+
* The keys a seeded chip may be assigned, in a stable order.
|
|
295
|
+
*
|
|
296
|
+
* The bare-hue aliases are excluded: they are the same scheme as `<hue>Lighter`
|
|
297
|
+
* and would make the palest tone twice as likely as any other.
|
|
298
|
+
*/
|
|
299
|
+
var CHIP_SEED_KEYS = CHIP_HUES.flatMap((hue) => CHIP_TONES.map((chipTone) => `${hue}${chipTone}`));
|
|
165
300
|
function getColorSchemeForKey(key) {
|
|
166
|
-
return CHIP_COLORS[key];
|
|
301
|
+
return CHIP_COLORS[key] ?? getColorSchemeForSeed(String(key));
|
|
167
302
|
}
|
|
168
303
|
function getColorSchemeForSeed(seed) {
|
|
169
|
-
|
|
170
|
-
const colorKeys = Object.keys(CHIP_COLORS);
|
|
171
|
-
return CHIP_COLORS[colorKeys[hash % colorKeys.length]];
|
|
304
|
+
return CHIP_COLORS[CHIP_SEED_KEYS[hashString(seed) % CHIP_SEED_KEYS.length]];
|
|
172
305
|
}
|
|
173
306
|
//#endregion
|
|
174
|
-
//#region src/components/common/SelectInputLabel.tsx
|
|
175
|
-
function SelectInputLabel({ children, error }) {
|
|
176
|
-
return /* @__PURE__ */ jsx("div", {
|
|
177
|
-
className: cls("text-sm font-medium ml-3.5 mb-1", error ? "text-red-600 dark:text-red-500" : "text-surface-accent-500 dark:text-surface-accent-300"),
|
|
178
|
-
children
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
//#endregion
|
|
182
|
-
//#region src/styles.ts
|
|
183
|
-
var focusedDisabled = "focus-visible:ring-0 focus-visible:ring-offset-0";
|
|
184
|
-
var focusedInvisibleMixin = "focus:bg-opacity-70 focus:bg-surface-accent-100 focus:dark:bg-white/[0.07] focus:bg-surface-accent-100/70";
|
|
185
|
-
var focusedClasses = "z-30 outline-hidden outline-none ring-2 ring-primary ring-opacity-50 ring-primary/50 ring-offset-0 ring-offset-transparent ";
|
|
186
|
-
var fieldBackgroundMixin = "bg-surface-accent-200/50 dark:bg-white/[0.055]";
|
|
187
|
-
var fieldBackgroundInvisibleMixin = "bg-surface-accent-200/0 dark:bg-white/0";
|
|
188
|
-
var fieldBackgroundDisabledMixin = "bg-surface-accent-200/50 dark:bg-white/[0.03]";
|
|
189
|
-
var fieldBackgroundHoverMixin = "hover:bg-surface-accent-200/70 hover:dark:bg-white/[0.09]";
|
|
190
|
-
var defaultBorderMixin = "border-surface-200 dark:border-surface-700/60 ";
|
|
191
|
-
var paperMixin = "bg-white rounded-lg dark:bg-surface-900 border border-surface-200 dark:border-surface-700";
|
|
192
|
-
var cardMixin = "bg-white dark:bg-surface-900 rounded-lg border border-surface-200 dark:border-surface-700";
|
|
193
|
-
var cardClickableMixin = "hover:bg-primary/5 dark:hover:bg-primary/5 cursor-pointer transition-colors duration-150";
|
|
194
|
-
var cardSelectedMixin = "bg-primary-bg/30 dark:bg-primary-bg/10 ring-1 ring-primary/75";
|
|
195
|
-
//#endregion
|
|
196
307
|
//#region src/hooks/PortalContainerContext.tsx
|
|
197
308
|
var PortalContainerContext = createContext(void 0);
|
|
198
309
|
/**
|
|
@@ -2438,23 +2549,31 @@ var colorClassesMapping = {
|
|
|
2438
2549
|
};
|
|
2439
2550
|
//#endregion
|
|
2440
2551
|
//#region src/icons/GitHubIcon.tsx
|
|
2441
|
-
function GitHubIcon(
|
|
2552
|
+
function GitHubIcon({ size = 24, color, className, onClick, style }) {
|
|
2553
|
+
const px = typeof size === "number" ? size : iconSize[size];
|
|
2442
2554
|
return /* @__PURE__ */ jsx("svg", {
|
|
2443
2555
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2444
|
-
className:
|
|
2556
|
+
className: cls(color ? colorClassesMapping[color] : "", className),
|
|
2557
|
+
onClick,
|
|
2558
|
+
style,
|
|
2445
2559
|
fill: "currentColor",
|
|
2446
|
-
width:
|
|
2447
|
-
height:
|
|
2560
|
+
width: px,
|
|
2561
|
+
height: px,
|
|
2448
2562
|
viewBox: "0 0 24 24",
|
|
2449
2563
|
children: /* @__PURE__ */ jsx("path", { d: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" })
|
|
2450
2564
|
});
|
|
2451
2565
|
}
|
|
2452
2566
|
//#endregion
|
|
2453
2567
|
//#region src/icons/HandleIcon.tsx
|
|
2454
|
-
function HandleIcon() {
|
|
2568
|
+
function HandleIcon({ size = 24, color, className, onClick, style }) {
|
|
2569
|
+
const px = typeof size === "number" ? size : iconSize[size];
|
|
2455
2570
|
return /* @__PURE__ */ jsxs("svg", {
|
|
2456
|
-
|
|
2457
|
-
|
|
2571
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2572
|
+
className: cls(color ? colorClassesMapping[color] : "", className),
|
|
2573
|
+
onClick,
|
|
2574
|
+
style,
|
|
2575
|
+
width: px,
|
|
2576
|
+
height: px,
|
|
2458
2577
|
viewBox: "0 0 100 100",
|
|
2459
2578
|
fill: "none",
|
|
2460
2579
|
children: [
|
|
@@ -2597,6 +2716,52 @@ var AvatarInner = ({ src, alt, children, className, style, outerClassName, hover
|
|
|
2597
2716
|
var Avatar = React.forwardRef(AvatarInner);
|
|
2598
2717
|
//#endregion
|
|
2599
2718
|
//#region src/components/BooleanSwitch.tsx
|
|
2719
|
+
/**
|
|
2720
|
+
* Switch geometry, one row per size: track w x h, knob k, and the knob's
|
|
2721
|
+
* off/on x-offsets. `on` is always `w - k - inset` so the knob is inset by the
|
|
2722
|
+
* same amount at both ends and vertically centred.
|
|
2723
|
+
*
|
|
2724
|
+
* This is a table rather than inline `cls({...})` conditions on purpose. The
|
|
2725
|
+
* offsets used to be computed object keys — `[value ? "translate-x-[24px]" :
|
|
2726
|
+
* "translate-x-[3px]"]: size === "large"` — and `large` and `medium` both
|
|
2727
|
+
* produced the key `translate-x-[3px]` when off. The later literal overwrote
|
|
2728
|
+
* the earlier, so the off-state class was silently dropped for `large` and the
|
|
2729
|
+
* knob sat flush against the edge.
|
|
2730
|
+
*/
|
|
2731
|
+
var SWITCH_GEOMETRY = {
|
|
2732
|
+
smallest: {
|
|
2733
|
+
track: "w-[34px] h-[18px] min-w-[34px] min-h-[18px]",
|
|
2734
|
+
knob: "w-[16px] h-[16px]",
|
|
2735
|
+
off: "translate-x-[1px]",
|
|
2736
|
+
on: "translate-x-[17px]",
|
|
2737
|
+
bar: "w-[16px] h-[6px]",
|
|
2738
|
+
barX: "translate-x-[9px]"
|
|
2739
|
+
},
|
|
2740
|
+
small: {
|
|
2741
|
+
track: "w-[38px] h-[22px] min-w-[38px] min-h-[22px]",
|
|
2742
|
+
knob: "w-[18px] h-[18px]",
|
|
2743
|
+
off: "translate-x-[2px]",
|
|
2744
|
+
on: "translate-x-[18px]",
|
|
2745
|
+
bar: "w-[18px] h-[8px]",
|
|
2746
|
+
barX: "translate-x-[10px]"
|
|
2747
|
+
},
|
|
2748
|
+
medium: {
|
|
2749
|
+
track: "w-[44px] h-[26px] min-w-[44px] min-h-[26px]",
|
|
2750
|
+
knob: "w-[20px] h-[20px]",
|
|
2751
|
+
off: "translate-x-[3px]",
|
|
2752
|
+
on: "translate-x-[21px]",
|
|
2753
|
+
bar: "w-[20px] h-[10px]",
|
|
2754
|
+
barX: "translate-x-[12px]"
|
|
2755
|
+
},
|
|
2756
|
+
large: {
|
|
2757
|
+
track: "w-[48px] h-[28px] min-w-[48px] min-h-[28px]",
|
|
2758
|
+
knob: "w-[22px] h-[22px]",
|
|
2759
|
+
off: "translate-x-[3px]",
|
|
2760
|
+
on: "translate-x-[23px]",
|
|
2761
|
+
bar: "w-[22px] h-[11px]",
|
|
2762
|
+
barX: "translate-x-[13px]"
|
|
2763
|
+
}
|
|
2764
|
+
};
|
|
2600
2765
|
var BooleanSwitch = React.forwardRef(function BooleanSwitch({ value, allowIndeterminate, className, onValueChange, disabled = false, size = "medium", ...props }, ref) {
|
|
2601
2766
|
return /* @__PURE__ */ jsxs("button", {
|
|
2602
2767
|
type: "button",
|
|
@@ -2612,23 +2777,9 @@ var BooleanSwitch = React.forwardRef(function BooleanSwitch({ value, allowIndete
|
|
|
2612
2777
|
else onValueChange?.(null);
|
|
2613
2778
|
else onValueChange?.(!value);
|
|
2614
2779
|
},
|
|
2615
|
-
className: cls(
|
|
2780
|
+
className: cls(SWITCH_GEOMETRY[size].track, "outline-none outline-hidden rounded-full relative shadow-sm", value ? disabled ? "bg-white bg-opacity-54 bg-white/54 dark:bg-surface-accent-950 border-surface-accent-100 dark:border-surface-accent-700 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700" : "ring-secondary ring-1 bg-secondary dark:bg-secondary" : "bg-white bg-opacity-54 bg-white/54 dark:bg-surface-accent-900 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700", className),
|
|
2616
2781
|
...props,
|
|
2617
|
-
children: [allowIndeterminate && (value === null || value === void 0) && /* @__PURE__ */ jsx("div", { className: cls("block rounded-full transition-transform duration-100 ease-out transform will-change-auto shadow-sm", disabled ? "bg-surface-accent-400 dark:bg-surface-accent-600" : "bg-surface-accent-400 dark:bg-surface-accent-600", {
|
|
2618
|
-
"w-[21px] h-[10px]": size === "medium" || size === "large",
|
|
2619
|
-
"w-[19px] h-[8px]": size === "small",
|
|
2620
|
-
"w-[16px] h-[6px]": size === "smallest",
|
|
2621
|
-
"translate-x-[10px]": size === "medium" || size === "large",
|
|
2622
|
-
"translate-x-[9px]": size === "small",
|
|
2623
|
-
"translate-x-[8px]": size === "smallest"
|
|
2624
|
-
}) }, "knob"), !(allowIndeterminate && (value === null || value === void 0)) && /* @__PURE__ */ jsx("div", { className: cls("block rounded-full transition-transform duration-100 ease-out transform will-change-auto shadow-sm", disabled ? "bg-surface-accent-300 dark:bg-surface-accent-700" : value ? "bg-white shadow" : "bg-surface-accent-600 dark:bg-surface-accent-400", {
|
|
2625
|
-
"w-[21px] h-[21px]": size === "medium" || size === "large",
|
|
2626
|
-
"w-[19px] h-[19px]": size === "small",
|
|
2627
|
-
"w-[16px] h-[16px]": size === "smallest",
|
|
2628
|
-
[value ? "translate-x-[19px]" : "translate-x-[3px]"]: size === "medium" || size === "large",
|
|
2629
|
-
[value ? "translate-x-[17px]" : "translate-x-[2px]"]: size === "small",
|
|
2630
|
-
[value ? "translate-x-[16px]" : "translate-x-[1px]"]: size === "smallest"
|
|
2631
|
-
}) }, "knob")]
|
|
2782
|
+
children: [allowIndeterminate && (value === null || value === void 0) && /* @__PURE__ */ jsx("div", { className: cls("block rounded-full transition-transform duration-100 ease-out transform will-change-auto shadow-sm", disabled ? "bg-surface-accent-400 dark:bg-surface-accent-600" : "bg-surface-accent-400 dark:bg-surface-accent-600", SWITCH_GEOMETRY[size].bar, SWITCH_GEOMETRY[size].barX) }, "knob"), !(allowIndeterminate && (value === null || value === void 0)) && /* @__PURE__ */ jsx("div", { className: cls("block rounded-full transition-transform duration-100 ease-out transform will-change-auto shadow-sm", disabled ? "bg-surface-accent-300 dark:bg-surface-accent-700" : value ? "bg-white shadow" : "bg-surface-accent-600 dark:bg-surface-accent-400", SWITCH_GEOMETRY[size].knob, value ? SWITCH_GEOMETRY[size].on : SWITCH_GEOMETRY[size].off) }, "knob")]
|
|
2632
2783
|
});
|
|
2633
2784
|
});
|
|
2634
2785
|
//#endregion
|
|
@@ -2657,12 +2808,7 @@ var BooleanSwitchWithLabel = function BooleanSwitchWithLabel({ value, position =
|
|
|
2657
2808
|
"aria-disabled": disabled || void 0,
|
|
2658
2809
|
"aria-labelledby": label ? switchLabelId : void 0,
|
|
2659
2810
|
tabIndex: -1,
|
|
2660
|
-
className: cls(!invisible && "bg-surface-accent-200/50 dark:bg-white/[0.055]", !invisible && (disabled ? "bg-surface-accent-200/50 dark:bg-white/[0.03]" : "hover:bg-surface-accent-200/70 hover:dark:bg-white/[0.09]"), disabled ? "cursor-default" : "cursor-pointer", "rounded-lg max-w-full justify-between box-border relative inline-flex items-center", !invisible && focus && !disabled ? focusedClasses : "", error ? "text-red-500 dark:text-red-600" : focus && !disabled ? "text-primary" : !disabled ? "text-text-primary dark:text-text-primary-dark" : "text-text-secondary dark:text-text-secondary-dark",
|
|
2661
|
-
"min-h-[28px]": size === "smallest",
|
|
2662
|
-
"min-h-[32px]": size === "small",
|
|
2663
|
-
"min-h-[44px]": size === "medium",
|
|
2664
|
-
"min-h-[64px]": size === "large"
|
|
2665
|
-
}, size === "small" || size === "smallest" ? "pl-2" : "pl-4", size === "small" || size === "smallest" ? "pr-4" : "pr-6", position === "end" ? "flex-row-reverse" : "flex-row", fullWidth ? "w-full" : "", className),
|
|
2811
|
+
className: cls(!invisible && "bg-surface-accent-200/50 dark:bg-white/[0.055]", !invisible && (disabled ? "bg-surface-accent-200/50 dark:bg-white/[0.03]" : "hover:bg-surface-accent-200/70 hover:dark:bg-white/[0.09]"), disabled ? "cursor-default" : "cursor-pointer", "rounded-lg max-w-full justify-between box-border relative inline-flex items-center", !invisible && focus && !disabled ? focusedClasses : "", error ? "text-red-500 dark:text-red-600" : focus && !disabled ? "text-primary" : !disabled ? "text-text-primary dark:text-text-primary-dark" : "text-text-secondary dark:text-text-secondary-dark", controlHeightMixin[size], size === "small" || size === "smallest" ? "pl-2" : "pl-4", size === "small" || size === "smallest" ? "pr-4" : "pr-6", position === "end" ? "flex-row-reverse" : "flex-row", fullWidth ? "w-full" : "", className),
|
|
2666
2812
|
onClick: disabled ? void 0 : (e) => {
|
|
2667
2813
|
if (props.allowIndeterminate) {
|
|
2668
2814
|
const onChange = onValueChange;
|
|
@@ -2694,17 +2840,17 @@ var ButtonInner = React.memo(React.forwardRef(({ children, className, variant =
|
|
|
2694
2840
|
"w-fit": !fullWidth,
|
|
2695
2841
|
"border border-primary bg-primary focus:ring-primary text-white hover:text-white hover:brightness-105": variant === "filled" && color === "primary" && !disabled,
|
|
2696
2842
|
"border border-secondary bg-secondary focus:ring-secondary text-white hover:text-white hover:brightness-105": variant === "filled" && color === "secondary" && !disabled,
|
|
2697
|
-
"border border-red-
|
|
2843
|
+
"border border-red-600 bg-red-600 hover:bg-red-700 focus:ring-red-600 text-white hover:text-white": variant === "filled" && color === "error" && !disabled,
|
|
2698
2844
|
"border border-surface-accent-200 bg-surface-accent-200 hover:bg-surface-accent-300 focus:ring-surface-accent-400 text-text-primary hover:text-text-primary dark:border-surface-accent-700 dark:bg-surface-accent-700 dark:hover:bg-surface-accent-600 dark:text-text-primary-dark hover:dark:text-text-primary-dark": variant === "filled" && color === "text" && !disabled,
|
|
2699
2845
|
"border border-transparent bg-surface-100 hover:bg-surface-accent-200 text-text-primary dark:bg-surface-700 dark:hover:bg-surface-accent-700 dark:text-text-primary-dark hover:text-text-primary dark:text-text-primary-dark hover:dark:text-text-primary-dark": variant === "filled" && color === "neutral" && !disabled,
|
|
2700
2846
|
"border border-transparent text-primary hover:text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800": variant === "text" && color === "primary" && !disabled,
|
|
2701
2847
|
"border border-transparent text-secondary hover:text-secondary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800": variant === "text" && color === "secondary" && !disabled,
|
|
2702
|
-
"border border-transparent text-red-
|
|
2848
|
+
"border border-transparent text-red-600 hover:text-red-600 hover:bg-red-600 hover:bg-opacity-10 hover:bg-red-600/10": variant === "text" && color === "error" && !disabled,
|
|
2703
2849
|
"border border-transparent text-text-primary hover:text-text-primary dark:text-text-primary-dark hover:dark:text-text-primary-dark hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800": variant === "text" && color === "text" && !disabled,
|
|
2704
2850
|
"border border-transparent text-text-primary hover:text-text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:text-text-primary-dark dark:hover:text-text-primary-dark dark:hover:bg-surface-accent-800": variant === "text" && color === "neutral" && !disabled,
|
|
2705
2851
|
"border border-primary text-primary hover:text-primary hover:bg-primary-bg hover:bg-primary/10": variant === "outlined" && color === "primary" && !disabled,
|
|
2706
2852
|
"border border-secondary text-secondary hover:text-secondary hover:bg-secondary-bg": variant === "outlined" && color === "secondary" && !disabled,
|
|
2707
|
-
"border border-red-500 text-red-
|
|
2853
|
+
"border border-red-500 text-red-600 hover:text-white hover:bg-red-600": variant === "outlined" && color === "error" && !disabled,
|
|
2708
2854
|
"border border-surface-accent-400 text-text-primary hover:text-text-primary dark:text-text-primary-dark dark:border-surface-accent-600 hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800": variant === "outlined" && color === "text" && !disabled,
|
|
2709
2855
|
"border border-surface-300 text-text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:border-surface-600 dark:text-text-primary-dark dark:hover:bg-surface-accent-800": variant === "outlined" && color === "neutral" && !disabled,
|
|
2710
2856
|
"text-text-disabled dark:text-text-disabled-dark": disabled,
|
|
@@ -2712,13 +2858,7 @@ var ButtonInner = React.memo(React.forwardRef(({ children, className, variant =
|
|
|
2712
2858
|
"border border-surface-500 opacity-50": variant === "outlined" && disabled,
|
|
2713
2859
|
"border border-transparent bg-surface-300 dark:bg-surface-500 opacity-40 bg-surface-300/40 dark:bg-surface-500/40": variant === "filled" && disabled
|
|
2714
2860
|
});
|
|
2715
|
-
const sizeClasses = cls(
|
|
2716
|
-
"py-1 px-2": size === "small",
|
|
2717
|
-
"py-2 px-4": size === "medium",
|
|
2718
|
-
"py-2.5 px-5": size === "large",
|
|
2719
|
-
"py-3 px-6": size === "xl",
|
|
2720
|
-
"py-4 px-10": size === "2xl"
|
|
2721
|
-
});
|
|
2861
|
+
const sizeClasses = cls("py-0", controlHeightMixin[size], controlPaddingMixin[size]);
|
|
2722
2862
|
const iconColorClass = (color === "neutral" || color === "text") && !disabled ? "[&>svg]:text-surface-accent-500 dark:[&>svg]:text-surface-accent-300" : "";
|
|
2723
2863
|
if (Component) return /* @__PURE__ */ jsxs(Component, {
|
|
2724
2864
|
ref,
|
|
@@ -3037,16 +3177,16 @@ var ErrorBoundary = class extends React.Component {
|
|
|
3037
3177
|
//#endregion
|
|
3038
3178
|
//#region src/components/Checkbox.tsx
|
|
3039
3179
|
var sizeClasses$2 = {
|
|
3040
|
-
large: "w-6 h-6 rounded
|
|
3041
|
-
medium: "w-5 h-5 rounded
|
|
3042
|
-
small: "w-4 h-4 rounded-
|
|
3043
|
-
smallest: "w-4 h-4 rounded-
|
|
3180
|
+
large: "w-6 h-6 rounded flex items-center justify-center",
|
|
3181
|
+
medium: "w-5 h-5 rounded flex items-center justify-center",
|
|
3182
|
+
small: "w-4 h-4 rounded-sm flex items-center justify-center",
|
|
3183
|
+
smallest: "w-4 h-4 rounded-sm flex items-center justify-center"
|
|
3044
3184
|
};
|
|
3045
3185
|
var outerSizeClasses = {
|
|
3046
3186
|
medium: "w-10 h-10",
|
|
3047
3187
|
small: "w-8 h-8",
|
|
3048
3188
|
large: "w-12 h-12 ",
|
|
3049
|
-
smallest: "w-
|
|
3189
|
+
smallest: "w-7 h-7"
|
|
3050
3190
|
};
|
|
3051
3191
|
var paddingClasses = {
|
|
3052
3192
|
medium: "p-2",
|
|
@@ -3072,7 +3212,7 @@ var Checkbox = React.memo(({ id, checked, indeterminate = false, padding = true,
|
|
|
3072
3212
|
children: /* @__PURE__ */ jsx("div", {
|
|
3073
3213
|
className: cls(padding ? paddingClasses[size] : "", outerSizeClasses[size], "inline-flex items-center justify-center text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150", onCheckedChange ? "rounded-full hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-700 dark:hover:bg-opacity-75 dark:hover:bg-surface-accent-700/75" : "", onCheckedChange ? "cursor-pointer" : "cursor-default"),
|
|
3074
3214
|
children: /* @__PURE__ */ jsx("div", {
|
|
3075
|
-
className: cls("border-2 relative transition-colors ease-in-out duration-150", sizeClasses$2[size], disabled ? indeterminate || isChecked ? "bg-surface-accent-400 dark:bg-surface-accent-600" : "bg-surface-accent-400 dark:bg-surface-accent-600" : indeterminate || isChecked ? colorClasses$2[color] : "bg-white dark:bg-surface-900", indeterminate || isChecked ? "text-surface-accent-100 dark:text-surface-accent-900" : "", disabled ? "border-transparent" : indeterminate || isChecked ? "border-transparent" : "border-surface-accent-800 dark:border-surface-accent-500"),
|
|
3215
|
+
className: cls("border-2 shrink-0 relative transition-colors ease-in-out duration-150", sizeClasses$2[size], disabled ? indeterminate || isChecked ? "bg-surface-accent-400 dark:bg-surface-accent-600" : "bg-surface-accent-400 dark:bg-surface-accent-600" : indeterminate || isChecked ? colorClasses$2[color] : "bg-white dark:bg-surface-900", indeterminate || isChecked ? "text-surface-accent-100 dark:text-surface-accent-900" : "", disabled ? "border-transparent" : indeterminate || isChecked ? "border-transparent" : "border-surface-accent-800 dark:border-surface-accent-500"),
|
|
3076
3216
|
children: /* @__PURE__ */ jsx(CheckboxPrimitive.Indicator, {
|
|
3077
3217
|
asChild: true,
|
|
3078
3218
|
children: indeterminate ? /* @__PURE__ */ jsx(MinusIcon$1, {
|
|
@@ -3093,8 +3233,8 @@ Checkbox.displayName = "Checkbox";
|
|
|
3093
3233
|
var sizeClassNames = {
|
|
3094
3234
|
smallest: "px-1.5 py-px text-[10px]",
|
|
3095
3235
|
small: "px-2 py-0.5 text-xs",
|
|
3096
|
-
medium: "px-2.5 py-
|
|
3097
|
-
large: "px-3 py-1 text-
|
|
3236
|
+
medium: "px-2.5 py-1 text-xs",
|
|
3237
|
+
large: "px-3 py-1.5 text-sm"
|
|
3098
3238
|
};
|
|
3099
3239
|
/**
|
|
3100
3240
|
* Detect if the app is currently in dark mode by checking the
|
|
@@ -3272,8 +3412,15 @@ var BASE_COLORS = [
|
|
|
3272
3412
|
"cyan",
|
|
3273
3413
|
"gray"
|
|
3274
3414
|
];
|
|
3275
|
-
|
|
3276
|
-
|
|
3415
|
+
var TONES = [
|
|
3416
|
+
"Lighter",
|
|
3417
|
+
"Light",
|
|
3418
|
+
"Dark",
|
|
3419
|
+
"Darker"
|
|
3420
|
+
];
|
|
3421
|
+
function getColorDisplayName(hue, tone) {
|
|
3422
|
+
const hueName = `${hue.charAt(0).toUpperCase()}${hue.slice(1)}`;
|
|
3423
|
+
return tone === "Lighter" ? hueName : `${hueName} ${tone.toLowerCase()}`;
|
|
3277
3424
|
}
|
|
3278
3425
|
/**
|
|
3279
3426
|
* A color picker component that displays a grid of predefined CHIP_COLORS.
|
|
@@ -3298,13 +3445,13 @@ function ColorPicker({ value, onChange, size = "medium", allowClear = true, disa
|
|
|
3298
3445
|
className: "text-surface-accent-700 dark:text-surface-accent-300",
|
|
3299
3446
|
children: "Auto (based on ID)"
|
|
3300
3447
|
})]
|
|
3301
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
3448
|
+
}), TONES.map((tone) => /* @__PURE__ */ jsx("div", {
|
|
3302
3449
|
className: "flex flex-wrap gap-1.5",
|
|
3303
3450
|
children: BASE_COLORS.map((base) => {
|
|
3304
|
-
const colorKey = base
|
|
3451
|
+
const colorKey = tone === "Lighter" ? base : `${base}${tone}`;
|
|
3305
3452
|
const colorScheme = CHIP_COLORS[colorKey];
|
|
3306
3453
|
const isSelected = value === colorKey;
|
|
3307
|
-
const displayName = getColorDisplayName(
|
|
3454
|
+
const displayName = getColorDisplayName(base, tone);
|
|
3308
3455
|
return /* @__PURE__ */ jsx(Tooltip, {
|
|
3309
3456
|
title: displayName,
|
|
3310
3457
|
delayDuration: 300,
|
|
@@ -3323,28 +3470,40 @@ function ColorPicker({ value, onChange, size = "medium", allowClear = true, disa
|
|
|
3323
3470
|
})
|
|
3324
3471
|
}, colorKey);
|
|
3325
3472
|
})
|
|
3326
|
-
})]
|
|
3473
|
+
}, tone))]
|
|
3327
3474
|
});
|
|
3328
3475
|
}
|
|
3329
3476
|
//#endregion
|
|
3330
3477
|
//#region src/components/IconButton.tsx
|
|
3331
3478
|
var buttonClasses = "hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800 hover:scale-[1.04] active:scale-95 transition-transform";
|
|
3332
|
-
var baseClasses = "inline-flex items-center justify-center
|
|
3479
|
+
var baseClasses = "inline-flex items-center justify-center text-sm font-medium focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 transition-colors ease-in-out duration-150 [&>svg]:shrink-0";
|
|
3333
3480
|
var colorClasses$1 = "text-surface-accent-500 visited:text-surface-accent-500 dark:text-surface-accent-300 dark:visited:text-surface-accent-300";
|
|
3334
3481
|
var sizeClasses$1 = {
|
|
3335
|
-
medium: "w-10 !h-10 min-w-10 min-h-10",
|
|
3336
|
-
small: "w-8 !h-8 min-w-8 min-h-8",
|
|
3337
|
-
smallest: "w-7 !h-7 min-w-7 min-h-7",
|
|
3338
|
-
large: "w-12 !h-12 min-w-12 min-h-12"
|
|
3482
|
+
medium: "w-10 !h-10 min-w-10 min-h-10 p-2",
|
|
3483
|
+
small: "w-8 !h-8 min-w-8 min-h-8 p-2",
|
|
3484
|
+
smallest: "w-7 !h-7 min-w-7 min-h-7 p-2",
|
|
3485
|
+
large: "w-12 !h-12 min-w-12 min-h-12 p-2"
|
|
3339
3486
|
};
|
|
3340
3487
|
var shapeClasses = {
|
|
3341
3488
|
circular: "rounded-full",
|
|
3342
3489
|
square: "rounded-md"
|
|
3343
3490
|
};
|
|
3491
|
+
/** Icon size used when the caller doesn't set one on the child. */
|
|
3492
|
+
var defaultIconSize = {
|
|
3493
|
+
smallest: 16,
|
|
3494
|
+
small: 18,
|
|
3495
|
+
medium: 20,
|
|
3496
|
+
large: 24
|
|
3497
|
+
};
|
|
3344
3498
|
var IconButtonInner = ({ children, className, size = "medium", variant = "ghost", shape = "circular", disabled, toggled, component, ...props }, ref) => {
|
|
3345
3499
|
const bgClasses = variant === "ghost" ? "bg-transparent" : "bg-surface-accent-200 bg-opacity-50 bg-surface-accent-200/50 dark:bg-surface-900 dark:bg-opacity-50 dark:bg-surface-900/50";
|
|
3346
3500
|
const Component = component || "button";
|
|
3347
3501
|
const isNativeButton = Component === "button";
|
|
3502
|
+
const sizedChildren = React.Children.map(children, (child) => {
|
|
3503
|
+
if (!React.isValidElement(child)) return child;
|
|
3504
|
+
if (child.props.size !== void 0) return child;
|
|
3505
|
+
return React.cloneElement(child, { size: defaultIconSize[size] });
|
|
3506
|
+
});
|
|
3348
3507
|
return /* @__PURE__ */ jsx(Component, {
|
|
3349
3508
|
type: isNativeButton ? "button" : void 0,
|
|
3350
3509
|
role: isNativeButton ? void 0 : "button",
|
|
@@ -3353,7 +3512,7 @@ var IconButtonInner = ({ children, className, size = "medium", variant = "ghost"
|
|
|
3353
3512
|
tabIndex: disabled ? -1 : void 0,
|
|
3354
3513
|
...props,
|
|
3355
3514
|
className: cls(disabled ? "opacity-50 pointer-events-none" : "cursor-pointer", toggled ? "outline outline-2 outline-primary" : "", "text-inherit dark:text-inherit", colorClasses$1, bgClasses, baseClasses, buttonClasses, shapeClasses[shape], sizeClasses$1[size], className),
|
|
3356
|
-
children
|
|
3515
|
+
children: sizedChildren
|
|
3357
3516
|
});
|
|
3358
3517
|
};
|
|
3359
3518
|
var IconButton = React.forwardRef(IconButtonInner);
|
|
@@ -3384,6 +3543,7 @@ var DateTimeField = ({ value, label, onChange, disabled, clearable, mode = "date
|
|
|
3384
3543
|
const [internalValue, setInternalValue] = useState("");
|
|
3385
3544
|
const [isTyping, setIsTyping] = useState(false);
|
|
3386
3545
|
const invalidValue = value !== void 0 && value !== null && (!(value instanceof Date) || isNaN(value.getTime()));
|
|
3546
|
+
const adornmentSize = size === "large" ? "medium" : size === "medium" ? "small" : "smallest";
|
|
3387
3547
|
useInjectStyles("DateTimeField", inputStyles);
|
|
3388
3548
|
const handleClear = (e) => {
|
|
3389
3549
|
e.preventDefault();
|
|
@@ -3455,7 +3615,8 @@ var DateTimeField = ({ value, label, onChange, disabled, clearable, mode = "date
|
|
|
3455
3615
|
let resultDate;
|
|
3456
3616
|
if (!timezone) resultDate = new Date(year, month - 1, day, hours, minutes);
|
|
3457
3617
|
else {
|
|
3458
|
-
const
|
|
3618
|
+
const refUtcDate = new Date(Date.UTC(year, month - 1, day, hours, minutes));
|
|
3619
|
+
const offsetMinutes = getTimezoneOffsetMinutes(refUtcDate, timezone);
|
|
3459
3620
|
resultDate = /* @__PURE__ */ new Date(Date.UTC(year, month - 1, day, hours, minutes) - offsetMinutes * 6e4);
|
|
3460
3621
|
}
|
|
3461
3622
|
if (isNaN(resultDate.getTime())) throw new Error("Invalid date");
|
|
@@ -3479,8 +3640,8 @@ var DateTimeField = ({ value, label, onChange, disabled, clearable, mode = "date
|
|
|
3479
3640
|
className: cls("rounded-lg relative max-w-full", !invisible && "bg-surface-accent-200/50 dark:bg-white/[0.055]", disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin, {
|
|
3480
3641
|
"min-h-[28px]": size === "smallest",
|
|
3481
3642
|
"min-h-[32px]": size === "small",
|
|
3482
|
-
"min-h-[
|
|
3483
|
-
"min-h-[
|
|
3643
|
+
"min-h-[40px]": size === "medium",
|
|
3644
|
+
"min-h-[48px]": size === "large"
|
|
3484
3645
|
}, className),
|
|
3485
3646
|
style,
|
|
3486
3647
|
onClick: () => {
|
|
@@ -3488,7 +3649,7 @@ var DateTimeField = ({ value, label, onChange, disabled, clearable, mode = "date
|
|
|
3488
3649
|
},
|
|
3489
3650
|
children: [
|
|
3490
3651
|
label && /* @__PURE__ */ jsx(InputLabel, {
|
|
3491
|
-
className: cls("absolute top-1 pointer-events-none", !error ? focused ? "text-primary" : "text-text-secondary dark:text-text-secondary-dark" : "text-red-
|
|
3652
|
+
className: cls("absolute top-1 pointer-events-none", !error ? focused ? "text-primary" : "text-text-secondary dark:text-text-secondary-dark" : "text-red-600 dark:text-red-500", disabled ? "opacity-50" : ""),
|
|
3492
3653
|
shrink: true,
|
|
3493
3654
|
children: label
|
|
3494
3655
|
}),
|
|
@@ -3503,11 +3664,17 @@ var DateTimeField = ({ value, label, onChange, disabled, clearable, mode = "date
|
|
|
3503
3664
|
className: cls("w-full outline-hidden bg-transparent leading-normal text-base px-3", clearable ? "pr-14" : "pr-12", "rounded-lg", {
|
|
3504
3665
|
"min-h-[28px]": size === "smallest",
|
|
3505
3666
|
"min-h-[32px]": size === "small",
|
|
3506
|
-
"min-h-[
|
|
3507
|
-
"min-h-[
|
|
3508
|
-
}, label ? "pt-8 pb-2" :
|
|
3667
|
+
"min-h-[40px]": size === "medium",
|
|
3668
|
+
"min-h-[48px]": size === "large"
|
|
3669
|
+
}, label ? "pt-8 pb-2" : {
|
|
3670
|
+
smallest: "py-0.5",
|
|
3671
|
+
small: "py-1",
|
|
3672
|
+
medium: "py-2",
|
|
3673
|
+
large: "py-3"
|
|
3674
|
+
}[size], inputClassName, disabled && "border border-transparent outline-hidden opacity-50 dark:opacity-50 text-surface-accent-600 dark:text-surface-accent-500")
|
|
3509
3675
|
}),
|
|
3510
3676
|
/* @__PURE__ */ jsx(IconButton, {
|
|
3677
|
+
size: adornmentSize,
|
|
3511
3678
|
onClick: (e) => {
|
|
3512
3679
|
e.stopPropagation();
|
|
3513
3680
|
inputRef.current?.showPicker();
|
|
@@ -3516,6 +3683,7 @@ var DateTimeField = ({ value, label, onChange, disabled, clearable, mode = "date
|
|
|
3516
3683
|
children: /* @__PURE__ */ jsx(CalendarIcon$1, {})
|
|
3517
3684
|
}),
|
|
3518
3685
|
clearable && value && /* @__PURE__ */ jsx(IconButton, {
|
|
3686
|
+
size: adornmentSize,
|
|
3519
3687
|
onClick: handleClear,
|
|
3520
3688
|
className: "absolute right-14 top-1/2 transform -translate-y-1/2 text-surface-accent-400 ",
|
|
3521
3689
|
children: /* @__PURE__ */ jsx(XIcon$1, {})
|
|
@@ -3618,7 +3786,7 @@ var Dialog = ({ open, onOpenChange, children, className, containerClassName, ful
|
|
|
3618
3786
|
//#region src/components/DialogActions.tsx
|
|
3619
3787
|
function DialogActions({ children, position = "sticky", translucent = true, className }) {
|
|
3620
3788
|
return /* @__PURE__ */ jsx("div", {
|
|
3621
|
-
className: cls(defaultBorderMixin, "pt-2 pb-4 px-4 border-t flex flex-row items-center justify-end bottom-0 right-0 left-0 text-right z-2 gap-2", position, "bg-white bg-opacity-60 bg-white/60 dark:bg-surface-800 dark:bg-opacity-60 dark:bg-surface-800/60", translucent ? "backdrop-blur-sm" : "", className),
|
|
3789
|
+
className: cls(defaultBorderMixin, "pt-2 pb-4 px-4 border-t flex flex-row items-center justify-end shrink-0 bottom-0 right-0 left-0 text-right z-2 gap-2", position, "bg-white bg-opacity-60 bg-white/60 dark:bg-surface-800 dark:bg-opacity-60 dark:bg-surface-800/60", translucent ? "backdrop-blur-sm" : "", className),
|
|
3622
3790
|
children
|
|
3623
3791
|
});
|
|
3624
3792
|
}
|
|
@@ -3902,15 +4070,21 @@ var MenuItem = React.memo(({ children, dense = false, disabled = false, onClick,
|
|
|
3902
4070
|
MenuItem.displayName = "MenuItem";
|
|
3903
4071
|
//#endregion
|
|
3904
4072
|
//#region src/components/Menubar.tsx
|
|
3905
|
-
function Menubar({ children, onSelect, className }) {
|
|
4073
|
+
function Menubar({ children, onSelect, value, defaultValue, onValueChange, className }) {
|
|
3906
4074
|
return /* @__PURE__ */ jsx(MenubarPrimitive.Root, {
|
|
3907
4075
|
onSelect,
|
|
4076
|
+
value,
|
|
4077
|
+
defaultValue,
|
|
4078
|
+
onValueChange,
|
|
3908
4079
|
className: cls("z-10 flex bg-white dark:bg-surface-900 p-[3px] rounded-lg shadow-sm", className),
|
|
3909
4080
|
children
|
|
3910
4081
|
});
|
|
3911
4082
|
}
|
|
3912
|
-
function MenubarMenu({ children }) {
|
|
3913
|
-
return /* @__PURE__ */ jsx(MenubarPrimitive.Menu, {
|
|
4083
|
+
function MenubarMenu({ children, value }) {
|
|
4084
|
+
return /* @__PURE__ */ jsx(MenubarPrimitive.Menu, {
|
|
4085
|
+
value,
|
|
4086
|
+
children
|
|
4087
|
+
});
|
|
3914
4088
|
}
|
|
3915
4089
|
function MenubarTrigger({ children, onSelect, className }) {
|
|
3916
4090
|
return /* @__PURE__ */ jsx(MenubarPrimitive.Trigger, {
|
|
@@ -4041,6 +4215,14 @@ function Separator({ orientation, decorative, className }) {
|
|
|
4041
4215
|
});
|
|
4042
4216
|
}
|
|
4043
4217
|
//#endregion
|
|
4218
|
+
//#region src/components/common/SelectInputLabel.tsx
|
|
4219
|
+
function SelectInputLabel({ children, error }) {
|
|
4220
|
+
return /* @__PURE__ */ jsx("div", {
|
|
4221
|
+
className: cls("text-sm font-medium ml-3.5 mb-1", error ? "text-red-600 dark:text-red-500" : "text-surface-accent-500 dark:text-surface-accent-300"),
|
|
4222
|
+
children
|
|
4223
|
+
});
|
|
4224
|
+
}
|
|
4225
|
+
//#endregion
|
|
4044
4226
|
//#region src/components/MultiSelect.tsx
|
|
4045
4227
|
var MultiSelectContext = React$1.createContext(null);
|
|
4046
4228
|
var MultiSelect = React$1.forwardRef(({ value, size = "large", label, error, onValueChange, invisible, disabled, placeholder, modalPopover = true, includeClear = true, includeSelectAll = true, useChips = true, className, inputClassName, inputRef, children, renderValues, open, onOpenChange, portalContainer }, ref) => {
|
|
@@ -4092,7 +4274,8 @@ var MultiSelect = React$1.forwardRef(({ value, size = "large", label, error, onV
|
|
|
4092
4274
|
}
|
|
4093
4275
|
};
|
|
4094
4276
|
const toggleOption = (value) => {
|
|
4095
|
-
|
|
4277
|
+
const newSelectedValues = selectedValues.some((v) => String(v) === String(value)) ? selectedValues.filter((v) => String(v) !== String(value)) : [...selectedValues, value];
|
|
4278
|
+
updateValues(newSelectedValues);
|
|
4096
4279
|
};
|
|
4097
4280
|
const handleClear = () => {
|
|
4098
4281
|
updateValues([]);
|
|
@@ -4132,11 +4315,12 @@ var MultiSelect = React$1.forwardRef(({ value, size = "large", label, error, onV
|
|
|
4132
4315
|
className: cls({
|
|
4133
4316
|
"min-h-[28px]": size === "smallest",
|
|
4134
4317
|
"min-h-[32px]": size === "small",
|
|
4135
|
-
"min-h-[
|
|
4136
|
-
"min-h-[
|
|
4318
|
+
"min-h-[40px]": size === "medium",
|
|
4319
|
+
"min-h-[48px]": size === "large"
|
|
4137
4320
|
}, {
|
|
4138
|
-
"py-
|
|
4139
|
-
"py-
|
|
4321
|
+
"py-0": size === "smallest",
|
|
4322
|
+
"py-0.5": size === "small",
|
|
4323
|
+
"py-1": size === "medium" || size === "large"
|
|
4140
4324
|
}, {
|
|
4141
4325
|
"px-2": size === "small" || size === "smallest",
|
|
4142
4326
|
"px-4": size === "medium" || size === "large"
|
|
@@ -4149,7 +4333,7 @@ var MultiSelect = React$1.forwardRef(({ value, size = "large", label, error, onV
|
|
|
4149
4333
|
const optionChildren = optionsMap.get(String(value));
|
|
4150
4334
|
if (!useChips) return optionChildren;
|
|
4151
4335
|
return /* @__PURE__ */ jsxs(Chip, {
|
|
4152
|
-
size: "
|
|
4336
|
+
size: size === "smallest" || size === "small" ? "smallest" : "small",
|
|
4153
4337
|
className: cls("flex flex-row items-center p-1"),
|
|
4154
4338
|
children: [optionChildren, /* @__PURE__ */ jsx(XIcon$1, {
|
|
4155
4339
|
size: iconSize.smallest,
|
|
@@ -4409,9 +4593,14 @@ function SearchBar({ onClick, onTextSearch, placeholder = "Search", expandable =
|
|
|
4409
4593
|
setSearchText("");
|
|
4410
4594
|
onTextSearch(void 0);
|
|
4411
4595
|
}, [onTextSearch]);
|
|
4412
|
-
const heightClass =
|
|
4413
|
-
|
|
4414
|
-
|
|
4596
|
+
const heightClass = {
|
|
4597
|
+
smallest: "h-[28px]",
|
|
4598
|
+
small: "h-[32px]",
|
|
4599
|
+
medium: "h-[40px]",
|
|
4600
|
+
large: "h-[48px]"
|
|
4601
|
+
}[size];
|
|
4602
|
+
const iconPaddingClass = size === "smallest" || size === "small" ? "px-2" : size === "medium" ? "px-3" : "px-4";
|
|
4603
|
+
const inputPaddingClass = size === "smallest" || size === "small" ? "pl-8" : size === "medium" ? "pl-10" : "pl-12";
|
|
4415
4604
|
return /* @__PURE__ */ jsxs("div", {
|
|
4416
4605
|
role: "search",
|
|
4417
4606
|
"aria-label": "Search",
|
|
@@ -4513,8 +4702,8 @@ var Select = forwardRef(({ inputRef, open, name, fullWidth = false, id, onOpenCh
|
|
|
4513
4702
|
className: cls("select-none rounded-lg text-sm", invisible ? fieldBackgroundInvisibleMixin : fieldBackgroundMixin, disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin, "relative flex items-center", className, {
|
|
4514
4703
|
"min-h-[28px]": size === "smallest",
|
|
4515
4704
|
"min-h-[32px]": size === "small",
|
|
4516
|
-
"min-h-[
|
|
4517
|
-
"min-h-[
|
|
4705
|
+
"min-h-[40px]": size === "medium",
|
|
4706
|
+
"min-h-[48px]": size === "large",
|
|
4518
4707
|
"w-fit": !fullWidth,
|
|
4519
4708
|
"w-full": fullWidth
|
|
4520
4709
|
}),
|
|
@@ -4532,8 +4721,8 @@ var Select = forwardRef(({ inputRef, open, name, fullWidth = false, id, onOpenCh
|
|
|
4532
4721
|
} : "", "outline-hidden focus:outline-hidden", "outline-none focus:outline-none", "select-none rounded-lg text-sm", error ? "text-red-500 dark:text-red-600" : "focus:text-text-primary dark:focus:text-text-primary-dark", error ? "border border-red-500 dark:border-red-600" : "", disabled ? "text-surface-accent-600 dark:text-surface-accent-400" : "text-surface-accent-800 dark:text-white", "relative flex flex-row items-center", {
|
|
4533
4722
|
"min-h-[28px]": size === "smallest",
|
|
4534
4723
|
"min-h-[32px]": size === "small",
|
|
4535
|
-
"min-h-[
|
|
4536
|
-
"min-h-[
|
|
4724
|
+
"min-h-[40px]": size === "medium",
|
|
4725
|
+
"min-h-[48px]": size === "large",
|
|
4537
4726
|
"w-full": fullWidth,
|
|
4538
4727
|
"w-fit": !fullWidth
|
|
4539
4728
|
}, inputClassName),
|
|
@@ -4542,8 +4731,8 @@ var Select = forwardRef(({ inputRef, open, name, fullWidth = false, id, onOpenCh
|
|
|
4542
4731
|
className: cls("flex-grow max-w-full flex flex-row gap-2 items-center", "overflow-visible", {
|
|
4543
4732
|
"min-h-[28px]": size === "smallest",
|
|
4544
4733
|
"min-h-[32px]": size === "small",
|
|
4545
|
-
"min-h-[
|
|
4546
|
-
"min-h-[
|
|
4734
|
+
"min-h-[40px]": size === "medium",
|
|
4735
|
+
"min-h-[48px]": size === "large"
|
|
4547
4736
|
}),
|
|
4548
4737
|
children: /* @__PURE__ */ jsx(SelectPrimitive.Value, {
|
|
4549
4738
|
onClick: (e) => {
|
|
@@ -4928,9 +5117,14 @@ var TextField = forwardRef(({ value, onChange, label, type = "text", multiline =
|
|
|
4928
5117
|
className: cls("w-full outline-none bg-transparent leading-normal px-3", "rounded-lg", "focused:text-text-primary focused:dark:text-text-primary-dark", invisible ? focusedInvisibleMixin : "", disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin, {
|
|
4929
5118
|
"min-h-[28px]": size === "smallest",
|
|
4930
5119
|
"min-h-[32px]": size === "small",
|
|
4931
|
-
"min-h-[
|
|
4932
|
-
"min-h-[
|
|
4933
|
-
}, label ?
|
|
5120
|
+
"min-h-[40px]": size === "medium",
|
|
5121
|
+
"min-h-[48px]": size === "large"
|
|
5122
|
+
}, label ? {
|
|
5123
|
+
smallest: "pt-4 pb-1",
|
|
5124
|
+
small: "pt-5 pb-1",
|
|
5125
|
+
medium: "pt-6 pb-2",
|
|
5126
|
+
large: "pt-8 pb-2"
|
|
5127
|
+
}[size] : size === "smallest" ? "py-0.5" : size === "small" ? "py-1" : "py-2", endAdornment ? "pr-12" : "pr-3", disabled && "outline-none opacity-65 dark:opacity-60 text-surface-accent-800 dark:text-white", inputClassName),
|
|
4934
5128
|
placeholder: focused || hasValue || !label ? placeholder : void 0,
|
|
4935
5129
|
autoFocus,
|
|
4936
5130
|
onFocus: () => setFocused(true),
|
|
@@ -4944,8 +5138,8 @@ var TextField = forwardRef(({ value, onChange, label, type = "text", multiline =
|
|
|
4944
5138
|
className: cls("rounded-lg relative max-w-full", invisible ? fieldBackgroundInvisibleMixin : fieldBackgroundMixin, disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin, error ? "border border-red-500 dark:border-red-600" : "", {
|
|
4945
5139
|
"min-h-[28px]": size === "smallest",
|
|
4946
5140
|
"min-h-[32px]": size === "small",
|
|
4947
|
-
"min-h-[
|
|
4948
|
-
"min-h-[
|
|
5141
|
+
"min-h-[40px]": size === "medium",
|
|
5142
|
+
"min-h-[48px]": size === "large"
|
|
4949
5143
|
}, className),
|
|
4950
5144
|
style,
|
|
4951
5145
|
children: [
|
|
@@ -5676,6 +5870,7 @@ var VirtualTableHeaderRow = ({ columns, currentSort, onColumnSort, onFilterUpdat
|
|
|
5676
5870
|
const columnFilter = column && filter && filter[column.key] ? filter[column.key] : void 0;
|
|
5677
5871
|
const filterForThisProperty = columnFilter ? Array.isArray(columnFilter[0]) ? columnFilter[0] : columnFilter : void 0;
|
|
5678
5872
|
const isDraggable = !column.frozen && !!onColumnsOrderChange;
|
|
5873
|
+
const isDragging = draggingColumnId === column.key;
|
|
5679
5874
|
return /* @__PURE__ */ jsx(ErrorBoundary, { children: /* @__PURE__ */ jsx(SortableColumnHeader, {
|
|
5680
5875
|
column,
|
|
5681
5876
|
columnIndex,
|
|
@@ -5688,7 +5883,7 @@ var VirtualTableHeaderRow = ({ columns, currentSort, onColumnSort, onFilterUpdat
|
|
|
5688
5883
|
onColumnSort,
|
|
5689
5884
|
onClickResizeColumn,
|
|
5690
5885
|
createFilterField,
|
|
5691
|
-
isDragging
|
|
5886
|
+
isDragging,
|
|
5692
5887
|
isDraggable
|
|
5693
5888
|
}) }, "header_" + column.key);
|
|
5694
5889
|
}), AddColumnComponent && /* @__PURE__ */ jsx(AddColumnComponent, {})]
|
|
@@ -5792,12 +5987,18 @@ var innerElementType = forwardRef(({ children, ...rest }, ref) => {
|
|
|
5792
5987
|
} });
|
|
5793
5988
|
});
|
|
5794
5989
|
/**
|
|
5795
|
-
*
|
|
5796
|
-
*
|
|
5797
|
-
*
|
|
5798
|
-
*
|
|
5990
|
+
* `React.memo` is not generic-preserving: it takes the props type as its own
|
|
5991
|
+
* type argument, so annotating the call with
|
|
5992
|
+
* `VirtualTableProps<Record<string, unknown>>` pinned `T` at the boundary and
|
|
5993
|
+
* discarded the `<T>` the inner function declares. The exported component was
|
|
5994
|
+
* therefore not generic at all — every consumer got `Record<string, unknown>`,
|
|
5995
|
+
* `columns` and `cellRenderer` were unrelated to `data`, and a caller writing
|
|
5996
|
+
* `<VirtualTable<Post> …>` was told the component expects no type arguments.
|
|
5799
5997
|
*
|
|
5800
|
-
*
|
|
5998
|
+
* Re-asserting the call signature is the standard way to carry a type parameter
|
|
5999
|
+
* across `memo`; it is the only cast here, and it restores the generic the
|
|
6000
|
+
* implementation always had. Runtime behaviour is unchanged — this is the same
|
|
6001
|
+
* memoized component under a type that describes it.
|
|
5801
6002
|
*/
|
|
5802
6003
|
var VirtualTable = React.memo(function VirtualTable({ data, onResetPagination, onEndReached, endOffset = 600, rowHeight = 54, headerHeight = 48, columns: columnsProp, onRowClick, onColumnResize, onColumnResizeEnd, filter: filterInput, checkFilterCombination, onFilterUpdate, sortBy, error, emptyComponent, onSortByUpdate, onScroll: onScrollProp, loading, cellRenderer, hoverRow, createFilterField, rowClassName, style, className, endAdornment, AddColumnComponent, initialScroll = 0, onColumnsOrderChange, extraData }) {
|
|
5803
6004
|
const sortByProperty = sortBy ? sortBy[0] : void 0;
|
|
@@ -6303,11 +6504,12 @@ function VirtualTableSwitch(props) {
|
|
|
6303
6504
|
//#endregion
|
|
6304
6505
|
//#region src/components/VirtualTable/fields/VirtualTableDateField.tsx
|
|
6305
6506
|
function VirtualTableDateField(props) {
|
|
6306
|
-
const { disabled, error, mode, timezone, internalValue, updateValue, locale } = props;
|
|
6507
|
+
const { disabled, error, mode, timezone, internalValue, updateValue, small = false, locale } = props;
|
|
6307
6508
|
return /* @__PURE__ */ jsx(DateTimeField, {
|
|
6308
6509
|
value: internalValue ?? void 0,
|
|
6309
6510
|
onChange: (dateValue) => updateValue(dateValue ?? null),
|
|
6310
6511
|
invisible: true,
|
|
6512
|
+
size: small ? "small" : "medium",
|
|
6311
6513
|
inputClassName: cls("w-full h-full", focusedDisabled),
|
|
6312
6514
|
className: cls("w-full h-full", focusedDisabled),
|
|
6313
6515
|
mode,
|
|
@@ -6332,7 +6534,10 @@ function VirtualTableSelect(props) {
|
|
|
6332
6534
|
});
|
|
6333
6535
|
if (isNumber) updateValue(newValue);
|
|
6334
6536
|
else updateValue(newValue);
|
|
6335
|
-
} else
|
|
6537
|
+
} else {
|
|
6538
|
+
const opt = options.find((o) => String(o.value) === updatedValue);
|
|
6539
|
+
updateValue(typeof opt?.value === "number" ? parseFloat(updatedValue) : updatedValue || null);
|
|
6540
|
+
}
|
|
6336
6541
|
}, [
|
|
6337
6542
|
multiple,
|
|
6338
6543
|
updateValue,
|
|
@@ -6766,7 +6971,7 @@ function CardView({ data, dataLoading = false, noMoreToLoad = false, dataLoading
|
|
|
6766
6971
|
}
|
|
6767
6972
|
//#endregion
|
|
6768
6973
|
//#region src/views/Kanban/BoardSortableList.tsx
|
|
6769
|
-
function BoardSortableList({ columnId, items, ItemComponent, isDragging, isDragOverColumn, loading = false, hasMore = false, onLoadMore }) {
|
|
6974
|
+
function BoardSortableList({ columnId, items, ItemComponent, isDragging, isDragOverColumn, loading = false, hasMore = false, error, onLoadMore }) {
|
|
6770
6975
|
const { setNodeRef } = useDroppable({
|
|
6771
6976
|
id: columnId,
|
|
6772
6977
|
data: { type: "ITEM-LIST" }
|
|
@@ -6799,16 +7004,16 @@ function BoardSortableList({ columnId, items, ItemComponent, isDragging, isDragO
|
|
|
6799
7004
|
}, [hasMore, onLoadMore]);
|
|
6800
7005
|
return /* @__PURE__ */ jsx("div", {
|
|
6801
7006
|
ref: setNodeRef,
|
|
6802
|
-
className: useMemo(() => cls("flex flex-col p-2 transition-opacity duration-100 transition-bg ease-linear w-full overflow-y-auto
|
|
7007
|
+
className: useMemo(() => cls("flex flex-col p-2 transition-opacity duration-100 transition-bg ease-linear w-full overflow-y-auto flex-1 min-h-0 rounded-md", isDragging && isDragOverColumn ? "bg-surface-accent-200 dark:bg-surface-900" : isDragging ? "bg-surface-50 dark:bg-surface-900 hover:bg-surface-accent-100 dark:hover:bg-surface-800" : "bg-surface-50 dark:bg-surface-900"), [isDragging, isDragOverColumn]),
|
|
6803
7008
|
style: { minHeight: 80 },
|
|
6804
7009
|
children: /* @__PURE__ */ jsx(SortableContext, {
|
|
6805
7010
|
items: items.map((i) => i.id),
|
|
6806
7011
|
strategy: verticalListSortingStrategy,
|
|
6807
7012
|
children: items.length === 0 && !loading ? /* @__PURE__ */ jsx("div", {
|
|
6808
|
-
className: "flex-1 flex items-center justify-center",
|
|
7013
|
+
className: "flex-1 flex items-center justify-center px-3 text-center",
|
|
6809
7014
|
children: /* @__PURE__ */ jsx("span", {
|
|
6810
|
-
className: "text-xs text-surface-400 dark:text-surface-500",
|
|
6811
|
-
children: "No items"
|
|
7015
|
+
className: cls("text-xs", error ? "text-red-600 dark:text-red-400" : "text-surface-400 dark:text-surface-500"),
|
|
7016
|
+
children: error ? "Could not load this column" : "No items"
|
|
6812
7017
|
})
|
|
6813
7018
|
}) : /* @__PURE__ */ jsxs(Fragment, { children: [items.map((item, index) => /* @__PURE__ */ jsx(SortableItem, {
|
|
6814
7019
|
item,
|
|
@@ -6873,7 +7078,7 @@ function BoardColumnTitle({ children, className, color, ...props }) {
|
|
|
6873
7078
|
}
|
|
6874
7079
|
//#endregion
|
|
6875
7080
|
//#region src/views/Kanban/BoardColumn.tsx
|
|
6876
|
-
var BoardColumn = memo(function BoardColumn({ id, title, items, ItemComponent, isDragging, isDragOverColumn, allowReorder = false, loading = false, hasMore = false, onLoadMore, onAddItem, totalCount, color, style }) {
|
|
7081
|
+
var BoardColumn = memo(function BoardColumn({ id, title, items, ItemComponent, isDragging, isDragOverColumn, allowReorder = false, loading = false, hasMore = false, error, onLoadMore, onAddItem, totalCount, color, style }) {
|
|
6877
7082
|
const { setNodeRef, attributes, listeners, isDragging: isColumnBeingDragged, transform, transition } = useSortable({
|
|
6878
7083
|
id,
|
|
6879
7084
|
data: { type: "COLUMN" },
|
|
@@ -6932,35 +7137,53 @@ var BoardColumn = memo(function BoardColumn({ id, title, items, ItemComponent, i
|
|
|
6932
7137
|
isDragOverColumn,
|
|
6933
7138
|
loading,
|
|
6934
7139
|
hasMore,
|
|
7140
|
+
error,
|
|
6935
7141
|
onLoadMore
|
|
6936
7142
|
})
|
|
6937
7143
|
})]
|
|
6938
7144
|
});
|
|
6939
7145
|
});
|
|
6940
7146
|
//#endregion
|
|
7147
|
+
//#region src/views/Kanban/placement.ts
|
|
7148
|
+
/**
|
|
7149
|
+
* Where a dropped card ends up in its destination column.
|
|
7150
|
+
*
|
|
7151
|
+
* Pulled out of the drop handler because it is the part that was wrong twice:
|
|
7152
|
+
* once appending a card that had been dropped into the middle of a column, and
|
|
7153
|
+
* once refusing to place a card at all when it was released over an empty
|
|
7154
|
+
* column rather than over another card. It is pure, so it can be checked
|
|
7155
|
+
* without driving a pointer.
|
|
7156
|
+
*/
|
|
7157
|
+
function placeDroppedCard({ targetItems, movedItem, overId, changedColumn }) {
|
|
7158
|
+
const indexInTarget = targetItems.findIndex((i) => i.id === movedItem.id);
|
|
7159
|
+
const overIndex = targetItems.findIndex((i) => i.id === overId);
|
|
7160
|
+
if (indexInTarget === -1) {
|
|
7161
|
+
const placed = [...targetItems];
|
|
7162
|
+
placed.splice(overIndex === -1 ? targetItems.length : overIndex, 0, movedItem);
|
|
7163
|
+
return placed;
|
|
7164
|
+
}
|
|
7165
|
+
if (overIndex !== -1) return arrayMove(targetItems, indexInTarget, overIndex);
|
|
7166
|
+
if (changedColumn) return targetItems;
|
|
7167
|
+
return arrayMove(targetItems, indexInTarget, targetItems.length - 1);
|
|
7168
|
+
}
|
|
7169
|
+
//#endregion
|
|
6941
7170
|
//#region src/views/Kanban/Board.tsx
|
|
6942
7171
|
function Board({ data, columns: columnsProp, columnLabels, columnColors, className, assignColumn, allowColumnReorder = false, onColumnReorder, onItemsReorder, ItemComponent, columnLoadingState, onLoadMoreColumn, onAddItemToColumn, AddColumnComponent }) {
|
|
6943
7172
|
const [activeItem, setActiveItem] = useState(null);
|
|
6944
|
-
const [activeColumn, setActiveColumn] = useState(null);
|
|
6945
7173
|
const [isDragging, setIsDragging] = useState(false);
|
|
6946
7174
|
const [dragOverColumnId, setDragOverColumnId] = useState(null);
|
|
6947
|
-
|
|
6948
|
-
|
|
6949
|
-
|
|
6950
|
-
|
|
6951
|
-
|
|
6952
|
-
|
|
6953
|
-
|
|
6954
|
-
|
|
6955
|
-
|
|
6956
|
-
|
|
6957
|
-
|
|
6958
|
-
|
|
6959
|
-
return () => {
|
|
6960
|
-
window.removeEventListener("mousemove", handleMouseMove);
|
|
6961
|
-
window.removeEventListener("pointermove", handleMouseMove);
|
|
6962
|
-
};
|
|
6963
|
-
}, [handleMouseMove]);
|
|
7175
|
+
/**
|
|
7176
|
+
* Which column the card was picked up from.
|
|
7177
|
+
*
|
|
7178
|
+
* `handleDragOver` moves the card between columns in `itemMapState` while
|
|
7179
|
+
* the pointer is still down — that is what makes the gap open up under the
|
|
7180
|
+
* cursor. So by the time the drop is handled, looking the card up by id
|
|
7181
|
+
* finds it in its *destination*, and the board was reporting the move as
|
|
7182
|
+
* source === target: a cross-column drop looked like a plain reorder and
|
|
7183
|
+
* the column property was never written. The card snapped back on the next
|
|
7184
|
+
* fetch.
|
|
7185
|
+
*/
|
|
7186
|
+
const dragSourceColumnRef = useRef(null);
|
|
6964
7187
|
const [itemMapState, setItemMapState] = useState(() => {
|
|
6965
7188
|
const dataColumnMap = data.reduce((prev, item) => ({
|
|
6966
7189
|
...prev,
|
|
@@ -7023,27 +7246,9 @@ function Board({ data, columns: columnsProp, columnLabels, columnColors, classNa
|
|
|
7023
7246
|
setIsDragging(true);
|
|
7024
7247
|
setDragOverColumnId(null);
|
|
7025
7248
|
const { active } = event;
|
|
7026
|
-
|
|
7027
|
-
if (activatorEvt) {
|
|
7028
|
-
const target = activatorEvt.target;
|
|
7029
|
-
const rect = (target.closest("[role='button']") ?? target).getBoundingClientRect();
|
|
7030
|
-
grabOffsetRef.current = {
|
|
7031
|
-
x: activatorEvt.clientX - rect.left,
|
|
7032
|
-
y: activatorEvt.clientY - rect.top
|
|
7033
|
-
};
|
|
7034
|
-
setOverlayPos({
|
|
7035
|
-
x: rect.left,
|
|
7036
|
-
y: rect.top
|
|
7037
|
-
});
|
|
7038
|
-
}
|
|
7039
|
-
window.addEventListener("mousemove", handleMouseMove);
|
|
7040
|
-
window.addEventListener("pointermove", handleMouseMove);
|
|
7041
|
-
if (active.data.current?.type === "COLUMN") {
|
|
7042
|
-
const columnId = active.id;
|
|
7043
|
-
const column = columnsProp.find((col) => String(col) === columnId);
|
|
7044
|
-
if (column) setActiveColumn(column);
|
|
7045
|
-
} else if (active.data.current?.type === "ITEM") {
|
|
7249
|
+
if (active.data.current?.type === "ITEM") {
|
|
7046
7250
|
const columnId = findColumnByItemId(active.id);
|
|
7251
|
+
dragSourceColumnRef.current = columnId ?? null;
|
|
7047
7252
|
if (columnId) {
|
|
7048
7253
|
const item = itemMapState[columnId]?.find((i) => i.id === active.id);
|
|
7049
7254
|
setActiveItem(item || null);
|
|
@@ -7065,15 +7270,15 @@ function Board({ data, columns: columnsProp, columnLabels, columnColors, classNa
|
|
|
7065
7270
|
setDragOverColumnId(currentHoveredColumnId);
|
|
7066
7271
|
if (active.data.current?.type !== "ITEM") return;
|
|
7067
7272
|
const activeId = active.id;
|
|
7068
|
-
const
|
|
7273
|
+
const activeItemColumn = findColumnByItemId(activeId);
|
|
7069
7274
|
let overColumnForMove = findColumnByItemId(overId);
|
|
7070
7275
|
if (!overColumnForMove && overDataType === "ITEM-LIST") overColumnForMove = overId;
|
|
7071
7276
|
if (!overColumnForMove && columnsProp.includes(overId)) overColumnForMove = overId;
|
|
7072
|
-
if (!
|
|
7073
|
-
if (
|
|
7277
|
+
if (!activeItemColumn || !overColumnForMove) return;
|
|
7278
|
+
if (activeItemColumn === overColumnForMove) return;
|
|
7074
7279
|
if (itemMapState[overColumnForMove]?.some((i) => i.id === activeId)) return;
|
|
7075
7280
|
setItemMapState((currentMap) => {
|
|
7076
|
-
const activeItems = [...currentMap[
|
|
7281
|
+
const activeItems = [...currentMap[activeItemColumn] || []];
|
|
7077
7282
|
const overItems = [...currentMap[overColumnForMove] || []];
|
|
7078
7283
|
const activeIndex = activeItems.findIndex((i) => i.id === activeId);
|
|
7079
7284
|
if (activeIndex === -1) return currentMap;
|
|
@@ -7089,20 +7294,24 @@ function Board({ data, columns: columnsProp, columnLabels, columnColors, classNa
|
|
|
7089
7294
|
const newItemMap = { ...currentMap };
|
|
7090
7295
|
const [moved] = activeItems.splice(activeIndex, 1);
|
|
7091
7296
|
overItems.splice(overIndex, 0, moved);
|
|
7092
|
-
newItemMap[
|
|
7297
|
+
newItemMap[activeItemColumn] = activeItems;
|
|
7093
7298
|
newItemMap[overColumnForMove] = overItems;
|
|
7094
7299
|
return newItemMap;
|
|
7095
7300
|
});
|
|
7096
7301
|
};
|
|
7302
|
+
const handleDragCancel = () => {
|
|
7303
|
+
setIsDragging(false);
|
|
7304
|
+
setActiveItem(null);
|
|
7305
|
+
setDragOverColumnId(null);
|
|
7306
|
+
dragSourceColumnRef.current = null;
|
|
7307
|
+
};
|
|
7097
7308
|
const handleDragEnd = (event) => {
|
|
7098
7309
|
const { active, over } = event;
|
|
7099
|
-
|
|
7100
|
-
window.removeEventListener("pointermove", handleMouseMove);
|
|
7101
|
-
setOverlayPos(null);
|
|
7310
|
+
const sourceColumn = dragSourceColumnRef.current;
|
|
7102
7311
|
setIsDragging(false);
|
|
7103
7312
|
setActiveItem(null);
|
|
7104
|
-
setActiveColumn(null);
|
|
7105
7313
|
setDragOverColumnId(null);
|
|
7314
|
+
dragSourceColumnRef.current = null;
|
|
7106
7315
|
if (!over) return;
|
|
7107
7316
|
const activeId = active.id;
|
|
7108
7317
|
const overId = over.id;
|
|
@@ -7117,51 +7326,35 @@ function Board({ data, columns: columnsProp, columnLabels, columnColors, classNa
|
|
|
7117
7326
|
}
|
|
7118
7327
|
return;
|
|
7119
7328
|
}
|
|
7120
|
-
const
|
|
7121
|
-
let
|
|
7122
|
-
if (!
|
|
7123
|
-
if (over.data.current?.type === "ITEM-LIST" || columnsProp.includes(overId))
|
|
7124
|
-
}
|
|
7125
|
-
if (!activeCol || !overCol) return;
|
|
7126
|
-
const isSameColumn = activeCol === overCol;
|
|
7127
|
-
const activeItems = itemMapState[activeCol] || [];
|
|
7128
|
-
const overItems = itemMapState[overCol] || [];
|
|
7129
|
-
const activeIndex = activeItems.findIndex((i) => i.id === activeId);
|
|
7130
|
-
let overIndex;
|
|
7131
|
-
if (over.id === overCol) overIndex = overItems.length;
|
|
7132
|
-
else overIndex = overItems.findIndex((i) => i.id === overId);
|
|
7133
|
-
if (activeIndex === -1 || overIndex === -1) return;
|
|
7134
|
-
let finalItems = [];
|
|
7135
|
-
if (isSameColumn) finalItems = arrayMove(activeItems, activeIndex, overIndex);
|
|
7136
|
-
else {
|
|
7137
|
-
const newActiveItems = [...activeItems];
|
|
7138
|
-
const newOverItems = [...overItems];
|
|
7139
|
-
const [moved] = newActiveItems.splice(activeIndex, 1);
|
|
7140
|
-
newOverItems.splice(overIndex, 0, moved);
|
|
7141
|
-
finalItems = [...newActiveItems, ...newOverItems];
|
|
7329
|
+
const currentCol = findColumnByItemId(activeId);
|
|
7330
|
+
let targetCol = findColumnByItemId(overId);
|
|
7331
|
+
if (!targetCol) {
|
|
7332
|
+
if (over.data.current?.type === "ITEM-LIST" || columnsProp.includes(overId)) targetCol = overId;
|
|
7142
7333
|
}
|
|
7143
|
-
|
|
7144
|
-
|
|
7145
|
-
|
|
7146
|
-
|
|
7147
|
-
|
|
7148
|
-
|
|
7149
|
-
|
|
7150
|
-
|
|
7151
|
-
|
|
7152
|
-
|
|
7334
|
+
targetCol = targetCol ?? currentCol;
|
|
7335
|
+
if (!currentCol || !targetCol) return;
|
|
7336
|
+
const targetItems = itemMapState[targetCol] || [];
|
|
7337
|
+
const movedItem = (itemMapState[currentCol] || []).find((i) => i.id === activeId);
|
|
7338
|
+
if (!movedItem) return;
|
|
7339
|
+
const finalTargetItems = placeDroppedCard({
|
|
7340
|
+
targetItems,
|
|
7341
|
+
movedItem,
|
|
7342
|
+
overId,
|
|
7343
|
+
changedColumn: (sourceColumn ?? currentCol) !== targetCol
|
|
7153
7344
|
});
|
|
7154
|
-
onItemsReorder?.(
|
|
7345
|
+
onItemsReorder?.(finalTargetItems, {
|
|
7155
7346
|
itemId: activeId,
|
|
7156
|
-
sourceColumn:
|
|
7157
|
-
targetColumn:
|
|
7347
|
+
sourceColumn: sourceColumn ?? currentCol,
|
|
7348
|
+
targetColumn: targetCol
|
|
7158
7349
|
});
|
|
7159
7350
|
};
|
|
7160
7351
|
return /* @__PURE__ */ jsxs(DndContext, {
|
|
7161
7352
|
sensors,
|
|
7353
|
+
collisionDetection: closestCorners,
|
|
7162
7354
|
onDragStart: handleDragStart,
|
|
7163
7355
|
onDragOver: handleDragOver,
|
|
7164
7356
|
onDragEnd: handleDragEnd,
|
|
7357
|
+
onDragCancel: handleDragCancel,
|
|
7165
7358
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
7166
7359
|
className: cls("flex flex-row h-full w-full overflow-x-auto p-4 select-none items-start", className),
|
|
7167
7360
|
children: [/* @__PURE__ */ jsx(SortableContext, {
|
|
@@ -7180,6 +7373,7 @@ function Board({ data, columns: columnsProp, columnLabels, columnColors, classNa
|
|
|
7180
7373
|
allowReorder: allowColumnReorder,
|
|
7181
7374
|
loading: loadingState?.loading,
|
|
7182
7375
|
hasMore: loadingState?.hasMore,
|
|
7376
|
+
error: loadingState?.error,
|
|
7183
7377
|
totalCount: loadingState?.totalCount,
|
|
7184
7378
|
color: columnColors?.[col],
|
|
7185
7379
|
onLoadMore: onLoadMoreColumn ? () => onLoadMoreColumn(col) : void 0,
|
|
@@ -7189,19 +7383,11 @@ function Board({ data, columns: columnsProp, columnLabels, columnColors, classNa
|
|
|
7189
7383
|
}), AddColumnComponent]
|
|
7190
7384
|
}), typeof document !== "undefined" && createPortal(/* @__PURE__ */ jsx(DragOverlay, {
|
|
7191
7385
|
dropAnimation: null,
|
|
7192
|
-
|
|
7193
|
-
|
|
7194
|
-
|
|
7195
|
-
|
|
7196
|
-
|
|
7197
|
-
pointerEvents: "none",
|
|
7198
|
-
zIndex: 9999
|
|
7199
|
-
},
|
|
7200
|
-
children: /* @__PURE__ */ jsx(ItemComponent, {
|
|
7201
|
-
item: activeItem,
|
|
7202
|
-
isDragging: true,
|
|
7203
|
-
isClone: true
|
|
7204
|
-
})
|
|
7386
|
+
zIndex: 9999,
|
|
7387
|
+
children: activeItem && /* @__PURE__ */ jsx(ItemComponent, {
|
|
7388
|
+
item: activeItem,
|
|
7389
|
+
isDragging: true,
|
|
7390
|
+
isClone: true
|
|
7205
7391
|
})
|
|
7206
7392
|
}), document.body)]
|
|
7207
7393
|
});
|
|
@@ -7670,7 +7856,7 @@ var SIZE_TO_ROW_HEIGHT = {
|
|
|
7670
7856
|
l: 64,
|
|
7671
7857
|
xl: 80
|
|
7672
7858
|
};
|
|
7673
|
-
var SORTABLE_TYPES = new Set([
|
|
7859
|
+
var SORTABLE_TYPES = /* @__PURE__ */ new Set([
|
|
7674
7860
|
"string",
|
|
7675
7861
|
"number",
|
|
7676
7862
|
"date"
|
|
@@ -7809,7 +7995,7 @@ function resolveTitlePropertyKey(order, properties, idProperty, titleProperty) {
|
|
|
7809
7995
|
PLAIN_TEXT: 60,
|
|
7810
7996
|
NAMED: 100
|
|
7811
7997
|
};
|
|
7812
|
-
const titleLikeKeys = new Set([
|
|
7998
|
+
const titleLikeKeys = /* @__PURE__ */ new Set([
|
|
7813
7999
|
"name",
|
|
7814
8000
|
"fullname",
|
|
7815
8001
|
"displayname",
|
|
@@ -8461,6 +8647,6 @@ function CollectionView({ dataController, properties, propertiesOrder, displayed
|
|
|
8461
8647
|
});
|
|
8462
8648
|
}
|
|
8463
8649
|
//#endregion
|
|
8464
|
-
export { Alert, AlertCircleIcon, AlertTriangleIcon, AlignLeftIcon, AppWindow, ArrowDownIcon, ArrowDownToLineIcon, ArrowLeftIcon, ArrowRightFromLineIcon, ArrowRightIcon, ArrowRightLeftIcon, ArrowRightToLineIcon, ArrowUpDownIcon, ArrowUpIcon, ArrowUpToLineIcon, Autocomplete, AutocompleteItem, Avatar, Badge, BoldIcon, BookOpenIcon, BooleanSwitch, BooleanSwitchWithLabel, Button, CHIP_COLORS, CalendarIcon, Card, CardView, CenteredView, CheckCircle2Icon, CheckCircleIcon, CheckIcon, CheckSquareIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsLeftIcon, ChevronsRightIcon, ChevronsUpDownIcon, Chip, CircleDotIcon, CircleIcon, CircleUserIcon, CircularProgress, CircularProgressCenter, CodeIcon, Collapse,
|
|
8650
|
+
export { Alert, AlertCircleIcon, AlertTriangleIcon, AlignLeftIcon, AppWindow, ArrowDownIcon, ArrowDownToLineIcon, ArrowLeftIcon, ArrowRightFromLineIcon, ArrowRightIcon, ArrowRightLeftIcon, ArrowRightToLineIcon, ArrowUpDownIcon, ArrowUpIcon, ArrowUpToLineIcon, Autocomplete, AutocompleteItem, Avatar, Badge, BoldIcon, BookOpenIcon, BooleanSwitch, BooleanSwitchWithLabel, Button, CHIP_COLORS, CHIP_HUES, CHIP_SEED_KEYS, CONTROL_HEIGHT, CalendarIcon, Card, CardView, CenteredView, CheckCircle2Icon, CheckCircleIcon, CheckIcon, CheckSquareIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsLeftIcon, ChevronsRightIcon, ChevronsUpDownIcon, Chip, CircleDotIcon, CircleIcon, CircleUserIcon, CircularProgress, CircularProgressCenter, CodeIcon, Collapse, CollectionView, ColorPicker, ColumnsIcon, Container, CopyIcon, DatabaseIcon, DateTimeField, DebouncedTextField, Dialog, DialogActions, DialogContent, DialogTitle, DollarSignIcon, DownloadIcon, ErrorBoundary, ExpandablePanel, ExternalLinkIcon, EyeIcon, EyeOffIcon, FileIcon, FileSearchIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FilterXIcon, FlagIcon, FolderIcon, FolderKanbanIcon, FolderPlusIcon, FolderUpIcon, FunctionSquareIcon, GitBranchIcon, GitHubIcon, GlobeIcon, HandleIcon, HashIcon, Heading1Icon, Heading2Icon, Heading3Icon, HelpCircleIcon, HistoryIcon, HomeIcon, IconButton, ImageIcon, ImageOffIcon, InfoIcon, InfoLabel, InputLabel, ItalicIcon, KanbanIcon, KanbanView, KeyIcon, KeyRoundIcon, Label, LanguagesIcon, LayoutGridIcon, Link2Icon, LinkIcon, ListIcon, ListOrderedIcon, ListPlusIcon, ListTodoIcon, ListView, LoaderIcon, LoadingButton, LockIcon, LogOutIcon, MailIcon, Markdown, Maximize2Icon, Menu, MenuIcon, MenuItem, Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarItemIndicator, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarSubTriggerIndicator, MenubarTrigger, MessageCircleIcon, MinusCircleIcon, MinusIcon, MoonIcon, MoreVerticalIcon, MultiSelect, MultiSelectContext, MultiSelectItem, Music2Icon, PanelLeftIcon, Paper, PauseIcon, PenLineIcon, PencilIcon, PhoneIcon, PinIcon, PlayIcon, PlusIcon, Popover, PopoverPrimitive, Portal, PortalContainerProvider, QuoteIcon, RadioGroup, RadioGroupItem, RefreshCcwIcon, RefreshCwIcon, RepeatIcon, ResizablePanels, Rows3Icon, SaveIcon, SearchBar, SearchIcon, Select, SelectGroup, SelectItem, SendIcon, Separator, SettingsIcon, Sheet, ShieldIcon, ShoppingCartIcon, Skeleton, Slider, SlidersHorizontalIcon, Slot, SquareIcon, StarIcon, StickyNoteIcon, StrikethroughIcon, SunIcon, SunMoonIcon, Tab, Table, TableBody, TableCell, TableHeader, TableIcon, TableRow, Tabs, TagIcon, TerminalIcon, TextField, TextIcon, TextareaAutosize, ToggleButtonGroup, Tooltip, Trash2Icon, TrendingUpIcon, TypeIcon, Typography, UnderlineIcon, UndoIcon, Unlink2Icon, UploadCloudIcon, UploadIcon, UserCheckIcon, UserIcon, UserPlus, UsersIcon, VideoIcon, VirtualTable, VirtualTableDateField, VirtualTableInput, VirtualTableNumberInput, VirtualTableSelect, VirtualTableSelectionProvider, VirtualTableSwitch, VoteIcon, Wand2Icon, WrenchIcon, XCircleIcon, XIcon, cardClickableMixin, cardMixin, cardSelectedMixin, cls, colorClassesMapping, controlHeightMixin, controlPaddingMixin, coolIconKeys, createVirtualTableSelectionStore, debounce, defaultBorderMixin, fieldBackgroundDisabledMixin, fieldBackgroundHoverMixin, fieldBackgroundInvisibleMixin, fieldBackgroundMixin, focusedClasses, focusedDisabled, focusedInvisibleMixin, getColorSchemeForKey, getColorSchemeForSeed, iconKeys, iconSize, lucideIcons, paperMixin, useAutoComplete, useDebounceCallback, useDebounceValue, useDebouncedCallback, useInjectStyles, useOutsideAlerter, usePortalContainer, useVirtualTableCellSelected, useVirtualTableSelection };
|
|
8465
8651
|
|
|
8466
8652
|
//# sourceMappingURL=index.es.js.map
|