@passui/react 0.1.17 → 0.1.20

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 (408) hide show
  1. package/README.md +140 -1
  2. package/THIRD_PARTY_NOTICES.md +25 -0
  3. package/dist/types/src/appearance/index.d.ts +2 -0
  4. package/dist/types/src/appearance/platform.d.ts +9 -0
  5. package/dist/types/src/appearance/theme.d.ts +71 -0
  6. package/dist/types/src/components/accordion/accordion.d.ts +19 -0
  7. package/dist/types/src/components/ambient/ambient.d.ts +12 -0
  8. package/dist/types/src/components/ambient/index.d.ts +1 -0
  9. package/dist/types/src/components/aspect-ratio/aspect-ratio.d.ts +7 -0
  10. package/dist/types/src/components/breadcrumb/breadcrumb.d.ts +16 -0
  11. package/dist/types/src/components/button/button-styles.d.ts +12 -0
  12. package/dist/types/src/components/button/button.d.ts +32 -0
  13. package/dist/types/src/components/button/icon-button.d.ts +10 -0
  14. package/dist/types/src/components/button/pending-spinner.d.ts +5 -0
  15. package/dist/types/src/components/button/use-pending-indicator.d.ts +2 -0
  16. package/dist/types/src/components/chip/chip.d.ts +7 -0
  17. package/dist/types/src/components/code-block/code-block.d.ts +10 -0
  18. package/dist/types/src/components/combo-box/combo-box.d.ts +9 -0
  19. package/dist/types/src/components/command/command.d.ts +18 -0
  20. package/dist/types/src/components/compact-date-picker/calendar-month.d.ts +25 -0
  21. package/dist/types/src/components/compact-date-picker/compact-date-picker.d.ts +27 -0
  22. package/dist/types/src/components/compact-time-picker/compact-time-picker.d.ts +26 -0
  23. package/dist/types/src/components/compact-time-picker/time-value.d.ts +18 -0
  24. package/dist/types/src/components/content-unavailable-view/content-unavailable-view.d.ts +9 -0
  25. package/dist/types/src/components/content-view/content-view.d.ts +48 -0
  26. package/dist/types/src/components/content-view/index.d.ts +1 -0
  27. package/dist/types/src/components/context-menu/conceal-menu-source.d.ts +2 -0
  28. package/dist/types/src/components/context-menu/context-menu-host.d.ts +2 -0
  29. package/dist/types/src/components/context-menu/context-menu-store.d.ts +57 -0
  30. package/dist/types/src/components/context-menu/menu-navigation.d.ts +6 -0
  31. package/dist/types/src/components/context-menu/menu-position.d.ts +21 -0
  32. package/dist/types/src/components/context-menu/menu-reveal.d.ts +17 -0
  33. package/dist/types/src/components/context-menu/use-context-menu.d.ts +14 -0
  34. package/dist/types/src/components/conversation/conversation.d.ts +43 -0
  35. package/dist/types/src/components/conversation/index.d.ts +1 -0
  36. package/dist/types/src/components/date-picker/date-picker.d.ts +16 -0
  37. package/dist/types/src/components/date-picker/date-value.d.ts +2 -0
  38. package/dist/types/src/components/dialog/dialog-host.d.ts +6 -0
  39. package/dist/types/src/components/dialog/dialog-store.d.ts +23 -0
  40. package/dist/types/src/components/dialog/dialog.d.ts +30 -0
  41. package/dist/types/src/components/dialog/index.d.ts +1 -0
  42. package/dist/types/src/components/disclosure-group/disclosure-group.d.ts +15 -0
  43. package/dist/types/src/components/divider/divider.d.ts +9 -0
  44. package/dist/types/src/components/inline-disclosure/inline-disclosure.d.ts +15 -0
  45. package/dist/types/src/components/keyboard-shortcut/keyboard-shortcut.d.ts +5 -0
  46. package/dist/types/src/components/labeled-content/labeled-content.d.ts +19 -0
  47. package/dist/types/src/components/locale-switcher/index.d.ts +1 -0
  48. package/dist/types/src/components/locale-switcher/locale-switcher.d.ts +10 -0
  49. package/dist/types/src/components/menu/menu.d.ts +16 -0
  50. package/dist/types/src/components/one-time-code/one-time-code.d.ts +18 -0
  51. package/dist/types/src/components/picker/picker-trigger.d.ts +2 -0
  52. package/dist/types/src/components/picker/picker.d.ts +43 -0
  53. package/dist/types/src/components/popover/anchored-surface.d.ts +13 -0
  54. package/dist/types/src/components/popover/popover-fit.d.ts +21 -0
  55. package/dist/types/src/components/popover/popover.d.ts +18 -0
  56. package/dist/types/src/components/profile-image/profile-image.d.ts +4 -0
  57. package/dist/types/src/components/progress-view/progress-view.d.ts +13 -0
  58. package/dist/types/src/components/progress-view/use-liquid-progress.d.ts +3 -0
  59. package/dist/types/src/components/radio-group/radio-group.d.ts +17 -0
  60. package/dist/types/src/components/search-field/expanding-search-field.d.ts +5 -0
  61. package/dist/types/src/components/search-field/search-field.d.ts +6 -0
  62. package/dist/types/src/components/search-list/search-list.d.ts +19 -0
  63. package/dist/types/src/components/section/section.d.ts +15 -0
  64. package/dist/types/src/components/secure-field/secure-field.d.ts +4 -0
  65. package/dist/types/src/components/segmented-control/segmented-control.d.ts +20 -0
  66. package/dist/types/src/components/sheet/modal-environment.d.ts +2 -0
  67. package/dist/types/src/components/sheet/sheet-portal.d.ts +5 -0
  68. package/dist/types/src/components/sheet/sheet.d.ts +21 -0
  69. package/dist/types/src/components/sheet/use-sheet-focus.d.ts +3 -0
  70. package/dist/types/src/components/sidebar/sidebar.d.ts +19 -0
  71. package/dist/types/src/components/skeleton/skeleton.d.ts +6 -0
  72. package/dist/types/src/components/slider/slider.d.ts +14 -0
  73. package/dist/types/src/components/slosh-slider/liquid-step.d.ts +6 -0
  74. package/dist/types/src/components/slosh-slider/slosh-slider.d.ts +18 -0
  75. package/dist/types/src/components/stat-tile/index.d.ts +1 -0
  76. package/dist/types/src/components/stat-tile/stat-tile.d.ts +15 -0
  77. package/dist/types/src/components/status-indicator/status-indicator.d.ts +14 -0
  78. package/dist/types/src/components/stepper/rolling-digit.d.ts +11 -0
  79. package/dist/types/src/components/stepper/stepper.d.ts +19 -0
  80. package/dist/types/src/components/swatch-picker/swatch-picker.d.ts +17 -0
  81. package/dist/types/src/components/tab-bar/tab-bar.d.ts +40 -0
  82. package/dist/types/src/components/tab-view/tab-view.d.ts +24 -0
  83. package/dist/types/src/components/table/table.d.ts +10 -0
  84. package/dist/types/src/components/text-editor/text-editor.d.ts +2 -0
  85. package/dist/types/src/components/text-field/text-field.d.ts +20 -0
  86. package/dist/types/src/components/toast/toast-store.d.ts +47 -0
  87. package/dist/types/src/components/toast/toaster.d.ts +10 -0
  88. package/dist/types/src/components/toggle/toggle.d.ts +17 -0
  89. package/dist/types/src/components/tooltip/tooltip-host.d.ts +6 -0
  90. package/dist/types/src/components/view-controller/index.d.ts +1 -0
  91. package/dist/types/src/components/view-controller/view-controller.d.ts +21 -0
  92. package/dist/types/src/components/wake-slider/wake-slider.d.ts +12 -0
  93. package/dist/types/src/hooks/scroll/minimize-decision.d.ts +2 -0
  94. package/dist/types/src/hooks/use-anchored-disclosure.d.ts +9 -0
  95. package/dist/types/src/hooks/use-anchored-placement.d.ts +7 -0
  96. package/dist/types/src/hooks/use-dismiss.d.ts +9 -0
  97. package/dist/types/src/hooks/use-floating-dismiss.d.ts +3 -0
  98. package/dist/types/src/hooks/use-media-query.d.ts +21 -0
  99. package/dist/types/src/hooks/use-minimize-on-scroll.d.ts +6 -0
  100. package/dist/types/src/hooks/use-visual-viewport.d.ts +4 -0
  101. package/dist/types/src/hooks/viewport/types.d.ts +19 -0
  102. package/dist/types/src/hooks/viewport/viewport-metrics.d.ts +3 -0
  103. package/dist/types/src/icons/icons.d.ts +612 -0
  104. package/dist/types/src/index.d.ts +71 -0
  105. package/dist/types/src/lib/anchored-placement.d.ts +39 -0
  106. package/dist/types/src/lib/class-names.d.ts +2 -0
  107. package/dist/types/src/lib/clipboard.d.ts +6 -0
  108. package/dist/types/src/lib/date.d.ts +50 -0
  109. package/dist/types/src/lib/floating-layers.d.ts +8 -0
  110. package/dist/types/src/lib/haptics.d.ts +8 -0
  111. package/dist/types/src/lib/language.d.ts +4 -0
  112. package/dist/types/src/lib/range-value.d.ts +4 -0
  113. package/dist/types/src/lib/screen-edges.d.ts +12 -0
  114. package/dist/types/src/lib/shapes.d.ts +17 -0
  115. package/dist/types/src/motion/transitions.d.ts +97 -0
  116. package/dist/types/src/tokens.d.ts +1 -0
  117. package/package.json +248 -40
  118. package/src/appearance/platform.tsx +10 -47
  119. package/src/appearance/theme.tsx +42 -142
  120. package/src/components/accordion/accordion.tsx +48 -0
  121. package/src/components/ambient/ambient.tsx +2 -10
  122. package/src/components/aspect-ratio/aspect-ratio.tsx +22 -0
  123. package/src/components/breadcrumb/breadcrumb.tsx +53 -0
  124. package/src/components/button/button-styles.ts +13 -31
  125. package/src/components/button/button.tsx +24 -15
  126. package/src/components/button/icon-button.tsx +14 -56
  127. package/src/components/button/use-pending-indicator.ts +2 -7
  128. package/src/components/chip/chip.tsx +8 -13
  129. package/src/components/code-block/code-block.tsx +41 -0
  130. package/src/components/combo-box/combo-box.tsx +13 -0
  131. package/src/components/command/command.tsx +119 -0
  132. package/src/components/compact-date-picker/calendar-month.ts +13 -57
  133. package/src/components/compact-date-picker/compact-date-picker.tsx +72 -195
  134. package/src/components/compact-time-picker/compact-time-picker.tsx +74 -195
  135. package/src/components/compact-time-picker/time-value.ts +4 -16
  136. package/src/components/content-unavailable-view/content-unavailable-view.tsx +37 -0
  137. package/src/components/content-view/content-view.tsx +13 -56
  138. package/src/components/context-menu/conceal-menu-source.ts +1 -4
  139. package/src/components/context-menu/context-menu-host.tsx +132 -198
  140. package/src/components/context-menu/context-menu-store.ts +5 -14
  141. package/src/components/context-menu/menu-navigation.ts +29 -0
  142. package/src/components/context-menu/menu-position.ts +6 -27
  143. package/src/components/context-menu/menu-reveal.ts +14 -52
  144. package/src/components/context-menu/use-context-menu.ts +6 -30
  145. package/src/components/conversation/conversation.tsx +26 -72
  146. package/src/components/date-picker/date-picker.tsx +8 -37
  147. package/src/components/date-picker/date-value.ts +5 -30
  148. package/src/components/dialog/dialog-host.tsx +37 -76
  149. package/src/components/dialog/dialog-store.ts +16 -7
  150. package/src/components/dialog/dialog.tsx +23 -80
  151. package/src/components/disclosure-group/disclosure-group.tsx +79 -0
  152. package/src/components/divider/divider.tsx +31 -0
  153. package/src/components/inline-disclosure/inline-disclosure.tsx +49 -0
  154. package/src/components/keyboard-shortcut/keyboard-shortcut.tsx +17 -0
  155. package/src/components/labeled-content/labeled-content.tsx +24 -18
  156. package/src/components/locale-switcher/locale-switcher.tsx +20 -70
  157. package/src/components/menu/menu.tsx +68 -0
  158. package/src/components/one-time-code/one-time-code.tsx +168 -0
  159. package/src/components/picker/picker-trigger.ts +10 -0
  160. package/src/components/picker/picker.tsx +165 -283
  161. package/src/components/popover/anchored-surface.tsx +223 -0
  162. package/src/components/popover/popover-fit.ts +69 -0
  163. package/src/components/popover/popover.tsx +209 -63
  164. package/src/components/profile-image/profile-image.tsx +6 -28
  165. package/src/components/progress-view/progress-view.tsx +70 -0
  166. package/src/components/progress-view/use-liquid-progress.ts +43 -0
  167. package/src/components/radio-group/radio-group.tsx +63 -0
  168. package/src/components/search-field/expanding-search-field.tsx +183 -0
  169. package/src/components/search-field/search-field.tsx +25 -7
  170. package/src/components/search-list/search-list.tsx +58 -75
  171. package/src/components/section/section.tsx +18 -17
  172. package/src/components/secure-field/secure-field.tsx +5 -7
  173. package/src/components/segmented-control/segmented-control.tsx +20 -29
  174. package/src/components/sheet/modal-environment.ts +16 -54
  175. package/src/components/sheet/sheet-portal.tsx +10 -42
  176. package/src/components/sheet/sheet.tsx +17 -25
  177. package/src/components/sheet/use-sheet-focus.ts +15 -51
  178. package/src/components/sidebar/sidebar.tsx +44 -38
  179. package/src/components/skeleton/skeleton.tsx +19 -0
  180. package/src/components/slider/slider.tsx +76 -0
  181. package/src/components/slosh-slider/liquid-step.ts +42 -0
  182. package/src/components/slosh-slider/slosh-slider.tsx +251 -0
  183. package/src/components/stat-tile/stat-tile.tsx +9 -30
  184. package/src/components/status-indicator/status-indicator.tsx +12 -19
  185. package/src/components/stepper/rolling-digit.tsx +77 -0
  186. package/src/components/stepper/stepper.tsx +101 -0
  187. package/src/components/swatch-picker/swatch-picker.tsx +19 -15
  188. package/src/components/tab-bar/tab-bar.tsx +59 -59
  189. package/src/components/tab-view/tab-view.tsx +52 -57
  190. package/src/components/table/table.tsx +14 -62
  191. package/src/components/text-editor/text-editor.tsx +2 -12
  192. package/src/components/text-field/text-field.tsx +53 -44
  193. package/src/components/toast/toast-store.ts +9 -30
  194. package/src/components/toast/toaster.tsx +90 -104
  195. package/src/components/toggle/toggle.tsx +165 -44
  196. package/src/components/tooltip/tooltip-host.tsx +70 -67
  197. package/src/components/view-controller/view-controller.tsx +4 -21
  198. package/src/components/wake-slider/wake-slider.tsx +237 -0
  199. package/src/hooks/scroll/minimize-decision.ts +1 -5
  200. package/src/hooks/use-anchored-disclosure.ts +23 -0
  201. package/src/hooks/use-anchored-placement.ts +7 -14
  202. package/src/hooks/use-dismiss.ts +5 -23
  203. package/src/hooks/use-floating-dismiss.ts +28 -0
  204. package/src/hooks/use-media-query.ts +12 -31
  205. package/src/hooks/use-minimize-on-scroll.ts +10 -34
  206. package/src/hooks/use-visual-viewport.ts +5 -14
  207. package/src/hooks/viewport/viewport-metrics.ts +4 -16
  208. package/src/icons/icons.tsx +229 -183
  209. package/src/index.ts +27 -1
  210. package/src/lib/anchored-placement.ts +12 -18
  211. package/src/lib/class-names.ts +1 -2
  212. package/src/lib/clipboard.ts +14 -0
  213. package/src/lib/date.ts +4 -15
  214. package/src/lib/floating-layers.ts +18 -8
  215. package/src/lib/haptics.ts +1 -3
  216. package/src/lib/language.ts +2 -7
  217. package/src/lib/range-value.ts +32 -0
  218. package/src/lib/screen-edges.ts +2 -6
  219. package/src/lib/shapes.ts +5 -20
  220. package/src/motion/transitions.ts +18 -12
  221. package/src/styles/code-block.css +33 -0
  222. package/src/styles/motion-controls.css +189 -0
  223. package/src/styles/styles.css +3 -0
  224. package/src/components/ambient/ambient.docs.tsx +0 -68
  225. package/src/components/ambient/examples/ambient-images.tsx +0 -30
  226. package/src/components/ambient/examples/ambient-now-playing.tsx +0 -55
  227. package/src/components/ambient/examples/ambient-showcase.tsx +0 -33
  228. package/src/components/ambient/examples/ambient-usage.tsx +0 -19
  229. package/src/components/button/button.docs.tsx +0 -116
  230. package/src/components/button/examples/button-disabled.tsx +0 -19
  231. package/src/components/button/examples/button-icon.tsx +0 -39
  232. package/src/components/button/examples/button-link.tsx +0 -12
  233. package/src/components/button/examples/button-pending.tsx +0 -27
  234. package/src/components/button/examples/button-showcase.tsx +0 -115
  235. package/src/components/button/examples/button-sizes.tsx +0 -12
  236. package/src/components/button/examples/button-usage.tsx +0 -12
  237. package/src/components/button/examples/button-variants.tsx +0 -15
  238. package/src/components/button/examples/button-with-icon.tsx +0 -32
  239. package/src/components/button/examples/icon-button-player.tsx +0 -38
  240. package/src/components/button/examples/icon-button-showcase.tsx +0 -83
  241. package/src/components/button/examples/icon-button-usage.tsx +0 -11
  242. package/src/components/button/examples/icon-button-variants.tsx +0 -39
  243. package/src/components/button/icon-button.docs.tsx +0 -68
  244. package/src/components/chip/chip.docs.tsx +0 -37
  245. package/src/components/chip/examples/chip-in-rows.tsx +0 -19
  246. package/src/components/chip/examples/chip-showcase.tsx +0 -51
  247. package/src/components/chip/examples/chip-tones.tsx +0 -13
  248. package/src/components/chip/examples/chip-usage.tsx +0 -5
  249. package/src/components/compact-date-picker/compact-date-picker.docs.tsx +0 -81
  250. package/src/components/compact-date-picker/examples/compact-date-picker-showcase.tsx +0 -35
  251. package/src/components/compact-date-picker/examples/compact-date-picker-usage.tsx +0 -22
  252. package/src/components/compact-time-picker/compact-time-picker.docs.tsx +0 -80
  253. package/src/components/compact-time-picker/examples/compact-time-picker-showcase.tsx +0 -31
  254. package/src/components/compact-time-picker/examples/compact-time-picker-usage.tsx +0 -21
  255. package/src/components/content-view/content-view.docs.tsx +0 -61
  256. package/src/components/content-view/examples/content-view-header-action.tsx +0 -33
  257. package/src/components/content-view/examples/content-view-showcase.tsx +0 -65
  258. package/src/components/content-view/examples/content-view-stats.tsx +0 -35
  259. package/src/components/content-view/examples/content-view-usage.tsx +0 -14
  260. package/src/components/context-menu/context-menu.docs.tsx +0 -92
  261. package/src/components/context-menu/examples/context-menu-checked.tsx +0 -37
  262. package/src/components/context-menu/examples/context-menu-list.tsx +0 -85
  263. package/src/components/context-menu/examples/context-menu-showcase.tsx +0 -56
  264. package/src/components/context-menu/examples/context-menu-toolbar.tsx +0 -63
  265. package/src/components/context-menu/examples/context-menu-usage.tsx +0 -24
  266. package/src/components/conversation/conversation.docs.tsx +0 -88
  267. package/src/components/conversation/examples/conversation-composer.tsx +0 -36
  268. package/src/components/conversation/examples/conversation-days.tsx +0 -48
  269. package/src/components/conversation/examples/conversation-showcase.tsx +0 -71
  270. package/src/components/conversation/examples/conversation-usage.tsx +0 -28
  271. package/src/components/date-picker/date-picker.docs.tsx +0 -88
  272. package/src/components/date-picker/examples/date-picker-locales.tsx +0 -41
  273. package/src/components/date-picker/examples/date-picker-past-only.tsx +0 -29
  274. package/src/components/date-picker/examples/date-picker-showcase.tsx +0 -49
  275. package/src/components/date-picker/examples/date-picker-usage.tsx +0 -22
  276. package/src/components/dialog/dialog.docs.tsx +0 -114
  277. package/src/components/dialog/examples/dialog-confirm.tsx +0 -24
  278. package/src/components/dialog/examples/dialog-form.tsx +0 -46
  279. package/src/components/dialog/examples/dialog-inline.tsx +0 -48
  280. package/src/components/dialog/examples/dialog-showcase.tsx +0 -53
  281. package/src/components/dialog/examples/dialog-usage.tsx +0 -31
  282. package/src/components/labeled-content/examples/labeled-content-descriptions.tsx +0 -37
  283. package/src/components/labeled-content/examples/labeled-content-showcase.tsx +0 -54
  284. package/src/components/labeled-content/examples/labeled-content-usage.tsx +0 -22
  285. package/src/components/labeled-content/examples/labeled-content-values.tsx +0 -26
  286. package/src/components/labeled-content/examples/labeled-content-wide.tsx +0 -46
  287. package/src/components/labeled-content/labeled-content.docs.tsx +0 -69
  288. package/src/components/locale-switcher/examples/locale-switcher-native-names.tsx +0 -30
  289. package/src/components/locale-switcher/examples/locale-switcher-showcase.tsx +0 -46
  290. package/src/components/locale-switcher/examples/locale-switcher-translated-page.tsx +0 -35
  291. package/src/components/locale-switcher/examples/locale-switcher-usage.tsx +0 -20
  292. package/src/components/locale-switcher/locale-switcher.docs.tsx +0 -91
  293. package/src/components/picker/examples/picker-details.tsx +0 -44
  294. package/src/components/picker/examples/picker-searchable.tsx +0 -48
  295. package/src/components/picker/examples/picker-showcase.tsx +0 -66
  296. package/src/components/picker/examples/picker-usage.tsx +0 -20
  297. package/src/components/picker/picker.docs.tsx +0 -68
  298. package/src/components/popover/examples/popover-help.tsx +0 -57
  299. package/src/components/popover/examples/popover-menu.tsx +0 -51
  300. package/src/components/popover/examples/popover-showcase.tsx +0 -61
  301. package/src/components/popover/examples/popover-usage.tsx +0 -31
  302. package/src/components/popover/popover.docs.tsx +0 -84
  303. package/src/components/profile-image/examples/profile-image-fallbacks.tsx +0 -29
  304. package/src/components/profile-image/examples/profile-image-group.tsx +0 -34
  305. package/src/components/profile-image/examples/profile-image-showcase.tsx +0 -30
  306. package/src/components/profile-image/examples/profile-image-usage.tsx +0 -14
  307. package/src/components/profile-image/profile-image.docs.tsx +0 -81
  308. package/src/components/search-field/examples/search-field-filter.tsx +0 -53
  309. package/src/components/search-field/examples/search-field-showcase.tsx +0 -56
  310. package/src/components/search-field/examples/search-field-toolbar.tsx +0 -27
  311. package/src/components/search-field/examples/search-field-usage.tsx +0 -18
  312. package/src/components/search-field/search-field.docs.tsx +0 -58
  313. package/src/components/search-list/examples/search-list-dropdown.tsx +0 -53
  314. package/src/components/search-list/examples/search-list-groups.tsx +0 -64
  315. package/src/components/search-list/examples/search-list-showcase.tsx +0 -67
  316. package/src/components/search-list/examples/search-list-usage.tsx +0 -27
  317. package/src/components/search-list/search-list.docs.tsx +0 -87
  318. package/src/components/section/examples/section-actions.tsx +0 -35
  319. package/src/components/section/examples/section-groups.tsx +0 -41
  320. package/src/components/section/examples/section-showcase.tsx +0 -63
  321. package/src/components/section/examples/section-usage.tsx +0 -19
  322. package/src/components/section/section.docs.tsx +0 -51
  323. package/src/components/secure-field/examples/secure-field-new-password.tsx +0 -56
  324. package/src/components/secure-field/examples/secure-field-reveal.tsx +0 -20
  325. package/src/components/secure-field/examples/secure-field-showcase.tsx +0 -62
  326. package/src/components/secure-field/examples/secure-field-usage.tsx +0 -19
  327. package/src/components/secure-field/secure-field.docs.tsx +0 -72
  328. package/src/components/segmented-control/examples/segmented-control-overflow.tsx +0 -28
  329. package/src/components/segmented-control/examples/segmented-control-showcase.tsx +0 -59
  330. package/src/components/segmented-control/examples/segmented-control-usage.tsx +0 -20
  331. package/src/components/segmented-control/examples/segmented-control-views.tsx +0 -32
  332. package/src/components/segmented-control/segmented-control.docs.tsx +0 -61
  333. package/src/components/sheet/examples/sheet-choices.tsx +0 -58
  334. package/src/components/sheet/examples/sheet-share.tsx +0 -51
  335. package/src/components/sheet/examples/sheet-showcase.tsx +0 -74
  336. package/src/components/sheet/examples/sheet-usage.tsx +0 -32
  337. package/src/components/sheet/sheet.docs.tsx +0 -75
  338. package/src/components/sidebar/examples/sidebar-groups.tsx +0 -133
  339. package/src/components/sidebar/examples/sidebar-showcase.tsx +0 -123
  340. package/src/components/sidebar/examples/sidebar-unread.tsx +0 -66
  341. package/src/components/sidebar/examples/sidebar-usage.tsx +0 -52
  342. package/src/components/sidebar/sidebar.docs.tsx +0 -135
  343. package/src/components/stat-tile/examples/stat-tile-filters.tsx +0 -32
  344. package/src/components/stat-tile/examples/stat-tile-grid.tsx +0 -21
  345. package/src/components/stat-tile/examples/stat-tile-showcase.tsx +0 -52
  346. package/src/components/stat-tile/examples/stat-tile-usage.tsx +0 -13
  347. package/src/components/stat-tile/stat-tile.docs.tsx +0 -60
  348. package/src/components/status-indicator/examples/status-indicator-live.tsx +0 -34
  349. package/src/components/status-indicator/examples/status-indicator-showcase.tsx +0 -39
  350. package/src/components/status-indicator/examples/status-indicator-states.tsx +0 -17
  351. package/src/components/status-indicator/examples/status-indicator-usage.tsx +0 -9
  352. package/src/components/status-indicator/status-indicator.docs.tsx +0 -43
  353. package/src/components/swatch-picker/examples/swatch-picker-accents.tsx +0 -42
  354. package/src/components/swatch-picker/examples/swatch-picker-labels.tsx +0 -45
  355. package/src/components/swatch-picker/examples/swatch-picker-showcase.tsx +0 -70
  356. package/src/components/swatch-picker/examples/swatch-picker-usage.tsx +0 -39
  357. package/src/components/swatch-picker/swatch-picker.docs.tsx +0 -60
  358. package/src/components/tab-bar/examples/tab-bar-five-tabs.tsx +0 -66
  359. package/src/components/tab-bar/examples/tab-bar-minimize.tsx +0 -71
  360. package/src/components/tab-bar/examples/tab-bar-showcase.tsx +0 -82
  361. package/src/components/tab-bar/examples/tab-bar-usage.tsx +0 -54
  362. package/src/components/tab-bar/tab-bar.docs.tsx +0 -136
  363. package/src/components/tab-view/examples/tab-view-keyboard.tsx +0 -39
  364. package/src/components/tab-view/examples/tab-view-settings.tsx +0 -56
  365. package/src/components/tab-view/examples/tab-view-showcase.tsx +0 -53
  366. package/src/components/tab-view/examples/tab-view-usage.tsx +0 -23
  367. package/src/components/tab-view/tab-view.docs.tsx +0 -77
  368. package/src/components/table/examples/table-empty.tsx +0 -53
  369. package/src/components/table/examples/table-invoices.tsx +0 -102
  370. package/src/components/table/examples/table-selection.tsx +0 -150
  371. package/src/components/table/examples/table-showcase.tsx +0 -115
  372. package/src/components/table/examples/table-usage.tsx +0 -67
  373. package/src/components/table/examples/table-wide.tsx +0 -75
  374. package/src/components/table/table.docs.tsx +0 -131
  375. package/src/components/text-editor/examples/text-editor-comment.tsx +0 -48
  376. package/src/components/text-editor/examples/text-editor-count.tsx +0 -38
  377. package/src/components/text-editor/examples/text-editor-showcase.tsx +0 -58
  378. package/src/components/text-editor/examples/text-editor-usage.tsx +0 -25
  379. package/src/components/text-editor/text-editor.docs.tsx +0 -61
  380. package/src/components/text-field/examples/text-field-icons.tsx +0 -72
  381. package/src/components/text-field/examples/text-field-showcase.tsx +0 -50
  382. package/src/components/text-field/examples/text-field-usage.tsx +0 -18
  383. package/src/components/text-field/examples/text-field-validation.tsx +0 -27
  384. package/src/components/text-field/text-field.docs.tsx +0 -118
  385. package/src/components/toast/examples/toast-action.tsx +0 -32
  386. package/src/components/toast/examples/toast-promise.tsx +0 -45
  387. package/src/components/toast/examples/toast-showcase.tsx +0 -49
  388. package/src/components/toast/examples/toast-usage.tsx +0 -13
  389. package/src/components/toast/toast.docs.tsx +0 -79
  390. package/src/components/toggle/examples/toggle-checkboxes.tsx +0 -43
  391. package/src/components/toggle/examples/toggle-settings.tsx +0 -31
  392. package/src/components/toggle/examples/toggle-showcase.tsx +0 -59
  393. package/src/components/toggle/examples/toggle-usage.tsx +0 -13
  394. package/src/components/toggle/toggle.docs.tsx +0 -69
  395. package/src/components/tooltip/examples/tooltip-icon-buttons.tsx +0 -27
  396. package/src/components/tooltip/examples/tooltip-shortcuts.tsx +0 -38
  397. package/src/components/tooltip/examples/tooltip-showcase.tsx +0 -44
  398. package/src/components/tooltip/examples/tooltip-usage.tsx +0 -13
  399. package/src/components/tooltip/tooltip.docs.tsx +0 -56
  400. package/src/components/view-controller/examples/view-controller-action.tsx +0 -27
  401. package/src/components/view-controller/examples/view-controller-settings.tsx +0 -31
  402. package/src/components/view-controller/examples/view-controller-showcase.tsx +0 -45
  403. package/src/components/view-controller/examples/view-controller-usage.tsx +0 -19
  404. package/src/components/view-controller/view-controller.docs.tsx +0 -71
  405. package/src/docs/index.ts +0 -3
  406. package/src/docs/registry.ts +0 -113
  407. package/src/docs/snippet.ts +0 -17
  408. package/src/docs/types.ts +0 -180
