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
@@ -0,0 +1,85 @@
1
+ ---
2
+ title: Theme Reference
3
+ description: TORCH Glare theming — data-theme, theme modes, ThemeProvider, and useTheme.
4
+ group: reference
5
+ keywords: [theme, dark mode, data-theme, ThemeProvider, useTheme, tokens]
6
+ ---
7
+
8
+ # Theme Reference
9
+
10
+ TORCH Glare is themed through two `data-*` attributes on the document root and a small
11
+ React context. Every component also accepts a `theme` prop that sets `data-theme` locally.
12
+
13
+ ## Attributes
14
+
15
+ | Attribute | Values | Meaning |
16
+ | --- | --- | --- |
17
+ | `data-theme` | `"light" \| "dark" \| "default"` | The active color theme. |
18
+ | `data-theme-mode` | `"CSS" \| "TORCH"` | Token resolution mode (`TORCH` is the default). |
19
+
20
+ Per-component override:
21
+
22
+ ```tsx
23
+ import { Button } from "@/components/Button";
24
+
25
+ <Button theme="dark" variant="PrimeStyle">Dark button</Button>;
26
+ ```
27
+
28
+ ## ThemeProvider
29
+
30
+ Add the provider once (`npx torch-glare@latest provider ThemeProvider`) and wrap your app.
31
+ It syncs `data-theme` / `data-theme-mode` to `document.documentElement` and persists the
32
+ choice to `localStorage`.
33
+
34
+ ```tsx
35
+ import { ThemeProvider } from "@/providers/ThemeProvider";
36
+
37
+ export function App({ children }: { children: React.ReactNode }) {
38
+ return (
39
+ <ThemeProvider defaultTheme="default" defaultThemeMode="TORCH">
40
+ {children}
41
+ </ThemeProvider>
42
+ );
43
+ }
44
+ ```
45
+
46
+ ### Props
47
+
48
+ | Prop | Type | Default | Description |
49
+ | --- | --- | --- | --- |
50
+ | `defaultTheme` | `"light" \| "dark" \| "default"` | `"default"` | Initial theme (unless a stored/`data-theme` value exists). |
51
+ | `defaultThemeMode` | `"CSS" \| "TORCH"` | `"TORCH"` | Initial token mode. |
52
+
53
+ ## useTheme
54
+
55
+ Read and update the theme from anywhere inside `ThemeProvider`:
56
+
57
+ ```tsx
58
+ import { useTheme } from "@/providers/ThemeProvider";
59
+
60
+ export function ThemeToggle() {
61
+ const { theme, updateTheme, themeMode, updateMode } = useTheme();
62
+
63
+ return (
64
+ <button onClick={() => updateTheme(theme === "dark" ? "light" : "dark")}>
65
+ {theme} / {themeMode}
66
+ </button>
67
+ );
68
+ }
69
+ ```
70
+
71
+ ### Returned value
72
+
73
+ | Field | Type | Description |
74
+ | --- | --- | --- |
75
+ | `theme` | `"light" \| "dark" \| "default"` | Current theme. |
76
+ | `themeMode` | `"CSS" \| "TORCH"` | Current token mode. |
77
+ | `updateTheme` | `(theme) => void` | Set the theme (updates DOM + `localStorage`). |
78
+ | `updateMode` | `(mode) => void` | Set the token mode. |
79
+
80
+ `useTheme` throws if used outside `ThemeProvider`.
81
+
82
+ ## See also
83
+
84
+ - [Providers reference](./providers.md)
85
+ - [CLI reference](./cli.md)
@@ -37,7 +37,7 @@ export type Themes = "dark" | "light" | "default";
37
37
 
38
38
  **Usage:**
39
39
  ```typescript
40
- import type { Themes } from '@torch-ai/torch-glare';
40
+ import type { Themes } from "@/utils/types";
41
41
 
42
42
  interface MyComponentProps {
43
43
  theme?: Themes;
@@ -60,12 +60,12 @@ interface MyComponentProps {
60
60
  ```typescript
61
61
  export type ButtonVariant =
62
62
  | "PrimeStyle" // Primary action
63
- | "BlueSecStyle" // Blue secondary
63
+ | "BluSecStyle" // Blue secondary
64
64
  | "YelSecStyle" // Yellow secondary
