torch-glare 2.4.4 → 2.5.0

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 (147) hide show
  1. package/apps/lib/components/DataViews/{badgeAdapter.ts → badge.ts} +2 -2
  2. package/apps/lib/components/DataViews/cell.tsx +324 -0
  3. package/apps/lib/components/DataViews/context.ts +144 -0
  4. package/apps/lib/components/DataViews/data-views.tsx +383 -0
  5. package/apps/lib/components/DataViews/filters/children.tsx +98 -0
  6. package/apps/lib/components/DataViews/filters/custom.tsx +34 -0
  7. package/apps/lib/components/DataViews/filters/filters.tsx +163 -0
  8. package/apps/lib/components/DataViews/filters/index.ts +4 -0
  9. package/apps/lib/components/DataViews/filters/labelled.tsx +20 -0
  10. package/apps/lib/components/DataViews/filters/presets.tsx +65 -0
  11. package/apps/lib/components/DataViews/filters/summary.tsx +65 -0
  12. package/apps/lib/components/DataViews/filters/sync.tsx +35 -0
  13. package/apps/lib/components/DataViews/filters/values.ts +173 -0
  14. package/apps/lib/components/DataViews/header.tsx +217 -0
  15. package/apps/lib/components/DataViews/hooks/index.ts +5 -0
  16. package/apps/lib/components/DataViews/hooks/useActiveRow.ts +22 -0
  17. package/apps/lib/components/DataViews/hooks/useControllable.ts +52 -0
  18. package/apps/lib/components/DataViews/index.ts +74 -26
  19. package/apps/lib/components/DataViews/panel/columns.tsx +153 -0
  20. package/apps/lib/components/DataViews/panel/controls.tsx +106 -0
  21. package/apps/lib/components/DataViews/panel/index.ts +3 -0
  22. package/apps/lib/components/DataViews/panel/panel.tsx +164 -0
  23. package/apps/lib/components/DataViews/panel/saved-views.tsx +67 -0
  24. package/apps/lib/components/DataViews/panel/section.tsx +79 -0
  25. package/apps/lib/components/DataViews/panel/sort.tsx +42 -0
  26. package/apps/lib/components/DataViews/panel/tab.tsx +31 -0
  27. package/apps/lib/components/DataViews/slots.ts +63 -0
  28. package/apps/lib/components/DataViews/states.tsx +38 -0
  29. package/apps/lib/components/DataViews/types.ts +485 -178
  30. package/apps/lib/components/DataViews/views/board-view.tsx +379 -0
  31. package/apps/lib/components/DataViews/views/card-rows.tsx +36 -0
  32. package/apps/lib/components/DataViews/views/inbox-view.tsx +257 -0
  33. package/apps/lib/components/DataViews/views/pane-views.tsx +192 -0
  34. package/apps/lib/components/DataViews/views/table-view.tsx +426 -0
  35. package/apps/lib/components/DataViews/views/tree-view.tsx +365 -0
  36. package/apps/lib/components/FormBuilder/context.ts +20 -6
  37. package/apps/lib/components/FormBuilder/field-kind.ts +28 -0
  38. package/apps/lib/components/FormBuilder/fields/DateField.tsx +3 -3
  39. package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +7 -6
  40. package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +30 -4
  41. package/apps/lib/components/FormBuilder/fields/SelectField.tsx +7 -7
  42. package/apps/lib/components/FormBuilder/fields/TableField.tsx +80 -52
  43. package/apps/lib/components/FormBuilder/fields/TextField.tsx +9 -9
  44. package/apps/lib/components/FormBuilder/form-builder.tsx +66 -6
  45. package/apps/lib/components/FormBuilder/index.ts +3 -1
  46. package/apps/lib/components/FormBuilder/types.ts +40 -0
  47. package/apps/lib/components/Input.tsx +3 -0
  48. package/apps/lib/components/SearchableTable.tsx +5 -4
  49. package/apps/lib/components/SectionBlock.tsx +58 -11
  50. package/apps/lib/components/Select.tsx +3 -1
  51. package/apps/lib/components/TabSwitch.tsx +16 -4
  52. package/apps/lib/components/Table.tsx +265 -67
  53. package/apps/lib/components/TreeFolder/TreeFolder.tsx +6 -3
  54. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +16 -14
  55. package/apps/lib/components/TreeFolder/index.ts +1 -1
  56. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +70 -207
  57. package/apps/lib/hooks/useDragDrop.tsx +365 -0
  58. package/apps/lib/hooks/useInfiniteScroll.ts +108 -0
  59. package/apps/lib/registry.json +159 -4
  60. package/apps/lib/tsconfig.tsbuildinfo +1 -1
  61. package/apps/lib/utils/dataViews/path.ts +67 -0
  62. package/apps/lib/utils/dataViews/query.ts +73 -0
  63. package/apps/lib/utils/dataViews/types.ts +187 -0
  64. package/docs/components/breadcrumb.md +1 -1
  65. package/docs/components/button-group.md +1 -1
  66. package/docs/components/button.md +1 -1
  67. package/docs/components/card.md +1 -1
  68. package/docs/components/checkbox.md +1 -1
  69. package/docs/components/data-views/backend-response.md +324 -0
  70. package/docs/components/data-views/examples/a11y-rtl.md +250 -0
  71. package/docs/components/data-views/examples/api-orders-route.md +130 -0
  72. package/docs/components/data-views/examples/fields.md +362 -0
  73. package/docs/components/data-views/examples/filters.md +308 -0
  74. package/docs/components/data-views/examples/inbox-routing.md +218 -0
  75. package/docs/components/data-views/examples/index.md +29 -0
  76. package/docs/components/data-views/examples/overview.md +244 -0
  77. package/docs/components/data-views/examples/panel.md +212 -0
  78. package/docs/components/data-views/examples/scale.md +231 -0
  79. package/docs/components/data-views/examples/server-side.md +210 -0
  80. package/docs/components/data-views/examples/state.md +250 -0
  81. package/docs/components/data-views/examples/tree-custom.md +388 -0
  82. package/docs/components/data-views/examples/view-registry.md +313 -0
  83. package/docs/components/data-views/examples/views.md +534 -0
  84. package/docs/components/data-views/guide.md +405 -0
  85. package/docs/components/data-views/index.md +1504 -0
  86. package/docs/components/data-views/migration.md +79 -0
  87. package/docs/components/date-picker.md +0 -1
  88. package/docs/components/form-builder.md +19 -8
  89. package/docs/components/form-renderer.md +2 -1
  90. package/docs/components/form.md +1 -1
  91. package/docs/components/input-field.md +1 -1
  92. package/docs/components/input-otp.md +1 -1
  93. package/docs/components/input.md +1 -1
  94. package/docs/components/labeled-check-box.md +1 -1
  95. package/docs/components/labeled-radio.md +1 -1
  96. package/docs/components/radio-card.md +1 -1
  97. package/docs/components/radio.md +1 -1
  98. package/docs/components/search-field.md +1 -1
  99. package/docs/components/section-block.md +79 -3
  100. package/docs/components/select.md +1 -1
  101. package/docs/components/simple-select.md +1 -1
  102. package/docs/components/switch.md +1 -1
  103. package/docs/components/tab-switch.md +1 -1
  104. package/docs/components/table.md +45 -8
  105. package/docs/components/text-editor.md +1 -1
  106. package/docs/components/textarea.md +1 -1
  107. package/docs/components/toggle-button.md +1 -1
  108. package/docs/components/toggle.md +1 -1
  109. package/docs/components/tree-folder.md +110 -0
  110. package/docs/how-to/forms-with-form-builder.md +6 -4
  111. package/docs/reference/components.md +16 -6
  112. package/docs/tutorials/component-composition.md +11 -13
  113. package/package.json +3 -2
  114. package/apps/lib/components/DataViews/DataViewRadio.tsx +0 -49
  115. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +0 -393
  116. package/apps/lib/components/DataViews/DataViewsHeader.tsx +0 -207
  117. package/apps/lib/components/DataViews/DataViewsLayout.tsx +0 -332
  118. package/apps/lib/components/DataViews/FilterPanel.tsx +0 -493
  119. package/apps/lib/components/DataViews/HeaderSearch.tsx +0 -93
  120. package/apps/lib/components/DataViews/InboxView.tsx +0 -463
  121. package/apps/lib/components/DataViews/InboxViewCard.tsx +0 -127
  122. package/apps/lib/components/DataViews/KanbanView.tsx +0 -336
  123. package/apps/lib/components/DataViews/PanelControls.tsx +0 -39
  124. package/apps/lib/components/DataViews/SettingsPanel.tsx +0 -279
  125. package/apps/lib/components/DataViews/TableView.tsx +0 -212
  126. package/apps/lib/components/DataViews/TreeView.tsx +0 -364
  127. package/apps/lib/components/DataViews/fieldRenderers.tsx +0 -299
  128. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +0 -87
  129. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +0 -120
  130. package/apps/lib/components/DataViews/filters/PresetChips.tsx +0 -45
  131. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +0 -165
  132. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +0 -50
  133. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +0 -74
  134. package/apps/lib/hooks/useDataViewsState.ts +0 -175
  135. package/apps/lib/utils/dataViews/columnUtils.ts +0 -132
  136. package/apps/lib/utils/dataViews/fieldUtils.ts +0 -197
  137. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +0 -371
  138. package/apps/lib/utils/dataViews/pathUtils.ts +0 -139
  139. package/apps/lib/utils/dataViews/rangeUtils.ts +0 -234
  140. package/apps/lib/utils/dataViews/treeUtils.ts +0 -396
  141. package/docs/components/data-views-config-panel.md +0 -208
  142. package/docs/components/data-views-layout.md +0 -291
  143. package/docs/components/inbox-view.md +0 -170
  144. package/docs/components/kanban-view.md +0 -135
  145. package/docs/components/table-view.md +0 -141
  146. package/docs/components/tree-view.md +0 -147
  147. package/docs/how-to/data-views-from-backend-response.md +0 -194
