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,12 +11,22 @@ keywords: [profile-menu, user-menu, avatar-menu, account-menu, popover]
11
11
 
12
12
  ## Installation
13
13
 
14
- No additional dependencies required (uses internal Popover component).
14
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
15
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
16
+
17
+ ```bash
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add ProfileMenu
20
+ ```
21
+
22
+ `add` also copies any components, hooks, and utilities that `ProfileMenu` depends on.
15
23
 
16
24
  ## Import
17
25
 
18
- ```typescript
19
- import { ProfileMenu } from '@torch-ui/components'
26
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
27
+
28
+ ```tsx
29
+ import { ProfileMenu } from "@/components/ProfileMenu";
20
30
  ```
21
31
 
22
32
  ## Quick Examples
@@ -24,7 +34,7 @@ import { ProfileMenu } from '@torch-ui/components'
24
34
  ### Basic Usage
25
35
 
26
36
  ```typescript
27
- import { ProfileMenu } from '@torch-ui/components'
37
+ import { ProfileMenu } from "@/components/ProfileMenu";
28
38
 
29
39
  function Example() {
30
40
  return (
@@ -39,8 +49,8 @@ function Example() {
39
49
  ### With Dropdown Content
40
50
 
41
51
  ```typescript
42
- import { ProfileMenu } from '@torch-ui/components'
43
- import { PopoverItem } from '@torch-ui/components'
52
+ import { ProfileMenu } from "@/components/ProfileMenu";
53
+ import { PopoverItem } from "@/components/Popover";
44
54
 
45
55
  function ProfileDropdown() {
46
56
  return (
@@ -62,7 +72,7 @@ function ProfileDropdown() {
62
72
  ### Selected State
63
73
 
64
74
  ```typescript
65
- import { ProfileMenu } from '@torch-ui/components'
75
+ import { ProfileMenu } from "@/components/ProfileMenu";
66
76
  import { useState } from 'react'
67
77
 
68
78
  function SelectedProfile() {
@@ -81,8 +91,8 @@ function SelectedProfile() {
81
91
  ### With Overlay Blur
82
92
 
83
93
  ```typescript
84
- import { ProfileMenu } from '@torch-ui/components'
85
- import { PopoverItem } from '@torch-ui/components'
94
+ import { ProfileMenu } from "@/components/ProfileMenu";
95
+ import { PopoverItem } from "@/components/Popover";
86
96
 
87
97
  function BlurredProfileMenu() {
88
98
  return (
@@ -105,8 +115,8 @@ function BlurredProfileMenu() {
105
115
  ### Complete User Menu
106
116
 
107
117
  ```typescript
108
- import { ProfileMenu } from '@torch-ui/components'
109
- import { PopoverItem } from '@torch-ui/components'
118
+ import { ProfileMenu } from "@/components/ProfileMenu";
119
+ import { PopoverItem } from "@/components/Popover";
110
120
  import { useRouter } from 'next/navigation'
111
121
 
112
122
  function UserMenu({ user }: { user: User }) {
@@ -162,8 +172,8 @@ function UserMenu({ user }: { user: User }) {
162
172
  ### With Status Indicator
163
173
 
164
174
  ```typescript
165
- import { ProfileMenu } from '@torch-ui/components'
166
- import { PopoverItem } from '@torch-ui/components'
175
+ import { ProfileMenu } from "@/components/ProfileMenu";
176
+ import { PopoverItem } from "@/components/Popover";
167
177
 
168
178
  function OnlineProfileMenu() {
169
179
  return (
@@ -190,8 +200,9 @@ function OnlineProfileMenu() {
190
200
  ### With Role Badge
191
201
 
192
202
  ```typescript
193
- import { ProfileMenu } from '@torch-ui/components'
194
- import { PopoverItem, Badge } from '@torch-ui/components'
203
+ import { ProfileMenu } from "@/components/ProfileMenu";
204
+ import { Badge } from "@/components/Badge";
205
+ import { PopoverItem } from "@/components/Popover";
195
206
 
196
207
  function AdminProfileMenu({ user }: { user: User }) {
197
208
  return (
@@ -199,7 +210,7 @@ function AdminProfileMenu({ user }: { user: User }) {
199
210
  label={
200
211
  <div className="flex flex-col items-start">
201
212
  <span>{user.name}</span>
202
- <Badge variant="purple" size="XS" label={user.role} />
213
+ <Badge color="purple" size="XS" label={user.role} />
203
214
  </div>
204
215
  }
205
216
  icon={user.avatar}
@@ -218,8 +229,8 @@ function AdminProfileMenu({ user }: { user: User }) {
218
229
  ### Dark Theme
219
230
 
220
231
  ```typescript
221
- import { ProfileMenu } from '@torch-ui/components'
222
- import { PopoverItem } from '@torch-ui/components'
232
+ import { ProfileMenu } from "@/components/ProfileMenu";
233
+ import { PopoverItem } from "@/components/Popover";
223
234
 
224
235
  function DarkProfileMenu() {
225
236
  return (
@@ -241,8 +252,8 @@ function DarkProfileMenu() {
241
252
  ### Multiple Profile Switcher
242
253
 
243
254
  ```typescript
244
- import { ProfileMenu } from '@torch-ui/components'
245
- import { PopoverItem } from '@torch-ui/components'
255
+ import { ProfileMenu } from "@/components/ProfileMenu";
256
+ import { PopoverItem } from "@/components/Popover";
246
257
  import { useState } from 'react'
247
258
 
248
259
  function ProfileSwitcher() {
@@ -290,8 +301,8 @@ function ProfileSwitcher() {
290
301
  ### With Custom Actions
291
302
 
292
303
  ```typescript
293
- import { ProfileMenu } from '@torch-ui/components'
294
- import { PopoverItem } from '@torch-ui/components'
304
+ import { ProfileMenu } from "@/components/ProfileMenu";
305
+ import { PopoverItem } from "@/components/Popover";
295
306
 
296
307
  function ActionsProfileMenu() {
297
308
  return (
@@ -322,8 +333,8 @@ function ActionsProfileMenu() {
322
333
  ### With Keyboard Shortcuts
323
334
 
324
335
  ```typescript
325
- import { ProfileMenu } from '@torch-ui/components'
326
- import { PopoverItem } from '@torch-ui/components'
336
+ import { ProfileMenu } from "@/components/ProfileMenu";
337
+ import { PopoverItem } from "@/components/Popover";
327
338
 
328
339
  function ShortcutProfileMenu() {
329
340
  return (
@@ -390,7 +401,7 @@ export const ProfileMenu: React.FC<ProfileMenuProps>
390
401
  ### Usage with TypeScript
391
402
 
392
403
  ```typescript
393
- import { ProfileMenu } from '@torch-ui/components'
404
+ import { ProfileMenu } from "@/components/ProfileMenu";
394
405
 
395
406
  interface User {
396
407
  name: string
@@ -514,8 +525,8 @@ function SidebarProfile({ user }: { user: User }) {
514
525
 
515
526
  ```typescript
516
527
  import { render, screen, fireEvent } from '@testing-library/react'
517
- import { ProfileMenu } from '@torch-ui/components'
518
- import { PopoverItem } from '@torch-ui/components'
528
+ import { ProfileMenu } from "@/components/ProfileMenu";
529
+ import { PopoverItem } from "@/components/Popover";
519
530
 
520
531
  describe('ProfileMenu', () => {
521
532
  it('renders user name and avatar', () => {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: RadioCard
3
- version: 1.1.15
3
+ version: 2.4.0
4
4
  status: stable
5
5
  category: components/forms
6
6
  tags: [form, radio, card, selection, compound, accessible]
@@ -17,15 +17,22 @@ dependencies:
17
17
 
18
18
  ## Installation
19
19
 
20
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
21
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
22
+
20
23
  ```bash
21
- npm install torch-glare
24
+ npx torch-glare@latest init
25
+ npx torch-glare@latest add RadioCard
22
26
  ```
23
27
 
28
+ `add` also copies any components, hooks, and utilities that `RadioCard` depends on.
29
+
24
30
  ## Import
25
31
 
26
- ```typescript
27
- import { RadioCard } from 'torch-glare/lib/components/RadioCard'
28
- import { RadioGroup } from 'torch-glare/lib/components/Radio'
32
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
33
+
34
+ ```tsx
35
+ import { RadioCard } from "@/components/RadioCard";
29
36
  ```
30
37
 
31
38
  ## Quick Examples
@@ -33,8 +40,8 @@ import { RadioGroup } from 'torch-glare/lib/components/Radio'
33
40
  ### Basic Usage
34
41
 
35
42
  ```typescript
36
- import { RadioCard } from 'torch-glare/lib/components/RadioCard'
37
- import { RadioGroup } from 'torch-glare/lib/components/Radio'
43
+ import { RadioCard } from '@/components/RadioCard'
44
+ import { RadioGroup } from '@/components/Radio'
38
45
 
39
46
  function Example() {
40
47
  const [selected, setSelected] = useState('option1')
@@ -534,8 +541,8 @@ function DeploymentOptions() {
534
541
 
535
542
  ```typescript
536
543
  import { render, screen, fireEvent } from '@testing-library/react'
537
- import { RadioCard } from 'torch-glare/lib/components/RadioCard'
538
- import { RadioGroup } from 'torch-glare/lib/components/Radio'
544
+ import { RadioCard } from '@/components/RadioCard'
545
+ import { RadioGroup } from '@/components/Radio'
539
546
 
540
547
  describe('RadioCard', () => {
541
548
  it('renders card with header and description', () => {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Radio
3
- version: 1.1.15
3
+ version: 2.4.0
4
4
  status: stable
5
5
  category: components/forms
6
6
  tags: [form, radio, selection, radix-ui, accessible, group, controlled]
@@ -17,14 +17,22 @@ dependencies:
17
17
 
18
18
  ## Installation
19
19
 
20
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
21
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
22
+
20
23
  ```bash
21
- npm install torch-glare
24
+ npx torch-glare@latest init
25
+ npx torch-glare@latest add Radio
22
26
  ```
23
27
 
28
+ `add` also copies any components, hooks, and utilities that `Radio` depends on.
29
+
24
30
  ## Import
25
31
 
26
- ```typescript
27
- import { Radio, RadioGroup } from 'torch-glare/lib/components/Radio'
32
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
33
+
34
+ ```tsx
35
+ import { Radio } from "@/components/Radio";
28
36
  ```
29
37
 
30
38
  ## Quick Examples
@@ -32,7 +40,7 @@ import { Radio, RadioGroup } from 'torch-glare/lib/components/Radio'
32
40
  ### Basic Radio Group
33
41
 
34
42
  ```typescript
35
- import { Radio, RadioGroup } from 'torch-glare/lib/components/Radio'
43
+ import { Radio, RadioGroup } from '@/components/Radio'
36
44
 
37
45
  function Example() {
38
46
  const [value, setValue] = useState('option1')
@@ -442,7 +450,7 @@ function ConditionalForm() {
442
450
 
443
451
  ```typescript
444
452
  import { render, screen, fireEvent } from '@testing-library/react'
445
- import { Radio, RadioGroup } from 'torch-glare/lib/components/Radio'
453
+ import { Radio, RadioGroup } from '@/components/Radio'
446
454
 
447
455
  describe('Radio', () => {
448
456
  it('handles selection changes', () => {
@@ -659,10 +667,10 @@ Radix UI automatically handles:
659
667
  ```diff
660
668
  // Import path
661
669
  - import Radio from 'torch-glare/Radio'
662
- + import { Radio, RadioGroup } from 'torch-glare/lib/components/Radio'
670
+ + import { Radio, RadioGroup } from '@/components/Radio'
663
671
 
664
672
  // Size prop values
665
- - <Radio size="small" />
673
+ - <Radio size="M" />
666
674
  + <Radio size="S" />
667
675
  ```
668
676
 
@@ -12,11 +12,15 @@ A customizable scrollable container component with styled scrollbars. Built on R
12
12
 
13
13
  ## Installation
14
14
 
15
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
16
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
17
+
15
18
  ```bash
16
- npx torch-cli add scroll-area
19
+ npx torch-glare@latest init
20
+ npx torch-glare@latest add ScrollArea
17
21
  ```
18
22
 
19
- **Dependencies**: Requires `@radix-ui/react-scroll-area`
23
+ `add` also copies any components, hooks, and utilities that `ScrollArea` depends on.
20
24
 
21
25
  ## Imports
22
26
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: SearchField
3
- version: 1.1.15
3
+ version: 2.4.0
4
4
  status: stable
5
5
  category: components/forms
6
6
  tags: [form, search, input, field, system-style, glassmorphism]
@@ -16,14 +16,22 @@ dependencies:
16
16
 
17
17
  ## Installation
18
18
 
19
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
20
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
21
+
19
22
  ```bash
20
- npm install torch-glare
23
+ npx torch-glare@latest init
24
+ npx torch-glare@latest add SearchField
21
25
  ```
22
26
 
27
+ `add` also copies any components, hooks, and utilities that `SearchField` depends on.
28
+
23
29
  ## Import
24
30
 
25
- ```typescript
26
- import { SearchField } from 'torch-glare/lib/components/SearchField'
31
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
32
+
33
+ ```tsx
34
+ import { SearchField } from "@/components/SearchField";
27
35
  ```
28
36
 
29
37
  ## Quick Examples
@@ -31,7 +39,7 @@ import { SearchField } from 'torch-glare/lib/components/SearchField'
31
39
  ### Basic Usage
32
40
 
33
41
  ```typescript
34
- import { SearchField } from 'torch-glare/lib/components/SearchField'
42
+ import { SearchField } from '@/components/SearchField'
35
43
 
36
44
  function Example() {
37
45
  const [search, setSearch] = useState('')
@@ -471,7 +479,7 @@ function NavigationSearch() {
471
479
 
472
480
  ```typescript
473
481
  import { render, screen, fireEvent } from '@testing-library/react'
474
- import { SearchField } from 'torch-glare/lib/components/SearchField'
482
+ import { SearchField } from '@/components/SearchField'
475
483
 
476
484
  describe('SearchField', () => {
477
485
  it('displays placeholder text when empty', () => {
@@ -11,17 +11,22 @@ keywords: [searchable-select, combobox, select, search, async, infinite-scroll,
11
11
 
12
12
  ## Installation
13
13
 
14
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
15
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
16
+
14
17
  ```bash
15
- npm install @radix-ui/react-popover
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add SearchableSelect
16
20
  ```
17
21
 
18
- SearchableSelect is built on the TORCH `Popover` component (which wraps `@radix-ui/react-popover`) and reuses the `Input`, `Button`, and `DropdownMenu` item styles. All imports come from `@torch-ui/components`.
22
+ `add` also copies any components, hooks, and utilities that `SearchableSelect` depends on.
19
23
 
20
24
  ## Import
21
25
 
22
- ```typescript
23
- import { SearchableSelect } from '@torch-ui/components'
24
- import type { SearchableSelectOption } from '@torch-ui/components'
26
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
27
+
28
+ ```tsx
29
+ import { SearchableSelect } from "@/components/SearchableSelect";
25
30
  ```
26
31
 
27
32
  ## Quick Examples
@@ -31,8 +36,8 @@ import type { SearchableSelectOption } from '@torch-ui/components'
31
36
  Pass a static `options` array and control the selection with `value` / `onValueChange`. Options may include an `icon`. Filtering happens locally by default.
32
37
 
33
38
  ```typescript
34
- import { SearchableSelect } from '@torch-ui/components'
35
- import type { SearchableSelectOption } from '@torch-ui/components'
39
+ import { SearchableSelect } from "@/components/SearchableSelect";
40
+ import type { SearchableSelectOption } from "@/components/SearchableSelect";
36
41
  import { useState } from 'react'
37
42
 
38
43
  const options: SearchableSelectOption[] = [
@@ -62,8 +67,8 @@ function FrameworkPicker() {
62
67
  For large or remote datasets, set `filterClientSide={false}` and drive everything from controlled props: refetch in `onSearchChange` (debounced), append pages in `onLoadMore`, and report `hasMore` / `loading`. Options are rendered as-is — the component does not filter them locally in this mode.
63
68
 
64
69
  ```typescript
65
- import { SearchableSelect } from '@torch-ui/components'
66
- import type { SearchableSelectOption } from '@torch-ui/components'
70
+ import { SearchableSelect } from "@/components/SearchableSelect";
71
+ import type { SearchableSelectOption } from "@/components/SearchableSelect";
67
72
  import { useEffect, useState } from 'react'
68
73
 
69
74
  const PAGE_SIZE = 20
@@ -125,7 +130,7 @@ function UserPicker() {
125
130
  The list shows up to `maxVisibleItems` rows (default `5`) before it scrolls internally.
126
131
 
127
132
  ```typescript
128
- import { SearchableSelect } from '@torch-ui/components'
133
+ import { SearchableSelect } from "@/components/SearchableSelect";
129
134
 
130
135
  function CompactList({ options, value, onValueChange }) {
131
136
  return (
@@ -144,7 +149,7 @@ function CompactList({ options, value, onValueChange }) {
144
149
  Pass `dir="rtl"` to lay out the input, chevron, and dropdown right-to-left.
145
150
 
146
151
  ```typescript
147
- import { SearchableSelect } from '@torch-ui/components'
152
+ import { SearchableSelect } from "@/components/SearchableSelect";
148
153
 
149
154
  function ArabicPicker({ options, value, onValueChange }) {
150
155
  return (
@@ -236,8 +241,8 @@ export function SearchableSelect(props: SearchableSelectProps): JSX.Element
236
241
  React Query's `useInfiniteQuery` maps cleanly onto the controlled async props. Track the debounced query in state, flatten pages into `options`, and wire `fetchNextPage`/`hasNextPage`/`isFetching` to `onLoadMore`/`hasMore`/`loading`.
237
242
 
238
243
  ```typescript
239
- import { SearchableSelect } from '@torch-ui/components'
240
- import type { SearchableSelectOption } from '@torch-ui/components'
244
+ import { SearchableSelect } from "@/components/SearchableSelect";
245
+ import type { SearchableSelectOption } from "@/components/SearchableSelect";
241
246
  import { useInfiniteQuery } from '@tanstack/react-query'
242
247
  import { useMemo, useState } from 'react'
243
248
 
@@ -283,7 +288,7 @@ function UserPicker() {
283
288
  The same shape works with SWR's `useSWRInfinite` — increment `size` in `onLoadMore`, flatten the page array into `options`, and derive `hasMore` from the last page length.
284
289
 
285
290
  ```typescript
286
- import { SearchableSelect } from '@torch-ui/components'
291
+ import { SearchableSelect } from "@/components/SearchableSelect";
287
292
  import useSWRInfinite from 'swr/infinite'
288
293
  import { useState } from 'react'
289
294
 
@@ -11,17 +11,22 @@ keywords: [searchable-table, dialog, table, search, async, infinite-scroll, pagi
11
11
 
12
12
  ## Installation
13
13
 
14
- `SearchableTable` is part of the TORCH Glare component library. It composes the [Dialog](./dialog.md) (built on Radix Dialog) and the [Table](./table.md) component internally, so both must be available — they ship with the library.
14
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
15
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
15
16
 
16
17
  ```bash
17
- npm install @torch-ui/components @radix-ui/react-dialog
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add SearchableTable
18
20
  ```
19
21
 
22
+ `add` also copies any components, hooks, and utilities that `SearchableTable` depends on.
23
+
20
24
  ## Import
21
25
 
22
- ```typescript
23
- import { SearchableTable } from '@torch-ui/components'
24
- import type { SearchableTableColumn } from '@torch-ui/components'
26
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
27
+
28
+ ```tsx
29
+ import { SearchableTable } from "@/components/SearchableTable";
25
30
  ```
26
31
 
27
32
  ## Quick Examples
@@ -31,8 +36,8 @@ import type { SearchableTableColumn } from '@torch-ui/components'
31
36
  Provide a `columns` config and a `rows` array. Single-select is controlled via `value` / `onSelect`. Use `getLabel` to control the text shown in the input after selection, and `getRowId` to give each row a stable key.
32
37
 
33
38
  ```typescript
34
- import { SearchableTable } from '@torch-ui/components'
35
- import type { SearchableTableColumn } from '@torch-ui/components'
39
+ import { SearchableTable } from "@/components/SearchableTable";
40
+ import type { SearchableTableColumn } from "@/components/SearchableTable";
36
41
  import { useState } from 'react'
37
42
 
38
43
  type User = { id: string; name: string; role: string; email: string }
@@ -97,8 +102,8 @@ const columns: SearchableTableColumn<User>[] = [
97
102
  Set `filterClientSide={false}` and treat `rows` as already-filtered server data. `onSearchChange` fires (debounced by `searchDebounceMs`, default 300ms) whenever the query settles — refetch there. As the list nears the bottom, `onLoadMore` fires while `hasMore && !loading`; a loading row renders whenever `loading` is true.
98
103
 
99
104
  ```typescript
100
- import { SearchableTable } from '@torch-ui/components'
101
- import type { SearchableTableColumn } from '@torch-ui/components'
105
+ import { SearchableTable } from "@/components/SearchableTable";
106
+ import type { SearchableTableColumn } from "@/components/SearchableTable";
102
107
  import { useEffect, useState } from 'react'
103
108
 
104
109
  type User = { id: string; name: string; role: string; email: string }
@@ -244,7 +249,7 @@ export interface SearchableTableColumn<T> {
244
249
  ### Component signature
245
250
 
246
251
  ```typescript
247
- import { Themes } from '@torch-ui/components'
252
+ import { Themes } from "@/utils/types";
248
253
 
249
254
  interface SearchableTableProps<T> {
250
255
  columns: SearchableTableColumn<T>[]
@@ -287,8 +292,8 @@ Always pass the type argument explicitly (`<SearchableTable<User> … />`) so `c
287
292
  Wire pagination through `useInfiniteQuery`, flatten the pages into `rows`, and map the query's state onto `hasMore` / `loading` / `onLoadMore`.
288
293
 
289
294
  ```typescript
290
- import { SearchableTable } from '@torch-ui/components'
291
- import type { SearchableTableColumn } from '@torch-ui/components'
295
+ import { SearchableTable } from "@/components/SearchableTable";
296
+ import type { SearchableTableColumn } from "@/components/SearchableTable";
292
297
  import { useInfiniteQuery } from '@tanstack/react-query'
293
298
  import { useState } from 'react'
294
299
 
@@ -354,7 +359,7 @@ function UserPicker() {
354
359
  ### SWR — `useSWRInfinite`
355
360
 
356
361
  ```typescript
357
- import { SearchableTable } from '@torch-ui/components'
362
+ import { SearchableTable } from "@/components/SearchableTable";
358
363
  import useSWRInfinite from 'swr/infinite'
359
364
  import { useState } from 'react'
360
365