@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,24 +1,11 @@
1
- import {
2
- AnimatePresence,
3
- motion,
4
- useReducedMotion,
5
- } from "motion/react"
6
- import {
7
- type KeyboardEvent,
8
- useEffect,
9
- useId,
10
- useLayoutEffect,
11
- useRef,
12
- useState,
13
- } from "react"
1
+ import { useAnchoredDisclosure } from "../../hooks/use-anchored-disclosure"
2
+ import { AnchoredSurface } from "../popover/anchored-surface"
3
+ import { type KeyboardEvent, useEffect, useId, useRef } from "react"
14
4
  import { createPortal } from "react-dom"
15
- import { FLOATING_LAYER } from "../../hooks/use-dismiss"
16
5
  import { ClockIcon } from "../../icons/icons"
17
- import { useAnchoredPlacement } from "../../hooks/use-anchored-placement"
18
6
  import { cn } from "../../lib/class-names"
19
- import { registerFloatingLayer } from "../../lib/floating-layers"
20
7
  import { haptic } from "../../lib/haptics"
21
- import { spring } from "../../motion/transitions"
8
+ import { pickerTriggerStyle } from "../picker/picker-trigger"
22
9
  import {
23
10
  formatTime,
24
11
  fromTwelveHours,
@@ -42,6 +29,8 @@ export interface CompactTimePickerProps {
42
29
  placeholder?: string
43
30
  labels: { hour: string; minute: string; period: string }
44
31
  className?: string
32
+ /** Prevents opening the time panel. @default false */
33
+ disabled?: boolean
45
34
  }
46
35
 
47
36
  /**
@@ -58,8 +47,10 @@ export function CompactTimePicker({
58
47
  placeholder,
59
48
  labels,
60
49
  className,
50
+ disabled = false,
61
51
  }: CompactTimePickerProps) {
62
- const [open, setOpen] = useState(false)
52
+ const panel = useAnchoredDisclosure(disabled)
53
+ const { open } = panel
63
54
  const trigger = useRef<HTMLButtonElement>(null)
64
55
  const panelId = useId()
65
56
  const chosen = parseTime(value)
@@ -68,17 +59,7 @@ export function CompactTimePicker({
68
59
  hour: "numeric",
69
60
  minute: "2-digit",
70
61
  timeZone: "UTC",
71
- }).format(
72
- new Date(
73
- Date.UTC(
74
- 2000,
75
- 0,
76
- 1,
77
- chosen.hour,
78
- chosen.minute
79
- )
80
- )
81
- )
62
+ }).format(new Date(Date.UTC(2000, 0, 1, chosen.hour, chosen.minute)))
82
63
  : (placeholder ?? "")
83
64
 
84
65
  return (
@@ -86,17 +67,13 @@ export function CompactTimePicker({
86
67
  <button
87
68
  ref={trigger}
88
69
  type="button"
89
- aria-label={
90
- chosen ? `${label}, ${shown}` : label
91
- }
70
+ aria-label={chosen ? `${label}, ${shown}` : label}
92
71
  aria-haspopup="dialog"
93
- aria-expanded={open}
94
- aria-controls={open ? panelId : undefined}
95
- onClick={() => setOpen((current) => !current)}
96
- className={cn(
97
- "flex w-full min-w-0 items-center gap-2 rounded-lg control-field px-3 py-2 text-start text-subheadline text-label",
98
- className
99
- )}
72
+ aria-expanded={open && !disabled}
73
+ aria-controls={open && !disabled ? panelId : undefined}
74
+ disabled={disabled}
75
+ onClick={() => panel.toggle()}
76
+ className={pickerTriggerStyle(className)}
100
77
  >
101
78
  <span
102
79
  className={cn(
@@ -106,39 +83,36 @@ export function CompactTimePicker({
106
83
  >
107
84
  {shown}
108
85
  </span>
109
- <ClockIcon
110
- size={16}
111
- className="shrink-0 text-label-tertiary"
112
- />
86
+ <ClockIcon size={16} className="shrink-0 text-label-tertiary" />
113
87
  </button>
114
88
  {typeof document !== "undefined" &&
115
89
  createPortal(
116
- <AnimatePresence>
117
- {open && trigger.current && (
118
- <TimeColumns
119
- id={panelId}
120
- anchor={trigger.current}
121
- label={label}
122
- locale={locale}
123
- time={
124
- chosen ?? {
125
- hour: 9,
126
- minute: 0,
127
- }
90
+ panel.mounted && trigger.current ? (
91
+ <TimeColumns
92
+ open={open}
93
+ onExited={panel.onExited}
94
+ id={panelId}
95
+ anchor={trigger.current}
96
+ label={label}
97
+ locale={locale}
98
+ time={
99
+ chosen ?? {
100
+ hour: 9,
101
+ minute: 0,
128
102
  }
129
- minuteStep={minuteStep}
130
- labels={labels}
131
- onChange={(next) => {
132
- haptic("selection")
133
- onChange(formatTime(next))
134
- }}
135
- onClose={() => {
136
- setOpen(false)
137
- trigger.current?.focus()
138
- }}
139
- />
140
- )}
141
- </AnimatePresence>,
103
+ }
104
+ minuteStep={minuteStep}
105
+ labels={labels}
106
+ onChange={(next) => {
107
+ haptic("selection")
108
+ onChange(formatTime(next))
109
+ }}
110
+ onClose={(restoreFocus) => {
111
+ panel.close()
112
+ if (restoreFocus) trigger.current?.focus({ preventScroll: true })
113
+ }}
114
+ />
115
+ ) : null,
142
116
  document.body
143
117
  )}
144
118
  </>
@@ -151,6 +125,8 @@ interface ColumnItem {
151
125
  }
152
126
 
153
127
  function TimeColumns({
128
+ open,
129
+ onExited,
154
130
  id,
155
131
  anchor,
156
132
  label,
@@ -161,6 +137,8 @@ function TimeColumns({
161
137
  onChange,
162
138
  onClose,
163
139
  }: {
140
+ open: boolean
141
+ onExited: () => void
164
142
  id: string
165
143
  anchor: HTMLElement
166
144
  label: string
@@ -169,16 +147,10 @@ function TimeColumns({
169
147
  minuteStep: number
170
148
  labels: CompactTimePickerProps["labels"]
171
149
  onChange: (time: TimeOfDay) => void
172
- onClose: () => void
150
+ onClose: (restoreFocus: boolean) => void
173
151
  }) {
174
152
  const root = useRef<HTMLDivElement>(null)
175
- const reducedMotion = useReducedMotion()
176
153
  const twelve = usesTwelveHours(locale)
177
- const placement = useAnchoredPlacement(
178
- anchor,
179
- twelve ? 240 : 180,
180
- 280
181
- )
182
154
  const number = new Intl.NumberFormat(locale, {
183
155
  minimumIntegerDigits: 2,
184
156
  })
@@ -186,20 +158,15 @@ function TimeColumns({
186
158
  const clock = toTwelveHours(time.hour)
187
159
 
188
160
  const hours: ColumnItem[] = twelve
189
- ? [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(
190
- (hour) => ({
191
- key: hour,
192
- text: plain.format(hour),
193
- })
194
- )
161
+ ? [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((hour) => ({
162
+ key: hour,
163
+ text: plain.format(hour),
164
+ }))
195
165
  : Array.from({ length: 24 }, (_, hour) => ({
196
166
  key: hour,
197
167
  text: number.format(hour),
198
168
  }))
199
- const minutes = minuteChoices(
200
- minuteStep,
201
- time.minute
202
- ).map((minute) => ({
169
+ const minutes = minuteChoices(minuteStep, time.minute).map((minute) => ({
203
170
  key: minute,
204
171
  text: number.format(minute),
205
172
  }))
@@ -210,88 +177,31 @@ function TimeColumns({
210
177
  hour12: true,
211
178
  timeZone: "UTC",
212
179
  })
213
- .formatToParts(
214
- new Date(Date.UTC(2000, 0, 1, pm ? 13 : 1))
215
- )
216
- .find((part) => part.type === "dayPeriod")
217
- ?.value ?? (pm ? "PM" : "AM")
180
+ .formatToParts(new Date(Date.UTC(2000, 0, 1, pm ? 13 : 1)))
181
+ .find((part) => part.type === "dayPeriod")?.value ?? (pm ? "PM" : "AM")
218
182
  const periods = [
219
183
  { key: 0, text: periodName(false) },
220
184
  { key: 1, text: periodName(true) },
221
185
  ]
222
186
 
223
- useLayoutEffect(() => {
224
- if (!root.current) return
225
- return registerFloatingLayer(root.current, anchor)
226
- }, [anchor])
227
-
228
- useEffect(() => {
229
- const onPointer = (event: PointerEvent) => {
230
- const target = event.target as Node
231
- if (
232
- !root.current?.contains(target) &&
233
- !anchor.contains(target)
234
- )
235
- onClose()
236
- }
237
- document.addEventListener("pointerdown", onPointer)
238
- return () =>
239
- document.removeEventListener(
240
- "pointerdown",
241
- onPointer
242
- )
243
- }, [anchor, onClose])
244
-
245
187
  return (
246
- <motion.div
188
+ <AnchoredSurface
189
+ open={open}
190
+ onExited={onExited}
247
191
  ref={root}
192
+ anchor={anchor}
193
+ width={twelve ? 240 : 180}
194
+ needed={280}
195
+ onClose={onClose}
248
196
  id={id}
249
197
  role="dialog"
250
198
  aria-label={label}
251
- initial={
252
- reducedMotion
253
- ? { opacity: 0 }
254
- : {
255
- opacity: 0,
256
- scale: 0.96,
257
- y: placement.above ? 6 : -6,
258
- }
259
- }
260
- animate={{ opacity: 1, scale: 1, y: 0 }}
261
- exit={
262
- reducedMotion
263
- ? { opacity: 0 }
264
- : {
265
- opacity: 0,
266
- scale: 0.98,
267
- transition: { duration: 0.1 },
268
- }
269
- }
270
- transition={
271
- reducedMotion
272
- ? { duration: 0 }
273
- : spring.smooth
274
- }
275
- style={{
276
- left: placement.left,
277
- width: placement.width,
278
- top: placement.top,
279
- bottom: placement.bottom,
280
- maxHeight: placement.maxHeight,
281
- overflowY: placement.maxHeight
282
- ? "auto"
283
- : undefined,
284
- transformOrigin: placement.above
285
- ? "50% 100%"
286
- : "50% 0%",
287
- }}
288
- className="glass-menu fixed z-[80] flex gap-1 rounded-3xl p-2"
289
- {...{ [FLOATING_LAYER]: "" }}
199
+ contentClassName="flex-row gap-1 overflow-hidden p-2"
290
200
  onKeyDown={(event) => {
291
201
  if (event.key !== "Escape") return
292
202
  event.preventDefault()
293
203
  event.stopPropagation()
294
- onClose()
204
+ onClose(true)
295
205
  }}
296
206
  >
297
207
  <Column
@@ -302,9 +212,7 @@ function TimeColumns({
302
212
  onSelect={(hour) =>
303
213
  onChange({
304
214
  ...time,
305
- hour: twelve
306
- ? fromTwelveHours(hour, clock.pm)
307
- : hour,
215
+ hour: twelve ? fromTwelveHours(hour, clock.pm) : hour,
308
216
  })
309
217
  }
310
218
  />
@@ -312,9 +220,7 @@ function TimeColumns({
312
220
  label={labels.minute}
313
221
  items={minutes}
314
222
  selected={time.minute}
315
- onSelect={(minute) =>
316
- onChange({ ...time, minute })
317
- }
223
+ onSelect={(minute) => onChange({ ...time, minute })}
318
224
  />
319
225
  {twelve && (
320
226
  <Column
@@ -324,15 +230,12 @@ function TimeColumns({
324
230
  onSelect={(period) =>
325
231
  onChange({
326
232
  ...time,
327
- hour: fromTwelveHours(
328
- clock.hour,
329
- period === 1
330
- ),
233
+ hour: fromTwelveHours(clock.hour, period === 1),
331
234
  })
332
235
  }
333
236
  />
334
237
  )}
335
- </motion.div>
238
+ </AnchoredSurface>
336
239
  )
337
240
  }
338
241
 
@@ -354,45 +257,21 @@ function Column({
354
257
 
355
258
  // The chosen item starts in the middle of the column, then follows changes.
356
259
  useEffect(() => {
357
- const element =
358
- list.current?.querySelector<HTMLElement>(
359
- `[data-key="${selected}"]`
360
- )
260
+ const element = list.current?.querySelector<HTMLElement>(`[data-key="${selected}"]`)
361
261
  element?.scrollIntoView({ block: "center" })
362
- if (
363
- autoFocus &&
364
- list.current?.contains(document.activeElement) ===
365
- false
366
- )
367
- element?.focus()
262
+ if (autoFocus && list.current?.contains(document.activeElement) === false) element?.focus()
368
263
  }, [selected, autoFocus])
369
264
 
370
- const onKeyDown = (
371
- event: KeyboardEvent<HTMLDivElement>
372
- ) => {
373
- const step =
374
- event.key === "ArrowDown"
375
- ? 1
376
- : event.key === "ArrowUp"
377
- ? -1
378
- : 0
265
+ const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {
266
+ const step = event.key === "ArrowDown" ? 1 : event.key === "ArrowUp" ? -1 : 0
379
267
  if (!step) return
380
268
  event.preventDefault()
381
- const index = items.findIndex(
382
- (item) => item.key === selected
383
- )
384
- const next =
385
- items[
386
- (index + step + items.length) % items.length
387
- ]
269
+ const index = items.findIndex((item) => item.key === selected)
270
+ const next = items[(index + step + items.length) % items.length]
388
271
  if (!next) return
389
272
  onSelect(next.key)
390
273
  requestAnimationFrame(() =>
391
- list.current
392
- ?.querySelector<HTMLElement>(
393
- `[data-key="${next.key}"]`
394
- )
395
- ?.focus()
274
+ list.current?.querySelector<HTMLElement>(`[data-key="${next.key}"]`)?.focus()
396
275
  )
397
276
  }
398
277
 
@@ -13,10 +13,7 @@ export function parseTime(value: string): TimeOfDay | null {
13
13
  return hour < 24 && minute < 60 ? { hour, minute } : null
14
14
  }
15
15
 
16
- export function formatTime({
17
- hour,
18
- minute,
19
- }: TimeOfDay): string {
16
+ export function formatTime({ hour, minute }: TimeOfDay): string {
20
17
  return `${String(hour).padStart(2, "0")}:${String(minute).padStart(2, "0")}`
21
18
  }
22
19
 
@@ -43,22 +40,13 @@ export function toTwelveHours(hour: number): {
43
40
  }
44
41
  }
45
42
 
46
- export function fromTwelveHours(
47
- hour: number,
48
- pm: boolean
49
- ): number {
43
+ export function fromTwelveHours(hour: number, pm: boolean): number {
50
44
  return (hour % 12) + (pm ? 12 : 0)
51
45
  }
52
46
 
53
47
  /** Minutes offered in steps of `step`, keeping `current` when it falls between them. */
54
- export function minuteChoices(
55
- step: number,
56
- current?: number
57
- ): number[] {
58
- const choices = Array.from(
59
- { length: Math.ceil(60 / step) },
60
- (_, index) => index * step
61
- )
48
+ export function minuteChoices(step: number, current?: number): number[] {
49
+ const choices = Array.from({ length: Math.ceil(60 / step) }, (_, index) => index * step)
62
50
  if (current !== undefined && !choices.includes(current)) {
63
51
  choices.push(current)
64
52
  choices.sort((a, b) => a - b)
@@ -0,0 +1,37 @@
1
+ import type { ReactNode, ComponentProps } from "react"
2
+ import { cn } from "../../lib/class-names"
3
+
4
+ export interface ContentUnavailableViewProps extends Omit<ComponentProps<"div">, "title"> {
5
+ title: string
6
+ description?: string
7
+ icon?: ReactNode
8
+ actions?: ReactNode
9
+ }
10
+
11
+ /** A focused empty or unavailable state with an optional next action. */
12
+ export function ContentUnavailableView({
13
+ title,
14
+ description,
15
+ icon,
16
+ actions,
17
+ className,
18
+ ...props
19
+ }: ContentUnavailableViewProps) {
20
+ return (
21
+ <div
22
+ {...props}
23
+ className={cn("flex flex-col items-center gap-3 px-6 py-10 text-center", className)}
24
+ >
25
+ {icon && (
26
+ <span aria-hidden="true" className="text-label-tertiary">
27
+ {icon}
28
+ </span>
29
+ )}
30
+ <p className="text-headline font-semibold text-label">{title}</p>
31
+ {description && (
32
+ <p className="max-w-sm text-footnote text-label-secondary">{description}</p>
33
+ )}
34
+ {actions && <div className="mt-1 flex flex-wrap justify-center gap-2">{actions}</div>}
35
+ </div>
36
+ )
37
+ }
@@ -1,17 +1,12 @@
1
- import type {
2
- ComponentPropsWithoutRef,
3
- PropsWithChildren,
4
- ReactNode,
5
- } from "react"
1
+ import type { ComponentPropsWithoutRef, PropsWithChildren, ReactNode } from "react"
6
2
  import { cn } from "../../lib/class-names"
7
3
 
8
4
  export type ContentViewVariant = keyof typeof variants
9
5
  export type ContentViewHeadingLevel = "h1" | "h2" | "h3"
10
6
 
11
- type ContentViewProps =
12
- ComponentPropsWithoutRef<"section"> & {
13
- variant?: ContentViewVariant
14
- }
7
+ type ContentViewProps = ComponentPropsWithoutRef<"section"> & {
8
+ variant?: ContentViewVariant
9
+ }
15
10
 
16
11
  type RowProps = ComponentPropsWithoutRef<"div">
17
12
 
@@ -48,10 +43,7 @@ export function ContentView({
48
43
  ...props
49
44
  }: ContentViewProps) {
50
45
  return (
51
- <section
52
- className={cn(variants[variant], className)}
53
- {...props}
54
- >
46
+ <section className={cn(variants[variant], className)} {...props}>
55
47
  {children}
56
48
  </section>
57
49
  )
@@ -59,25 +51,15 @@ export function ContentView({
59
51
 
60
52
  function Row({ className, children, ...props }: RowProps) {
61
53
  return (
62
- <div
63
- className={cn("flex items-center", className)}
64
- {...props}
65
- >
54
+ <div className={cn("flex items-center", className)} {...props}>
66
55
  {children}
67
56
  </div>
68
57
  )
69
58
  }
70
59
 
71
- function Section({
72
- className,
73
- children,
74
- ...props
75
- }: SectionProps) {
60
+ function Section({ className, children, ...props }: SectionProps) {
76
61
  return (
77
- <section
78
- className={cn("flex flex-col gap-3", className)}
79
- {...props}
80
- >
62
+ <section className={cn("flex flex-col gap-3", className)} {...props}>
81
63
  {children}
82
64
  </section>
83
65
  )
@@ -95,9 +77,7 @@ function Header({
95
77
  children,
96
78
  }: HeaderProps) {
97
79
  const title = (
98
- <Tag
99
- className={cn(icon && "flex items-center gap-2")}
100
- >
80
+ <Tag className={cn(icon && "flex items-center gap-2")}>
101
81
  {icon}
102
82
  {heading}
103
83
  </Tag>
@@ -106,12 +86,7 @@ function Header({
106
86
  return (
107
87
  <div className={className}>
108
88
  {action ? (
109
- <div
110
- className={cn(
111
- "flex items-center gap-3",
112
- actionClassName
113
- )}
114
- >
89
+ <div className={cn("flex items-center gap-3", actionClassName)}>
115
90
  {title}
116
91
  {action}
117
92
  </div>
@@ -146,13 +121,7 @@ function H2({ className, children, ...props }: H2Props) {
146
121
 
147
122
  function P({ className, children, ...props }: PProps) {
148
123
  return (
149
- <p
150
- className={cn(
151
- "leading-tight font-medium",
152
- className
153
- )}
154
- {...props}
155
- >
124
+ <p className={cn("leading-tight font-medium", className)} {...props}>
156
125
  {children}
157
126
  </p>
158
127
  )
@@ -160,13 +129,7 @@ function P({ className, children, ...props }: PProps) {
160
129
 
161
130
  function Span({ className, children, ...props }: SpanProps) {
162
131
  return (
163
- <span
164
- className={cn(
165
- "text-callout tracking-tighter font-light",
166
- className
167
- )}
168
- {...props}
169
- >
132
+ <span className={cn("text-callout tracking-tighter font-light", className)} {...props}>
170
133
  {children}
171
134
  </span>
172
135
  )
@@ -174,13 +137,7 @@ function Span({ className, children, ...props }: SpanProps) {
174
137
 
175
138
  function Sub({ className, children, ...props }: SubProps) {
176
139
  return (
177
- <sub
178
- className={cn(
179
- "text-subheadline text-label",
180
- className
181
- )}
182
- {...props}
183
- >
140
+ <sub className={cn("text-subheadline text-label", className)} {...props}>
184
141
  {children}
185
142
  </sub>
186
143
  )
@@ -6,10 +6,7 @@ type ConcealedSource = {
6
6
  const sources = new WeakMap<HTMLElement, ConcealedSource>()
7
7
 
8
8
  /** Follow-up menus share ownership until the last surface finishes closing. */
9
- export function concealMenuSource(
10
- element: HTMLElement,
11
- inert: boolean
12
- ) {
9
+ export function concealMenuSource(element: HTMLElement, inert: boolean) {
13
10
  const state = sources.get(element) ?? {
14
11
  count: 0,
15
12
  opacity: element.style.opacity,