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
@@ -1,31 +1,28 @@
1
- "use client"
1
+ "use client";
2
2
 
3
- import * as React from "react"
4
- import { cn } from "../utils/cn"
3
+ import * as React from "react";
4
+ import { cn } from "../utils/cn";
5
5
 
6
6
  interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {
7
- orientation?: "horizontal" | "vertical"
8
- decorative?: boolean
7
+ orientation?: "horizontal" | "vertical";
8
+ decorative?: boolean;
9
9
  }
10
10
 
11
11
  const Divider = React.forwardRef<HTMLDivElement, DividerProps>(
12
- (
13
- { className, orientation = "horizontal", decorative = true, ...props },
14
- ref
15
- ) => (
16
- <div
17
- ref={ref}
18
- role={decorative ? "none" : "separator"}
19
- aria-orientation={decorative ? undefined : orientation}
20
- className={cn(
21
- "bg-border-presentation-global-primary",
22
- orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
23
- className
24
- )}
25
- {...props}
26
- />
27
- )
28
- )
29
- Divider.displayName = "Divider"
12
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => (
13
+ <div
14
+ ref={ref}
15
+ role={decorative ? "none" : "separator"}
16
+ aria-orientation={decorative ? undefined : orientation}
17
+ className={cn(
18
+ "bg-border-presentation-global-primary",
19
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
20
+ className,
21
+ )}
22
+ {...props}
23
+ />
24
+ ),
25
+ );
26
+ Divider.displayName = "Divider";
30
27
 
31
- export { Divider }
28
+ export { Divider };
@@ -10,16 +10,13 @@ const Drawer = ({
10
10
  shouldScaleBackground = true,
11
11
  ...props
12
12
  }: React.ComponentProps<typeof DrawerPrimitive.Root>) => (
13
- <DrawerPrimitive.Root
14
- shouldScaleBackground={shouldScaleBackground}
15
- {...props}
16
- />
13
+ <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />
17
14
  );
18
15
  Drawer.displayName = "Drawer";
19
16
 
20
- const DrawerNested = (
21
- props: React.ComponentProps<typeof DrawerPrimitive.NestedRoot>,
22
- ) => <DrawerPrimitive.NestedRoot {...props} />;
17
+ const DrawerNested = (props: React.ComponentProps<typeof DrawerPrimitive.NestedRoot>) => (
18
+ <DrawerPrimitive.NestedRoot {...props} />
19
+ );
23
20
  DrawerNested.displayName = "DrawerNested";
24
21
 
25
22
  const DrawerTrigger = DrawerPrimitive.Trigger;
@@ -32,11 +29,7 @@ const DrawerOverlay = React.forwardRef<
32
29
  React.ElementRef<typeof DrawerPrimitive.Overlay>,
33
30
  React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>
34
31
  >(({ className, ...props }, ref) => (
35
- <DrawerPrimitive.Overlay
36
- ref={ref}
37
- className={cn("fixed inset-0 z-50 ", className)}
38
- {...props}
39
- />
32
+ <DrawerPrimitive.Overlay ref={ref} className={cn("fixed inset-0 z-50 ", className)} {...props} />
40
33
  ));
41
34
  DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;
42
35
 
