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
@@ -12,10 +12,16 @@ Compact label for status, categories, and tags. Two visual styles (`solid`, `sub
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 badge
19
+ npx torch-glare@latest init
20
+ npx torch-glare@latest add Badge
17
21
  ```
18
22
 
23
+ `add` also copies any components, hooks, and utilities that `Badge` depends on.
24
+
19
25
  ## Imports
20
26
 
21
27
  ```typescript
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Breadcrumb
3
- version: 1.1.15
3
+ version: 2.4.0
4
4
  status: stable
5
5
  category: components/navigation
6
6
  tags: [navigation, breadcrumb, wayfinding, compound, accessible, rtl]
@@ -17,32 +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 Breadcrumb
22
26
  ```
23
27
 
28
+ `add` also copies any components, hooks, and utilities that `Breadcrumb` depends on.
29
+
24
30
  ## Import
25
31
 
26
- ```typescript
27
- import {
28
- Breadcrumb,
29
- BreadcrumbList,
30
- BreadcrumbItem,
31
- BreadcrumbLink,
32
- BreadcrumbPage,
33
- BreadcrumbSeparator,
34
- BreadcrumbEllipsis,
35
- } from 'torch-glare/lib/components/Breadcrumb'
36
- // or
37
- import {
38
- Breadcrumb,
39
- BreadcrumbList,
40
- BreadcrumbItem,
41
- BreadcrumbLink,
42
- BreadcrumbPage,
43
- BreadcrumbSeparator,
44
- BreadcrumbEllipsis,
45
- } from 'torch-glare/lib/components'
32
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
33
+
34
+ ```tsx
35
+ import { Breadcrumb } from "@/components/Breadcrumb";
46
36
  ```
47
37
 
48
38
  ## Quick Examples
@@ -50,14 +40,7 @@ import {
50
40
  ### Basic Usage
51
41
 
52
42
  ```typescript
53
- import {
54
- Breadcrumb,
55
- BreadcrumbList,
56
- BreadcrumbItem,
57
- BreadcrumbLink,
58
- BreadcrumbPage,
59
- BreadcrumbSeparator,
60
- } from 'torch-glare/lib/components/Breadcrumb'
43
+ import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@/components/Breadcrumb";
61
44
 
62
45
  function Example() {
63
46
  return (
@@ -463,7 +446,7 @@ function DynamicBreadcrumb({ segments }: { segments: { label: string; href: stri
463
446
  ### Collapsible Breadcrumb with Dropdown
464
447
 
465
448
  ```typescript
466
- import { DropdownMenu } from 'torch-glare/lib/components/DropdownMenu'
449
+ import { DropdownMenu } from "@/components/DropdownMenu";
467
450
 
468
451
  function CollapsibleBreadcrumb({
469
452
  items,
@@ -639,15 +622,7 @@ function FileExplorerBreadcrumb({
639
622
 
640
623
  ```typescript
641
624
  import { render, screen } from '@testing-library/react'
642
- import {
643
- Breadcrumb,
644
- BreadcrumbList,
645
- BreadcrumbItem,
646
- BreadcrumbLink,
647
- BreadcrumbPage,
648
- BreadcrumbSeparator,
649
- BreadcrumbEllipsis,
650
- } from 'torch-glare/lib/components/Breadcrumb'
625
+ import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis } from "@/components/Breadcrumb";
651
626
 
652
627
  describe('Breadcrumb', () => {
653
628
  it('renders navigation landmark', () => {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ButtonGroup
3
- version: 1.1.15
3
+ version: 2.4.0
4
4
  status: stable
5
5
  category: components/buttons
6
6
  tags: [toggle-group, button-group, selection, radix-ui, accessible, compound]
@@ -17,19 +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 ButtonGroup
22
26
  ```
23
27
 
28
+ `add` also copies any components, hooks, and utilities that `ButtonGroup` depends on.
29
+
24
30
  ## Import
25
31
 
26
- ```typescript
27
- import { ButtonGroup, ButtonGroupItem } from 'torch-glare/lib/components/ButtonGroup'
28
- // or
29
- import { ButtonGroup, ButtonGroupItem } from 'torch-glare/lib/components'
32
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
30
33
 
31
- // Also re-exports ToggleButton from ToggleButton.tsx
32
- import { ToggleButton } from 'torch-glare/lib/components/ButtonGroup'
34
+ ```tsx
35
+ import { ButtonGroup } from "@/components/ButtonGroup";
33
36
  ```
34
37
 
35
38
  ## Quick Examples
@@ -37,7 +40,7 @@ import { ToggleButton } from 'torch-glare/lib/components/ButtonGroup'
37
40
  ### Basic Usage (Single Selection)
38
41
 
39
42
  ```typescript
40
- import { ButtonGroup, ButtonGroupItem } from 'torch-glare/lib/components/ButtonGroup'
43
+ import { ButtonGroup, ButtonGroupItem } from "@/components/ButtonGroup";
41
44
 
42
45
  function Example() {
43
46
  const [value, setValue] = useState('left')
@@ -420,7 +423,7 @@ function DarkToolbar() {
420
423
 
421
424
  ```typescript
422
425
  import { render, screen, fireEvent } from '@testing-library/react'
423
- import { ButtonGroup, ButtonGroupItem } from 'torch-glare/lib/components/ButtonGroup'
426
+ import { ButtonGroup, ButtonGroupItem } from "@/components/ButtonGroup";
424
427
 
425
428
  describe('ButtonGroup', () => {
426
429
  it('selects a single value', () => {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Button
3
- version: 1.1.15
3
+ version: 2.4.0
4
4
  status: stable
5
5
  category: components/buttons
6
6
  tags: [interactive, form, action, accessible, polymorphic]
@@ -17,16 +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 Button
22
26
  ```
23
27
 
28
+ `add` also copies any components, hooks, and utilities that `Button` depends on.
29
+
24
30
  ## Import
25
31
 
26
- ```typescript
27
- import { Button } from 'torch-glare/lib/components/Button'
28
- // or
29
- import { Button } from 'torch-glare/lib/components'
32
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
33
+
34
+ ```tsx
35
+ import { Button } from "@/components/Button";
30
36
  ```
31
37
 
32
38
  ## Quick Examples
@@ -34,7 +40,7 @@ import { Button } from 'torch-glare/lib/components'
34
40
  ### Basic Usage
35
41
 
36
42
  ```typescript
37
- import { Button } from 'torch-glare/lib/components/Button'
43
+ import { Button } from '@/components/Button'
38
44
 
39
45
  function Example() {
40
46
  return (
@@ -53,14 +59,21 @@ function Example() {
53
59
  <Button variant="PrimeContStyle">Primary Container</Button>
54
60
 
55
61
  // Secondary styles
56
- <Button variant="BlueSecStyle">Blue Secondary</Button>
62
+ <Button variant="BluSecStyle">Blue Secondary</Button>
57
63
  <Button variant="YelSecStyle">Yellow Secondary</Button>
58
64
  <Button variant="RedSecStyle">Red Secondary</Button>
59
65
 
60
66
  // Container styles
61
- <Button variant="BlueContStyle">Blue Container</Button>
67
+ <Button variant="BluContStyle">Blue Container</Button>
62
68
  <Button variant="RedContStyle">Red Container</Button>
63
69
 
70
+ // Color (solid) styles
71
+ <Button variant="PrimeColStyle">Primary Color</Button>
72
+ <Button variant="BluColStyle">Blue Color</Button>
73
+ <Button variant="RedColStyle">Red Color</Button>
74
+ <Button variant="GreenColStyle">Green Color</Button>
75
+ <Button variant="YelColStyle">Yellow Color</Button>
76
+
64
77
  // Border style
65
78
  <Button variant="BorderStyle">Border Only</Button>
66
79
  ```
@@ -68,11 +81,11 @@ function Example() {
68
81
  ### With Sizes
69
82
 
70
83
  ```typescript
71
- <Button size="sm">Small</Button>
72
- <Button size="md">Medium (Default)</Button>
73
- <Button size="lg">Large</Button>
74
- <Button size="xl">Extra Large</Button>
75
- <Button size="icon">Icon Only</Button>
84
+ <Button size="S">Small</Button>
85
+ <Button size="M">Medium (Default)</Button>
86
+ <Button size="L">Large</Button>
87
+ <Button size="XL">Extra Large</Button>
88
+ <Button buttonType="icon">Icon Only</Button>
76
89
  ```
77
90
 
78
91
  ### Loading State
@@ -117,7 +130,7 @@ import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'
117
130
  </Button>
118
131
 
119
132
  // Icon only
120
- <Button size="icon" aria-label="Add new item">
133
+ <Button buttonType="icon" aria-label="Add new item">
121
134
  <PlusIcon className="w-5 h-5" />
122
135
  </Button>
123
136
  ```
@@ -143,7 +156,7 @@ import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'
143
156
  Dark Theme Button
144
157
  </Button>
145
158
 
146
- <Button theme="light" variant="BlueSecStyle">
159
+ <Button theme="light" variant="BluSecStyle">
147
160
  Light Theme Button
148
161
  </Button>
149
162
  ```
@@ -155,7 +168,8 @@ import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'
155
168
  | Prop | Type | Default | Description |
156
169
  |------|------|---------|-------------|
157
170
  | `variant` | `ButtonVariant` | `'PrimeStyle'` | Visual style variant of the button |
158
- | `size` | `'sm' \| 'md' \| 'lg' \| 'xl' \| 'icon'` | `'md'` | Size of the button |
171
+ | `size` | `'S' \| 'M' \| 'L' \| 'XL'` | `'M'` | Size of the button |
172
+ | `buttonType` | `'button' \| 'icon'` | `'button'` | Layout type; `'icon'` renders a square icon-only button |
159
173
  | `is_loading` | `boolean` | `false` | Shows loading state and disables interaction |
160
174
  | `disabled` | `boolean` | `false` | Disables the button |
161
175
  | `asChild` | `boolean` | `false` | Merges props onto child element |
@@ -175,13 +189,18 @@ import { VariantProps } from 'class-variance-authority'
175
189
 
176
190
  type ButtonVariant =
177
191
  | 'PrimeStyle'
178
- | 'BlueSecStyle'
192
+ | 'BluSecStyle'
179
193
  | 'YelSecStyle'
180
194
  | 'RedSecStyle'
181
195
  | 'BorderStyle'
182
196
  | 'PrimeContStyle'
183
- | 'BlueContStyle'
197
+ | 'BluContStyle'
184
198
  | 'RedContStyle'
199
+ | 'PrimeColStyle'
200
+ | 'BluColStyle'
201
+ | 'RedColStyle'
202
+ | 'GreenColStyle'
203
+ | 'YelColStyle'
185
204
 
186
205
  type Themes = 'light' | 'dark' | 'default'
187
206
 
@@ -192,6 +211,7 @@ interface ButtonProps extends
192
211
  disabled?: boolean
193
212
  asChild?: boolean
194
213
  variant?: ButtonVariant
214
+ buttonType?: 'button' | 'icon'
195
215
  as?: React.ElementType
196
216
  theme?: Themes
197
217
  containerClassName?: string
@@ -207,8 +227,8 @@ export const Button: React.ForwardRefExoticComponent<
207
227
  ### Form Submit Button
208
228
 
209
229
  ```typescript
210
- import { Button } from 'torch-glare/lib/components/Button'
211
- import { Form } from 'torch-glare/lib/components/Form'
230
+ import { Button } from '@/components/Button'
231
+ import { Form } from '@/components/Form'
212
232
 
213
233
  function ContactForm() {
214
234
  const [isSubmitting, setIsSubmitting] = useState(false)
@@ -247,8 +267,8 @@ function ContactForm() {
247
267
  ### Button Group
248
268
 
249
269
  ```typescript
250
- import { Button } from 'torch-glare/lib/components/Button'
251
- import { ActionsGroup } from 'torch-glare/lib/components/ActionsGroup'
270
+ import { Button } from '@/components/Button'
271
+ import { ActionsGroup } from '@/components/ActionsGroup'
252
272
 
253
273
  function ButtonGroup() {
254
274
  return (
@@ -271,7 +291,7 @@ function DeleteButton({ onDelete }: { onDelete: () => void }) {
271
291
  return (
272
292
  <div className="flex gap-2">
273
293
  <Button
274
- size="sm"
294
+ size="S"
275
295
  variant="RedSecStyle"
276
296
  onClick={() => {
277
297
  onDelete()
@@ -281,7 +301,7 @@ function DeleteButton({ onDelete }: { onDelete: () => void }) {
281
301
  Confirm Delete
282
302
  </Button>
283
303
  <Button
284
- size="sm"
304
+ size="S"
285
305
  variant="BorderStyle"
286
306
  onClick={() => setNeedsConfirm(false)}
287
307
  >
@@ -305,8 +325,8 @@ function DeleteButton({ onDelete }: { onDelete: () => void }) {
305
325
  ### With Tooltip
306
326
 
307
327
  ```typescript
308
- import { Button } from 'torch-glare/lib/components/Button'
309
- import { Tooltip } from 'torch-glare/lib/components/Tooltip'
328
+ import { Button } from '@/components/Button'
329
+ import { Tooltip } from '@/components/Tooltip'
310
330
 
311
331
  function SaveButton() {
312
332
  return (
@@ -325,7 +345,7 @@ function SaveButton() {
325
345
 
326
346
  ```typescript
327
347
  import { render, screen, fireEvent } from '@testing-library/react'
328
- import { Button } from 'torch-glare/lib/components/Button'
348
+ import { Button } from '@/components/Button'
329
349
 
330
350
  describe('Button', () => {
331
351
  it('handles click events', () => {
@@ -397,20 +417,25 @@ The Button component automatically includes:
397
417
  ```typescript
398
418
  <button
399
419
  type="button"
400
- role="button"
401
- aria-busy={is_loading}
402
- aria-disabled={disabled || is_loading}
403
420
  disabled={disabled || is_loading}
421
+ aria-busy={is_loading || undefined}
404
422
  >
405
423
  {children}
424
+ {/* While loading, the spinner is rendered with role="status" and aria-label="Loading" */}
406
425
  </button>
407
426
  ```
408
427
 
428
+ Notes:
429
+ - The component renders a native `<button>` (or the element passed via `as`), so it does **not** add an explicit `role="button"`.
430
+ - It sets the native `disabled` attribute (never `aria-disabled`) when `disabled` or `is_loading` is true.
431
+ - `aria-busy` is set only while loading; it is omitted otherwise.
432
+ - The loading spinner itself carries `role="status"` and `aria-label="Loading"`.
433
+
409
434
  ### Screen Reader Support
410
435
 
411
436
  ```typescript
412
437
  // Always provide aria-label for icon-only buttons
413
- <Button size="icon" aria-label="Add new item">
438
+ <Button buttonType="icon" aria-label="Add new item">
414
439
  <PlusIcon className="w-5 h-5" />
415
440
  </Button>
416
441
 
@@ -496,7 +521,7 @@ The Button component automatically includes:
496
521
  ```diff
497
522
  // Import path changed
498
523
  - import Button from 'torch-glare/Button'
499
- + import { Button } from 'torch-glare/lib/components/Button'
524
+ + import { Button } from '@/components/Button'
500
525
 
501
526
  // Loading prop renamed
502
527
  - <Button loading={true}>
@@ -11,15 +11,22 @@ keywords: [calendar, date, day-picker, month, year, react-day-picker]
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
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add Calendar
16
20
  ```
17
21
 
22
+ `add` also copies any components, hooks, and utilities that `Calendar` depends on.
23
+
18
24
  ## Import
19
25
 
20
- ```typescript
21
- import { Calendar } from '@torch-ui/components'
22
- import type { CalendarProps } 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 { Calendar } from "@/components/Calendar";
23
30
  ```
24
31
 
25
32
  ## Quick Examples
@@ -27,7 +34,7 @@ import type { CalendarProps } from '@torch-ui/components'
27
34
  ### Basic Usage
28
35
 
29
36
  ```typescript
30
- import { Calendar } from '@torch-ui/components'
37
+ import { Calendar } from "@/components/Calendar";
31
38
  import { useState } from 'react'
32
39
 
33
40
  function Example() {
@@ -46,7 +53,7 @@ function Example() {
46
53
  ### Range Selection
47
54
 
48
55
  ```typescript
49
- import { Calendar } from '@torch-ui/components'
56
+ import { Calendar } from "@/components/Calendar";
50
57
  import { useState } from 'react'
51
58
  import { DateRange } from 'react-day-picker'
52
59
 
@@ -69,7 +76,7 @@ function RangePicker() {
69
76
  ### Multiple Date Selection
70
77
 
71
78
  ```typescript
72
- import { Calendar } from '@torch-ui/components'
79
+ import { Calendar } from "@/components/Calendar";
73
80
  import { useState } from 'react'
74
81
 
75
82
  function MultiplePicker() {
@@ -89,7 +96,7 @@ function MultiplePicker() {
89
96
  ### With Week Numbers
90
97
 
91
98
  ```typescript
92
- import { Calendar } from '@torch-ui/components'
99
+ import { Calendar } from "@/components/Calendar";
93
100
 
94
101
  function WeekNumbers() {
95
102
  return (
@@ -104,7 +111,7 @@ function WeekNumbers() {
104
111
  ### Date Restrictions
105
112
 
106
113
  ```typescript
107
- import { Calendar } from '@torch-ui/components'
114
+ import { Calendar } from "@/components/Calendar";
108
115
 
109
116
  function RestrictedCalendar() {
110
117
  const today = new Date()
@@ -127,7 +134,7 @@ function RestrictedCalendar() {
127
134
  ### Custom Caption Layout
128
135
 
129
136
  ```typescript
130
- import { Calendar } from '@torch-ui/components'
137
+ import { Calendar } from "@/components/Calendar";
131
138
 
132
139
  function LabelOnly() {
133
140
  return (
@@ -151,8 +158,8 @@ function DropdownMonthsOnly() {
151
158
  ### With Footer
152
159
 
153
160
  ```typescript
154
- import { Calendar } from '@torch-ui/components'
155
- import { Button } from '@torch-ui/components'
161
+ import { Calendar } from "@/components/Calendar";
162
+ import { Button } from "@/components/Button";
156
163
 
157
164
  function CalendarWithFooter() {
158
165
  const [selected, setSelected] = useState<Date>()
@@ -180,7 +187,7 @@ function CalendarWithFooter() {
180
187
  ### Multiple Months
181
188
 
182
189
  ```typescript
183
- import { Calendar } from '@torch-ui/components'
190
+ import { Calendar } from "@/components/Calendar";
184
191
 
185
192
  function MultipleMonths() {
186
193
  return (
@@ -195,7 +202,7 @@ function MultipleMonths() {
195
202
  ### With Min/Max Date Range
196
203
 
197
204
  ```typescript
198
- import { Calendar } from '@torch-ui/components'
205
+ import { Calendar } from "@/components/Calendar";
199
206
  import { DateRange } from 'react-day-picker'
200
207
  import { useState } from 'react'
201
208
 
@@ -217,7 +224,7 @@ function RangeWithLimits() {
217
224
  ### Custom Styling
218
225
 
219
226
  ```typescript
220
- import { Calendar } from '@torch-ui/components'
227
+ import { Calendar } from "@/components/Calendar";
221
228
 
222
229
  function StyledCalendar() {
223
230
  return (
@@ -308,7 +315,7 @@ export const Calendar: React.FC<CalendarProps>
308
315
  ### Booking Calendar
309
316
 
310
317
  ```typescript
311
- import { Calendar } from '@torch-ui/components'
318
+ import { Calendar } from "@/components/Calendar";
312
319
  import { useState } from 'react'
313
320
  import { DateRange } from 'react-day-picker'
314
321
 
@@ -346,7 +353,7 @@ function BookingCalendar() {
346
353
  ### Event Calendar
347
354
 
348
355
  ```typescript
349
- import { Calendar } from '@torch-ui/components'
356
+ import { Calendar } from "@/components/Calendar";
350
357
 
351
358
  function EventCalendar({ events }: { events: Event[] }) {
352
359
  const eventDates = events.map(e => e.date)
@@ -371,7 +378,7 @@ function EventCalendar({ events }: { events: Event[] }) {
371
378
 
372
379
  ```typescript
373
380
  import { render, screen, fireEvent } from '@testing-library/react'
374
- import { Calendar } from '@torch-ui/components'
381
+ import { Calendar } from "@/components/Calendar";
375
382
 
376
383
  describe('Calendar', () => {
377
384
  it('renders current month', () => {
@@ -504,7 +511,7 @@ The Calendar component uses CSS variables and can be fully customized:
504
511
 
505
512
  ```diff
506
513
  - import { DayPicker } from 'react-day-picker'
507
- + import { Calendar } from '@torch-ui/components'
514
+ + import { Calendar } from "@/components/Calendar";
508
515
 
509
516
  - <DayPicker
510
517
  + <Calendar
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Card
3
- version: 1.1.15
3
+ version: 2.4.0
4
4
  status: stable
5
5
  category: components/layout
6
6
  tags: [container, layout, card, content, polymorphic]
@@ -16,19 +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 Card
21
25
  ```
22
26
 
27
+ `add` also copies any components, hooks, and utilities that `Card` depends on.
28
+
23
29
  ## Import
24
30
 
25
- ```typescript
26
- import {
27
- Card,
28
- CardHeader,
29
- CardDescription,
30
- CardContent
31
- } from 'torch-glare/lib/components/Card'
31
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
32
+
33
+ ```tsx
34
+ import { Card } from "@/components/Card";
32
35
  ```
33
36
 
34
37
  ## Quick Examples
@@ -36,7 +39,7 @@ import {
36
39
  ### Basic Usage
37
40
 
38
41
  ```typescript
39
- import { Card, CardHeader, CardContent } from 'torch-glare/lib/components/Card'
42
+ import { Card, CardHeader, CardContent } from '@/components/Card'
40
43
 
41
44
  function Example() {
42
45
  return (
@@ -139,8 +142,8 @@ function CardGrid() {
139
142
  ### Card with Form
140
143
 
141
144
  ```typescript
142
- import { Input } from 'torch-glare/lib/components/Input'
143
- import { Button } from 'torch-glare/lib/components/Button'
145
+ import { Input } from '@/components/Input'
146
+ import { Button } from '@/components/Button'
144
147
 
145
148
  function LoginCard() {
146
149
  return (
@@ -305,8 +308,8 @@ function StatsCard({ title, value, change, icon }) {
305
308
  ### Profile Card
306
309
 
307
310
  ```typescript
308
- import { Avatar } from 'torch-glare/lib/components/Avatar'
309
- import { Badge } from 'torch-glare/lib/components/Badge'
311
+ import { Avatar } from '@/components/Avatar'
312
+ import { Badge } from '@/components/Badge'
310
313
 
311
314
  function ProfileCard({ user }) {
312
315
  return (
@@ -388,7 +391,7 @@ function ProductCard({ product }) {
388
391
 
389
392
  ```typescript
390
393
  import { render, screen, fireEvent } from '@testing-library/react'
391
- import { Card, CardHeader, CardContent } from 'torch-glare/lib/components/Card'
394
+ import { Card, CardHeader, CardContent } from '@/components/Card'
392
395
 
393
396
  describe('Card', () => {
394
397
  it('renders card content', () => {
@@ -550,7 +553,7 @@ test('Card meets WCAG standards', async () => {
550
553
  ```diff
551
554
  // Import path changed
552
555
  - import Card from 'torch-glare/Card'
553
- + import { Card, CardHeader, CardContent } from 'torch-glare/lib/components/Card'
556
+ + import { Card, CardHeader, CardContent } from '@/components/Card'
554
557
 
555
558
  // Structure changed to compound
556
559
  - <Card title="Title" description="Description">