torch-glare 2.4.0 → 2.4.2

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 (318) hide show
  1. package/README.md +8 -0
  2. package/apps/lib/components/ActionButton.tsx +7 -12
  3. package/apps/lib/components/ActionsGroup.tsx +4 -15
  4. package/apps/lib/components/AlertDialog.tsx +173 -191
  5. package/apps/lib/components/Avatar.tsx +13 -16
  6. package/apps/lib/components/Badge.tsx +1 -3
  7. package/apps/lib/components/BadgeField.tsx +76 -71
  8. package/apps/lib/components/Breadcrumb.tsx +49 -85
  9. package/apps/lib/components/Button.tsx +21 -20
  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 +40 -24
  13. package/apps/lib/components/Checkbox.tsx +9 -16
  14. package/apps/lib/components/ColorPicker.tsx +441 -0
  15. package/apps/lib/components/ConclusionHeader.tsx +148 -0
  16. package/apps/lib/components/ContextMenu.tsx +97 -96
  17. package/apps/lib/components/CountBadge.tsx +4 -6
  18. package/apps/lib/components/DataTable.tsx +196 -216
  19. package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
  20. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
  21. package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
  22. package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
  23. package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
  24. package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
  25. package/apps/lib/components/DataViews/InboxView.tsx +22 -68
  26. package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
  27. package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
  28. package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
  29. package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
  30. package/apps/lib/components/DataViews/TableView.tsx +8 -28
  31. package/apps/lib/components/DataViews/TreeView.tsx +12 -40
  32. package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
  33. package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
  34. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
  35. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
  36. package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
  37. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
  38. package/apps/lib/components/DataViews/index.ts +26 -26
  39. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
  40. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
  41. package/apps/lib/components/DataViews/types.ts +104 -115
  42. package/apps/lib/components/DatePicker.tsx +200 -196
  43. package/apps/lib/components/Dialog.tsx +92 -105
  44. package/apps/lib/components/Divider.tsx +21 -24
  45. package/apps/lib/components/Drawer.tsx +124 -142
  46. package/apps/lib/components/DropdownMenu.tsx +131 -171
  47. package/apps/lib/components/FieldHint.tsx +4 -11
  48. package/apps/lib/components/Form.tsx +146 -155
  49. package/apps/lib/components/FormBuilder/DisplayField.tsx +40 -0
  50. package/apps/lib/components/FormBuilder/context.ts +71 -0
  51. package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +65 -0
  52. package/apps/lib/components/FormBuilder/fields/ColorField.tsx +76 -0
  53. package/apps/lib/components/FormBuilder/fields/CustomField.tsx +16 -0
  54. package/apps/lib/components/FormBuilder/fields/DateField.tsx +34 -0
  55. package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +79 -0
  56. package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +174 -0
  57. package/apps/lib/components/FormBuilder/fields/FileField.tsx +40 -0
  58. package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +139 -0
  59. package/apps/lib/components/FormBuilder/fields/OtpField.tsx +32 -0
  60. package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +82 -0
  61. package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +37 -0
  62. package/apps/lib/components/FormBuilder/fields/SelectField.tsx +101 -0
  63. package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +175 -0
  64. package/apps/lib/components/FormBuilder/fields/SliderField.tsx +72 -0
  65. package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +42 -0
  66. package/apps/lib/components/FormBuilder/fields/TableField.tsx +312 -0
  67. package/apps/lib/components/FormBuilder/fields/TextField.tsx +222 -0
  68. package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +49 -0
  69. package/apps/lib/components/FormBuilder/fields/countries.ts +303 -0
  70. package/apps/lib/components/FormBuilder/fields/index.ts +25 -0
  71. package/apps/lib/components/FormBuilder/form-builder.tsx +292 -0
  72. package/apps/lib/components/FormBuilder/header.tsx +105 -0
  73. package/apps/lib/components/FormBuilder/index.ts +37 -0
  74. package/apps/lib/components/FormBuilder/numberFormat.ts +16 -0
  75. package/apps/lib/components/FormBuilder/stepper.tsx +217 -0
  76. package/apps/lib/components/FormBuilder/submit.tsx +41 -0
  77. package/apps/lib/components/FormBuilder/types.ts +264 -0
  78. package/apps/lib/components/FormBuilder/viewFormat.tsx +137 -0
  79. package/apps/lib/components/FormRenderer/FormDrawer.tsx +121 -0
  80. package/apps/lib/components/FormRenderer/form-renderer.tsx +113 -0
  81. package/apps/lib/components/FormRenderer/index.ts +9 -0
  82. package/apps/lib/components/FormRenderer/types.ts +79 -0
  83. package/apps/lib/components/FormStepper.tsx +9 -39
  84. package/apps/lib/components/FormSummary.tsx +282 -0
  85. package/apps/lib/components/HeaderBar.tsx +1 -9
  86. package/apps/lib/components/ImageAttachment.tsx +106 -93
  87. package/apps/lib/components/InnerLabelField.tsx +20 -16
  88. package/apps/lib/components/Input.tsx +171 -172
  89. package/apps/lib/components/InputField.tsx +44 -45
  90. package/apps/lib/components/InputOTP.tsx +68 -69
  91. package/apps/lib/components/Label.tsx +61 -58
  92. package/apps/lib/components/LabelField.tsx +4 -5
  93. package/apps/lib/components/LabeledCheckBox.tsx +8 -12
  94. package/apps/lib/components/LabeledRadio.tsx +7 -5
  95. package/apps/lib/components/LinkButton.tsx +2 -9
  96. package/apps/lib/components/LoginButton.tsx +4 -9
  97. package/apps/lib/components/PasswordLevel.tsx +5 -5
  98. package/apps/lib/components/Popover.tsx +15 -33
  99. package/apps/lib/components/ProfileMenu.tsx +67 -72
  100. package/apps/lib/components/Radio.tsx +1 -5
  101. package/apps/lib/components/RadioCard.tsx +11 -28
  102. package/apps/lib/components/ScrollArea.tsx +45 -43
  103. package/apps/lib/components/SearchField.tsx +49 -39
  104. package/apps/lib/components/SearchableSelect.tsx +16 -16
  105. package/apps/lib/components/SearchableTable.tsx +108 -118
  106. package/apps/lib/components/SearchableTree.tsx +469 -0
  107. package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
  108. package/apps/lib/components/SectionBlock.tsx +19 -23
  109. package/apps/lib/components/Select.tsx +80 -186
  110. package/apps/lib/components/SimpleSelect.tsx +196 -187
  111. package/apps/lib/components/Skeleton.tsx +9 -12
  112. package/apps/lib/components/SlideDatePicker.tsx +215 -166
  113. package/apps/lib/components/SpinLoading.tsx +33 -49
  114. package/apps/lib/components/Stepper.tsx +13 -56
  115. package/apps/lib/components/Switch.tsx +8 -10
  116. package/apps/lib/components/TabFormItem.tsx +3 -12
  117. package/apps/lib/components/TabSwitch.tsx +7 -34
  118. package/apps/lib/components/Table.tsx +60 -75
  119. package/apps/lib/components/{ChartBlockTool.ts → TextEditor/ChartBlockTool.ts} +17 -52
  120. package/apps/lib/components/TextEditor/RichTextField.tsx +46 -0
  121. package/apps/lib/components/{TableDnDWrapper.ts → TextEditor/TableDnDWrapper.ts} +15 -48
  122. package/apps/lib/components/{TextEditor.tsx → TextEditor/TextEditor.tsx} +156 -113
  123. package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +429 -0
  124. package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +70 -0
  125. package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +50 -0
  126. package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +48 -0
  127. package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +98 -0
  128. package/apps/lib/{types → components/TextEditor}/editorjs.d.ts +19 -0
  129. package/apps/lib/components/TextEditor/index.ts +7 -0
  130. package/apps/lib/{utils → components/TextEditor}/markdownParser.ts +2 -7
  131. package/apps/lib/components/Textarea.tsx +9 -13
  132. package/apps/lib/components/Timeline.tsx +21 -41
  133. package/apps/lib/components/Toast.tsx +83 -83
  134. package/apps/lib/components/Toggle.tsx +112 -114
  135. package/apps/lib/components/ToggleButton.tsx +1 -1
  136. package/apps/lib/components/Tooltip.tsx +24 -19
  137. package/apps/lib/components/TransparentLabel.tsx +61 -62
  138. package/apps/lib/components/TreeDropDown.tsx +86 -52
  139. package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
  140. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
  141. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
  142. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
  143. package/apps/lib/components/TreeFolder/icons.tsx +14 -17
  144. package/apps/lib/components/TreeFolder/index.ts +15 -8
  145. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
  146. package/apps/lib/components/TreeFolder/types.ts +32 -32
  147. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
  148. package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
  149. package/apps/lib/hooks/useClickOutside.ts +21 -20
  150. package/apps/lib/hooks/useDataViewsState.ts +86 -80
  151. package/apps/lib/hooks/useIsMobile.ts +12 -12
  152. package/apps/lib/hooks/useResize.ts +54 -65
  153. package/apps/lib/hooks/useTagSelection.ts +201 -201
  154. package/apps/lib/layouts/CNLayout.tsx +181 -140
  155. package/apps/lib/layouts/DataViewCard.tsx +4 -18
  156. package/apps/lib/layouts/FieldSection.tsx +2 -6
  157. package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
  158. package/apps/lib/providers/ThemeProvider.tsx +8 -23
  159. package/apps/lib/registry.json +997 -0
  160. package/apps/lib/tsconfig.json +9 -0
  161. package/apps/lib/tsconfig.tsbuildinfo +1 -0
  162. package/apps/lib/utils/cn.ts +1 -1
  163. package/apps/lib/utils/color.ts +175 -0
  164. package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
  165. package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
  166. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
  167. package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
  168. package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
  169. package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
  170. package/apps/lib/utils/dateFormat.ts +64 -54
  171. package/apps/lib/utils/resize.ts +21 -25
  172. package/apps/lib/utils/types.ts +13 -13
  173. package/dist/bin/index.js +8 -2
  174. package/dist/bin/index.js.map +1 -1
  175. package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
  176. package/dist/src/shared/getAvailableFiles.js +6 -1
  177. package/dist/src/shared/getAvailableFiles.js.map +1 -1
  178. package/dist/src/shared/loadRegistry.d.ts +7 -0
  179. package/dist/src/shared/loadRegistry.d.ts.map +1 -0
  180. package/dist/src/shared/loadRegistry.js +31 -0
  181. package/dist/src/shared/loadRegistry.js.map +1 -0
  182. package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
  183. package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
  184. package/dist/src/shared/resolveInstallPlan.js +39 -0
  185. package/dist/src/shared/resolveInstallPlan.js.map +1 -0
  186. package/dist/src/types/main.d.ts +24 -0
  187. package/dist/src/types/main.d.ts.map +1 -1
  188. package/docs/README.md +10 -2
  189. package/docs/components/action-button.md +30 -24
  190. package/docs/components/actions-group.md +26 -20
  191. package/docs/components/alert-dialog.md +45 -45
  192. package/docs/components/avatar.md +6 -2
  193. package/docs/components/badge-field.md +6 -2
  194. package/docs/components/badge.md +7 -1
  195. package/docs/components/breadcrumb.md +15 -40
  196. package/docs/components/button-group.md +13 -10
  197. package/docs/components/button.md +58 -33
  198. package/docs/components/calendar.md +26 -19
  199. package/docs/components/card.md +23 -18
  200. package/docs/components/chart-block-tool.md +129 -0
  201. package/docs/components/checkbox.md +16 -8
  202. package/docs/components/cn-layout.md +7 -1
  203. package/docs/components/color-picker.md +101 -0
  204. package/docs/components/conclusion-header.md +80 -0
  205. package/docs/components/context-menu.md +18 -25
  206. package/docs/components/count-badge.md +7 -1
  207. package/docs/components/data-table.md +45 -33
  208. package/docs/components/data-views-config-panel.md +15 -11
  209. package/docs/components/data-views-layout.md +13 -16
  210. package/docs/components/date-picker.md +30 -23
  211. package/docs/components/dialog.md +43 -42
  212. package/docs/components/divider.md +10 -4
  213. package/docs/components/drawer.md +161 -135
  214. package/docs/components/dropdown-menu.md +25 -34
  215. package/docs/components/field-hint.md +37 -25
  216. package/docs/components/field-section.md +9 -3
  217. package/docs/components/form-builder.md +270 -0
  218. package/docs/components/form-renderer.md +228 -0
  219. package/docs/components/form-stepper.md +6 -0
  220. package/docs/components/form-summary.md +123 -0
  221. package/docs/components/form.md +17 -20
  222. package/docs/components/header-bar.md +6 -0
  223. package/docs/components/image-attachment.md +43 -45
  224. package/docs/components/inbox-view.md +16 -5
  225. package/docs/components/inner-label-field.md +34 -24
  226. package/docs/components/input-field.md +18 -10
  227. package/docs/components/input-otp.md +14 -11
  228. package/docs/components/input.md +22 -16
  229. package/docs/components/kanban-view.md +15 -5
  230. package/docs/components/label-field.md +32 -22
  231. package/docs/components/label.md +43 -32
  232. package/docs/components/labeled-check-box.md +16 -8
  233. package/docs/components/labeled-radio.md +18 -11
  234. package/docs/components/link-button.md +7 -1
  235. package/docs/components/login-button.md +8 -2
  236. package/docs/components/password-level.md +37 -24
  237. package/docs/components/popover.md +26 -23
  238. package/docs/components/profile-menu.md +38 -27
  239. package/docs/components/radio-card.md +16 -9
  240. package/docs/components/radio.md +16 -8
  241. package/docs/components/scroll-area.md +6 -2
  242. package/docs/components/search-field.md +14 -6
  243. package/docs/components/searchable-select.md +19 -14
  244. package/docs/components/searchable-table.md +18 -13
  245. package/docs/components/searchable-tree-dialog.md +190 -0
  246. package/docs/components/searchable-tree.md +200 -0
  247. package/docs/components/section-block.md +12 -4
  248. package/docs/components/select.md +23 -18
  249. package/docs/components/simple-select.md +14 -10
  250. package/docs/components/skeleton.md +43 -33
  251. package/docs/components/slide-date-picker.md +37 -29
  252. package/docs/components/spin-loading.md +32 -23
  253. package/docs/components/stepper.md +6 -0
  254. package/docs/components/switch.md +14 -6
  255. package/docs/components/tab-form-item.md +7 -1
  256. package/docs/components/tab-switch.md +13 -6
  257. package/docs/components/table-dnd-wrapper.md +107 -0
  258. package/docs/components/table-view.md +15 -5
  259. package/docs/components/table.md +28 -28
  260. package/docs/components/text-editor.md +37 -13
  261. package/docs/components/textarea.md +15 -7
  262. package/docs/components/timeline.md +6 -0
  263. package/docs/components/toast.md +35 -26
  264. package/docs/components/toggle-button.md +24 -21
  265. package/docs/components/toggle.md +23 -15
  266. package/docs/components/tooltip.md +42 -30
  267. package/docs/components/transparent-label.md +29 -20
  268. package/docs/components/tree-drop-down.md +31 -23
  269. package/docs/components/tree-sub-layout.md +6 -2
  270. package/docs/components/tree-view.md +16 -5
  271. package/docs/explanation/architecture.md +54 -0
  272. package/docs/explanation/design-system.md +52 -0
  273. package/docs/how-to/data-views-from-backend-response.md +6 -4
  274. package/docs/how-to/form-and-list-recipes.md +26 -19
  275. package/docs/how-to/forms-with-form-builder.md +408 -0
  276. package/docs/how-to/guides.md +177 -197
  277. package/docs/migration/changelog.md +38 -0
  278. package/docs/reference/cli.md +87 -0
  279. package/docs/reference/components.md +11 -12
  280. package/docs/reference/hooks.md +8 -8
  281. package/docs/reference/providers.md +22 -22
  282. package/docs/reference/tailwind-plugins.md +2 -2
  283. package/docs/reference/theme.md +85 -0
  284. package/docs/reference/types.md +4 -4
  285. package/docs/reference/utilities.md +19 -26
  286. package/docs/tutorials/building-first-form.md +170 -172
  287. package/docs/tutorials/component-composition.md +34 -50
  288. package/docs/tutorials/getting-started.md +2 -2
  289. package/docs/tutorials/theming-basics.md +13 -10
  290. package/package.json +31 -3
  291. package/dist/src/commands/block.d.ts +0 -5
  292. package/dist/src/commands/block.d.ts.map +0 -1
  293. package/dist/src/commands/block.js +0 -255
  294. package/dist/src/commands/block.js.map +0 -1
  295. package/dist/src/shared/configureFonts.d.ts +0 -6
  296. package/dist/src/shared/configureFonts.d.ts.map +0 -1
  297. package/dist/src/shared/configureFonts.js +0 -106
  298. package/dist/src/shared/configureFonts.js.map +0 -1
  299. package/dist/src/shared/configureGlobalCss.d.ts +0 -6
  300. package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
  301. package/dist/src/shared/configureGlobalCss.js +0 -154
  302. package/dist/src/shared/configureGlobalCss.js.map +0 -1
  303. package/dist/src/shared/configureTailwind.d.ts +0 -7
  304. package/dist/src/shared/configureTailwind.d.ts.map +0 -1
  305. package/dist/src/shared/configureTailwind.js +0 -163
  306. package/dist/src/shared/configureTailwind.js.map +0 -1
  307. package/dist/src/shared/detectFramework.d.ts +0 -23
  308. package/dist/src/shared/detectFramework.d.ts.map +0 -1
  309. package/dist/src/shared/detectFramework.js +0 -119
  310. package/dist/src/shared/detectFramework.js.map +0 -1
  311. package/dist/src/shared/installBaseUtils.d.ts +0 -5
  312. package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
  313. package/dist/src/shared/installBaseUtils.js +0 -79
  314. package/dist/src/shared/installBaseUtils.js.map +0 -1
  315. package/dist/src/shared/resolveAliases.d.ts +0 -24
  316. package/dist/src/shared/resolveAliases.d.ts.map +0 -1
  317. package/dist/src/shared/resolveAliases.js +0 -98
  318. 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 };
