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.
Files changed (264) hide show
  1. package/README.md +8 -0
  2. package/apps/lib/components/ActionButton.tsx +7 -12
  3. package/apps/lib/components/ActionsGroup.tsx +4 -15
  4. package/apps/lib/components/AlertDialog.tsx +173 -191
  5. package/apps/lib/components/Avatar.tsx +13 -16
  6. package/apps/lib/components/Badge.tsx +1 -3
  7. package/apps/lib/components/BadgeField.tsx +76 -71
  8. package/apps/lib/components/Breadcrumb.tsx +49 -85
  9. package/apps/lib/components/Button.tsx +20 -19
  10. package/apps/lib/components/ButtonGroup.tsx +31 -41
  11. package/apps/lib/components/Calendar.tsx +51 -29
  12. package/apps/lib/components/Card.tsx +2 -13
  13. package/apps/lib/components/ChartBlockTool.ts +17 -52
  14. package/apps/lib/components/Checkbox.tsx +9 -16
  15. package/apps/lib/components/ContextMenu.tsx +97 -96
  16. package/apps/lib/components/CountBadge.tsx +4 -6
  17. package/apps/lib/components/DataTable.tsx +196 -216
  18. package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
  19. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
  20. package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
  21. package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
  22. package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
  23. package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
  24. package/apps/lib/components/DataViews/InboxView.tsx +22 -68
  25. package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
  26. package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
  27. package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
  28. package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
  29. package/apps/lib/components/DataViews/TableView.tsx +8 -28
  30. package/apps/lib/components/DataViews/TreeView.tsx +12 -40
  31. package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
  32. package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
  33. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
  34. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
  35. package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
  36. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
  37. package/apps/lib/components/DataViews/index.ts +26 -26
  38. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
  39. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
  40. package/apps/lib/components/DataViews/types.ts +104 -115
  41. package/apps/lib/components/DatePicker.tsx +198 -196
  42. package/apps/lib/components/Dialog.tsx +92 -105
  43. package/apps/lib/components/Divider.tsx +21 -24
  44. package/apps/lib/components/Drawer.tsx +79 -139
  45. package/apps/lib/components/DropdownMenu.tsx +131 -171
  46. package/apps/lib/components/FieldHint.tsx +4 -11
  47. package/apps/lib/components/Form.tsx +146 -155
  48. package/apps/lib/components/FormStepper.tsx +9 -39
  49. package/apps/lib/components/HeaderBar.tsx +1 -9
  50. package/apps/lib/components/ImageAttachment.tsx +111 -73
  51. package/apps/lib/components/InnerLabelField.tsx +20 -16
  52. package/apps/lib/components/Input.tsx +171 -172
  53. package/apps/lib/components/InputField.tsx +44 -45
  54. package/apps/lib/components/InputOTP.tsx +68 -69
  55. package/apps/lib/components/Label.tsx +31 -35
  56. package/apps/lib/components/LabelField.tsx +4 -5
  57. package/apps/lib/components/LabeledCheckBox.tsx +8 -12
  58. package/apps/lib/components/LabeledRadio.tsx +7 -5
  59. package/apps/lib/components/LinkButton.tsx +2 -9
  60. package/apps/lib/components/LoginButton.tsx +4 -9
  61. package/apps/lib/components/PasswordLevel.tsx +5 -5
  62. package/apps/lib/components/Popover.tsx +15 -33
  63. package/apps/lib/components/ProfileMenu.tsx +67 -72
  64. package/apps/lib/components/Radio.tsx +1 -5
  65. package/apps/lib/components/RadioCard.tsx +9 -28
  66. package/apps/lib/components/ScrollArea.tsx +45 -43
  67. package/apps/lib/components/SearchField.tsx +49 -39
  68. package/apps/lib/components/SearchableSelect.tsx +8 -14
  69. package/apps/lib/components/SearchableTable.tsx +108 -118
  70. package/apps/lib/components/SearchableTree.tsx +469 -0
  71. package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
  72. package/apps/lib/components/SectionBlock.tsx +4 -16
  73. package/apps/lib/components/Select.tsx +53 -80
  74. package/apps/lib/components/SimpleSelect.tsx +196 -187
  75. package/apps/lib/components/Skeleton.tsx +9 -12
  76. package/apps/lib/components/SlideDatePicker.tsx +215 -166
  77. package/apps/lib/components/SpinLoading.tsx +33 -49
  78. package/apps/lib/components/Stepper.tsx +13 -56
  79. package/apps/lib/components/Switch.tsx +8 -10
  80. package/apps/lib/components/TabFormItem.tsx +3 -12
  81. package/apps/lib/components/TabSwitch.tsx +7 -34
  82. package/apps/lib/components/Table.tsx +60 -75
  83. package/apps/lib/components/TableDnDWrapper.ts +15 -48
  84. package/apps/lib/components/TextEditor.tsx +93 -104
  85. package/apps/lib/components/Textarea.tsx +8 -12
  86. package/apps/lib/components/Timeline.tsx +21 -41
  87. package/apps/lib/components/Toast.tsx +83 -83
  88. package/apps/lib/components/Toggle.tsx +112 -114
  89. package/apps/lib/components/ToggleButton.tsx +1 -1
  90. package/apps/lib/components/Tooltip.tsx +24 -19
  91. package/apps/lib/components/TransparentLabel.tsx +61 -62
  92. package/apps/lib/components/TreeDropDown.tsx +86 -52
  93. package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
  94. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
  95. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
  96. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
  97. package/apps/lib/components/TreeFolder/icons.tsx +14 -17
  98. package/apps/lib/components/TreeFolder/index.ts +15 -8
  99. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
  100. package/apps/lib/components/TreeFolder/types.ts +32 -32
  101. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
  102. package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
  103. package/apps/lib/hooks/useClickOutside.ts +21 -20
  104. package/apps/lib/hooks/useDataViewsState.ts +86 -80
  105. package/apps/lib/hooks/useIsMobile.ts +12 -12
  106. package/apps/lib/hooks/useResize.ts +54 -65
  107. package/apps/lib/hooks/useTagSelection.ts +201 -201
  108. package/apps/lib/layouts/CNLayout.tsx +181 -140
  109. package/apps/lib/layouts/DataViewCard.tsx +4 -18
  110. package/apps/lib/layouts/FieldSection.tsx +2 -6
  111. package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
  112. package/apps/lib/providers/ThemeProvider.tsx +8 -23
  113. package/apps/lib/registry.json +1004 -0
  114. package/apps/lib/tsconfig.json +9 -0
  115. package/apps/lib/utils/cn.ts +1 -1
  116. package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
  117. package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
  118. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
  119. package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
  120. package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
  121. package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
  122. package/apps/lib/utils/dateFormat.ts +64 -54
  123. package/apps/lib/utils/markdownParser.ts +2 -7
  124. package/apps/lib/utils/resize.ts +21 -25
  125. package/apps/lib/utils/types.ts +13 -13
  126. package/dist/bin/index.js +8 -2
  127. package/dist/bin/index.js.map +1 -1
  128. package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
  129. package/dist/src/shared/getAvailableFiles.js +6 -1
  130. package/dist/src/shared/getAvailableFiles.js.map +1 -1
  131. package/dist/src/shared/loadRegistry.d.ts +7 -0
  132. package/dist/src/shared/loadRegistry.d.ts.map +1 -0
  133. package/dist/src/shared/loadRegistry.js +31 -0
  134. package/dist/src/shared/loadRegistry.js.map +1 -0
  135. package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
  136. package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
  137. package/dist/src/shared/resolveInstallPlan.js +39 -0
  138. package/dist/src/shared/resolveInstallPlan.js.map +1 -0
  139. package/dist/src/types/main.d.ts +24 -0
  140. package/dist/src/types/main.d.ts.map +1 -1
  141. package/docs/README.md +10 -2
  142. package/docs/components/action-button.md +30 -24
  143. package/docs/components/actions-group.md +26 -20
  144. package/docs/components/alert-dialog.md +45 -45
  145. package/docs/components/avatar.md +6 -2
  146. package/docs/components/badge-field.md +6 -2
  147. package/docs/components/badge.md +7 -1
  148. package/docs/components/breadcrumb.md +15 -40
  149. package/docs/components/button-group.md +13 -10
  150. package/docs/components/button.md +58 -33
  151. package/docs/components/calendar.md +26 -19
  152. package/docs/components/card.md +19 -16
  153. package/docs/components/chart-block-tool.md +128 -0
  154. package/docs/components/checkbox.md +16 -8
  155. package/docs/components/cn-layout.md +7 -1
  156. package/docs/components/context-menu.md +18 -25
  157. package/docs/components/count-badge.md +7 -1
  158. package/docs/components/data-table.md +45 -33
  159. package/docs/components/data-views-config-panel.md +15 -11
  160. package/docs/components/data-views-layout.md +13 -16
  161. package/docs/components/date-picker.md +30 -23
  162. package/docs/components/dialog.md +43 -42
  163. package/docs/components/divider.md +10 -4
  164. package/docs/components/drawer.md +8 -33
  165. package/docs/components/dropdown-menu.md +25 -34
  166. package/docs/components/field-hint.md +37 -25
  167. package/docs/components/field-section.md +9 -3
  168. package/docs/components/form-stepper.md +6 -0
  169. package/docs/components/form.md +17 -20
  170. package/docs/components/header-bar.md +6 -0
  171. package/docs/components/image-attachment.md +33 -41
  172. package/docs/components/inbox-view.md +16 -5
  173. package/docs/components/inner-label-field.md +34 -24
  174. package/docs/components/input-field.md +18 -10
  175. package/docs/components/input-otp.md +14 -11
  176. package/docs/components/input.md +22 -16
  177. package/docs/components/kanban-view.md +15 -5
  178. package/docs/components/label-field.md +32 -22
  179. package/docs/components/label.md +43 -32
  180. package/docs/components/labeled-check-box.md +16 -8
  181. package/docs/components/labeled-radio.md +18 -11
  182. package/docs/components/link-button.md +7 -1
  183. package/docs/components/login-button.md +8 -2
  184. package/docs/components/password-level.md +37 -24
  185. package/docs/components/popover.md +26 -23
  186. package/docs/components/profile-menu.md +38 -27
  187. package/docs/components/radio-card.md +16 -9
  188. package/docs/components/radio.md +16 -8
  189. package/docs/components/scroll-area.md +6 -2
  190. package/docs/components/search-field.md +14 -6
  191. package/docs/components/searchable-select.md +19 -14
  192. package/docs/components/searchable-table.md +18 -13
  193. package/docs/components/searchable-tree-dialog.md +190 -0
  194. package/docs/components/searchable-tree.md +200 -0
  195. package/docs/components/section-block.md +12 -4
  196. package/docs/components/select.md +23 -18
  197. package/docs/components/simple-select.md +14 -10
  198. package/docs/components/skeleton.md +43 -33
  199. package/docs/components/slide-date-picker.md +37 -29
  200. package/docs/components/spin-loading.md +32 -23
  201. package/docs/components/stepper.md +6 -0
  202. package/docs/components/switch.md +14 -6
  203. package/docs/components/tab-form-item.md +7 -1
  204. package/docs/components/tab-switch.md +13 -6
  205. package/docs/components/table-dnd-wrapper.md +105 -0
  206. package/docs/components/table-view.md +15 -5
  207. package/docs/components/table.md +28 -28
  208. package/docs/components/text-editor.md +19 -13
  209. package/docs/components/textarea.md +15 -7
  210. package/docs/components/timeline.md +6 -0
  211. package/docs/components/toast.md +35 -26
  212. package/docs/components/toggle-button.md +24 -21
  213. package/docs/components/toggle.md +23 -15
  214. package/docs/components/tooltip.md +42 -30
  215. package/docs/components/transparent-label.md +29 -20
  216. package/docs/components/tree-drop-down.md +31 -23
  217. package/docs/components/tree-sub-layout.md +6 -2
  218. package/docs/components/tree-view.md +16 -5
  219. package/docs/explanation/architecture.md +54 -0
  220. package/docs/explanation/design-system.md +52 -0
  221. package/docs/how-to/data-views-from-backend-response.md +6 -4
  222. package/docs/how-to/guides.md +24 -18
  223. package/docs/migration/changelog.md +38 -0
  224. package/docs/reference/cli.md +87 -0
  225. package/docs/reference/components.md +11 -12
  226. package/docs/reference/hooks.md +8 -8
  227. package/docs/reference/providers.md +22 -22
  228. package/docs/reference/tailwind-plugins.md +2 -2
  229. package/docs/reference/theme.md +85 -0
  230. package/docs/reference/types.md +4 -4
  231. package/docs/reference/utilities.md +19 -26
  232. package/docs/tutorials/building-first-form.md +20 -13
  233. package/docs/tutorials/component-composition.md +34 -50
  234. package/docs/tutorials/getting-started.md +2 -2
  235. package/docs/tutorials/theming-basics.md +13 -10
  236. package/package.json +31 -3
  237. package/dist/src/commands/block.d.ts +0 -5
  238. package/dist/src/commands/block.d.ts.map +0 -1
  239. package/dist/src/commands/block.js +0 -255
  240. package/dist/src/commands/block.js.map +0 -1
  241. package/dist/src/shared/configureFonts.d.ts +0 -6
  242. package/dist/src/shared/configureFonts.d.ts.map +0 -1
  243. package/dist/src/shared/configureFonts.js +0 -106
  244. package/dist/src/shared/configureFonts.js.map +0 -1
  245. package/dist/src/shared/configureGlobalCss.d.ts +0 -6
  246. package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
  247. package/dist/src/shared/configureGlobalCss.js +0 -154
  248. package/dist/src/shared/configureGlobalCss.js.map +0 -1
  249. package/dist/src/shared/configureTailwind.d.ts +0 -7
  250. package/dist/src/shared/configureTailwind.d.ts.map +0 -1
  251. package/dist/src/shared/configureTailwind.js +0 -163
  252. package/dist/src/shared/configureTailwind.js.map +0 -1
  253. package/dist/src/shared/detectFramework.d.ts +0 -23
  254. package/dist/src/shared/detectFramework.d.ts.map +0 -1
  255. package/dist/src/shared/detectFramework.js +0 -119
  256. package/dist/src/shared/detectFramework.js.map +0 -1
  257. package/dist/src/shared/installBaseUtils.d.ts +0 -5
  258. package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
  259. package/dist/src/shared/installBaseUtils.js +0 -79
  260. package/dist/src/shared/installBaseUtils.js.map +0 -1
  261. package/dist/src/shared/resolveAliases.d.ts +0 -24
  262. package/dist/src/shared/resolveAliases.d.ts.map +0 -1
  263. package/dist/src/shared/resolveAliases.js +0 -98
  264. 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] ?? "").toLowerCase().includes(q)
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-[16px] shrink-0 text-content-presentation-action-light-primary" />
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] gap-3 shadow-none",
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
- ref={scrollRef}
230
- onScroll={handleScroll}
231
- className="max-h-[55vh] overflow-auto scrollbar-hide rounded-[10px] border border-white-alpha-40 bg-[rgba(184,192,204,0.5)]"
232
- >
233
- {filteredRows.length > 0 && (
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
- <TableHeader className="bg-black-alpha-20 shadow-[0px_4px_8px_0px_rgba(0,0,0,0.15)]">
240
- <TableRow className="h-[44px] [&_button]:bg-white-alpha-40 [&>th]:border-white-alpha-20">
241
- {columns.map((col) => (
242
- <TableHead
243
- key={col.key}
244
- className="cursor-default typography-body-medium-medium text-white"
245
- >
246
- {col.header}
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
- <TableCell
230
+ <TableHead
266
231
  key={col.key}
267
- className="border-b border-white-alpha-20 text-white px-[8px] !whitespace-nowrap !break-normal"
232
+ className="cursor-default typography-body-medium-medium text-white"
268
233
  >
269
- {col.render
270
- ? col.render(row)
271
- : String(row[col.key] ?? "")}
272
- </TableCell>
234
+ {col.header}
235
+ </TableHead>
273
236
  ))}
274
237
  </TableRow>
275
- );
276
- })}
277
- </TableBody>
278
- </Table>
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
- {/* Empty state — only when nothing is loading. */}
282
- {filteredRows.length === 0 && !loading && (
283
- <div className="px-3 py-6 text-center typography-body-small-regular text-white-alpha-75">
284
- No results found
285
- </div>
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
- {/* Loading row (initial load or fetching the next page). */}
289
- {loading && (
290
- <div className="flex items-center justify-center py-3">
291
- <LoadingIcon size="M" />
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
- <Group
317
- data-theme={theme}
318
- variant={variant}
319
- size="M"
320
- className={cn(
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
- "min-w-[100px] flex-1 !h-[24px] bg-transparent",
346
- "text-content-presentation-action-light-primary",
347
- "transition-colors group-hover:!text-white group-focus-within:!text-white"
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
- </Group>
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";