@sovereignfs/ui 0.54.0 → 0.89.1

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 (473) hide show
  1. package/LICENSE +373 -661
  2. package/NOTICE +8 -0
  3. package/README.md +4 -6
  4. package/dist/Accordion.module.css +1 -1
  5. package/dist/Alert.module.css +1 -1
  6. package/dist/AppsLauncher.module.css +102 -0
  7. package/dist/Avatar.module.css +1 -1
  8. package/dist/Badge.module.css +30 -7
  9. package/dist/BalanceChip.module.css +1 -1
  10. package/dist/Button.module.css +23 -2
  11. package/dist/Card.module.css +7 -1
  12. package/dist/CardTile.module.css +187 -0
  13. package/dist/CheckableListRow.module.css +8 -0
  14. package/dist/Checkbox.module.css +8 -0
  15. package/dist/CodeTextarea.module.css +7 -1
  16. package/dist/Collapsible.module.css +1 -1
  17. package/dist/ColorPicker.module.css +138 -0
  18. package/dist/Combobox.module.css +8 -2
  19. package/dist/Command.module.css +7 -1
  20. package/dist/ConfirmDialog.module.css +8 -2
  21. package/dist/ConsentPrompt.module.css +21 -0
  22. package/dist/DatePicker.module.css +7 -1
  23. package/dist/Dialog.module.css +130 -21
  24. package/dist/DragHandleRow.module.css +6 -0
  25. package/dist/Drawer.module.css +36 -7
  26. package/dist/FileDropzone.module.css +25 -1
  27. package/dist/Header.module.css +68 -0
  28. package/dist/HeaderFooterLayout.module.css +21 -0
  29. package/dist/IconPicker.module.css +15 -5
  30. package/dist/Input.module.css +7 -1
  31. package/dist/Kbd.module.css +1 -1
  32. package/dist/LegalLinks.module.css +9 -2
  33. package/dist/Markdown.module.css +29 -0
  34. package/dist/Menu.module.css +1 -0
  35. package/dist/Message.module.css +10 -1
  36. package/dist/MessageScroller.module.css +12 -1
  37. package/dist/MobileAppsDrawer.module.css +19 -14
  38. package/dist/MobileFooter.module.css +7 -1
  39. package/dist/MobileHeader.module.css +14 -1
  40. package/dist/NavList.module.css +139 -0
  41. package/dist/NavTabs.module.css +8 -2
  42. package/dist/NotificationsPanel.module.css +268 -0
  43. package/dist/OverlayHeader.module.css +1 -1
  44. package/dist/PageContainer.module.css +62 -0
  45. package/dist/PageHeader.module.css +54 -0
  46. package/dist/PageLayout.module.css +51 -0
  47. package/dist/Popover.module.css +1 -1
  48. package/dist/QrCode.module.css +17 -0
  49. package/dist/QuantityStepper.module.css +5 -3
  50. package/dist/RadioGroup.module.css +6 -0
  51. package/dist/Resizable.module.css +3 -3
  52. package/dist/RootLayout.module.css +12 -0
  53. package/dist/SegmentedControl.module.css +7 -1
  54. package/dist/Select.module.css +7 -1
  55. package/dist/Sheet.module.css +20 -2
  56. package/dist/SplitPane.module.css +5 -5
  57. package/dist/StatusBadge.module.css +1 -1
  58. package/dist/StepStrip.module.css +55 -0
  59. package/dist/SuggestionInput.module.css +14 -3
  60. package/dist/SwipableMobileCarousel.module.css +12 -3
  61. package/dist/SwipableMobileCarouselDots.module.css +21 -0
  62. package/dist/SwipeStack.module.css +101 -0
  63. package/dist/SystemBanner.module.css +16 -0
  64. package/dist/Table.module.css +2 -2
  65. package/dist/Tabs.module.css +7 -1
  66. package/dist/TagInput.module.css +8 -2
  67. package/dist/Textarea.module.css +15 -1
  68. package/dist/ThreeColumnLayout.module.css +35 -0
  69. package/dist/Toast.module.css +67 -3
  70. package/dist/Toggle.module.css +7 -0
  71. package/dist/Tooltip.module.css +7 -1
  72. package/dist/UserMenu.module.css +95 -0
  73. package/dist/fonts/OFL.txt +93 -0
  74. package/dist/fonts/hanken-grotesk-cyrillic-ext-wght-normal.woff2 +0 -0
  75. package/dist/fonts/hanken-grotesk-latin-ext-wght-normal.woff2 +0 -0
  76. package/dist/fonts/hanken-grotesk-latin-wght-normal.woff2 +0 -0
  77. package/dist/fonts/hanken-grotesk-vietnamese-wght-normal.woff2 +0 -0
  78. package/dist/index.d.ts +1156 -76
  79. package/dist/index.js +4223 -1513
  80. package/dist/tokens/fonts.css +53 -0
  81. package/dist/tokens/primitives.css +23 -12
  82. package/dist/tokens/semantic.css +32 -0
  83. package/dist/tokens/theme-presets.css +33 -0
  84. package/dist/tokens.css +2 -1
  85. package/package.json +46 -19
  86. package/src/__tests__/motion.test.tsx +0 -105
  87. package/src/components/Accordion/Accordion.module.css +0 -3
  88. package/src/components/Accordion/Accordion.stories.tsx +0 -110
  89. package/src/components/Accordion/Accordion.tsx +0 -53
  90. package/src/components/Accordion/__tests__/Accordion.test.tsx +0 -61
  91. package/src/components/Alert/Alert.module.css +0 -62
  92. package/src/components/Alert/Alert.stories.tsx +0 -96
  93. package/src/components/Alert/Alert.tsx +0 -58
  94. package/src/components/Alert/__tests__/Alert.test.tsx +0 -75
  95. package/src/components/AspectRatio/AspectRatio.module.css +0 -15
  96. package/src/components/AspectRatio/AspectRatio.stories.tsx +0 -78
  97. package/src/components/AspectRatio/AspectRatio.tsx +0 -21
  98. package/src/components/AspectRatio/__tests__/AspectRatio.test.tsx +0 -27
  99. package/src/components/Avatar/Avatar.module.css +0 -38
  100. package/src/components/Avatar/Avatar.tsx +0 -42
  101. package/src/components/Badge/Badge.module.css +0 -154
  102. package/src/components/Badge/Badge.stories.tsx +0 -226
  103. package/src/components/Badge/Badge.tsx +0 -81
  104. package/src/components/Badge/__tests__/Badge.test.tsx +0 -88
  105. package/src/components/BalanceChip/BalanceChip.module.css +0 -32
  106. package/src/components/BalanceChip/BalanceChip.stories.tsx +0 -45
  107. package/src/components/BalanceChip/BalanceChip.tsx +0 -33
  108. package/src/components/Breadcrumb/Breadcrumb.module.css +0 -49
  109. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +0 -47
  110. package/src/components/Breadcrumb/Breadcrumb.tsx +0 -57
  111. package/src/components/Breadcrumb/__tests__/Breadcrumb.test.tsx +0 -52
  112. package/src/components/Button/Button.module.css +0 -153
  113. package/src/components/Button/Button.stories.tsx +0 -83
  114. package/src/components/Button/Button.tsx +0 -52
  115. package/src/components/Button/__tests__/Button.test.tsx +0 -66
  116. package/src/components/ButtonGroup/ButtonGroup.module.css +0 -29
  117. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +0 -57
  118. package/src/components/ButtonGroup/ButtonGroup.tsx +0 -27
  119. package/src/components/ButtonGroup/__tests__/ButtonGroup.test.tsx +0 -29
  120. package/src/components/Calendar/Calendar.module.css +0 -126
  121. package/src/components/Calendar/Calendar.tsx +0 -213
  122. package/src/components/Calendar/__tests__/Calendar.test.tsx +0 -98
  123. package/src/components/Calendar/dateUtils.ts +0 -97
  124. package/src/components/Card/Card.module.css +0 -42
  125. package/src/components/Card/Card.tsx +0 -34
  126. package/src/components/CheckableListRow/CheckableListRow.module.css +0 -95
  127. package/src/components/CheckableListRow/CheckableListRow.stories.tsx +0 -99
  128. package/src/components/CheckableListRow/CheckableListRow.tsx +0 -89
  129. package/src/components/Checkbox/Checkbox.module.css +0 -111
  130. package/src/components/Checkbox/Checkbox.tsx +0 -78
  131. package/src/components/CodeTextarea/CodeTextarea.module.css +0 -53
  132. package/src/components/CodeTextarea/CodeTextarea.stories.tsx +0 -77
  133. package/src/components/CodeTextarea/CodeTextarea.tsx +0 -36
  134. package/src/components/Collapsible/Collapsible.module.css +0 -70
  135. package/src/components/Collapsible/Collapsible.stories.tsx +0 -62
  136. package/src/components/Collapsible/Collapsible.tsx +0 -66
  137. package/src/components/Collapsible/__tests__/Collapsible.test.tsx +0 -71
  138. package/src/components/Combobox/Combobox.module.css +0 -122
  139. package/src/components/Combobox/Combobox.stories.tsx +0 -79
  140. package/src/components/Combobox/Combobox.tsx +0 -186
  141. package/src/components/Combobox/__tests__/Combobox.test.tsx +0 -158
  142. package/src/components/Command/Command.module.css +0 -80
  143. package/src/components/Command/Command.stories.tsx +0 -104
  144. package/src/components/Command/Command.tsx +0 -168
  145. package/src/components/Command/__tests__/Command.test.tsx +0 -162
  146. package/src/components/ConfirmDialog/ConfirmDialog.module.css +0 -113
  147. package/src/components/ConfirmDialog/ConfirmDialog.tsx +0 -124
  148. package/src/components/ConfirmDialog/__tests__/ConfirmDialog.test.tsx +0 -146
  149. package/src/components/ContextMenu/ContextMenu.stories.tsx +0 -81
  150. package/src/components/ContextMenu/ContextMenu.tsx +0 -100
  151. package/src/components/ContextMenu/__tests__/ContextMenu.test.tsx +0 -87
  152. package/src/components/CurrencyInput/CurrencyInput.stories.tsx +0 -50
  153. package/src/components/CurrencyInput/CurrencyInput.tsx +0 -60
  154. package/src/components/DataTable/DataTable.module.css +0 -28
  155. package/src/components/DataTable/DataTable.stories.tsx +0 -74
  156. package/src/components/DataTable/DataTable.tsx +0 -154
  157. package/src/components/DataTable/__tests__/DataTable.test.tsx +0 -123
  158. package/src/components/DatePicker/DatePicker.module.css +0 -61
  159. package/src/components/DatePicker/DatePicker.tsx +0 -103
  160. package/src/components/DatePicker/__tests__/DatePicker.test.tsx +0 -89
  161. package/src/components/DeviceOnlyGate/DeviceOnlyGate.tsx +0 -58
  162. package/src/components/DeviceOnlyGate/__tests__/DeviceOnlyGate.test.tsx +0 -45
  163. package/src/components/DeviceStorageKeyGate/DeviceStorageKeyGate.tsx +0 -100
  164. package/src/components/DeviceStorageKeyGate/__tests__/DeviceStorageKeyGate.test.tsx +0 -119
  165. package/src/components/Dialog/Dialog.module.css +0 -226
  166. package/src/components/Dialog/Dialog.stories.tsx +0 -147
  167. package/src/components/Dialog/Dialog.tsx +0 -160
  168. package/src/components/Dialog/__tests__/Dialog.test.tsx +0 -137
  169. package/src/components/DragHandleRow/DragHandleRow.module.css +0 -57
  170. package/src/components/DragHandleRow/DragHandleRow.tsx +0 -61
  171. package/src/components/Drawer/Drawer.module.css +0 -92
  172. package/src/components/Drawer/Drawer.stories.tsx +0 -132
  173. package/src/components/Drawer/Drawer.tsx +0 -176
  174. package/src/components/Drawer/__tests__/Drawer.test.tsx +0 -199
  175. package/src/components/EmptyState/EmptyState.module.css +0 -27
  176. package/src/components/EmptyState/EmptyState.tsx +0 -27
  177. package/src/components/FileDropzone/FileDropzone.module.css +0 -63
  178. package/src/components/FileDropzone/FileDropzone.tsx +0 -109
  179. package/src/components/FileDropzone/__tests__/FileDropzone.test.tsx +0 -67
  180. package/src/components/FormField/FormField.module.css +0 -33
  181. package/src/components/FormField/FormField.tsx +0 -78
  182. package/src/components/FormField/__tests__/FormField.test.tsx +0 -83
  183. package/src/components/HoverCard/HoverCard.module.css +0 -3
  184. package/src/components/HoverCard/HoverCard.stories.tsx +0 -66
  185. package/src/components/HoverCard/HoverCard.tsx +0 -111
  186. package/src/components/HoverCard/__tests__/HoverCard.test.tsx +0 -99
  187. package/src/components/Icon/Icon.module.css +0 -27
  188. package/src/components/Icon/Icon.stories.tsx +0 -95
  189. package/src/components/Icon/Icon.tsx +0 -43
  190. package/src/components/Icon/__tests__/Icon.test.tsx +0 -40
  191. package/src/components/Icon/icons/activity.tsx +0 -20
  192. package/src/components/Icon/icons/alert-triangle.tsx +0 -22
  193. package/src/components/Icon/icons/apple.tsx +0 -21
  194. package/src/components/Icon/icons/banana.tsx +0 -21
  195. package/src/components/Icon/icons/beef.tsx +0 -22
  196. package/src/components/Icon/icons/beer.tsx +0 -24
  197. package/src/components/Icon/icons/bell.tsx +0 -21
  198. package/src/components/Icon/icons/calendar.tsx +0 -23
  199. package/src/components/Icon/icons/candy.tsx +0 -24
  200. package/src/components/Icon/icons/carrot.tsx +0 -22
  201. package/src/components/Icon/icons/check.tsx +0 -20
  202. package/src/components/Icon/icons/chevron-down.tsx +0 -20
  203. package/src/components/Icon/icons/chevron-left.tsx +0 -20
  204. package/src/components/Icon/icons/chevron-right.tsx +0 -20
  205. package/src/components/Icon/icons/chevron-up.tsx +0 -20
  206. package/src/components/Icon/icons/circle-check.tsx +0 -21
  207. package/src/components/Icon/icons/circle-x.tsx +0 -22
  208. package/src/components/Icon/icons/coffee.tsx +0 -23
  209. package/src/components/Icon/icons/cookie.tsx +0 -25
  210. package/src/components/Icon/icons/croissant.tsx +0 -24
  211. package/src/components/Icon/icons/cup-soda.tsx +0 -23
  212. package/src/components/Icon/icons/drumstick.tsx +0 -21
  213. package/src/components/Icon/icons/egg.tsx +0 -20
  214. package/src/components/Icon/icons/ellipsis-vertical.tsx +0 -22
  215. package/src/components/Icon/icons/external-link.tsx +0 -22
  216. package/src/components/Icon/icons/eye-off.tsx +0 -23
  217. package/src/components/Icon/icons/eye.tsx +0 -21
  218. package/src/components/Icon/icons/file.tsx +0 -21
  219. package/src/components/Icon/icons/fish.tsx +0 -25
  220. package/src/components/Icon/icons/grid-2x2.tsx +0 -22
  221. package/src/components/Icon/icons/house.tsx +0 -21
  222. package/src/components/Icon/icons/index.ts +0 -234
  223. package/src/components/Icon/icons/info.tsx +0 -22
  224. package/src/components/Icon/icons/lock.tsx +0 -21
  225. package/src/components/Icon/icons/log-out.tsx +0 -22
  226. package/src/components/Icon/icons/mail.tsx +0 -21
  227. package/src/components/Icon/icons/menu.tsx +0 -22
  228. package/src/components/Icon/icons/milk.tsx +0 -22
  229. package/src/components/Icon/icons/package.tsx +0 -23
  230. package/src/components/Icon/icons/pencil.tsx +0 -21
  231. package/src/components/Icon/icons/pizza.tsx +0 -24
  232. package/src/components/Icon/icons/plus.tsx +0 -21
  233. package/src/components/Icon/icons/rotate-ccw.tsx +0 -21
  234. package/src/components/Icon/icons/salad.tsx +0 -24
  235. package/src/components/Icon/icons/search.tsx +0 -21
  236. package/src/components/Icon/icons/settings.tsx +0 -21
  237. package/src/components/Icon/icons/shield.tsx +0 -20
  238. package/src/components/Icon/icons/shopping-basket.tsx +0 -26
  239. package/src/components/Icon/icons/sliders-horizontal.tsx +0 -28
  240. package/src/components/Icon/icons/smartphone.tsx +0 -21
  241. package/src/components/Icon/icons/snowflake.tsx +0 -31
  242. package/src/components/Icon/icons/spray-can.tsx +0 -29
  243. package/src/components/Icon/icons/trash-2.tsx +0 -24
  244. package/src/components/Icon/icons/upload.tsx +0 -22
  245. package/src/components/Icon/icons/user.tsx +0 -21
  246. package/src/components/Icon/icons/wine.tsx +0 -23
  247. package/src/components/Icon/icons/x.tsx +0 -21
  248. package/src/components/IconPicker/IconPicker.module.css +0 -63
  249. package/src/components/IconPicker/IconPicker.stories.tsx +0 -84
  250. package/src/components/IconPicker/IconPicker.tsx +0 -90
  251. package/src/components/Input/Input.module.css +0 -52
  252. package/src/components/Input/Input.stories.tsx +0 -86
  253. package/src/components/Input/Input.tsx +0 -14
  254. package/src/components/Input/__tests__/Input.test.tsx +0 -22
  255. package/src/components/Item/Item.module.css +0 -70
  256. package/src/components/Item/Item.stories.tsx +0 -62
  257. package/src/components/Item/Item.tsx +0 -54
  258. package/src/components/Item/__tests__/Item.test.tsx +0 -39
  259. package/src/components/Kbd/Kbd.module.css +0 -14
  260. package/src/components/Kbd/Kbd.stories.tsx +0 -32
  261. package/src/components/Kbd/Kbd.tsx +0 -12
  262. package/src/components/Kbd/__tests__/Kbd.test.tsx +0 -14
  263. package/src/components/Label/Label.module.css +0 -11
  264. package/src/components/Label/Label.stories.tsx +0 -40
  265. package/src/components/Label/Label.tsx +0 -24
  266. package/src/components/Label/__tests__/Label.test.tsx +0 -32
  267. package/src/components/LegalLinks/LegalLinks.module.css +0 -24
  268. package/src/components/LegalLinks/LegalLinks.stories.tsx +0 -22
  269. package/src/components/LegalLinks/LegalLinks.tsx +0 -40
  270. package/src/components/Markdown/Markdown.module.css +0 -49
  271. package/src/components/Markdown/Markdown.stories.tsx +0 -30
  272. package/src/components/Markdown/Markdown.tsx +0 -168
  273. package/src/components/Marker/Marker.module.css +0 -33
  274. package/src/components/Marker/Marker.stories.tsx +0 -39
  275. package/src/components/Marker/Marker.tsx +0 -34
  276. package/src/components/Marker/__tests__/Marker.test.tsx +0 -23
  277. package/src/components/MemberMultiSelect/MemberMultiSelect.module.css +0 -27
  278. package/src/components/MemberMultiSelect/MemberMultiSelect.stories.tsx +0 -74
  279. package/src/components/MemberMultiSelect/MemberMultiSelect.tsx +0 -67
  280. package/src/components/Menu/Menu.module.css +0 -89
  281. package/src/components/Menu/Menu.tsx +0 -159
  282. package/src/components/Menu/__tests__/Menu.test.tsx +0 -197
  283. package/src/components/Menubar/Menubar.stories.tsx +0 -52
  284. package/src/components/Menubar/Menubar.tsx +0 -42
  285. package/src/components/Menubar/__tests__/Menubar.test.tsx +0 -45
  286. package/src/components/Message/Message.module.css +0 -99
  287. package/src/components/Message/Message.stories.tsx +0 -79
  288. package/src/components/Message/Message.tsx +0 -41
  289. package/src/components/Message/__tests__/Message.test.tsx +0 -46
  290. package/src/components/MessageScroller/MessageScroller.module.css +0 -54
  291. package/src/components/MessageScroller/MessageScroller.stories.tsx +0 -84
  292. package/src/components/MessageScroller/MessageScroller.tsx +0 -72
  293. package/src/components/MessageScroller/__tests__/MessageScroller.test.tsx +0 -105
  294. package/src/components/MobileAppsDrawer/MobileAppsDrawer.module.css +0 -81
  295. package/src/components/MobileAppsDrawer/MobileAppsDrawer.tsx +0 -78
  296. package/src/components/MobileAppsDrawer/__tests__/MobileAppsDrawer.test.tsx +0 -80
  297. package/src/components/MobileFooter/MobileFooter.module.css +0 -73
  298. package/src/components/MobileFooter/MobileFooter.stories.tsx +0 -47
  299. package/src/components/MobileFooter/MobileFooter.tsx +0 -109
  300. package/src/components/MobileFooter/__tests__/MobileFooter.test.tsx +0 -71
  301. package/src/components/MobileHeader/MobileHeader.module.css +0 -63
  302. package/src/components/MobileHeader/MobileHeader.stories.tsx +0 -57
  303. package/src/components/MobileHeader/MobileHeader.tsx +0 -77
  304. package/src/components/MobileHeader/__tests__/MobileHeader.test.tsx +0 -58
  305. package/src/components/NavTabs/NavTabs.module.css +0 -50
  306. package/src/components/NavTabs/NavTabs.tsx +0 -61
  307. package/src/components/NavigationMenu/NavigationMenu.module.css +0 -53
  308. package/src/components/NavigationMenu/NavigationMenu.stories.tsx +0 -58
  309. package/src/components/NavigationMenu/NavigationMenu.tsx +0 -125
  310. package/src/components/NavigationMenu/__tests__/NavigationMenu.test.tsx +0 -93
  311. package/src/components/OfflineGate/OfflineGate.tsx +0 -44
  312. package/src/components/OfflineGate/__tests__/OfflineGate.test.tsx +0 -66
  313. package/src/components/OverlayHeader/OverlayHeader.module.css +0 -98
  314. package/src/components/OverlayHeader/OverlayHeader.tsx +0 -62
  315. package/src/components/OverlayHeader/__tests__/OverlayHeader.test.tsx +0 -51
  316. package/src/components/PageContainer/PageContainer.module.css +0 -20
  317. package/src/components/PageContainer/PageContainer.tsx +0 -31
  318. package/src/components/PageContainer/__tests__/PageContainer.test.tsx +0 -37
  319. package/src/components/PageHeader/PageHeader.module.css +0 -32
  320. package/src/components/PageHeader/PageHeader.tsx +0 -35
  321. package/src/components/Pagination/Pagination.module.css +0 -98
  322. package/src/components/Pagination/Pagination.stories.tsx +0 -49
  323. package/src/components/Pagination/Pagination.tsx +0 -87
  324. package/src/components/Pagination/__tests__/Pagination.test.tsx +0 -56
  325. package/src/components/Popover/Popover.module.css +0 -74
  326. package/src/components/Popover/Popover.stories.tsx +0 -357
  327. package/src/components/Popover/Popover.tsx +0 -208
  328. package/src/components/Popover/__tests__/Popover.test.tsx +0 -98
  329. package/src/components/Progress/Progress.module.css +0 -20
  330. package/src/components/Progress/Progress.stories.tsx +0 -40
  331. package/src/components/Progress/Progress.tsx +0 -35
  332. package/src/components/Progress/__tests__/Progress.test.tsx +0 -31
  333. package/src/components/QuantityStepper/QuantityStepper.module.css +0 -67
  334. package/src/components/QuantityStepper/QuantityStepper.stories.tsx +0 -79
  335. package/src/components/QuantityStepper/QuantityStepper.tsx +0 -107
  336. package/src/components/RadioGroup/RadioGroup.module.css +0 -88
  337. package/src/components/RadioGroup/RadioGroup.stories.tsx +0 -69
  338. package/src/components/RadioGroup/RadioGroup.tsx +0 -99
  339. package/src/components/RadioGroup/__tests__/RadioGroup.test.tsx +0 -59
  340. package/src/components/Resizable/Resizable.module.css +0 -70
  341. package/src/components/Resizable/Resizable.stories.tsx +0 -82
  342. package/src/components/Resizable/Resizable.tsx +0 -313
  343. package/src/components/Resizable/__tests__/Resizable.test.tsx +0 -128
  344. package/src/components/ResponsiveSurface/ResponsiveSurface.tsx +0 -24
  345. package/src/components/ResponsiveSurface/__tests__/ResponsiveSurface.test.tsx +0 -73
  346. package/src/components/ScrollArea/ScrollArea.module.css +0 -20
  347. package/src/components/ScrollArea/ScrollArea.stories.tsx +0 -57
  348. package/src/components/ScrollArea/ScrollArea.tsx +0 -27
  349. package/src/components/ScrollArea/__tests__/ScrollArea.test.tsx +0 -39
  350. package/src/components/SegmentedControl/SegmentedControl.module.css +0 -55
  351. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +0 -118
  352. package/src/components/SegmentedControl/SegmentedControl.tsx +0 -56
  353. package/src/components/SegmentedControl/__tests__/SegmentedControl.test.tsx +0 -63
  354. package/src/components/Select/Select.module.css +0 -82
  355. package/src/components/Select/Select.stories.tsx +0 -115
  356. package/src/components/Select/Select.tsx +0 -48
  357. package/src/components/Select/__tests__/Select.test.tsx +0 -59
  358. package/src/components/Sheet/Sheet.module.css +0 -55
  359. package/src/components/Sheet/Sheet.tsx +0 -109
  360. package/src/components/Sheet/__tests__/Sheet.test.tsx +0 -99
  361. package/src/components/Slider/Slider.module.css +0 -95
  362. package/src/components/Slider/Slider.stories.tsx +0 -64
  363. package/src/components/Slider/Slider.tsx +0 -77
  364. package/src/components/Slider/__tests__/Slider.test.tsx +0 -45
  365. package/src/components/Spinner/Spinner.module.css +0 -39
  366. package/src/components/Spinner/Spinner.tsx +0 -23
  367. package/src/components/SplitMethodSelector/SplitMethodSelector.stories.tsx +0 -33
  368. package/src/components/SplitMethodSelector/SplitMethodSelector.tsx +0 -43
  369. package/src/components/SplitPane/SplitPane.module.css +0 -85
  370. package/src/components/SplitPane/SplitPane.stories.tsx +0 -160
  371. package/src/components/SplitPane/SplitPane.tsx +0 -149
  372. package/src/components/SplitPane/__tests__/SplitPane.test.tsx +0 -51
  373. package/src/components/StatusBadge/StatusBadge.module.css +0 -59
  374. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -74
  375. package/src/components/StatusBadge/StatusBadge.tsx +0 -65
  376. package/src/components/SuggestionInput/SuggestionInput.module.css +0 -103
  377. package/src/components/SuggestionInput/SuggestionInput.stories.tsx +0 -144
  378. package/src/components/SuggestionInput/SuggestionInput.tsx +0 -207
  379. package/src/components/SwipableMobileCarousel/SwipableMobileCarousel.module.css +0 -55
  380. package/src/components/SwipableMobileCarousel/SwipableMobileCarousel.tsx +0 -227
  381. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlide.tsx +0 -35
  382. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideBody.tsx +0 -42
  383. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideFooter.tsx +0 -18
  384. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideHeader.tsx +0 -21
  385. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideParts.module.css +0 -29
  386. package/src/components/SwipableMobileCarousel/__tests__/SwipableMobileCarousel.test.tsx +0 -133
  387. package/src/components/SwipableMobileCarousel/__tests__/SwipableMobileCarouselDevGuard.test.tsx +0 -61
  388. package/src/components/SwipableMobileCarousel/context.ts +0 -13
  389. package/src/components/SwipableMobileCarouselDots/SwipableMobileCarouselDots.module.css +0 -49
  390. package/src/components/SwipableMobileCarouselDots/SwipableMobileCarouselDots.tsx +0 -62
  391. package/src/components/SwipableMobileCarouselDots/__tests__/SwipableMobileCarouselDots.test.tsx +0 -63
  392. package/src/components/SystemBanner/SystemBanner.module.css +0 -69
  393. package/src/components/SystemBanner/SystemBanner.stories.tsx +0 -86
  394. package/src/components/SystemBanner/SystemBanner.tsx +0 -50
  395. package/src/components/SystemBanner/__tests__/SystemBanner.test.tsx +0 -50
  396. package/src/components/Table/Table.module.css +0 -45
  397. package/src/components/Table/Table.stories.tsx +0 -125
  398. package/src/components/Table/Table.tsx +0 -51
  399. package/src/components/Table/__tests__/Table.test.tsx +0 -50
  400. package/src/components/Tabs/Tabs.module.css +0 -56
  401. package/src/components/Tabs/Tabs.stories.tsx +0 -100
  402. package/src/components/Tabs/Tabs.tsx +0 -46
  403. package/src/components/Tabs/__tests__/Tabs.test.tsx +0 -45
  404. package/src/components/TagInput/TagInput.module.css +0 -141
  405. package/src/components/TagInput/TagInput.stories.tsx +0 -109
  406. package/src/components/TagInput/TagInput.tsx +0 -174
  407. package/src/components/TagInput/__tests__/TagInput.test.tsx +0 -69
  408. package/src/components/Textarea/Textarea.module.css +0 -39
  409. package/src/components/Textarea/Textarea.tsx +0 -15
  410. package/src/components/Textarea/__tests__/Textarea.test.tsx +0 -29
  411. package/src/components/Toast/Toast.module.css +0 -132
  412. package/src/components/Toast/Toast.stories.tsx +0 -191
  413. package/src/components/Toast/Toast.tsx +0 -139
  414. package/src/components/Toggle/Toggle.module.css +0 -57
  415. package/src/components/Toggle/Toggle.stories.tsx +0 -95
  416. package/src/components/Toggle/Toggle.tsx +0 -39
  417. package/src/components/Toggle/__tests__/Toggle.test.tsx +0 -47
  418. package/src/components/Tooltip/Tooltip.module.css +0 -56
  419. package/src/components/Tooltip/Tooltip.tsx +0 -30
  420. package/src/components/Typography/Typography.module.css +0 -47
  421. package/src/components/Typography/Typography.stories.tsx +0 -62
  422. package/src/components/Typography/Typography.tsx +0 -30
  423. package/src/components/Typography/__tests__/Typography.test.tsx +0 -34
  424. package/src/css-modules.d.ts +0 -4
  425. package/src/hooks/__tests__/useCarouselRouteSync.test.tsx +0 -126
  426. package/src/hooks/__tests__/useDoubleTap.test.tsx +0 -117
  427. package/src/hooks/__tests__/useIsMobile.test.tsx +0 -80
  428. package/src/hooks/__tests__/useIsOffline.test.tsx +0 -53
  429. package/src/hooks/__tests__/useLongPress.test.tsx +0 -158
  430. package/src/hooks/__tests__/useOfflineTileState.test.tsx +0 -69
  431. package/src/hooks/__tests__/useResponsiveLayout.test.tsx +0 -87
  432. package/src/hooks/__tests__/useSnapCarousel.test.tsx +0 -93
  433. package/src/hooks/__tests__/useSwipeReveal.test.tsx +0 -110
  434. package/src/hooks/index.ts +0 -24
  435. package/src/hooks/useCarouselRouteSync.ts +0 -92
  436. package/src/hooks/useCommitOnEnterOrBlur.ts +0 -39
  437. package/src/hooks/useDoubleTap.ts +0 -91
  438. package/src/hooks/useIsMobile.ts +0 -33
  439. package/src/hooks/useIsOffline.ts +0 -41
  440. package/src/hooks/useLongPress.ts +0 -185
  441. package/src/hooks/useOfflineTileState.ts +0 -45
  442. package/src/hooks/useResponsiveLayout.ts +0 -36
  443. package/src/hooks/useSnapCarousel.ts +0 -79
  444. package/src/hooks/useSwipeReveal.ts +0 -107
  445. package/src/index.ts +0 -251
  446. package/src/motion.ts +0 -78
  447. package/src/overlay-shell.ts +0 -94
  448. package/src/scroll-lock.ts +0 -22
  449. package/src/stories/Avatar.stories.tsx +0 -44
  450. package/src/stories/Card.stories.tsx +0 -35
  451. package/src/stories/Checkbox.stories.tsx +0 -45
  452. package/src/stories/DesignSystemOverview.stories.tsx +0 -3187
  453. package/src/stories/DeviceOnlyGate.stories.tsx +0 -35
  454. package/src/stories/DeviceStorageKeyGate.stories.tsx +0 -57
  455. package/src/stories/DragHandleRow.stories.tsx +0 -41
  456. package/src/stories/EmptyState.stories.tsx +0 -33
  457. package/src/stories/FileDropzone.stories.tsx +0 -69
  458. package/src/stories/FormField.stories.tsx +0 -47
  459. package/src/stories/InteractionHooks.stories.tsx +0 -925
  460. package/src/stories/MobilePatterns.stories.tsx +0 -1536
  461. package/src/stories/NavTabs.stories.tsx +0 -53
  462. package/src/stories/OfflineGate.stories.tsx +0 -42
  463. package/src/stories/PageContainer.stories.tsx +0 -37
  464. package/src/stories/PageHeader.stories.tsx +0 -42
  465. package/src/stories/ResponsiveSurface.stories.tsx +0 -47
  466. package/src/stories/Spinner.stories.tsx +0 -25
  467. package/src/stories/SwipableMobileCarousel.stories.tsx +0 -304
  468. package/src/stories/Textarea.stories.tsx +0 -51
  469. package/src/stories/TokenGallery.stories.tsx +0 -602
  470. package/src/stories/Tooltip.stories.tsx +0 -59
  471. package/src/tokens/primitives.css +0 -157
  472. package/src/tokens/semantic.css +0 -130
  473. package/src/tokens.css +0 -5