@@ -1,8 +1,4 @@
1
- import {
2
- AnimatePresence,
3
- motion,
4
- useReducedMotion,
5
- } from "motion/react"
1
+ import { AnimatePresence, motion, useReducedMotion } from "motion/react"
6
2
  import { type ReactNode, useRef } from "react"
7
3
  import { useVisualViewport } from "../../hooks/use-visual-viewport"
8
4
  import { cn } from "../../lib/class-names"
@@ -10,12 +6,19 @@ import { spring } from "../../motion/transitions"
10
6
  import { SheetPortal } from "./sheet-portal"
11
7
  import { useSheetFocus } from "./use-sheet-focus"
12
8
 
13
- interface SheetProps {
9
+ export type SheetPlacement = "adaptive" | "center"
10
+
11
+ export interface SheetProps {
12
+ /** Controls whether the sheet is presented. */
14
13
  open: boolean
14
+ /** Called on Escape or an outside press. */
15
15
  onClose: () => void
16
16
  /** Read out by screen readers as the sheet's name. */
17
17
  label: string
18
+ /** ID of a visible heading to use instead of label for the accessible name. */
18
19
  labelledBy?: string
20
+ /** `adaptive` rises from the bottom on phones; `center` always floats. @default "adaptive" */
21
+ placement?: SheetPlacement
19
22
  className?: string
20
23
  children: ReactNode
21
24
  }
@@ -40,6 +43,7 @@ function OpenSheet({
40
43
  onClose,
41
44
  label,
42
45
  labelledBy,
46
+ placement = "adaptive",
43
47
  className,
44
48
  children,
45
49
  }: Omit<SheetProps, "open">) {
@@ -51,8 +55,8 @@ function OpenSheet({
51
55
  return (
52
56
  <div
53
57
  className={cn(
54
- "fixed inset-0 z-[65] flex items-end justify-center",
55
- "sm:items-center sm:p-6"
58
+ "fixed inset-0 z-[65] flex justify-center",
59
+ placement === "center" ? "items-center p-6" : "items-end sm:items-center sm:p-6"
56
60
  )}
57
61
  style={
58
62
  viewport
@@ -85,25 +89,13 @@ function OpenSheet({
85
89
  className={cn(
86
90
  "glass-menu relative flex w-full flex-col overflow-hidden",
87
91
  "max-h-[92%] max-w-[560px]",
88
- "rounded-t-sheet sm:rounded-sheet",
92
+ placement === "center" ? "rounded-sheet" : "rounded-t-sheet sm:rounded-sheet",
89
93
  className
90
94
  )}
91
- initial={
92
- reducedMotion
93
- ? { opacity: 0 }
94
- : { y: 40, opacity: 0, scale: 0.98 }
95
- }
96
- animate={{ y: 0, opacity: 1, scale: 1 }}
97
- exit={
98
- reducedMotion
99
- ? { opacity: 0 }
100
- : { y: 30, opacity: 0 }
101
- }
102
- transition={
103
- reducedMotion
104
- ? { duration: 0 }
105
- : spring.smooth
106
- }
95
+ initial={reducedMotion ? { opacity: 0 } : { y: 40, opacity: 0 }}
96
+ animate={{ y: 0, opacity: 1 }}
97
+ exit={reducedMotion ? { opacity: 0 } : { y: 30, opacity: 0 }}
98
+ transition={reducedMotion ? { duration: 0 } : spring.smooth}
107
99
  >
108
100
  {children}
109
101
  </motion.div>
@@ -1,10 +1,4 @@
1
- import {
2
- type RefObject,
3
- useEffect,
4
- useLayoutEffect,
5
- useRef,
6
- useState,
7
- } from "react"
1
+ import { type RefObject, useEffect, useLayoutEffect, useRef, useState } from "react"
8
2
  import { ownsFloatingLayer } from "../../lib/floating-layers"
9
3
  import { enterModalEnvironment } from "./modal-environment"
10
4
 
@@ -19,12 +13,8 @@ const focusableSelector = [
19
13
  "[contenteditable=true]",
20
14
  ].join(",")
21
15
 
22
- function focusableElements(
23
- panel: HTMLElement
24
- ): HTMLElement[] {
25
- return Array.from(
26
- panel.querySelectorAll<HTMLElement>(focusableSelector)
27
- ).filter(
16
+ function focusableElements(panel: HTMLElement): HTMLElement[] {
17
+ return Array.from(panel.querySelectorAll<HTMLElement>(focusableSelector)).filter(
28
18
  (element) =>
29
19
  element.tabIndex >= 0 &&
30
20
  !element.matches(":disabled") &&
@@ -35,15 +25,10 @@ function focusableElements(
35
25
  }
36
26
 
37
27
  /** Keeps keyboard focus in the foremost sheet, including its floating pickers. */
38
- export function useSheetFocus(
39
- panel: RefObject<HTMLDivElement | null>,
40
- onClose: () => void
41
- ) {
28
+ export function useSheetFocus(panel: RefObject<HTMLDivElement | null>, onClose: () => void) {
42
29
  // Capture before children mount, since a child may use autoFocus.
43
30
  const [opener] = useState(() =>
44
- typeof document === "undefined"
45
- ? null
46
- : document.activeElement
31
+ typeof document === "undefined" ? null : document.activeElement
47
32
  )
48
33
  const close = useRef(onClose)
49
34
  useEffect(() => {
@@ -55,34 +40,22 @@ export function useSheetFocus(
55
40
  if (!surface) return
56
41
  sheets.push(surface)
57
42
  const foremost = () => sheets.at(-1) === surface
58
- const focusFirst = () =>
59
- (focusableElements(surface)[0] ?? surface).focus()
60
- const inFloatingLayer = (element: Element | null) =>
61
- ownsFloatingLayer(surface, element)
43
+ const focusFirst = () => (focusableElements(surface)[0] ?? surface).focus()
44
+ const inFloatingLayer = (element: Element | null) => ownsFloatingLayer(surface, element)
62
45
  const belongsToSheet = (element: Element | null) =>
63
- surface.contains(element) ||
64
- inFloatingLayer(element)
46
+ surface.contains(element) || inFloatingLayer(element)
65
47
 
66
- if (!surface.contains(document.activeElement))
67
- surface.focus({ preventScroll: true })
68
- const leaveModalEnvironment =
69
- enterModalEnvironment(surface)
48
+ if (!surface.contains(document.activeElement)) surface.focus({ preventScroll: true })
49
+ const leaveModalEnvironment = enterModalEnvironment(surface)
70
50
 
71
51
  const onFocus = (event: FocusEvent) => {
72
- if (
73
- foremost() &&
74
- !belongsToSheet(
75
- event.target as Element | null
76
- )
77
- )
78
- focusFirst()
52
+ if (foremost() && !belongsToSheet(event.target as Element | null)) focusFirst()
79
53
  }
80
54
  const onKey = (event: KeyboardEvent) => {
81
55
  if (!foremost() || event.defaultPrevented) return
82
56
  if (event.key === "Escape") {
83
57
  // Floating controls handle their own Escape before the sheet.
84
- if (inFloatingLayer(document.activeElement))
85
- return
58
+ if (inFloatingLayer(document.activeElement)) return
86
59
  event.preventDefault()
87
60
  event.stopPropagation()
88
61
  close.current()
@@ -94,17 +67,13 @@ export function useSheetFocus(
94
67
  const active = document.activeElement
95
68
  if (
96
69
  event.shiftKey &&
97
- (active === surface ||
98
- active === first ||
99
- !surface.contains(active))
70
+ (active === surface || active === first || !surface.contains(active))
100
71
  ) {
101
72
  event.preventDefault()
102
73
  last.focus()
103
74
  } else if (
104
75
  !event.shiftKey &&
105
- (active === last ||
106
- !surface.contains(active) ||
107
- active === surface)
76
+ (active === last || !surface.contains(active) || active === surface)
108
77
  ) {
109
78
  event.preventDefault()
110
79
  first.focus()
@@ -119,12 +88,7 @@ export function useSheetFocus(
119
88
  document.removeEventListener("focusin", onFocus)
120
89
  window.removeEventListener("keydown", onKey)
121
90
  leaveModalEnvironment()
122
- if (
123
- wasForemost &&
124
- opener instanceof HTMLElement &&
125
- opener.isConnected
126
- )
127
- opener.focus()
91
+ if (wasForemost && opener instanceof HTMLElement && opener.isConnected) opener.focus()
128
92
  }
129
93
  }, [panel, opener])
130
94
  }
@@ -1,64 +1,70 @@
1
- import type { ReactNode } from "react"
1
+ import { useId, type ReactNode } from "react"
2
2
  import { cn } from "../../lib/class-names"
3
3
 
4
- export function SidebarSection({
5
- title,
6
- children,
7
- }: {
4
+ export interface SidebarSectionProps {
5
+ /** Visible heading for this group of navigation rows. */
8
6
  title: string
9
7
  children: ReactNode
10
- }) {
8
+ }
9
+
10
+ export interface SidebarItemContentProps {
11
+ icon?: ReactNode
12
+ /** Optional trailing count. */
13
+ count?: number
14
+ /** Matches the router link's active state. */
15
+ active?: boolean
16
+ children: ReactNode
17
+ }
18
+
19
+ export function SidebarSection({ title, children }: SidebarSectionProps) {
20
+ const headingId = useId()
11
21
  return (
12
- <div className="flex flex-col gap-0.5">
13
- <span className="px-2.5 pb-1.5 text-caption font-semibold text-label-tertiary">
22
+ <section aria-labelledby={headingId} className="flex flex-col gap-0.5">
23
+ <h2
24
+ id={headingId}
25
+ className="px-2.5 pb-1.5 text-caption font-semibold text-label-tertiary"
26
+ >
14
27
  {title}
15
- </span>
28
+ </h2>
16
29
  {children}
17
- </div>
30
+ </section>
18
31
  )
19
32
  }
20
33
 
21
34
  /** Classes for a sidebar row; apply to the app's router link. */
22
- export function sidebarItemClass(active?: boolean): string {
35
+ export type SidebarDensity = "regular" | "compact"
36
+
37
+ export function sidebarItemClass(active?: boolean, density: SidebarDensity = "regular"): string {
23
38
  return cn(
24
- "group flex items-center gap-2.5 rounded-2xl px-2.5 py-[7px] text-subheadline text-label no-underline transition-colors duration-fast",
39
+ "group flex w-full items-center gap-2.5 text-label no-underline transition-colors duration-fast focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent-text",
40
+ density === "compact"
41
+ ? "min-h-8 rounded-lg px-2 py-1 text-footnote [@media(pointer:coarse)]:min-h-10"
42
+ : "rounded-2xl px-2.5 py-[7px] text-subheadline",
25
43
  active
26
- ? "bg-accent-soft font-medium text-label"
27
- : "hover:bg-fill/70"
44
+ ? "bg-fill font-medium"
45
+ : "font-normal text-label-secondary hover:bg-fill/70 hover:text-label"
28
46
  )
29
47
  }
30
48
 
31
- export function SidebarItemContent({
32
- icon,
33
- count,
34
- active,
35
- children,
36
- }: {
37
- icon: ReactNode
38
- count?: number
39
- active?: boolean
40
- children: ReactNode
41
- }) {
49
+ export function SidebarItemContent({ icon, count, active, children }: SidebarItemContentProps) {
42
50
  return (
43
51
  <>
44
- <span
45
- className={cn(
46
- "flex transition-colors",
47
- active
48
- ? "text-accent-text"
49
- : "text-label-secondary"
50
- )}
51
- >
52
- {icon}
53
- </span>
52
+ {icon && (
53
+ <span
54
+ className={cn(
55
+ "flex transition-colors",
56
+ active ? "text-accent-text" : "text-label-secondary"
57
+ )}
58
+ >
59
+ {icon}
60
+ </span>
61
+ )}
54
62
  <span className="grow truncate">{children}</span>
55
63
  {count !== undefined && (
56
64
  <span
57
65
  className={cn(
58
66
  "text-footnote tabular-nums",
59
- active
60
- ? "text-accent-text"
61
- : "text-label-tertiary"
67
+ active ? "text-accent-text" : "text-label-tertiary"
62
68
  )}
63
69
  >
64
70
  {count}
@@ -0,0 +1,19 @@
1
+ import type { ComponentProps } from "react"
2
+ import { cn } from "../../lib/class-names"
3
+
4
+ export interface SkeletonProps extends ComponentProps<"div"> {
5
+ label?: string
6
+ }
7
+ /** A loading placeholder that becomes still when Reduce Motion is enabled. */
8
+ export function Skeleton({ label, className, ...props }: SkeletonProps) {
9
+ return (
10
+ <div
11
+ {...props}
12
+ role={label ? "status" : undefined}
13
+ aria-hidden={label ? undefined : true}
14
+ className={cn("min-h-4 rounded-md bg-fill motion-safe:animate-pulse", className)}
15
+ >
16
+ {label && <span className="sr-only">{label}</span>}
17
+ </div>
18
+ )
19
+ }
@@ -0,0 +1,76 @@
1
+ import { type ComponentProps, useId } from "react"
2
+ import { cn } from "../../lib/class-names"
3
+ import { clampRange } from "../../lib/range-value"
4
+
5
+ export interface SliderProps
6
+ extends Omit<
7
+ ComponentProps<"input">,
8
+ "type" | "value" | "defaultValue" | "onChange" | "min" | "max" | "step"
9
+ > {
10
+ value: number
11
+ onChange: (value: number) => void
12
+ label: string
13
+ min?: number
14
+ max?: number
15
+ step?: number
16
+ description?: string
17
+ /** Provides a localized, spoken description of the current value. */
18
+ formatValue?: (value: number) => string
19
+ }
20
+
21
+ /** Native keyboard, touch and pointer behavior with Passui's control treatment. */
22
+ export function Slider({
23
+ value,
24
+ onChange,
25
+ label,
26
+ min = 0,
27
+ max = 100,
28
+ step = 1,
29
+ description,
30
+ formatValue,
31
+ id: suppliedId,
32
+ className,
33
+ disabled,
34
+ ...props
35
+ }: SliderProps) {
36
+ const generatedId = useId()
37
+ const id = suppliedId ?? generatedId
38
+ const upper = Math.max(min, max)
39
+ const current = clampRange(value, min, upper)
40
+
41
+ return (
42
+ <div className={cn("flex min-w-0 flex-col gap-2", disabled && "opacity-45")}>
43
+ <label htmlFor={id} className="text-subheadline font-semibold text-label">
44
+ {label}
45
+ </label>
46
+ <input
47
+ {...props}
48
+ id={id}
49
+ type="range"
50
+ min={min}
51
+ max={upper}
52
+ step={step > 0 ? step : 1}
53
+ value={current}
54
+ disabled={disabled || upper === min}
55
+ aria-valuetext={formatValue?.(current)}
56
+ aria-describedby={description ? `${id}-description` : undefined}
57
+ onChange={(event) => onChange(Number(event.currentTarget.value))}
58
+ className={cn(
59
+ "h-11 w-full min-w-0 cursor-pointer appearance-none bg-transparent accent-accent",
60
+ "focus-visible:rounded-lg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent-text",
61
+ "[&::-webkit-slider-runnable-track]:h-1.5 [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-separator",
62
+ "[&::-webkit-slider-thumb]:-mt-[7px] [&::-webkit-slider-thumb]:size-5 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-accent [&::-webkit-slider-thumb]:bg-elevated [&::-webkit-slider-thumb]:shadow-sm",
63
+ "[&::-moz-range-track]:h-1.5 [&::-moz-range-track]:rounded-full [&::-moz-range-track]:bg-separator",
64
+ "[&::-moz-range-progress]:h-1.5 [&::-moz-range-progress]:rounded-full [&::-moz-range-progress]:bg-accent",
65
+ "[&::-moz-range-thumb]:size-4 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-accent [&::-moz-range-thumb]:bg-elevated",
66
+ className
67
+ )}
68
+ />
69
+ {description && (
70
+ <p id={`${id}-description`} className="text-footnote text-label-secondary">
71
+ {description}
72
+ </p>
73
+ )}
74
+ </div>
75
+ )
76
+ }
@@ -0,0 +1,42 @@
1
+ import { clampRange } from "../../lib/range-value"
2
+
3
+ export interface LiquidState {
4
+ fill: number
5
+ velocity: number
6
+ }
7
+
8
+ /** Bencho's frame-normalized liquid spring. See THIRD_PARTY_NOTICES.md. */
9
+ export function stepLiquid(
10
+ state: LiquidState,
11
+ target: number,
12
+ viscosity: number,
13
+ dt: number
14
+ ): LiquidState {
15
+ const soft = clampRange(viscosity, 0, 100) / 100
16
+ target = clampRange(target, 0, 100)
17
+ dt = clampRange(dt, 0, 2.5)
18
+ if (soft === 0) {
19
+ /* 0 is an ordinary slider and has to be exactly that,
20
+ not a very stiff spring that still rings. */
21
+ return { fill: target, velocity: 0 }
22
+ }
23
+ /* Stiffness falls and damping rises together: thin liquid is slow to
24
+ answer and slow to forget, which is why these are one knob. */
25
+ const stiff = 0.34 - soft * 0.29
26
+ const damp = 0.74 + soft * 0.22
27
+ let velocity = (state.velocity + (target - state.fill) * stiff * dt) * damp ** dt
28
+ let fill = state.fill + velocity * dt
29
+ /* The end stop is a wall, and a wall gives some back. Without this
30
+ the overshoot is swallowed exactly where you are looking at it. */
31
+ if (fill > 100) {
32
+ fill = 100
33
+ velocity = -velocity * 0.42
34
+ }
35
+ if (fill < 0) {
36
+ fill = 0
37
+ velocity = -velocity * 0.42
38
+ }
39
+ if (Math.abs(target - fill) < 0.02 && Math.abs(velocity) < 0.02)
40
+ return { fill: target, velocity: 0 }
41
+ return { fill, velocity }
42
+ }