@@ -77,77 +70,70 @@ const DrawerContent = React.forwardRef<
77
70
  ) => {
78
71
  const framed = framedProp ?? true;
79
72
  return (
80
- <DrawerPortal>
81
- <DrawerOverlay />
82
- <DrawerPrimitive.Content
83
- ref={ref}
84
- className={cn(
85
- "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col items-stretch m-1",
86
- wrapperClassName,
87
- )}
88
- {...props}
89
- >
90
- {notch && (
91
- <div className={notchSide === "right" ? "self-end" : "self-start"}>
92
- {React.isValidElement(notch)
93
- ? React.cloneElement(
94
- notch as React.ReactElement<{ side?: "left" | "right" }>,
95
- { side: notchSide },
96
- )
97
- : notch}
98
- </div>
99
- )}
100
- <div
73
+ <DrawerPortal>
74
+ <DrawerOverlay />
75
+ <DrawerPrimitive.Content
76
+ ref={ref}
101
77
  className={cn(
102
- "flex flex-1 flex-col min-h-0",
103
- framed
104
- ? "p-1.5 bg-black-400 shadow-[0_0_4px_rgba(0,0,0,0.2),0_0_30px_rgba(0,0,0,0.4)]"
105
- : "p-0",
106
- framed && notch
107
- ? notchSide === "right"
108
- ? "rounded-tr-none rounded-tl-[22px] rounded-b-[22px]"
109
- : "rounded-tl-none rounded-tr-[22px] rounded-b-[22px]"
110
- : framed
111
- ? "rounded-t-[22px]"
112
- : "",
113
- trayClassName,
78
+ "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col items-stretch m-1",
79
+ wrapperClassName,
114
80
  )}
81
+ {...props}
115
82
  >
83
+ {notch && (
84
+ <div className={notchSide === "right" ? "self-end" : "self-start"}>
85
+ {React.isValidElement(notch)
86
+ ? React.cloneElement(notch as React.ReactElement<{ side?: "left" | "right" }>, {
87
+ side: notchSide,
88
+ })
89
+ : notch}
90
+ </div>
91
+ )}
116
92
  <div
117
- // The content surface is always light (#F0F0F0) regardless of the
118
- // page theme, so pin a light theme here. This makes theme-aware
119
- // content tokens (DrawerTitle/Description and any consumer content)
120
- // resolve to their dark-on-light values instead of following a dark
121
- // page theme (which would render white-on-light = invisible).
122
- data-theme="light"
123
93
  className={cn(
124
- "flex flex-1 flex-col gap-2 rounded-t-[16px] p-1.5 bg-[#F0F0F0] min-h-0",
125
- framed && "border border-[#D4D4D4] shadow-[inset_0_-4px_16px_rgba(0,0,0,0.1)]",
126
- className,
94
+ "flex flex-1 flex-col min-h-0",
95
+ framed
96
+ ? "p-1.5 bg-black-400 shadow-[0_0_4px_rgba(0,0,0,0.2),0_0_30px_rgba(0,0,0,0.4)]"
97
+ : "p-0",
98
+ framed && notch
99
+ ? notchSide === "right"
100
+ ? "rounded-tr-none rounded-tl-[22px] rounded-b-[22px]"
101
+ : "rounded-tl-none rounded-tr-[22px] rounded-b-[22px]"
102
+ : framed
103
+ ? "rounded-t-[22px]"
104
+ : "",
105
+ trayClassName,
127
106
  )}
128
107
  >
129
- {showHandle && !notch && (
130
- <div className="mx-auto h-2 w-[100px] rounded-full bg-[#D4D4D4]" />
131
- )}
132
- {children}
108
+ <div
109
+ // The content surface is always light (#F0F0F0) regardless of the
110
+ // page theme, so pin a light theme here. This makes theme-aware
111
+ // content tokens (DrawerTitle/Description and any consumer content)
112
+ // resolve to their dark-on-light values instead of following a dark
113
+ // page theme (which would render white-on-light = invisible).
114
+ data-theme="light"
115
+ className={cn(
116
+ "flex flex-1 flex-col gap-2 rounded-t-[16px] p-1.5 bg-[#F0F0F0] min-h-0",
117
+ framed && "border border-[#D4D4D4] shadow-[inset_0_-4px_16px_rgba(0,0,0,0.1)]",
118
+ className,
119
+ )}
120
+ >
121
+ {showHandle && !notch && (
122
+ <div className="mx-auto h-2 w-[100px] rounded-full bg-[#D4D4D4]" />
123
+ )}
124
+ {children}
125
+ </div>
133
126
  </div>
134
- </div>
135
- </DrawerPrimitive.Content>
136
- </DrawerPortal>
127
+ </DrawerPrimitive.Content>
128
+ </DrawerPortal>
137
129
  );
138
130
  },
139
131
  );
140
132
  DrawerContent.displayName = "DrawerContent";
141
133
 
142
- const DrawerHeader = ({
143
- className,
144
- ...props
145
- }: React.HTMLAttributes<HTMLDivElement>) => (
134
+ const DrawerHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
146
135
  <div
147
- className={cn(
148
- "flex flex-row justify-between items-stretch gap-2 px-1 pt-1",
149
- className,
150
- )}
136
+ className={cn("flex flex-row justify-between items-stretch gap-2 px-1 pt-1", className)}
151
137
  {...props}
152
138
  />
153
139
  );
@@ -159,25 +145,15 @@ const drawerHeaderPane = cva(
159
145
  "flex items-center gap-2 rounded-[14px] border p-2 bg-[#131415] border-[#2C2D2E] shadow-[0_0_32px_2px_rgba(0,0,0,0.05)] [&_[data-slot=drawer-title]]:text-white [&_[data-slot=drawer-description]]:text-[#9FA0A1]",
160
146
  );
161
147
 
162
- const DrawerHeaderTitle = ({
163
- className,
164
- ...props
165
- }: React.HTMLAttributes<HTMLDivElement>) => (
148
+ const DrawerHeaderTitle = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
166
149
  // Dark surface — pin a dark theme so any buttons/content inside resolve their
167
150
  // theme tokens for dark (the surrounding content surface is data-theme=light).
168
151
  <div data-theme="dark" className={cn(drawerHeaderPane(), className)} {...props} />
169
152
  );
170
153
  DrawerHeaderTitle.displayName = "DrawerHeaderTitle";
171
154
 
172
- const DrawerHeaderActions = ({
173
- className,
174
- ...props
175
- }: React.HTMLAttributes<HTMLDivElement>) => (
176
- <div
177
- data-theme="dark"
178
- className={cn(drawerHeaderPane(), "justify-end", className)}
179
- {...props}
180
- />
155
+ const DrawerHeaderActions = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
156
+ <div data-theme="dark" className={cn(drawerHeaderPane(), "justify-end", className)} {...props} />
181
157
  );
182
158
  DrawerHeaderActions.displayName = "DrawerHeaderActions";
183
159
 
