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,15 +11,22 @@ keywords: [date-picker, calendar, time, datetime, input, popover]
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 react-day-picker date-fns torch-react-mobile-picker
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add DatePicker
16
20
  ```
17
21
 
22
+ `add` also copies any components, hooks, and utilities that `DatePicker` depends on.
23
+
18
24
  ## Import
19
25
 
20
- ```typescript
21
- import { DatePicker } from '@torch-ui/components'
22
- import type { DatePickerProps } 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 { DatePicker } from "@/components/DatePicker";
23
30
  ```
24
31
 
25
32
  ## Quick Examples
@@ -27,7 +34,7 @@ import type { DatePickerProps } from '@torch-ui/components'
27
34
  ### Basic Usage
28
35
 
29
36
  ```typescript
30
- import { DatePicker } from '@torch-ui/components'
37
+ import { DatePicker } from "@/components/DatePicker";
31
38
  import { useState } from 'react'
32
39
 
33
40
  function Example() {
@@ -46,7 +53,7 @@ function Example() {
46
53
  ### With Time Picker
47
54
 
48
55
  ```typescript
49
- import { DatePicker } from '@torch-ui/components'
56
+ import { DatePicker } from "@/components/DatePicker";
50
57
  import { useState } from 'react'
51
58
 
52
59
  function DateTimePicker() {
@@ -66,7 +73,7 @@ function DateTimePicker() {
66
73
  ### Range Selection
67
74
 
68
75
  ```typescript
69
- import { DatePicker } from '@torch-ui/components'
76
+ import { DatePicker } from "@/components/DatePicker";
70
77
  import { useState } from 'react'
71
78
  import { DateRange } from 'react-day-picker'
72
79
 
@@ -91,7 +98,7 @@ function RangePicker() {
91
98
  ### Multiple Date Selection
92
99
 
93
100
  ```typescript
94
- import { DatePicker } from '@torch-ui/components'
101
+ import { DatePicker } from "@/components/DatePicker";
95
102
  import { useState } from 'react'
96
103
 
97
104
  function MultipleDates() {
@@ -111,7 +118,7 @@ function MultipleDates() {
111
118
  ### Custom Date Format
112
119
 
113
120
  ```typescript
114
- import { DatePicker } from '@torch-ui/components'
121
+ import { DatePicker } from "@/components/DatePicker";
115
122
 
116
123
  function CustomFormat() {
117
124
  const [date, setDate] = useState<Date>(new Date())
@@ -129,8 +136,8 @@ function CustomFormat() {
129
136
  ### Custom Trigger Element
130
137
 
131
138
  ```typescript
132
- import { DatePicker } from '@torch-ui/components'
133
- import { Button } from '@torch-ui/components'
139
+ import { DatePicker } from "@/components/DatePicker";
140
+ import { Button } from "@/components/Button";
134
141
 
135
142
  function CustomTrigger() {
136
143
  const [date, setDate] = useState<Date>(new Date())
@@ -140,7 +147,7 @@ function CustomTrigger() {
140
147
  value={date}
141
148
  onChange={(e) => setDate(e.target.value)}
142
149
  >
143
- <Button variant="SecondaryStyle">
150
+ <Button variant="BluSecStyle">
144
151
  <i className="ri-calendar-line" />
145
152
  Select Date
146
153
  </Button>
@@ -152,8 +159,8 @@ function CustomTrigger() {
152
159
  ### With Controlled Input
153
160
 
154
161
  ```typescript
155
- import { DatePicker } from '@torch-ui/components'
156
- import { InputField } from '@torch-ui/components'
162
+ import { DatePicker } from "@/components/DatePicker";
163
+ import { InputField } from "@/components/InputField";
157
164
  import { useState } from 'react'
158
165
 
159
166
  function ControlledInput() {
@@ -176,7 +183,7 @@ function ControlledInput() {
176
183
  ### Date Restrictions
177
184
 
178
185
  ```typescript
179
- import { DatePicker } from '@torch-ui/components'
186
+ import { DatePicker } from "@/components/DatePicker";
180
187
 
181
188
  function RestrictedDates() {
182
189
  const [date, setDate] = useState<Date>()
@@ -201,7 +208,7 @@ function RestrictedDates() {
201
208
  ### Booking System
202
209
 
203
210
  ```typescript
204
- import { DatePicker } from '@torch-ui/components'
211
+ import { DatePicker } from "@/components/DatePicker";
205
212
  import { useState } from 'react'
206
213
  import { DateRange } from 'react-day-picker'
207
214
 
@@ -243,7 +250,7 @@ function BookingPicker() {
243
250
  ### Deadline Picker with Time
244
251
 
245
252
  ```typescript
246
- import { DatePicker } from '@torch-ui/components'
253
+ import { DatePicker } from "@/components/DatePicker";
247
254
  import { useState } from 'react'
248
255
 
249
256
  function DeadlinePicker() {
@@ -356,7 +363,7 @@ type RangeDatePicker = DatePickerProps & {
356
363
  ### Event Scheduler
357
364
 
358
365
  ```typescript
359
- import { DatePicker } from '@torch-ui/components'
366
+ import { DatePicker } from "@/components/DatePicker";
360
367
  import { useState } from 'react'
361
368
 
362
369
  function EventScheduler() {
@@ -399,7 +406,7 @@ function EventScheduler() {
399
406
  ### Birthday Picker
400
407
 
401
408
  ```typescript
402
- import { DatePicker } from '@torch-ui/components'
409
+ import { DatePicker } from "@/components/DatePicker";
403
410
  import { useState } from 'react'
404
411
 
405
412
  function BirthdayPicker() {
@@ -431,7 +438,7 @@ function BirthdayPicker() {
431
438
  ### Work Schedule Picker
432
439
 
433
440
  ```typescript
434
- import { DatePicker } from '@torch-ui/components'
441
+ import { DatePicker } from "@/components/DatePicker";
435
442
  import { useState } from 'react'
436
443
 
437
444
  function WorkSchedule() {
@@ -462,7 +469,7 @@ function WorkSchedule() {
462
469
 
463
470
  ```typescript
464
471
  import { render, screen, fireEvent, waitFor } from '@testing-library/react'
465
- import { DatePicker } from '@torch-ui/components'
472
+ import { DatePicker } from "@/components/DatePicker";
466
473
  import userEvent from '@testing-library/user-event'
467
474
 
468
475
  describe('DatePicker', () => {
@@ -753,7 +760,7 @@ Reverse-engineer the implementation from the call sites in `DatePicker.tsx` unti
753
760
  ### With Form Libraries
754
761
 
755
762
  ```typescript
756
- import { DatePicker } from '@torch-ui/components'
763
+ import { DatePicker } from "@/components/DatePicker";
757
764
  import { useForm, Controller } from 'react-hook-form'
758
765
 
759
766
  function FormExample() {
@@ -788,7 +795,7 @@ function FormExample() {
788
795
  ### With State Management
789
796
 
790
797
  ```typescript
791
- import { DatePicker } from '@torch-ui/components'
798
+ import { DatePicker } from "@/components/DatePicker";
792
799
  import { useStore } from './store'
793
800
 
794
801
  function DatePickerWithStore() {
@@ -11,24 +11,22 @@ keywords: [dialog, modal, overlay, popup, radix-ui, compound-component]
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-dialog
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add Dialog
16
20
  ```
17
21
 
22
+ `add` also copies any components, hooks, and utilities that `Dialog` depends on.
23
+
18
24
  ## Import
19
25
 
20
- ```typescript
21
- import {
22
- Dialog,
23
- DialogTrigger,
24
- DialogContent,
25
- DialogHeader,
26
- DialogFooter,
27
- DialogTitle,
28
- DialogDescription,
29
- DialogClose,
30
- DialogCloseButton,
31
- } 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 { Dialog } from "@/components/Dialog";
32
30
  ```
33
31
 
34
32
  ## Quick Examples
@@ -36,8 +34,8 @@ import {
36
34
  ### Basic Usage
37
35
 
38
36
  ```typescript
39
- import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@torch-ui/components'
40
- import { Button } from '@torch-ui/components'
37
+ import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/Dialog";
38
+ import { Button } from "@/components/Button";
41
39
 
42
40
  function Example() {
43
41
  return (
@@ -61,8 +59,8 @@ function Example() {
61
59
  ### With Header and Footer
62
60
 
63
61
  ```typescript
64
- import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, DialogClose } from '@torch-ui/components'
65
- import { Button } from '@torch-ui/components'
62
+ import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, DialogClose } from "@/components/Dialog";
63
+ import { Button } from "@/components/Button";
66
64
 
67
65
  function FormDialog() {
68
66
  return (
@@ -86,9 +84,9 @@ function FormDialog() {
86
84
 
87
85
  <DialogFooter>
88
86
  <DialogClose asChild>
89
- <Button variant="SecondaryStyle">Cancel</Button>
87
+ <Button variant="BluSecStyle">Cancel</Button>
90
88
  </DialogClose>
91
- <Button variant="PrimaryStyle">Save Changes</Button>
89
+ <Button variant="PrimeStyle">Save Changes</Button>
92
90
  </DialogFooter>
93
91
  </DialogContent>
94
92
  </Dialog>
@@ -99,7 +97,7 @@ function FormDialog() {
99
97
  ### Controlled State
100
98
 
101
99
  ```typescript
102
- import { Dialog, DialogTrigger, DialogContent, DialogTitle } from '@torch-ui/components'
100
+ import { Dialog, DialogTrigger, DialogContent, DialogTitle } from "@/components/Dialog";
103
101
  import { useState } from 'react'
104
102
 
105
103
  function ControlledDialog() {
@@ -123,8 +121,8 @@ function ControlledDialog() {
123
121
  ### With Custom Close Button
124
122
 
125
123
  ```typescript
126
- import { Dialog, DialogTrigger, DialogContent, DialogTitle, DialogCloseButton } from '@torch-ui/components'
127
- import { ActionButton } from '@torch-ui/components'
124
+ import { Dialog, DialogTrigger, DialogContent, DialogTitle, DialogCloseButton } from "@/components/Dialog";
125
+ import { ActionButton } from "@/components/ActionButton";
128
126
 
129
127
  function CustomCloseDialog() {
130
128
  return (
@@ -150,14 +148,14 @@ function CustomCloseDialog() {
150
148
  ### Confirmation Dialog
151
149
 
152
150
  ```typescript
153
- import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, DialogClose } from '@torch-ui/components'
154
- import { Button } from '@torch-ui/components'
151
+ import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, DialogClose } from "@/components/Dialog";
152
+ import { Button } from "@/components/Button";
155
153
 
156
154
  function ConfirmationDialog({ onConfirm }: { onConfirm: () => void }) {
157
155
  return (
158
156
  <Dialog>
159
157
  <DialogTrigger asChild>
160
- <Button variant="DestructiveStyle">Delete Account</Button>
158
+ <Button variant="RedSecStyle">Delete Account</Button>
161
159
  </DialogTrigger>
162
160
  <DialogContent>
163
161
  <DialogHeader>
@@ -170,10 +168,10 @@ function ConfirmationDialog({ onConfirm }: { onConfirm: () => void }) {
170
168
 
171
169
  <DialogFooter>
172
170
  <DialogClose asChild>
173
- <Button variant="SecondaryStyle">Cancel</Button>
171
+ <Button variant="BluSecStyle">Cancel</Button>
174
172
  </DialogClose>
175
173
  <DialogClose asChild>
176
- <Button variant="DestructiveStyle" onClick={onConfirm}>
174
+ <Button variant="RedSecStyle" onClick={onConfirm}>
177
175
  Delete Account
178
176
  </Button>
179
177
  </DialogClose>
@@ -187,8 +185,9 @@ function ConfirmationDialog({ onConfirm }: { onConfirm: () => void }) {
187
185
  ### Nested Form Dialog
188
186
 
189
187
  ```typescript
190
- import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription } from '@torch-ui/components'
191
- import { Button, Input } from '@torch-ui/components'
188
+ import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription } from "@/components/Dialog";
189
+ import { Button } from "@/components/Button";
190
+ import { Input } from "@/components/Input";
192
191
  import { useForm } from 'react-hook-form'
193
192
 
194
193
  interface FormData {
@@ -236,8 +235,9 @@ function FormDialog() {
236
235
  ### Content-Heavy Dialog
237
236
 
238
237
  ```typescript
239
- import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@torch-ui/components'
240
- import { Button, ScrollArea } from '@torch-ui/components'
238
+ import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/Dialog";
239
+ import { Button } from "@/components/Button";
240
+ import { ScrollArea } from "@/components/ScrollArea";
241
241
 
242
242
  function ContentDialog() {
243
243
  return (
@@ -273,8 +273,8 @@ function ContentDialog() {
273
273
  ### Multi-Step Dialog
274
274
 
275
275
  ```typescript
276
- import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle } from '@torch-ui/components'
277
- import { Button } from '@torch-ui/components'
276
+ import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle } from "@/components/Dialog";
277
+ import { Button } from "@/components/Button";
278
278
  import { useState } from 'react'
279
279
 
280
280
  function MultiStepDialog() {
@@ -298,7 +298,7 @@ function MultiStepDialog() {
298
298
 
299
299
  <DialogFooter>
300
300
  {step > 1 && (
301
- <Button variant="SecondaryStyle" onClick={() => setStep(step - 1)}>
301
+ <Button variant="BluSecStyle" onClick={() => setStep(step - 1)}>
302
302
  Back
303
303
  </Button>
304
304
  )}
@@ -317,7 +317,7 @@ function MultiStepDialog() {
317
317
  ### Image Preview Dialog
318
318
 
319
319
  ```typescript
320
- import { Dialog, DialogTrigger, DialogContent } from '@torch-ui/components'
320
+ import { Dialog, DialogTrigger, DialogContent } from "@/components/Dialog";
321
321
 
322
322
  function ImageDialog({ src, alt }: { src: string; alt: string }) {
323
323
  return (
@@ -340,8 +340,9 @@ function ImageDialog({ src, alt }: { src: string; alt: string }) {
340
340
  ### Loading State Dialog
341
341
 
342
342
  ```typescript
343
- import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle } from '@torch-ui/components'
344
- import { Button, SpinLoading } from '@torch-ui/components'
343
+ import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle } from "@/components/Dialog";
344
+ import { Button } from "@/components/Button";
345
+ import { SpinLoading } from "@/components/SpinLoading";
345
346
  import { useState } from 'react'
346
347
 
347
348
  function LoadingDialog() {
@@ -676,8 +677,8 @@ Pick an icon that matches the entity (`ri-bank-line` for accounts, `ri-calendar-
676
677
  ### Alert/Confirmation Pattern
677
678
 
678
679
  ```typescript
679
- import { Dialog, DialogContent, DialogTitle, DialogDescription } from '@torch-ui/components'
680
- import { Button } from '@torch-ui/components'
680
+ import { Dialog, DialogContent, DialogTitle, DialogDescription } from "@/components/Dialog";
681
+ import { Button } from "@/components/Button";
681
682
 
682
683
  function useConfirmDialog() {
683
684
  const [open, setOpen] = useState(false)
@@ -730,7 +731,7 @@ function useConfirmDialog() {
730
731
 
731
732
  ```typescript
732
733
  import { render, screen, fireEvent } from '@testing-library/react'
733
- import { Dialog, DialogTrigger, DialogContent, DialogTitle } from '@torch-ui/components'
734
+ import { Dialog, DialogTrigger, DialogContent, DialogTitle } from "@/components/Dialog";
734
735
 
735
736
  describe('Dialog', () => {
736
737
  it('opens when trigger is clicked', () => {
@@ -839,7 +840,7 @@ describe('Dialog', () => {
839
840
 
840
841
  ```diff
841
842
  - import { Dialog, DialogTitle, DialogContent } from '@mui/material'
842
- + import { Dialog, DialogTrigger, DialogContent, DialogTitle } from '@torch-ui/components'
843
+ + import { Dialog, DialogTrigger, DialogContent, DialogTitle } from "@/components/Dialog";
843
844
 
844
845
  - <Dialog open={open} onClose={() => setOpen(false)}>
845
846
  - <DialogTitle>Title</DialogTitle>
@@ -858,7 +859,7 @@ describe('Dialog', () => {
858
859
 
859
860
  ```diff
860
861
  - import { Dialog } from '@headlessui/react'
861
- + import { Dialog, DialogContent, DialogTitle } from '@torch-ui/components'
862
+ + import { Dialog, DialogContent, DialogTitle } from "@/components/Dialog";
862
863
 
863
864
  - <Dialog open={open} onClose={setOpen}>
864
865
  - <Dialog.Panel>
@@ -12,10 +12,16 @@ A flexible separator component for creating visual divisions between content sec
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 divider
19
+ npx torch-glare@latest init
20
+ npx torch-glare@latest add Divider
17
21
  ```
18
22
 
23
+ `add` also copies any components, hooks, and utilities that `Divider` depends on.
24
+
19
25
  ## Imports
20
26
 
21
27
  ```typescript
@@ -282,7 +288,7 @@ export function FormWithDividers() {
282
288
  <Divider />
283
289
 
284
290
  <div className="flex justify-end gap-3">
285
- <Button variant="SecStyle">Cancel</Button>
291
+ <Button variant="BluSecStyle">Cancel</Button>
286
292
  <Button variant="PrimeStyle">Save Changes</Button>
287
293
  </div>
288
294
  </form>
@@ -317,11 +323,11 @@ export function DividerWithText() {
317
323
 
318
324
  {/* Social login */}
319
325
  <div className="space-y-2">
320
- <Button className="w-full" variant="SecStyle">
326
+ <Button className="w-full" variant="BluSecStyle">
321
327
  <i className="ri-google-fill mr-2"></i>
322
328
  Continue with Google
323
329
  </Button>
324
- <Button className="w-full" variant="SecStyle">
330
+ <Button className="w-full" variant="BluSecStyle">
325
331
  <i className="ri-github-fill mr-2"></i>
326
332
  Continue with GitHub
327
333
  </Button>
@@ -14,47 +14,22 @@ keywords: [drawer, sheet, side-panel, bottom-sheet, slide, vaul, form, create, e
14
14
 
15
15
  ## Installation
16
16
 
17
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
18
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
19
+
17
20
  ```bash
21
+ npx torch-glare@latest init
18
22
  npx torch-glare@latest add Drawer
19
23
  ```
20
24
 
21
- The Drawer's only third-party dependency is [`vaul`](https://www.npmjs.com/package/vaul), which the CLI installs automatically.
22
-
23
- > [!NOTE]
24
- > **Building create / edit forms?** The Drawer ships on its own. The form examples on this page also use `SectionBlock`, `InputField`, and `Button`. Install them alongside it:
25
- >
26
- > ```bash
27
- > npx torch-glare@latest add Drawer SectionBlock InputField Button
28
- > ```
29
- >
30
- > These are *not* auto-installed by `add Drawer`, because `Drawer.tsx` does not import them — they are only needed for the form composition pattern, not for the Drawer itself.
25
+ `add` also copies any components, hooks, and utilities that `Drawer` depends on.
31
26
 
32
27
  ## Import
33
28
 
29
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
30
+
34
31
  ```tsx
35
- import {
36
- Drawer,
37
- DrawerNested,
38
- DrawerTrigger,
39
- DrawerClose,
40
- DrawerContent,
41
- DrawerHeader,
42
- DrawerHeaderTitle,
43
- DrawerHeaderActions,
44
- DrawerBadge,
45
- DrawerFooter,
46
- DrawerTitle,
47
- DrawerDescription,
48
- // Notch (the tab that sticks out of the top edge)
49
- DrawerNotch,
50
- DrawerNotchClose,
51
- DrawerNotchPill,
52
- DrawerNotchDivider,
53
- DrawerNotchApp,
54
- // Lower-level primitives (rarely needed directly)
55
- DrawerPortal,
56
- DrawerOverlay,
57
- } from "@/components/Drawer";
32
+ import { Drawer } from "@/components/Drawer";
58
33
  ```
59
34
 
60
35
  ## Anatomy
@@ -11,40 +11,31 @@ keywords: [dropdown-menu, menu, radix-ui, submenu, checkbox, radio, auto-group]
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-dropdown-menu
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add DropdownMenu
16
20
  ```
17
21
 
22
+ `add` also copies any components, hooks, and utilities that `DropdownMenu` depends on.
23
+
18
24
  ## Import
19
25
 
20
- ```typescript
21
- import {
22
- DropdownMenu,
23
- DropdownMenuTrigger,
24
- DropdownMenuContent,
25
- DropdownMenuItem,
26
- DropdownMenuCheckboxItem,
27
- DropdownMenuRadioGroup,
28
- DropdownMenuRadioItem,
29
- DropdownMenuLabel,
30
- DropdownMenuShortcut,
31
- DropdownMenuSub,
32
- DropdownMenuSubTrigger,
33
- DropdownMenuSubContent,
34
- DropdownMenuGroup,
35
- DropdownMenuPortal,
36
- } from '@torch-ui/components'
37
- ```
26
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
38
27
 
39
- > **Auto-grouping:** Loose items placed directly in `DropdownMenuContent` (or `DropdownMenuSubContent`) are automatically wrapped in a boxed group, so they render inside a rounded container without you writing `DropdownMenuGroup` yourself. A `DropdownMenuLabel`, an explicit `DropdownMenuGroup`, or a `DropdownMenuRadioGroup` acts as a boundary that starts a new box. Disable this with `autoGroup={false}` on the content. (There is no `DropdownMenuSeparator` — separation comes from labels and the boxed groups.)
28
+ ```tsx
29
+ import { DropdownMenu } from "@/components/DropdownMenu";
30
+ ```
40
31
 
41
32
  ## Quick Examples
42
33
 
43
34
  ### Basic Menu
44
35
 
45
36
  ```typescript
46
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@torch-ui/components'
47
- import { Button } from '@torch-ui/components'
37
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from "@/components/DropdownMenu";
38
+ import { Button } from "@/components/Button";
48
39
 
49
40
  function Example() {
50
41
  return (
@@ -65,7 +56,7 @@ function Example() {
65
56
  ### With Icons
66
57
 
67
58
  ```typescript
68
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@torch-ui/components'
59
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from "@/components/DropdownMenu";
69
60
 
70
61
  function IconMenu() {
71
62
  return (
@@ -97,7 +88,7 @@ function IconMenu() {
97
88
  ### With Keyboard Shortcuts
98
89
 
99
90
  ```typescript
100
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuShortcut } from '@torch-ui/components'
91
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuShortcut } from "@/components/DropdownMenu";
101
92
 
102
93
  function ShortcutMenu() {
103
94
  return (
@@ -129,7 +120,7 @@ function ShortcutMenu() {
129
120
  Labels act as section boundaries. The loose items between labels are automatically wrapped in boxed groups — no separator component needed.
130
121
 
131
122
  ```typescript
132
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel } from '@torch-ui/components'
123
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel } from "@/components/DropdownMenu";
133
124
 
134
125
  function OrganizedMenu() {
135
126
  return (
@@ -158,7 +149,7 @@ function OrganizedMenu() {
158
149
  Checkbox and radio items keep the menu **open** when toggled (the built-in `onSelect` calls `preventDefault`), so users can change several options without the menu closing each time.
159
150
 
160
151
  ```typescript
161
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuCheckboxItem } from '@torch-ui/components'
152
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuCheckboxItem } from "@/components/DropdownMenu";
162
153
  import { useState } from 'react'
163
154
 
164
155
  function CheckboxMenu() {
@@ -199,7 +190,7 @@ function CheckboxMenu() {
199
190
  ### With Radio Group
200
191
 
201
192
  ```typescript
202
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem } from '@torch-ui/components'
193
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem } from "@/components/DropdownMenu";
203
194
  import { useState } from 'react'
204
195
 
205
196
  function RadioMenu() {
@@ -225,7 +216,7 @@ function RadioMenu() {
225
216
  ### With Submenu
226
217
 
227
218
  ```typescript
228
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent } from '@torch-ui/components'
219
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent } from "@/components/DropdownMenu";
229
220
 
230
221
  function SubmenuExample() {
231
222
  return (
@@ -258,7 +249,7 @@ function SubmenuExample() {
258
249
  ### Disabled Items
259
250
 
260
251
  ```typescript
261
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@torch-ui/components'
252
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from "@/components/DropdownMenu";
262
253
 
263
254
  function DisabledMenu() {
264
255
  return (
@@ -281,7 +272,7 @@ function DisabledMenu() {
281
272
  For a true right-click (context) menu, use the dedicated [ContextMenu](./context-menu.md) component instead of DropdownMenu — it opens at the pointer on right-click / long-press.
282
273
 
283
274
  ```typescript
284
- import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem } from '@torch-ui/components'
275
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem } from "@/components/ContextMenu";
285
276
 
286
277
  function Example() {
287
278
  return (
@@ -304,8 +295,8 @@ function Example() {
304
295
  Tall menus scroll instead of overflowing off-screen. The surface caps at `maxHeight` (default `320`px) and never exceeds the space available after collision handling. Pass `maxHeight` to change the cap.
305
296
 
306
297
  ```typescript
307
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel } from '@torch-ui/components'
308
- import { Button } from '@torch-ui/components'
298
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel } from "@/components/DropdownMenu";
299
+ import { Button } from "@/components/Button";
309
300
 
310
301
  function LongMenu() {
311
302
  return (
@@ -497,7 +488,7 @@ export const DropdownMenuRadioItem: React.ForwardRefExoticComponent<DropdownMenu
497
488
  ### With State Management
498
489
 
499
490
  ```typescript
500
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@torch-ui/components'
491
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from "@/components/DropdownMenu";
501
492
  import { useState } from 'react'
502
493
 
503
494
  function useDropdownMenu() {
@@ -536,7 +527,7 @@ function StatefulMenu() {
536
527
 
537
528
  ```typescript
538
529
  import { render, screen, fireEvent } from '@testing-library/react'
539
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@torch-ui/components'
530
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from "@/components/DropdownMenu";
540
531
 
541
532
  describe('DropdownMenu', () => {
542
533
  it('opens on trigger click', () => {