torch-glare 2.3.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 +7 -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 +110 -106
  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 +10 -8
  19. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +21 -55
  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 +173 -150
  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 +87 -0
  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 +111 -114
  41. package/apps/lib/components/DatePicker.tsx +198 -191
  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 +144 -181
  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 +119 -0
  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 +46 -52
  69. package/apps/lib/components/SearchableTable.tsx +199 -219
  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 +47 -24
  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 +18 -14
  160. package/docs/components/data-views-layout.md +20 -17
  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 +51 -32
  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 +187 -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 +60 -41
  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 +130 -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 +7 -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: [skeleton, loading, placeholder, shimmer, pulse, loader, content-loade
11
11
 
12
12
  ## Installation
13
13
 
14
- No additional dependencies required.
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 Skeleton
20
+ ```
21
+
22
+ `add` also copies any components, hooks, and utilities that `Skeleton` depends on.
15
23
 
16
24
  ## Import
17
25
 
18
- ```typescript
19
- import { Skeleton } 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 { Skeleton } from "@/components/Skeleton";
20
30
  ```
21
31
 
22
32
  ## Quick Examples
@@ -24,7 +34,7 @@ import { Skeleton } from '@torch-ui/components'
24
34
  ### Basic Usage
25
35
 
26
36
  ```typescript
27
- import { Skeleton } from '@torch-ui/components'
37
+ import { Skeleton } from "@/components/Skeleton";
28
38
 
29
39
  function Example() {
30
40
  return <Skeleton className="h-4 w-[250px]" />
@@ -34,7 +44,7 @@ function Example() {
34
44
  ### Text Lines
35
45
 
36
46
  ```typescript
37
- import { Skeleton } from '@torch-ui/components'
47
+ import { Skeleton } from "@/components/Skeleton";
38
48
 
39
49
  function TextSkeleton() {
40
50
  return (
@@ -50,7 +60,7 @@ function TextSkeleton() {
50
60
  ### Card Skeleton
51
61
 
52
62
  ```typescript
53
- import { Skeleton } from '@torch-ui/components'
63
+ import { Skeleton } from "@/components/Skeleton";
54
64
 
55
65
  function CardSkeleton() {
56
66
  return (
@@ -67,7 +77,7 @@ function CardSkeleton() {
67
77
  ### Profile Skeleton
68
78
 
69
79
  ```typescript
70
- import { Skeleton } from '@torch-ui/components'
80
+ import { Skeleton } from "@/components/Skeleton";
71
81
 
72
82
  function ProfileSkeleton() {
73
83
  return (
@@ -88,7 +98,7 @@ function ProfileSkeleton() {
88
98
  ### Table Skeleton
89
99
 
90
100
  ```typescript
91
- import { Skeleton } from '@torch-ui/components'
101
+ import { Skeleton } from "@/components/Skeleton";
92
102
 
93
103
  function TableSkeleton() {
94
104
  return (
@@ -118,7 +128,7 @@ function TableSkeleton() {
118
128
  ### Button Skeleton
119
129
 
120
130
  ```typescript
121
- import { Skeleton } from '@torch-ui/components'
131
+ import { Skeleton } from "@/components/Skeleton";
122
132
 
123
133
  function ButtonSkeleton() {
124
134
  return <Skeleton className="h-10 w-32 rounded-md" />
@@ -128,7 +138,7 @@ function ButtonSkeleton() {
128
138
  ### Image Skeleton
129
139
 
130
140
  ```typescript
131
- import { Skeleton } from '@torch-ui/components'
141
+ import { Skeleton } from "@/components/Skeleton";
132
142
 
133
143
  function ImageSkeleton() {
134
144
  return (
@@ -146,7 +156,7 @@ function ImageSkeleton() {
146
156
  ### List Skeleton
147
157
 
148
158
  ```typescript
149
- import { Skeleton } from '@torch-ui/components'
159
+ import { Skeleton } from "@/components/Skeleton";
150
160
 
151
161
  function ListSkeleton() {
152
162
  return (
@@ -168,7 +178,7 @@ function ListSkeleton() {
168
178
  ### Dashboard Skeleton
169
179
 
170
180
  ```typescript
171
- import { Skeleton } from '@torch-ui/components'
181
+ import { Skeleton } from "@/components/Skeleton";
172
182
 
173
183
  function DashboardSkeleton() {
174
184
  return (
@@ -194,7 +204,7 @@ function DashboardSkeleton() {
194
204
  ### Conditional Loading
195
205
 
196
206
  ```typescript
197
- import { Skeleton } from '@torch-ui/components'
207
+ import { Skeleton } from "@/components/Skeleton";
198
208
  import { useState, useEffect } from 'react'
199
209
 
200
210
  interface User {
@@ -241,7 +251,7 @@ function UserProfile() {
241
251
  ### Grid Skeleton
242
252
 
243
253
  ```typescript
244
- import { Skeleton } from '@torch-ui/components'
254
+ import { Skeleton } from "@/components/Skeleton";
245
255
 
246
256
  function GridSkeleton() {
247
257
  return (
@@ -289,7 +299,7 @@ export const Skeleton: React.FC<SkeletonProps>
289
299
  ### Usage with TypeScript
290
300
 
291
301
  ```typescript
292
- import { Skeleton } from '@torch-ui/components'
302
+ import { Skeleton } from "@/components/Skeleton";
293
303
 
294
304
  function TypedSkeleton() {
295
305
  const skeletonProps: React.ComponentProps<typeof Skeleton> = {
@@ -306,14 +316,14 @@ function TypedSkeleton() {
306
316
  ### Reusable Skeleton Components
307
317
 
308
318
  ```typescript
309
- import { Skeleton } from '@torch-ui/components'
319
+ import { Skeleton } from "@/components/Skeleton";
310
320
 
311
321
  // Avatar skeleton
312
- export function AvatarSkeleton({ size = 'md' }: { size?: 'sm' | 'md' | 'lg' }) {
322
+ export function AvatarSkeleton({ size = 'M' }: { size?: 'S' | 'M' | 'L' }) {
313
323
  const sizeClasses = {
314
- sm: 'h-8 w-8',
315
- md: 'h-12 w-12',
316
- lg: 'h-16 w-16',
324
+ S: 'h-8 w-8',
325
+ M: 'h-12 w-12',
326
+ L: 'h-16 w-16',
317
327
  }
318
328
 
319
329
  return <Skeleton className={`${sizeClasses[size]} rounded-full`} />
@@ -334,14 +344,14 @@ export function TextSkeleton({ lines = 3 }: { lines?: number }) {
334
344
  }
335
345
 
336
346
  // Usage
337
- <AvatarSkeleton size="lg" />
347
+ <AvatarSkeleton size="L" />
338
348
  <TextSkeleton lines={4} />
339
349
  ```
340
350
 
341
351
  ### With Suspense
342
352
 
343
353
  ```typescript
344
- import { Skeleton } from '@torch-ui/components'
354
+ import { Skeleton } from "@/components/Skeleton";
345
355
  import { Suspense } from 'react'
346
356
 
347
357
  function ProfileSkeleton() {
@@ -368,7 +378,7 @@ function App() {
368
378
  ### Loading States Hook
369
379
 
370
380
  ```typescript
371
- import { Skeleton } from '@torch-ui/components'
381
+ import { Skeleton } from "@/components/Skeleton";
372
382
  import { useState, useEffect } from 'react'
373
383
 
374
384
  function useLoading<T>(fetchFn: () => Promise<T>) {
@@ -399,7 +409,7 @@ function DataDisplay() {
399
409
  ### Delayed Skeleton
400
410
 
401
411
  ```typescript
402
- import { Skeleton } from '@torch-ui/components'
412
+ import { Skeleton } from "@/components/Skeleton";
403
413
  import { useState, useEffect } from 'react'
404
414
 
405
415
  function DelayedSkeleton({ delay = 300, children }) {
@@ -477,7 +487,7 @@ function FastLoading() {
477
487
 
478
488
  ```typescript
479
489
  import { render, screen } from '@testing-library/react'
480
- import { Skeleton } from '@torch-ui/components'
490
+ import { Skeleton } from "@/components/Skeleton";
481
491
 
482
492
  describe('Skeleton', () => {
483
493
  it('renders skeleton with correct classes', () => {
@@ -500,7 +510,7 @@ describe('Skeleton', () => {
500
510
 
501
511
  ```typescript
502
512
  import { render, screen, waitFor } from '@testing-library/react'
503
- import { Skeleton } from '@torch-ui/components'
513
+ import { Skeleton } from "@/components/Skeleton";
504
514
 
505
515
  function ComponentWithLoading() {
506
516
  const [loading, setLoading] = useState(true)
@@ -553,7 +563,7 @@ test('shows skeleton then content', async () => {
553
563
  ### Enhanced Accessibility
554
564
 
555
565
  ```typescript
556
- import { Skeleton } from '@torch-ui/components'
566
+ import { Skeleton } from "@/components/Skeleton";
557
567
 
558
568
  function AccessibleSkeleton() {
559
569
  return (
@@ -600,7 +610,7 @@ function AccessibleSkeleton() {
600
610
 
601
611
  ```diff
602
612
  - import Skeleton from 'react-loading-skeleton'
603
- + import { Skeleton } from '@torch-ui/components'
613
+ + import { Skeleton } from "@/components/Skeleton";
604
614
 
605
615
  - <Skeleton count={3} />
606
616
  + {[...Array(3)].map((_, i) => (
@@ -612,12 +622,12 @@ function AccessibleSkeleton() {
612
622
 
613
623
  ```diff
614
624
  - import { Skeleton } from '@mui/material'
615
- + import { Skeleton } from '@torch-ui/components'
625
+ + import { Skeleton } from "@/components/Skeleton";
616
626
 
617
- - <Skeleton variant="text" width={210} height={60} />
627
+ - <Skeleton width={210} height={60} /> {/* MUI text variant */}
618
628
  + <Skeleton className="h-[60px] w-[210px]" />
619
629
 
620
- - <Skeleton variant="circular" width={40} height={40} />
630
+ - <Skeleton width={40} height={40} /> {/* MUI circular variant */}
621
631
  + <Skeleton className="h-10 w-10 rounded-full" />
622
632
  ```
623
633
 
@@ -625,12 +635,12 @@ function AccessibleSkeleton() {
625
635
 
626
636
  ```diff
627
637
  - import { Skeleton } from 'antd'
628
- + import { Skeleton } from '@torch-ui/components'
638
+ + import { Skeleton } from "@/components/Skeleton";
629
639
 
630
640
  - <Skeleton active />
631
641
  + <Skeleton className="h-4 w-full" />
632
642
 
633
- - <Skeleton.Avatar active size="large" />
643
+ - <Skeleton.Avatar active /> {/* Ant large avatar */}
634
644
  + <Skeleton className="h-16 w-16 rounded-full" />
635
645
  ```
636
646
 
@@ -11,15 +11,22 @@ keywords: [slide-picker, date, wheel, mobile, picker, 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 torch-react-mobile-picker date-fns
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add SlideDatePicker
16
20
  ```
17
21
 
22
+ `add` also copies any components, hooks, and utilities that `SlideDatePicker` depends on.
23
+
18
24
  ## Import
19
25
 
20
- ```typescript
21
- import { SlideDatePicker } from '@torch-ui/components'
22
- import type { SlideDatePickerProps } 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 { SlideDatePicker } from "@/components/SlideDatePicker";
23
30
  ```
24
31
 
25
32
  ## Quick Examples
@@ -27,7 +34,7 @@ import type { SlideDatePickerProps } from '@torch-ui/components'
27
34
  ### Basic Usage
28
35
 
29
36
  ```typescript
30
- import { SlideDatePicker } from '@torch-ui/components'
37
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
31
38
  import { useState } from 'react'
32
39
 
33
40
  function Example() {
@@ -45,7 +52,7 @@ function Example() {
45
52
  ### Custom Date Format
46
53
 
47
54
  ```typescript
48
- import { SlideDatePicker } from '@torch-ui/components'
55
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
49
56
  import { useState } from 'react'
50
57
 
51
58
  function CustomFormat() {
@@ -64,8 +71,8 @@ function CustomFormat() {
64
71
  ### With Custom Trigger
65
72
 
66
73
  ```typescript
67
- import { SlideDatePicker } from '@torch-ui/components'
68
- import { Button } from '@torch-ui/components'
74
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
75
+ import { Button } from "@/components/Button";
69
76
  import { useState } from 'react'
70
77
 
71
78
  function CustomTrigger() {
@@ -76,7 +83,7 @@ function CustomTrigger() {
76
83
  value={date}
77
84
  onChange={(e) => setDate(e.target.value)}
78
85
  >
79
- <Button variant="SecondaryStyle">
86
+ <Button variant="BluSecStyle">
80
87
  <i className="ri-calendar-2-line" />
81
88
  {date.toLocaleDateString()}
82
89
  </Button>
@@ -88,7 +95,7 @@ function CustomTrigger() {
88
95
  ### Dark/Light Theme
89
96
 
90
97
  ```typescript
91
- import { SlideDatePicker } from '@torch-ui/components'
98
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
92
99
 
93
100
  function ThemedPicker() {
94
101
  const [date, setDate] = useState<Date>(new Date())
@@ -114,8 +121,8 @@ function ThemedPicker() {
114
121
  ### Birthday Picker
115
122
 
116
123
  ```typescript
117
- import { SlideDatePicker } from '@torch-ui/components'
118
- import { InputField } from '@torch-ui/components'
124
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
125
+ import { InputField } from "@/components/InputField";
119
126
  import { useState } from 'react'
120
127
 
121
128
  function BirthdayPicker() {
@@ -139,8 +146,8 @@ function BirthdayPicker() {
139
146
  ### Appointment Scheduler
140
147
 
141
148
  ```typescript
142
- import { SlideDatePicker } from '@torch-ui/components'
143
- import { InputField } from '@torch-ui/components'
149
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
150
+ import { InputField } from "@/components/InputField";
144
151
  import { useState } from 'react'
145
152
 
146
153
  function AppointmentScheduler() {
@@ -179,7 +186,7 @@ function AppointmentScheduler() {
179
186
  ### With Initial Date
180
187
 
181
188
  ```typescript
182
- import { SlideDatePicker } from '@torch-ui/components'
189
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
183
190
  import { useState } from 'react'
184
191
 
185
192
  function WithInitialDate() {
@@ -201,8 +208,8 @@ function WithInitialDate() {
201
208
  ### Multiple Date Pickers
202
209
 
203
210
  ```typescript
204
- import { SlideDatePicker } from '@torch-ui/components'
205
- import { InputField } from '@torch-ui/components'
211
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
212
+ import { InputField } from "@/components/InputField";
206
213
  import { useState } from 'react'
207
214
 
208
215
  function DateRangePicker() {
@@ -248,8 +255,9 @@ function DateRangePicker() {
248
255
  ### Form Integration
249
256
 
250
257
  ```typescript
251
- import { SlideDatePicker } from '@torch-ui/components'
252
- import { InputField, Button } from '@torch-ui/components'
258
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
259
+ import { Button } from "@/components/Button";
260
+ import { InputField } from "@/components/InputField";
253
261
  import { useState } from 'react'
254
262
 
255
263
  function RegistrationForm() {
@@ -292,7 +300,7 @@ function RegistrationForm() {
292
300
  ### Localized Date Format
293
301
 
294
302
  ```typescript
295
- import { SlideDatePicker } from '@torch-ui/components'
303
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
296
304
  import { useState } from 'react'
297
305
 
298
306
  function LocalizedPicker() {
@@ -359,7 +367,7 @@ type SlideValues = {
359
367
 
360
368
  ```typescript
361
369
  import { ComponentProps, ReactElement } from 'react'
362
- import { InputField } from '@torch-ui/components'
370
+ import { InputField } from "@/components/InputField";
363
371
 
364
372
  interface SlideDatePickerProps extends Omit<ComponentProps<typeof InputField>, 'onChange'> {
365
373
  onChange?: (e: { target: { value: Date } }) => void
@@ -377,7 +385,7 @@ export const SlideDatePicker: React.ForwardRefExoticComponent<
377
385
  ### Usage with Types
378
386
 
379
387
  ```typescript
380
- import { SlideDatePicker } from '@torch-ui/components'
388
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
381
389
  import { useRef, useState } from 'react'
382
390
 
383
391
  function TypedExample() {
@@ -405,8 +413,8 @@ function TypedExample() {
405
413
  ### Age Verification
406
414
 
407
415
  ```typescript
408
- import { SlideDatePicker } from '@torch-ui/components'
409
- import { InputField } from '@torch-ui/components'
416
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
417
+ import { InputField } from "@/components/InputField";
410
418
  import { useState } from 'react'
411
419
 
412
420
  function AgeVerification() {
@@ -457,8 +465,8 @@ function AgeVerification() {
457
465
  ### Expiration Date Picker
458
466
 
459
467
  ```typescript
460
- import { SlideDatePicker } from '@torch-ui/components'
461
- import { InputField } from '@torch-ui/components'
468
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
469
+ import { InputField } from "@/components/InputField";
462
470
  import { useState } from 'react'
463
471
 
464
472
  function ExpirationPicker() {
@@ -490,7 +498,7 @@ function ExpirationPicker() {
490
498
  ### Historical Date Picker
491
499
 
492
500
  ```typescript
493
- import { SlideDatePicker } from '@torch-ui/components'
501
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
494
502
  import { useState } from 'react'
495
503
 
496
504
  function HistoricalDatePicker() {
@@ -522,7 +530,7 @@ function HistoricalDatePicker() {
522
530
 
523
531
  ```typescript
524
532
  import { render, screen, fireEvent, waitFor } from '@testing-library/react'
525
- import { SlideDatePicker } from '@torch-ui/components'
533
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
526
534
  import userEvent from '@testing-library/user-event'
527
535
 
528
536
  describe('SlideDatePicker', () => {
@@ -647,7 +655,7 @@ describe('SlideDatePicker', () => {
647
655
  ```typescript
648
656
  import { render, screen, waitFor } from '@testing-library/react'
649
657
  import userEvent from '@testing-library/user-event'
650
- import { SlideDatePicker } from '@torch-ui/components'
658
+ import { SlideDatePicker } from "@/components/SlideDatePicker";
651
659
 
652
660
  describe('SlideDatePicker Integration', () => {
653
661
  it('updates form value on date selection', async () => {
@@ -11,13 +11,22 @@ keywords: [loading, spinner, loader, animation, spin, progress]
11
11
 
12
12
  ## Installation
13
13
 
14
- No external dependencies required.
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 SpinLoading
20
+ ```
21
+
22
+ `add` also copies any components, hooks, and utilities that `SpinLoading` depends on.
15
23
 
16
24
  ## Import
17
25
 
18
- ```typescript
19
- import { SpinLoading } from '@torch-ui/components'
20
- import type { SpinLoadingProps } 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 { SpinLoading } from "@/components/SpinLoading";
21
30
  ```
22
31
 
23
32
  ## Quick Examples
@@ -25,7 +34,7 @@ import type { SpinLoadingProps } from '@torch-ui/components'
25
34
  ### Basic Usage
26
35
 
27
36
  ```typescript
28
- import { SpinLoading } from '@torch-ui/components'
37
+ import { SpinLoading } from "@/components/SpinLoading";
29
38
 
30
39
  function Example() {
31
40
  return <SpinLoading />
@@ -35,7 +44,7 @@ function Example() {
35
44
  ### With Different Sizes
36
45
 
37
46
  ```typescript
38
- import { SpinLoading } from '@torch-ui/components'
47
+ import { SpinLoading } from "@/components/SpinLoading";
39
48
 
40
49
  function SizesExample() {
41
50
  return (
@@ -51,7 +60,7 @@ function SizesExample() {
51
60
  ### Dark Theme
52
61
 
53
62
  ```typescript
54
- import { SpinLoading } from '@torch-ui/components'
63
+ import { SpinLoading } from "@/components/SpinLoading";
55
64
 
56
65
  function DarkTheme() {
57
66
  return (
@@ -65,7 +74,7 @@ function DarkTheme() {
65
74
  ### Light Theme
66
75
 
67
76
  ```typescript
68
- import { SpinLoading } from '@torch-ui/components'
77
+ import { SpinLoading } from "@/components/SpinLoading";
69
78
 
70
79
  function LightTheme() {
71
80
  return (
@@ -79,7 +88,7 @@ function LightTheme() {
79
88
  ### With Center Content
80
89
 
81
90
  ```typescript
82
- import { SpinLoading } from '@torch-ui/components'
91
+ import { SpinLoading } from "@/components/SpinLoading";
83
92
 
84
93
  function WithContent() {
85
94
  return (
@@ -96,7 +105,7 @@ function WithContent() {
96
105
  ### With Percentage
97
106
 
98
107
  ```typescript
99
- import { SpinLoading } from '@torch-ui/components'
108
+ import { SpinLoading } from "@/components/SpinLoading";
100
109
  import { useState, useEffect } from 'react'
101
110
 
102
111
  function PercentageLoader() {
@@ -123,7 +132,7 @@ function PercentageLoader() {
123
132
  ### Loading Overlay
124
133
 
125
134
  ```typescript
126
- import { SpinLoading } from '@torch-ui/components'
135
+ import { SpinLoading } from "@/components/SpinLoading";
127
136
 
128
137
  function LoadingOverlay({ loading, children }: { loading: boolean; children: React.ReactNode }) {
129
138
  return (
@@ -159,7 +168,7 @@ function App() {
159
168
  ### Full Page Loading
160
169
 
161
170
  ```typescript
162
- import { SpinLoading } from '@torch-ui/components'
171
+ import { SpinLoading } from "@/components/SpinLoading";
163
172
 
164
173
  function FullPageLoading() {
165
174
  return (
@@ -177,7 +186,7 @@ function FullPageLoading() {
177
186
  ### Data Loading State
178
187
 
179
188
  ```typescript
180
- import { SpinLoading } from '@torch-ui/components'
189
+ import { SpinLoading } from "@/components/SpinLoading";
181
190
  import { useEffect, useState } from 'react'
182
191
 
183
192
  function DataLoader() {
@@ -207,8 +216,8 @@ function DataLoader() {
207
216
  ### Card Loading
208
217
 
209
218
  ```typescript
210
- import { SpinLoading } from '@torch-ui/components'
211
- import { Card } from '@torch-ui/components'
219
+ import { SpinLoading } from "@/components/SpinLoading";
220
+ import { Card } from "@/components/Card";
212
221
 
213
222
  function CardWithLoading({ loading }: { loading: boolean }) {
214
223
  return (
@@ -233,8 +242,8 @@ function CardWithLoading({ loading }: { loading: boolean }) {
233
242
  ### Button Loading State
234
243
 
235
244
  ```typescript
236
- import { SpinLoading } from '@torch-ui/components'
237
- import { Button } from '@torch-ui/components'
245
+ import { SpinLoading } from "@/components/SpinLoading";
246
+ import { Button } from "@/components/Button";
238
247
  import { useState } from 'react'
239
248
 
240
249
  function LoadingButton() {
@@ -306,7 +315,7 @@ export const SpinLoading: React.FC<SpinLoadingProps>
306
315
  ### Usage with Types
307
316
 
308
317
  ```typescript
309
- import { SpinLoading } from '@torch-ui/components'
318
+ import { SpinLoading } from "@/components/SpinLoading";
310
319
  import { useState } from 'react'
311
320
 
312
321
  function TypedExample() {
@@ -338,7 +347,7 @@ function TypedExample() {
338
347
  ### Async Operation Wrapper
339
348
 
340
349
  ```typescript
341
- import { SpinLoading } from '@torch-ui/components'
350
+ import { SpinLoading } from "@/components/SpinLoading";
342
351
  import { ReactNode, useState } from 'react'
343
352
 
344
353
  function AsyncWrapper({
@@ -377,7 +386,7 @@ function AsyncWrapper({
377
386
  ### Suspense-Like Fallback
378
387
 
379
388
  ```typescript
380
- import { SpinLoading } from '@torch-ui/components'
389
+ import { SpinLoading } from "@/components/SpinLoading";
381
390
  import { Suspense } from 'react'
382
391
 
383
392
  function SuspenseWithLoading({ children }: { children: React.ReactNode }) {
@@ -400,7 +409,7 @@ function SuspenseWithLoading({ children }: { children: React.ReactNode }) {
400
409
  ### Loading State Manager
401
410
 
402
411
  ```typescript
403
- import { SpinLoading } from '@torch-ui/components'
412
+ import { SpinLoading } from "@/components/SpinLoading";
404
413
  import { createContext, useContext, useState, ReactNode } from 'react'
405
414
 
406
415
  const LoadingContext = createContext({
@@ -448,7 +457,7 @@ function MyComponent() {
448
457
 
449
458
  ```typescript
450
459
  import { render, screen } from '@testing-library/react'
451
- import { SpinLoading } from '@torch-ui/components'
460
+ import { SpinLoading } from "@/components/SpinLoading";
452
461
 
453
462
  describe('SpinLoading', () => {
454
463
  it('renders spinner', () => {
@@ -513,7 +522,7 @@ describe('SpinLoading', () => {
513
522
 
514
523
  ```typescript
515
524
  import { render, screen, waitFor } from '@testing-library/react'
516
- import { SpinLoading } from '@torch-ui/components'
525
+ import { SpinLoading } from "@/components/SpinLoading";
517
526
 
518
527
  describe('SpinLoading Integration', () => {
519
528
  it('shows loading state during async operation', async () => {
@@ -14,10 +14,16 @@ The component is composed of `Stepper`, `Step`, `StepIndicator`, `StepConnector`
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 Stepper
19
23
  ```
20
24
 
25
+ `add` also copies any components, hooks, and utilities that `Stepper` depends on.
26
+
21
27
  ## Imports
22
28
 
23
29
  ```typescript