@@ -0,0 +1,110 @@
1
+ ---
2
+ title: TreeFolder
3
+ description: Hierarchical tree with connector lines, multi-level expand/collapse, breadcrumb, keyboard navigation and touch-capable drag-and-drop reparenting.
4
+ group: Data Display
5
+ keywords: [tree, folder, hierarchy, file-explorer, expand, collapse, breadcrumb, drag-drop, reparent, nested, navigation]
6
+ ---
7
+
8
+ # TreeFolder
9
+
10
+ > A file-explorer style tree: nested nodes with connector lines, selection that highlights the
11
+ > whole subtree, a breadcrumb of the current path, and drag-and-drop that can reparent a node.
12
+
13
+ ## Installation
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
+
18
+ ```bash
19
+ npx torch-glare@latest init
20
+ npx torch-glare@latest add TreeFolder
21
+ ```
22
+
23
+ `TreeFolder` is a folder component — the CLI copies the whole directory, plus the `useDragDrop`
24
+ hook and the `cn` utility it depends on.
25
+
26
+ ## Import
27
+
28
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
29
+
30
+ ```tsx
31
+ import { TreeFolder } from "@/components/TreeFolder";
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ```tsx
37
+ const data = [
38
+ {
39
+ id: "src",
40
+ name: "src",
41
+ children: [
42
+ { id: "app", name: "app", children: [{ id: "page", name: "page.tsx", children: [] }] },
43
+ { id: "lib", name: "lib", children: [] },
44
+ ],
45
+ },
46
+ ];
47
+
48
+ <TreeFolder
49
+ data={data}
50
+ defaultExpanded="roots"
51
+ onSelectionChange={(id) => setSelected(id)}
52
+ />
53
+ ```
54
+
55
+ ## Nodes
56
+
57
+ A node is `{ id, name, children }` plus optional presentation and permission flags:
58
+
59
+ | Field | Meaning |
60
+ | --- | --- |
61
+ | `id` | stable identity — selection, expansion and drag all key off it |
62
+ | `name` | the label, as text (the row owns its own layout) |
63
+ | `children` | nested nodes; a node with a non-empty array is *internal* (a folder) |
64
+ | `icon` | overrides the resolved icon for this node |
65
+ | `meta` | trailing content on the row — a count, a badge |
66
+ | `disabled` | greyed out and non-interactive |
67
+ | `draggable` / `droppable` | opt this node out of being picked up, or dropped into |
68
+ | `data` | anything of yours; the component never reads it |
69
+
70
+ ## Props
71
+
72
+ | Prop | Type | Notes |
73
+ | --- | --- | --- |
74
+ | `data` | `TreeFolderNode[]` | the hierarchy |
75
+ | `selectedId` / `defaultSelectedId` | `string \| null` | controlled or uncontrolled selection |
76
+ | `onSelectionChange` | `(id: string \| null) => void` | |
77
+ | `expandedIds` / `defaultExpanded` | `string[]` · `"all" \| "roots" \| "none"` | |
78
+ | `onExpandedChange` | `(ids: string[]) => void` | |
79
+ | `dndEnabled` | `boolean` | turns dragging on |
80
+ | `onMove` | `(args: { dragIds, parentId, index }) => void` | reports the drop; moves nothing |
81
+ | `onDataChange` | `(next: TreeFolderNode[]) => void` | the tree applied the move for you |
82
+ | `iconFor` | resolver | per-node icon from `{ isOpen, isInternal, isSelected }` |
83
+ | `title` · `showHeader` · `showBreadcrumb` · `headerAccessory` | | the chrome above the rows |
84
+ | `highlightAncestors` · `highlightSubtree` | `boolean` | how far a selection tints |
85
+ | `rowHeight` · `indent` · `contentMinWidth` | `number` | 28 and 14 by default |
86
+ | `emptyState` | `ReactNode` | |
87
+
88
+ An imperative handle exposes `selectId`, `expandAll`, `collapseAll` and `scrollToId`.
89
+
90
+ ## Dragging
91
+
92
+ Set `dndEnabled` and handle `onMove`. A drop is reported as **which nodes, into which parent, at
93
+ which index** — the tree does not rearrange itself unless you also pass `onDataChange`, which hands
94
+ back an already-moved copy for the uncontrolled case.
95
+
96
+ Where a drop lands depends on where in the row it happens: the top and bottom quarters mean
97
+ *beside* the target (reordering among its siblings), the middle means *inside* it (reparenting). A
98
+ leaf has no inside, so its whole row reads as before-or-after. A node can never be dropped into its
99
+ own descendant — that would detach the branch from the root — and the guard is enforced before
100
+ `onMove` fires.
101
+
102
+ It works with a finger and with the keyboard: hold to pick up and swipe to scroll, or Space, arrows,
103
+ Space. Auto-scroll near the edges is handled for you.
104
+
105
+ ## Notes
106
+
107
+ `DataViews.Tree` composes this component — the row height, indent, connector lines, selection band
108
+ and drag grip all come from here, which is why a tree inside DataViews looks like every other tree
109
+ in the product. `renderNode` there returns `{ name, icon, meta }` rather than markup, because this
110
+ component owns the row.
@@ -116,7 +116,9 @@ export function ItemForm({
116
116
  ```
