@sovereignfs/ui 0.83.1 → 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 (556) hide show
  1. package/LICENSE +373 -661
  2. package/NOTICE +8 -0
  3. package/README.md +4 -6
  4. package/dist/AppsLauncher.module.css +6 -0
  5. package/dist/Button.module.css +5 -0
  6. package/dist/Card.module.css +6 -0
  7. package/dist/CardTile.module.css +6 -0
  8. package/dist/CheckableListRow.module.css +8 -0
  9. package/dist/Checkbox.module.css +8 -0
  10. package/dist/CodeTextarea.module.css +6 -0
  11. package/dist/ColorPicker.module.css +6 -0
  12. package/dist/Combobox.module.css +6 -0
  13. package/dist/Command.module.css +6 -0
  14. package/dist/ConfirmDialog.module.css +6 -0
  15. package/dist/DatePicker.module.css +6 -0
  16. package/dist/Dialog.module.css +1 -1
  17. package/dist/DragHandleRow.module.css +6 -0
  18. package/dist/FileDropzone.module.css +25 -1
  19. package/dist/Header.module.css +6 -0
  20. package/dist/IconPicker.module.css +14 -4
  21. package/dist/Input.module.css +6 -0
  22. package/dist/LegalLinks.module.css +9 -2
  23. package/dist/Markdown.module.css +5 -0
  24. package/dist/Message.module.css +9 -0
  25. package/dist/MobileAppsDrawer.module.css +9 -5
  26. package/dist/MobileFooter.module.css +6 -0
  27. package/dist/NavList.module.css +11 -2
  28. package/dist/NavTabs.module.css +7 -1
  29. package/dist/NotificationsPanel.module.css +10 -0
  30. package/dist/QrCode.module.css +17 -0
  31. package/dist/QuantityStepper.module.css +4 -2
  32. package/dist/RadioGroup.module.css +6 -0
  33. package/dist/SegmentedControl.module.css +6 -0
  34. package/dist/Select.module.css +6 -0
  35. package/dist/Sheet.module.css +16 -1
  36. package/dist/SplitPane.module.css +1 -1
  37. package/dist/StepStrip.module.css +5 -3
  38. package/dist/SuggestionInput.module.css +12 -1
  39. package/dist/SwipableMobileCarouselDots.module.css +6 -0
  40. package/dist/SystemBanner.module.css +6 -0
  41. package/dist/Tabs.module.css +6 -0
  42. package/dist/TagInput.module.css +6 -0
  43. package/dist/Textarea.module.css +6 -0
  44. package/dist/Toast.module.css +5 -0
  45. package/dist/Toggle.module.css +7 -0
  46. package/dist/Tooltip.module.css +6 -0
  47. package/dist/UserMenu.module.css +5 -0
  48. package/dist/fonts/OFL.txt +93 -0
  49. package/dist/fonts/hanken-grotesk-cyrillic-ext-wght-normal.woff2 +0 -0
  50. package/dist/fonts/hanken-grotesk-latin-ext-wght-normal.woff2 +0 -0
  51. package/dist/fonts/hanken-grotesk-latin-wght-normal.woff2 +0 -0
  52. package/dist/fonts/hanken-grotesk-vietnamese-wght-normal.woff2 +0 -0
  53. package/dist/index.d.ts +121 -43
  54. package/dist/index.js +1410 -1152
  55. package/dist/tokens/fonts.css +53 -0
  56. package/dist/tokens/primitives.css +12 -12
  57. package/dist/tokens.css +2 -1
  58. package/package.json +24 -13
  59. package/src/__tests__/motion.test.tsx +0 -105
  60. package/src/__tests__/package-json.test.ts +0 -8
  61. package/src/components/Accordion/Accordion.module.css +0 -3
  62. package/src/components/Accordion/Accordion.stories.tsx +0 -110
  63. package/src/components/Accordion/Accordion.tsx +0 -53
  64. package/src/components/Accordion/__tests__/Accordion.test.tsx +0 -61
  65. package/src/components/Alert/Alert.module.css +0 -62
  66. package/src/components/Alert/Alert.stories.tsx +0 -96
  67. package/src/components/Alert/Alert.tsx +0 -58
  68. package/src/components/Alert/__tests__/Alert.test.tsx +0 -75
  69. package/src/components/AppsLauncher/AppsLauncher.module.css +0 -96
  70. package/src/components/AppsLauncher/AppsLauncher.stories.tsx +0 -58
  71. package/src/components/AppsLauncher/AppsLauncher.tsx +0 -117
  72. package/src/components/AppsLauncher/__tests__/AppsLauncher.test.tsx +0 -52
  73. package/src/components/AspectRatio/AspectRatio.module.css +0 -15
  74. package/src/components/AspectRatio/AspectRatio.stories.tsx +0 -78
  75. package/src/components/AspectRatio/AspectRatio.tsx +0 -21
  76. package/src/components/AspectRatio/__tests__/AspectRatio.test.tsx +0 -27
  77. package/src/components/Avatar/Avatar.module.css +0 -38
  78. package/src/components/Avatar/Avatar.tsx +0 -42
  79. package/src/components/Badge/Badge.module.css +0 -177
  80. package/src/components/Badge/Badge.stories.tsx +0 -238
  81. package/src/components/Badge/Badge.tsx +0 -84
  82. package/src/components/Badge/__tests__/Badge.test.tsx +0 -90
  83. package/src/components/BalanceChip/BalanceChip.module.css +0 -32
  84. package/src/components/BalanceChip/BalanceChip.stories.tsx +0 -45
  85. package/src/components/BalanceChip/BalanceChip.tsx +0 -33
  86. package/src/components/Breadcrumb/Breadcrumb.module.css +0 -49
  87. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +0 -47
  88. package/src/components/Breadcrumb/Breadcrumb.tsx +0 -57
  89. package/src/components/Breadcrumb/__tests__/Breadcrumb.test.tsx +0 -52
  90. package/src/components/Button/Button.module.css +0 -169
  91. package/src/components/Button/Button.stories.tsx +0 -83
  92. package/src/components/Button/Button.tsx +0 -52
  93. package/src/components/Button/__tests__/Button.test.tsx +0 -66
  94. package/src/components/ButtonGroup/ButtonGroup.module.css +0 -29
  95. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +0 -57
  96. package/src/components/ButtonGroup/ButtonGroup.tsx +0 -27
  97. package/src/components/ButtonGroup/__tests__/ButtonGroup.test.tsx +0 -29
  98. package/src/components/Calendar/Calendar.module.css +0 -126
  99. package/src/components/Calendar/Calendar.tsx +0 -213
  100. package/src/components/Calendar/__tests__/Calendar.test.tsx +0 -98
  101. package/src/components/Calendar/dateUtils.ts +0 -97
  102. package/src/components/Card/Card.module.css +0 -42
  103. package/src/components/Card/Card.tsx +0 -34
  104. package/src/components/CardTile/CardTile.module.css +0 -181
  105. package/src/components/CardTile/CardTile.stories.tsx +0 -86
  106. package/src/components/CardTile/CardTile.tsx +0 -128
  107. package/src/components/CardTile/__tests__/CardTile.test.tsx +0 -56
  108. package/src/components/CheckableListRow/CheckableListRow.module.css +0 -95
  109. package/src/components/CheckableListRow/CheckableListRow.stories.tsx +0 -99
  110. package/src/components/CheckableListRow/CheckableListRow.tsx +0 -89
  111. package/src/components/Checkbox/Checkbox.module.css +0 -111
  112. package/src/components/Checkbox/Checkbox.tsx +0 -78
  113. package/src/components/CodeTextarea/CodeTextarea.module.css +0 -53
  114. package/src/components/CodeTextarea/CodeTextarea.stories.tsx +0 -77
  115. package/src/components/CodeTextarea/CodeTextarea.tsx +0 -36
  116. package/src/components/Collapsible/Collapsible.module.css +0 -70
  117. package/src/components/Collapsible/Collapsible.stories.tsx +0 -62
  118. package/src/components/Collapsible/Collapsible.tsx +0 -66
  119. package/src/components/Collapsible/__tests__/Collapsible.test.tsx +0 -71
  120. package/src/components/ColorPicker/ColorPicker.module.css +0 -132
  121. package/src/components/ColorPicker/ColorPicker.stories.tsx +0 -80
  122. package/src/components/ColorPicker/ColorPicker.tsx +0 -157
  123. package/src/components/ColorPicker/__tests__/ColorPicker.test.tsx +0 -117
  124. package/src/components/Combobox/Combobox.module.css +0 -122
  125. package/src/components/Combobox/Combobox.stories.tsx +0 -79
  126. package/src/components/Combobox/Combobox.tsx +0 -186
  127. package/src/components/Combobox/__tests__/Combobox.test.tsx +0 -158
  128. package/src/components/Command/Command.module.css +0 -80
  129. package/src/components/Command/Command.stories.tsx +0 -104
  130. package/src/components/Command/Command.tsx +0 -168
  131. package/src/components/Command/__tests__/Command.test.tsx +0 -162
  132. package/src/components/ConfirmDialog/ConfirmDialog.module.css +0 -113
  133. package/src/components/ConfirmDialog/ConfirmDialog.tsx +0 -150
  134. package/src/components/ConfirmDialog/__tests__/ConfirmDialog.test.tsx +0 -214
  135. package/src/components/ConsentPrompt/ConsentPrompt.module.css +0 -21
  136. package/src/components/ConsentPrompt/ConsentPrompt.stories.tsx +0 -31
  137. package/src/components/ConsentPrompt/ConsentPrompt.tsx +0 -66
  138. package/src/components/ContextMenu/ContextMenu.stories.tsx +0 -81
  139. package/src/components/ContextMenu/ContextMenu.tsx +0 -100
  140. package/src/components/ContextMenu/__tests__/ContextMenu.test.tsx +0 -87
  141. package/src/components/CurrencyInput/CurrencyInput.stories.tsx +0 -50
  142. package/src/components/CurrencyInput/CurrencyInput.tsx +0 -60
  143. package/src/components/DataTable/DataTable.module.css +0 -28
  144. package/src/components/DataTable/DataTable.stories.tsx +0 -74
  145. package/src/components/DataTable/DataTable.tsx +0 -154
  146. package/src/components/DataTable/__tests__/DataTable.test.tsx +0 -123
  147. package/src/components/DatePicker/DatePicker.module.css +0 -61
  148. package/src/components/DatePicker/DatePicker.tsx +0 -103
  149. package/src/components/DatePicker/__tests__/DatePicker.test.tsx +0 -89
  150. package/src/components/DeviceOnlyGate/DeviceOnlyGate.tsx +0 -58
  151. package/src/components/DeviceOnlyGate/__tests__/DeviceOnlyGate.test.tsx +0 -45
  152. package/src/components/DeviceStorageKeyGate/DeviceStorageKeyGate.tsx +0 -100
  153. package/src/components/DeviceStorageKeyGate/__tests__/DeviceStorageKeyGate.test.tsx +0 -119
  154. package/src/components/Dialog/Dialog.module.css +0 -335
  155. package/src/components/Dialog/Dialog.stories.tsx +0 -324
  156. package/src/components/Dialog/Dialog.tsx +0 -254
  157. package/src/components/Dialog/__tests__/Dialog.test.tsx +0 -318
  158. package/src/components/DragHandleRow/DragHandleRow.module.css +0 -57
  159. package/src/components/DragHandleRow/DragHandleRow.tsx +0 -42
  160. package/src/components/Drawer/Drawer.module.css +0 -121
  161. package/src/components/Drawer/Drawer.stories.tsx +0 -132
  162. package/src/components/Drawer/Drawer.tsx +0 -175
  163. package/src/components/Drawer/__tests__/Drawer.test.tsx +0 -226
  164. package/src/components/EmptyState/EmptyState.module.css +0 -27
  165. package/src/components/EmptyState/EmptyState.tsx +0 -27
  166. package/src/components/FileDropzone/FileDropzone.module.css +0 -63
  167. package/src/components/FileDropzone/FileDropzone.tsx +0 -109
  168. package/src/components/FileDropzone/__tests__/FileDropzone.test.tsx +0 -67
  169. package/src/components/FormField/FormField.module.css +0 -33
  170. package/src/components/FormField/FormField.tsx +0 -78
  171. package/src/components/FormField/__tests__/FormField.test.tsx +0 -83
  172. package/src/components/GripIcon/GripIcon.tsx +0 -27
  173. package/src/components/Header/Header.module.css +0 -62
  174. package/src/components/Header/Header.stories.tsx +0 -452
  175. package/src/components/Header/Header.tsx +0 -102
  176. package/src/components/Header/__tests__/Header.test.tsx +0 -104
  177. package/src/components/HeaderFooterLayout/HeaderFooterLayout.module.css +0 -21
  178. package/src/components/HeaderFooterLayout/HeaderFooterLayout.stories.tsx +0 -111
  179. package/src/components/HeaderFooterLayout/HeaderFooterLayout.tsx +0 -54
  180. package/src/components/HeaderFooterLayout/__tests__/HeaderFooterLayout.test.tsx +0 -58
  181. package/src/components/HoverCard/HoverCard.module.css +0 -3
  182. package/src/components/HoverCard/HoverCard.stories.tsx +0 -66
  183. package/src/components/HoverCard/HoverCard.tsx +0 -111
  184. package/src/components/HoverCard/__tests__/HoverCard.test.tsx +0 -99
  185. package/src/components/Icon/Icon.module.css +0 -27
  186. package/src/components/Icon/Icon.stories.tsx +0 -95
  187. package/src/components/Icon/Icon.tsx +0 -43
  188. package/src/components/Icon/__tests__/Icon.test.tsx +0 -40
  189. package/src/components/Icon/icons/activity.tsx +0 -20
  190. package/src/components/Icon/icons/alert-triangle.tsx +0 -22
  191. package/src/components/Icon/icons/apple.tsx +0 -21
  192. package/src/components/Icon/icons/arrow-left-right.tsx +0 -23
  193. package/src/components/Icon/icons/banana.tsx +0 -21
  194. package/src/components/Icon/icons/beef.tsx +0 -22
  195. package/src/components/Icon/icons/beer.tsx +0 -24
  196. package/src/components/Icon/icons/bell.tsx +0 -21
  197. package/src/components/Icon/icons/bold.tsx +0 -20
  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-chevron-left.tsx +0 -21
  208. package/src/components/Icon/icons/circle-x.tsx +0 -22
  209. package/src/components/Icon/icons/code.tsx +0 -21
  210. package/src/components/Icon/icons/coffee.tsx +0 -23
  211. package/src/components/Icon/icons/cookie.tsx +0 -25
  212. package/src/components/Icon/icons/copy.tsx +0 -21
  213. package/src/components/Icon/icons/credit-card.tsx +0 -21
  214. package/src/components/Icon/icons/croissant.tsx +0 -24
  215. package/src/components/Icon/icons/cup-soda.tsx +0 -23
  216. package/src/components/Icon/icons/database.tsx +0 -22
  217. package/src/components/Icon/icons/download.tsx +0 -22
  218. package/src/components/Icon/icons/drumstick.tsx +0 -21
  219. package/src/components/Icon/icons/egg.tsx +0 -20
  220. package/src/components/Icon/icons/ellipsis-vertical.tsx +0 -22
  221. package/src/components/Icon/icons/external-link.tsx +0 -22
  222. package/src/components/Icon/icons/eye-off.tsx +0 -23
  223. package/src/components/Icon/icons/eye.tsx +0 -21
  224. package/src/components/Icon/icons/file-text.tsx +0 -24
  225. package/src/components/Icon/icons/file.tsx +0 -21
  226. package/src/components/Icon/icons/fish.tsx +0 -25
  227. package/src/components/Icon/icons/folder-closed.tsx +0 -21
  228. package/src/components/Icon/icons/folder-open.tsx +0 -20
  229. package/src/components/Icon/icons/folder.tsx +0 -20
  230. package/src/components/Icon/icons/folders.tsx +0 -21
  231. package/src/components/Icon/icons/grid-2x2.tsx +0 -22
  232. package/src/components/Icon/icons/hat-glasses.tsx +0 -24
  233. package/src/components/Icon/icons/history.tsx +0 -22
  234. package/src/components/Icon/icons/house.tsx +0 -21
  235. package/src/components/Icon/icons/inbox.tsx +0 -21
  236. package/src/components/Icon/icons/index.ts +0 -394
  237. package/src/components/Icon/icons/info.tsx +0 -22
  238. package/src/components/Icon/icons/italic.tsx +0 -22
  239. package/src/components/Icon/icons/layers.tsx +0 -22
  240. package/src/components/Icon/icons/layout-dashboard.tsx +0 -23
  241. package/src/components/Icon/icons/layout-grid.tsx +0 -23
  242. package/src/components/Icon/icons/link.tsx +0 -21
  243. package/src/components/Icon/icons/list-ordered.tsx +0 -25
  244. package/src/components/Icon/icons/list.tsx +0 -25
  245. package/src/components/Icon/icons/lock.tsx +0 -21
  246. package/src/components/Icon/icons/log-out.tsx +0 -22
  247. package/src/components/Icon/icons/luggage.tsx +0 -24
  248. package/src/components/Icon/icons/mail.tsx +0 -21
  249. package/src/components/Icon/icons/map-pin.tsx +0 -21
  250. package/src/components/Icon/icons/menu.tsx +0 -22
  251. package/src/components/Icon/icons/milk.tsx +0 -22
  252. package/src/components/Icon/icons/minus.tsx +0 -20
  253. package/src/components/Icon/icons/package.tsx +0 -23
  254. package/src/components/Icon/icons/paint-bucket.tsx +0 -23
  255. package/src/components/Icon/icons/panel-left.tsx +0 -21
  256. package/src/components/Icon/icons/pencil.tsx +0 -21
  257. package/src/components/Icon/icons/pin.tsx +0 -21
  258. package/src/components/Icon/icons/pizza.tsx +0 -24
  259. package/src/components/Icon/icons/plus.tsx +0 -21
  260. package/src/components/Icon/icons/rectangle-ellipsis.tsx +0 -23
  261. package/src/components/Icon/icons/refresh-cw.tsx +0 -23
  262. package/src/components/Icon/icons/rotate-ccw.tsx +0 -21
  263. package/src/components/Icon/icons/rotate-cw.tsx +0 -21
  264. package/src/components/Icon/icons/route.tsx +0 -22
  265. package/src/components/Icon/icons/salad.tsx +0 -24
  266. package/src/components/Icon/icons/search.tsx +0 -21
  267. package/src/components/Icon/icons/send.tsx +0 -21
  268. package/src/components/Icon/icons/settings.tsx +0 -21
  269. package/src/components/Icon/icons/share-2.tsx +0 -24
  270. package/src/components/Icon/icons/sheet.tsx +0 -24
  271. package/src/components/Icon/icons/shield.tsx +0 -20
  272. package/src/components/Icon/icons/shopping-basket.tsx +0 -26
  273. package/src/components/Icon/icons/sliders-horizontal.tsx +0 -28
  274. package/src/components/Icon/icons/smartphone.tsx +0 -21
  275. package/src/components/Icon/icons/snowflake.tsx +0 -31
  276. package/src/components/Icon/icons/spray-can.tsx +0 -29
  277. package/src/components/Icon/icons/square-kanban.tsx +0 -23
  278. package/src/components/Icon/icons/table.tsx +0 -23
  279. package/src/components/Icon/icons/trash-2.tsx +0 -24
  280. package/src/components/Icon/icons/upload.tsx +0 -22
  281. package/src/components/Icon/icons/user-round-plus.tsx +0 -23
  282. package/src/components/Icon/icons/user.tsx +0 -21
  283. package/src/components/Icon/icons/users.tsx +0 -23
  284. package/src/components/Icon/icons/wine.tsx +0 -23
  285. package/src/components/Icon/icons/x.tsx +0 -21
  286. package/src/components/IconPicker/IconPicker.module.css +0 -63
  287. package/src/components/IconPicker/IconPicker.stories.tsx +0 -84
  288. package/src/components/IconPicker/IconPicker.tsx +0 -90
  289. package/src/components/Input/Input.module.css +0 -52
  290. package/src/components/Input/Input.stories.tsx +0 -86
  291. package/src/components/Input/Input.tsx +0 -20
  292. package/src/components/Input/__tests__/Input.test.tsx +0 -22
  293. package/src/components/Item/Item.module.css +0 -70
  294. package/src/components/Item/Item.stories.tsx +0 -62
  295. package/src/components/Item/Item.tsx +0 -54
  296. package/src/components/Item/__tests__/Item.test.tsx +0 -39
  297. package/src/components/Kbd/Kbd.module.css +0 -14
  298. package/src/components/Kbd/Kbd.stories.tsx +0 -32
  299. package/src/components/Kbd/Kbd.tsx +0 -12
  300. package/src/components/Kbd/__tests__/Kbd.test.tsx +0 -14
  301. package/src/components/Label/Label.module.css +0 -11
  302. package/src/components/Label/Label.stories.tsx +0 -40
  303. package/src/components/Label/Label.tsx +0 -24
  304. package/src/components/Label/__tests__/Label.test.tsx +0 -32
  305. package/src/components/LegalLinks/LegalLinks.module.css +0 -24
  306. package/src/components/LegalLinks/LegalLinks.stories.tsx +0 -22
  307. package/src/components/LegalLinks/LegalLinks.tsx +0 -40
  308. package/src/components/Markdown/Markdown.module.css +0 -73
  309. package/src/components/Markdown/Markdown.stories.tsx +0 -40
  310. package/src/components/Markdown/Markdown.tsx +0 -305
  311. package/src/components/Markdown/__tests__/Markdown.test.tsx +0 -144
  312. package/src/components/Marker/Marker.module.css +0 -33
  313. package/src/components/Marker/Marker.stories.tsx +0 -39
  314. package/src/components/Marker/Marker.tsx +0 -34
  315. package/src/components/Marker/__tests__/Marker.test.tsx +0 -23
  316. package/src/components/MemberMultiSelect/MemberMultiSelect.module.css +0 -27
  317. package/src/components/MemberMultiSelect/MemberMultiSelect.stories.tsx +0 -74
  318. package/src/components/MemberMultiSelect/MemberMultiSelect.tsx +0 -67
  319. package/src/components/Menu/Menu.module.css +0 -90
  320. package/src/components/Menu/Menu.tsx +0 -209
  321. package/src/components/Menu/__tests__/Menu.test.tsx +0 -227
  322. package/src/components/Menubar/Menubar.stories.tsx +0 -52
  323. package/src/components/Menubar/Menubar.tsx +0 -42
  324. package/src/components/Menubar/__tests__/Menubar.test.tsx +0 -45
  325. package/src/components/Message/Message.module.css +0 -99
  326. package/src/components/Message/Message.stories.tsx +0 -79
  327. package/src/components/Message/Message.tsx +0 -41
  328. package/src/components/Message/__tests__/Message.test.tsx +0 -46
  329. package/src/components/MessageScroller/MessageScroller.module.css +0 -65
  330. package/src/components/MessageScroller/MessageScroller.stories.tsx +0 -84
  331. package/src/components/MessageScroller/MessageScroller.tsx +0 -84
  332. package/src/components/MessageScroller/__tests__/MessageScroller.test.tsx +0 -105
  333. package/src/components/MobileAppsDrawer/MobileAppsDrawer.module.css +0 -82
  334. package/src/components/MobileAppsDrawer/MobileAppsDrawer.tsx +0 -78
  335. package/src/components/MobileAppsDrawer/__tests__/MobileAppsDrawer.test.tsx +0 -80
  336. package/src/components/MobileFooter/MobileFooter.module.css +0 -73
  337. package/src/components/MobileFooter/MobileFooter.stories.tsx +0 -47
  338. package/src/components/MobileFooter/MobileFooter.tsx +0 -122
  339. package/src/components/MobileFooter/__tests__/MobileFooter.test.tsx +0 -129
  340. package/src/components/MobileHeader/MobileHeader.module.css +0 -76
  341. package/src/components/MobileHeader/MobileHeader.stories.tsx +0 -57
  342. package/src/components/MobileHeader/MobileHeader.tsx +0 -90
  343. package/src/components/MobileHeader/__tests__/MobileHeader.test.tsx +0 -113
  344. package/src/components/NavList/NavList.module.css +0 -130
  345. package/src/components/NavList/NavList.tsx +0 -136
  346. package/src/components/NavList/__tests__/NavList.test.tsx +0 -109
  347. package/src/components/NavTabs/NavTabs.module.css +0 -50
  348. package/src/components/NavTabs/NavTabs.tsx +0 -61
  349. package/src/components/NavigationMenu/NavigationMenu.module.css +0 -53
  350. package/src/components/NavigationMenu/NavigationMenu.stories.tsx +0 -58
  351. package/src/components/NavigationMenu/NavigationMenu.tsx +0 -125
  352. package/src/components/NavigationMenu/__tests__/NavigationMenu.test.tsx +0 -93
  353. package/src/components/NotificationsPanel/NotificationsPanel.module.css +0 -258
  354. package/src/components/NotificationsPanel/NotificationsPanel.stories.tsx +0 -61
  355. package/src/components/NotificationsPanel/NotificationsPanel.tsx +0 -187
  356. package/src/components/NotificationsPanel/__tests__/NotificationsPanel.test.tsx +0 -78
  357. package/src/components/OfflineGate/OfflineGate.tsx +0 -44
  358. package/src/components/OfflineGate/__tests__/OfflineGate.test.tsx +0 -66
  359. package/src/components/OverlayHeader/OverlayHeader.module.css +0 -98
  360. package/src/components/OverlayHeader/OverlayHeader.tsx +0 -77
  361. package/src/components/OverlayHeader/__tests__/OverlayHeader.test.tsx +0 -69
  362. package/src/components/PageContainer/PageContainer.module.css +0 -82
  363. package/src/components/PageContainer/PageContainer.tsx +0 -64
  364. package/src/components/PageContainer/__tests__/PageContainer.test.tsx +0 -70
  365. package/src/components/PageHeader/PageHeader.module.css +0 -86
  366. package/src/components/PageHeader/PageHeader.tsx +0 -176
  367. package/src/components/PageHeader/__tests__/PageHeader.test.tsx +0 -103
  368. package/src/components/PageLayout/PageLayout.module.css +0 -51
  369. package/src/components/PageLayout/PageLayout.stories.tsx +0 -73
  370. package/src/components/PageLayout/PageLayout.tsx +0 -51
  371. package/src/components/PageLayout/__tests__/PageLayout.test.tsx +0 -34
  372. package/src/components/Pagination/Pagination.module.css +0 -98
  373. package/src/components/Pagination/Pagination.stories.tsx +0 -49
  374. package/src/components/Pagination/Pagination.tsx +0 -87
  375. package/src/components/Pagination/__tests__/Pagination.test.tsx +0 -56
  376. package/src/components/Popover/Popover.module.css +0 -74
  377. package/src/components/Popover/Popover.stories.tsx +0 -357
  378. package/src/components/Popover/Popover.tsx +0 -290
  379. package/src/components/Popover/__tests__/Popover.test.tsx +0 -263
  380. package/src/components/Progress/Progress.module.css +0 -20
  381. package/src/components/Progress/Progress.stories.tsx +0 -40
  382. package/src/components/Progress/Progress.tsx +0 -35
  383. package/src/components/Progress/__tests__/Progress.test.tsx +0 -31
  384. package/src/components/QuantityStepper/QuantityStepper.module.css +0 -67
  385. package/src/components/QuantityStepper/QuantityStepper.stories.tsx +0 -79
  386. package/src/components/QuantityStepper/QuantityStepper.tsx +0 -107
  387. package/src/components/RadioGroup/RadioGroup.module.css +0 -88
  388. package/src/components/RadioGroup/RadioGroup.stories.tsx +0 -69
  389. package/src/components/RadioGroup/RadioGroup.tsx +0 -99
  390. package/src/components/RadioGroup/__tests__/RadioGroup.test.tsx +0 -59
  391. package/src/components/Resizable/Resizable.module.css +0 -70
  392. package/src/components/Resizable/Resizable.stories.tsx +0 -82
  393. package/src/components/Resizable/Resizable.tsx +0 -313
  394. package/src/components/Resizable/__tests__/Resizable.test.tsx +0 -128
  395. package/src/components/ResponsiveSurface/ResponsiveSurface.tsx +0 -24
  396. package/src/components/ResponsiveSurface/__tests__/ResponsiveSurface.test.tsx +0 -73
  397. package/src/components/RootLayout/RootLayout.module.css +0 -12
  398. package/src/components/RootLayout/RootLayout.stories.tsx +0 -125
  399. package/src/components/RootLayout/RootLayout.tsx +0 -185
  400. package/src/components/RootLayout/__tests__/RootLayout.test.tsx +0 -161
  401. package/src/components/ScrollArea/ScrollArea.module.css +0 -20
  402. package/src/components/ScrollArea/ScrollArea.stories.tsx +0 -57
  403. package/src/components/ScrollArea/ScrollArea.tsx +0 -27
  404. package/src/components/ScrollArea/__tests__/ScrollArea.test.tsx +0 -39
  405. package/src/components/SegmentedControl/SegmentedControl.module.css +0 -55
  406. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +0 -118
  407. package/src/components/SegmentedControl/SegmentedControl.tsx +0 -56
  408. package/src/components/SegmentedControl/__tests__/SegmentedControl.test.tsx +0 -63
  409. package/src/components/Select/Select.module.css +0 -82
  410. package/src/components/Select/Select.stories.tsx +0 -115
  411. package/src/components/Select/Select.tsx +0 -48
  412. package/src/components/Select/__tests__/Select.test.tsx +0 -59
  413. package/src/components/Sheet/Sheet.module.css +0 -58
  414. package/src/components/Sheet/Sheet.tsx +0 -109
  415. package/src/components/Sheet/__tests__/Sheet.test.tsx +0 -99
  416. package/src/components/Slider/Slider.module.css +0 -95
  417. package/src/components/Slider/Slider.stories.tsx +0 -64
  418. package/src/components/Slider/Slider.tsx +0 -77
  419. package/src/components/Slider/__tests__/Slider.test.tsx +0 -45
  420. package/src/components/Spinner/Spinner.module.css +0 -39
  421. package/src/components/Spinner/Spinner.tsx +0 -23
  422. package/src/components/SplitMethodSelector/SplitMethodSelector.stories.tsx +0 -33
  423. package/src/components/SplitMethodSelector/SplitMethodSelector.tsx +0 -43
  424. package/src/components/SplitPane/SplitPane.module.css +0 -85
  425. package/src/components/SplitPane/SplitPane.stories.tsx +0 -160
  426. package/src/components/SplitPane/SplitPane.tsx +0 -149
  427. package/src/components/SplitPane/__tests__/SplitPane.test.tsx +0 -51
  428. package/src/components/StatusBadge/StatusBadge.module.css +0 -59
  429. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -74
  430. package/src/components/StatusBadge/StatusBadge.tsx +0 -65
  431. package/src/components/StepStrip/StepStrip.module.css +0 -53
  432. package/src/components/StepStrip/StepStrip.tsx +0 -74
  433. package/src/components/SuggestionInput/SuggestionInput.module.css +0 -103
  434. package/src/components/SuggestionInput/SuggestionInput.stories.tsx +0 -144
  435. package/src/components/SuggestionInput/SuggestionInput.tsx +0 -207
  436. package/src/components/SwipableMobileCarousel/SwipableMobileCarousel.module.css +0 -64
  437. package/src/components/SwipableMobileCarousel/SwipableMobileCarousel.tsx +0 -243
  438. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlide.tsx +0 -35
  439. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideBody.tsx +0 -42
  440. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideFooter.tsx +0 -18
  441. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideHeader.tsx +0 -21
  442. package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideParts.module.css +0 -29
  443. package/src/components/SwipableMobileCarousel/__tests__/SwipableMobileCarousel.test.tsx +0 -214
  444. package/src/components/SwipableMobileCarousel/__tests__/SwipableMobileCarouselDevGuard.test.tsx +0 -61
  445. package/src/components/SwipableMobileCarousel/context.ts +0 -13
  446. package/src/components/SwipableMobileCarouselDots/SwipableMobileCarouselDots.module.css +0 -64
  447. package/src/components/SwipableMobileCarouselDots/SwipableMobileCarouselDots.tsx +0 -73
  448. package/src/components/SwipableMobileCarouselDots/__tests__/SwipableMobileCarouselDots.test.tsx +0 -63
  449. package/src/components/SwipeStack/SwipeStack.module.css +0 -101
  450. package/src/components/SwipeStack/SwipeStack.tsx +0 -199
  451. package/src/components/SwipeStack/SwipeStackCard.tsx +0 -22
  452. package/src/components/SwipeStack/__tests__/SwipeStack.test.tsx +0 -169
  453. package/src/components/SystemBanner/SystemBanner.module.css +0 -79
  454. package/src/components/SystemBanner/SystemBanner.stories.tsx +0 -86
  455. package/src/components/SystemBanner/SystemBanner.tsx +0 -50
  456. package/src/components/SystemBanner/__tests__/SystemBanner.test.tsx +0 -50
  457. package/src/components/Table/Table.module.css +0 -45
  458. package/src/components/Table/Table.stories.tsx +0 -125
  459. package/src/components/Table/Table.tsx +0 -51
  460. package/src/components/Table/__tests__/Table.test.tsx +0 -50
  461. package/src/components/Tabs/Tabs.module.css +0 -56
  462. package/src/components/Tabs/Tabs.stories.tsx +0 -100
  463. package/src/components/Tabs/Tabs.tsx +0 -46
  464. package/src/components/Tabs/__tests__/Tabs.test.tsx +0 -45
  465. package/src/components/TagInput/TagInput.module.css +0 -141
  466. package/src/components/TagInput/TagInput.stories.tsx +0 -109
  467. package/src/components/TagInput/TagInput.tsx +0 -174
  468. package/src/components/TagInput/__tests__/TagInput.test.tsx +0 -69
  469. package/src/components/Textarea/Textarea.module.css +0 -47
  470. package/src/components/Textarea/Textarea.tsx +0 -38
  471. package/src/components/Textarea/__tests__/Textarea.test.tsx +0 -51
  472. package/src/components/ThreeColumnLayout/ThreeColumnLayout.module.css +0 -35
  473. package/src/components/ThreeColumnLayout/ThreeColumnLayout.stories.tsx +0 -152
  474. package/src/components/ThreeColumnLayout/ThreeColumnLayout.tsx +0 -87
  475. package/src/components/ThreeColumnLayout/__tests__/ThreeColumnLayout.test.tsx +0 -78
  476. package/src/components/Toast/Toast.module.css +0 -191
  477. package/src/components/Toast/Toast.stories.tsx +0 -191
  478. package/src/components/Toast/Toast.tsx +0 -139
  479. package/src/components/Toggle/Toggle.module.css +0 -57
  480. package/src/components/Toggle/Toggle.stories.tsx +0 -95
  481. package/src/components/Toggle/Toggle.tsx +0 -39
  482. package/src/components/Toggle/__tests__/Toggle.test.tsx +0 -47
  483. package/src/components/Tooltip/Tooltip.module.css +0 -56
  484. package/src/components/Tooltip/Tooltip.tsx +0 -30
  485. package/src/components/Typography/Typography.module.css +0 -47
  486. package/src/components/Typography/Typography.stories.tsx +0 -62
  487. package/src/components/Typography/Typography.tsx +0 -30
  488. package/src/components/Typography/__tests__/Typography.test.tsx +0 -34
  489. package/src/components/UserMenu/UserMenu.module.css +0 -90
  490. package/src/components/UserMenu/UserMenu.stories.tsx +0 -49
  491. package/src/components/UserMenu/UserMenu.tsx +0 -132
  492. package/src/components/UserMenu/__tests__/UserMenu.test.tsx +0 -77
  493. package/src/css-modules.d.ts +0 -4
  494. package/src/hooks/__tests__/useCarouselRouteSync.test.tsx +0 -126
  495. package/src/hooks/__tests__/useDoubleTap.test.tsx +0 -117
  496. package/src/hooks/__tests__/useIsMobile.test.tsx +0 -80
  497. package/src/hooks/__tests__/useIsOffline.test.tsx +0 -53
  498. package/src/hooks/__tests__/useLongPress.test.tsx +0 -158
  499. package/src/hooks/__tests__/useOfflineTileState.test.tsx +0 -69
  500. package/src/hooks/__tests__/usePublishShellChromeHeight.test.tsx +0 -118
  501. package/src/hooks/__tests__/useReorderSensors.test.ts +0 -26
  502. package/src/hooks/__tests__/useResponsiveLayout.test.tsx +0 -87
  503. package/src/hooks/__tests__/useSnapCarousel.test.tsx +0 -175
  504. package/src/hooks/__tests__/useSwipeReveal.test.tsx +0 -110
  505. package/src/hooks/__tests__/useSwipeStack.test.tsx +0 -155
  506. package/src/hooks/index.ts +0 -33
  507. package/src/hooks/useCarouselRouteSync.ts +0 -92
  508. package/src/hooks/useCommitOnEnterOrBlur.ts +0 -39
  509. package/src/hooks/useDoubleTap.ts +0 -91
  510. package/src/hooks/useIsMobile.ts +0 -33
  511. package/src/hooks/useIsOffline.ts +0 -41
  512. package/src/hooks/useLongPress.ts +0 -185
  513. package/src/hooks/useOfflineTileState.ts +0 -45
  514. package/src/hooks/usePublishShellChromeHeight.ts +0 -96
  515. package/src/hooks/useReorderSensors.ts +0 -88
  516. package/src/hooks/useResponsiveLayout.ts +0 -36
  517. package/src/hooks/useSnapCarousel.ts +0 -284
  518. package/src/hooks/useSwipeReveal.ts +0 -107
  519. package/src/hooks/useSwipeStack.ts +0 -235
  520. package/src/index.ts +0 -311
  521. package/src/motion.ts +0 -78
  522. package/src/overlay-shell.ts +0 -159
  523. package/src/scroll-lock.ts +0 -22
  524. package/src/stories/Avatar.stories.tsx +0 -44
  525. package/src/stories/Card.stories.tsx +0 -35
  526. package/src/stories/Checkbox.stories.tsx +0 -45
  527. package/src/stories/DesignSystemOverview.stories.tsx +0 -3793
  528. package/src/stories/DeviceOnlyGate.stories.tsx +0 -35
  529. package/src/stories/DeviceStorageKeyGate.stories.tsx +0 -57
  530. package/src/stories/DragHandleRow.stories.tsx +0 -41
  531. package/src/stories/EmptyState.stories.tsx +0 -33
  532. package/src/stories/FileDropzone.stories.tsx +0 -69
  533. package/src/stories/FormField.stories.tsx +0 -47
  534. package/src/stories/GripIcon.stories.tsx +0 -29
  535. package/src/stories/InteractionHooks.stories.tsx +0 -925
  536. package/src/stories/LayoutSystem.stories.tsx +0 -639
  537. package/src/stories/MenuEntries.stories.tsx +0 -86
  538. package/src/stories/MobilePatterns.stories.tsx +0 -1536
  539. package/src/stories/NavList.stories.tsx +0 -147
  540. package/src/stories/NavTabs.stories.tsx +0 -53
  541. package/src/stories/OfflineGate.stories.tsx +0 -42
  542. package/src/stories/PageContainer.stories.tsx +0 -82
  543. package/src/stories/PageHeader.stories.tsx +0 -95
  544. package/src/stories/ResponsiveSurface.stories.tsx +0 -47
  545. package/src/stories/Spinner.stories.tsx +0 -25
  546. package/src/stories/StepStrip.stories.tsx +0 -76
  547. package/src/stories/SwipableMobileCarousel.stories.tsx +0 -362
  548. package/src/stories/SwipeStack.stories.tsx +0 -200
  549. package/src/stories/Textarea.stories.tsx +0 -63
  550. package/src/stories/TokenGallery.stories.tsx +0 -652
  551. package/src/stories/Tooltip.stories.tsx +0 -59
  552. package/src/tokens/primitives.css +0 -168
  553. package/src/tokens/semantic.css +0 -162
  554. package/src/tokens/theme-presets.css +0 -33
  555. package/src/tokens/theme-presets.ts +0 -72
  556. package/src/tokens.css +0 -5
