torch-glare 2.4.0 → 2.4.2

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 (318) 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 +21 -20
  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 +40 -24
  13. package/apps/lib/components/Checkbox.tsx +9 -16
  14. package/apps/lib/components/ColorPicker.tsx +441 -0
  15. package/apps/lib/components/ConclusionHeader.tsx +148 -0
  16. package/apps/lib/components/ContextMenu.tsx +97 -96
  17. package/apps/lib/components/CountBadge.tsx +4 -6
  18. package/apps/lib/components/DataTable.tsx +196 -216
  19. package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
  20. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
  21. package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
  22. package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
  23. package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
  24. package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
  25. package/apps/lib/components/DataViews/InboxView.tsx +22 -68
  26. package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
  27. package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
  28. package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
  29. package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
  30. package/apps/lib/components/DataViews/TableView.tsx +8 -28
  31. package/apps/lib/components/DataViews/TreeView.tsx +12 -40
  32. package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
  33. package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
  34. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
  35. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
  36. package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
  37. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
  38. package/apps/lib/components/DataViews/index.ts +26 -26
  39. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
  40. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
  41. package/apps/lib/components/DataViews/types.ts +104 -115
  42. package/apps/lib/components/DatePicker.tsx +200 -196
  43. package/apps/lib/components/Dialog.tsx +92 -105
  44. package/apps/lib/components/Divider.tsx +21 -24
  45. package/apps/lib/components/Drawer.tsx +124 -142
  46. package/apps/lib/components/DropdownMenu.tsx +131 -171
  47. package/apps/lib/components/FieldHint.tsx +4 -11
  48. package/apps/lib/components/Form.tsx +146 -155
  49. package/apps/lib/components/FormBuilder/DisplayField.tsx +40 -0
  50. package/apps/lib/components/FormBuilder/context.ts +71 -0
  51. package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +65 -0
  52. package/apps/lib/components/FormBuilder/fields/ColorField.tsx +76 -0
  53. package/apps/lib/components/FormBuilder/fields/CustomField.tsx +16 -0
  54. package/apps/lib/components/FormBuilder/fields/DateField.tsx +34 -0
  55. package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +79 -0
  56. package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +174 -0
  57. package/apps/lib/components/FormBuilder/fields/FileField.tsx +40 -0
  58. package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +139 -0
  59. package/apps/lib/components/FormBuilder/fields/OtpField.tsx +32 -0
  60. package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +82 -0
  61. package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +37 -0
  62. package/apps/lib/components/FormBuilder/fields/SelectField.tsx +101 -0
  63. package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +175 -0
  64. package/apps/lib/components/FormBuilder/fields/SliderField.tsx +72 -0
  65. package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +42 -0
  66. package/apps/lib/components/FormBuilder/fields/TableField.tsx +312 -0
  67. package/apps/lib/components/FormBuilder/fields/TextField.tsx +222 -0
  68. package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +49 -0
  69. package/apps/lib/components/FormBuilder/fields/countries.ts +303 -0
  70. package/apps/lib/components/FormBuilder/fields/index.ts +25 -0
  71. package/apps/lib/components/FormBuilder/form-builder.tsx +292 -0
  72. package/apps/lib/components/FormBuilder/header.tsx +105 -0
  73. package/apps/lib/components/FormBuilder/index.ts +37 -0
  74. package/apps/lib/components/FormBuilder/numberFormat.ts +16 -0
  75. package/apps/lib/components/FormBuilder/stepper.tsx +217 -0
  76. package/apps/lib/components/FormBuilder/submit.tsx +41 -0
  77. package/apps/lib/components/FormBuilder/types.ts +264 -0
  78. package/apps/lib/components/FormBuilder/viewFormat.tsx +137 -0
  79. package/apps/lib/components/FormRenderer/FormDrawer.tsx +121 -0
  80. package/apps/lib/components/FormRenderer/form-renderer.tsx +113 -0
  81. package/apps/lib/components/FormRenderer/index.ts +9 -0
  82. package/apps/lib/components/FormRenderer/types.ts +79 -0
  83. package/apps/lib/components/FormStepper.tsx +9 -39
  84. package/apps/lib/components/FormSummary.tsx +282 -0
  85. package/apps/lib/components/HeaderBar.tsx +1 -9
  86. package/apps/lib/components/ImageAttachment.tsx +106 -93
  87. package/apps/lib/components/InnerLabelField.tsx +20 -16
  88. package/apps/lib/components/Input.tsx +171 -172
  89. package/apps/lib/components/InputField.tsx +44 -45
  90. package/apps/lib/components/InputOTP.tsx +68 -69
  91. package/apps/lib/components/Label.tsx +61 -58
  92. package/apps/lib/components/LabelField.tsx +4 -5
  93. package/apps/lib/components/LabeledCheckBox.tsx +8 -12
  94. package/apps/lib/components/LabeledRadio.tsx +7 -5
  95. package/apps/lib/components/LinkButton.tsx +2 -9
  96. package/apps/lib/components/LoginButton.tsx +4 -9
  97. package/apps/lib/components/PasswordLevel.tsx +5 -5
  98. package/apps/lib/components/Popover.tsx +15 -33
  99. package/apps/lib/components/ProfileMenu.tsx +67 -72
  100. package/apps/lib/components/Radio.tsx +1 -5
  101. package/apps/lib/components/RadioCard.tsx +11 -28
  102. package/apps/lib/components/ScrollArea.tsx +45 -43
  103. package/apps/lib/components/SearchField.tsx +49 -39
  104. package/apps/lib/components/SearchableSelect.tsx +16 -16
  105. package/apps/lib/components/SearchableTable.tsx +108 -118
  106. package/apps/lib/components/SearchableTree.tsx +469 -0
  107. package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
  108. package/apps/lib/components/SectionBlock.tsx +19 -23
  109. package/apps/lib/components/Select.tsx +80 -186
  110. package/apps/lib/components/SimpleSelect.tsx +196 -187
  111. package/apps/lib/components/Skeleton.tsx +9 -12
  112. package/apps/lib/components/SlideDatePicker.tsx +215 -166
  113. package/apps/lib/components/SpinLoading.tsx +33 -49
  114. package/apps/lib/components/Stepper.tsx +13 -56
  115. package/apps/lib/components/Switch.tsx +8 -10
  116. package/apps/lib/components/TabFormItem.tsx +3 -12
  117. package/apps/lib/components/TabSwitch.tsx +7 -34
  118. package/apps/lib/components/Table.tsx +60 -75
  119. package/apps/lib/components/{ChartBlockTool.ts → TextEditor/ChartBlockTool.ts} +17 -52
  120. package/apps/lib/components/TextEditor/RichTextField.tsx +46 -0
  121. package/apps/lib/components/{TableDnDWrapper.ts → TextEditor/TableDnDWrapper.ts} +15 -48
  122. package/apps/lib/components/{TextEditor.tsx → TextEditor/TextEditor.tsx} +156 -113
  123. package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +429 -0
  124. package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +70 -0
  125. package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +50 -0
  126. package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +48 -0
  127. package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +98 -0
  128. package/apps/lib/{types → components/TextEditor}/editorjs.d.ts +19 -0
  129. package/apps/lib/components/TextEditor/index.ts +7 -0
  130. package/apps/lib/{utils → components/TextEditor}/markdownParser.ts +2 -7
  131. package/apps/lib/components/Textarea.tsx +9 -13
  132. package/apps/lib/components/Timeline.tsx +21 -41
  133. package/apps/lib/components/Toast.tsx +83 -83
  134. package/apps/lib/components/Toggle.tsx +112 -114
  135. package/apps/lib/components/ToggleButton.tsx +1 -1
  136. package/apps/lib/components/Tooltip.tsx +24 -19
  137. package/apps/lib/components/TransparentLabel.tsx +61 -62
  138. package/apps/lib/components/TreeDropDown.tsx +86 -52
  139. package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
  140. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
  141. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
  142. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
  143. package/apps/lib/components/TreeFolder/icons.tsx +14 -17
  144. package/apps/lib/components/TreeFolder/index.ts +15 -8
  145. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
  146. package/apps/lib/components/TreeFolder/types.ts +32 -32
  147. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
  148. package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
  149. package/apps/lib/hooks/useClickOutside.ts +21 -20
  150. package/apps/lib/hooks/useDataViewsState.ts +86 -80
  151. package/apps/lib/hooks/useIsMobile.ts +12 -12
  152. package/apps/lib/hooks/useResize.ts +54 -65
  153. package/apps/lib/hooks/useTagSelection.ts +201 -201
  154. package/apps/lib/layouts/CNLayout.tsx +181 -140
  155. package/apps/lib/layouts/DataViewCard.tsx +4 -18
  156. package/apps/lib/layouts/FieldSection.tsx +2 -6
  157. package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
  158. package/apps/lib/providers/ThemeProvider.tsx +8 -23
  159. package/apps/lib/registry.json +997 -0
  160. package/apps/lib/tsconfig.json +9 -0
  161. package/apps/lib/tsconfig.tsbuildinfo +1 -0
  162. package/apps/lib/utils/cn.ts +1 -1
  163. package/apps/lib/utils/color.ts +175 -0
  164. package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
  165. package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
  166. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
  167. package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
  168. package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
  169. package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
  170. package/apps/lib/utils/dateFormat.ts +64 -54
  171. package/apps/lib/utils/resize.ts +21 -25
  172. package/apps/lib/utils/types.ts +13 -13
  173. package/dist/bin/index.js +8 -2
  174. package/dist/bin/index.js.map +1 -1
  175. package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
  176. package/dist/src/shared/getAvailableFiles.js +6 -1
  177. package/dist/src/shared/getAvailableFiles.js.map +1 -1
  178. package/dist/src/shared/loadRegistry.d.ts +7 -0
  179. package/dist/src/shared/loadRegistry.d.ts.map +1 -0
  180. package/dist/src/shared/loadRegistry.js +31 -0
  181. package/dist/src/shared/loadRegistry.js.map +1 -0
  182. package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
  183. package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
  184. package/dist/src/shared/resolveInstallPlan.js +39 -0
  185. package/dist/src/shared/resolveInstallPlan.js.map +1 -0
  186. package/dist/src/types/main.d.ts +24 -0
  187. package/dist/src/types/main.d.ts.map +1 -1
  188. package/docs/README.md +10 -2
  189. package/docs/components/action-button.md +30 -24
  190. package/docs/components/actions-group.md +26 -20
  191. package/docs/components/alert-dialog.md +45 -45
  192. package/docs/components/avatar.md +6 -2
  193. package/docs/components/badge-field.md +6 -2
  194. package/docs/components/badge.md +7 -1
  195. package/docs/components/breadcrumb.md +15 -40
  196. package/docs/components/button-group.md +13 -10
  197. package/docs/components/button.md +58 -33
  198. package/docs/components/calendar.md +26 -19
  199. package/docs/components/card.md +23 -18
  200. package/docs/components/chart-block-tool.md +129 -0
  201. package/docs/components/checkbox.md +16 -8
  202. package/docs/components/cn-layout.md +7 -1
  203. package/docs/components/color-picker.md +101 -0
  204. package/docs/components/conclusion-header.md +80 -0
  205. package/docs/components/context-menu.md +18 -25
  206. package/docs/components/count-badge.md +7 -1
  207. package/docs/components/data-table.md +45 -33
  208. package/docs/components/data-views-config-panel.md +15 -11
  209. package/docs/components/data-views-layout.md +13 -16
  210. package/docs/components/date-picker.md +30 -23
  211. package/docs/components/dialog.md +43 -42
  212. package/docs/components/divider.md +10 -4
  213. package/docs/components/drawer.md +161 -135
  214. package/docs/components/dropdown-menu.md +25 -34
  215. package/docs/components/field-hint.md +37 -25
  216. package/docs/components/field-section.md +9 -3
  217. package/docs/components/form-builder.md +270 -0
  218. package/docs/components/form-renderer.md +228 -0
  219. package/docs/components/form-stepper.md +6 -0
  220. package/docs/components/form-summary.md +123 -0
  221. package/docs/components/form.md +17 -20
  222. package/docs/components/header-bar.md +6 -0
  223. package/docs/components/image-attachment.md +43 -45
  224. package/docs/components/inbox-view.md +16 -5
  225. package/docs/components/inner-label-field.md +34 -24
  226. package/docs/components/input-field.md +18 -10
  227. package/docs/components/input-otp.md +14 -11
  228. package/docs/components/input.md +22 -16
  229. package/docs/components/kanban-view.md +15 -5
  230. package/docs/components/label-field.md +32 -22
  231. package/docs/components/label.md +43 -32
  232. package/docs/components/labeled-check-box.md +16 -8
  233. package/docs/components/labeled-radio.md +18 -11
  234. package/docs/components/link-button.md +7 -1
  235. package/docs/components/login-button.md +8 -2
  236. package/docs/components/password-level.md +37 -24
  237. package/docs/components/popover.md +26 -23
  238. package/docs/components/profile-menu.md +38 -27
  239. package/docs/components/radio-card.md +16 -9
  240. package/docs/components/radio.md +16 -8
  241. package/docs/components/scroll-area.md +6 -2
  242. package/docs/components/search-field.md +14 -6
  243. package/docs/components/searchable-select.md +19 -14
  244. package/docs/components/searchable-table.md +18 -13
  245. package/docs/components/searchable-tree-dialog.md +190 -0
  246. package/docs/components/searchable-tree.md +200 -0
  247. package/docs/components/section-block.md +12 -4
  248. package/docs/components/select.md +23 -18
  249. package/docs/components/simple-select.md +14 -10
  250. package/docs/components/skeleton.md +43 -33
  251. package/docs/components/slide-date-picker.md +37 -29
  252. package/docs/components/spin-loading.md +32 -23
  253. package/docs/components/stepper.md +6 -0
  254. package/docs/components/switch.md +14 -6
  255. package/docs/components/tab-form-item.md +7 -1
  256. package/docs/components/tab-switch.md +13 -6
  257. package/docs/components/table-dnd-wrapper.md +107 -0
  258. package/docs/components/table-view.md +15 -5
  259. package/docs/components/table.md +28 -28
  260. package/docs/components/text-editor.md +37 -13
  261. package/docs/components/textarea.md +15 -7
  262. package/docs/components/timeline.md +6 -0
  263. package/docs/components/toast.md +35 -26
  264. package/docs/components/toggle-button.md +24 -21
  265. package/docs/components/toggle.md +23 -15
  266. package/docs/components/tooltip.md +42 -30
  267. package/docs/components/transparent-label.md +29 -20
  268. package/docs/components/tree-drop-down.md +31 -23
  269. package/docs/components/tree-sub-layout.md +6 -2
  270. package/docs/components/tree-view.md +16 -5
  271. package/docs/explanation/architecture.md +54 -0
  272. package/docs/explanation/design-system.md +52 -0
  273. package/docs/how-to/data-views-from-backend-response.md +6 -4
  274. package/docs/how-to/form-and-list-recipes.md +26 -19
  275. package/docs/how-to/forms-with-form-builder.md +408 -0
  276. package/docs/how-to/guides.md +177 -197
  277. package/docs/migration/changelog.md +38 -0
  278. package/docs/reference/cli.md +87 -0
  279. package/docs/reference/components.md +11 -12
  280. package/docs/reference/hooks.md +8 -8
  281. package/docs/reference/providers.md +22 -22
  282. package/docs/reference/tailwind-plugins.md +2 -2
  283. package/docs/reference/theme.md +85 -0
  284. package/docs/reference/types.md +4 -4
  285. package/docs/reference/utilities.md +19 -26
  286. package/docs/tutorials/building-first-form.md +170 -172
  287. package/docs/tutorials/component-composition.md +34 -50
  288. package/docs/tutorials/getting-started.md +2 -2
  289. package/docs/tutorials/theming-basics.md +13 -10
  290. package/package.json +31 -3
  291. package/dist/src/commands/block.d.ts +0 -5
  292. package/dist/src/commands/block.d.ts.map +0 -1
  293. package/dist/src/commands/block.js +0 -255
  294. package/dist/src/commands/block.js.map +0 -1
  295. package/dist/src/shared/configureFonts.d.ts +0 -6
  296. package/dist/src/shared/configureFonts.d.ts.map +0 -1
  297. package/dist/src/shared/configureFonts.js +0 -106
  298. package/dist/src/shared/configureFonts.js.map +0 -1
  299. package/dist/src/shared/configureGlobalCss.d.ts +0 -6
  300. package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
  301. package/dist/src/shared/configureGlobalCss.js +0 -154
  302. package/dist/src/shared/configureGlobalCss.js.map +0 -1
  303. package/dist/src/shared/configureTailwind.d.ts +0 -7
  304. package/dist/src/shared/configureTailwind.d.ts.map +0 -1
  305. package/dist/src/shared/configureTailwind.js +0 -163
  306. package/dist/src/shared/configureTailwind.js.map +0 -1
  307. package/dist/src/shared/detectFramework.d.ts +0 -23
  308. package/dist/src/shared/detectFramework.d.ts.map +0 -1
  309. package/dist/src/shared/detectFramework.js +0 -119
  310. package/dist/src/shared/detectFramework.js.map +0 -1
  311. package/dist/src/shared/installBaseUtils.d.ts +0 -5
  312. package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
  313. package/dist/src/shared/installBaseUtils.js +0 -79
  314. package/dist/src/shared/installBaseUtils.js.map +0 -1
  315. package/dist/src/shared/resolveAliases.d.ts +0 -24
  316. package/dist/src/shared/resolveAliases.d.ts.map +0 -1
  317. package/dist/src/shared/resolveAliases.js +0 -98
  318. package/dist/src/shared/resolveAliases.js.map +0 -1