117
117
 
118
118
  `FormBuilder.Section` groups fields in a `SectionBlock` (`color` is one of `Blue`, `Yellow`,
119
- `Green`, `Red`, `Orange`, `Purple`, `Pink`, `Gray`). Pass the Save via `actions` — a
119
+ `Green`, `Red`, `Orange`, `Purple`, `Pink`, `Gray`). It also takes `icon`, `action`
120
+ (right-aligned buttons on the title row) and `variant` — `variant="Table"` switches to the
121
+ full-bleed table shell that `FormBuilder.Table` uses internally. Pass the Save via `actions` — a
120
122
  `FormBuilder.Submit`, which is loading-aware; it renders in the header action pill. (With raw
121
123
  `FormBuilder`, put the same `FormBuilder.Submit` in a `FormBuilder.Header`.)
122
124
 
@@ -140,7 +142,7 @@ Every field, its underlying control, and the value your `onSubmit` receives:
140
142
  | `.Otp` (`length`) | `string` |
141
143
  | `.Slider` (`min`, `max`, `step`, `range`, `suffix`) | `number` (or `[number, number]` with `range`) |
142
144
  | `.Color` (`presets`, `alpha`) | hex `string` |
143
- | `.Phone` (`defaultCountry`, defaults to `+964`) | `string` (`"+<dial> <number>"`) |
145
+ | `.Phone` (`defaultCountry`, defaults to `+964`) | `string` (`"+<dial> <number>"`) — collapses to a plain number input inside a `.Table` cell, where `defaultCountry` does not apply |
144
146
  | `.Date` | `Date` |
