@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,99 +0,0 @@
1
- import { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { CheckableListRow } from './CheckableListRow';
4
- import { Icon } from '../Icon/Icon';
5
-
6
- const meta = {
7
- title: 'Components/CheckableListRow',
8
- component: CheckableListRow,
9
- parameters: {
10
- layout: 'padded',
11
- docs: {
12
- description: {
13
- component:
14
- 'A whole-row tap target that toggles a checked state, with strike-through on the label when checked — for "tap the row to mark it done" lists.',
15
- },
16
- },
17
- },
18
- args: {
19
- checked: false,
20
- onCheckedChange: () => {},
21
- label: 'Bananas',
22
- },
23
- } satisfies Meta<typeof CheckableListRow>;
24
-
25
- export default meta;
26
- type Story = StoryObj<typeof meta>;
27
-
28
- function ControlledRow({
29
- initial = false,
30
- icon,
31
- trailing,
32
- disabled,
33
- }: {
34
- initial?: boolean;
35
- icon?: boolean;
36
- trailing?: boolean;
37
- disabled?: boolean;
38
- }) {
39
- const [checked, setChecked] = useState(initial);
40
- return (
41
- <div style={{ width: 320 }}>
42
- <CheckableListRow
43
- checked={checked}
44
- onCheckedChange={setChecked}
45
- label="Bananas"
46
- icon={icon ? <Icon name="banana" size="md" aria-hidden /> : undefined}
47
- trailing={trailing ? <span style={{ fontSize: 13, color: '#888' }}>6 pcs</span> : undefined}
48
- disabled={disabled}
49
- />
50
- </div>
51
- );
52
- }
53
-
54
- export const Default: Story = {
55
- render: () => <ControlledRow />,
56
- };
57
-
58
- export const Checked: Story = {
59
- render: () => <ControlledRow initial />,
60
- };
61
-
62
- export const WithIconAndTrailing: Story = {
63
- render: () => <ControlledRow icon trailing />,
64
- };
65
-
66
- export const CheckedWithIconAndTrailing: Story = {
67
- render: () => <ControlledRow initial icon trailing />,
68
- };
69
-
70
- export const Disabled: Story = {
71
- render: () => <ControlledRow icon trailing disabled />,
72
- };
73
-
74
- export const List: Story = {
75
- name: 'Multiple rows (list context)',
76
- render: () => {
77
- const items = ['Bananas', 'Milk', 'Eggs', 'Coffee'];
78
- const [checkedSet, setCheckedSet] = useState<Set<string>>(new Set(['Milk']));
79
- return (
80
- <div style={{ width: 320, display: 'flex', flexDirection: 'column', gap: 4 }}>
81
- {items.map((item) => (
82
- <CheckableListRow
83
- key={item}
84
- checked={checkedSet.has(item)}
85
- onCheckedChange={(checked) =>
86
- setCheckedSet((prev) => {
87
- const next = new Set(prev);
88
- if (checked) next.add(item);
89
- else next.delete(item);
90
- return next;
91
- })
92
- }
93
- label={item}
94
- />
95
- ))}
96
- </div>
97
- );
98
- },
99
- };
@@ -1,89 +0,0 @@
1
- 'use client';
2
-
3
- import type { KeyboardEvent, ReactNode } from 'react';
4
- import styles from './CheckableListRow.module.css';
5
-
6
- export interface CheckableListRowProps {
7
- checked: boolean;
8
- onCheckedChange: (checked: boolean) => void;
9
- label: string;
10
- /** Leading icon, e.g. a per-item `<Icon>`. */
11
- icon?: ReactNode;
12
- /** Trailing content, e.g. a quantity, a `QuantityStepper`, or a badge. */
13
- trailing?: ReactNode;
14
- disabled?: boolean;
15
- className?: string;
16
- }
17
-
18
- /**
19
- * CheckableListRow — a whole-row tap target that toggles a checked state,
20
- * with strike-through on the label when checked. Built for "tap the row to
21
- * mark it done" lists (Sovereign Shopper's tap-to-buy, SHP-07) where the
22
- * checkbox itself is too small a target on mobile and the row already has
23
- * nothing else competing for the tap.
24
- *
25
- * Renders as `role="checkbox"` on the row itself rather than composing
26
- * `Checkbox`'s native `<input>` — nesting a real checkbox input inside the
27
- * row's own click handler would mean two overlapping interactive elements
28
- * (invalid HTML, and the input's own click would double-fire the row's
29
- * toggle). The visual box matches `Checkbox`'s styling for consistency.
30
- *
31
- * `trailing` content (e.g. a `QuantityStepper`) is rendered outside the
32
- * `role="checkbox"` element so its own interactive controls (+/- buttons)
33
- * don't sit inside another interactive element either — clicking those
34
- * doesn't toggle the row.
35
- */
36
- export function CheckableListRow({
37
- checked,
38
- onCheckedChange,
39
- label,
40
- icon,
41
- trailing,
42
- disabled = false,
43
- className,
44
- }: CheckableListRowProps) {
45
- function toggle() {
46
- if (!disabled) onCheckedChange(!checked);
47
- }
48
-
49
- function handleKeyDown(e: KeyboardEvent<HTMLDivElement>) {
50
- if (e.key === ' ' || e.key === 'Enter') {
51
- e.preventDefault();
52
- toggle();
53
- }
54
- }
55
-
56
- return (
57
- <div className={[styles.row, className].filter(Boolean).join(' ')}>
58
- <div
59
- role="checkbox"
60
- aria-checked={checked}
61
- aria-label={label}
62
- aria-disabled={disabled || undefined}
63
- tabIndex={disabled ? -1 : 0}
64
- className={styles.tapTarget}
65
- onClick={toggle}
66
- onKeyDown={handleKeyDown}
67
- >
68
- <span className={[styles.box, checked ? styles.checked : ''].filter(Boolean).join(' ')}>
69
- {checked && (
70
- <svg className={styles.tick} viewBox="0 0 10 8" fill="none" aria-hidden="true">
71
- <path
72
- d="M1 4l3 3 5-6"
73
- stroke="currentColor"
74
- strokeWidth="1.5"
75
- strokeLinecap="round"
76
- strokeLinejoin="round"
77
- />
78
- </svg>
79
- )}
80
- </span>
81
- {icon && <span className={styles.icon}>{icon}</span>}
82
- <span className={[styles.label, checked ? styles.struck : ''].filter(Boolean).join(' ')}>
83
- {label}
84
- </span>
85
- </div>
86
- {trailing && <span className={styles.trailing}>{trailing}</span>}
87
- </div>
88
- );
89
- }
@@ -1,111 +0,0 @@
1
- .root {
2
- display: inline-flex;
3
- align-items: center;
4
- gap: var(--sv-space-2);
5
- cursor: pointer;
6
- }
7
-
8
- /* The visual box. Sizing audit: reviewed against the rest of this scale's
9
- compact controls. Kept the 18px box unchanged — deliberately on the
10
- larger side for touch-friendliness, not a gap to close. */
11
- .box {
12
- --checkbox-box-size: 18px;
13
- position: relative;
14
- flex-shrink: 0;
15
- width: var(--checkbox-box-size);
16
- height: var(--checkbox-box-size);
17
- border-radius: var(--sv-radius-sm);
18
- border: 1.5px solid var(--sv-color-border-strong);
19
- background: var(--sv-color-surface);
20
- transition:
21
- background-color 0.15s ease,
22
- border-color 0.15s ease;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- }
27
-
28
- .checked {
29
- background-color: var(--sv-color-accent);
30
- border-color: var(--sv-color-accent);
31
- color: var(--sv-white);
32
- }
33
-
34
- /* Hide the native input visually but keep it accessible */
35
- .input {
36
- position: absolute;
37
- inset: 0;
38
- opacity: 0;
39
- margin: 0;
40
- width: 100%;
41
- height: 100%;
42
- cursor: pointer;
43
- }
44
-
45
- .input:disabled {
46
- cursor: not-allowed;
47
- }
48
-
49
- /* Expand the tappable region to the platform's minimum touch target without
50
- growing the visible box — consumers (e.g. task rows) align the box to the
51
- pixel against header icons, so its visual footprint and layout must stay
52
- identical. Gated to (pointer: coarse), the *primary* pointer, so a
53
- touchscreen laptop with mouse/trackpad as primary keeps desktop density. */
54
- @media (pointer: coarse) {
55
- .input {
56
- inset: calc((var(--checkbox-box-size) - var(--sv-touch-target-min, 44px)) / 2);
57
- }
58
- }
59
-
60
- .input:focus-visible + .tick,
61
- .input:focus-visible {
62
- outline: none;
63
- }
64
-
65
- .box:has(.input:focus-visible) {
66
- outline: 2px solid var(--sv-color-focus-ring);
67
- outline-offset: 2px;
68
- }
69
-
70
- .tick {
71
- width: 10px;
72
- height: 8px;
73
- pointer-events: none;
74
- }
75
-
76
- /* Label */
77
- .label {
78
- font-size: var(--sv-font-size-sm);
79
- color: var(--sv-color-text-primary);
80
- cursor: pointer;
81
- user-select: none;
82
- transition: color 0.15s ease;
83
- /* Strike-through animates via clip-path on a pseudo-element */
84
- position: relative;
85
- }
86
-
87
- .label::after {
88
- content: '';
89
- position: absolute;
90
- left: 0;
91
- top: 50%;
92
- width: 100%;
93
- height: 1.5px;
94
- background: var(--sv-color-text-muted);
95
- transform: scaleX(0);
96
- transform-origin: left center;
97
- transition: transform 0.2s ease;
98
- }
99
-
100
- .struck {
101
- color: var(--sv-color-text-muted);
102
- }
103
-
104
- .struck::after {
105
- transform: scaleX(1);
106
- }
107
-
108
- .disabled {
109
- opacity: 0.5;
110
- cursor: not-allowed;
111
- }
@@ -1,78 +0,0 @@
1
- 'use client';
2
-
3
- import type { InputHTMLAttributes } from 'react';
4
- import styles from './Checkbox.module.css';
5
-
6
- export interface CheckboxProps extends Omit<
7
- InputHTMLAttributes<HTMLInputElement>,
8
- 'type' | 'onChange'
9
- > {
10
- checked: boolean;
11
- onChange: (checked: boolean) => void;
12
- label: string;
13
- /** Renders the label with a strike-through when checked. */
14
- strikeThrough?: boolean;
15
- disabled?: boolean;
16
- }
17
-
18
- export function Checkbox({
19
- checked,
20
- onChange,
21
- label,
22
- strikeThrough = false,
23
- disabled,
24
- className,
25
- id,
26
- ...rest
27
- }: CheckboxProps) {
28
- const inputId = id ?? `checkbox-${label.toLowerCase().replace(/\s+/g, '-')}`;
29
-
30
- return (
31
- <span className={[styles.root, className].filter(Boolean).join(' ')}>
32
- <span className={[styles.box, checked ? styles.checked : ''].filter(Boolean).join(' ')}>
33
- <input
34
- {...rest}
35
- id={inputId}
36
- type="checkbox"
37
- checked={checked}
38
- disabled={disabled}
39
- className={styles.input}
40
- onChange={(e) => onChange(e.target.checked)}
41
- />
42
- {checked && (
43
- <svg className={styles.tick} viewBox="0 0 10 8" fill="none" aria-hidden="true">
44
- <path
45
- d="M1 4l3 3 5-6"
46
- stroke="currentColor"
47
- strokeWidth="1.5"
48
- strokeLinecap="round"
49
- strokeLinejoin="round"
50
- />
51
- </svg>
52
- )}
53
- </span>
54
- {/* Callers pass label="" for icon-only/screen-reader-only usage (an
55
- aria-label on the Checkbox's own root covers accessibility in that
56
- case) — omitting the element entirely, rather than rendering an
57
- empty <label>, matters because .root's flex `gap` still applies
58
- between .box and a rendered-but-empty label, silently adding an
59
- extra --sv-space-2 of invisible space after the checkbox that
60
- every icon-only consumer was unknowingly stacking on top of their
61
- own layout's spacing. */}
62
- {label && (
63
- <label
64
- htmlFor={inputId}
65
- className={[
66
- styles.label,
67
- strikeThrough && checked ? styles.struck : '',
68
- disabled ? styles.disabled : '',
69
- ]
70
- .filter(Boolean)
71
- .join(' ')}
72
- >
73
- {label}
74
- </label>
75
- )}
76
- </span>
77
- );
78
- }
@@ -1,53 +0,0 @@
1
- .textarea {
2
- display: block;
3
- width: 100%;
4
- min-height: 180px;
5
- max-height: min(70vh, 720px);
6
- padding: var(--sv-space-3);
7
- font-family: var(--sv-font-family-mono);
8
- font-size: var(--sv-font-size-sm);
9
- line-height: 1.6;
10
- color: var(--sv-color-text-primary);
11
- tab-size: 2;
12
- white-space: pre;
13
- overflow: auto;
14
- resize: vertical;
15
- background: var(--sv-color-surface);
16
- border: var(--sv-border-width-hairline) solid var(--sv-color-border-strong);
17
- border-radius: var(--sv-radius-md);
18
- transition:
19
- border-color 0.15s ease,
20
- box-shadow 0.15s ease;
21
- }
22
-
23
- .textarea::placeholder {
24
- color: var(--sv-color-text-muted);
25
- }
26
-
27
- .textarea:focus-visible {
28
- outline: none;
29
- border-color: var(--sv-color-accent);
30
- box-shadow: 0 0 0 2px var(--sv-color-focus-ring);
31
- }
32
-
33
- .textarea:read-only {
34
- color: var(--sv-color-text-muted);
35
- background: var(--sv-color-surface-sunken);
36
- border-color: var(--sv-color-border);
37
- cursor: default;
38
- }
39
-
40
- .textarea:disabled {
41
- opacity: 0.5;
42
- cursor: not-allowed;
43
- resize: none;
44
- }
45
-
46
- .invalid {
47
- border-color: var(--sv-color-error-border);
48
- }
49
-
50
- .invalid:focus-visible {
51
- border-color: var(--sv-color-error-border);
52
- box-shadow: 0 0 0 2px var(--sv-color-error-border);
53
- }
@@ -1,77 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { CodeTextarea } from './CodeTextarea';
3
- import { FormField } from '../FormField/FormField';
4
-
5
- const sampleMarkdown = `---
6
- title: Editorial calendar
7
- tags:
8
- - planning
9
- - launch
10
- ---
11
-
12
- # Launch notes
13
-
14
- Draft the announcement and verify links before publishing.`;
15
-
16
- const meta = {
17
- title: 'Components/CodeTextarea',
18
- component: CodeTextarea,
19
- parameters: {
20
- layout: 'padded',
21
- docs: {
22
- description: {
23
- component:
24
- 'Monospace textarea for Markdown, YAML, JSON, and other whitespace-sensitive content.',
25
- },
26
- },
27
- },
28
- args: {
29
- defaultValue: sampleMarkdown,
30
- 'aria-label': 'Markdown source',
31
- },
32
- } satisfies Meta<typeof CodeTextarea>;
33
-
34
- export default meta;
35
- type Story = StoryObj<typeof meta>;
36
-
37
- export const Default: Story = {};
38
-
39
- export const WithFormField: Story = {
40
- render: () => (
41
- <FormField label="Frontmatter" hint="YAML is saved exactly as typed." id="frontmatter-source">
42
- {(field) => <CodeTextarea {...field} defaultValue={sampleMarkdown} />}
43
- </FormField>
44
- ),
45
- };
46
-
47
- export const Error: Story = {
48
- render: () => (
49
- <FormField label="Raw YAML" error="Line 3: expected a value." id="yaml-source">
50
- {(field) => <CodeTextarea {...field} invalid defaultValue={'title:\ntags:\n -'} />}
51
- </FormField>
52
- ),
53
- };
54
-
55
- export const Disabled: Story = {
56
- args: {
57
- disabled: true,
58
- defaultValue: sampleMarkdown,
59
- },
60
- };
61
-
62
- export const LongContent: Story = {
63
- args: {
64
- defaultValue: Array.from({ length: 24 }, (_, index) => `- item-${index + 1}: pending`).join(
65
- '\n',
66
- ),
67
- },
68
- };
69
-
70
- export const Mobile: Story = {
71
- parameters: {
72
- viewport: { defaultViewport: 'mobile1' },
73
- },
74
- args: {
75
- defaultValue: sampleMarkdown,
76
- },
77
- };
@@ -1,36 +0,0 @@
1
- import type { TextareaHTMLAttributes } from 'react';
2
- import styles from './CodeTextarea.module.css';
3
-
4
- export interface CodeTextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
5
- invalid?: boolean;
6
- }
7
-
8
- /**
9
- * CodeTextarea — monospace textarea for Markdown, YAML, JSON, and other
10
- * whitespace-sensitive content. Pair with FormField for labels, hints, and
11
- * validation text.
12
- */
13
- export function CodeTextarea({
14
- className,
15
- rows = 12,
16
- spellCheck = false,
17
- wrap = 'off',
18
- invalid = false,
19
- 'aria-invalid': ariaInvalid,
20
- ...rest
21
- }: CodeTextareaProps) {
22
- const classes = [styles.textarea, invalid ? styles.invalid : undefined, className]
23
- .filter(Boolean)
24
- .join(' ');
25
-
26
- return (
27
- <textarea
28
- rows={rows}
29
- spellCheck={spellCheck}
30
- wrap={wrap}
31
- className={classes}
32
- aria-invalid={ariaInvalid ?? (invalid || undefined)}
33
- {...rest}
34
- />
35
- );
36
- }
@@ -1,70 +0,0 @@
1
- .root {
2
- border-bottom: var(--sv-border-width-hairline) solid var(--sv-color-border);
3
- }
4
-
5
- .trigger {
6
- display: flex;
7
- align-items: center;
8
- justify-content: space-between;
9
- gap: var(--sv-space-2);
10
- width: 100%;
11
- padding: var(--sv-space-3) 0;
12
- border: none;
13
- background: transparent;
14
- color: var(--sv-color-text-primary);
15
- font-family: var(--sv-font-family);
16
- font-size: var(--sv-font-size-sm);
17
- font-weight: var(--sv-font-weight-medium);
18
- text-align: left;
19
- cursor: pointer;
20
- }
21
-
22
- .trigger:focus-visible {
23
- outline: 2px solid var(--sv-color-focus-ring);
24
- outline-offset: 2px;
25
- border-radius: var(--sv-radius-sm);
26
- }
27
-
28
- .triggerLabel {
29
- min-width: 0;
30
- }
31
-
32
- .chevron {
33
- flex-shrink: 0;
34
- color: var(--sv-color-text-muted);
35
- transition: transform 0.2s ease;
36
- }
37
-
38
- .chevronOpen {
39
- transform: rotate(180deg);
40
- }
41
-
42
- /* Expand/collapse via grid-template-rows (0fr closed, 1fr open) instead of
43
- animating height, which can't transition to/from auto in CSS. The inner
44
- wrapper clips content during the transition. */
45
- .contentWrapper {
46
- display: grid;
47
- grid-template-rows: 0fr;
48
- transition: grid-template-rows 0.2s ease;
49
- }
50
-
51
- .contentWrapper[data-open='true'] {
52
- grid-template-rows: 1fr;
53
- }
54
-
55
- .contentInner {
56
- overflow: hidden;
57
- font-size: var(--sv-font-size-sm);
58
- color: var(--sv-color-text-primary);
59
- }
60
-
61
- .contentWrapper[data-open='true'] .contentInner {
62
- padding-bottom: var(--sv-space-3);
63
- }
64
-
65
- @media (prefers-reduced-motion: reduce) {
66
- .contentWrapper,
67
- .chevron {
68
- transition: none;
69
- }
70
- }
@@ -1,62 +0,0 @@
1
- import { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { Collapsible } from './Collapsible';
4
-
5
- const meta = {
6
- title: 'Components/Collapsible',
7
- component: Collapsible,
8
- parameters: {
9
- layout: 'padded',
10
- docs: {
11
- description: {
12
- component:
13
- 'Single expand/collapse primitive. Independently useful (e.g. a "show more" toggle), and composed internally by Accordion.',
14
- },
15
- },
16
- },
17
- args: { open: false, onOpenChange: () => {}, trigger: 'Trigger', children: 'Content' },
18
- } satisfies Meta<typeof Collapsible>;
19
-
20
- export default meta;
21
- type Story = StoryObj<typeof meta>;
22
-
23
- // ---------------------------------------------------------------------------
24
-
25
- export const Default: Story = {
26
- render: () => {
27
- const [open, setOpen] = useState(false);
28
- return (
29
- <Collapsible open={open} onOpenChange={setOpen} trigger="What plugins are installed?">
30
- Sovereign ships with the platform plugins (Console, Launcher, Account) plus whatever you've
31
- declared in your own sovereign.plugins.json — nothing else is bundled by default.
32
- </Collapsible>
33
- );
34
- },
35
- };
36
-
37
- export const StartsOpen: Story = {
38
- render: () => {
39
- const [open, setOpen] = useState(true);
40
- return (
41
- <Collapsible open={open} onOpenChange={setOpen} trigger="Advanced settings">
42
- These settings are rarely needed — change them only if you know what you're doing.
43
- </Collapsible>
44
- );
45
- },
46
- };
47
-
48
- export const LongContent: Story = {
49
- render: () => {
50
- const [open, setOpen] = useState(true);
51
- return (
52
- <Collapsible open={open} onOpenChange={setOpen} trigger="Full changelog">
53
- <ul style={{ margin: 0, paddingLeft: 20 }}>
54
- <li>Added component sizing alignment across the design system</li>
55
- <li>Added RadioGroup, Slider, Progress, Table, Alert primitives</li>
56
- <li>Added Breadcrumb, Pagination, and Kbd primitives</li>
57
- <li>Added Accordion and Collapsible primitives</li>
58
- </ul>
59
- </Collapsible>
60
- );
61
- },
62
- };