@@ -5,21 +5,19 @@ import { Drawer as DrawerPrimitive } from "vaul";
5
5
  import { cva, type VariantProps } from "class-variance-authority";
6
6
 
7
7
  import { cn } from "../utils/cn";
8
+ import { Button } from "./Button";
8
9
 
9
10
  const Drawer = ({
10
11
  shouldScaleBackground = true,
11
12
  ...props
12
13
  }: React.ComponentProps<typeof DrawerPrimitive.Root>) => (
13
- <DrawerPrimitive.Root
14
- shouldScaleBackground={shouldScaleBackground}
15
- {...props}
16
- />
14
+ <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />
17
15
  );
18
16
  Drawer.displayName = "Drawer";
19
17
 
20
- const DrawerNested = (
21
- props: React.ComponentProps<typeof DrawerPrimitive.NestedRoot>,
22
- ) => <DrawerPrimitive.NestedRoot {...props} />;
18
+ const DrawerNested = (props: React.ComponentProps<typeof DrawerPrimitive.NestedRoot>) => (
19
+ <DrawerPrimitive.NestedRoot {...props} />
20
+ );
23
21
  DrawerNested.displayName = "DrawerNested";
24
22
 
25
23
  const DrawerTrigger = DrawerPrimitive.Trigger;
