banhaten 0.1.2 → 0.2.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 (365) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/CONTRIBUTING.md +44 -0
  3. package/README.md +145 -328
  4. package/SECURITY.md +15 -0
  5. package/banhaten.config.example.json +1 -3
  6. package/docs/design-system/README.md +20 -0
  7. package/docs/design-system/adoption-quality-remediation.md +87 -0
  8. package/docs/design-system/agent-usage.md +13 -0
  9. package/docs/design-system/appearance-presets.md +189 -0
  10. package/docs/design-system/appearances/default.md +94 -0
  11. package/docs/design-system/appearances/rounded.md +95 -0
  12. package/docs/design-system/appearances/sharp.md +95 -0
  13. package/docs/design-system/component-docs-pattern.md +81 -0
  14. package/docs/design-system/component-showcase-consistency-report.md +217 -0
  15. package/docs/design-system/component-token-consistency-audit.md +173 -0
  16. package/docs/design-system/components/README.md +75 -0
  17. package/docs/design-system/components/accordion.md +67 -0
  18. package/docs/design-system/components/activity-feed.md +106 -0
  19. package/docs/design-system/components/alert-dialog.md +87 -0
  20. package/docs/design-system/components/alert.md +111 -0
  21. package/docs/design-system/components/aspect-ratio.md +59 -0
  22. package/docs/design-system/components/attribute.md +103 -0
  23. package/docs/design-system/components/autocomplete.md +93 -0
  24. package/docs/design-system/components/avatar.md +70 -0
  25. package/docs/design-system/components/badge.md +72 -0
  26. package/docs/design-system/components/banner.md +99 -0
  27. package/docs/design-system/components/breadcrumbs.md +188 -0
  28. package/docs/design-system/components/button-group.md +117 -0
  29. package/docs/design-system/components/button.md +95 -0
  30. package/docs/design-system/components/card.md +95 -0
  31. package/docs/design-system/components/carousel.md +61 -0
  32. package/docs/design-system/components/catalog-components.md +59 -0
  33. package/docs/design-system/components/chart.md +58 -0
  34. package/docs/design-system/components/checkbox.md +68 -0
  35. package/docs/design-system/components/collapsible.md +63 -0
  36. package/docs/design-system/components/command.md +75 -0
  37. package/docs/design-system/components/context-menu.md +59 -0
  38. package/docs/design-system/components/date-picker.md +97 -0
  39. package/docs/design-system/components/divider.md +117 -0
  40. package/docs/design-system/components/empty-state.md +72 -0
  41. package/docs/design-system/components/field.md +86 -0
  42. package/docs/design-system/components/file-upload.md +199 -0
  43. package/docs/design-system/components/hover-card.md +61 -0
  44. package/docs/design-system/components/icons.md +48 -0
  45. package/docs/design-system/components/input-group.md +73 -0
  46. package/docs/design-system/components/input-otp.md +73 -0
  47. package/docs/design-system/components/input.md +84 -0
  48. package/docs/design-system/components/item.md +72 -0
  49. package/docs/design-system/components/kbd.md +62 -0
  50. package/docs/design-system/components/label.md +64 -0
  51. package/docs/design-system/components/menu.md +76 -0
  52. package/docs/design-system/components/menubar.md +60 -0
  53. package/docs/design-system/components/modal.md +119 -0
  54. package/docs/design-system/components/native-select.md +70 -0
  55. package/docs/design-system/components/navigation-menu.md +63 -0
  56. package/docs/design-system/components/onboarding-step-list-item.md +94 -0
  57. package/docs/design-system/components/page-header.md +98 -0
  58. package/docs/design-system/components/pagination.md +71 -0
  59. package/docs/design-system/components/popover.md +77 -0
  60. package/docs/design-system/components/progress-slider.md +66 -0
  61. package/docs/design-system/components/progress.md +92 -0
  62. package/docs/design-system/components/radio-card.md +65 -0
  63. package/docs/design-system/components/radio-group.md +72 -0
  64. package/docs/design-system/components/resizable.md +57 -0
  65. package/docs/design-system/components/scroll-area.md +60 -0
  66. package/docs/design-system/components/segmented-control.md +71 -0
  67. package/docs/design-system/components/select.md +87 -0
  68. package/docs/design-system/components/sheet.md +82 -0
  69. package/docs/design-system/components/sidebar.md +83 -0
  70. package/docs/design-system/components/skeleton.md +91 -0
  71. package/docs/design-system/components/slideout.md +77 -0
  72. package/docs/design-system/components/slider.md +81 -0
  73. package/docs/design-system/components/social-button.md +65 -0
  74. package/docs/design-system/components/spinner.md +77 -0
  75. package/docs/design-system/components/steps.md +77 -0
  76. package/docs/design-system/components/table.md +411 -0
  77. package/docs/design-system/components/tabs.md +69 -0
  78. package/docs/design-system/components/tag.md +95 -0
  79. package/docs/design-system/components/textarea.md +64 -0
  80. package/docs/design-system/components/timeline.md +95 -0
  81. package/docs/design-system/components/toast.md +73 -0
  82. package/docs/design-system/components/toggle.md +96 -0
  83. package/docs/design-system/components/toolbar.md +105 -0
  84. package/docs/design-system/components/tooltip.md +107 -0
  85. package/docs/design-system/components/typography.md +18 -0
  86. package/docs/design-system/density-and-elevation.md +44 -0
  87. package/docs/design-system/design-system-test-missing-items.md +368 -0
  88. package/docs/design-system/direction-and-localization.md +23 -0
  89. package/docs/design-system/form-recipes.md +73 -0
  90. package/docs/design-system/gap-promotion-policy.md +21 -0
  91. package/docs/design-system/gap-promotion-report.md +166 -0
  92. package/docs/design-system/icons.md +69 -0
  93. package/docs/design-system/installation.md +68 -0
  94. package/docs/design-system/launch-comparison-shadcn.md +98 -0
  95. package/docs/design-system/registry-and-cli.md +64 -0
  96. package/docs/design-system/release-policy.md +30 -0
  97. package/docs/design-system/roadmap.md +14 -0
  98. package/docs/design-system/support-matrix.md +23 -0
  99. package/docs/design-system/tabs.md +53 -0
  100. package/docs/design-system/token-governance.md +60 -0
  101. package/package.json +97 -65
  102. package/registry/component-contract.json +40 -0
  103. package/registry/components/alert-dialog.tsx +297 -0
  104. package/registry/components/alert.tsx +86 -65
  105. package/registry/components/aspect-ratio.tsx +30 -0
  106. package/registry/components/autocomplete.tsx +23 -9
  107. package/registry/components/avatar.tsx +7 -7
  108. package/registry/components/badge.tsx +1 -1
  109. package/registry/components/button-group.tsx +321 -4
  110. package/registry/components/button.tsx +38 -17
  111. package/registry/components/card.tsx +68 -59
  112. package/registry/components/carousel.tsx +282 -0
  113. package/registry/components/chart.tsx +203 -0
  114. package/registry/components/checkbox.tsx +3 -3
  115. package/registry/components/collapsible.tsx +69 -0
  116. package/registry/components/command.tsx +174 -0
  117. package/registry/components/context-menu.tsx +236 -0
  118. package/registry/components/date-picker.tsx +246 -105
  119. package/registry/components/expanded/ActivityFeed.tsx +6 -15
  120. package/registry/components/expanded/Banner.tsx +3 -3
  121. package/registry/components/expanded/Breadcrumbs.tsx +5 -5
  122. package/registry/components/expanded/CatalogComponentsShowcase.tsx +13 -13
  123. package/registry/components/expanded/CatalogDivider.tsx +1 -1
  124. package/registry/components/expanded/EmptyState.tsx +1 -1
  125. package/registry/components/expanded/FileUpload.tsx +9 -2
  126. package/registry/components/expanded/OnboardingStepListItem.tsx +2 -4
  127. package/registry/components/expanded/PageHeader.tsx +14 -14
  128. package/registry/components/expanded/Slideout.tsx +15 -415
  129. package/registry/components/expanded/Steps.tsx +4 -4
  130. package/registry/components/expanded/Table.tsx +116 -69
  131. package/registry/components/expanded/Timeline.tsx +3 -3
  132. package/registry/components/expanded/activityFeed.css +1 -1
  133. package/registry/components/expanded/breadcrumbs.css +139 -139
  134. package/registry/components/expanded/catalogComponentsShowcase.css +83 -83
  135. package/registry/components/expanded/divider.css +1 -1
  136. package/registry/components/expanded/emptyState.css +1 -1
  137. package/registry/components/expanded/fileUpload.css +6 -6
  138. package/registry/components/expanded/slideout.css +9 -685
  139. package/registry/components/expanded/steps.css +274 -274
  140. package/registry/components/expanded/table.css +2 -2
  141. package/registry/components/expanded/timeline.css +264 -264
  142. package/registry/components/field.tsx +230 -0
  143. package/registry/components/hover-card.tsx +48 -0
  144. package/registry/components/input-content.ts +1 -0
  145. package/registry/components/input-group.tsx +130 -0
  146. package/registry/components/input-otp.tsx +13 -3
  147. package/registry/components/input.tsx +70 -45
  148. package/registry/components/item.tsx +189 -0
  149. package/registry/components/kbd.tsx +151 -0
  150. package/registry/components/label.tsx +78 -0
  151. package/registry/components/menu.tsx +34 -246
  152. package/registry/components/menubar.tsx +226 -0
  153. package/registry/components/modal.tsx +216 -143
  154. package/registry/components/native-select.tsx +205 -0
  155. package/registry/components/navigation-menu.tsx +171 -0
  156. package/registry/components/pagination.tsx +80 -58
  157. package/registry/components/popover.tsx +162 -664
  158. package/registry/components/radio-card.tsx +116 -87
  159. package/registry/components/radio-group.tsx +1 -1
  160. package/registry/components/resizable.tsx +74 -0
  161. package/registry/components/scroll-area.tsx +67 -0
  162. package/registry/components/segmented-control.tsx +87 -0
  163. package/registry/components/select-content.tsx +2 -2
  164. package/registry/components/select.tsx +54 -20
  165. package/registry/components/sheet.tsx +305 -0
  166. package/registry/components/sidebar.tsx +352 -0
  167. package/registry/components/skeleton.css +0 -3
  168. package/registry/components/social-button.tsx +116 -30
  169. package/registry/components/spinner.tsx +18 -55
  170. package/registry/components/{expanded/tabs.css → tabs.css} +127 -106
  171. package/registry/components/tabs.tsx +246 -0
  172. package/registry/components/tag.tsx +2 -2
  173. package/registry/components/textarea.tsx +4 -4
  174. package/registry/components/toast.tsx +136 -0
  175. package/registry/components/toggle.tsx +2 -2
  176. package/registry/components/toolbar.tsx +89 -17
  177. package/registry/components/tooltip.tsx +1 -1
  178. package/registry/examples/alert-demo.tsx +25 -5
  179. package/registry/examples/alert-dialog-demo.tsx +42 -0
  180. package/registry/examples/aspect-ratio-demo.tsx +11 -0
  181. package/registry/examples/attribute-demo.tsx +1 -1
  182. package/registry/examples/autocomplete-demo.tsx +3 -3
  183. package/registry/examples/avatar-demo.tsx +7 -7
  184. package/registry/examples/badge-demo.tsx +1 -1
  185. package/registry/examples/button-demo.tsx +6 -6
  186. package/registry/examples/button-group-demo.tsx +23 -2
  187. package/registry/examples/card-demo.tsx +46 -8
  188. package/registry/examples/carousel-demo.tsx +43 -0
  189. package/registry/examples/chart-demo.tsx +33 -0
  190. package/registry/examples/checkbox-demo.tsx +5 -5
  191. package/registry/examples/collapsible-demo.tsx +16 -0
  192. package/registry/examples/collection-filter-bar-demo.tsx +135 -0
  193. package/registry/examples/command-demo.tsx +42 -0
  194. package/registry/examples/{expanded/command-bar-demo.tsx → command-palette-demo.tsx} +5 -15
  195. package/registry/examples/context-menu-demo.tsx +29 -0
  196. package/registry/examples/control-density-contract-demo.tsx +61 -0
  197. package/registry/examples/date-picker-demo.tsx +12 -12
  198. package/registry/examples/divider-demo.tsx +3 -3
  199. package/registry/examples/expanded/banner-demo.tsx +1 -1
  200. package/registry/examples/expanded/breadcrumbs-demo.tsx +1 -1
  201. package/registry/examples/expanded/empty-state-demo.tsx +1 -1
  202. package/registry/examples/expanded/file-upload-demo.tsx +1 -1
  203. package/registry/examples/expanded/onboarding-step-demo.tsx +1 -1
  204. package/registry/examples/expanded/slideout-demo.tsx +2 -2
  205. package/registry/examples/expanded/steps-demo.tsx +1 -1
  206. package/registry/examples/expanded/tabs-demo.tsx +2 -2
  207. package/registry/examples/expanded/timeline-demo.tsx +1 -1
  208. package/registry/examples/field-demo.tsx +51 -0
  209. package/registry/examples/hover-card-demo.tsx +23 -0
  210. package/registry/examples/input-demo.tsx +6 -6
  211. package/registry/examples/input-group-demo.tsx +16 -0
  212. package/registry/examples/input-otp-demo.tsx +4 -4
  213. package/registry/examples/item-demo.tsx +46 -0
  214. package/registry/examples/kbd-demo.tsx +11 -0
  215. package/registry/examples/label-demo.tsx +20 -0
  216. package/registry/examples/menu-demo.tsx +1 -1
  217. package/registry/examples/menubar-demo.tsx +34 -0
  218. package/registry/examples/modal-demo.tsx +67 -9
  219. package/registry/examples/native-select-demo.tsx +16 -0
  220. package/registry/examples/navigation-menu-demo.tsx +29 -0
  221. package/registry/examples/pagination-demo.tsx +6 -3
  222. package/registry/examples/popover-demo.tsx +19 -19
  223. package/registry/examples/progress-demo.tsx +1 -1
  224. package/registry/examples/progress-slider-demo.tsx +1 -1
  225. package/registry/examples/radio-card-demo.tsx +4 -4
  226. package/registry/examples/radio-group-demo.tsx +2 -2
  227. package/registry/examples/resizable-demo.tsx +22 -0
  228. package/registry/examples/results-toolbar-demo.tsx +44 -0
  229. package/registry/examples/scroll-area-demo.tsx +15 -0
  230. package/registry/examples/segmented-control-demo.tsx +39 -0
  231. package/registry/examples/select-demo.tsx +1 -1
  232. package/registry/examples/sheet-demo.tsx +47 -0
  233. package/registry/examples/sidebar-demo.tsx +55 -0
  234. package/registry/examples/slider-demo.tsx +3 -3
  235. package/registry/examples/social-button-demo.tsx +18 -8
  236. package/registry/examples/spinner-demo.tsx +13 -13
  237. package/registry/examples/tabs-demo.tsx +13 -0
  238. package/registry/examples/tag-demo.tsx +1 -1
  239. package/registry/examples/textarea-demo.tsx +4 -4
  240. package/registry/examples/toast-demo.tsx +35 -0
  241. package/registry/examples/toggle-demo.tsx +6 -6
  242. package/registry/examples/tooltip-demo.tsx +4 -4
  243. package/registry/guidance/USAGE.md +27 -0
  244. package/registry/hooks/use-direction.ts +193 -13
  245. package/registry/index.json +6010 -432
  246. package/registry/styles/globals.css +3112 -4690
  247. package/registry.json +1582 -0
  248. package/schema/config.schema.json +51 -0
  249. package/schema/registry.schema.json +190 -0
  250. package/schema/tokens.schema.json +163 -0
  251. package/src/cli/command-line.js +194 -0
  252. package/src/cli/config-editors.js +9 -0
  253. package/src/cli/doctor.js +399 -0
  254. package/src/cli/file-transaction.js +295 -0
  255. package/src/cli/global-css.js +153 -0
  256. package/src/cli/index.js +639 -1391
  257. package/src/cli/install-plan.js +592 -0
  258. package/src/cli/install-receipt.js +171 -0
  259. package/src/cli/jsonc.js +203 -0
  260. package/src/cli/package-install-state.js +254 -0
  261. package/src/cli/package-manager.js +238 -0
  262. package/src/cli/package-plan.js +185 -0
  263. package/src/cli/package-version.js +97 -0
  264. package/src/cli/registry-query.js +207 -0
  265. package/src/cli/reporting.js +55 -0
  266. package/src/cli/schema-validation.js +19 -0
  267. package/src/cli/source-scanner.js +686 -0
  268. package/src/cli/vite-config.js +478 -0
  269. package/tokens/banhaten.tokens.json +4313 -310
  270. package/registry/assets/avatars/avatar-02.jpg +0 -0
  271. package/registry/assets/avatars/avatar-03.jpg +0 -0
  272. package/registry/assets/avatars/avatar-04.jpg +0 -0
  273. package/registry/assets/avatars/avatar-05.jpg +0 -0
  274. package/registry/assets/avatars/avatar-06.jpg +0 -0
  275. package/registry/assets/avatars/avatar-07.jpg +0 -0
  276. package/registry/assets/avatars/avatar-08.jpg +0 -0
  277. package/registry/assets/avatars/avatar-09.jpg +0 -0
  278. package/registry/assets/avatars/avatar-10.jpg +0 -0
  279. package/registry/assets/avatars/avatar-11.jpg +0 -0
  280. package/registry/assets/avatars/avatar-12.jpg +0 -0
  281. package/registry/assets/avatars/avatar-13.jpg +0 -0
  282. package/registry/assets/avatars/avatar-14.jpg +0 -0
  283. package/registry/assets/avatars/avatar-15.jpg +0 -0
  284. package/registry/assets/avatars/avatar-16.jpg +0 -0
  285. package/registry/assets/avatars/avatar-17.jpg +0 -0
  286. package/registry/assets/avatars/avatar-18.jpg +0 -0
  287. package/registry/assets/avatars/avatar-19.jpg +0 -0
  288. package/registry/assets/avatars/avatar-20.jpg +0 -0
  289. package/registry/assets/avatars/avatar-21.jpg +0 -0
  290. package/registry/assets/avatars/avatar-22.jpg +0 -0
  291. package/registry/assets/avatars/avatar-23.jpg +0 -0
  292. package/registry/assets/avatars/avatar-24.jpg +0 -0
  293. package/registry/assets/avatars/avatar-25.jpg +0 -0
  294. package/registry/assets/avatars/avatar-26.jpg +0 -0
  295. package/registry/assets/avatars/avatar-27.jpg +0 -0
  296. package/registry/assets/avatars/avatar-28.jpg +0 -0
  297. package/registry/assets/avatars/avatar-29.jpg +0 -0
  298. package/registry/assets/avatars/avatar-30.jpg +0 -0
  299. package/registry/assets/avatars/avatar-31.jpg +0 -0
  300. package/registry/assets/avatars/avatar-32.jpg +0 -0
  301. package/registry/assets/avatars/avatar-33.jpg +0 -0
  302. package/registry/assets/avatars/avatar-34.jpg +0 -0
  303. package/registry/assets/avatars/avatar-35.jpg +0 -0
  304. package/registry/assets/image-assets.json +0 -744
  305. package/registry/assets/images/art-02.jpg +0 -0
  306. package/registry/assets/images/art-03.jpg +0 -0
  307. package/registry/assets/images/art-04.jpg +0 -0
  308. package/registry/assets/images/art-05.jpg +0 -0
  309. package/registry/assets/images/art-06.jpg +0 -0
  310. package/registry/assets/images/art-07.jpg +0 -0
  311. package/registry/assets/images/art-08.jpg +0 -0
  312. package/registry/assets/images/art-09.jpg +0 -0
  313. package/registry/assets/images/art-10.jpg +0 -0
  314. package/registry/assets/images/art-11.jpg +0 -0
  315. package/registry/assets/images/art-12.jpg +0 -0
  316. package/registry/assets/images/art-13.jpg +0 -0
  317. package/registry/assets/images/art-14.jpg +0 -0
  318. package/registry/assets/images/art-15.jpg +0 -0
  319. package/registry/assets/images/art-16.jpg +0 -0
  320. package/registry/assets/images/art-17.jpg +0 -0
  321. package/registry/assets/images/art-18.jpg +0 -0
  322. package/registry/assets/images/art-19.jpg +0 -0
  323. package/registry/assets/images/art-20.jpg +0 -0
  324. package/registry/assets/images/art-21.jpg +0 -0
  325. package/registry/assets/images/art-22.jpg +0 -0
  326. package/registry/assets/images/art-23.jpg +0 -0
  327. package/registry/assets/images/art-24.jpg +0 -0
  328. package/registry/assets/images/art-25.jpg +0 -0
  329. package/registry/assets/images/art-26.jpg +0 -0
  330. package/registry/assets/images/art-27.jpg +0 -0
  331. package/registry/assets/images/nature-01.jpg +0 -0
  332. package/registry/assets/images/nature-02.jpg +0 -0
  333. package/registry/assets/images/nature-03.jpg +0 -0
  334. package/registry/assets/images/nature-04.jpg +0 -0
  335. package/registry/assets/images/nature-05.jpg +0 -0
  336. package/registry/assets/images/nature-06.jpg +0 -0
  337. package/registry/assets/images/nature-07.jpg +0 -0
  338. package/registry/assets/images/nature-08.jpg +0 -0
  339. package/registry/assets/images/nature-09.jpg +0 -0
  340. package/registry/assets/images/nature-10.jpg +0 -0
  341. package/registry/assets/images/nature-11.jpg +0 -0
  342. package/registry/assets/images/nature-12.jpg +0 -0
  343. package/registry/assets/images/nature-13.jpg +0 -0
  344. package/registry/assets/images/nature-14.jpg +0 -0
  345. package/registry/assets/images/nature-15.jpg +0 -0
  346. package/registry/assets/images/nature-16.jpg +0 -0
  347. package/registry/assets/images/nature-17.jpg +0 -0
  348. package/registry/assets/images/nature-18.jpg +0 -0
  349. package/registry/assets/images/nature-19.jpg +0 -0
  350. package/registry/assets/images/nature-20.jpg +0 -0
  351. package/registry/components/expanded/BannerBoard.tsx +0 -225
  352. package/registry/components/expanded/CatalogTag.tsx +0 -85
  353. package/registry/components/expanded/CommandBar.tsx +0 -386
  354. package/registry/components/expanded/IconExplorer.tsx +0 -612
  355. package/registry/components/expanded/Tabs.tsx +0 -86
  356. package/registry/components/expanded/TimelineShowcase.tsx +0 -158
  357. package/registry/components/expanded/commandBar.css +0 -470
  358. package/registry/components/expanded/iconExplorer.css +0 -764
  359. package/registry/components/expanded/iconPacks.ts +0 -866
  360. package/registry/components/expanded/tag.css +0 -148
  361. package/registry/examples/expanded/icons-demo.tsx +0 -5
  362. package/tokens/Color mode.zip +0 -0
  363. package/tokens/Numbers.zip +0 -0
  364. package/tokens/Radius.zip +0 -0
  365. package/tokens/Theme.zip +0 -0