@@ -1,36 +0,0 @@
1
- 'use client';
2
-
3
- import { useIsMobile } from './useIsMobile';
4
-
5
- export interface UseResponsiveLayoutOptions<TWeb, TMobile> {
6
- web: TWeb;
7
- mobile: TMobile;
8
- breakpointPx?: number;
9
- }
10
-
11
- export interface UseResponsiveLayoutResult<TWeb, TMobile> {
12
- isMobile: boolean;
13
- value: TWeb | TMobile;
14
- }
15
-
16
- /**
17
- * useResponsiveLayout — picks between a `web` and `mobile` value for the
18
- * current viewport, built on `useIsMobile` (same breakpoint/SSR-safe-default
19
- * behavior, not reimplemented here). Generic over the value type so it works
20
- * for JSX (the common case — forking an entire component tree, not just a
21
- * class name) or any other per-breakpoint value a plugin wants to pick
22
- * without repeating the isMobile-ternary boilerplate every call site.
23
- *
24
- * This formalizes the `if (isMobile) return <mobile/>; return <web/>;` fork
25
- * plugins have hand-rolled per-plugin (e.g. a `MobileAwareShell` component
26
- * that swaps an entire routed page tree for a client-only mobile one) —
27
- * see `ResponsiveSurface` for the equivalent as a plain JSX component.
28
- */
29
- export function useResponsiveLayout<TWeb, TMobile>({
30
- web,
31
- mobile,
32
- breakpointPx,
33
- }: UseResponsiveLayoutOptions<TWeb, TMobile>): UseResponsiveLayoutResult<TWeb, TMobile> {
34
- const isMobile = useIsMobile(breakpointPx);
35
- return { isMobile, value: isMobile ? mobile : web };
36
- }
@@ -1,79 +0,0 @@
1
- 'use client';
2
-
3
- import { useEffect, useRef } from 'react';
4
- import type { RefObject } from 'react';
5
-
6
- export interface UseSnapCarouselOptions {
7
- /** Total number of slides — settle detection clamps to this range. */
8
- itemCount: number;
9
- /** Called when the user's scroll gesture settles on a different slide
10
- * index than the last one reported. */
11
- onSettle?: (index: number) => void;
12
- /** Debounce delay (ms) after the last `scroll` event before checking where
13
- * the container settled. Default 120 — matches the value this hook was
14
- * extracted from. Debounced rather than keyed to the `scrollend` event,
15
- * which pre-17.4 iOS Safari/WKWebView doesn't support. */
16
- debounceMs?: number;
17
- }
18
-
19
- export interface UseSnapCarouselResult {
20
- /** Attach to the `scroll-snap-type: x` scroll container. */
21
- scrollRef: RefObject<HTMLDivElement | null>;
22
- /** Imperatively scrolls the container to a slide index. */
23
- scrollToIndex: (index: number, behavior?: ScrollBehavior) => void;
24
- }
25
-
26
- /**
27
- * useSnapCarousel — debounced "settled slide" detection over a native
28
- * `scroll-snap-type: x` container, extracted from `sovereign-tasks`'s
29
- * `MobileTasksCarousel` and independently reimplemented in
30
- * `sovereign-shopper`'s `MobileShopperCarousel` (RFC 0079, epic task 9.20).
31
- * Gives swipe-between-slides physics for free via native scroll-snap, with
32
- * this hook only handling "which slide did we land on."
33
- */
34
- export function useSnapCarousel({
35
- itemCount,
36
- onSettle,
37
- debounceMs = 120,
38
- }: UseSnapCarouselOptions): UseSnapCarouselResult {
39
- const scrollRef = useRef<HTMLDivElement>(null);
40
- const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
41
- const lastIndexRef = useRef<number | null>(null);
42
- // Kept in a ref so the scroll listener always calls the latest callback
43
- // without needing to be torn down and re-attached on every render.
44
- const onSettleRef = useRef(onSettle);
45
- onSettleRef.current = onSettle;
46
-
47
- useEffect(() => {
48
- const el = scrollRef.current;
49
- if (!el) return;
50
- function handleScroll() {
51
- if (timerRef.current) clearTimeout(timerRef.current);
52
- timerRef.current = setTimeout(() => {
53
- const current = scrollRef.current;
54
- if (!current) return;
55
- const width = current.clientWidth;
56
- if (!width) return;
57
- const rawIndex = Math.round(current.scrollLeft / width);
58
- const newIndex = Math.max(0, Math.min(itemCount - 1, rawIndex));
59
- if (newIndex === lastIndexRef.current) return;
60
- lastIndexRef.current = newIndex;
61
- onSettleRef.current?.(newIndex);
62
- }, debounceMs);
63
- }
64
- el.addEventListener('scroll', handleScroll, { passive: true });
65
- return () => {
66
- el.removeEventListener('scroll', handleScroll);
67
- if (timerRef.current) clearTimeout(timerRef.current);
68
- };
69
- }, [itemCount, debounceMs]);
70
-
71
- function scrollToIndex(index: number, behavior: ScrollBehavior = 'smooth') {
72
- const el = scrollRef.current;
73
- if (!el) return;
74
- lastIndexRef.current = index;
75
- el.scrollTo({ left: index * el.clientWidth, behavior });
76
- }
77
-
78
- return { scrollRef, scrollToIndex };
79
- }
@@ -1,107 +0,0 @@
1
- 'use client';
2
-
3
- import { useRef } from 'react';
4
- import type { PointerEvent as ReactPointerEvent, RefObject } from 'react';
5
-
6
- export interface UseSwipeRevealOptions {
7
- /** Max reveal distance in px — the row translates by `-revealWidth` when open. */
8
- revealWidth: number;
9
- /** Whether the reveal is currently open. Controlled by the caller so a
10
- * list of rows can coordinate "only one open at a time" — this hook has
11
- * no open state of its own. */
12
- open: boolean;
13
- /** Called when a drag releases past the halfway point — the caller should
14
- * set `open` to true. */
15
- onOpen: () => void;
16
- /** Called when a drag releases before the halfway point — the caller
17
- * should set `open` to false. */
18
- onClose: () => void;
19
- /** Skip entirely (hooks can't be called conditionally). */
20
- disabled?: boolean;
21
- }
22
-
23
- export interface UseSwipeRevealHandlers {
24
- onPointerDown: (e: ReactPointerEvent) => void;
25
- onPointerMove: (e: ReactPointerEvent) => void;
26
- onPointerUp: (e: ReactPointerEvent) => void;
27
- onPointerCancel: (e: ReactPointerEvent) => void;
28
- }
29
-
30
- export interface UseSwipeRevealResult {
31
- /** Attach to the swipeable row element — the hook writes a live transform
32
- * to it directly during the drag (not via React state) so the row tracks
33
- * the finger at 60fps with no re-render per pointermove. */
34
- rowRef: RefObject<HTMLDivElement | null>;
35
- /** Spread onto the row's pointer event handlers. */
36
- handlers: UseSwipeRevealHandlers;
37
- }
38
-
39
- /**
40
- * useSwipeReveal — horizontal swipe-to-reveal (e.g. Done/Delete actions
41
- * behind a list row), extracted from `sovereign-tasks`'s `TaskItem`/
42
- * `ListSidebar`, which independently hand-rolled the identical gesture twice
43
- * with only `revealWidth` differing (RFC 0079, epic task 9.20).
44
- *
45
- * Axis-locks on the first 8px of movement (so a vertical scroll or the
46
- * carousel's own horizontal swipe-between-slides gesture isn't hijacked by a
47
- * diagonal drag) and only resolves to open/closed on release, past the
48
- * halfway point of `revealWidth`.
49
- */
50
- export function useSwipeReveal({
51
- revealWidth,
52
- open,
53
- onOpen,
54
- onClose,
55
- disabled = false,
56
- }: UseSwipeRevealOptions): UseSwipeRevealResult {
57
- const rowRef = useRef<HTMLDivElement>(null);
58
- const dragState = useRef<{
59
- startX: number;
60
- startY: number;
61
- locked: 'horizontal' | 'vertical' | null;
62
- } | null>(null);
63
-
64
- function onPointerDown(e: ReactPointerEvent) {
65
- if (disabled) return;
66
- e.currentTarget.setPointerCapture(e.pointerId);
67
- dragState.current = { startX: e.clientX, startY: e.clientY, locked: null };
68
- }
69
-
70
- function onPointerMove(e: ReactPointerEvent) {
71
- const state = dragState.current;
72
- if (!state) return;
73
- const dx = e.clientX - state.startX;
74
- const dy = e.clientY - state.startY;
75
- if (!state.locked) {
76
- if (Math.abs(dx) < 8 && Math.abs(dy) < 8) return;
77
- state.locked = Math.abs(dx) > Math.abs(dy) ? 'horizontal' : 'vertical';
78
- }
79
- if (state.locked !== 'horizontal') return;
80
- e.preventDefault();
81
- const base = open ? -revealWidth : 0;
82
- const next = Math.min(0, Math.max(-revealWidth, base + dx));
83
- if (rowRef.current) rowRef.current.style.transform = `translateX(${next}px)`;
84
- }
85
-
86
- function releaseDrag(e: ReactPointerEvent) {
87
- const state = dragState.current;
88
- dragState.current = null;
89
- if (!state || state.locked !== 'horizontal') return;
90
- const dx = e.clientX - state.startX;
91
- const base = open ? -revealWidth : 0;
92
- const finalX = Math.min(0, Math.max(-revealWidth, base + dx));
93
- if (rowRef.current) rowRef.current.style.transform = '';
94
- if (finalX < -revealWidth / 2) onOpen();
95
- else onClose();
96
- }
97
-
98
- return {
99
- rowRef,
100
- handlers: {
101
- onPointerDown,
102
- onPointerMove,
103
- onPointerUp: releaseDrag,
104
- onPointerCancel: releaseDrag,
105
- },
106
- };
107
- }
package/src/index.ts DELETED
@@ -1,251 +0,0 @@
1
- export { LegalLinks } from './components/LegalLinks/LegalLinks';
2
- export type { LegalLinksProps } from './components/LegalLinks/LegalLinks';
3
- export { Markdown } from './components/Markdown/Markdown';
4
- export type { MarkdownProps } from './components/Markdown/Markdown';
5
- export { Badge } from './components/Badge/Badge';
6
- export type { BadgeProps, BadgeVariant, BadgeStatus } from './components/Badge/Badge';
7
- export { Icon } from './components/Icon/Icon';
8
- export { Toggle } from './components/Toggle/Toggle';
9
- export type { ToggleProps } from './components/Toggle/Toggle';
10
- export { SegmentedControl } from './components/SegmentedControl/SegmentedControl';
11
- export type {
12
- SegmentedControlProps,
13
- SegmentedOption,
14
- } from './components/SegmentedControl/SegmentedControl';
15
- export { Tabs } from './components/Tabs/Tabs';
16
- export type { TabsProps, TabItem } from './components/Tabs/Tabs';
17
- export { Select } from './components/Select/Select';
18
- export type { SelectProps } from './components/Select/Select';
19
- export { SystemBanner } from './components/SystemBanner/SystemBanner';
20
- export type { SystemBannerProps, BannerVariant } from './components/SystemBanner/SystemBanner';
21
- export { Popover } from './components/Popover/Popover';
22
- export type { PopoverProps } from './components/Popover/Popover';
23
- export type { IconProps, IconName } from './components/Icon/Icon';
24
- export { Button } from './components/Button/Button';
25
- export type { ButtonProps, ButtonVariant, ButtonSize } from './components/Button/Button';
26
- export { Input } from './components/Input/Input';
27
- export type { InputProps } from './components/Input/Input';
28
- export { Textarea } from './components/Textarea/Textarea';
29
- export type { TextareaProps } from './components/Textarea/Textarea';
30
- export { CodeTextarea } from './components/CodeTextarea/CodeTextarea';
31
- export type { CodeTextareaProps } from './components/CodeTextarea/CodeTextarea';
32
- export { StatusBadge } from './components/StatusBadge/StatusBadge';
33
- export type { StatusBadgeProps, StatusBadgeStatus } from './components/StatusBadge/StatusBadge';
34
- export { SplitPane } from './components/SplitPane/SplitPane';
35
- export type { SplitPaneProps } from './components/SplitPane/SplitPane';
36
- export { TagInput } from './components/TagInput/TagInput';
37
- export type { TagInputProps } from './components/TagInput/TagInput';
38
- export { Dialog, useOverlaySecondRow } from './components/Dialog/Dialog';
39
- export type { DialogProps, DialogSize } from './components/Dialog/Dialog';
40
- export { Drawer } from './components/Drawer/Drawer';
41
- export type { DrawerProps } from './components/Drawer/Drawer';
42
- export { OverlayHeader } from './components/OverlayHeader/OverlayHeader';
43
- export type { OverlayHeaderProps } from './components/OverlayHeader/OverlayHeader';
44
- export { Sheet } from './components/Sheet/Sheet';
45
- export type { SheetProps } from './components/Sheet/Sheet';
46
- export { ConfirmDialog } from './components/ConfirmDialog/ConfirmDialog';
47
- export type { ConfirmDialogProps } from './components/ConfirmDialog/ConfirmDialog';
48
- export { Menu, MenuEntries } from './components/Menu/Menu';
49
- export type {
50
- MenuProps,
51
- MenuItem,
52
- MenuLabel,
53
- MenuSeparator,
54
- MenuEntry,
55
- } from './components/Menu/Menu';
56
- export { ToastProvider, useToast } from './components/Toast/Toast';
57
- export type { ToastItem, ToastContextValue } from './components/Toast/Toast';
58
- export { Card } from './components/Card/Card';
59
- export type { CardProps } from './components/Card/Card';
60
- export { FormField } from './components/FormField/FormField';
61
- export type { FormFieldProps, FormFieldRenderProps } from './components/FormField/FormField';
62
- export { PageHeader } from './components/PageHeader/PageHeader';
63
- export type { PageHeaderProps } from './components/PageHeader/PageHeader';
64
- export { PageContainer } from './components/PageContainer/PageContainer';
65
- export type { PageContainerProps } from './components/PageContainer/PageContainer';
66
- export { MobileHeader } from './components/MobileHeader/MobileHeader';
67
- export type { MobileHeaderProps } from './components/MobileHeader/MobileHeader';
68
- export { MobileFooter } from './components/MobileFooter/MobileFooter';
69
- export type { MobileFooterProps, FooterIcon } from './components/MobileFooter/MobileFooter';
70
- export { MobileAppsDrawer } from './components/MobileAppsDrawer/MobileAppsDrawer';
71
- export type {
72
- MobileAppsDrawerProps,
73
- MobileAppsDrawerItem,
74
- } from './components/MobileAppsDrawer/MobileAppsDrawer';
75
- export { EmptyState } from './components/EmptyState/EmptyState';
76
- export type { EmptyStateProps } from './components/EmptyState/EmptyState';
77
- export { OfflineGate } from './components/OfflineGate/OfflineGate';
78
- export type { OfflineGateProps } from './components/OfflineGate/OfflineGate';
79
- export { DeviceOnlyGate } from './components/DeviceOnlyGate/DeviceOnlyGate';
80
- export type { DeviceOnlyGateProps } from './components/DeviceOnlyGate/DeviceOnlyGate';
81
- export { DeviceStorageKeyGate } from './components/DeviceStorageKeyGate/DeviceStorageKeyGate';
82
- export type {
83
- DeviceStorageKeyGateProps,
84
- DeviceStorageKeyGateStatus,
85
- } from './components/DeviceStorageKeyGate/DeviceStorageKeyGate';
86
- export { Spinner } from './components/Spinner/Spinner';
87
- export type { SpinnerProps } from './components/Spinner/Spinner';
88
- export { Avatar } from './components/Avatar/Avatar';
89
- export type { AvatarProps } from './components/Avatar/Avatar';
90
- export { NavTabs } from './components/NavTabs/NavTabs';
91
- export type { NavTabsProps, NavTabItem, NavTabLinkProps } from './components/NavTabs/NavTabs';
92
- export { Tooltip } from './components/Tooltip/Tooltip';
93
- export type { TooltipProps } from './components/Tooltip/Tooltip';
94
- export { Checkbox } from './components/Checkbox/Checkbox';
95
- export type { CheckboxProps } from './components/Checkbox/Checkbox';
96
- export { RadioGroup } from './components/RadioGroup/RadioGroup';
97
- export type { RadioGroupProps, RadioGroupItem } from './components/RadioGroup/RadioGroup';
98
- export { Slider } from './components/Slider/Slider';
99
- export type { SliderProps } from './components/Slider/Slider';
100
- export { Progress } from './components/Progress/Progress';
101
- export type { ProgressProps } from './components/Progress/Progress';
102
- export {
103
- Table,
104
- TableHead,
105
- TableBody,
106
- TableRow,
107
- TableHeaderCell,
108
- TableCell,
109
- } from './components/Table/Table';
110
- export type { TableProps } from './components/Table/Table';
111
- export { Alert } from './components/Alert/Alert';
112
- export type { AlertProps, AlertVariant } from './components/Alert/Alert';
113
- export { Breadcrumb } from './components/Breadcrumb/Breadcrumb';
114
- export type { BreadcrumbProps, BreadcrumbItem } from './components/Breadcrumb/Breadcrumb';
115
- export { Pagination } from './components/Pagination/Pagination';
116
- export type { PaginationProps } from './components/Pagination/Pagination';
117
- export { Kbd } from './components/Kbd/Kbd';
118
- export type { KbdProps } from './components/Kbd/Kbd';
119
- export { Collapsible } from './components/Collapsible/Collapsible';
120
- export type { CollapsibleProps } from './components/Collapsible/Collapsible';
121
- export { Accordion } from './components/Accordion/Accordion';
122
- export type { AccordionProps, AccordionItem } from './components/Accordion/Accordion';
123
- export { AspectRatio } from './components/AspectRatio/AspectRatio';
124
- export type { AspectRatioProps } from './components/AspectRatio/AspectRatio';
125
- export { ButtonGroup } from './components/ButtonGroup/ButtonGroup';
126
- export type { ButtonGroupProps } from './components/ButtonGroup/ButtonGroup';
127
- export { Item } from './components/Item/Item';
128
- export type { ItemProps } from './components/Item/Item';
129
- export { Label } from './components/Label/Label';
130
- export type { LabelProps } from './components/Label/Label';
131
- export { ScrollArea } from './components/ScrollArea/ScrollArea';
132
- export type { ScrollAreaProps } from './components/ScrollArea/ScrollArea';
133
- export { Typography } from './components/Typography/Typography';
134
- export type { TypographyProps, TypographyVariant } from './components/Typography/Typography';
135
- export { Marker } from './components/Marker/Marker';
136
- export type { MarkerProps } from './components/Marker/Marker';
137
- export { Message } from './components/Message/Message';
138
- export type { MessageProps, MessageSender } from './components/Message/Message';
139
- export { MessageScroller } from './components/MessageScroller/MessageScroller';
140
- export type { MessageScrollerProps } from './components/MessageScroller/MessageScroller';
141
- export { HoverCard } from './components/HoverCard/HoverCard';
142
- export type { HoverCardProps } from './components/HoverCard/HoverCard';
143
- export { ContextMenu } from './components/ContextMenu/ContextMenu';
144
- export type { ContextMenuProps } from './components/ContextMenu/ContextMenu';
145
- export { NavigationMenu } from './components/NavigationMenu/NavigationMenu';
146
- export type {
147
- NavigationMenuProps,
148
- NavigationMenuItem,
149
- } from './components/NavigationMenu/NavigationMenu';
150
- export { Menubar } from './components/Menubar/Menubar';
151
- export type { MenubarProps, MenubarMenu } from './components/Menubar/Menubar';
152
- export { Command } from './components/Command/Command';
153
- export type { CommandProps, CommandItem } from './components/Command/Command';
154
- export {
155
- ResizablePanelGroup,
156
- ResizablePanel,
157
- ResizableHandle,
158
- } from './components/Resizable/Resizable';
159
- export type {
160
- ResizablePanelGroupProps,
161
- ResizablePanelProps,
162
- ResizableHandleProps,
163
- ResizableDirection,
164
- } from './components/Resizable/Resizable';
165
- export { DataTable } from './components/DataTable/DataTable';
166
- export type {
167
- DataTableProps,
168
- DataTableColumn,
169
- SortDirection,
170
- } from './components/DataTable/DataTable';
171
- export { Combobox } from './components/Combobox/Combobox';
172
- export type { ComboboxProps, ComboboxOption } from './components/Combobox/Combobox';
173
- export { DragHandleRow } from './components/DragHandleRow/DragHandleRow';
174
- export type { DragHandleRowProps } from './components/DragHandleRow/DragHandleRow';
175
- export { FileDropzone } from './components/FileDropzone/FileDropzone';
176
- export type { FileDropzoneProps } from './components/FileDropzone/FileDropzone';
177
- export { Calendar } from './components/Calendar/Calendar';
178
- export type { CalendarProps } from './components/Calendar/Calendar';
179
- export { DatePicker } from './components/DatePicker/DatePicker';
180
- export type { DatePickerProps } from './components/DatePicker/DatePicker';
181
- export { SuggestionInput } from './components/SuggestionInput/SuggestionInput';
182
- export type {
183
- SuggestionInputProps,
184
- SuggestionOption,
185
- } from './components/SuggestionInput/SuggestionInput';
186
- export { IconPicker } from './components/IconPicker/IconPicker';
187
- export type { IconPickerProps } from './components/IconPicker/IconPicker';
188
- export { QuantityStepper } from './components/QuantityStepper/QuantityStepper';
189
- export type { QuantityStepperProps } from './components/QuantityStepper/QuantityStepper';
190
- export { CheckableListRow } from './components/CheckableListRow/CheckableListRow';
191
- export type { CheckableListRowProps } from './components/CheckableListRow/CheckableListRow';
192
- export { CurrencyInput } from './components/CurrencyInput/CurrencyInput';
193
- export type { CurrencyInputProps } from './components/CurrencyInput/CurrencyInput';
194
- export { BalanceChip } from './components/BalanceChip/BalanceChip';
195
- export type { BalanceChipProps } from './components/BalanceChip/BalanceChip';
196
- export { SplitMethodSelector } from './components/SplitMethodSelector/SplitMethodSelector';
197
- export type {
198
- SplitMethodSelectorProps,
199
- SplitMethod,
200
- } from './components/SplitMethodSelector/SplitMethodSelector';
201
- export { MemberMultiSelect } from './components/MemberMultiSelect/MemberMultiSelect';
202
- export type {
203
- MemberMultiSelectProps,
204
- MemberMultiSelectOption,
205
- } from './components/MemberMultiSelect/MemberMultiSelect';
206
- export {
207
- useLongPress,
208
- useDoubleTapHandler,
209
- useSingleOrDoubleTap,
210
- useIsMobile,
211
- useIsOffline,
212
- useOfflineTileState,
213
- useCommitOnEnterOrBlur,
214
- useSwipeReveal,
215
- useSnapCarousel,
216
- useResponsiveLayout,
217
- useCarouselRouteSync,
218
- } from './hooks';
219
- export type { OfflineTileState } from './hooks';
220
- export { MOBILE_BREAKPOINT_PX } from './hooks';
221
- export type {
222
- UseLongPressOptions,
223
- LongPressHandlers,
224
- CommitOnEnterOrBlurHandlers,
225
- UseSwipeRevealOptions,
226
- UseSwipeRevealHandlers,
227
- UseSwipeRevealResult,
228
- UseSnapCarouselOptions,
229
- UseSnapCarouselResult,
230
- UseResponsiveLayoutOptions,
231
- UseResponsiveLayoutResult,
232
- UseCarouselRouteSyncOptions,
233
- UseCarouselRouteSyncResult,
234
- } from './hooks';
235
- export { ResponsiveSurface } from './components/ResponsiveSurface/ResponsiveSurface';
236
- export type { ResponsiveSurfaceProps } from './components/ResponsiveSurface/ResponsiveSurface';
237
- export { SwipableMobileCarouselDots } from './components/SwipableMobileCarouselDots/SwipableMobileCarouselDots';
238
- export type { SwipableMobileCarouselDotsProps } from './components/SwipableMobileCarouselDots/SwipableMobileCarouselDots';
239
- export { SwipableMobileCarousel } from './components/SwipableMobileCarousel/SwipableMobileCarousel';
240
- export type {
241
- SwipableMobileCarouselProps,
242
- SwipableMobileCarouselIndicatorProps,
243
- } from './components/SwipableMobileCarousel/SwipableMobileCarousel';
244
- export { SwipableMobileCarouselSlide } from './components/SwipableMobileCarousel/SwipableMobileCarouselSlide';
245
- export type { SwipableMobileCarouselSlideProps } from './components/SwipableMobileCarousel/SwipableMobileCarouselSlide';
246
- export { SwipableMobileCarouselSlideHeader } from './components/SwipableMobileCarousel/SwipableMobileCarouselSlideHeader';
247
- export type { SwipableMobileCarouselSlideHeaderProps } from './components/SwipableMobileCarousel/SwipableMobileCarouselSlideHeader';
248
- export { SwipableMobileCarouselSlideBody } from './components/SwipableMobileCarousel/SwipableMobileCarouselSlideBody';
249
- export type { SwipableMobileCarouselSlideBodyProps } from './components/SwipableMobileCarousel/SwipableMobileCarouselSlideBody';
250
- export { SwipableMobileCarouselSlideFooter } from './components/SwipableMobileCarousel/SwipableMobileCarouselSlideFooter';
251
- export type { SwipableMobileCarouselSlideFooterProps } from './components/SwipableMobileCarousel/SwipableMobileCarouselSlideFooter';
package/src/motion.ts DELETED
@@ -1,78 +0,0 @@
1
- 'use client';
2
-
3
- import { useEffect, useState } from 'react';
4
-
5
- export type TransitionPhase = 'entering' | 'open' | 'closing' | 'closed';
6
-
7
- /**
8
- * useMountTransition — generic two-phase-mount state machine for animated
9
- * overlays (Dialog, Drawer, and their Phase-B successors: Sheet,
10
- * ConfirmDialog, Menu). Internal to the design system — not exported from
11
- * `index.ts`; each component wires its own CSS classes to the returned phase.
12
- *
13
- * The `open` prop controls mounting from the outside, but both directions need
14
- * two renders to actually animate rather than snap: entering needs a frame at
15
- * the closed-position styles before flipping to open (so the browser has
16
- * something to interpolate from), and exiting needs to stay mounted *after*
17
- * `open` goes false long enough to play in reverse — so `mounted` and `open`
18
- * diverge for `durationMs` on close:
19
- *
20
- * open=true -> phase 'entering' (closed-position styles — this applies
21
- * equally to a fresh mount that starts open, e.g. a
22
- * route-driven overlay, and to an existing instance whose
23
- * `open` prop just flipped true; both should animate in the
24
- * same way) -> next frame, phase 'open' (open-position styles;
25
- * the CSS transition between the two animates the entrance).
26
- * open=false -> phase 'closing' (still mounted, rendered back at the
27
- * closed-position styles so the transition reverses) -> after
28
- * durationMs, phase 'closed' (unmounts).
29
- *
30
- * A component only needs one conditional class: apply the "open" variant
31
- * when `phase === 'open'`, and leave the base (closed-position) styles as the
32
- * unconditional default — entering, closing, and the pre-transition instant
33
- * all render as that same base state, which is exactly what should animate
34
- * to/from.
35
- */
36
- export function useMountTransition(
37
- open: boolean,
38
- durationMs: number,
39
- ): { mounted: boolean; phase: TransitionPhase } {
40
- const [phase, setPhase] = useState<TransitionPhase>(open ? 'entering' : 'closed');
41
-
42
- useEffect(() => {
43
- if (open) {
44
- setPhase('entering');
45
- const raf = requestAnimationFrame(() => setPhase('open'));
46
- return () => cancelAnimationFrame(raf);
47
- }
48
- setPhase((p) => (p === 'closed' ? 'closed' : 'closing'));
49
- const timer = setTimeout(() => setPhase('closed'), durationMs);
50
- return () => clearTimeout(timer);
51
- }, [open, durationMs]);
52
-
53
- return { mounted: phase !== 'closed', phase };
54
- }
55
-
56
- /**
57
- * usePrefersReducedMotion — SSR-safe (defaults to `false` until the client
58
- * mounts, matching every other SSR-safe hook in this system). Components pair
59
- * this with a `durationMs` of ~0 passed to `useMountTransition` and a matching
60
- * `@media (prefers-reduced-motion: reduce)` CSS rule collapsing the same
61
- * transition to near-instant — both sides must agree, or the JS unmount timer
62
- * and the CSS animation duration drift apart.
63
- */
64
- export function usePrefersReducedMotion(): boolean {
65
- const [reduced, setReduced] = useState(false);
66
-
67
- useEffect(() => {
68
- const mql = window.matchMedia('(prefers-reduced-motion: reduce)');
69
- setReduced(mql.matches);
70
- function handleChange(e: MediaQueryListEvent) {
71
- setReduced(e.matches);
72
- }
73
- mql.addEventListener('change', handleChange);
74
- return () => mql.removeEventListener('change', handleChange);
75
- }, []);
76
-
77
- return reduced;
78
- }
@@ -1,94 +0,0 @@
1
- 'use client';
2
-
3
- import { type RefObject, useEffect, useRef } from 'react';
4
- import { lockBodyScroll, unlockBodyScroll } from './scroll-lock';
5
-
6
- // Internal to the design system — not exported from `index.ts`. Shared by
7
- // Dialog, Drawer, and Sheet, which independently implemented identical
8
- // scrim/focus-trap/Escape/scroll-lock logic before this consolidation
9
- // (RFC 0079, epic task 9.19). ConfirmDialog is deliberately not migrated
10
- // here — it stays on the native `<dialog>` element, which already provides
11
- // equivalent focus-trap/backdrop semantics more reliably for its use case.
12
-
13
- export const OVERLAY_FOCUSABLE_SELECTOR =
14
- 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
15
-
16
- /**
17
- * Locks document scroll for the whole mounted lifetime of an overlay
18
- * (including its exit animation), not just while `open` — so the background
19
- * can't scroll while the panel is still visibly sliding/fading away.
20
- * Ref-counted via `scroll-lock.ts` so nested overlays (e.g. a confirmation
21
- * dialog inside an overlay-shell plugin) don't release the lock while a
22
- * sibling is still open.
23
- */
24
- export function useOverlayScrollLock(mounted: boolean): void {
25
- useEffect(() => {
26
- if (!mounted) return;
27
- lockBodyScroll();
28
- return unlockBodyScroll;
29
- }, [mounted]);
30
- }
31
-
32
- /**
33
- * Captures the element focused before the overlay opened, moves focus into
34
- * the panel when `active` becomes true, and restores the original focus on
35
- * cleanup. Callers pass whichever prop should trigger the capture — `open`
36
- * for Dialog/Drawer, `mounted` for Sheet (which restores focus on unmount
37
- * rather than on the raw `open` transition).
38
- */
39
- export function useOverlayFocusCapture(
40
- panelRef: RefObject<HTMLElement | null>,
41
- active: boolean,
42
- ): void {
43
- const previouslyFocused = useRef<HTMLElement | null>(null);
44
- useEffect(() => {
45
- if (!active) return;
46
- previouslyFocused.current = document.activeElement as HTMLElement | null;
47
- const panel = panelRef.current;
48
- const first = panel?.querySelector<HTMLElement>(OVERLAY_FOCUSABLE_SELECTOR);
49
- (first ?? panel)?.focus();
50
- return () => previouslyFocused.current?.focus();
51
- }, [active, panelRef]);
52
- }
53
-
54
- /**
55
- * Escape-to-close plus a Tab focus trap cycling within the panel. Attached
56
- * at `document` level so no keyboard listener is needed on the overlay's own
57
- * element (which would trigger `jsx-a11y/no-noninteractive-element-interactions`).
58
- */
59
- export function useOverlayKeyboardTrap(
60
- panelRef: RefObject<HTMLElement | null>,
61
- open: boolean,
62
- onClose: () => void,
63
- ): void {
64
- useEffect(() => {
65
- if (!open) return;
66
- function handleKeyDown(e: KeyboardEvent) {
67
- if (e.key === 'Escape') {
68
- e.stopPropagation();
69
- onClose();
70
- return;
71
- }
72
- if (e.key !== 'Tab') return;
73
- const panel = panelRef.current;
74
- if (!panel) return;
75
- const focusable = [...panel.querySelectorAll<HTMLElement>(OVERLAY_FOCUSABLE_SELECTOR)];
76
- const first = focusable[0];
77
- const last = focusable.at(-1);
78
- if (!first || !last) {
79
- e.preventDefault();
80
- return;
81
- }
82
- const active = document.activeElement;
83
- if (e.shiftKey && active === first) {
84
- e.preventDefault();
85
- last.focus();
86
- } else if (!e.shiftKey && active === last) {
87
- e.preventDefault();
88
- first.focus();
89
- }
90
- }
91
- document.addEventListener('keydown', handleKeyDown);
92
- return () => document.removeEventListener('keydown', handleKeyDown);
93
- }, [open, onClose, panelRef]);
94
- }
@@ -1,22 +0,0 @@
1
- // Ref-counted body scroll lock. Multiple overlays (Dialog, Drawer) can be
2
- // open simultaneously; the body stays locked until all of them close.
3
- // Uses data-scroll-locks on <body> as a counter so concurrent callers
4
- // don't clobber each other's lock state.
5
- //
6
- // Only locks overflow-y (not the shorthand overflow) so the stylesheet's
7
- // overflow-x: hidden on html,body is never overridden. On Android, clearing
8
- // the overflow shorthand causes a brief frame where overflow-x is also
9
- // unlocked — content wider than the viewport can paint and the home screen
10
- // appears to "blow out" after the overlay closes.
11
-
12
- export function lockBodyScroll(): void {
13
- const count = parseInt(document.body.dataset.scrollLocks ?? '0', 10);
14
- document.body.dataset.scrollLocks = String(count + 1);
15
- if (count === 0) document.body.style.overflowY = 'hidden';
16
- }
17
-
18
- export function unlockBodyScroll(): void {
19
- const next = Math.max(0, parseInt(document.body.dataset.scrollLocks ?? '0', 10) - 1);
20
- document.body.dataset.scrollLocks = String(next);
21
- if (next === 0) document.body.style.overflowY = '';
22
- }