@@ -32,11 +30,7 @@ const DrawerOverlay = React.forwardRef<
32
30
  React.ElementRef<typeof DrawerPrimitive.Overlay>,
33
31
  React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>
34
32
  >(({ className, ...props }, ref) => (
35
- <DrawerPrimitive.Overlay
36
- ref={ref}
37
- className={cn("fixed inset-0 z-50 ", className)}
38
- {...props}
39
- />
33
+ <DrawerPrimitive.Overlay ref={ref} className={cn("fixed inset-0 z-50 ", className)} {...props} />
40
34
  ));
41
35
  DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;
42
36
 
@@ -54,9 +48,58 @@ interface DrawerContentProps extends React.ComponentPropsWithoutRef<
54
48
  */
55
49
  framed?: boolean;
56
50
  wrapperClassName?: string;
51
+ /**
52
+ * @deprecated Use `className` — it now targets the tray directly. Kept as an
53
+ * alias (merged last, so it still wins) for the pre-`DrawerPanel` API.
54
+ */
57
55
  trayClassName?: string;
58
56
  }
59
57
 
58
+ interface DrawerPanelProps extends React.HTMLAttributes<HTMLDivElement> {
59
+ /** Panel border + inset shadow that pairs with the tray's frame. Default `true`. */
60
+ framed?: boolean;
61
+ /** Show the drag handle (bottom sheets). Default `false`. */
62
+ showHandle?: boolean;
63
+ }
64
+
65
+ /**
66
+ * The light `#F0F0F0` content surface inside a `DrawerContent`.
67
+ *
68
+ * It is an ordinary child, not something the tray paints — so a drawer can hold a panel
69
+ * and something else beside it (e.g. a `FormSummary`), each bringing its own background.
70
+ * Give the tray a `gap-*` to space them.
71
+ *
72
+ * ```tsx
73
+ * <DrawerContent className="gap-[6px]">
74
+ * <DrawerPanel>…form…</DrawerPanel>
75
+ * <FormSummary … />
76
+ * </DrawerContent>
77
+ * ```
78
+ */
79
+ const DrawerPanel = React.forwardRef<HTMLDivElement, DrawerPanelProps>(
80
+ ({ className, framed = true, showHandle = false, children, ...props }, ref) => (
81
+ <div
82
+ ref={ref}
83
+ // The content surface is always light (#F0F0F0) regardless of the page
84
+ // theme, so pin a light theme here. This makes theme-aware content tokens
85
+ // (DrawerTitle/Description and any consumer content) resolve to their
86
+ // dark-on-light values instead of following a dark page theme (which
87
+ // would render white-on-light = invisible).
88
+ data-theme="light"
89
+ className={cn(
90
+ "flex flex-1 gap-2 rounded-t-[16px] p-1 bg-[#F0F0F0] min-h-0",
91
+ framed && "border border-[#D4D4D4] shadow-[inset_0_-4px_16px_rgba(0,0,0,0.1)]",
92
+ className,
93
+ )}
94
+ {...props}
95
+ >
96
+ {showHandle && <div className="mx-auto h-2 w-[100px] rounded-full bg-[#D4D4D4]" />}
97
+ {children}
98
+ </div>
99
+ ),
100
+ );
101
+ DrawerPanel.displayName = "DrawerPanel";
102
+
60
103
  const DrawerContent = React.forwardRef<