@@ -16,7 +16,8 @@ import {
16
16
  type SelectStatusTone,
17
17
  } from "./select-content"
18
18
 
19
- type SelectSize = "lg" | "md"
19
+ type ControlDensity = "compact" | "default" | "comfortable"
20
+ type SelectSize = "lg" | "md" | "comfortable"
20
21
  type SelectVisualState = "default" | "filled" | "error" | "disabled"
21
22
  type SelectVariant = "default" | "soft"
22
23
  type SelectSelectionType = "default" | "checkbox"
@@ -31,9 +32,7 @@ const selectTrigger = cva(
31
32
  "select-none px-[var(--bh-select-trigger-padding-x)] text-start outline-none",
32
33
  "transition-[background-color,box-shadow]",
33
34
  "[--bh-select-trigger-border-current:var(--bh-select-trigger-border)] [--shadow-select-trigger:inset_0px_0px_0px_var(--bh-border-width-default)_var(--bh-select-trigger-border-current,var(--bh-select-trigger-border)),var(--shadow-component-default)]",
34
- "[--bh-select-focus-ring-color:color-mix(in_srgb,var(--bh-border-focus)_30%,transparent)] [--shadow-select-focus-border:inset_0px_0px_0px_var(--bh-border-width-default)_var(--bh-select-trigger-border-current,var(--bh-select-trigger-border))]",
35
- "after:pointer-events-none after:absolute after:inset-[calc(var(--bh-focus-ring-width)*-1)] after:rounded-[calc(var(--bh-select-trigger-radius)+var(--bh-focus-ring-width))] after:border-[length:var(--bh-focus-ring-width)] after:border-solid after:border-transparent after:content-['']",
36
- "focus-visible:[--bh-select-trigger-border-current:var(--bh-select-trigger-border-focus)] focus-visible:[box-shadow:var(--shadow-select-focus-border)] focus-visible:after:border-[var(--bh-select-focus-ring-color)]",
35
+ "focus-visible:[--bh-select-trigger-border-current:var(--bh-select-trigger-border-focus)] focus-visible:shadow-[var(--shadow-select-focus-ring)]",
37
36
  "aria-invalid:[--bh-select-trigger-border-current:var(--bh-select-trigger-border-error)]",
38
37
  "disabled:pointer-events-none disabled:bg-[var(--bh-select-trigger-bg-disabled)] disabled:shadow-[inset_0px_0px_0px_var(--bh-border-width-default)_var(--bh-select-trigger-border-disabled)]",
39
38
  "[&_svg]:pointer-events-none [&_svg]:shrink-0",
@@ -41,6 +40,7 @@ const selectTrigger = cva(
41
40
  {
42
41
  variants: {
43
42
  size: {
43
+ comfortable: "py-[var(--bh-select-trigger-padding-y-comfortable)]",
44
44
  lg: "py-[var(--bh-select-trigger-padding-y-lg)]",
45
45
  md: "py-[var(--bh-select-trigger-padding-y-md)]",
46
46
  },
@@ -54,7 +54,7 @@ const selectTrigger = cva(
54
54
  default: "",
55
55
  filled: "",
56
56
  error:
57
- "[--bh-select-trigger-border-current:var(--bh-select-trigger-border-error)] [--bh-select-focus-ring-color:color-mix(in_srgb,var(--bh-border-focus-danger)_30%,transparent)] shadow-[var(--shadow-select-trigger)] focus-visible:[box-shadow:var(--shadow-select-focus-border)]",
57
+ "[--bh-select-trigger-border-current:var(--bh-select-trigger-border-error)] shadow-[var(--shadow-select-trigger)] focus-visible:shadow-[var(--shadow-select-danger-focus-ring)]",
58
58
  disabled:
59
59
  "pointer-events-none bg-[var(--bh-select-trigger-bg-disabled)] shadow-[inset_0px_0px_0px_var(--bh-border-width-default)_var(--bh-select-trigger-border-disabled)]",
60
60
  },
@@ -122,6 +122,7 @@ const SelectRadixItemContext = React.createContext(false)
122
122
  type SelectProps = Omit<React.ComponentProps<"div">, "children" | "dir"> & {
123
123
  children?: React.ReactNode
124
124
  defaultSelectValue?: string
125
+ density?: ControlDensity
125
126
  dir?: "ltr" | "rtl" | "auto"
126
127
  errorMessage?: React.ReactNode
127
128
  expandIcon?: React.ReactNode | false
@@ -135,7 +136,7 @@ type SelectProps = Omit<React.ComponentProps<"div">, "children" | "dir"> & {
135
136
  isOptional?: boolean
136
137
  isRequired?: boolean
137
138
  label?: React.ReactNode
138
- leadingIcon?: React.ReactNode
139
+ leadingIcon?: React.ReactNode | false
139
140
  onOpenChange?: (open: boolean) => void
140
141
  onTriggerClick?: React.MouseEventHandler<HTMLButtonElement>
141
142
  onValueChange?: (value: string) => void
@@ -160,7 +161,7 @@ type SelectProps = Omit<React.ComponentProps<"div">, "children" | "dir"> & {
160
161
  | "value"
161
162
  | "variant"
162
163
  >
163
- trailingIcon?: React.ReactNode
164
+ trailingIcon?: React.ReactNode | false
164
165
  value?: React.ReactNode
165
166
  variant?: SelectVariant
166
167
  }
@@ -169,6 +170,7 @@ const Select = React.forwardRef<HTMLDivElement, SelectProps>(function Select({
169
170
  children,
170
171
  className,
171
172
  defaultSelectValue,
173
+ density,
172
174
  dir,
173
175
  errorMessage,
174
176
  expandIcon,
@@ -176,8 +178,8 @@ const Select = React.forwardRef<HTMLDivElement, SelectProps>(function Select({
176
178
  hasHelperText,
177
179
  hasInformationIcon = false,
178
180
  hasLabel,
179
- hasLeadingIcon = true,
180
- hasTrailingIcon = true,
181
+ hasLeadingIcon,
182
+ hasTrailingIcon,
181
183
  helperText,
182
184
  isOptional = false,
183
185
  isRequired = false,
@@ -190,7 +192,7 @@ const Select = React.forwardRef<HTMLDivElement, SelectProps>(function Select({
190
192
  optionalText,
191
193
  placeholder,
192
194
  selectValue,
193
- size = "lg",
195
+ size,
194
196
  state = "default",
195
197
  triggerClassName,
196
198
  triggerId,
@@ -201,6 +203,7 @@ const Select = React.forwardRef<HTMLDivElement, SelectProps>(function Select({
201
203
  ...props
202
204
  }, ref) {
203
205
  const generatedId = React.useId()
206
+ const resolvedSize = resolveSelectSize(density, size)
204
207
  const resolvedDir = dir
205
208
  const triggerVisualState = triggerProps?.disabled ? "disabled" : state
206
209
  const isError = triggerVisualState === "error"
@@ -212,6 +215,12 @@ const Select = React.forwardRef<HTMLDivElement, SelectProps>(function Select({
212
215
  const shouldRenderLabel = hasLabel ?? hasRenderableContent(selectedLabel)
213
216
  const shouldRenderHelperText =
214
217
  hasHelperText ?? hasRenderableContent(selectedHelper)
218
+ const shouldShowLeadingIcon =
219
+ leadingIcon !== false &&
220
+ (hasLeadingIcon ?? hasRenderableContent(leadingIcon))
221
+ const shouldShowTrailingIcon =
222
+ trailingIcon !== false &&
223
+ (hasTrailingIcon ?? hasRenderableContent(trailingIcon))
215
224
  const shouldRenderMenu = React.Children.count(children) > 0
216
225
  const selectId = triggerId || generatedId
217
226
  const helperId = `${selectId}-helper`
@@ -228,6 +237,8 @@ const Select = React.forwardRef<HTMLDivElement, SelectProps>(function Select({
228
237
  {...rootOpenProps}
229
238
  >
230
239
  <SelectRoot
240
+ data-density={density}
241
+ data-size={resolvedSize}
231
242
  data-state={triggerVisualState}
232
243
  data-variant={variant}
233
244
  dir={resolvedDir}
@@ -256,12 +267,20 @@ const Select = React.forwardRef<HTMLDivElement, SelectProps>(function Select({
256
267
  aria-invalid={isError || undefined}
257
268
  expandIcon={expandIcon}
258
269
  id={selectId}
259
- leadingIcon={hasLeadingIcon ? leadingIcon : false}
270
+ leadingIcon={
271
+ shouldShowLeadingIcon
272
+ ? (leadingIcon ?? <SelectIcon name="user" />)
273
+ : false
274
+ }
260
275
  onClick={onTriggerClick}
261
276
  placeholder={selectedPlaceholder}
262
- size={size}
277
+ size={resolvedSize}
263
278
  state={triggerVisualState}
264
- trailingIcon={hasTrailingIcon ? trailingIcon : false}
279
+ trailingIcon={
280
+ shouldShowTrailingIcon
281
+ ? (trailingIcon ?? <SelectIcon name="info" />)
282
+ : false
283
+ }
265
284
  value={selectedValue}
266
285
  variant={variant}
267
286
  className={triggerClassName}
@@ -466,6 +485,7 @@ type SelectTriggerProps = Omit<
466
485
  "children" | "value"
467
486
  > &
468
487
  VariantProps<typeof selectTrigger> & {
488
+ density?: ControlDensity
469
489
  expandIcon?: React.ReactNode | false
470
490
  leadingIcon?: React.ReactNode | false
471
491
  placeholder?: React.ReactNode
@@ -477,11 +497,12 @@ const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(
477
497
  (
478
498
  {
479
499
  className,
500
+ density,
480
501
  disabled,
481
502
  expandIcon,
482
503
  leadingIcon,
483
504
  placeholder,
484
- size = "lg",
505
+ size,
485
506
  state,
486
507
  trailingIcon,
487
508
  type = "button",
@@ -491,13 +512,15 @@ const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(
491
512
  },
492
513
  ref
493
514
  ) => {
515
+ const resolvedSize = resolveSelectSize(density, size)
494
516
  const hasValue = value !== undefined && value !== null && value !== ""
495
517
  const visualState = disabled ? "disabled" : state ?? (hasValue ? "filled" : "default")
496
518
  const isDisabled = visualState === "disabled"
497
519
 
498
520
  return (
499
521
  <button
500
- data-size={size}
522
+ data-density={density}
523
+ data-size={resolvedSize}
501
524
  data-slot="select-trigger"
502
525
  data-state={visualState}
503
526
  data-variant={variant}
@@ -505,7 +528,7 @@ const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(
505
528
  ref={ref}
506
529
  type={type}
507
530
  className={cn(
508
- selectTrigger({ size, state: visualState, variant }),
531
+ selectTrigger({ size: resolvedSize, state: visualState, variant }),
509
532
  className
510
533
  )}
511
534
  {...props}
@@ -514,12 +537,12 @@ const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(
514
537
  data-slot="select-trigger-main"
515
538
  className="flex min-w-0 flex-1 items-center gap-[var(--bh-select-content-gap)]"
516
539
  >
517
- {leadingIcon !== false ? (
540
+ {hasRenderableContent(leadingIcon) ? (
518
541
  <span
519
542
  data-slot="select-leading-icon"
520
543
  className="flex size-[var(--bh-select-icon-slot-size)] shrink-0 items-center justify-center text-[var(--bh-select-trigger-icon-color)] group-data-[state=disabled]/select-trigger:text-[var(--bh-content-disabled)] [&_svg:not([class*='size-'])]:size-[var(--bh-select-icon-size)]"
521
544
  >
522
- {leadingIcon ?? <SelectIcon name="user" />}
545
+ {leadingIcon}
523
546
  </span>
524
547
  ) : null}
525
548
 
@@ -543,12 +566,12 @@ const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(
543
566
  </span>
544
567
  </span>
545
568
 
546
- {trailingIcon !== false ? (
569
+ {hasRenderableContent(trailingIcon) ? (
547
570
  <span
548
571
  data-slot="select-trailing-icon"
549
572
  className="flex size-[var(--bh-select-icon-slot-size)] shrink-0 items-center justify-center text-[var(--bh-select-trigger-icon-color)] group-data-[state=disabled]/select-trigger:text-[var(--bh-content-disabled)] [&_svg:not([class*='size-'])]:size-[var(--bh-select-icon-size)]"
550
573
  >
551
- {trailingIcon ?? <SelectIcon name="info" />}
574
+ {trailingIcon}
552
575
  </span>
553
576
  ) : null}
554
577
 
@@ -801,6 +824,16 @@ function getFocusableSelectItems(root: HTMLElement) {
801
824
  ).filter((item) => !item.hasAttribute("disabled"))
802
825
  }
803
826
 
827
+ function resolveSelectSize(
828
+ density: ControlDensity | undefined,
829
+ size: SelectSize | null | undefined
830
+ ): SelectSize {
831
+ if (density === "compact") return "md"
832
+ if (density === "default") return "lg"
833
+ if (density === "comfortable") return "comfortable"
834
+ return size ?? "lg"
835
+ }
836
+
804
837
  type SelectCheckboxIndicatorProps = {
805
838
  checked?: boolean
806
839
  className?: string
@@ -862,6 +895,7 @@ export {
862
895
  selectTrigger,
863
896
  }
864
897
  export type {
898
+ ControlDensity,
865
899
  SelectItemType,
866
900
  SelectMenuItemProps,
867
901
  SelectProps,
@@ -0,0 +1,305 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as DialogPrimitive from "@radix-ui/react-dialog"
5
+ import { cva, type VariantProps } from "class-variance-authority"
6
+ import { XIcon } from "lucide-react"
7
+
8
+ import { cn } from "@/lib/utils"
9
+
10
+ type SheetSide = "start" | "end" | "top" | "bottom"
11
+ type SheetSize = "sm" | "default" | "lg"
12
+
13
+ const sheetContentVariants = cva(
14
+ [
15
+ "fixed z-[var(--bh-z-overlay)] flex flex-col overflow-hidden bg-[var(--bh-bg-raised)] text-[var(--bh-content-default)]",
16
+ "shadow-[var(--shadow-component-default)] outline-none",
17
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
18
+ ],
19
+ {
20
+ variants: {
21
+ side: {
22
+ bottom:
23
+ "inset-x-0 bottom-0 max-h-[calc(100vh-var(--bh-space-8xl-48))] rounded-t-[var(--bh-radius-2xl-12)] border-t border-[var(--bh-border-subtle)] data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom",
24
+ end:
25
+ "inset-y-0 end-0 h-full max-w-[calc(100vw-var(--bh-space-4xl-20))] border-s border-[var(--bh-border-subtle)] data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right rtl:data-[state=open]:slide-in-from-left rtl:data-[state=closed]:slide-out-to-left",
26
+ start:
27
+ "inset-y-0 start-0 h-full max-w-[calc(100vw-var(--bh-space-4xl-20))] border-e border-[var(--bh-border-subtle)] data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left rtl:data-[state=open]:slide-in-from-right rtl:data-[state=closed]:slide-out-to-right",
28
+ top:
29
+ "inset-x-0 top-0 max-h-[calc(100vh-var(--bh-space-8xl-48))] rounded-b-[var(--bh-radius-2xl-12)] border-b border-[var(--bh-border-subtle)] data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top",
30
+ },
31
+ size: {
32
+ default: "",
33
+ lg: "",
34
+ sm: "",
35
+ },
36
+ },
37
+ compoundVariants: [
38
+ {
39
+ side: ["start", "end"],
40
+ size: "sm",
41
+ className:
42
+ "w-[min(var(--bh-space-19xl-384),calc(100vw-var(--bh-space-4xl-20)))]",
43
+ },
44
+ {
45
+ side: ["start", "end"],
46
+ size: "default",
47
+ className:
48
+ "w-[min(calc(var(--bh-space-19xl-384)+var(--bh-space-9xl-64)),calc(100vw-var(--bh-space-4xl-20)))]",
49
+ },
50
+ {
51
+ side: ["start", "end"],
52
+ size: "lg",
53
+ className:
54
+ "w-[min(calc(var(--bh-space-19xl-384)+var(--bh-space-12xl-128)),calc(100vw-var(--bh-space-4xl-20)))]",
55
+ },
56
+ {
57
+ side: ["top", "bottom"],
58
+ size: "sm",
59
+ className: "min-h-[var(--bh-space-12xl-128)]",
60
+ },
61
+ {
62
+ side: ["top", "bottom"],
63
+ size: "default",
64
+ className: "min-h-[var(--bh-space-16xl-256)]",
65
+ },
66
+ {
67
+ side: ["top", "bottom"],
68
+ size: "lg",
69
+ className: "min-h-[var(--bh-space-17xl-288)]",
70
+ },
71
+ ],
72
+ defaultVariants: {
73
+ side: "end",
74
+ size: "default",
75
+ },
76
+ }
77
+ )
78
+
79
+ type SheetRootProps = React.ComponentProps<typeof DialogPrimitive.Root>
80
+ type SheetTriggerProps = React.ComponentProps<typeof DialogPrimitive.Trigger>
81
+ type SheetCloseProps = React.ComponentProps<typeof DialogPrimitive.Close>
82
+ type SheetPortalProps = React.ComponentProps<typeof DialogPrimitive.Portal>
83
+ type SheetOverlayProps = React.ComponentPropsWithoutRef<
84
+ typeof DialogPrimitive.Overlay
85
+ >
86
+ type SheetContentProps = React.ComponentPropsWithoutRef<
87
+ typeof DialogPrimitive.Content
88
+ > &
89
+ VariantProps<typeof sheetContentVariants> & {
90
+ overlayClassName?: string
91
+ showCloseButton?: boolean
92
+ }
93
+ type SheetHeaderProps = React.ComponentProps<"header">
94
+ type SheetFooterProps = React.ComponentProps<"footer">
95
+ type SheetBodyProps = React.ComponentProps<"div">
96
+ type SheetTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
97
+ type SheetDescriptionProps = React.ComponentPropsWithoutRef<
98
+ typeof DialogPrimitive.Description
99
+ >
100
+ type SheetCloseButtonProps = React.ComponentProps<"button"> & {
101
+ label?: string
102
+ }
103
+
104
+ const Sheet = DialogPrimitive.Root
105
+ const SheetTrigger = DialogPrimitive.Trigger
106
+ const SheetClose = DialogPrimitive.Close
107
+ const SheetPortal = DialogPrimitive.Portal
108
+
109
+ const SheetOverlay = React.forwardRef<
110
+ React.ElementRef<typeof DialogPrimitive.Overlay>,
111
+ SheetOverlayProps
112
+ >(function SheetOverlay({ className, ...props }, ref) {
113
+ return (
114
+ <DialogPrimitive.Overlay
115
+ data-slot="sheet-overlay"
116
+ ref={ref}
117
+ className={cn(
118
+ "fixed inset-0 z-[var(--bh-z-overlay)] bg-[var(--bh-bg-backdrop)]",
119
+ className
120
+ )}
121
+ {...props}
122
+ />
123
+ )
124
+ })
125
+
126
+ const SheetContent = React.forwardRef<
127
+ React.ElementRef<typeof DialogPrimitive.Content>,
128
+ SheetContentProps
129
+ >(function SheetContent(
130
+ {
131
+ children,
132
+ className,
133
+ overlayClassName,
134
+ showCloseButton = true,
135
+ side = "end",
136
+ size = "default",
137
+ ...props
138
+ },
139
+ ref
140
+ ) {
141
+ return (
142
+ <SheetPortal>
143
+ <SheetOverlay className={overlayClassName} />
144
+ <DialogPrimitive.Content
145
+ data-side={side}
146
+ data-size={size}
147
+ data-slot="sheet-content"
148
+ ref={ref}
149
+ className={cn(sheetContentVariants({ side, size, className }))}
150
+ {...props}
151
+ >
152
+ {children}
153
+ {showCloseButton ? <SheetCloseButton /> : null}
154
+ </DialogPrimitive.Content>
155
+ </SheetPortal>
156
+ )
157
+ })
158
+
159
+ const SheetHeader = React.forwardRef<HTMLElement, SheetHeaderProps>(
160
+ function SheetHeader({ className, ...props }, ref) {
161
+ return (
162
+ <header
163
+ data-slot="sheet-header"
164
+ ref={ref}
165
+ className={cn(
166
+ "grid gap-[var(--bh-space-xs-4)] px-[var(--bh-space-4xl-20)] pb-[var(--bh-space-lg-10)] pe-[var(--bh-space-9xl-64)] pt-[var(--bh-space-4xl-20)] text-start",
167
+ className
168
+ )}
169
+ {...props}
170
+ />
171
+ )
172
+ }
173
+ )
174
+
175
+ const SheetBody = React.forwardRef<HTMLDivElement, SheetBodyProps>(
176
+ function SheetBody({ className, ...props }, ref) {
177
+ return (
178
+ <div
179
+ data-slot="sheet-body"
180
+ ref={ref}
181
+ className={cn(
182
+ "min-h-0 flex-1 overflow-auto px-[var(--bh-space-4xl-20)] py-[var(--bh-space-lg-10)] text-start",
183
+ className
184
+ )}
185
+ {...props}
186
+ />
187
+ )
188
+ }
189
+ )
190
+
191
+ const SheetFooter = React.forwardRef<HTMLElement, SheetFooterProps>(
192
+ function SheetFooter({ className, ...props }, ref) {
193
+ return (
194
+ <footer
195
+ data-slot="sheet-footer"
196
+ ref={ref}
197
+ className={cn(
198
+ "flex shrink-0 flex-wrap items-center justify-end gap-[var(--bh-space-md-8)] border-t border-[var(--bh-border-subtle)] px-[var(--bh-space-4xl-20)] py-[var(--bh-space-3xl-16)]",
199
+ className
200
+ )}
201
+ {...props}
202
+ />
203
+ )
204
+ }
205
+ )
206
+
207
+ const SheetTitle = React.forwardRef<
208
+ React.ElementRef<typeof DialogPrimitive.Title>,
209
+ SheetTitleProps
210
+ >(function SheetTitle({ className, dir = "auto", ...props }, ref) {
211
+ return (
212
+ <DialogPrimitive.Title
213
+ data-slot="sheet-title"
214
+ dir={dir}
215
+ ref={ref}
216
+ className={cn(
217
+ "m-0 text-[length:var(--bh-text-heading-sm-semibold-font-size)] font-[var(--bh-text-heading-sm-semibold-font-weight)] leading-[var(--bh-text-heading-sm-semibold-line-height)] tracking-[var(--bh-text-heading-sm-semibold-letter-spacing)] text-[var(--bh-content-default)]",
218
+ className
219
+ )}
220
+ {...props}
221
+ />
222
+ )
223
+ })
224
+
225
+ const SheetDescription = React.forwardRef<
226
+ React.ElementRef<typeof DialogPrimitive.Description>,
227
+ SheetDescriptionProps
228
+ >(function SheetDescription({ className, dir = "auto", ...props }, ref) {
229
+ return (
230
+ <DialogPrimitive.Description
231
+ data-slot="sheet-description"
232
+ dir={dir}
233
+ ref={ref}
234
+ className={cn(
235
+ "m-0 text-[length:var(--bh-text-body-sm-regular-font-size)] font-[var(--bh-text-body-sm-regular-font-weight)] leading-[var(--bh-text-body-sm-regular-line-height)] tracking-[var(--bh-text-body-sm-regular-letter-spacing)] text-[var(--bh-content-subtle)]",
236
+ className
237
+ )}
238
+ {...props}
239
+ />
240
+ )
241
+ })
242
+
243
+ const SheetCloseButton = React.forwardRef<
244
+ HTMLButtonElement,
245
+ SheetCloseButtonProps
246
+ >(function SheetCloseButton(
247
+ { children, className, label = "Close sheet", type = "button", ...props },
248
+ ref
249
+ ) {
250
+ return (
251
+ <SheetClose asChild>
252
+ <button
253
+ aria-label={label}
254
+ data-slot="sheet-close"
255
+ ref={ref}
256
+ type={type}
257
+ className={cn(
258
+ "absolute end-[var(--bh-space-3xl-16)] top-[var(--bh-space-3xl-16)] inline-flex size-[var(--bh-space-6xl-32)] items-center justify-center rounded-[var(--bh-radius-full)] border-0 bg-transparent p-0 text-[var(--bh-content-subtle)] outline-none transition-[background-color,box-shadow,color] hover:bg-[var(--bh-interactive-ghost-hover)] hover:text-[var(--bh-content-default)] focus-visible:shadow-[var(--shadow-button-focus)]",
259
+ className
260
+ )}
261
+ {...props}
262
+ >
263
+ {children ?? (
264
+ <XIcon
265
+ aria-hidden="true"
266
+ className="size-[var(--bh-space-5xl-24)]"
267
+ strokeWidth="var(--bh-icon-stroke-200)"
268
+ />
269
+ )}
270
+ </button>
271
+ </SheetClose>
272
+ )
273
+ })
274
+
275
+ export {
276
+ Sheet,
277
+ SheetBody,
278
+ SheetClose,
279
+ SheetCloseButton,
280
+ SheetContent,
281
+ SheetDescription,
282
+ SheetFooter,
283
+ SheetHeader,
284
+ SheetOverlay,
285
+ SheetPortal,
286
+ SheetTitle,
287
+ SheetTrigger,
288
+ sheetContentVariants,
289
+ }
290
+ export type {
291
+ SheetBodyProps,
292
+ SheetCloseButtonProps,
293
+ SheetCloseProps,
294
+ SheetContentProps,
295
+ SheetDescriptionProps,
296
+ SheetFooterProps,
297
+ SheetHeaderProps,
298
+ SheetOverlayProps,
299
+ SheetPortalProps,
300
+ SheetRootProps,
301
+ SheetSide,
302
+ SheetSize,
303
+ SheetTitleProps,
304
+ SheetTriggerProps,
305
+ }