@@ -199,29 +175,17 @@ const drawerBadge = cva(
199
175
  );
200
176
 
201
177
  interface DrawerBadgeProps
202
- extends
203
- Omit<React.HTMLAttributes<HTMLSpanElement>, "color">,
204
- VariantProps<typeof drawerBadge> {}
178
+ extends Omit<React.HTMLAttributes<HTMLSpanElement>, "color">, VariantProps<typeof drawerBadge> {}
205
179
 
206
180
  const DrawerBadge = React.forwardRef<HTMLSpanElement, DrawerBadgeProps>(
207
181
  ({ className, color, ...props }, ref) => (
208
- <span
209
- ref={ref}
210
- className={cn(drawerBadge({ color }), className)}
211
- {...props}
212
- />
182
+ <span ref={ref} className={cn(drawerBadge({ color }), className)} {...props} />
213
183
  ),
214
184
  );
215
185
  DrawerBadge.displayName = "DrawerBadge";
216
186
 
217
- const DrawerFooter = ({
218
- className,
219
- ...props
220
- }: React.HTMLAttributes<HTMLDivElement>) => (
221
- <div
222
- className={cn("mt-auto flex flex-col gap-2 p-4", className)}
223
- {...props}
224
- />
187
+ const DrawerFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
188
+ <div className={cn("mt-auto flex flex-col gap-2 p-4", className)} {...props} />
225
189
  );
226
190
  DrawerFooter.displayName = "DrawerFooter";
227
191
 
@@ -229,23 +193,12 @@ interface DrawerNotchProps extends React.HTMLAttributes<HTMLDivElement> {
229
193
  side?: "left" | "right";
230
194
  }
231
195
 
232
- const DrawerNotch = ({
233
- className,
234
- children,
235
- side = "left",
236
- ...props
237
- }: DrawerNotchProps) => {
196
+ const DrawerNotch = ({ className, children, side = "left", ...props }: DrawerNotchProps) => {
238
197
  // Wedge bridges the notch's bottom-edge corner into the tray's top edge.
239
198
  // For a left-attached notch (the default), the wedge sits at the notch's
240
199
  // bottom-right; for a right-attached notch, mirror it to the bottom-left.
241
200
  const wedge = (
242
- <svg
243
- aria-hidden
244
- width="12"
245
- height="12"
246
- viewBox="0 0 12 12"
247
- className="block shrink-0 self-end"
248
- >
201
+ <svg aria-hidden width="12" height="12" viewBox="0 0 12 12" className="block shrink-0 self-end">
249
202
  <path
250
203
  d={
251
204
  side === "right"
@@ -314,30 +267,22 @@ interface DrawerNotchPillProps
314
267
  Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "color">,
315
268
  VariantProps<typeof drawerNotchPill> {}
316
269
 
317
- const DrawerNotchPill = React.forwardRef<
318
- HTMLButtonElement,
319
- DrawerNotchPillProps
320
- >(({ className, color, children, ...props }, ref) => (
321
- <button
322
- ref={ref}
323
- type="button"
324
- className={cn(drawerNotchPill({ color }), className)}
325
- {...props}
326
- >
327
- {children}
328
- </button>
329
- ));
270
+ const DrawerNotchPill = React.forwardRef<HTMLButtonElement, DrawerNotchPillProps>(
271
+ ({ className, color, children, ...props }, ref) => (
272
+ <button
273
+ ref={ref}
274
+ type="button"
275
+ className={cn(drawerNotchPill({ color }), className)}
276
+ {...props}
277
+ >
278
+ {children}
279
+ </button>
280
+ ),
281
+ );
330
282
  DrawerNotchPill.displayName = "DrawerNotchPill";
331
283
 
332
- const DrawerNotchDivider = ({
333
- className,
334
- ...props
335
- }: React.HTMLAttributes<HTMLDivElement>) => (
336
- <div
337
- aria-hidden
338
- className={cn("h-[18px] w-px bg-white/20", className)}
339
- {...props}
340
- />
284
+ const DrawerNotchDivider = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
285
+ <div aria-hidden className={cn("h-[18px] w-px bg-white/20", className)} {...props} />
341
286
  );
342
287
  DrawerNotchDivider.displayName = "DrawerNotchDivider";
343
288
 
@@ -346,12 +291,7 @@ interface DrawerNotchAppProps extends React.HTMLAttributes<HTMLDivElement> {
346
291
  name: React.ReactNode;
347
292
  }
348
293
 
349
- const DrawerNotchApp = ({
350
- className,
351
- icon,
352
- name,
353
- ...props
354
- }: DrawerNotchAppProps) => (
294
+ const DrawerNotchApp = ({ className, icon, name, ...props }: DrawerNotchAppProps) => (
355
295
  <div className={cn("flex items-center gap-2.5 px-1", className)} {...props}>
356
296
  {icon && (
357
297
  <div className="flex h-[22px] w-[22px] items-center justify-center overflow-hidden rounded-[5.6px] bg-black shadow-[0_0_4.66px_rgba(0,0,0,0.3),0_0.75px_0.75px_rgba(0,0,0,0.2)]">