61
104
  React.ElementRef<typeof DrawerPrimitive.Content>,
62
105
  DrawerContentProps
@@ -65,7 +108,6 @@ const DrawerContent = React.forwardRef<
65
108
  {
66
109
  className,
67
110
  children,
68
- showHandle = true,
69
111
  notch,
70
112
  notchSide = "left",
71
113
  framed: framedProp,
@@ -77,77 +119,57 @@ const DrawerContent = React.forwardRef<
77
119
  ) => {
78
120
  const framed = framedProp ?? true;
79
121
  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
122
+ <DrawerPortal>
123
+ <DrawerOverlay />
124
+ <DrawerPrimitive.Content
125
+ ref={ref}
101
126
  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,
127
+ "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col items-stretch m-1",
128
+ wrapperClassName,
114
129
  )}
130
+ {...props}
115
131
  >
132
+ {notch && (
133
+ <div className={notchSide === "right" ? "self-end" : "self-start"}>
134
+ {React.isValidElement(notch)
135
+ ? React.cloneElement(notch as React.ReactElement<{ side?: "left" | "right" }>, {
136
+ side: notchSide,
137
+ })
138
+ : notch}
139
+ </div>
140
+ )}
141
+ {/* The tray. It frames and positions, but paints nothing over its children —
142
+ each child brings its own background (see `DrawerPanel`). Supply a `gap-*`
143
+ via `className` when the tray holds more than one. */}
116
144
  <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
