@passui/react 0.1.47 → 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 (427) hide show
  1. package/README.md +29 -109
  2. package/THIRD_PARTY_NOTICES.md +29 -0
  3. package/dist/accordion.d.ts +15 -0
  4. package/dist/accordion.js +93 -0
  5. package/dist/alert-dialog.d.ts +26 -0
  6. package/dist/alert-dialog.js +142 -0
  7. package/dist/alert.d.ts +10 -0
  8. package/dist/alert.js +28 -0
  9. package/dist/{types/src/components/ambient/ambient.d.ts → ambient.d.ts} +4 -4
  10. package/dist/ambient.js +22 -0
  11. package/dist/{types/src/appearance → appearance}/platform.d.ts +3 -3
  12. package/dist/appearance/platform.js +43 -0
  13. package/dist/appearance/theme.d.ts +71 -0
  14. package/dist/appearance/theme.js +236 -0
  15. package/dist/appearance.d.ts +3 -0
  16. package/dist/appearance.js +3 -0
  17. package/dist/{types/src/components/aspect-ratio/aspect-ratio.d.ts → aspect-ratio.d.ts} +4 -4
  18. package/dist/aspect-ratio.js +17 -0
  19. package/dist/avatar.d.ts +5 -0
  20. package/dist/avatar.js +43 -0
  21. package/dist/badge.d.ts +8 -0
  22. package/dist/badge.js +21 -0
  23. package/dist/breadcrumb.d.ts +13 -0
  24. package/dist/breadcrumb.js +63 -0
  25. package/dist/button-group.d.ts +5 -0
  26. package/dist/button-group.js +14 -0
  27. package/dist/button.d.ts +21 -0
  28. package/dist/button.js +58 -0
  29. package/dist/calendar.d.ts +35 -0
  30. package/dist/calendar.js +225 -0
  31. package/dist/card.d.ts +9 -0
  32. package/dist/card.js +54 -0
  33. package/dist/chart.d.ts +30 -0
  34. package/dist/chart.js +226 -0
  35. package/dist/checkbox.d.ts +13 -0
  36. package/dist/checkbox.js +53 -0
  37. package/dist/{types/src/lib/clipboard.d.ts → clipboard.d.ts} +1 -1
  38. package/dist/clipboard.js +16 -0
  39. package/dist/cn.d.ts +2 -0
  40. package/dist/cn.js +10 -0
  41. package/dist/code-block.d.ts +34 -0
  42. package/dist/code-block.js +87 -0
  43. package/dist/collapsible.d.ts +13 -0
  44. package/dist/collapsible.js +49 -0
  45. package/dist/combobox.d.ts +25 -0
  46. package/dist/combobox.js +112 -0
  47. package/dist/command.d.ts +22 -0
  48. package/dist/command.js +129 -0
  49. package/dist/components/toast/toast-store.d.ts +60 -0
  50. package/dist/components/toast/toast-store.js +96 -0
  51. package/dist/{types/src/components → components}/toast/toaster.d.ts +4 -4
  52. package/dist/components/toast/toaster.js +345 -0
  53. package/dist/context-menu.d.ts +2 -0
  54. package/dist/context-menu.js +2 -0
  55. package/dist/conversation.d.ts +48 -0
  56. package/dist/conversation.js +202 -0
  57. package/dist/date-time-picker.d.ts +50 -0
  58. package/dist/date-time-picker.js +235 -0
  59. package/dist/date.d.ts +50 -0
  60. package/dist/date.js +77 -0
  61. package/dist/dialog.d.ts +21 -0
  62. package/dist/dialog.js +113 -0
  63. package/dist/drawer.d.ts +30 -0
  64. package/dist/drawer.js +140 -0
  65. package/dist/dropdown-menu.d.ts +56 -0
  66. package/dist/dropdown-menu.js +295 -0
  67. package/dist/empty.d.ts +11 -0
  68. package/dist/empty.js +51 -0
  69. package/dist/field.d.ts +16 -0
  70. package/dist/field.js +47 -0
  71. package/{src/hooks/scroll/minimize-decision.ts → dist/hooks/scroll/minimize-decision.js} +3 -5
  72. package/dist/{types/src/hooks → hooks}/use-anchored-placement.d.ts +2 -2
  73. package/dist/hooks/use-anchored-placement.js +33 -0
  74. package/dist/{types/src/hooks → hooks}/use-minimize-on-scroll.d.ts +1 -1
  75. package/dist/hooks/use-minimize-on-scroll.js +59 -0
  76. package/dist/{types/src/hooks → hooks}/use-visual-viewport.d.ts +2 -2
  77. package/{src/hooks/use-visual-viewport.ts → dist/hooks/use-visual-viewport.js} +20 -35
  78. package/dist/hooks/viewport/types.d.ts +7 -0
  79. package/dist/hooks/viewport/viewport-metrics.js +13 -0
  80. package/dist/index.d.ts +84 -0
  81. package/dist/index.js +80 -0
  82. package/dist/input-group.d.ts +17 -0
  83. package/dist/input-group.js +55 -0
  84. package/dist/input-otp.d.ts +13 -0
  85. package/dist/input-otp.js +36 -0
  86. package/dist/input.d.ts +4 -0
  87. package/dist/input.js +14 -0
  88. package/dist/item.d.ts +49 -0
  89. package/dist/item.js +142 -0
  90. package/dist/kbd.d.ts +4 -0
  91. package/dist/kbd.js +86 -0
  92. package/dist/label.d.ts +3 -0
  93. package/dist/label.js +12 -0
  94. package/dist/labeled-content.d.ts +24 -0
  95. package/dist/labeled-content.js +41 -0
  96. package/dist/{types/src/lib/language.d.ts → language.d.ts} +1 -1
  97. package/dist/language.js +11 -0
  98. package/dist/layout.d.ts +24 -0
  99. package/dist/layout.js +36 -0
  100. package/dist/{types/src/lib → lib}/anchored-placement.d.ts +27 -27
  101. package/dist/lib/anchored-placement.js +42 -0
  102. package/dist/lib/calendar-month.js +90 -0
  103. package/dist/lib/cx.js +6 -0
  104. package/dist/lib/drawer.math.js +29 -0
  105. package/dist/lib/floating-layers.d.ts +3 -0
  106. package/dist/lib/floating-layers.js +25 -0
  107. package/dist/{types/src/lib → lib}/haptics.d.ts +1 -1
  108. package/dist/lib/haptics.js +13 -0
  109. package/dist/lib/liquid-step.js +33 -0
  110. package/dist/lib/page-scale.js +58 -0
  111. package/dist/lib/portal.js +12 -0
  112. package/dist/lib/presence.js +53 -0
  113. package/dist/lib/range-value.js +25 -0
  114. package/dist/lib/render.d.ts +8 -0
  115. package/dist/lib/render.js +42 -0
  116. package/dist/lib/rolling-digit.js +83 -0
  117. package/dist/{types/src/lib → lib}/screen-edges.d.ts +5 -5
  118. package/dist/lib/screen-edges.js +30 -0
  119. package/dist/lib/swipe-touch-action.js +34 -0
  120. package/dist/lib/visual-viewport.js +27 -0
  121. package/dist/lib/water-drop.js +412 -0
  122. package/dist/lib/wheel.js +125 -0
  123. package/dist/list.d.ts +26 -0
  124. package/dist/list.js +80 -0
  125. package/dist/locales.d.ts +18 -0
  126. package/dist/locales.js +36 -0
  127. package/dist/marker.d.ts +13 -0
  128. package/dist/marker.js +33 -0
  129. package/dist/motion/transitions.d.ts +170 -0
  130. package/dist/motion/transitions.js +156 -0
  131. package/dist/pagination.d.ts +30 -0
  132. package/dist/pagination.js +117 -0
  133. package/dist/popover.d.ts +26 -0
  134. package/dist/popover.js +101 -0
  135. package/dist/progress.d.ts +9 -0
  136. package/dist/progress.js +24 -0
  137. package/dist/questionnaire.d.ts +46 -0
  138. package/dist/questionnaire.js +133 -0
  139. package/dist/radio-group.d.ts +21 -0
  140. package/dist/radio-group.js +67 -0
  141. package/dist/search-field.d.ts +18 -0
  142. package/dist/search-field.js +45 -0
  143. package/dist/segmented-control.d.ts +16 -0
  144. package/dist/segmented-control.js +25 -0
  145. package/dist/select.d.ts +24 -0
  146. package/dist/select.js +107 -0
  147. package/dist/separator.d.ts +9 -0
  148. package/dist/separator.js +17 -0
  149. package/dist/{types/src/lib/shapes.d.ts → shapes.d.ts} +2 -2
  150. package/dist/shapes.js +65 -0
  151. package/dist/sheet.d.ts +24 -0
  152. package/dist/sheet.js +141 -0
  153. package/dist/sidebar.d.ts +32 -0
  154. package/dist/sidebar.js +85 -0
  155. package/dist/skeleton.d.ts +3 -0
  156. package/dist/skeleton.js +13 -0
  157. package/dist/slider.d.ts +9 -0
  158. package/dist/slider.js +42 -0
  159. package/dist/slosh-slider.d.ts +21 -0
  160. package/dist/slosh-slider.js +205 -0
  161. package/dist/spinner.d.ts +3 -0
  162. package/dist/spinner.js +20 -0
  163. package/dist/stat-tile.d.ts +20 -0
  164. package/dist/stat-tile.js +53 -0
  165. package/dist/stepper.d.ts +22 -0
  166. package/dist/stepper.js +98 -0
  167. package/dist/swatch-picker.d.ts +22 -0
  168. package/dist/swatch-picker.js +70 -0
  169. package/dist/switch.d.ts +10 -0
  170. package/dist/switch.js +44 -0
  171. package/dist/tab-bar.d.ts +15 -0
  172. package/dist/tab-bar.js +34 -0
  173. package/dist/{types/src/components/table/table.d.ts → table.d.ts} +3 -3
  174. package/dist/table.js +93 -0
  175. package/dist/tabs.d.ts +32 -0
  176. package/dist/tabs.js +131 -0
  177. package/dist/text.d.ts +25 -0
  178. package/dist/text.js +44 -0
  179. package/dist/textarea.d.ts +3 -0
  180. package/dist/textarea.js +13 -0
  181. package/dist/toast.d.ts +3 -0
  182. package/dist/toast.js +3 -0
  183. package/dist/toggle-group.d.ts +20 -0
  184. package/dist/toggle-group.js +68 -0
  185. package/dist/toggle.d.ts +24 -0
  186. package/dist/toggle.js +37 -0
  187. package/dist/tokens.d.ts +1 -0
  188. package/dist/tooltip.d.ts +21 -0
  189. package/dist/tooltip.js +61 -0
  190. package/dist/trace.d.ts +14 -0
  191. package/dist/trace.js +54 -0
  192. package/dist/{types/src/hooks/use-dismiss.d.ts → use-dismiss.d.ts} +3 -3
  193. package/dist/use-dismiss.js +38 -0
  194. package/dist/{types/src/hooks/use-media-query.d.ts → use-media-query.d.ts} +12 -12
  195. package/dist/use-media-query.js +56 -0
  196. package/dist/use-os.d.ts +12 -0
  197. package/dist/use-os.js +17 -0
  198. package/dist/wake-slider.d.ts +15 -0
  199. package/dist/wake-slider.js +174 -0
  200. package/package.json +122 -253
  201. package/src/styles/code-block.css +4 -0
  202. package/src/styles/globals.css +5 -0
  203. package/src/styles/motion-controls.css +10 -0
  204. package/src/styles/page-scale.css +27 -0
  205. package/src/styles/styles.css +4 -2
  206. package/dist/types/src/appearance/index.d.ts +0 -2
  207. package/dist/types/src/appearance/theme.d.ts +0 -71
  208. package/dist/types/src/components/accordion/accordion.d.ts +0 -23
  209. package/dist/types/src/components/ambient/index.d.ts +0 -1
  210. package/dist/types/src/components/breadcrumb/breadcrumb.d.ts +0 -19
  211. package/dist/types/src/components/button/button-styles.d.ts +0 -12
  212. package/dist/types/src/components/button/button.d.ts +0 -32
  213. package/dist/types/src/components/button/icon-button.d.ts +0 -10
  214. package/dist/types/src/components/button/pending-spinner.d.ts +0 -5
  215. package/dist/types/src/components/button/use-pending-indicator.d.ts +0 -2
  216. package/dist/types/src/components/chip/chip.d.ts +0 -10
  217. package/dist/types/src/components/code-block/code-block.d.ts +0 -13
  218. package/dist/types/src/components/combo-box/combo-box.d.ts +0 -9
  219. package/dist/types/src/components/command/command.d.ts +0 -18
  220. package/dist/types/src/components/compact-date-picker/calendar-month.d.ts +0 -25
  221. package/dist/types/src/components/compact-date-picker/compact-date-picker.d.ts +0 -30
  222. package/dist/types/src/components/compact-time-picker/compact-time-picker.d.ts +0 -29
  223. package/dist/types/src/components/compact-time-picker/time-value.d.ts +0 -18
  224. package/dist/types/src/components/content-unavailable-view/content-unavailable-view.d.ts +0 -12
  225. package/dist/types/src/components/content-view/content-view.d.ts +0 -51
  226. package/dist/types/src/components/content-view/index.d.ts +0 -1
  227. package/dist/types/src/components/context-menu/conceal-menu-source.d.ts +0 -2
  228. package/dist/types/src/components/context-menu/context-menu-host.d.ts +0 -2
  229. package/dist/types/src/components/context-menu/context-menu-store.d.ts +0 -62
  230. package/dist/types/src/components/context-menu/menu-navigation.d.ts +0 -6
  231. package/dist/types/src/components/context-menu/menu-position.d.ts +0 -21
  232. package/dist/types/src/components/context-menu/menu-reveal.d.ts +0 -26
  233. package/dist/types/src/components/context-menu/use-context-menu.d.ts +0 -14
  234. package/dist/types/src/components/conversation/conversation.d.ts +0 -48
  235. package/dist/types/src/components/conversation/index.d.ts +0 -1
  236. package/dist/types/src/components/date-picker/date-picker.d.ts +0 -19
  237. package/dist/types/src/components/date-picker/date-value.d.ts +0 -2
  238. package/dist/types/src/components/dialog/dialog-host.d.ts +0 -6
  239. package/dist/types/src/components/dialog/dialog-store.d.ts +0 -23
  240. package/dist/types/src/components/dialog/dialog.d.ts +0 -33
  241. package/dist/types/src/components/dialog/index.d.ts +0 -1
  242. package/dist/types/src/components/disclosure-group/disclosure-group.d.ts +0 -18
  243. package/dist/types/src/components/divider/divider.d.ts +0 -9
  244. package/dist/types/src/components/inline-disclosure/inline-disclosure.d.ts +0 -15
  245. package/dist/types/src/components/keyboard-shortcut/keyboard-shortcut.d.ts +0 -8
  246. package/dist/types/src/components/labeled-content/labeled-content.d.ts +0 -22
  247. package/dist/types/src/components/locale-switcher/index.d.ts +0 -1
  248. package/dist/types/src/components/locale-switcher/locale-switcher.d.ts +0 -13
  249. package/dist/types/src/components/menu/menu.d.ts +0 -16
  250. package/dist/types/src/components/morph/index.d.ts +0 -2
  251. package/dist/types/src/components/morph/morph.d.ts +0 -32
  252. package/dist/types/src/components/morph/use-morph-disclosure.d.ts +0 -13
  253. package/dist/types/src/components/one-time-code/one-time-code.d.ts +0 -26
  254. package/dist/types/src/components/picker/picker-trigger.d.ts +0 -3
  255. package/dist/types/src/components/picker/picker.d.ts +0 -46
  256. package/dist/types/src/components/popover/anchored-surface.d.ts +0 -17
  257. package/dist/types/src/components/popover/index.d.ts +0 -41
  258. package/dist/types/src/components/popover/popover-content.d.ts +0 -38
  259. package/dist/types/src/components/popover/popover-root.d.ts +0 -22
  260. package/dist/types/src/components/popover/popover-trigger.d.ts +0 -23
  261. package/dist/types/src/components/profile-image/profile-image.d.ts +0 -9
  262. package/dist/types/src/components/progress-view/progress-view.d.ts +0 -13
  263. package/dist/types/src/components/progress-view/use-liquid-progress.d.ts +0 -3
  264. package/dist/types/src/components/radio-group/radio-group.d.ts +0 -20
  265. package/dist/types/src/components/search-field/expanding-search-field.d.ts +0 -5
  266. package/dist/types/src/components/search-field/search-field.d.ts +0 -9
  267. package/dist/types/src/components/search-list/search-list.d.ts +0 -22
  268. package/dist/types/src/components/section/section.d.ts +0 -18
  269. package/dist/types/src/components/secure-field/secure-field.d.ts +0 -4
  270. package/dist/types/src/components/segmented-control/segmented-control.d.ts +0 -25
  271. package/dist/types/src/components/sheet/modal-environment.d.ts +0 -2
  272. package/dist/types/src/components/sheet/sheet-portal.d.ts +0 -5
  273. package/dist/types/src/components/sheet/sheet.d.ts +0 -26
  274. package/dist/types/src/components/sheet/use-sheet-focus.d.ts +0 -3
  275. package/dist/types/src/components/sidebar/sidebar.d.ts +0 -24
  276. package/dist/types/src/components/skeleton/skeleton.d.ts +0 -9
  277. package/dist/types/src/components/slider/slider.d.ts +0 -17
  278. package/dist/types/src/components/slosh-slider/liquid-step.d.ts +0 -6
  279. package/dist/types/src/components/slosh-slider/slosh-slider.d.ts +0 -21
  280. package/dist/types/src/components/stat-tile/index.d.ts +0 -1
  281. package/dist/types/src/components/stat-tile/stat-tile.d.ts +0 -20
  282. package/dist/types/src/components/status-indicator/status-indicator.d.ts +0 -17
  283. package/dist/types/src/components/stepper/rolling-digit.d.ts +0 -11
  284. package/dist/types/src/components/stepper/stepper.d.ts +0 -22
  285. package/dist/types/src/components/swatch-picker/swatch-picker.d.ts +0 -22
  286. package/dist/types/src/components/tab-bar/tab-bar.d.ts +0 -43
  287. package/dist/types/src/components/tab-view/tab-view.d.ts +0 -27
  288. package/dist/types/src/components/text-editor/text-editor.d.ts +0 -9
  289. package/dist/types/src/components/text-field/text-field.d.ts +0 -33
  290. package/dist/types/src/components/toast/toast-store.d.ts +0 -52
  291. package/dist/types/src/components/toggle/toggle.d.ts +0 -22
  292. package/dist/types/src/components/tooltip/tooltip-host.d.ts +0 -7
  293. package/dist/types/src/components/view-controller/index.d.ts +0 -1
  294. package/dist/types/src/components/view-controller/view-controller.d.ts +0 -21
  295. package/dist/types/src/components/wake-slider/wake-slider.d.ts +0 -15
  296. package/dist/types/src/hooks/scroll/minimize-decision.d.ts +0 -2
  297. package/dist/types/src/hooks/use-anchored-disclosure.d.ts +0 -9
  298. package/dist/types/src/hooks/use-floating-dismiss.d.ts +0 -3
  299. package/dist/types/src/hooks/viewport/types.d.ts +0 -19
  300. package/dist/types/src/hooks/viewport/viewport-metrics.d.ts +0 -3
  301. package/dist/types/src/icons/icons.d.ts +0 -616
  302. package/dist/types/src/index.d.ts +0 -73
  303. package/dist/types/src/lib/class-names.d.ts +0 -2
  304. package/dist/types/src/lib/date.d.ts +0 -50
  305. package/dist/types/src/lib/floating-layers.d.ts +0 -8
  306. package/dist/types/src/lib/range-value.d.ts +0 -4
  307. package/dist/types/src/machines/popover.machine.d.ts +0 -30
  308. package/dist/types/src/motion/transitions.d.ts +0 -170
  309. package/src/appearance/index.ts +0 -2
  310. package/src/appearance/platform.tsx +0 -102
  311. package/src/appearance/theme.tsx +0 -467
  312. package/src/components/accordion/accordion.tsx +0 -70
  313. package/src/components/ambient/ambient.tsx +0 -35
  314. package/src/components/ambient/index.ts +0 -1
  315. package/src/components/aspect-ratio/aspect-ratio.tsx +0 -27
  316. package/src/components/breadcrumb/breadcrumb.tsx +0 -73
  317. package/src/components/button/button-styles.ts +0 -49
  318. package/src/components/button/button.tsx +0 -107
  319. package/src/components/button/icon-button.tsx +0 -33
  320. package/src/components/button/pending-spinner.tsx +0 -14
  321. package/src/components/button/use-pending-indicator.ts +0 -22
  322. package/src/components/chip/chip.tsx +0 -45
  323. package/src/components/code-block/code-block.tsx +0 -48
  324. package/src/components/combo-box/combo-box.tsx +0 -13
  325. package/src/components/command/command.tsx +0 -149
  326. package/src/components/compact-date-picker/calendar-month.ts +0 -109
  327. package/src/components/compact-date-picker/compact-date-picker.tsx +0 -337
  328. package/src/components/compact-time-picker/compact-time-picker.tsx +0 -321
  329. package/src/components/compact-time-picker/time-value.ts +0 -58
  330. package/src/components/content-unavailable-view/content-unavailable-view.tsx +0 -78
  331. package/src/components/content-view/content-view.tsx +0 -215
  332. package/src/components/content-view/index.ts +0 -1
  333. package/src/components/context-menu/conceal-menu-source.ts +0 -30
  334. package/src/components/context-menu/context-menu-host.tsx +0 -459
  335. package/src/components/context-menu/context-menu-store.ts +0 -167
  336. package/src/components/context-menu/menu-navigation.ts +0 -36
  337. package/src/components/context-menu/menu-position.ts +0 -38
  338. package/src/components/context-menu/menu-reveal.ts +0 -42
  339. package/src/components/context-menu/use-context-menu.ts +0 -73
  340. package/src/components/conversation/conversation.tsx +0 -309
  341. package/src/components/conversation/index.ts +0 -1
  342. package/src/components/date-picker/date-picker.tsx +0 -106
  343. package/src/components/date-picker/date-value.ts +0 -22
  344. package/src/components/dialog/dialog-host.tsx +0 -119
  345. package/src/components/dialog/dialog-store.ts +0 -66
  346. package/src/components/dialog/dialog.tsx +0 -211
  347. package/src/components/dialog/index.ts +0 -1
  348. package/src/components/disclosure-group/disclosure-group.tsx +0 -108
  349. package/src/components/divider/divider.tsx +0 -33
  350. package/src/components/inline-disclosure/inline-disclosure.tsx +0 -53
  351. package/src/components/keyboard-shortcut/keyboard-shortcut.tsx +0 -32
  352. package/src/components/labeled-content/labeled-content.tsx +0 -84
  353. package/src/components/locale-switcher/index.ts +0 -1
  354. package/src/components/locale-switcher/locale-switcher.tsx +0 -310
  355. package/src/components/menu/menu.tsx +0 -85
  356. package/src/components/morph/index.ts +0 -2
  357. package/src/components/morph/morph.tsx +0 -258
  358. package/src/components/morph/use-morph-disclosure.ts +0 -27
  359. package/src/components/one-time-code/one-time-code.tsx +0 -234
  360. package/src/components/picker/picker-trigger.ts +0 -22
  361. package/src/components/picker/picker.tsx +0 -404
  362. package/src/components/popover/anchored-surface.tsx +0 -264
  363. package/src/components/popover/index.ts +0 -50
  364. package/src/components/popover/popover-content.tsx +0 -374
  365. package/src/components/popover/popover-root.tsx +0 -97
  366. package/src/components/popover/popover-trigger.tsx +0 -71
  367. package/src/components/profile-image/profile-image.tsx +0 -96
  368. package/src/components/progress-view/progress-view.tsx +0 -72
  369. package/src/components/progress-view/use-liquid-progress.ts +0 -43
  370. package/src/components/radio-group/radio-group.tsx +0 -86
  371. package/src/components/search-field/expanding-search-field.tsx +0 -197
  372. package/src/components/search-field/search-field.tsx +0 -66
  373. package/src/components/search-list/search-list.tsx +0 -276
  374. package/src/components/section/section.tsx +0 -75
  375. package/src/components/secure-field/secure-field.tsx +0 -8
  376. package/src/components/segmented-control/segmented-control.tsx +0 -157
  377. package/src/components/sheet/modal-environment.ts +0 -82
  378. package/src/components/sheet/sheet-portal.tsx +0 -62
  379. package/src/components/sheet/sheet.tsx +0 -165
  380. package/src/components/sheet/use-sheet-focus.ts +0 -109
  381. package/src/components/sidebar/sidebar.tsx +0 -102
  382. package/src/components/skeleton/skeleton.tsx +0 -38
  383. package/src/components/slider/slider.tsx +0 -134
  384. package/src/components/slosh-slider/liquid-step.ts +0 -43
  385. package/src/components/slosh-slider/slosh-slider.tsx +0 -294
  386. package/src/components/stat-tile/index.ts +0 -1
  387. package/src/components/stat-tile/stat-tile.tsx +0 -90
  388. package/src/components/status-indicator/status-indicator.tsx +0 -54
  389. package/src/components/stepper/rolling-digit.tsx +0 -91
  390. package/src/components/stepper/stepper.tsx +0 -136
  391. package/src/components/swatch-picker/swatch-picker.tsx +0 -138
  392. package/src/components/tab-bar/tab-bar.tsx +0 -182
  393. package/src/components/tab-view/tab-view.tsx +0 -155
  394. package/src/components/table/table.tsx +0 -151
  395. package/src/components/text-editor/text-editor.tsx +0 -42
  396. package/src/components/text-field/text-field.tsx +0 -200
  397. package/src/components/toast/toast-store.ts +0 -164
  398. package/src/components/toast/toaster.tsx +0 -407
  399. package/src/components/toggle/toggle.tsx +0 -320
  400. package/src/components/tooltip/tooltip-host.tsx +0 -178
  401. package/src/components/view-controller/index.ts +0 -1
  402. package/src/components/view-controller/view-controller.tsx +0 -75
  403. package/src/components/wake-slider/wake-slider.tsx +0 -260
  404. package/src/hooks/use-anchored-disclosure.ts +0 -23
  405. package/src/hooks/use-anchored-placement.ts +0 -40
  406. package/src/hooks/use-dismiss.ts +0 -44
  407. package/src/hooks/use-floating-dismiss.ts +0 -30
  408. package/src/hooks/use-media-query.ts +0 -94
  409. package/src/hooks/use-minimize-on-scroll.ts +0 -77
  410. package/src/hooks/viewport/types.ts +0 -19
  411. package/src/hooks/viewport/viewport-metrics.ts +0 -19
  412. package/src/icons/icons.tsx +0 -458
  413. package/src/index.ts +0 -107
  414. package/src/lib/anchored-placement.ts +0 -91
  415. package/src/lib/class-names.ts +0 -21
  416. package/src/lib/clipboard.ts +0 -15
  417. package/src/lib/date.ts +0 -86
  418. package/src/lib/floating-layers.ts +0 -53
  419. package/src/lib/haptics.ts +0 -23
  420. package/src/lib/language.ts +0 -16
  421. package/src/lib/range-value.ts +0 -38
  422. package/src/lib/screen-edges.ts +0 -44
  423. package/src/lib/shapes.ts +0 -59
  424. package/src/machines/popover.machine.ts +0 -51
  425. package/src/motion/transitions.ts +0 -97
  426. package/src/tokens.ts +0 -1
  427. /package/dist/{types/src/tokens.d.ts → tokens.js} +0 -0
