torch-glare 2.4.0 → 2.4.1
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/README.md +8 -0
- package/apps/lib/components/ActionButton.tsx +7 -12
- package/apps/lib/components/ActionsGroup.tsx +4 -15
- package/apps/lib/components/AlertDialog.tsx +173 -191
- package/apps/lib/components/Avatar.tsx +13 -16
- package/apps/lib/components/Badge.tsx +1 -3
- package/apps/lib/components/BadgeField.tsx +76 -71
- package/apps/lib/components/Breadcrumb.tsx +49 -85
- package/apps/lib/components/Button.tsx +20 -19
- package/apps/lib/components/ButtonGroup.tsx +31 -41
- package/apps/lib/components/Calendar.tsx +51 -29
- package/apps/lib/components/Card.tsx +2 -13
- package/apps/lib/components/ChartBlockTool.ts +17 -52
- package/apps/lib/components/Checkbox.tsx +9 -16
- package/apps/lib/components/ContextMenu.tsx +97 -96
- package/apps/lib/components/CountBadge.tsx +4 -6
- package/apps/lib/components/DataTable.tsx +196 -216
- package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
- package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
- package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
- package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
- package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
- package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
- package/apps/lib/components/DataViews/InboxView.tsx +22 -68
- package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
- package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
- package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
- package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
- package/apps/lib/components/DataViews/TableView.tsx +8 -28
- package/apps/lib/components/DataViews/TreeView.tsx +12 -40
- package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
- package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
- package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
- package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
- package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
- package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
- package/apps/lib/components/DataViews/index.ts +26 -26
- package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
- package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
- package/apps/lib/components/DataViews/types.ts +104 -115
- package/apps/lib/components/DatePicker.tsx +198 -196
- package/apps/lib/components/Dialog.tsx +92 -105
- package/apps/lib/components/Divider.tsx +21 -24
- package/apps/lib/components/Drawer.tsx +79 -139
- package/apps/lib/components/DropdownMenu.tsx +131 -171
- package/apps/lib/components/FieldHint.tsx +4 -11
- package/apps/lib/components/Form.tsx +146 -155
- package/apps/lib/components/FormStepper.tsx +9 -39
- package/apps/lib/components/HeaderBar.tsx +1 -9
- package/apps/lib/components/ImageAttachment.tsx +111 -73
- package/apps/lib/components/InnerLabelField.tsx +20 -16
- package/apps/lib/components/Input.tsx +171 -172
- package/apps/lib/components/InputField.tsx +44 -45
- package/apps/lib/components/InputOTP.tsx +68 -69
- package/apps/lib/components/Label.tsx +31 -35
- package/apps/lib/components/LabelField.tsx +4 -5
- package/apps/lib/components/LabeledCheckBox.tsx +8 -12
- package/apps/lib/components/LabeledRadio.tsx +7 -5
- package/apps/lib/components/LinkButton.tsx +2 -9
- package/apps/lib/components/LoginButton.tsx +4 -9
- package/apps/lib/components/PasswordLevel.tsx +5 -5
- package/apps/lib/components/Popover.tsx +15 -33
- package/apps/lib/components/ProfileMenu.tsx +67 -72
- package/apps/lib/components/Radio.tsx +1 -5
- package/apps/lib/components/RadioCard.tsx +9 -28
- package/apps/lib/components/ScrollArea.tsx +45 -43
- package/apps/lib/components/SearchField.tsx +49 -39
- package/apps/lib/components/SearchableSelect.tsx +8 -14
- package/apps/lib/components/SearchableTable.tsx +108 -118
- package/apps/lib/components/SearchableTree.tsx +469 -0
- package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
- package/apps/lib/components/SectionBlock.tsx +4 -16
- package/apps/lib/components/Select.tsx +53 -80
- package/apps/lib/components/SimpleSelect.tsx +196 -187
- package/apps/lib/components/Skeleton.tsx +9 -12
- package/apps/lib/components/SlideDatePicker.tsx +215 -166
- package/apps/lib/components/SpinLoading.tsx +33 -49
- package/apps/lib/components/Stepper.tsx +13 -56
- package/apps/lib/components/Switch.tsx +8 -10
- package/apps/lib/components/TabFormItem.tsx +3 -12
- package/apps/lib/components/TabSwitch.tsx +7 -34
- package/apps/lib/components/Table.tsx +60 -75
- package/apps/lib/components/TableDnDWrapper.ts +15 -48
- package/apps/lib/components/TextEditor.tsx +93 -104
- package/apps/lib/components/Textarea.tsx +8 -12
- package/apps/lib/components/Timeline.tsx +21 -41
- package/apps/lib/components/Toast.tsx +83 -83
- package/apps/lib/components/Toggle.tsx +112 -114
- package/apps/lib/components/ToggleButton.tsx +1 -1
- package/apps/lib/components/Tooltip.tsx +24 -19
- package/apps/lib/components/TransparentLabel.tsx +61 -62
- package/apps/lib/components/TreeDropDown.tsx +86 -52
- package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
- package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
- package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
- package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
- package/apps/lib/components/TreeFolder/icons.tsx +14 -17
- package/apps/lib/components/TreeFolder/index.ts +15 -8
- package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
- package/apps/lib/components/TreeFolder/types.ts +32 -32
- package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
- package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
- package/apps/lib/hooks/useClickOutside.ts +21 -20
- package/apps/lib/hooks/useDataViewsState.ts +86 -80
- package/apps/lib/hooks/useIsMobile.ts +12 -12
- package/apps/lib/hooks/useResize.ts +54 -65
- package/apps/lib/hooks/useTagSelection.ts +201 -201
- package/apps/lib/layouts/CNLayout.tsx +181 -140
- package/apps/lib/layouts/DataViewCard.tsx +4 -18
- package/apps/lib/layouts/FieldSection.tsx +2 -6
- package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
- package/apps/lib/providers/ThemeProvider.tsx +8 -23
- package/apps/lib/registry.json +1004 -0
- package/apps/lib/tsconfig.json +9 -0
- package/apps/lib/utils/cn.ts +1 -1
- package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
- package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
- package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
- package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
- package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
- package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
- package/apps/lib/utils/dateFormat.ts +64 -54
- package/apps/lib/utils/markdownParser.ts +2 -7
- package/apps/lib/utils/resize.ts +21 -25
- package/apps/lib/utils/types.ts +13 -13
- package/dist/bin/index.js +8 -2
- package/dist/bin/index.js.map +1 -1
- package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
- package/dist/src/shared/getAvailableFiles.js +6 -1
- package/dist/src/shared/getAvailableFiles.js.map +1 -1
- package/dist/src/shared/loadRegistry.d.ts +7 -0
- package/dist/src/shared/loadRegistry.d.ts.map +1 -0
- package/dist/src/shared/loadRegistry.js +31 -0
- package/dist/src/shared/loadRegistry.js.map +1 -0
- package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
- package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
- package/dist/src/shared/resolveInstallPlan.js +39 -0
- package/dist/src/shared/resolveInstallPlan.js.map +1 -0
- package/dist/src/types/main.d.ts +24 -0
- package/dist/src/types/main.d.ts.map +1 -1
- package/docs/README.md +10 -2
- package/docs/components/action-button.md +30 -24
- package/docs/components/actions-group.md +26 -20
- package/docs/components/alert-dialog.md +45 -45
- package/docs/components/avatar.md +6 -2
- package/docs/components/badge-field.md +6 -2
- package/docs/components/badge.md +7 -1
- package/docs/components/breadcrumb.md +15 -40
- package/docs/components/button-group.md +13 -10
- package/docs/components/button.md +58 -33
- package/docs/components/calendar.md +26 -19
- package/docs/components/card.md +19 -16
- package/docs/components/chart-block-tool.md +128 -0
- package/docs/components/checkbox.md +16 -8
- package/docs/components/cn-layout.md +7 -1
- package/docs/components/context-menu.md +18 -25
- package/docs/components/count-badge.md +7 -1
- package/docs/components/data-table.md +45 -33
- package/docs/components/data-views-config-panel.md +15 -11
- package/docs/components/data-views-layout.md +13 -16
- package/docs/components/date-picker.md +30 -23
- package/docs/components/dialog.md +43 -42
- package/docs/components/divider.md +10 -4
- package/docs/components/drawer.md +8 -33
- package/docs/components/dropdown-menu.md +25 -34
- package/docs/components/field-hint.md +37 -25
- package/docs/components/field-section.md +9 -3
- package/docs/components/form-stepper.md +6 -0
- package/docs/components/form.md +17 -20
- package/docs/components/header-bar.md +6 -0
- package/docs/components/image-attachment.md +33 -41
- package/docs/components/inbox-view.md +16 -5
- package/docs/components/inner-label-field.md +34 -24
- package/docs/components/input-field.md +18 -10
- package/docs/components/input-otp.md +14 -11
- package/docs/components/input.md +22 -16
- package/docs/components/kanban-view.md +15 -5
- package/docs/components/label-field.md +32 -22
- package/docs/components/label.md +43 -32
- package/docs/components/labeled-check-box.md +16 -8
- package/docs/components/labeled-radio.md +18 -11
- package/docs/components/link-button.md +7 -1
- package/docs/components/login-button.md +8 -2
- package/docs/components/password-level.md +37 -24
- package/docs/components/popover.md +26 -23
- package/docs/components/profile-menu.md +38 -27
- package/docs/components/radio-card.md +16 -9
- package/docs/components/radio.md +16 -8
- package/docs/components/scroll-area.md +6 -2
- package/docs/components/search-field.md +14 -6
- package/docs/components/searchable-select.md +19 -14
- package/docs/components/searchable-table.md +18 -13
- package/docs/components/searchable-tree-dialog.md +190 -0
- package/docs/components/searchable-tree.md +200 -0
- package/docs/components/section-block.md +12 -4
- package/docs/components/select.md +23 -18
- package/docs/components/simple-select.md +14 -10
- package/docs/components/skeleton.md +43 -33
- package/docs/components/slide-date-picker.md +37 -29
- package/docs/components/spin-loading.md +32 -23
- package/docs/components/stepper.md +6 -0
- package/docs/components/switch.md +14 -6
- package/docs/components/tab-form-item.md +7 -1
- package/docs/components/tab-switch.md +13 -6
- package/docs/components/table-dnd-wrapper.md +105 -0
- package/docs/components/table-view.md +15 -5
- package/docs/components/table.md +28 -28
- package/docs/components/text-editor.md +19 -13
- package/docs/components/textarea.md +15 -7
- package/docs/components/timeline.md +6 -0
- package/docs/components/toast.md +35 -26
- package/docs/components/toggle-button.md +24 -21
- package/docs/components/toggle.md +23 -15
- package/docs/components/tooltip.md +42 -30
- package/docs/components/transparent-label.md +29 -20
- package/docs/components/tree-drop-down.md +31 -23
- package/docs/components/tree-sub-layout.md +6 -2
- package/docs/components/tree-view.md +16 -5
- package/docs/explanation/architecture.md +54 -0
- package/docs/explanation/design-system.md +52 -0
- package/docs/how-to/data-views-from-backend-response.md +6 -4
- package/docs/how-to/guides.md +24 -18
- package/docs/migration/changelog.md +38 -0
- package/docs/reference/cli.md +87 -0
- package/docs/reference/components.md +11 -12
- package/docs/reference/hooks.md +8 -8
- package/docs/reference/providers.md +22 -22
- package/docs/reference/tailwind-plugins.md +2 -2
- package/docs/reference/theme.md +85 -0
- package/docs/reference/types.md +4 -4
- package/docs/reference/utilities.md +19 -26
- package/docs/tutorials/building-first-form.md +20 -13
- package/docs/tutorials/component-composition.md +34 -50
- package/docs/tutorials/getting-started.md +2 -2
- package/docs/tutorials/theming-basics.md +13 -10
- package/package.json +31 -3
- package/dist/src/commands/block.d.ts +0 -5
- package/dist/src/commands/block.d.ts.map +0 -1
- package/dist/src/commands/block.js +0 -255
- package/dist/src/commands/block.js.map +0 -1
- package/dist/src/shared/configureFonts.d.ts +0 -6
- package/dist/src/shared/configureFonts.d.ts.map +0 -1
- package/dist/src/shared/configureFonts.js +0 -106
- package/dist/src/shared/configureFonts.js.map +0 -1
- package/dist/src/shared/configureGlobalCss.d.ts +0 -6
- package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
- package/dist/src/shared/configureGlobalCss.js +0 -154
- package/dist/src/shared/configureGlobalCss.js.map +0 -1
- package/dist/src/shared/configureTailwind.d.ts +0 -7
- package/dist/src/shared/configureTailwind.d.ts.map +0 -1
- package/dist/src/shared/configureTailwind.js +0 -163
- package/dist/src/shared/configureTailwind.js.map +0 -1
- package/dist/src/shared/detectFramework.d.ts +0 -23
- package/dist/src/shared/detectFramework.d.ts.map +0 -1
- package/dist/src/shared/detectFramework.js +0 -119
- package/dist/src/shared/detectFramework.js.map +0 -1
- package/dist/src/shared/installBaseUtils.d.ts +0 -5
- package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
- package/dist/src/shared/installBaseUtils.js +0 -79
- package/dist/src/shared/installBaseUtils.js.map +0 -1
- package/dist/src/shared/resolveAliases.d.ts +0 -24
- package/dist/src/shared/resolveAliases.d.ts.map +0 -1
- package/dist/src/shared/resolveAliases.js +0 -98
- package/dist/src/shared/resolveAliases.js.map +0 -1
|
@@ -11,22 +11,10 @@ import {
|
|
|
11
11
|
} from "react";
|
|
12
12
|
import { cn } from "../utils/cn";
|
|
13
13
|
import { Themes } from "../utils/types";
|
|
14
|
-
import {
|
|
15
|
-
Dialog,
|
|
16
|
-
DialogTrigger,
|
|
17
|
-
DialogContent,
|
|
18
|
-
DialogTitle,
|
|
19
|
-
} from "./Dialog";
|
|
14
|
+
import { Dialog, DialogTrigger, DialogContent, DialogTitle } from "./Dialog";
|
|
20
15
|
import { Icon, Input, Group } from "./Input";
|
|
21
16
|
import { LoadingIcon } from "./Button";
|
|
22
|
-
import {
|
|
23
|
-
Table,
|
|
24
|
-
TableHeader,
|
|
25
|
-
TableBody,
|
|
26
|
-
TableHead,
|
|
27
|
-
TableRow,
|
|
28
|
-
TableCell,
|
|
29
|
-
} from "./Table";
|
|
17
|
+
import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from "./Table";
|
|
30
18
|
|
|
31
19
|
/**
|
|
32
20
|
* SearchableTable — a field that opens a modal Dialog to pick a row from a Table.
|
|
@@ -119,8 +107,7 @@ export function SearchableTable<T extends Record<string, unknown>>({
|
|
|
119
107
|
const inputRef = useRef<HTMLInputElement | null>(null);
|
|
120
108
|
|
|
121
109
|
const rowId = (row: T) => getRowId?.(row) ?? JSON.stringify(row);
|
|
122
|
-
const label = (row: T) =>
|
|
123
|
-
getLabel?.(row) ?? String(row[columns[0]?.key] ?? "");
|
|
110
|
+
const label = (row: T) => getLabel?.(row) ?? String(row[columns[0]?.key] ?? "");
|
|
124
111
|
|
|
125
112
|
const keysToSearch = searchKeys ?? columns.map((c) => c.key);
|
|
126
113
|
|
|
@@ -154,8 +141,10 @@ export function SearchableTable<T extends Record<string, unknown>>({
|
|
|
154
141
|
if (!q) return rows;
|
|
155
142
|
return rows.filter((row) =>
|
|
156
143
|
keysToSearch.some((k) =>
|
|
157
|
-
String(row[k] ?? "")
|
|
158
|
-
|
|
144
|
+
String(row[k] ?? "")
|
|
145
|
+
.toLowerCase()
|
|
146
|
+
.includes(q),
|
|
147
|
+
),
|
|
159
148
|
);
|
|
160
149
|
}, [rows, search, keysToSearch, filterClientSide]);
|
|
161
150
|
|
|
@@ -177,10 +166,7 @@ export function SearchableTable<T extends Record<string, unknown>>({
|
|
|
177
166
|
size={size === "XS" ? "S" : size}
|
|
178
167
|
role="button"
|
|
179
168
|
tabIndex={0}
|
|
180
|
-
className={cn(
|
|
181
|
-
"flex w-full items-center gap-1 p-1 cursor-pointer",
|
|
182
|
-
className
|
|
183
|
-
)}
|
|
169
|
+
className={cn("flex w-full items-center gap-1 p-1 cursor-pointer", className)}
|
|
184
170
|
>
|
|
185
171
|
{icon && <Icon>{icon}</Icon>}
|
|
186
172
|
<span
|
|
@@ -188,12 +174,12 @@ export function SearchableTable<T extends Record<string, unknown>>({
|
|
|
188
174
|
"flex-1 px-1 truncate typography-body-medium-regular",
|
|
189
175
|
value
|
|
190
176
|
? "text-content-presentation-action-light-primary"
|
|
191
|
-
: "text-content-presentation-action-light-secondary"
|
|
177
|
+
: "text-content-presentation-action-light-secondary",
|
|
192
178
|
)}
|
|
193
179
|
>
|
|
194
180
|
{value ? label(value) : placeholder}
|
|
195
181
|
</span>
|
|
196
|
-
<i className="ri-arrow-down-s-line text-[
|
|
182
|
+
<i className="ri-arrow-down-s-line text-[20px] shrink-0 text-content-presentation-action-light-primary" />
|
|
197
183
|
</Group>
|
|
198
184
|
</DialogTrigger>
|
|
199
185
|
|
|
@@ -206,7 +192,7 @@ export function SearchableTable<T extends Record<string, unknown>>({
|
|
|
206
192
|
inputRef.current?.focus();
|
|
207
193
|
}}
|
|
208
194
|
className={cn(
|
|
209
|
-
"w-[min(640px,90vw)] bg-transparent !items-stretch rounded-[14px]
|
|
195
|
+
"w-[min(640px,90vw)] bg-transparent !items-stretch rounded-[14px] shadow-none",
|
|
210
196
|
)}
|
|
211
197
|
>
|
|
212
198
|
{/* Visually-hidden title for accessibility (Radix requires a DialogTitle). */}
|
|
@@ -225,72 +211,74 @@ export function SearchableTable<T extends Record<string, unknown>>({
|
|
|
225
211
|
/>
|
|
226
212
|
|
|
227
213
|
{/* Scrollable table area */}
|
|
228
|
-
<div
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
<Table
|
|
235
|
-
theme={theme as never}
|
|
236
|
-
data-theme="dark"
|
|
237
|
-
className="w-full rounded-[10px] overflow-hidden"
|
|
214
|
+
<div className=" w-full flex justify-center">
|
|
215
|
+
<div className="bg-[#696a6f] pt-[8px] rounded-b-[14px] pr-[4px] pb-[4px] pl-[4px] w-[95%] shadow-[0_0_32px_2px_rgba(0,0,0,0.20),0_0_48px_2px_rgba(0,0,0,0.05)]">
|
|
216
|
+
<div
|
|
217
|
+
ref={scrollRef}
|
|
218
|
+
onScroll={handleScroll}
|
|
219
|
+
className="max-h-[55vh] overflow-auto scrollbar-hide rounded-[10px] border border-white-alpha-40 bg-[rgba(184,192,204,0.5)]"
|
|
238
220
|
>
|
|
239
|
-
|
|
240
|
-
<
|
|
241
|
-
{
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
</TableHead>
|
|
248
|
-
))}
|
|
249
|
-
</TableRow>
|
|
250
|
-
</TableHeader>
|
|
251
|
-
<TableBody>
|
|
252
|
-
{filteredRows.map((row) => {
|
|
253
|
-
const id = rowId(row);
|
|
254
|
-
return (
|
|
255
|
-
<TableRow
|
|
256
|
-
key={id}
|
|
257
|
-
state={selectedId === id ? "selected" : undefined}
|
|
258
|
-
onClick={() => handleSelect(row)}
|
|
259
|
-
className={cn(
|
|
260
|
-
"cursor-pointer h-[40px]",
|
|
261
|
-
selectedId === id && "bg-white-alpha-50"
|
|
262
|
-
)}
|
|
263
|
-
>
|
|
221
|
+
{filteredRows.length > 0 && (
|
|
222
|
+
<Table
|
|
223
|
+
theme={theme as never}
|
|
224
|
+
data-theme="dark"
|
|
225
|
+
className="w-full rounded-[10px] overflow-hidden"
|
|
226
|
+
>
|
|
227
|
+
<TableHeader className="bg-black-alpha-20 shadow-[0px_4px_8px_0px_rgba(0,0,0,0.15)]">
|
|
228
|
+
<TableRow className="h-[44px] [&_button]:bg-white-alpha-40 [&>th]:border-white-alpha-20">
|
|
264
229
|
{columns.map((col) => (
|
|
265
|
-
<
|
|
230
|
+
<TableHead
|
|
266
231
|
key={col.key}
|
|
267
|
-
className="
|
|
232
|
+
className="cursor-default typography-body-medium-medium text-white"
|
|
268
233
|
>
|
|
269
|
-
{col.
|
|
270
|
-
|
|
271
|
-
: String(row[col.key] ?? "")}
|
|
272
|
-
</TableCell>
|
|
234
|
+
{col.header}
|
|
235
|
+
</TableHead>
|
|
273
236
|
))}
|
|
274
237
|
</TableRow>
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
238
|
+
</TableHeader>
|
|
239
|
+
<TableBody>
|
|
240
|
+
{filteredRows.map((row) => {
|
|
241
|
+
const id = rowId(row);
|
|
242
|
+
return (
|
|
243
|
+
<TableRow
|
|
244
|
+
key={id}
|
|
245
|
+
state={selectedId === id ? "selected" : undefined}
|
|
246
|
+
onClick={() => handleSelect(row)}
|
|
247
|
+
className={cn(
|
|
248
|
+
"cursor-pointer h-[40px]",
|
|
249
|
+
selectedId === id && "bg-white-alpha-50",
|
|
250
|
+
)}
|
|
251
|
+
>
|
|
252
|
+
{columns.map((col) => (
|
|
253
|
+
<TableCell
|
|
254
|
+
key={col.key}
|
|
255
|
+
className="border-b border-white-alpha-20 text-white px-[8px] !whitespace-nowrap !break-normal"
|
|
256
|
+
>
|
|
257
|
+
{col.render ? col.render(row) : String(row[col.key] ?? "")}
|
|
258
|
+
</TableCell>
|
|
259
|
+
))}
|
|
260
|
+
</TableRow>
|
|
261
|
+
);
|
|
262
|
+
})}
|
|
263
|
+
</TableBody>
|
|
264
|
+
</Table>
|
|
265
|
+
)}
|
|
280
266
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
267
|
+
{/* Empty state — only when nothing is loading. */}
|
|
268
|
+
{filteredRows.length === 0 && !loading && (
|
|
269
|
+
<div className="px-3 py-6 text-center typography-body-small-regular text-white-alpha-75">
|
|
270
|
+
No results found
|
|
271
|
+
</div>
|
|
272
|
+
)}
|
|
287
273
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
274
|
+
{/* Loading row (initial load or fetching the next page). */}
|
|
275
|
+
{loading && (
|
|
276
|
+
<div className="flex items-center justify-center py-3">
|
|
277
|
+
<LoadingIcon size="M" />
|
|
278
|
+
</div>
|
|
279
|
+
)}
|
|
292
280
|
</div>
|
|
293
|
-
|
|
281
|
+
</div>
|
|
294
282
|
</div>
|
|
295
283
|
</DialogContent>
|
|
296
284
|
</Dialog>
|
|
@@ -304,8 +292,7 @@ SearchableTable.displayName = "SearchableTable";
|
|
|
304
292
|
/* The whole field + its text turn white on hover/focus, fully controlled here. */
|
|
305
293
|
/* -------------------------------------------------------------------------- */
|
|
306
294
|
|
|
307
|
-
interface SearchInputProps
|
|
308
|
-
extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
295
|
+
interface SearchInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
309
296
|
variant?: "SystemStyle" | "PresentationStyle";
|
|
310
297
|
theme?: Themes;
|
|
311
298
|
label?: string;
|
|
@@ -313,41 +300,44 @@ interface SearchInputProps
|
|
|
313
300
|
|
|
314
301
|
const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(
|
|
315
302
|
({ variant = "PresentationStyle", theme, label, className, ...props }, ref) => (
|
|
316
|
-
<
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
"group flex w-full items-center gap-2 p-1 rounded-[10px] transition-colors",
|
|
322
|
-
"border border-white-alpha-40 bg-[rgba(184,192,204,0.5)]",
|
|
323
|
-
"hover:bg-background-presentation-table-row-hover",
|
|
324
|
-
"focus-within:bg-background-presentation-table-row-hover",
|
|
325
|
-
className
|
|
326
|
-
)}
|
|
327
|
-
>
|
|
328
|
-
<Icon className="shrink-0">
|
|
329
|
-
<i className="ri-search-line text-content-presentation-global-secondary transition-colors group-hover:text-white group-focus-within:text-white" />
|
|
330
|
-
</Icon>
|
|
331
|
-
|
|
332
|
-
{label && (
|
|
333
|
-
<>
|
|
334
|
-
<span className="shrink-0 px-1 typography-labels-small-regular text-content-presentation-global-secondary text-[14px] text-white transition-colors group-hover:text-white group-focus-within:text-white">
|
|
335
|
-
{label}
|
|
336
|
-
</span>
|
|
337
|
-
<span className="h-[14px] w-px shrink-0 rounded-full bg-border-presentation-action-labelless-divider transition-colors group-hover:bg-white-alpha-40" />
|
|
338
|
-
</>
|
|
339
|
-
)}
|
|
340
|
-
|
|
341
|
-
<Input
|
|
342
|
-
ref={ref}
|
|
343
|
-
{...props}
|
|
303
|
+
<div className="flex p-[3px] flex-col gap-[10px] rounded-[14px] bg-[rgba(61,64,69,0.65)] shadow-[0_0_18px_0_rgba(0,0,0,0.40)] backdrop-blur-[21px]">
|
|
304
|
+
<Group
|
|
305
|
+
data-theme={theme}
|
|
306
|
+
variant={variant}
|
|
307
|
+
size="M"
|
|
344
308
|
className={cn(
|
|
345
|
-
"
|
|
346
|
-
"
|
|
347
|
-
"
|
|
309
|
+
"group flex w-full items-center gap-2 p-1 rounded-[10px] transition-colors",
|
|
310
|
+
"border border-white-alpha-40 bg-[rgba(184,192,204,0.5)]",
|
|
311
|
+
"hover:bg-background-presentation-table-row-hover",
|
|
312
|
+
"focus-within:bg-background-presentation-table-row-hover rounded-[11px] border border-white-alpha-40 bg-[rgba(37,44,57,0.30)]",
|
|
313
|
+
className,
|
|
314
|
+
)}
|
|
315
|
+
>
|
|
316
|
+
<Icon className="shrink-0">
|
|
317
|
+
<i className="ri-search-line text-content-presentation-global-secondary transition-colors group-hover:text-white group-focus-within:text-white" />
|
|
318
|
+
</Icon>
|
|
319
|
+
|
|
320
|
+
{label && (
|
|
321
|
+
<>
|
|
322
|
+
<span className="shrink-0 px-1 typography-labels-small-regular text-content-presentation-global-secondary text-[14px] text-white transition-colors group-hover:text-white group-focus-within:text-white">
|
|
323
|
+
{label}
|
|
324
|
+
</span>
|
|
325
|
+
<span className="h-[14px] w-px shrink-0 rounded-full bg-border-presentation-action-labelless-divider transition-colors group-hover:bg-white-alpha-40" />
|
|
326
|
+
</>
|
|
348
327
|
)}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
328
|
+
|
|
329
|
+
<Input
|
|
330
|
+
ref={ref}
|
|
331
|
+
{...props}
|
|
332
|
+
className={cn(
|
|
333
|
+
"min-w-[100px] flex-1 !h-[24px] bg-transparent",
|
|
334
|
+
"text-content-presentation-action-light-primary",
|
|
335
|
+
"placeholder:hover:text-white-alpha-75",
|
|
336
|
+
"transition-colors group-hover:!text-white group-focus-within:!text-white",
|
|
337
|
+
)}
|
|
338
|
+
/>
|
|
339
|
+
</Group>
|
|
340
|
+
</div>
|
|
341
|
+
),
|
|
352
342
|
);
|
|
353
343
|
SearchInput.displayName = "SearchInput";
|