145
  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)]",
146
+ "flex flex-1 min-h-0",
147
+ framed
148
+ ? "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)]"
149
+ : "p-0",
150
+ framed && notch
151
+ ? notchSide === "right"
152
+ ? "rounded-tr-none rounded-tl-[22px] rounded-b-[22px]"
153
+ : "rounded-tl-none rounded-tr-[22px] rounded-b-[22px]"
154
+ : framed
155
+ ? "rounded-t-[22px]"
156
+ : "",
126
157
  className,
158
+ trayClassName,
127
159
  )}
128
160
  >
129
- {showHandle && !notch && (
130
- <div className="mx-auto h-2 w-[100px] rounded-full bg-[#D4D4D4]" />
131
- )}
132
161
  {children}
133
162
  </div>
134
- </div>
135
- </DrawerPrimitive.Content>
136
- </DrawerPortal>
163
+ </DrawerPrimitive.Content>
164
+ </DrawerPortal>
137
165
  );
138
166
  },
139
167
  );
140
168
  DrawerContent.displayName = "DrawerContent";
141
169
 
142
- const DrawerHeader = ({
143
- className,
144
- ...props
145
- }: React.HTMLAttributes<HTMLDivElement>) => (
170
+ const DrawerHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
146
171
  <div
147
- className={cn(
148
- "flex flex-row justify-between items-stretch gap-2 px-1 pt-1",
149
- className,
150
- )}
172
+ className={cn("flex flex-row justify-between items-stretch gap-2 px-1 pt-1", className)}
151
173
  {...props}
152
174
  />
153
175
  );
