@passui/react 0.1.46 → 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 (429) 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 -32
  259. package/dist/types/src/components/popover/popover-fit.d.ts +0 -21
  260. package/dist/types/src/components/popover/popover-root.d.ts +0 -22
  261. package/dist/types/src/components/popover/popover-trigger.d.ts +0 -23
  262. package/dist/types/src/components/profile-image/profile-image.d.ts +0 -9
  263. package/dist/types/src/components/progress-view/progress-view.d.ts +0 -13
  264. package/dist/types/src/components/progress-view/use-liquid-progress.d.ts +0 -3
  265. package/dist/types/src/components/radio-group/radio-group.d.ts +0 -20
  266. package/dist/types/src/components/search-field/expanding-search-field.d.ts +0 -5
  267. package/dist/types/src/components/search-field/search-field.d.ts +0 -9
  268. package/dist/types/src/components/search-list/search-list.d.ts +0 -22
  269. package/dist/types/src/components/section/section.d.ts +0 -18
  270. package/dist/types/src/components/secure-field/secure-field.d.ts +0 -4
  271. package/dist/types/src/components/segmented-control/segmented-control.d.ts +0 -25
  272. package/dist/types/src/components/sheet/modal-environment.d.ts +0 -2
  273. package/dist/types/src/components/sheet/sheet-portal.d.ts +0 -5
  274. package/dist/types/src/components/sheet/sheet.d.ts +0 -26
  275. package/dist/types/src/components/sheet/use-sheet-focus.d.ts +0 -3
  276. package/dist/types/src/components/sidebar/sidebar.d.ts +0 -24
  277. package/dist/types/src/components/skeleton/skeleton.d.ts +0 -9
  278. package/dist/types/src/components/slider/slider.d.ts +0 -17
  279. package/dist/types/src/components/slosh-slider/liquid-step.d.ts +0 -6
  280. package/dist/types/src/components/slosh-slider/slosh-slider.d.ts +0 -21
  281. package/dist/types/src/components/stat-tile/index.d.ts +0 -1
  282. package/dist/types/src/components/stat-tile/stat-tile.d.ts +0 -20
  283. package/dist/types/src/components/status-indicator/status-indicator.d.ts +0 -17
  284. package/dist/types/src/components/stepper/rolling-digit.d.ts +0 -11
  285. package/dist/types/src/components/stepper/stepper.d.ts +0 -22
  286. package/dist/types/src/components/swatch-picker/swatch-picker.d.ts +0 -22
  287. package/dist/types/src/components/tab-bar/tab-bar.d.ts +0 -43
  288. package/dist/types/src/components/tab-view/tab-view.d.ts +0 -27
  289. package/dist/types/src/components/text-editor/text-editor.d.ts +0 -9
  290. package/dist/types/src/components/text-field/text-field.d.ts +0 -33
  291. package/dist/types/src/components/toast/toast-store.d.ts +0 -52
  292. package/dist/types/src/components/toggle/toggle.d.ts +0 -22
  293. package/dist/types/src/components/tooltip/tooltip-host.d.ts +0 -7
  294. package/dist/types/src/components/view-controller/index.d.ts +0 -1
  295. package/dist/types/src/components/view-controller/view-controller.d.ts +0 -21
  296. package/dist/types/src/components/wake-slider/wake-slider.d.ts +0 -15
  297. package/dist/types/src/hooks/scroll/minimize-decision.d.ts +0 -2
  298. package/dist/types/src/hooks/use-anchored-disclosure.d.ts +0 -9
  299. package/dist/types/src/hooks/use-floating-dismiss.d.ts +0 -3
  300. package/dist/types/src/hooks/viewport/types.d.ts +0 -19
  301. package/dist/types/src/hooks/viewport/viewport-metrics.d.ts +0 -3
  302. package/dist/types/src/icons/icons.d.ts +0 -616
  303. package/dist/types/src/index.d.ts +0 -73
  304. package/dist/types/src/lib/class-names.d.ts +0 -2
  305. package/dist/types/src/lib/date.d.ts +0 -50
  306. package/dist/types/src/lib/floating-layers.d.ts +0 -8
  307. package/dist/types/src/lib/range-value.d.ts +0 -4
  308. package/dist/types/src/machines/popover.machine.d.ts +0 -30
  309. package/dist/types/src/motion/transitions.d.ts +0 -170
  310. package/src/appearance/index.ts +0 -2
  311. package/src/appearance/platform.tsx +0 -102
  312. package/src/appearance/theme.tsx +0 -467
  313. package/src/components/accordion/accordion.tsx +0 -70
  314. package/src/components/ambient/ambient.tsx +0 -35
  315. package/src/components/ambient/index.ts +0 -1
  316. package/src/components/aspect-ratio/aspect-ratio.tsx +0 -27
  317. package/src/components/breadcrumb/breadcrumb.tsx +0 -73
  318. package/src/components/button/button-styles.ts +0 -49
  319. package/src/components/button/button.tsx +0 -107
  320. package/src/components/button/icon-button.tsx +0 -33
  321. package/src/components/button/pending-spinner.tsx +0 -14
  322. package/src/components/button/use-pending-indicator.ts +0 -22
  323. package/src/components/chip/chip.tsx +0 -45
  324. package/src/components/code-block/code-block.tsx +0 -48
  325. package/src/components/combo-box/combo-box.tsx +0 -13
  326. package/src/components/command/command.tsx +0 -149
  327. package/src/components/compact-date-picker/calendar-month.ts +0 -109
  328. package/src/components/compact-date-picker/compact-date-picker.tsx +0 -337
  329. package/src/components/compact-time-picker/compact-time-picker.tsx +0 -321
  330. package/src/components/compact-time-picker/time-value.ts +0 -58
  331. package/src/components/content-unavailable-view/content-unavailable-view.tsx +0 -78
  332. package/src/components/content-view/content-view.tsx +0 -215
  333. package/src/components/content-view/index.ts +0 -1
  334. package/src/components/context-menu/conceal-menu-source.ts +0 -30
  335. package/src/components/context-menu/context-menu-host.tsx +0 -459
  336. package/src/components/context-menu/context-menu-store.ts +0 -167
  337. package/src/components/context-menu/menu-navigation.ts +0 -36
  338. package/src/components/context-menu/menu-position.ts +0 -38
  339. package/src/components/context-menu/menu-reveal.ts +0 -42
  340. package/src/components/context-menu/use-context-menu.ts +0 -73
  341. package/src/components/conversation/conversation.tsx +0 -309
  342. package/src/components/conversation/index.ts +0 -1
  343. package/src/components/date-picker/date-picker.tsx +0 -106
  344. package/src/components/date-picker/date-value.ts +0 -22
  345. package/src/components/dialog/dialog-host.tsx +0 -119
  346. package/src/components/dialog/dialog-store.ts +0 -66
  347. package/src/components/dialog/dialog.tsx +0 -211
  348. package/src/components/dialog/index.ts +0 -1
  349. package/src/components/disclosure-group/disclosure-group.tsx +0 -108
  350. package/src/components/divider/divider.tsx +0 -33
  351. package/src/components/inline-disclosure/inline-disclosure.tsx +0 -53
  352. package/src/components/keyboard-shortcut/keyboard-shortcut.tsx +0 -32
  353. package/src/components/labeled-content/labeled-content.tsx +0 -84
  354. package/src/components/locale-switcher/index.ts +0 -1
  355. package/src/components/locale-switcher/locale-switcher.tsx +0 -311
  356. package/src/components/menu/menu.tsx +0 -85
  357. package/src/components/morph/index.ts +0 -2
  358. package/src/components/morph/morph.tsx +0 -258
  359. package/src/components/morph/use-morph-disclosure.ts +0 -27
  360. package/src/components/one-time-code/one-time-code.tsx +0 -234
  361. package/src/components/picker/picker-trigger.ts +0 -22
  362. package/src/components/picker/picker.tsx +0 -404
  363. package/src/components/popover/anchored-surface.tsx +0 -264
  364. package/src/components/popover/index.ts +0 -50
  365. package/src/components/popover/popover-content.tsx +0 -334
  366. package/src/components/popover/popover-fit.ts +0 -74
  367. package/src/components/popover/popover-root.tsx +0 -97
  368. package/src/components/popover/popover-trigger.tsx +0 -71
  369. package/src/components/profile-image/profile-image.tsx +0 -96
  370. package/src/components/progress-view/progress-view.tsx +0 -72
  371. package/src/components/progress-view/use-liquid-progress.ts +0 -43
  372. package/src/components/radio-group/radio-group.tsx +0 -86
  373. package/src/components/search-field/expanding-search-field.tsx +0 -197
  374. package/src/components/search-field/search-field.tsx +0 -66
  375. package/src/components/search-list/search-list.tsx +0 -276
  376. package/src/components/section/section.tsx +0 -75
  377. package/src/components/secure-field/secure-field.tsx +0 -8
  378. package/src/components/segmented-control/segmented-control.tsx +0 -157
  379. package/src/components/sheet/modal-environment.ts +0 -82
  380. package/src/components/sheet/sheet-portal.tsx +0 -62
  381. package/src/components/sheet/sheet.tsx +0 -165
  382. package/src/components/sheet/use-sheet-focus.ts +0 -109
  383. package/src/components/sidebar/sidebar.tsx +0 -102
  384. package/src/components/skeleton/skeleton.tsx +0 -38
  385. package/src/components/slider/slider.tsx +0 -134
  386. package/src/components/slosh-slider/liquid-step.ts +0 -43
  387. package/src/components/slosh-slider/slosh-slider.tsx +0 -294
  388. package/src/components/stat-tile/index.ts +0 -1
  389. package/src/components/stat-tile/stat-tile.tsx +0 -90
  390. package/src/components/status-indicator/status-indicator.tsx +0 -54
  391. package/src/components/stepper/rolling-digit.tsx +0 -91
  392. package/src/components/stepper/stepper.tsx +0 -136
  393. package/src/components/swatch-picker/swatch-picker.tsx +0 -138
  394. package/src/components/tab-bar/tab-bar.tsx +0 -182
  395. package/src/components/tab-view/tab-view.tsx +0 -155
  396. package/src/components/table/table.tsx +0 -151
  397. package/src/components/text-editor/text-editor.tsx +0 -42
  398. package/src/components/text-field/text-field.tsx +0 -200
  399. package/src/components/toast/toast-store.ts +0 -164
  400. package/src/components/toast/toaster.tsx +0 -407
  401. package/src/components/toggle/toggle.tsx +0 -320
  402. package/src/components/tooltip/tooltip-host.tsx +0 -178
  403. package/src/components/view-controller/index.ts +0 -1
  404. package/src/components/view-controller/view-controller.tsx +0 -75
  405. package/src/components/wake-slider/wake-slider.tsx +0 -260
  406. package/src/hooks/use-anchored-disclosure.ts +0 -23
  407. package/src/hooks/use-anchored-placement.ts +0 -40
  408. package/src/hooks/use-dismiss.ts +0 -44
  409. package/src/hooks/use-floating-dismiss.ts +0 -30
  410. package/src/hooks/use-media-query.ts +0 -94
  411. package/src/hooks/use-minimize-on-scroll.ts +0 -77
  412. package/src/hooks/viewport/types.ts +0 -19
  413. package/src/hooks/viewport/viewport-metrics.ts +0 -19
  414. package/src/icons/icons.tsx +0 -458
  415. package/src/index.ts +0 -107
  416. package/src/lib/anchored-placement.ts +0 -91
  417. package/src/lib/class-names.ts +0 -21
  418. package/src/lib/clipboard.ts +0 -15
  419. package/src/lib/date.ts +0 -86
  420. package/src/lib/floating-layers.ts +0 -53
  421. package/src/lib/haptics.ts +0 -23
  422. package/src/lib/language.ts +0 -16
  423. package/src/lib/range-value.ts +0 -38
  424. package/src/lib/screen-edges.ts +0 -44
  425. package/src/lib/shapes.ts +0 -59
  426. package/src/machines/popover.machine.ts +0 -51
  427. package/src/motion/transitions.ts +0 -97
  428. package/src/tokens.ts +0 -1
  429. /package/dist/{types/src/tokens.d.ts → tokens.js} +0 -0