@@ -1,138 +0,0 @@
1
- import { motion } from "motion/react";
2
- import { useId } from "react";
3
- import { CheckIcon } from "../../icons/icons";
4
- import { cn } from "../../lib/class-names";
5
- import { haptic } from "../../lib/haptics";
6
- import { spring } from "../../motion/transitions";
7
-
8
- export interface SwatchPickerOption<T extends string> {
9
- value: T;
10
- label: string;
11
- /** Swatch background color. */
12
- color: string;
13
- /** Color of the selected checkmark. */
14
- ink: string;
15
- }
16
-
17
- export type SwatchPickerSize = "sm" | "md" | "lg";
18
-
19
- const swatchSizes: Record<SwatchPickerSize, string> = {
20
- sm: "size-6",
21
- md: "size-8",
22
- lg: "size-10",
23
- };
24
- const checkSizes: Record<SwatchPickerSize, number> = {
25
- sm: 13,
26
- md: 16,
27
- lg: 19,
28
- };
29
- const captionText: Record<SwatchPickerSize, string> = {
30
- sm: "text-caption2",
31
- md: "text-caption2",
32
- lg: "text-caption",
33
- };
34
- const fieldsetGaps: Record<SwatchPickerSize, string> = {
35
- sm: "gap-2",
36
- md: "gap-3",
37
- lg: "gap-4",
38
- };
39
- const labelGaps: Record<SwatchPickerSize, string> = {
40
- sm: "gap-1",
41
- md: "gap-1.5",
42
- lg: "gap-2",
43
- };
44
-
45
- export interface SwatchPickerProps<T extends string> {
46
- value: T;
47
- options: ReadonlyArray<SwatchPickerOption<T>>;
48
- onChange: (value: T) => void;
49
- /** Accessible name for the group. */
50
- label: string;
51
- /** Custom classes for the swatch container. */
52
- className?: string;
53
- /** Swatch diameter, check icon and caption scale. @default "md" */
54
- size?: SwatchPickerSize;
55
- }
56
-
57
- /** Colour swatches with a check on the chosen one. */
58
- export function SwatchPicker<T extends string>({
59
- value,
60
- options,
61
- onChange,
62
- label,
63
- className,
64
- size = "md",
65
- }: SwatchPickerProps<T>) {
66
- const name = useId();
67
- return (
68
- <fieldset className={cn("flex flex-wrap", fieldsetGaps[size], className)}>
69
- <legend className="sr-only">{label}</legend>
70
- {options.map((option) => {
71
- const selected = option.value === value;
72
- return (
73
- <label
74
- key={option.value}
75
- className={cn(
76
- "group flex cursor-pointer flex-col items-center",
77
- labelGaps[size],
78
- )}
79
- >
80
- <input
81
- type="radio"
82
- name={name}
83
- value={option.value}
84
- checked={selected}
85
- onChange={() => {
86
- haptic("selection");
87
- onChange(option.value);
88
- }}
89
- className="peer sr-only"
90
- />
91
- <span
92
- className={cn(
93
- "ring-offset-elevated duration-fast peer-focus-visible:ring-accent flex items-center justify-center rounded-full ring-offset-1 transition-[box-shadow,transform] group-active:scale-95 peer-focus-visible:ring-2",
94
- swatchSizes[size],
95
- selected
96
- ? "ring-label/70 ring-[1.5px]"
97
- : "group-hover:ring-separator ring-0 group-hover:ring-[1.5px]",
98
- )}
99
- style={{
100
- background: option.color,
101
- }}
102
- >
103
- {selected && (
104
- <motion.span
105
- initial={{
106
- scale: 0.4,
107
- opacity: 0,
108
- }}
109
- animate={{
110
- scale: 1,
111
- opacity: 1,
112
- }}
113
- transition={spring.bouncy}
114
- >
115
- <CheckIcon
116
- size={checkSizes[size]}
117
- strokeWidth={2.6}
118
- style={{
119
- color: option.ink,
120
- }}
121
- />
122
- </motion.span>
123
- )}
124
- </span>
125
- <span
126
- className={cn(
127
- captionText[size],
128
- selected ? "text-label font-semibold" : "text-label-tertiary",
129
- )}
130
- >
131
- {option.label}
132
- </span>
133
- </label>
134
- );
135
- })}
136
- </fieldset>
137
- );
138
- }
@@ -1,182 +0,0 @@
1
- import { motion, useReducedMotion } from "motion/react";
2
- import { Fragment, type ReactNode, useId } from "react";
3
- import { useMinimizeOnScroll } from "../../hooks/use-minimize-on-scroll";
4
- import { SearchIcon } from "../../icons/icons";
5
- import { cn } from "../../lib/class-names";
6
- import { spring } from "../../motion/transitions";
7
-
8
- export interface TabBarTab<Id extends string = string> {
9
- id: Id;
10
- label: string;
11
- icon: ReactNode;
12
- }
13
-
14
- /** What a tab's link receives; spread it onto the router's own link. */
15
- export interface TabBarLinkProps {
16
- className: string;
17
- "aria-current": "page" | undefined;
18
- onClick: () => void;
19
- children: ReactNode;
20
- }
21
-
22
- export type TabBarMinimizeBehavior = "platform" | "scroll" | "never";
23
- export type TabBarSize = "sm" | "md" | "lg";
24
-
25
- const tabHeights: Record<TabBarSize, string> = {
26
- sm: "h-9",
27
- md: "h-11",
28
- lg: "h-13",
29
- };
30
- const tabMinimizedWidths: Record<TabBarSize, string> = {
31
- sm: "w-9",
32
- md: "w-11",
33
- lg: "w-13",
34
- };
35
- const tabText: Record<TabBarSize, string> = {
36
- sm: "text-caption",
37
- md: "text-caption2",
38
- lg: "text-subheadline",
39
- };
40
- const searchButtonSizes: Record<TabBarSize, string> = {
41
- sm: "size-10",
42
- md: "size-12",
43
- lg: "size-14",
44
- };
45
- const searchIconSizes: Record<TabBarSize, number> = {
46
- sm: 17,
47
- md: 19,
48
- lg: 21,
49
- };
50
-
51
- export interface TabBarProps<Tab extends TabBarTab> {
52
- /** `platform` follows the platform, `scroll` always minimizes, `never` stays expanded. @default "platform" */
53
- minimizeBehavior?: TabBarMinimizeBehavior;
54
- tabs: readonly Tab[];
55
- /** Active tab ID, or null for a destination outside the bar. */
56
- active: Tab["id"] | null;
57
- /** Renders your router's link with the supplied appearance and accessibility props. */
58
- renderLink: (tab: Tab, props: TabBarLinkProps) => ReactNode;
59
- search?: { label: string; onPress: () => void };
60
- /** Accessible name for the navigation. */
61
- label: string;
62
- /** Tab height, label text, minimized width and search button diameter. @default "md" */
63
- size?: TabBarSize;
64
- className?: string;
65
- }
66
-
67
- /**
68
- * The app's main places a thumb's reach away, drawn as iOS 26 draws them: a
69
- * floating glass capsule of tabs, with Search as its own round button at the
70
- * trailing end. Scrolling down through content shrinks the capsule to the
71
- * current tab; scrolling back up, or a tap, restores it. Android shares the
72
- * glass, but its bar stays full size, as Android's own bars do.
73
- *
74
- * Links stay the app's own (`renderLink`), so the bar works with any router.
75
- */
76
- export function TabBar<Tab extends TabBarTab>({
77
- tabs,
78
- active,
79
- renderLink,
80
- search,
81
- label,
82
- className,
83
- size = "md",
84
- minimizeBehavior = "platform",
85
- }: TabBarProps<Tab>) {
86
- // Scopes the sliding selection to this bar, so two bars on one
87
- // screen (a docs page, a split view) never trade their highlight.
88
- const selectionId = `${useId()}-tab-selection`;
89
- const reducedMotion = useReducedMotion();
90
- const [scrolledAway, setScrolledAway] = useMinimizeOnScroll();
91
- // Platform behavior keeps Android expanded; apps can opt into scroll minimization.
92
- const minimized =
93
- scrolledAway &&
94
- active !== null &&
95
- minimizeBehavior !== "never" &&
96
- (minimizeBehavior === "scroll" || !onAndroid());
97
- return (
98
- <nav
99
- aria-label={label}
100
- className={cn(
101
- "fixed inset-x-4 bottom-[max(14px,env(safe-area-inset-bottom))] z-30 flex items-center gap-3",
102
- className,
103
- )}
104
- >
105
- <motion.div
106
- layout={!reducedMotion}
107
- transition={reducedMotion ? { duration: 0 } : spring.smooth}
108
- // A tap on the shrunken capsule brings every tab back.
109
- onClickCapture={(event) => {
110
- if (!minimized) return;
111
- event.preventDefault();
112
- event.stopPropagation();
113
- setScrolledAway(false);
114
- }}
115
- className={cn(
116
- "glass flex min-w-0 items-center rounded-full p-0.5",
117
- minimized ? "grow-0" : "grow",
118
- )}
119
- >
120
- {tabs.map((tab) => {
121
- const current = tab.id === active;
122
- if (minimized && !current) return null;
123
- return (
124
- <Fragment key={tab.id}>
125
- {renderLink(tab, {
126
- "aria-current": current ? "page" : undefined,
127
- // Switching tabs is silent, as on Apple and Android: no haptic.
128
- onClick: () => {},
129
- className: cn(
130
- "duration-fast relative isolate flex min-w-0 flex-col items-center justify-center gap-0.5 rounded-full font-semibold tracking-[0.01em] no-underline transition-[color,transform] active:scale-[0.94]",
131
- tabHeights[size],
132
- tabText[size],
133
- minimized ? tabMinimizedWidths[size] : "flex-1 px-1",
134
- current ? "text-accent-text" : "text-label-secondary",
135
- ),
136
- children: (
137
- <>
138
- {current && (
139
- <motion.span
140
- layoutId={selectionId}
141
- className="glass-lens absolute inset-0 -z-10 rounded-full"
142
- transition={
143
- reducedMotion ? { duration: 0 } : spring.snappy
144
- }
145
- />
146
- )}
147
- {tab.icon}
148
- <span
149
- className={minimized ? "sr-only" : "max-w-full truncate"}
150
- >
151
- {tab.label}
152
- </span>
153
- </>
154
- ),
155
- })}
156
- </Fragment>
157
- );
158
- })}
159
- </motion.div>
160
- {search && (
161
- <button
162
- type="button"
163
- aria-label={search.label}
164
- onClick={search.onPress}
165
- className={cn(
166
- "glass text-label duration-fast ms-auto flex shrink-0 items-center justify-center rounded-full transition-transform active:scale-[0.92]",
167
- searchButtonSizes[size],
168
- )}
169
- >
170
- <SearchIcon size={searchIconSizes[size]} strokeWidth={2} />
171
- </button>
172
- )}
173
- </nav>
174
- );
175
- }
176
-
177
- function onAndroid() {
178
- return (
179
- typeof document !== "undefined" &&
180
- document.documentElement.dataset.os === "android"
181
- );
182
- }
@@ -1,155 +0,0 @@
1
- import { useId, useRef, useState, type ReactNode } from "react";
2
- import { cn } from "../../lib/class-names";
3
-
4
- export type TabViewAlign = "start" | "center";
5
- export type TabViewSize = "sm" | "md" | "lg";
6
-
7
- const containerGaps: Record<TabViewSize, string> = {
8
- sm: "gap-4",
9
- md: "gap-5",
10
- lg: "gap-6",
11
- };
12
- const tablistClasses: Record<TabViewSize, string> = {
13
- sm: "inline-flex h-7 w-fit max-w-full items-center gap-4 p-[2px]",
14
- md: "inline-flex h-8 w-fit max-w-full items-center gap-5 p-[3px]",
15
- lg: "inline-flex h-10 w-fit max-w-full items-center gap-6 p-[4px]",
16
- };
17
- const tabText: Record<TabViewSize, string> = {
18
- sm: "text-footnote",
19
- md: "text-subheadline",
20
- lg: "text-body",
21
- };
22
- const underlineOffset: Record<TabViewSize, string> = {
23
- sm: "after:bottom-[-4px] after:h-0.5",
24
- md: "after:bottom-[-5px] after:h-0.5",
25
- lg: "after:bottom-[-6px] after:h-1",
26
- };
27
-
28
- export interface TabViewProps<Value extends string> {
29
- /** Available tabs, in keyboard navigation order. */
30
- options: readonly { value: Value; label: string; disabled?: boolean }[];
31
- /** Initial selection when value is not controlled. */
32
- defaultValue: Value;
33
- /** Controlled selection; omit to keep selection inside TabView. */
34
- value?: Value;
35
- onValueChange?: (value: Value) => void;
36
- /** Tab alignment: `start` or `center`. @default "center" */
37
- align?: TabViewAlign;
38
- /** Accessible name for the tab list. */
39
- label: string;
40
- /** Renders the selected tab's panel. */
41
- children: (value: Value) => ReactNode;
42
- /** Tablist height, tab text scale and underline offset. @default "md" */
43
- size?: TabViewSize;
44
- className?: string;
45
- }
46
-
47
- /** Content tabs with native buttons, roving focus and automatic keyboard activation. */
48
- export function TabView<Value extends string>({
49
- options,
50
- defaultValue,
51
- value: controlledValue,
52
- onValueChange,
53
- align = "center",
54
- label,
55
- children,
56
- size = "md",
57
- className,
58
- }: TabViewProps<Value>) {
59
- const id = useId();
60
- const buttons = useRef<(HTMLButtonElement | null)[]>([]);
61
- const [selected, setSelected] = useState(defaultValue);
62
- const current = controlledValue ?? selected;
63
- function select(next: Value) {
64
- if (controlledValue === undefined) setSelected(next);
65
- onValueChange?.(next);
66
- }
67
- const enabled = options.filter((option) => !option.disabled);
68
- const value = enabled.some((option) => option.value === current)
69
- ? current
70
- : enabled[0]?.value;
71
- if (value === undefined) return null;
72
-
73
- return (
74
- <div className={cn("flex w-full flex-col", containerGaps[size], className)}>
75
- <div
76
- role="tablist"
77
- aria-label={label}
78
- className={cn(
79
- tablistClasses[size],
80
- align === "start" ? "self-start" : "mx-auto justify-center",
81
- )}
82
- >
83
- {options.map((option, index) => (
84
- <button
85
- key={option.value}
86
- type="button"
87
- role="tab"
88
- id={`${id}-tab-${index}`}
89
- aria-controls={`${id}-panel-${index}`}
90
- aria-selected={option.value === value}
91
- aria-disabled={option.disabled || undefined}
92
- disabled={option.disabled}
93
- tabIndex={option.value === value ? 0 : -1}
94
- ref={(element) => {
95
- buttons.current[index] = element;
96
- }}
97
- onClick={() => select(option.value)}
98
- onKeyDown={(event) => {
99
- const rtl =
100
- getComputedStyle(event.currentTarget).direction === "rtl";
101
- let next: number;
102
- let step: number;
103
- if (event.key === "Home") {
104
- next = -1;
105
- step = 1;
106
- } else if (event.key === "End") {
107
- next = options.length;
108
- step = -1;
109
- } else if (event.key === "ArrowRight") {
110
- step = rtl ? -1 : 1;
111
- next = index;
112
- } else if (event.key === "ArrowLeft") {
113
- step = rtl ? 1 : -1;
114
- next = index;
115
- } else return;
116
- event.preventDefault();
117
- for (let offset = 0; offset < options.length; offset++) {
118
- next = (next + step + options.length) % options.length;
119
- const option = options[next];
120
- if (!option || option.disabled) continue;
121
- select(option.value);
122
- buttons.current[next]?.focus();
123
- break;
124
- }
125
- }}
126
- className={cn(
127
- "relative inline-flex h-[calc(100%-1px)] shrink-0 items-center justify-center border border-transparent p-0 font-medium whitespace-nowrap",
128
- tabText[size],
129
- "focus-visible:outline-2 focus-visible:outline-offset-2",
130
- "after:absolute after:inset-x-0 after:bg-current",
131
- underlineOffset[size],
132
- option.value === value
133
- ? "after:opacity-100"
134
- : "opacity-60 after:opacity-0 hover:opacity-100",
135
- )}
136
- >
137
- {option.label}
138
- </button>
139
- ))}
140
- </div>
141
- {options.map((option, index) => (
142
- <div
143
- key={option.value}
144
- role="tabpanel"
145
- id={`${id}-panel-${index}`}
146
- aria-labelledby={`${id}-tab-${index}`}
147
- hidden={option.value !== value}
148
- className="w-full outline-offset-4"
149
- >
150
- {option.value === value && children(option.value)}
151
- </div>
152
- ))}
153
- </div>
154
- );
155
- }
@@ -1,151 +0,0 @@
1
- import { createContext, useContext } from "react";
2
- import type * as React from "react";
3
-
4
- import { cn } from "../../lib/class-names";
5
-
6
- export type TableSize = "sm" | "md" | "lg";
7
-
8
- const tableText: Record<TableSize, string> = {
9
- sm: "text-footnote text-label",
10
- md: "text-subheadline text-label",
11
- lg: "text-body text-label",
12
- };
13
- const headCell: Record<TableSize, string> = {
14
- sm: "h-8 px-2 text-start align-middle text-caption2 font-semibold whitespace-nowrap",
15
- md: "h-10 px-3 text-start align-middle text-footnote font-semibold whitespace-nowrap",
16
- lg: "h-12 px-4 text-start align-middle text-subheadline font-semibold whitespace-nowrap",
17
- };
18
- const bodyCell: Record<TableSize, string> = {
19
- sm: "px-2 py-1.5 align-middle whitespace-nowrap",
20
- md: "px-3 py-2.5 align-middle whitespace-nowrap",
21
- lg: "px-4 py-3.5 align-middle whitespace-nowrap",
22
- };
23
- const captionText: Record<TableSize, string> = {
24
- sm: "mt-3 text-caption2 text-label-secondary",
25
- md: "mt-4 text-footnote text-label-secondary",
26
- lg: "mt-5 text-subheadline text-label-secondary",
27
- };
28
-
29
- const TableSizeContext = createContext<TableSize>("md");
30
- const useTableSize = () => useContext(TableSizeContext);
31
-
32
- function Table({
33
- className,
34
- size = "md",
35
- ...props
36
- }: React.ComponentProps<"table"> & {
37
- /** Row height, cell padding and text scale. @default "md" */ size?: TableSize;
38
- }) {
39
- return (
40
- <div
41
- data-slot="table-container"
42
- className="relative w-full overflow-x-auto"
43
- >
44
- <TableSizeContext value={size}>
45
- <table
46
- data-slot="table"
47
- className={cn(tableText[size], className)}
48
- {...props}
49
- />
50
- </TableSizeContext>
51
- </div>
52
- );
53
- }
54
-
55
- function TableHeader({ className, ...props }: React.ComponentProps<"thead">) {
56
- return (
57
- <thead
58
- data-slot="table-header"
59
- className={cn("[&_tr]:border-separator [&_tr]:border-b", className)}
60
- {...props}
61
- />
62
- );
63
- }
64
-
65
- function TableBody({ className, ...props }: React.ComponentProps<"tbody">) {
66
- return (
67
- <tbody
68
- data-slot="table-body"
69
- className={cn("[&_tr:last-child]:border-0", className)}
70
- {...props}
71
- />
72
- );
73
- }
74
-
75
- function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) {
76
- return (
77
- <tfoot
78
- data-slot="table-footer"
79
- className={cn(
80
- "border-separator bg-fill/50 border-t font-semibold [&>tr]:last:border-b-0",
81
- className,
82
- )}
83
- {...props}
84
- />
85
- );
86
- }
87
-
88
- function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
89
- return (
90
- <tr
91
- data-slot="table-row"
92
- className={cn(
93
- "border-separator duration-fast hover:bg-fill/50 has-aria-expanded:bg-fill/50 border-b transition-colors",
94
- "data-[state=selected]:bg-accent-soft/60",
95
- className,
96
- )}
97
- {...props}
98
- />
99
- );
100
- }
101
-
102
- function TableHead({ className, ...props }: React.ComponentProps<"th">) {
103
- const size = useTableSize();
104
- return (
105
- <th
106
- data-slot="table-head"
107
- className={cn(
108
- headCell[size],
109
- "text-label-secondary has-[[role=checkbox]]:pe-0",
110
- className,
111
- )}
112
- {...props}
113
- />
114
- );
115
- }
116
-
117
- function TableCell({ className, ...props }: React.ComponentProps<"td">) {
118
- const size = useTableSize();
119
- return (
120
- <td
121
- data-slot="table-cell"
122
- className={cn(bodyCell[size], "has-[[role=checkbox]]:pe-0", className)}
123
- {...props}
124
- />
125
- );
126
- }
127
-
128
- function TableCaption({
129
- className,
130
- ...props
131
- }: React.ComponentProps<"caption">) {
132
- const size = useTableSize();
133
- return (
134
- <caption
135
- data-slot="table-caption"
136
- className={cn(captionText[size], className)}
137
- {...props}
138
- />
139
- );
140
- }
141
-
142
- export {
143
- Table,
144
- TableBody,
145
- TableCaption,
146
- TableCell,
147
- TableFooter,
148
- TableHead,
149
- TableHeader,
150
- TableRow,
151
- };
@@ -1,42 +0,0 @@
1
- import type { ComponentProps } from "react";
2
- import { cn } from "../../lib/class-names";
3
- import { fieldSize, type TextFieldSize } from "../text-field/text-field";
4
-
5
- const minHeights: Record<TextFieldSize, string> = {
6
- xs: "min-h-24",
7
- sm: "min-h-24",
8
- md: "min-h-28",
9
- lg: "min-h-32",
10
- };
11
-
12
- export type TextEditorSize = TextFieldSize;
13
-
14
- export interface TextEditorProps
15
- extends Omit<ComponentProps<"textarea">, "size"> {
16
- /** Field surface scale; matches TextField's xs | sm | md | lg. @default "md" */
17
- size?: TextEditorSize;
18
- }
19
-
20
- /** A multi-line text field that reuses TextField's shared surface treatment. */
21
- export function TextEditor({
22
- className,
23
- size = "md",
24
- ...props
25
- }: TextEditorProps) {
26
- const surface = fieldSize(size);
27
- return (
28
- <textarea
29
- {...props}
30
- className={cn(
31
- "border-separator bg-elevated text-label placeholder:text-label-tertiary w-full min-w-0 resize-y border",
32
- "focus-visible:outline-accent-text focus-visible:outline-2 focus-visible:outline-offset-2",
33
- "aria-invalid:border-danger disabled:cursor-not-allowed disabled:opacity-40",
34
- surface.radius,
35
- surface.padding,
36
- surface.text,
37
- minHeights[size],
38
- className,
39
- )}
40
- />
41
- );
42
- }