@@ -159,25 +181,15 @@ const drawerHeaderPane = cva(
159
181
  "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
182
  );
161
183
 
162
- const DrawerHeaderTitle = ({
163
- className,
164
- ...props
165
- }: React.HTMLAttributes<HTMLDivElement>) => (
184
+ const DrawerHeaderTitle = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
166
185
  // Dark surface — pin a dark theme so any buttons/content inside resolve their
167
186
  // theme tokens for dark (the surrounding content surface is data-theme=light).
168
187
  <div data-theme="dark" className={cn(drawerHeaderPane(), className)} {...props} />
169
188
  );
170
189
  DrawerHeaderTitle.displayName = "DrawerHeaderTitle";
171
190
 
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
- />
191
+ const DrawerHeaderActions = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
192
+ <div data-theme="dark" className={cn(drawerHeaderPane(), "justify-end", className)} {...props} />
181
193
  );
182
194
  DrawerHeaderActions.displayName = "DrawerHeaderActions";
183
195
 
@@ -199,29 +211,17 @@ const drawerBadge = cva(
199
211
  );
200
212
 
201
213
  interface DrawerBadgeProps
202
- extends
203
- Omit<React.HTMLAttributes<HTMLSpanElement>, "color">,
204
- VariantProps<typeof drawerBadge> {}
214
+ extends Omit<React.HTMLAttributes<HTMLSpanElement>, "color">, VariantProps<typeof drawerBadge> {}
205
215
 