@@ -1,197 +0,0 @@
1
- import {
2
- type InputHTMLAttributes,
3
- type Ref,
4
- useEffect,
5
- useLayoutEffect,
6
- useRef,
7
- useState,
8
- } from "react";
9
- import { useMediaQuery } from "../../hooks/use-media-query";
10
- import { SearchIcon } from "../../icons/icons";
11
- import { cn } from "../../lib/class-names";
12
- import { springs } from "@passui/tokens/motion";
13
-
14
- /** One object: the field stays inside the pill, and the lens never moves within it. */
15
- export function ExpandingSearchField({
16
- inputRef,
17
- className,
18
- placeholder = "Search",
19
- ...props
20
- }: InputHTMLAttributes<HTMLInputElement> & {
21
- inputRef: Ref<HTMLInputElement>;
22
- }) {
23
- const [expanded, setExpanded] = useState(
24
- Boolean(props.value ?? props.defaultValue),
25
- );
26
- const reduced = useMediaQuery("(prefers-reduced-motion: reduce)");
27
- const frame = useRef<HTMLDivElement>(null);
28
- const pill = useRef<HTMLLabelElement>(null);
29
- const input = useRef<HTMLInputElement>(null);
30
- const geometry = useRef({
31
- width: expanded ? 320 : 44,
32
- velocity: 0,
33
- x: 0,
34
- y: 0,
35
- vx: 0,
36
- vy: 0,
37
- pullX: 0,
38
- pullY: 0,
39
- capacity: 320,
40
- raf: 0,
41
- });
42
- const current = useRef({ expanded, reduced });
43
- const wake = useRef<() => void>(() => {});
44
- useLayoutEffect(() => {
45
- const box = frame.current;
46
- const label = pill.current;
47
- const field = input.current;
48
- if (!box || !label || !field) return;
49
- const s = geometry.current;
50
- let previous = 0;
51
- const tick = (now: number) => {
52
- const dt = previous ? Math.min(0.032, (now - previous) / 1000) : 1 / 60;
53
- previous = now;
54
- const target = current.current.expanded
55
- ? s.capacity
56
- : Math.min(44, s.capacity);
57
- const pullX = current.current.expanded ? 0 : s.pullX;
58
- const pullY = current.current.expanded ? 0 : s.pullY;
59
- const { stiffness, damping, mass } = springs.smooth;
60
- if (current.current.reduced) {
61
- s.width = target;
62
- s.x = 0;
63
- s.y = 0;
64
- s.velocity = 0;
65
- s.vx = 0;
66
- s.vy = 0;
67
- } else {
68
- s.velocity +=
69
- (((target - s.width) * stiffness - s.velocity * damping) / mass) * dt;
70
- s.width += s.velocity * dt;
71
- s.vx += (((pullX - s.x) * stiffness - s.vx * damping) / mass) * dt;
72
- s.vy += (((pullY - s.y) * stiffness - s.vy * damping) / mass) * dt;
73
- s.x += s.vx * dt;
74
- s.y += s.vy * dt;
75
- }
76
- label.style.width = `${Math.max(0, s.width)}px`;
77
- label.style.transform = `translate(${s.x}px, ${s.y}px)`;
78
- /* One number drives the field's reveal; focus lands with the
79
- expansion, so the caret arrives while the shape is growing. */
80
- const progress = (s.width - 44) / Math.max(1, s.capacity - 44);
81
- field.style.opacity = String(
82
- Math.max(0, Math.min(1, (progress - 0.55) / 0.45)),
83
- );
84
- if (
85
- Math.abs(s.width - target) < 0.05 &&
86
- Math.abs(s.velocity) < 0.05 &&
87
- Math.abs(s.x - pullX) +
88
- Math.abs(s.y - pullY) +
89
- Math.abs(s.vx) +
90
- Math.abs(s.vy) <
91
- 0.05
92
- ) {
93
- label.style.width = `${target}px`;
94
- s.raf = 0;
95
- previous = 0;
96
- return;
97
- }
98
- s.raf = requestAnimationFrame(tick);
99
- };
100
- wake.current = () => {
101
- if (!s.raf) s.raf = requestAnimationFrame(tick);
102
- };
103
- const measure = () => {
104
- s.capacity = Math.min(320, box.clientWidth);
105
- wake.current();
106
- };
107
- measure();
108
- const observer = new ResizeObserver(measure);
109
- observer.observe(box);
110
- return () => {
111
- observer.disconnect();
112
- cancelAnimationFrame(s.raf);
113
- s.raf = 0;
114
- };
115
- }, []);
116
- useEffect(() => {
117
- current.current = { expanded, reduced };
118
- wake.current();
119
- }, [expanded, reduced]);
120
- return (
121
- <div
122
- ref={frame}
123
- className={cn(
124
- "relative flex h-11 w-full max-w-xs items-center justify-center",
125
- className,
126
- )}
127
- onPointerMove={(event) => {
128
- if (expanded || reduced || event.pointerType !== "mouse") return;
129
- // Measure the frame, which stays still; measuring the object being
130
- // moved creates a feedback loop and a visible shiver.
131
- const rect = event.currentTarget.getBoundingClientRect();
132
- const dx = event.clientX - rect.left - rect.width / 2;
133
- const dy = event.clientY - rect.top - rect.height / 2;
134
- const distance = Math.hypot(dx, dy);
135
- const pull = Math.max(0, 1 - distance / 72) ** 1.4 * 7;
136
- geometry.current.pullX = distance ? (dx / distance) * pull : 0;
137
- geometry.current.pullY = distance ? (dy / distance) * pull : 0;
138
- wake.current();
139
- }}
140
- onPointerLeave={() => {
141
- geometry.current.pullX = 0;
142
- geometry.current.pullY = 0;
143
- wake.current();
144
- }}
145
- >
146
- <label
147
- ref={pill}
148
- className={cn(
149
- "passui-search-pill control-field relative block h-11 max-w-full overflow-hidden rounded-full",
150
- props.disabled && "opacity-40",
151
- )}
152
- style={{ width: expanded ? 320 : 44 }}
153
- >
154
- <SearchIcon
155
- aria-hidden="true"
156
- size={18}
157
- className="text-label-secondary pointer-events-none absolute start-[13px] top-1/2 -translate-y-1/2"
158
- />
159
- <input
160
- {...props}
161
- ref={(node) => {
162
- input.current = node;
163
- if (typeof inputRef === "function") inputRef(node);
164
- else if (inputRef) inputRef.current = node;
165
- }}
166
- type="search"
167
- placeholder={placeholder}
168
- aria-label={
169
- props["aria-labelledby"]
170
- ? undefined
171
- : (props["aria-label"] ?? placeholder)
172
- }
173
- className="text-subheadline text-label placeholder:text-label-tertiary h-11 w-full min-w-0 bg-transparent ps-11 pe-3 outline-none"
174
- onFocus={(event) => {
175
- setExpanded(true);
176
- props.onFocus?.(event);
177
- }}
178
- onBlur={(event) => {
179
- if (!event.currentTarget.value) setExpanded(false);
180
- props.onBlur?.(event);
181
- }}
182
- onKeyDown={(event) => {
183
- props.onKeyDown?.(event);
184
- if (
185
- !event.defaultPrevented &&
186
- event.key === "Escape" &&
187
- !event.currentTarget.value
188
- ) {
189
- setExpanded(false);
190
- event.currentTarget.blur();
191
- }
192
- }}
193
- />
194
- </label>
195
- </div>
196
- );
197
- }
@@ -1,66 +0,0 @@
1
- import { forwardRef, type InputHTMLAttributes } from "react";
2
- import { SearchIcon } from "../../icons/icons";
3
- import { cn } from "../../lib/class-names";
4
- import { ExpandingSearchField } from "./expanding-search-field";
5
-
6
- export type SearchFieldSize = "sm" | "md" | "lg";
7
-
8
- const pillSizes: Record<SearchFieldSize, string> = {
9
- sm: "control-field flex items-center gap-1.5 rounded-full px-2.5 py-1 text-caption text-label-tertiary",
10
- md: "control-field flex items-center gap-2 rounded-full px-3 py-2 text-subheadline text-label-tertiary",
11
- lg: "control-field flex items-center gap-2.5 rounded-full px-4 py-2.5 text-body text-label-tertiary",
12
- };
13
- const iconSizes: Record<SearchFieldSize, number> = {
14
- sm: 13,
15
- md: 15,
16
- lg: 17,
17
- };
18
-
19
- export interface SearchFieldProps
20
- extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
21
- /** Expand a single pill from its search icon on focus. @default false */
22
- collapsible?: boolean;
23
- /** Pill height, icon size and text scale (non-collapsible variant). @default "md" */
24
- size?: SearchFieldSize;
25
- }
26
-
27
- export const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(
28
- function SearchField(
29
- {
30
- className,
31
- placeholder = "Search",
32
- collapsible = false,
33
- size = "md",
34
- ...props
35
- },
36
- ref,
37
- ) {
38
- if (collapsible)
39
- return (
40
- <ExpandingSearchField
41
- {...props}
42
- inputRef={ref}
43
- className={className}
44
- placeholder={placeholder}
45
- />
46
- );
47
- const accessibleName = props["aria-labelledby"]
48
- ? undefined
49
- : (props["aria-label"] ?? placeholder);
50
- return (
51
- <label className={cn(pillSizes[size], className)}>
52
- <span aria-hidden="true" className="shrink-0">
53
- <SearchIcon size={iconSizes[size]} strokeWidth={2} />
54
- </span>
55
- <input
56
- ref={ref}
57
- type="search"
58
- placeholder={placeholder}
59
- aria-label={accessibleName}
60
- className="text-label placeholder:text-label-tertiary min-w-0 grow bg-transparent outline-none"
61
- {...props}
62
- />
63
- </label>
64
- );
65
- },
66
- );
@@ -1,276 +0,0 @@
1
- import {
2
- createContext,
3
- useCallback,
4
- useContext,
5
- useId,
6
- useRef,
7
- useState,
8
- useEffect,
9
- type ComponentProps,
10
- } from "react";
11
- import { cn } from "../../lib/class-names";
12
-
13
- export type SearchListSize = "sm" | "md" | "lg";
14
-
15
- const fieldSizes: Record<SearchListSize, string> = {
16
- sm: "min-h-8 w-full rounded-full border border-separator bg-fill/60 px-3 text-caption text-label outline-none focus-visible:ring-2 focus-visible:ring-accent-text/50",
17
- md: "min-h-11 w-full rounded-full border border-separator bg-fill/60 px-4 text-subheadline text-label outline-none focus-visible:ring-2 focus-visible:ring-accent-text/50",
18
- lg: "min-h-13 w-full rounded-full border border-separator bg-fill/60 px-5 text-body text-label outline-none focus-visible:ring-2 focus-visible:ring-accent-text/50",
19
- };
20
- const headingSizes: Record<SearchListSize, string> = {
21
- sm: "px-1.5 py-1.5 text-caption2 font-medium text-label-tertiary",
22
- md: "px-2 py-2 text-caption font-medium text-label-tertiary",
23
- lg: "px-2.5 py-2.5 text-subheadline font-medium text-label-tertiary",
24
- };
25
- const itemSizes: Record<SearchListSize, string> = {
26
- sm: "flex min-h-8 w-full items-center gap-1.5 rounded-md px-2 py-1 text-left text-footnote text-label hover:bg-fill aria-selected:bg-fill [@media(pointer:coarse)]:min-h-10",
27
- md: "flex min-h-9 w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-left text-subheadline text-label hover:bg-fill aria-selected:bg-fill [@media(pointer:coarse)]:min-h-11",
28
- lg: "flex min-h-11 w-full items-center gap-2.5 rounded-lg px-3 py-2 text-left text-body text-label hover:bg-fill aria-selected:bg-fill [@media(pointer:coarse)]:min-h-13",
29
- };
30
-
31
- type SearchState = {
32
- query: string;
33
- setQuery: (query: string) => void;
34
- active: string;
35
- listId: string;
36
- open: boolean;
37
- visible: number;
38
- register: (id: string, visible: boolean | null) => void;
39
- size: SearchListSize;
40
- };
41
- const SearchContext = createContext<SearchState | null>(null);
42
- function useSearch() {
43
- const search = useContext(SearchContext);
44
- if (!search) throw new Error("Search list controls need a SearchList parent");
45
- return search;
46
- }
47
-
48
- export function SearchList({
49
- loop = true,
50
- open = true,
51
- size = "md",
52
- onKeyDown,
53
- className,
54
- ...props
55
- }: ComponentProps<"div"> & {
56
- loop?: boolean;
57
- open?: boolean;
58
- /** Field, item and heading density. @default "md" */
59
- size?: SearchListSize;
60
- }) {
61
- const [query, setQuery] = useState("");
62
- const updateQuery = useCallback((next: string) => {
63
- setQuery(next);
64
- setActive("");
65
- }, []);
66
- const [active, setActive] = useState("");
67
- const [results, setResults] = useState<Record<string, boolean>>({});
68
- const listId = useId();
69
- const ref = useRef<HTMLDivElement>(null);
70
- const register = useCallback(
71
- (id: string, visible: boolean | null) =>
72
- setResults((previous) => {
73
- if (visible === null) {
74
- const next = { ...previous };
75
- delete next[id];
76
- return next;
77
- }
78
- if (previous[id] === visible) return previous;
79
- return { ...previous, [id]: visible };
80
- }),
81
- [],
82
- );
83
- useEffect(() => {
84
- if (!open) return;
85
- const available = Object.keys(results).filter((id) => results[id]);
86
- if (!available.includes(active)) setActive(available[0] ?? "");
87
- }, [open, results, active]);
88
- return (
89
- <SearchContext
90
- value={{
91
- query,
92
- setQuery: updateQuery,
93
- active,
94
- listId,
95
- open,
96
- visible: Object.values(results).filter(Boolean).length,
97
- register,
98
- size,
99
- }}
100
- >
101
- <div
102
- {...props}
103
- ref={ref}
104
- role="presentation"
105
- className={cn("relative", className)}
106
- onKeyDown={(event) => {
107
- onKeyDown?.(event);
108
- if (event.defaultPrevented || !open || event.nativeEvent.isComposing)
109
- return;
110
- const items = Array.from(
111
- ref.current?.querySelectorAll<HTMLButtonElement>(
112
- "[data-search-result]:not([hidden]):not(:disabled)",
113
- ) ?? [],
114
- );
115
- if (!items.length || event.altKey || event.ctrlKey || event.metaKey)
116
- return;
117
- const index = items.findIndex((item) => item.id === active);
118
- if (event.key === "Enter") {
119
- if (
120
- event.target instanceof HTMLElement &&
121
- event.target.closest("button, a")
122
- )
123
- return;
124
- event.preventDefault();
125
- (items[index] ?? items[0])?.click();
126
- return;
127
- }
128
- if (event.key !== "ArrowDown" && event.key !== "ArrowUp") return;
129
- event.preventDefault();
130
- const delta = event.key === "ArrowDown" ? 1 : -1;
131
- const next =
132
- index < 0
133
- ? delta === 1
134
- ? 0
135
- : items.length - 1
136
- : loop
137
- ? (index + delta + items.length) % items.length
138
- : Math.max(0, Math.min(items.length - 1, index + delta));
139
- const item = items[next];
140
- if (!item) return;
141
- setActive(item.id);
142
- item.scrollIntoView({
143
- block: "nearest",
144
- });
145
- }}
146
- />
147
- </SearchContext>
148
- );
149
- }
150
- export function SearchListField({
151
- value,
152
- onValueChange,
153
- className,
154
- ...props
155
- }: Omit<ComponentProps<"input">, "value" | "onChange"> & {
156
- value?: string;
157
- onValueChange?: (value: string) => void;
158
- }) {
159
- const search = useSearch();
160
- useEffect(() => {
161
- if (value !== undefined) search.setQuery(value);
162
- }, [value, search.setQuery]);
163
- return (
164
- <input
165
- {...props}
166
- role="combobox"
167
- aria-autocomplete="list"
168
- aria-expanded={search.open}
169
- aria-controls={search.open ? search.listId : undefined}
170
- aria-activedescendant={
171
- search.open && search.active ? search.active : undefined
172
- }
173
- aria-label={props["aria-label"] ?? props.placeholder}
174
- value={value ?? search.query}
175
- onChange={(event) => {
176
- search.setQuery(event.target.value);
177
- onValueChange?.(event.target.value);
178
- }}
179
- className={cn(fieldSizes[search.size], className)}
180
- />
181
- );
182
- }
183
- export function SearchListResults({
184
- className,
185
- ...props
186
- }: ComponentProps<"div">) {
187
- const search = useSearch();
188
- return (
189
- <div
190
- {...props}
191
- id={search.listId}
192
- role="listbox"
193
- hidden={!search.open}
194
- className={cn("overflow-y-auto p-1", className)}
195
- />
196
- );
197
- }
198
- export function SearchListEmpty(props: ComponentProps<"div">) {
199
- const search = useSearch();
200
- return search.visible ? null : <div {...props} role="status" />;
201
- }
202
- export function SearchListGroup({
203
- heading,
204
- children,
205
- className,
206
- ...props
207
- }: ComponentProps<"div"> & {
208
- heading?: React.ReactNode;
209
- }) {
210
- const search = useSearch();
211
- const id = useId();
212
- return (
213
- <div
214
- {...props}
215
- role="group"
216
- className={cn(
217
- "not-has-[[data-search-result]:not([hidden])]:hidden",
218
- className,
219
- )}
220
- aria-labelledby={heading ? id : undefined}
221
- >
222
- {heading && (
223
- <div id={id} className={headingSizes[search.size]}>
224
- {heading}
225
- </div>
226
- )}
227
- {children}
228
- </div>
229
- );
230
- }
231
- export function SearchListItem({
232
- value,
233
- keywords = [],
234
- onSelect,
235
- className,
236
- ...props
237
- }: Omit<ComponentProps<"button">, "value" | "onSelect"> & {
238
- value: string;
239
- keywords?: string[];
240
- onSelect?: (value: string) => void;
241
- }) {
242
- const search = useSearch();
243
- const id = useId();
244
- const haystack = [value, ...keywords].join(" ").toLocaleLowerCase();
245
- const visible = search.query
246
- .toLocaleLowerCase()
247
- .trim()
248
- .split(/\s+/)
249
- .every((word) => haystack.includes(word));
250
- useEffect(() => {
251
- search.register(id, visible && !props.disabled);
252
- return () => search.register(id, null);
253
- }, [id, visible, props.disabled, search.register]);
254
- return (
255
- <button
256
- {...props}
257
- type="button"
258
- id={id}
259
- role="option"
260
- tabIndex={-1}
261
- hidden={!visible}
262
- data-search-result=""
263
- aria-selected={search.active === id}
264
- data-selected={search.active === id ? "true" : undefined}
265
- className={cn(itemSizes[search.size], className)}
266
- onMouseDown={(event) => {
267
- props.onMouseDown?.(event);
268
- if (!event.defaultPrevented) event.preventDefault();
269
- }}
270
- onClick={(event) => {
271
- props.onClick?.(event);
272
- if (!event.defaultPrevented) onSelect?.(value);
273
- }}
274
- />
275
- );
276
- }
@@ -1,75 +0,0 @@
1
- import { useId, type HTMLAttributes, type ReactNode } from "react";
2
- import { cn } from "../../lib/class-names";
3
-
4
- export type SectionSize = "sm" | "md" | "lg";
5
-
6
- const titleSizes: Record<SectionSize, string> = {
7
- sm: "px-3 text-caption",
8
- md: "px-4 text-footnote",
9
- lg: "px-5 text-subheadline",
10
- };
11
-
12
- const footerSizes: Record<SectionSize, string> = {
13
- sm: "px-3",
14
- md: "px-4",
15
- lg: "px-5",
16
- };
17
-
18
- export interface SectionProps extends HTMLAttributes<HTMLElement> {
19
- /** Optional group heading and accessible name. */
20
- title?: string;
21
- /** Supporting text below the grouped rows. */
22
- footer?: ReactNode;
23
- /** Rows, typically LabeledContent. */
24
- children?: ReactNode;
25
- /** Title and footer text scale + padding. @default "md" */
26
- size?: SectionSize;
27
- }
28
-
29
- /**
30
- * A titled, inset group of rows with an optional footer, as in iOS Settings
31
- * and SwiftUI's grouped `List` with `Section(header:footer:)`. Rows are
32
- * usually `LabeledContent`; dividers between them come for free.
33
- */
34
- export function Section({
35
- title,
36
- footer,
37
- children,
38
- className,
39
- size = "md",
40
- ...props
41
- }: SectionProps) {
42
- const headingId = useId();
43
- return (
44
- <section
45
- aria-labelledby={title ? headingId : undefined}
46
- className={cn("flex flex-col gap-2", className)}
47
- {...props}
48
- >
49
- {title && (
50
- <h2
51
- id={headingId}
52
- className={cn(titleSizes[size], "text-label-tertiary font-medium")}
53
- >
54
- {title}
55
- </h2>
56
- )}
57
- {/* A group can be only a note, e.g. where to find something on this device. */}
58
- {children ? (
59
- <div className="divide-separator/60 border-separator/60 bg-elevated flex flex-col divide-y overflow-hidden rounded-3xl border">
60
- {children}
61
- </div>
62
- ) : null}
63
- {footer && (
64
- <div
65
- className={cn(
66
- footerSizes[size],
67
- "text-caption text-label-tertiary leading-snug",
68
- )}
69
- >
70
- {footer}
71
- </div>
72
- )}
73
- </section>
74
- );
75
- }
@@ -1,8 +0,0 @@
1
- import { TextField, type TextFieldProps } from "../text-field/text-field";
2
-
3
- /** TextField's native input props, with the password type managed by SecureField. */
4
- export type SecureFieldProps = Omit<TextFieldProps, "type">;
5
-
6
- export function SecureField(props: SecureFieldProps) {
7
- return <TextField {...props} type="password" />;
8
- }