@@ -38,6 +38,8 @@ interface Props {
38
38
  theme?: Themes;
39
39
  dir?: string;
40
40
  className?: string;
41
+ /** Transparent border/background so the trigger blends into a table cell. */
42
+ onTable?: boolean;
41
43
 
42
44
  // --- Async / backend pagination (all optional; static `options` still works) ---
43
45
  /**
@@ -91,7 +93,7 @@ const menuContentStyles = cva(
91
93
  },
92
94
  },
93
95
  defaultVariants: { variant: "PresentationStyle" },
94
- }
96
+ },
95
97
  );
96
98
 
97
99
  export function SearchableSelect({
@@ -105,6 +107,7 @@ export function SearchableSelect({
105
107
  theme,
106
108
  dir,
107
109
  className,
110
+ onTable,
108
111
  filterClientSide = true,
109
112
  onSearchChange,
110
113
  searchDebounceMs = 300,
@@ -123,10 +126,7 @@ export function SearchableSelect({
123
126
 
124
127
  const groupRef = useClickOutside<HTMLDivElement>((e) => {
125
128
  const target = e?.target as Node;
126
- if (
127
- !groupRef.current?.contains(target) &&
128
- !popoverContentRef.current?.contains(target)
129
- ) {
129
+ if (!groupRef.current?.contains(target) && !popoverContentRef.current?.contains(target)) {
130
130
  setOpen(false);
131
131
  }
132
132
  });
@@ -168,7 +168,7 @@ export function SearchableSelect({
168
168
  };
169
169
 
170
170
  // Solid value: search text while typing, otherwise the selected label.
171
- const displayValue = searching ? search : selectedOption?.label ?? "";
171
+ const displayValue = searching ? search : (selectedOption?.label ?? "");
172
172
 
173
173
  return (
174
174
  <Popover open={open}>
@@ -178,11 +178,13 @@ export function SearchableSelect({
178
178
  data-theme={theme}
179
179
  variant={variant}
180
180
  size={size === "XS" ? "S" : size}
181
+ onTable={onTable}
181
182
  ref={groupRef as never}
182
183
  onFocus={(e: React.FocusEvent<HTMLDivElement>) =>
183
184
  setDropdownWidth(e.currentTarget.offsetWidth)
184
185
  }
185
- className={cn("flex w-full items-center gap-1 p-1", className)}
186
+ // Trigger styling mirrors the `Select` component's trigger so the two read identically.
187
+ className={cn("flex w-full items-center gap-1 rounded-[6px] p-[4px]", className)}
186
188
  >
187
189
  {icon && <Icon>{icon}</Icon>}
188
190
  <Input
@@ -221,14 +223,15 @@ export function SearchableSelect({
221
223
  }
222
224
  }}
223
225
  className={cn(
224
- "shrink-0 h-[32px] w-[32px] rounded-[4px]",
225
- open && "bg-background-presentation-action-hover text-white"
226
+ // Same box + open-state fill as the Select trigger's chevron.
227
+ "h-[32px] w-[32px] shrink-0",
228
+ open && "bg-background-presentation-action-hover text-white",
226
229
  )}
227
230
  >
228
231
  <i
229
232
  className={cn(
230
- "ri-arrow-down-s-line text-[16px] transition-all duration-100 ease-in-out",
231
- open && "rotate-180"
233
+ "ri-arrow-down-s-line !text-[26px] transition-all duration-100 ease-in-out",
234
+ open && "rotate-180",
232
235
  )}
233
236
  />
234
237
  </Button>
@@ -269,15 +272,13 @@ export function SearchableSelect({
269
272
  data-highlighted={isSelected ? "" : undefined}
270
273
  className={cn(
271
274
  MenuItemStyles({ variant: "Default", size: "M" }),
272
- "shrink-0" // keep full row height; the list scrolls instead of squishing
275
+ "shrink-0", // keep full row height; the list scrolls instead of squishing
273
276
  )}
274
277
  >
275
278
  <div>
276
279
  {option.icon}
277
280
  <span className="flex-1 text-start">{option.label}</span>
278
- {isSelected && (
279
- <i className="ri-check-line text-[16px] shrink-0" />
280
- )}
281
+ {isSelected && <i className="ri-check-line text-[16px] shrink-0" />}
281
282
  </div>
282
283
  </button>
283
284
  );
@@ -298,7 +299,6 @@ export function SearchableSelect({
298
299
  <LoadingIcon size="M" />
299
300
  </div>
300
301
  )}
301
-
302
302
  </div>
303
303
  </PopoverContent>
304
304
  </Popover>
@@ -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";