206
216
  const DrawerBadge = React.forwardRef<HTMLSpanElement, DrawerBadgeProps>(
207
217
  ({ className, color, ...props }, ref) => (
208
- <span
209
- ref={ref}
210
- className={cn(drawerBadge({ color }), className)}
211
- {...props}
212
- />
218
+ <span ref={ref} className={cn(drawerBadge({ color }), className)} {...props} />
213
219
  ),
214
220
  );
215
221
  DrawerBadge.displayName = "DrawerBadge";
216
222
 
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
- />
223
+ const DrawerFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
224
+ <div className={cn("mt-auto flex flex-col gap-2 p-4", className)} {...props} />
225
225
  );
226
226
  DrawerFooter.displayName = "DrawerFooter";
227
227
 
@@ -229,23 +229,12 @@ interface DrawerNotchProps extends React.HTMLAttributes<HTMLDivElement> {
229
229
  side?: "left" | "right";
230
230
  }
231
231
 
232
- const DrawerNotch = ({
233
- className,
234
- children,
235
- side = "left",
236
- ...props
237
- }: DrawerNotchProps) => {
232
+ const DrawerNotch = ({ className, children, side = "left", ...props }: DrawerNotchProps) => {
238
233
  // Wedge bridges the notch's bottom-edge corner into the tray's top edge.
239
234
  // For a left-attached notch (the default), the wedge sits at the notch's
240
235
  // bottom-right; for a right-attached notch, mirror it to the bottom-left.
241
236
  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
- >
237
+ <svg aria-hidden width="12" height="12" viewBox="0 0 12 12" className="block shrink-0 self-end">
249
238
  <path
250
239
  d={
251
240
  side === "right"
@@ -280,18 +269,23 @@ const DrawerNotchClose = React.forwardRef<
280
269
  HTMLButtonElement,
281
270
  React.ButtonHTMLAttributes<HTMLButtonElement>
282
271
  >(({ className, children, ...props }, ref) => (
283
- <button
272
+ <Button
284
273
  ref={ref}
285
274
  type="button"
286
275
  aria-label="Close"
276
+ buttonType="icon"
277
+ size="S"
278
+ variant="PrimeContStyle"
287
279
  className={cn(
288
- "inline-flex h-[22px] w-[22px] items-center justify-center rounded-[13px] bg-white/15 text-content-presentation-global-primary transition-colors hover:bg-white/25",
280
+ // Glare Button (icon, S = 22×22) with the notch's own circular radius + translucent look
281
+ // (S is otherwise rounded-[4px]).
282
+ "!rounded-[13px] bg-white/15 text-white hover:bg-white/25 hover:text-white",
289
283
  className,
290
284
  )}
291
285
  {...props}
292
286
  >
293
- {children ?? <i className="ri-close-fill text-[14px]" />}
294
- </button>
287
+ {children ?? <i className="ri-close-fill !text-[14px]" />}
288
+ </Button>
295
289
  ));
296
290
  DrawerNotchClose.displayName = "DrawerNotchClose";
297
291
 
@@ -314,30 +308,22 @@ interface DrawerNotchPillProps
314
308
  Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "color">,
315
309
  VariantProps<typeof drawerNotchPill> {}
316
310
 
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
- ));
311
+ const DrawerNotchPill = React.forwardRef<HTMLButtonElement, DrawerNotchPillProps>(
312
+ ({ className, color, children, ...props }, ref) => (
313
+ <button
314
+ ref={ref}
315
+ type="button"
316
+ className={cn(drawerNotchPill({ color }), className)}
317
+ {...props}
318
+ >
319
+ {children}
320
+ </button>
321
+ ),
322
+ );
330
323
  DrawerNotchPill.displayName = "DrawerNotchPill";
331
324
 
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
- />
325
+ const DrawerNotchDivider = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
326
+ <div aria-hidden className={cn("h-[18px] w-px bg-white/20", className)} {...props} />
341
327
  );
342
328
  DrawerNotchDivider.displayName = "DrawerNotchDivider";
343
329
 
@@ -346,12 +332,7 @@ interface DrawerNotchAppProps extends React.HTMLAttributes<HTMLDivElement> {
346
332
  name: React.ReactNode;
347
333
  }
348
334
 
349
- const DrawerNotchApp = ({
350
- className,
351
- icon,
352
- name,
353
- ...props
354
- }: DrawerNotchAppProps) => (
335
+ const DrawerNotchApp = ({ className, icon, name, ...props }: DrawerNotchAppProps) => (
355
336
  <div className={cn("flex items-center gap-2.5 px-1", className)} {...props}>
356
337
  {icon && (
357
338
  <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)]">
@@ -406,6 +387,7 @@ export {
406
387
  DrawerTrigger,
407
388
  DrawerClose,
408
389
  DrawerContent,
390
+ DrawerPanel,
409
391
  DrawerHeader,
410
392
  DrawerHeaderTitle,
411
393
  DrawerHeaderActions,