65
65
  | "RedSecStyle" // Red secondary
66
66
  | "BorderStyle" // Outlined
67
67
  | "PrimeContStyle" // Primary contrast
68
- | "BlueContStyle" // Blue contrast
68
+ | "BluContStyle" // Blue contrast
69
69
  | "RedContStyle"; // Red contrast
70
70
  ```
71
71
 
@@ -878,7 +878,7 @@ Button.displayName = 'Button';
878
878
  ### Extending Button Props
879
879
 
880
880
  ```typescript
881
- import type { ButtonProps } from '@torch-ai/torch-glare';
881
+ import type { ButtonProps } from "@/components/LoginButton";
882
882
 
883
883
  interface CustomButtonProps extends ButtonProps {
884
884
  isLoading?: boolean;
@@ -29,7 +29,7 @@ Utility function to merge and deduplicate Tailwind CSS classes.
29
29
 
30
30
  **Import:**
31
31
  ```typescript
32
- import { cn } from '@torch-ai/torch-glare/utils';
32
+ import { cn } from "@/utils/cn";
33
33
  ```
34
34
 
35
35
  **Signature:**
@@ -48,7 +48,7 @@ function cn(...inputs: ClassValue[]): string
48
48
  #### Basic Usage
49
49
 
50
50
  ```typescript
51
- import { cn } from '@torch-ai/torch-glare/utils';
51
+ import { cn } from "@/utils/cn";
52
52
 
53
53
  // Merge multiple classes
54
54
  cn('px-4 py-2', 'bg-blue-500', 'text-white')
@@ -110,11 +110,11 @@ cn('hover:text-blue-500', 'hover:text-red-500')
110
110
  ```typescript
111
111
  interface ButtonProps {
112
112
  variant?: 'primary' | 'secondary';
113
- size?: 'sm' | 'md' | 'lg';
113
+ size?: 'S' | 'M' | 'L';
114
114
  className?: string;
115
115
  }
116
116
 
117
- function Button({ variant = 'primary', size = 'md', className }: ButtonProps) {
117
+ function Button({ variant = 'primary', size = 'M', className }: ButtonProps) {
118
118
  return (
119
119
  <button
120
120
  className={cn(
@@ -129,9 +129,9 @@ function Button({ variant = 'primary', size = 'md', className }: ButtonProps) {
129
129
 
130
130
  // Size classes
131
131
  {
132
- 'px-2 py-1 text-sm': size === 'sm',
133
- 'px-4 py-2 text-base': size === 'md',
134
- 'px-6 py-3 text-lg': size === 'lg',
132
+ 'px-2 py-1 text-sm': size === 'S',
133
+ 'px-4 py-2 text-base': size === 'M',
134
+ 'px-6 py-3 text-lg': size === 'L',
135
135
  },
136
136
 
137
137
  // Custom classes (overrides defaults)
@@ -166,7 +166,7 @@ Applies time from a picker to a date object.
166
166
 
167
167
  **Import:**
168
168
  ```typescript
169
- import { applyTimeToDate } from '@torch-ai/torch-glare/utils';
169
+ import { applyTimeToDate } from "@/utils/dateFormat";
170
170
  ```
171
171
 
172
172
  **Signature:**
@@ -206,7 +206,7 @@ Validates if a value is a valid Date object.
206
206
 
207
207
  **Import:**
208
208
  ```typescript
209
- import { isValidDateObject } from '@torch-ai/torch-glare/utils';
209
+ import { isValidDateObject } from "@/utils/dateFormat";
210
210
  ```
211
211
 
212
212
  **Signature:**
@@ -223,7 +223,7 @@ function isValidDateObject(date: Date): boolean
223
223
  **Examples:**
224
224
 
225
225
  ```typescript
226
- import { isValidDateObject } from '@torch-ai/torch-glare/utils';
226
+ import { isValidDateObject } from "@/utils/dateFormat";
227
227
 
228
228
  isValidDateObject(new Date())
229
229
  // Returns: true
@@ -246,7 +246,7 @@ Applies time to various date value types (single, array, or range).
246
246
 
247
247
  **Import:**
248
248
  ```typescript
249
- import { applyTimeToDateValue } from '@torch-ai/torch-glare/utils';
249
+ import { applyTimeToDateValue } from "@/utils/dateFormat";
250
250
  ```
251
251
 
252
252
  **Signature:**
@@ -310,7 +310,7 @@ Formats date values to strings with time applied.
310
310
 
311
311
  **Import:**
312
312
  ```typescript
313
- import { formatDateValueToString } from '@torch-ai/torch-glare/utils';
313
+ import { formatDateValueToString } from "@/utils/dateFormat";
314
314
  ```
315
315
 
316
316
  **Signature:**
@@ -398,7 +398,7 @@ Calculates new width based on mouse position with RTL support.
398
398
 
399
399
  **Import:**
400
400
  ```typescript
401
- import { calculateNewWidthFromMouse } from '@torch-ai/torch-glare/utils';
401
+ import { calculateNewWidthFromMouse } from "@/utils/resize";
402
402
  ```
403
403
 
404
404
  **Signature:**
@@ -422,7 +422,7 @@ function calculateNewWidthFromMouse(
422
422
 
423
423
  ```typescript
424
424
  import { useRef, useState } from 'react';
425
- import { calculateNewWidthFromMouse } from '@torch-ai/torch-glare/utils';
425
+ import { calculateNewWidthFromMouse } from "@/utils/resize";
426
426
 
427
427
  function ResizablePanel() {
428
428
  const panelRef = useRef<HTMLDivElement>(null);
@@ -456,7 +456,7 @@ Calculates new width based on touch position with RTL support.
456
456
 
457
457
  **Import:**
458
458
  ```typescript
459
- import { calculateNewWidthFromTouch } from '@torch-ai/torch-glare/utils';
459
+ import { calculateNewWidthFromTouch } from "@/utils/resize";
460
460
  ```
461
461
 
462
462
  **Signature:**
@@ -480,7 +480,7 @@ function calculateNewWidthFromTouch(
480
480
 
481
481
  ```typescript
482
482
  import { useRef, useState } from 'react';
483
- import { calculateNewWidthFromTouch } from '@torch-ai/torch-glare/utils';
483
+ import { calculateNewWidthFromTouch } from "@/utils/resize";
484
484
 
485
485
  function TouchResizablePanel() {
486
486
  const panelRef = useRef<HTMLDivElement>(null);
@@ -541,11 +541,7 @@ const time: TimePickerValue = {
541
541
  #### Date Formatting with Time
542
542
 
543
543
  ```typescript
544
- import {
545
- applyTimeToDate,
546
- formatDateValueToString,
547
- isValidDateObject
548
- } from '@torch-ai/torch-glare/utils';
544
+ import { applyTimeToDate, formatDateValueToString, isValidDateObject } from "@/utils/dateFormat";
549
545
 
550
546
  function formatUserSelectedDate(
551
547
  date: Date,
@@ -569,7 +565,7 @@ const formatted = formatUserSelectedDate(date, time, 'MM/dd/yyyy hh:mm a');
569
565
  #### Class Name Merging with Variants
570
566
 
571
567
  ```typescript
572
- import { cn } from '@torch-ai/torch-glare/utils';
568
+ import { cn } from "@/utils/cn";
573
569
  import { cva, type VariantProps } from 'class-variance-authority';
574
570
 
575
571
  const buttonVariants = cva(
@@ -609,10 +605,7 @@ function Button({ variant, size, className }: ButtonProps) {
609
605
  #### Resize with Constraints
610
606
 
611
607
  ```typescript
612
- import {
613
- calculateNewWidthFromMouse,
614
- calculateNewWidthFromTouch
615
- } from '@torch-ai/torch-glare/utils';
608
+ import { calculateNewWidthFromMouse, calculateNewWidthFromTouch } from "@/utils/resize";
616
609
 
617
610
  function ConstrainedResize() {
618
611
  const MIN_WIDTH = 200;
@@ -43,7 +43,7 @@ Let's start with a basic form structure:
43
43
  'use client';
44
44
 
45
45
  import { useState } from 'react';
46
- import { Button } from '@torch-ai/torch-glare';
46
+ import { Button } from "@/components/Button";
47
47
 
48
48
  export default function RegistrationForm() {
49
49
  const [formData, setFormData] = useState({
@@ -84,7 +84,8 @@ export default function RegistrationForm() {
84
84
 
85
85
  ```tsx
86
86
  import { useState } from 'react';
87
- import { LabelField, Button } from '@torch-ai/torch-glare';
87
+ import { Button } from "@/components/Button";
88
+ import { LabelField } from "@/components/LabelField";
88
89
 
89
90
  export default function RegistrationForm() {
90
91
  const [formData, setFormData] = useState({
@@ -164,7 +165,9 @@ Let's add comprehensive validation:
164
165
  'use client';
165
166
 
166
167
  import { useState, FormEvent } from 'react';
167
- import { LabelField, Button, FieldHint } from '@torch-ai/torch-glare';
168
+ import { Button } from "@/components/Button";
169
+ import { FieldHint } from "@/components/FieldHint";
170
+ import { LabelField } from "@/components/LabelField";
168
171
 
169
172
  interface FormErrors {
170
173
  fullName?: string;
@@ -360,7 +363,9 @@ export default function RegistrationForm() {
360
363
  Use the `PasswordLevel` component to show password strength:
361
364
 
362
365
  ```tsx
363
- import { LabelField, PasswordLevel, Button } from '@torch-ai/torch-glare';
366
+ import { Button } from "@/components/Button";
367
+ import { LabelField } from "@/components/LabelField";
368
+ import { PasswordLevel } from "@/components/PasswordLevel";
364
369
 
365
370
  // Inside your form component, add this after the password field:
366
371
 
@@ -393,7 +398,9 @@ import { LabelField, PasswordLevel, Button } from '@torch-ai/torch-glare';
393
398
  Use `FieldHint` to provide helpful guidance:
394
399
 
395
400
  ```tsx
396
- import { LabelField, FieldHint, Button } from '@torch-ai/torch-glare';
401
+ import { Button } from "@/components/Button";
402
+ import { FieldHint } from "@/components/FieldHint";
403
+ import { LabelField } from "@/components/LabelField";
397
404
 
398
405
  <div>
399
406
  <LabelField
@@ -468,7 +475,9 @@ const handleSubmit = async (e: FormEvent) => {
468
475
  Use the `toast` function for success notifications:
469
476
 
470
477
  ```tsx
471
- import { LabelField, Button, toast } from '@torch-ai/torch-glare';
478
+ import { Button } from "@/components/Button";
479
+ import { LabelField } from "@/components/LabelField";
480
+ import { toast } from "@/components/Toast";
472
481
 
473
482
  const handleSubmit = async (e: FormEvent) => {
474
483
  e.preventDefault();
@@ -513,13 +522,11 @@ Here's the complete, production-ready form:
513
522
  'use client';
514
523
 
515
524
  import { useState, FormEvent } from 'react';
516
- import {
517
- LabelField,
518
- Button,
519
- PasswordLevel,
520
- FieldHint,
521
- toast,
522
- } from '@torch-ai/torch-glare';
525
+ import { Button } from "@/components/Button";
526
+ import { FieldHint } from "@/components/FieldHint";
527
+ import { LabelField } from "@/components/LabelField";
528
+ import { PasswordLevel } from "@/components/PasswordLevel";
529
+ import { toast } from "@/components/Toast";
523
530
 
524
531
  interface FormErrors {
525
532
  fullName?: string;
@@ -60,13 +60,11 @@ Composition is combining simple components to create more complex ones. Think of
60
60
  ```tsx
61
61
  'use client';
62
62
 
63
- import {
64
- LabelField,
65
- TextArea,
66
- Button,
67
- FieldHint,
68
- toast,
69
- } from '@torch-ai/torch-glare';
63
+ import { Button } from "@/components/Button";
64
+ import { FieldHint } from "@/components/FieldHint";
65
+ import { LabelField } from "@/components/LabelField";
66
+ import { TextArea } from "@/components/TextArea";
67
+ import { toast } from "@/components/Toast";
70
68
  import { useState } from 'react';
71
69
 
72
70
  export default function ContactForm() {
@@ -136,7 +134,8 @@ export default function ContactForm() {
136
134
  ### Feature Card Component
137
135
 
138
136
  ```tsx
139
- import { Button, Badge } from '@torch-ai/torch-glare';
137
+ import { Badge } from "@/components/Badge";
138
+ import { Button } from "@/components/Button";
140
139
 
141
140
  interface FeatureCardProps {
142
141
  title: string;
@@ -167,7 +166,7 @@ export default function FeatureCard({
167
166
  {title}
168
167
  </h3>
169
168
  {badge && (
170
- <Badge theme="light" variant="SecondStyle">
169
+ <Badge theme="light" color="gray">
171
170
  {badge}
172
171
  </Badge>
173
172
  )}
@@ -227,14 +226,10 @@ export default function FeatureCard({
227
226
  ```tsx
228
227
  'use client';
229
228
 
230
- import {
231
- Avatar,
232
- Button,
233
- Badge,
234
- Popover,
235
- PopoverTrigger,
236
- PopoverContent,
237
- } from '@torch-ai/torch-glare';
229
+ import { Avatar } from "@/components/Avatar";
230
+ import { Badge } from "@/components/Badge";
231
+ import { Button } from "@/components/Button";
232
+ import { Popover, PopoverTrigger, PopoverContent } from "@/components/Popover";
238
233
 
239
234
  interface User {
240
235
  id: string;
@@ -337,7 +332,7 @@ export default function UserList({ users, onEdit, onDelete }: UserListProps) {
337
332
  <PopoverTrigger asChild>
338
333
  <Button
339
334
  theme="light"
340
- variant="ContStyle"
335
+ variant="PrimeContStyle"
341
336
  buttonType="icon"
342
337
  size="S"
343
338
  >
@@ -393,20 +388,13 @@ export default function UserList({ users, onEdit, onDelete }: UserListProps) {
393
388
  'use client';
394
389
 
395
390
  import { useState } from 'react';
396
- import {
397
- Dialog,
398
- DialogTrigger,
399
- DialogContent,
400
- DialogHeader,
401
- DialogTitle,
402
- DialogDescription,
403
- LabelField,
404
- TextArea,
405
- Select,
406
- SimpleOption,
407
- Button,
408
- toast,
409
- } from '@torch-ai/torch-glare';
391
+ import { Button } from "@/components/Button";
392
+ import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/Dialog";
393
+ import { LabelField } from "@/components/LabelField";
394
+ import { Select } from "@/components/Select";
395
+ import { SimpleOption } from "@/components/SimpleOption";
396
+ import { TextArea } from "@/components/TextArea";
397
+ import { toast } from "@/components/Toast";
410
398
 
411
399
  export default function CreateProjectModal() {
412
400
  const [open, setOpen] = useState(false);
@@ -509,14 +497,12 @@ export default function CreateProjectModal() {
509
497
  'use client';
510
498
 
511
499
  import { useState } from 'react';
512
- import {
513
- Table,
514
- InputField,
515
- Select,
516
- SimpleOption,
517
- Badge,
518
- Button,
519
- } from '@torch-ai/torch-glare';
500
+ import { Badge } from "@/components/Badge";
501
+ import { Button } from "@/components/Button";
502
+ import { InputField } from "@/components/InputField";
503
+ import { Select } from "@/components/Select";
504
+ import { SimpleOption } from "@/components/SimpleOption";
505
+ import { Table } from "@/components/Table";
520
506
 
521
507
  interface TableRow {
522
508
  id: string;
@@ -630,7 +616,7 @@ export default function DataTableWithFilters() {
630
616
  ${row.revenue.toLocaleString()}
631
617
  </td>
632
618
  <td className="px-4 py-3 text-right">
633
- <Button theme="light" variant="ContStyle" size="S">
619
+ <Button theme="light" variant="PrimeContStyle" size="S">
634
620
  View
635
621
  </Button>
636
622
  </td>
@@ -661,12 +647,10 @@ export default function DataTableWithFilters() {
661
647
  ```tsx
662
648
  'use client';
663
649
 
664
- import {
665
- Button,
666
- Avatar,
667
- Badge,
668
- useTheme,
669
- } from '@torch-ai/torch-glare';
650
+ import { Avatar } from "@/components/Avatar";
651
+ import { Badge } from "@/components/Badge";
652
+ import { Button } from "@/components/Button";
653
+ import { useTheme } from "@/providers/ThemeProvider";
670
654
  import { useState } from 'react';
671
655
 
672
656
  export default function Dashboard() {
@@ -726,7 +710,7 @@ export default function Dashboard() {
726
710
  <div className="flex items-center gap-4">
727
711
  <Button
728
712
  theme={theme as any}
729
- variant="ContStyle"
713
+ variant="PrimeContStyle"
730
714
  buttonType="icon"
731
715
  onClick={() => setSidebarOpen(!sidebarOpen)}
732
716
  >
@@ -740,7 +724,7 @@ export default function Dashboard() {
740
724
  <div className="flex items-center gap-4">
741
725
  <Button
742
726
  theme={theme as any}
743
- variant="ContStyle"
727
+ variant="PrimeContStyle"
744
728
  buttonType="icon"
745
729
  onClick={() => updateTheme(theme === 'light' ? 'dark' : 'light')}
746
730
  >
@@ -780,7 +764,7 @@ export default function Dashboard() {
780
764
  <p className="typography-display-small-bold text-content-presentation-global-primary mb-2">
781
765
  {stat.value}
782
766
  </p>
783
- <Badge theme={theme as any} variant="SecondStyle">
767
+ <Badge theme={theme as any} color="green">
784
768
  {stat.change}
785
769
  </Badge>
786
770
  </div>
@@ -202,8 +202,8 @@ export default function ButtonShowcase() {
202
202
  return (
203
203
  <div className="flex gap-2 flex-wrap">
204
204
  <Button variant="PrimeStyle">Primary</Button>
205
- <Button variant="ContStyle">Contrast</Button>
206
- <Button variant="SecondStyle">Secondary</Button>
205
+ <Button variant="PrimeContStyle">Contrast</Button>
206
+ <Button variant="BluSecStyle">Secondary</Button>
207
207
  <Button variant="BorderStyle">Outline</Button>
208
208
  </div>
209
209
  );
@@ -56,7 +56,7 @@ First, ensure `ThemeProvider` wraps your application:
56
56
 
57
57
  ```tsx
58
58
  // app/layout.tsx
59
- import { ThemeProvider } from '@torch-ai/torch-glare';
59
+ import { ThemeProvider } from "@/providers/ThemeProvider";
60
60
 
61
61
  export default function RootLayout({
62
62
  children,
@@ -95,7 +95,8 @@ Let users switch between light and dark modes:
95
95
  // components/ThemeToggle.tsx
96
96
  'use client';
97
97
 
98
- import { useTheme, Button } from '@torch-ai/torch-glare';
98
+ import { Button } from "@/components/Button";
99
+ import { useTheme } from "@/providers/ThemeProvider";
99
100
 
100
101
  export default function ThemeToggle() {
101
102
  const { theme, updateTheme } = useTheme();
@@ -103,7 +104,7 @@ export default function ThemeToggle() {
103
104
  return (
104
105
  <Button
105
106
  theme={theme as any}
106
- variant="ContStyle"
107
+ variant="PrimeContStyle"
107
108
  buttonType="icon"
108
109
  onClick={() => updateTheme(theme === 'light' ? 'dark' : 'light')}
109
110
  aria-label="Toggle theme"
@@ -119,7 +120,7 @@ export default function ThemeToggle() {
119
120
  ```tsx
120
121
  'use client';
121
122
 
122
- import { useTheme } from '@torch-ai/torch-glare';
123
+ import { useTheme } from "@/providers/ThemeProvider";
123
124
 
124
125
  export default function ThemeSelector() {
125
126
  const { theme, updateTheme } = useTheme();
@@ -219,7 +220,7 @@ export default function ThemedCard({
219
220
  ### Theme-Aware Button
220
221
 
221
222
  ```tsx
222
- import { useTheme } from '@torch-ai/torch-glare';
223
+ import { useTheme } from "@/providers/ThemeProvider";
223
224
 
224
225
  export default function CustomButton({
225
226
  children,
@@ -406,7 +407,9 @@ Here's a complete example combining everything:
406
407
  ```tsx
407
408
  'use client';
408
409
 
409
- import { useTheme, Button, Badge } from '@torch-ai/torch-glare';
410
+ import { Badge } from "@/components/Badge";
411
+ import { Button } from "@/components/Button";
412
+ import { useTheme } from "@/providers/ThemeProvider";
410
413
 
411
414
  export default function ThemedDashboard() {
412
415
  const { theme } = useTheme();
@@ -423,7 +426,7 @@ export default function ThemedDashboard() {
423
426
  <h1 className="typography-display-medium-bold text-content-presentation-global-primary">
424
427
  Dashboard
425
428
  </h1>
426
- <Badge theme={theme as any} variant="SecondStyle">
429
+ <Badge theme={theme as any} color="gray">
427
430
  {theme} mode
428
431
  </Badge>
429
432
  </div>
@@ -503,7 +506,7 @@ export default function ThemedDashboard() {
503
506
  <Button theme={theme as any} variant="PrimeStyle">
504
507
  Create Project
505
508
  </Button>
506
- <Button theme={theme as any} variant="ContStyle">
509
+ <Button theme={theme as any} variant="PrimeContStyle">
507
510
  View Reports
508
511
  </Button>
509
512
  <Button theme={theme as any} variant="BorderStyle">
@@ -686,7 +689,7 @@ Ensure theme toggle is keyboard accessible:
686
689
  ### Conditional Styling Based on Theme
687
690
 
688
691
  ```tsx
689
- import { useTheme } from '@torch-ai/torch-glare';
692
+ import { useTheme } from "@/providers/ThemeProvider";
690
693
 
691
694
  function ThemedComponent() {
692
695
  const { theme } = useTheme();
@@ -707,7 +710,7 @@ function ThemedComponent() {
707
710
  ### Theme-Specific Images
708
711
 
709
712
  ```tsx
710
- import { useTheme } from '@torch-ai/torch-glare';
713
+ import { useTheme } from "@/providers/ThemeProvider";
711
714
 
712
715
  function Logo() {
713
716
  const { theme } = useTheme();
package/package.json CHANGED
@@ -1,8 +1,26 @@
1
1
  {
2
2
  "name": "torch-glare",
3
- "version": "2.3.0",
3
+ "version": "2.4.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
+ "description": "A copy-in React component library (TypeScript + Radix UI + Tailwind CSS). Its CLI copies component source directly into your project — you own the code.",
7
+ "homepage": "https://glare.torchcorp.com",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/torch-corp/torch-glare"
11
+ },
12
+ "keywords": [
13
+ "react",
14
+ "components",
15
+ "ui",
16
+ "component-library",
17
+ "design-system",
18
+ "tailwindcss",
19
+ "radix-ui",
20
+ "typescript",
21
+ "copy-in",
22
+ "cli"
23
+ ],
6
24
  "files": [
7
25
  "dist",
8
26
  "apps/lib",
@@ -18,7 +36,17 @@
18
36
  },
19
37
  "scripts": {
20
38
  "build": "tsc -b",
21
- "deploy": "npx tsc --build --force && npm publish --access public"
39
+ "registry": "node scripts/bin/generateRegistry/index.js",
40
+ "docs:fix": "node scripts/bin/fixDocs/index.js",
41
+ "check:ai-docs": "node scripts/bin/checkAiDocs/index.js",
42
+ "typecheck": "pnpm -C apps run typecheck",
43
+ "lint": "pnpm -C apps run lint:lib",
44
+ "format": "pnpm -C apps run format",
45
+ "format:check": "pnpm -C apps run format:check",
46
+ "test": "pnpm -C apps run test",
47
+ "mcp:build": "pnpm -C mcp install && pnpm -C mcp run build",
48
+ "prepare": "pnpm -C mcp install && pnpm -C mcp run build",
49
+ "deploy": "pnpm run registry && npx tsc --build --force && npm publish --access public"
22
50
  },
23
51
  "dependencies": {
24
52
  "commander": "^13.1.0",
@@ -29,4 +57,4 @@
29
57
  "@types/node": "^22.14.0",
30
58
  "typescript": "^5.0.0"
31
59
  }
32
- }
60
+ }
@@ -1,5 +0,0 @@
1
- /**
2
- * Main function to add a block and its dependencies.
3
- */
4
- export declare function addBlock(block?: string, replace?: boolean): Promise<void>;
5
- //# sourceMappingURL=block.d.ts.map