@@ -1,362 +0,0 @@
1
- import { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { SwipableMobileCarousel } from '../components/SwipableMobileCarousel/SwipableMobileCarousel';
4
- import { SwipableMobileCarouselSlide } from '../components/SwipableMobileCarousel/SwipableMobileCarouselSlide';
5
- import { SwipableMobileCarouselSlideHeader } from '../components/SwipableMobileCarousel/SwipableMobileCarouselSlideHeader';
6
- import { SwipableMobileCarouselSlideBody } from '../components/SwipableMobileCarousel/SwipableMobileCarouselSlideBody';
7
- import { SwipableMobileCarouselSlideFooter } from '../components/SwipableMobileCarousel/SwipableMobileCarouselSlideFooter';
8
- import { SwipableMobileCarouselDots } from '../components/SwipableMobileCarouselDots/SwipableMobileCarouselDots';
9
-
10
- const SLIDES = [
11
- { key: 'lists', label: 'Lists' },
12
- { key: 'groceries', label: 'Groceries' },
13
- { key: 'errands', label: 'Errands' },
14
- { key: 'work', label: 'Work' },
15
- ];
16
-
17
- function slideBodyStyle(): React.CSSProperties {
18
- return {
19
- display: 'flex',
20
- alignItems: 'center',
21
- justifyContent: 'center',
22
- height: '100%',
23
- fontFamily: 'var(--sv-font-family)',
24
- color: 'var(--sv-color-text-primary)',
25
- };
26
- }
27
-
28
- function headerStyle(): React.CSSProperties {
29
- return {
30
- padding: 'var(--sv-space-4)',
31
- fontFamily: 'var(--sv-font-family)',
32
- fontWeight: 'var(--sv-font-weight-semibold)',
33
- color: 'var(--sv-color-text-primary)',
34
- borderBottom: '1px solid var(--sv-color-border)',
35
- };
36
- }
37
-
38
- function CarouselFrame({ children }: { children: React.ReactNode }) {
39
- return (
40
- <div
41
- style={{
42
- height: 480,
43
- maxWidth: 375,
44
- margin: '0 auto',
45
- border: '1px solid var(--sv-color-border)',
46
- borderRadius: 'var(--sv-radius-md)',
47
- overflow: 'hidden',
48
- }}
49
- >
50
- {children}
51
- </div>
52
- );
53
- }
54
-
55
- function DefaultDemo() {
56
- const [activeIndex, setActiveIndex] = useState(0);
57
- return (
58
- <CarouselFrame>
59
- <SwipableMobileCarousel
60
- activeIndex={activeIndex}
61
- onSettle={setActiveIndex}
62
- aria-label="Task lists"
63
- >
64
- {SLIDES.map((slide) => (
65
- <SwipableMobileCarouselSlide key={slide.key} slideKey={slide.key} label={slide.label}>
66
- <SwipableMobileCarouselSlideHeader>
67
- <div style={headerStyle()}>{slide.label}</div>
68
- </SwipableMobileCarouselSlideHeader>
69
- <SwipableMobileCarouselSlideBody>
70
- <div style={slideBodyStyle()}>{slide.label} content</div>
71
- </SwipableMobileCarouselSlideBody>
72
- </SwipableMobileCarouselSlide>
73
- ))}
74
- </SwipableMobileCarousel>
75
- </CarouselFrame>
76
- );
77
- }
78
-
79
- function LazyLoadingBodyDemo() {
80
- const [activeIndex, setActiveIndex] = useState(0);
81
- const [loadedKeys, setLoadedKeys] = useState<Set<string>>(new Set(['lists']));
82
-
83
- function simulateLoad(key: string) {
84
- setTimeout(() => setLoadedKeys((s) => new Set(s).add(key)), 1200);
85
- }
86
-
87
- return (
88
- <CarouselFrame>
89
- <SwipableMobileCarousel
90
- activeIndex={activeIndex}
91
- onSettle={(i) => {
92
- setActiveIndex(i);
93
- const key = SLIDES[i]?.key;
94
- if (key && !loadedKeys.has(key)) simulateLoad(key);
95
- }}
96
- aria-label="Task lists (simulated fetch)"
97
- >
98
- {SLIDES.map((slide) => (
99
- <SwipableMobileCarouselSlide key={slide.key} slideKey={slide.key} label={slide.label}>
100
- {/* The title renders immediately from already-known metadata —
101
- only the Body below waits on its own simulated 1.2s fetch. */}
102
- <SwipableMobileCarouselSlideHeader>
103
- <div style={headerStyle()}>{slide.label}</div>
104
- </SwipableMobileCarouselSlideHeader>
105
- <SwipableMobileCarouselSlideBody loading={!loadedKeys.has(slide.key)}>
106
- <div style={slideBodyStyle()}>{slide.label} content (loaded)</div>
107
- </SwipableMobileCarouselSlideBody>
108
- </SwipableMobileCarouselSlide>
109
- ))}
110
- </SwipableMobileCarousel>
111
- </CarouselFrame>
112
- );
113
- }
114
-
115
- function CustomIndicatorDemo() {
116
- const [activeIndex, setActiveIndex] = useState(0);
117
- return (
118
- <CarouselFrame>
119
- <SwipableMobileCarousel
120
- activeIndex={activeIndex}
121
- onSettle={setActiveIndex}
122
- aria-label="Task lists"
123
- renderIndicator={({ count, activeIndex: i, onJump }) => (
124
- <div
125
- style={{
126
- position: 'absolute',
127
- top: 8,
128
- right: 8,
129
- fontFamily: 'var(--sv-font-family)',
130
- fontSize: 'var(--sv-font-size-sm)',
131
- color: 'var(--sv-color-text-primary)',
132
- background: 'var(--sv-color-surface-raised)',
133
- borderRadius: 'var(--sv-radius-md)',
134
- padding: 'var(--sv-space-1) var(--sv-space-2)',
135
- }}
136
- >
137
- <button type="button" onClick={() => onJump(Math.max(0, i - 1))}>
138
- ‹
139
- </button>{' '}
140
- {i + 1} / {count}{' '}
141
- <button type="button" onClick={() => onJump(Math.min(count - 1, i + 1))}>
142
- ›
143
- </button>
144
- </div>
145
- )}
146
- >
147
- {SLIDES.map((slide) => (
148
- <SwipableMobileCarouselSlide key={slide.key} slideKey={slide.key} label={slide.label}>
149
- <SwipableMobileCarouselSlideHeader>
150
- <div style={headerStyle()}>{slide.label}</div>
151
- </SwipableMobileCarouselSlideHeader>
152
- <SwipableMobileCarouselSlideBody>
153
- <div style={slideBodyStyle()}>{slide.label} content</div>
154
- </SwipableMobileCarouselSlideBody>
155
- </SwipableMobileCarouselSlide>
156
- ))}
157
- </SwipableMobileCarousel>
158
- </CarouselFrame>
159
- );
160
- }
161
-
162
- function NoIndicatorDemo() {
163
- const [activeIndex, setActiveIndex] = useState(0);
164
- return (
165
- <CarouselFrame>
166
- <SwipableMobileCarousel
167
- activeIndex={activeIndex}
168
- onSettle={setActiveIndex}
169
- aria-label="Task lists"
170
- renderIndicator={null}
171
- >
172
- {SLIDES.map((slide) => (
173
- <SwipableMobileCarouselSlide key={slide.key} slideKey={slide.key} label={slide.label}>
174
- <SwipableMobileCarouselSlideHeader>
175
- <div style={headerStyle()}>{slide.label}</div>
176
- </SwipableMobileCarouselSlideHeader>
177
- <SwipableMobileCarouselSlideBody>
178
- <div style={slideBodyStyle()}>{slide.label} content</div>
179
- </SwipableMobileCarouselSlideBody>
180
- </SwipableMobileCarouselSlide>
181
- ))}
182
- </SwipableMobileCarousel>
183
- </CarouselFrame>
184
- );
185
- }
186
-
187
- function FooterDemo() {
188
- const [activeIndex, setActiveIndex] = useState(0);
189
- return (
190
- <CarouselFrame>
191
- <SwipableMobileCarousel
192
- activeIndex={activeIndex}
193
- onSettle={setActiveIndex}
194
- aria-label="Task lists"
195
- >
196
- {SLIDES.map((slide) => (
197
- <SwipableMobileCarouselSlide key={slide.key} slideKey={slide.key} label={slide.label}>
198
- <SwipableMobileCarouselSlideHeader>
199
- <div style={headerStyle()}>{slide.label}</div>
200
- </SwipableMobileCarouselSlideHeader>
201
- <SwipableMobileCarouselSlideBody>
202
- <div style={slideBodyStyle()}>{slide.label} content</div>
203
- </SwipableMobileCarouselSlideBody>
204
- <SwipableMobileCarouselSlideFooter>
205
- <div
206
- style={{
207
- padding: 'var(--sv-space-3) var(--sv-space-4)',
208
- borderTop: '1px solid var(--sv-color-border)',
209
- fontFamily: 'var(--sv-font-family)',
210
- fontSize: 'var(--sv-font-size-sm)',
211
- color: 'var(--sv-color-text-muted)',
212
- }}
213
- >
214
- + Add to {slide.label}
215
- </div>
216
- </SwipableMobileCarouselSlideFooter>
217
- </SwipableMobileCarouselSlide>
218
- ))}
219
- </SwipableMobileCarousel>
220
- </CarouselFrame>
221
- );
222
- }
223
-
224
- function DotsStandaloneDemo() {
225
- const [activeIndex, setActiveIndex] = useState(0);
226
- return (
227
- <SwipableMobileCarouselDots
228
- count={4}
229
- activeIndex={activeIndex}
230
- onJump={setActiveIndex}
231
- labels={['Lists', 'Groceries', 'Errands', 'Work']}
232
- aria-label="Task lists"
233
- />
234
- );
235
- }
236
-
237
- // Matches the real scenario `density="compact"` was added for: a many-list
238
- // mobile task manager whose default-spacing dot row reads as long/cramped in
239
- // a 375px viewport — see docs/design-system.md's carousel section.
240
- const MANY_LABELS = [
241
- 'Lists',
242
- 'Starred',
243
- 'List 1',
244
- 'Groceries',
245
- 'Work',
246
- 'List 2',
247
- 'List 3',
248
- 'List 4',
249
- 'List 5',
250
- 'List 6',
251
- 'List 7',
252
- 'List 8',
253
- ];
254
-
255
- function DotsManyDemo({ density }: { density?: 'default' | 'compact' }) {
256
- const [activeIndex, setActiveIndex] = useState(2);
257
- return (
258
- <div style={{ maxWidth: 375, margin: '0 auto' }}>
259
- <SwipableMobileCarouselDots
260
- count={MANY_LABELS.length}
261
- activeIndex={activeIndex}
262
- onJump={setActiveIndex}
263
- labels={MANY_LABELS}
264
- aria-label="Task lists"
265
- density={density}
266
- />
267
- </div>
268
- );
269
- }
270
-
271
- const meta = {
272
- title: 'Components/SwipableMobileCarousel',
273
- component: SwipableMobileCarousel,
274
- parameters: {
275
- layout: 'padded',
276
- docs: {
277
- description: {
278
- component:
279
- "A compound component for swiping between full-width slides (each an independent route/view on mobile), wrapping useSnapCarousel. Owns rendering and mount-window mechanics only — it has no opinion on where slide data lives. Do NOT aggregate cross-slide data or mount a detail overlay (Sheet, Dialog) inside a Slide's children; see docs/design-system.md's carousel section.",
280
- },
281
- },
282
- },
283
- // Every story below supplies its own render(), which is stateful (activeIndex
284
- // lives in useState) — these args only satisfy the required-prop typing.
285
- args: {
286
- activeIndex: 0,
287
- onSettle: () => {},
288
- 'aria-label': 'Task lists',
289
- children: null,
290
- },
291
- } satisfies Meta<typeof SwipableMobileCarousel>;
292
-
293
- export default meta;
294
- type Story = StoryObj<typeof meta>;
295
-
296
- export const Default: Story = { render: () => <DefaultDemo /> };
297
-
298
- export const LazyLoadingBody: Story = {
299
- render: () => <LazyLoadingBodyDemo />,
300
- parameters: {
301
- docs: {
302
- description: {
303
- story:
304
- 'Swipe to a new slide — its title renders immediately from already-known metadata, while only the Body region shows a brief loading placeholder for its simulated 1.2s fetch. This is the fix for the "whole slide blanks out, title included, until its own fetch resolves" bug.',
305
- },
306
- },
307
- },
308
- };
309
-
310
- export const CustomIndicator: Story = { render: () => <CustomIndicatorDemo /> };
311
-
312
- export const NoIndicator: Story = { render: () => <NoIndicatorDemo /> };
313
-
314
- export const WithFooter: Story = { render: () => <FooterDemo /> };
315
-
316
- export const MobileViewport: Story = {
317
- render: () => <DefaultDemo />,
318
- parameters: { viewport: { defaultViewport: 'mobile1' } },
319
- };
320
-
321
- // ---------------------------------------------------------------------------
322
- // SwipableMobileCarouselDots — standalone, also this carousel's default
323
- // indicator. Grouped in this file rather than its own (Table's sub-parts
324
- // share one story file too), though it has its own component subfolder and
325
- // barrel export for independent reuse.
326
- // ---------------------------------------------------------------------------
327
-
328
- export const DotsStandalone: Story = {
329
- render: () => <DotsStandaloneDemo />,
330
- parameters: {
331
- docs: {
332
- description: {
333
- story:
334
- 'SwipableMobileCarouselDots used on its own, outside a carousel — a real role="tablist"/role="tab" component (tappable, labeled, focusable), unlike the aria-hidden decorative dots both sovereign-tasks and sovereign-shopper currently hand-roll.',
335
- },
336
- },
337
- },
338
- };
339
-
340
- export const DotsManyDefault: Story = {
341
- render: () => <DotsManyDemo />,
342
- parameters: {
343
- docs: {
344
- description: {
345
- story:
346
- 'Default density with 12 slides in a 375px viewport — the row reads as long/cramped once an instance has more than a handful of lists. Compare to DotsManyCompact.',
347
- },
348
- },
349
- },
350
- };
351
-
352
- export const DotsManyCompact: Story = {
353
- render: () => <DotsManyDemo density="compact" />,
354
- parameters: {
355
- docs: {
356
- description: {
357
- story:
358
- 'density="compact" halves the gap between dots and shrinks each dot\'s own hit target from 20px to 16px — the visible 6px dot itself is unchanged; only its surrounding tap-target box shrinks. Opt-in: every existing consumer\'s spacing is unchanged unless it passes this prop.',
359
- },
360
- },
361
- },
362
- };
@@ -1,200 +0,0 @@
1
- import { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { SwipeStack } from '../components/SwipeStack/SwipeStack';
4
- import { SwipeStackCard } from '../components/SwipeStack/SwipeStackCard';
5
-
6
- const AGENDA_TASKS = [
7
- { id: 'water-plants', title: 'Water the plants', detail: 'Living room + balcony' },
8
- { id: 'standup', title: 'Team standup', detail: '9:30am · 15 min' },
9
- { id: 'groceries', title: 'Buy groceries', detail: 'Milk, eggs, bread' },
10
- { id: 'review-pr', title: "Review teammate's PR", detail: 'sovereign/sovereign #482' },
11
- { id: 'call-dentist', title: 'Call the dentist', detail: 'Reschedule cleaning' },
12
- ];
13
-
14
- function taskCardStyle(): React.CSSProperties {
15
- return {
16
- height: '100%',
17
- boxSizing: 'border-box',
18
- display: 'flex',
19
- flexDirection: 'column',
20
- justifyContent: 'center',
21
- padding: 'var(--sv-space-6)',
22
- fontFamily: 'var(--sv-font-family)',
23
- };
24
- }
25
-
26
- function TaskCardDemo({ title, detail }: { title: string; detail: string }) {
27
- return (
28
- <div style={taskCardStyle()}>
29
- <div
30
- style={{
31
- fontSize: 'var(--sv-font-size-lg)',
32
- fontWeight: 'var(--sv-font-weight-semibold)',
33
- color: 'var(--sv-color-text-primary)',
34
- marginBottom: 'var(--sv-space-2)',
35
- }}
36
- >
37
- {title}
38
- </div>
39
- <div style={{ fontSize: 'var(--sv-font-size-sm)', color: 'var(--sv-color-text-muted)' }}>
40
- {detail}
41
- </div>
42
- </div>
43
- );
44
- }
45
-
46
- function StackFrame({ children }: { children: React.ReactNode }) {
47
- return (
48
- <div
49
- style={{
50
- height: 420,
51
- maxWidth: 375,
52
- margin: '0 auto',
53
- padding: 'var(--sv-space-4)',
54
- border: '1px solid var(--sv-color-border)',
55
- borderRadius: 'var(--sv-radius-md)',
56
- boxSizing: 'border-box',
57
- }}
58
- >
59
- {children}
60
- </div>
61
- );
62
- }
63
-
64
- function AgendaDemo() {
65
- const [log, setLog] = useState<string[]>([]);
66
- return (
67
- <StackFrame>
68
- <SwipeStack
69
- aria-label="Today's agenda"
70
- directions={{
71
- up: { label: 'Done', icon: 'check' },
72
- down: { label: 'Defer', icon: 'history' },
73
- right: { label: 'Skip', icon: 'chevron-right' },
74
- }}
75
- onSwipe={(direction, cardId) =>
76
- setLog((l) => [`${cardId} → ${direction}`, ...l].slice(0, 5))
77
- }
78
- >
79
- {AGENDA_TASKS.map((task) => (
80
- <SwipeStackCard key={task.id} cardId={task.id}>
81
- <TaskCardDemo title={task.title} detail={task.detail} />
82
- </SwipeStackCard>
83
- ))}
84
- </SwipeStack>
85
- <div
86
- style={{
87
- marginTop: 'var(--sv-space-3)',
88
- fontFamily: 'var(--sv-font-family)',
89
- fontSize: 'var(--sv-font-size-xs)',
90
- color: 'var(--sv-color-text-muted)',
91
- }}
92
- >
93
- {log.map((entry, i) => (
94
- <div key={i}>{entry}</div>
95
- ))}
96
- </div>
97
- </StackFrame>
98
- );
99
- }
100
-
101
- function TwoDirectionsDemo() {
102
- return (
103
- <StackFrame>
104
- <SwipeStack
105
- aria-label="Photo picker"
106
- directions={{
107
- left: { label: 'Skip' },
108
- right: { label: 'Keep', icon: 'check' },
109
- }}
110
- onSwipe={() => {}}
111
- >
112
- {AGENDA_TASKS.map((task) => (
113
- <SwipeStackCard key={task.id} cardId={task.id}>
114
- <TaskCardDemo title={task.title} detail={task.detail} />
115
- </SwipeStackCard>
116
- ))}
117
- </SwipeStack>
118
- </StackFrame>
119
- );
120
- }
121
-
122
- function EmptyDemo() {
123
- return (
124
- <StackFrame>
125
- <SwipeStack
126
- aria-label="Today's agenda"
127
- directions={{ up: { label: 'Done', icon: 'check' } }}
128
- onSwipe={() => {}}
129
- >
130
- {[]}
131
- </SwipeStack>
132
- </StackFrame>
133
- );
134
- }
135
-
136
- const meta = {
137
- title: 'Components/SwipeStack',
138
- component: SwipeStack,
139
- parameters: {
140
- layout: 'padded',
141
- docs: {
142
- description: {
143
- component:
144
- 'A compound component for triaging one card at a time by dragging it left/right/up/down, plus an always-visible non-gesture fallback (a button per configured direction) wired to the identical commit path and exit animation as a real drag. Every direction is independently optional and has no baked-in meaning — the caller supplies label/icon per direction and reacts to onSwipe; once triggered, a direction always removes the card for good, there is no reversible "go back".',
145
- },
146
- },
147
- },
148
- // Every story below supplies its own render(), stateless or with its own
149
- // useState — these args only satisfy the required-prop typing.
150
- args: {
151
- 'aria-label': "Today's agenda",
152
- directions: {},
153
- onSwipe: () => {},
154
- children: null,
155
- },
156
- } satisfies Meta<typeof SwipeStack>;
157
-
158
- export default meta;
159
- type Story = StoryObj<typeof meta>;
160
-
161
- export const Default: Story = {
162
- render: () => <AgendaDemo />,
163
- parameters: {
164
- docs: {
165
- description: {
166
- story:
167
- 'up/down/right configured, left intentionally omitted — SwipeStack does not require all 4 directions. The log below the stack shows onSwipe firing with (direction, cardId) for both a drag and a fallback-button click.',
168
- },
169
- },
170
- },
171
- };
172
-
173
- export const TwoDirections: Story = {
174
- render: () => <TwoDirectionsDemo />,
175
- parameters: {
176
- docs: {
177
- description: {
178
- story:
179
- 'Only left/right configured — up/down are a wall, not just an unreachable outcome, so the card never visually drifts vertically, and touch-action stays pan-y so a page can still scroll vertically through the stack.',
180
- },
181
- },
182
- },
183
- };
184
-
185
- export const Empty: Story = {
186
- render: () => <EmptyDemo />,
187
- parameters: {
188
- docs: {
189
- description: {
190
- story:
191
- 'No cards left — SwipeStack renders its empty region and disables the fallback button rather than showing any built-in empty-state copy; that vocabulary belongs to the caller, same as SwipableMobileCarousel has no opinion on where slide data lives.',
192
- },
193
- },
194
- },
195
- };
196
-
197
- export const MobileViewport: Story = {
198
- render: () => <AgendaDemo />,
199
- parameters: { viewport: { defaultViewport: 'mobile1' } },
200
- };
@@ -1,63 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { Textarea } from '../components/Textarea/Textarea';
3
-
4
- // Wrap in a label so a11y checks pass (Textarea is a bare <textarea> — no
5
- // built-in label association).
6
- function Labeled({ label, ...props }: React.ComponentProps<typeof Textarea> & { label: string }) {
7
- return (
8
- <div style={{ display: 'flex', flexDirection: 'column', gap: 6, width: 280 }}>
9
- <label
10
- htmlFor="sb-textarea"
11
- style={{ fontSize: 14, color: 'var(--sv-color-text-primary)', fontFamily: 'system-ui' }}
12
- >
13
- {label}
14
- </label>
15
- <Textarea id="sb-textarea" {...props} />
16
- </div>
17
- );
18
- }
19
-
20
- const meta = {
21
- title: 'Components/Textarea',
22
- component: Textarea,
23
- parameters: {
24
- layout: 'centered',
25
- docs: {
26
- description: {
27
- component:
28
- 'The primitive multi-line text field. RSC-safe; forwards all native `<textarea>` props. No label is built-in — always pair with a `<label>` (or `FormField`) for accessibility.',
29
- },
30
- },
31
- },
32
- } satisfies Meta<typeof Textarea>;
33
-
34
- export default meta;
35
- type Story = StoryObj<typeof meta>;
36
-
37
- export const Default: Story = {
38
- render: (_args) => <Labeled label="Description" placeholder="Add a description…" />,
39
- };
40
-
41
- export const WithValue: Story = {
42
- render: (_args) => <Labeled label="Notes" defaultValue="Follow up next week." />,
43
- };
44
-
45
- export const CustomRows: Story = {
46
- render: (_args) => <Labeled label="Message" rows={8} placeholder="Write your message…" />,
47
- };
48
-
49
- export const Disabled: Story = {
50
- render: (_args) => <Labeled label="Read-only field" defaultValue="Cannot be changed" disabled />,
51
- };
52
-
53
- export const AutoGrow: Story = {
54
- render: (_args) => (
55
- <Labeled
56
- label="Title (grows with content)"
57
- autoGrow
58
- rows={1}
59
- defaultValue="A short title"
60
- placeholder="Add a title…"
61
- />
62
- ),
63
- };