145
147
  | `.DateRange` | `{ from, to }` |
146
148
  | `.DateMultiple` | `Date[]` |
@@ -151,7 +153,7 @@ Every field, its underlying control, and the value your `onSubmit` receives:
151
153
  | `.Signature` (`penColor`) | PNG data-URL `string` |
152
154
  | `.FieldArray` (`children` render fn, `defaultItem`) | `object[]` |
153
155
  | `.Table` (`columns`, `selectable`, `reorderable`, `defaultItem`) | `object[]` — editable grid; top-level child (not in a Section) |
154
- | `.Custom` (`render`, `formatView`) | anything |
156
+ | `.Custom` (`render`) | anything |
155
157
 
156
158
  See the [FormBuilder](../components/form-builder.md) doc for the full prop tables.
157
159
 
@@ -373,7 +375,7 @@ drawer's tray, beside the form:
373
375
  onOpenChange={setOpen}
374
376
  form={form}
375
377
  onSubmit={save}
376
- header={{ title: "New item", badge: "New", variant: "new" }}
378
+ header={{ title: "New item", label: "New", variant: "new" }}
377
379
  summary={
378
380
  <FormSummary form={form} title="Item" subtitle="Summary">
379
381
  <FormSummary.Group title="Pricing">
@@ -14,7 +14,7 @@ Complete reference index of all 53 components in the TORCH Glare Components Libr
14
14
  - [Forms & Inputs (17)](#forms--inputs)
15
15
  - [Buttons & Actions (3)](#buttons--actions)
16
16
  - [Layout & Containers (7)](#layout--containers)
17
- - [Data Display (8)](#data-display)
17
+ - [Data Display (9)](#data-display)
18
18
  - [Overlays & Dialogs (7)](#overlays--dialogs)
19
19
  - [Date & Time (3)](#date--time)
20
20
  - [Feedback & Status (4)](#feedback--status)
@@ -68,7 +68,7 @@ Selectable checkbox component with multiple states.
68
68
  ### LabeledCheckBox
69
69
  Checkbox with integrated label and description.
70
70
 
71
- - **File**: [labeled-checkbox.md](../components/labeled-checkbox.md)
71
+ - **File**: [labeled-check-box.md](../components/labeled-check-box.md)
72
72
  - **Props**: `label`, `description`, `checked`, `onChange`
73
73
  - **Features**: Built-in label, optional description
74
74
  - **Use Cases**: Terms acceptance, preferences, options
@@ -253,6 +253,16 @@ Grouped action buttons.
253
253
 
254
254
  ## Data Display
255
255
 
256
+ ### DataViews
257
+ One dataset shown as a table, kanban board, inbox or tree, behind a shared header, filters and settings rail.
258
+
259
+ - **File**: [data-views.md](../components/data-views/index.md)
260
+ - **Guide**: [Build a screen with DataViews](../components/data-views/guide.md)
261
+ - **Parts**: `Header` · `ViewSwitch` · `Search` · `Actions` · `PanelToggle` · `Table` · `Board` · `Inbox` · `Tree` (+ `Tree.Table`, `Tree.Cards`, `Tree.Tab`) · `Detail` · `Panel` (+ `Tab`, `Section`, `Columns`, `Sort`, `SavedViews`) · `Filters` (+ `Presets`, `Custom`, `Summary`)
262
+ - **Props**: `rows`, `fields`, `total`, `loading`, `onQueryChange`, `onLoadMore`, `getRowId`, `defaultView`
263
+ - **Features**: Scroll loading, table virtualization past 300 rows, drag and drop on four surfaces (touch + keyboard), filters authored as FormBuilder fields, saved views
264
+ - **Use Cases**: Any list screen where the server owns the query
265
+
256
266
  ### Badge
257
267
  Small status or label indicator.
258
268
 
@@ -305,7 +315,7 @@ Advanced table with features.
305
315
  ### TreeDropDown
306
316
  Hierarchical dropdown menu.
307
317
 
308
- - **File**: [tree-dropdown.md](../components/tree-dropdown.md)
318
+ - **File**: [tree-drop-down.md](../components/tree-drop-down.md)
309
319
  - **Props**: `tree`, `value`, `onChange`
310
320
  - **Features**: Nested items, expand/collapse
311
321
  - **Use Cases**: Category selection, file trees
@@ -537,9 +547,9 @@ All components are fully typed with TypeScript. Import types from the library:
537
547
 
538
548
  ```typescript
539
549
  import type { ButtonProps } from "@/components/Button";
540
- import type { InputProps } from "@/components/InputProps";
541
- import type { ButtonProps } from "@/components/LoginButton";
542
- import type { SelectProps } from "@/components/SelectProps";
550
+ import type { InputProps } from "@/components/Input";
551
+ import type { LoginButtonProps } from "@/components/LoginButton";
552
+ import type { SelectProps } from "@/components/Select";
543
553
  ```
544
554
 
545
555
  ---
@@ -391,8 +391,7 @@ import { useState } from 'react';
391
391
  import { Button } from "@/components/Button";
392
392
  import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/Dialog";
393
393
  import { LabelField } from "@/components/LabelField";
394
- import { Select } from "@/components/Select";
395
- import { SimpleOption } from "@/components/SimpleOption";
394
+ import { Select, SelectItem } from "@/components/Select";
396
395
  import { TextArea } from "@/components/TextArea";
397
396
  import { toast } from "@/components/Toast";
398
397
 
@@ -460,10 +459,10 @@ export default function CreateProjectModal() {
460
459
  value={formData.category}
461
460
  onValueChange={(value) => setFormData({...formData, category: value})}
462
461
  >
463
- <SimpleOption value="web">Web Development</SimpleOption>
464
- <SimpleOption value="mobile">Mobile App</SimpleOption>
465
- <SimpleOption value="design">Design</SimpleOption>
466
- <SimpleOption value="other">Other</SimpleOption>
462
+ <SelectItem value="web">Web Development</SelectItem>
463
+ <SelectItem value="mobile">Mobile App</SelectItem>
464
+ <SelectItem value="design">Design</SelectItem>
465
+ <SelectItem value="other">Other</SelectItem>
467
466
  </Select>
468
467
  </div>
469
468
 
@@ -500,8 +499,7 @@ import { useState } from 'react';
500
499
  import { Badge } from "@/components/Badge";
501
500
  import { Button } from "@/components/Button";
502
501
  import { InputField } from "@/components/InputField";
503
- import { Select } from "@/components/Select";
504
- import { SimpleOption } from "@/components/SimpleOption";
502
+ import { Select, SelectItem } from "@/components/Select";
505
503
  import { Table } from "@/components/Table";
506
504
 
507
505
  interface TableRow {
@@ -560,10 +558,10 @@ export default function DataTableWithFilters() {
560
558
  value={statusFilter}
561
559
  onValueChange={setStatusFilter}
562
560
  >
563
- <SimpleOption value="all">All Status</SimpleOption>
564
- <SimpleOption value="active">Active</SimpleOption>
565
- <SimpleOption value="pending">Pending</SimpleOption>
566
- <SimpleOption value="inactive">Inactive</SimpleOption>
561
+ <SelectItem value="all">All Status</SelectItem>
562
+ <SelectItem value="active">Active</SelectItem>
563
+ <SelectItem value="pending">Pending</SelectItem>
564
+ <SelectItem value="inactive">Inactive</SelectItem>
567
565
  </Select>
568
566
  </div>
569
567
  </div>
@@ -876,7 +874,7 @@ You now understand component composition! Continue learning:
876
874
 
877
875
  1. **[Component Documentation](../components/)** - Explore all components
878
876
  2. **[Hooks Reference](../reference/hooks.md)** - Custom hooks for common patterns
879
- 3. **[Best Practices Guide](../how-to/best-practices.md)** - Advanced patterns
877
+ 3. **[Best Practices Guide](../how-to/guides.md)** - Advanced patterns
880
878
 
881
879
  ## Additional Resources
882
880
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "torch-glare",
3
- "version": "2.4.4",
3
+ "version": "2.5.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
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.",
@@ -37,6 +37,7 @@
37
37
  "scripts": {
38
38
  "build": "tsc -b",
39
39
  "registry": "node scripts/bin/generateRegistry/index.js",
40
+ "examples": "node scripts/bin/generateExampleDocs/index.js",
40
41
  "docs:fix": "node scripts/bin/fixDocs/index.js",
41
42
  "check:ai-docs": "node scripts/bin/checkAiDocs/index.js",
42
43
  "typecheck": "pnpm -C apps run typecheck",
@@ -46,7 +47,7 @@
46
47
  "test": "pnpm -C apps run test",
47
48
  "mcp:build": "pnpm -C mcp install && pnpm -C mcp run build",
48
49
  "prepare": "pnpm -C mcp install && pnpm -C mcp run build",
49
- "deploy": "pnpm run registry && npx tsc --build --force && npm publish --access public"
50
+ "deploy": "pnpm run registry && pnpm run examples && pnpm run check:ai-docs && npx tsc --build --force && npm publish --access public"
50
51
  },
51
52
  "dependencies": {
52
53
  "commander": "^13.1.0",
@@ -1,49 +0,0 @@
1
- "use client";
2
-
3
- import { type ReactNode } from "react";
4
- import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
5
- import { cn } from "../../utils/cn";
6
-
7
- export interface DataViewRadioProps {
8
- value: string;
9
- label?: string;
10
- children?: ReactNode;
11
- className?: string;
12
- }
13
-
14
- export function DataViewRadio({ value, label, children, className }: DataViewRadioProps) {
15
- return (
16
- <RadioGroupPrimitive.Item
17
- value={value}
18
- className={cn(
19
- "group flex w-full items-center gap-1.5 py-1 ps-2 h-[32px]",
20
- "cursor-pointer rounded-[8px] text-left outline-none transition-colors",
21
- "hover:bg-background-presentation-action-contstyle-hover focus-visible:bg-background-presentation-action-contstyle-hover",
22
- className,
23
- )}
24
- >
25
- <span
26
- className={cn(
27
- "flex h-[14px] w-[14px] shrink-0 items-center justify-center rounded-full",
28
- // Hardcoded literals so the indicator always renders dark inside the
29
- // DataView regardless of the host app's data-theme (matches the
30
- // always-dark panel chrome convention). Unselected ring = the spec
31
- // CheckBox-Primary border (#626467) + BorderStyle fill
32
- // (rgba(255,255,255,0.05)); same tokens the shared Checkbox uses.
33
- "border border-[#626467] bg-white/5 transition-colors",
34
- "group-data-[state=checked]:border-transparent",
35
- // #0075FF = the previous selected-fill value (border-presentation-state-focus),
36
- // now literal so the blue is theme-independent and visually unchanged.
37
- "group-data-[state=checked]:bg-[#0075FF]",
38
- )}
39
- >
40
- <RadioGroupPrimitive.Indicator className="flex items-center justify-center">
41
- <span className="h-[6px] w-[6px] rounded-full bg-white" />
42
- </RadioGroupPrimitive.Indicator>
43
- </span>
44
- <span className="flex-1 typography-body-medium-regular text-content-presentation-global-primary">
45
- {children ?? label}
46
- </span>
47
- </RadioGroupPrimitive.Item>
48
- );
49
- }