@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
@@ -0,0 +1,53 @@
1
+ /* Hanken Grotesk, the Sovereign typeface, shipped with the design system so that no instance has to supply it and
2
+ none has to ask another site for it (a page that loads its font from a third party tells that party who is reading).
3
+ One variable file for each script, weights 100 to 900, chosen by the browser from the characters on the page.
4
+ The files and their licence (SIL Open Font License 1.1) are in ../fonts; the family is named as the
5
+ `--sv-font-family` token names it, so a component never has to know where the font comes from.
6
+ Fontsource's build of the Google Fonts release, https://fontsource.org/fonts/hanken-grotesk. */
7
+
8
+ /* hanken-grotesk-cyrillic-ext-wght-normal */
9
+ @font-face {
10
+ font-family: 'Hanken Grotesk';
11
+ font-style: normal;
12
+ font-display: swap;
13
+ font-weight: 100 900;
14
+ src: url(../fonts/hanken-grotesk-cyrillic-ext-wght-normal.woff2) format('woff2-variations');
15
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
16
+ }
17
+
18
+ /* hanken-grotesk-vietnamese-wght-normal */
19
+ @font-face {
20
+ font-family: 'Hanken Grotesk';
21
+ font-style: normal;
22
+ font-display: swap;
23
+ font-weight: 100 900;
24
+ src: url(../fonts/hanken-grotesk-vietnamese-wght-normal.woff2) format('woff2-variations');
25
+ unicode-range:
26
+ U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301,
27
+ U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
28
+ }
29
+
30
+ /* hanken-grotesk-latin-ext-wght-normal */
31
+ @font-face {
32
+ font-family: 'Hanken Grotesk';
33
+ font-style: normal;
34
+ font-display: swap;
35
+ font-weight: 100 900;
36
+ src: url(../fonts/hanken-grotesk-latin-ext-wght-normal.woff2) format('woff2-variations');
37
+ unicode-range:
38
+ U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329,
39
+ U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
40
+ U+A720-A7FF;
41
+ }
42
+
43
+ /* hanken-grotesk-latin-wght-normal */
44
+ @font-face {
45
+ font-family: 'Hanken Grotesk';
46
+ font-style: normal;
47
+ font-display: swap;
48
+ font-weight: 100 900;
49
+ src: url(../fonts/hanken-grotesk-latin-wght-normal.woff2) format('woff2-variations');
50
+ unicode-range:
51
+ U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
52
+ U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
53
+ }
@@ -56,9 +56,10 @@
56
56
  --sv-space-16: 4rem;
57
57
 
58
58
  /* Typography
59
- Default pair: Hanken Grotesk (body) + JetBrains Mono (code/identifiers).
60
- Operators supply the web font via <link> or instance CSS; the fallback
61
- stack applies when the font is not loaded. */
59
+ The Sovereign typeface is Hanken Grotesk, bundled with the design system (fonts.css, loaded by tokens.css),
60
+ with JetBrains Mono for code and identifiers, which an instance may supply. Every component takes its
61
+ family from these tokens and nothing else (`pnpm design:tokens:check`), so the typeface is the same
62
+ wherever the design system is used; the stack after it applies only while the font loads. */
62
63
  --sv-font-family:
63
64
  'Hanken Grotesk', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial,
64
65
  sans-serif;
@@ -82,12 +83,12 @@
82
83
  --sv-font-weight-semibold: 600;
83
84
  --sv-font-weight-bold: 700;
84
85
 
85
- /* In-app text-size control (task 10.2), discharging the pinch-zoom-disabled
86
- accessibility debt (runtime/app/layout.tsx sets userScalable: false).
86
+ /* In-app text-size control, discharging the pinch-zoom-disabled
87
+ accessibility debt of an app that sets userScalable: false.
87
88
  Every --sv-font-size-* above is rem-based, so scaling the root font size
88
89
  scales the whole type system with no per-component changes. Driven by
89
- [data-text-size] on <html>, set pre-paint by runtime/src/theme-script.ts
90
- from the `sv-text-size` cookie — same mechanism as [data-theme]. Like
90
+ [data-text-size] on <html>, set pre-paint by the app — same mechanism as
91
+ [data-theme]. Like
91
92
  --sv-radius-scale, this is a theme-stable scale token with no separate
92
93
  semantic tier. */
93
94
  --sv-text-size-scale: 1;
@@ -99,11 +100,10 @@
99
100
  --sv-icon-size-lg: 1.5rem; /* 24px — prominent / standalone */
100
101
 
101
102
  /* Border radii (v3.1 spec values). --sv-radius-scale is the one
102
- instance-controllable exception to "scale tokens are theme-stable"
103
- (RFC 0077) — an operator's corner-radius preset (None/XS/S/M/L)
104
- overrides it at :root via the InstanceProvider style injection
105
- (runtime/src/instance-provider.tsx), same pipeline as --sv-color-accent.
106
- Every corner token below is proportional to it, so a plugin author never
103
+ instance-controllable exception to "scale tokens are theme-stable" —
104
+ an operator's corner-radius preset (None/XS/S/M/L) overrides it at
105
+ :root, same pipeline as --sv-color-accent.
106
+ Every corner token below is proportional to it, so an app author never
107
107
  references --sv-radius-scale directly — they keep using --sv-radius-sm
108
108
  etc. exactly as before. --sv-radius-full is deliberately NOT derived
109
109
  from the scale: it's a shape token (circle/pill), not a corner-rounding
package/dist/tokens.css CHANGED
@@ -1,5 +1,6 @@
1
- /* Convenience entry that loads both token tiers. The runtime shell imports this
1
+ /* Convenience entry that loads the typeface and both token tiers. The runtime shell imports this
2
2
  * once so --sv-* variables are available globally (primitives first, then the
3
3
  * semantic layer that maps them). */
4
+ @import './tokens/fonts.css';
4
5
  @import './tokens/primitives.css';
5
6
  @import './tokens/semantic.css';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sovereignfs/ui",
3
- "version": "0.83.1",
3
+ "version": "0.89.1",
4
4
  "type": "module",
5
5
  "description": "Sovereign Design System — design tokens and React components.",
6
6
  "keywords": [
@@ -10,10 +10,19 @@
10
10
  "components",
11
11
  "css-modules",
12
12
  "tokens",
13
- "plugin",
13
+ "app",
14
14
  "self-hosted"
15
15
  ],
16
- "license": "AGPL-3.0-or-later",
16
+ "license": "MPL-2.0",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/sovereignfs/sovereign.git",
20
+ "directory": "packages/ui"
21
+ },
22
+ "homepage": "https://github.com/sovereignfs/sovereign/tree/main/packages/ui#readme",
23
+ "bugs": {
24
+ "url": "https://github.com/sovereignfs/sovereign/issues"
25
+ },
17
26
  "sideEffects": [
18
27
  "**/*.css"
19
28
  ],
@@ -32,8 +41,9 @@
32
41
  },
33
42
  "files": [
34
43
  "dist",
35
- "src",
36
- "NOTICE"
44
+ "LICENSE",
45
+ "NOTICE",
46
+ "README.md"
37
47
  ],
38
48
  "peerDependencies": {
39
49
  "@dnd-kit/core": "^6.3.1",
@@ -52,20 +62,21 @@
52
62
  "devDependencies": {
53
63
  "@dnd-kit/core": "^6.3.1",
54
64
  "@dnd-kit/sortable": "^10.0.0",
55
- "@playwright/test": "^1.62.1",
65
+ "@playwright/test": "^1.64.0",
66
+ "@sovereignfs/tsconfig": "0.0.0",
56
67
  "@storybook/addon-a11y": "^10.6.0",
57
68
  "@storybook/addon-themes": "^10.6.0",
58
69
  "@storybook/react-vite": "^10.6.0",
59
70
  "@testing-library/dom": "^10.4.1",
60
71
  "@testing-library/react": "^16.3.3",
61
- "@types/react": "^19.2.18",
62
- "@types/react-dom": "^19.2.5",
63
- "react": "^19.2.8",
64
- "react-dom": "^19.2.8",
72
+ "@types/node": "^24.19.2",
73
+ "@types/react": "^19.3.0",
74
+ "@types/react-dom": "^19.3.0",
75
+ "react": "^19.3.1",
76
+ "react-dom": "^19.3.1",
65
77
  "storybook": "^10.6.0",
66
- "tsup": "^8.5.1",
67
- "typescript": "^6.0.3",
68
- "@sovereignfs/tsconfig": "0.0.0"
78
+ "tsup": "^9.0.0",
79
+ "typescript": "~6.0.3"
69
80
  },
70
81
  "scripts": {
71
82
  "build": "tsup",
@@ -1,105 +0,0 @@
1
- // @vitest-environment jsdom
2
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
3
- import { act, cleanup, render } from '@testing-library/react';
4
- import { useMountTransition, usePrefersReducedMotion } from '../motion';
5
-
6
- let matches = false;
7
- function installMatchMedia() {
8
- vi.stubGlobal(
9
- 'matchMedia',
10
- vi.fn().mockImplementation((query: string) => ({
11
- matches,
12
- media: query,
13
- addEventListener: vi.fn(),
14
- removeEventListener: vi.fn(),
15
- addListener: vi.fn(),
16
- removeListener: vi.fn(),
17
- dispatchEvent: vi.fn(),
18
- })),
19
- );
20
- }
21
-
22
- function MountTransitionHarness({ open, durationMs }: { open: boolean; durationMs: number }) {
23
- const { mounted, phase } = useMountTransition(open, durationMs);
24
- return <span data-testid="out">{mounted ? phase : 'unmounted'}</span>;
25
- }
26
-
27
- describe('useMountTransition', () => {
28
- beforeEach(() => vi.useFakeTimers());
29
- afterEach(() => {
30
- vi.useRealTimers();
31
- cleanup();
32
- });
33
-
34
- it('animates the entrance even on a fresh mount that starts open (e.g. a route-driven overlay)', () => {
35
- const { getByTestId } = render(<MountTransitionHarness open durationMs={250} />);
36
- // Renders 'entering' first — the closed-position styles — so the CSS
37
- // transition has somewhere to animate from; the effect below flips it to
38
- // 'open' one frame later, same as a prop-driven open transition would.
39
- expect(getByTestId('out').textContent).toBe('entering');
40
- act(() => void vi.advanceTimersByTime(16)); // flush the requestAnimationFrame callback
41
- expect(getByTestId('out').textContent).toBe('open');
42
- });
43
-
44
- it('starts unmounted when closed from the first render', () => {
45
- const { getByTestId } = render(<MountTransitionHarness open={false} durationMs={250} />);
46
- expect(getByTestId('out').textContent).toBe('unmounted');
47
- });
48
-
49
- it('animates entrance: entering on the same frame, open one frame later', () => {
50
- const { getByTestId, rerender } = render(
51
- <MountTransitionHarness open={false} durationMs={250} />,
52
- );
53
- rerender(<MountTransitionHarness open durationMs={250} />);
54
- expect(getByTestId('out').textContent).toBe('entering');
55
- act(() => {
56
- vi.advanceTimersByTime(16); // flush the requestAnimationFrame callback
57
- });
58
- expect(getByTestId('out').textContent).toBe('open');
59
- });
60
-
61
- it('stays mounted through "closing" for durationMs, then unmounts', () => {
62
- const { getByTestId, rerender } = render(<MountTransitionHarness open durationMs={250} />);
63
- rerender(<MountTransitionHarness open={false} durationMs={250} />);
64
- // Still mounted immediately after `open` flips false — this is the whole
65
- // point: the exit transition needs to actually play, not jump-cut.
66
- expect(getByTestId('out').textContent).toBe('closing');
67
- act(() => void vi.advanceTimersByTime(249));
68
- expect(getByTestId('out').textContent).toBe('closing');
69
- act(() => void vi.advanceTimersByTime(1));
70
- expect(getByTestId('out').textContent).toBe('unmounted');
71
- });
72
-
73
- it('honours a near-zero durationMs (the reduced-motion path)', () => {
74
- const { getByTestId, rerender } = render(<MountTransitionHarness open durationMs={0} />);
75
- rerender(<MountTransitionHarness open={false} durationMs={0} />);
76
- act(() => void vi.advanceTimersByTime(0));
77
- expect(getByTestId('out').textContent).toBe('unmounted');
78
- });
79
- });
80
-
81
- function ReducedMotionHarness() {
82
- const reduced = usePrefersReducedMotion();
83
- return <span data-testid="out">{String(reduced)}</span>;
84
- }
85
-
86
- describe('usePrefersReducedMotion', () => {
87
- afterEach(() => {
88
- vi.unstubAllGlobals();
89
- cleanup();
90
- });
91
-
92
- it('defaults to false and reflects a true matchMedia result after mount', () => {
93
- matches = true;
94
- installMatchMedia();
95
- const { getByTestId } = render(<ReducedMotionHarness />);
96
- expect(getByTestId('out').textContent).toBe('true');
97
- });
98
-
99
- it('reflects a false matchMedia result', () => {
100
- matches = false;
101
- installMatchMedia();
102
- const { getByTestId } = render(<ReducedMotionHarness />);
103
- expect(getByTestId('out').textContent).toBe('false');
104
- });
105
- });
@@ -1,8 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import packageJson from '../../package.json';
3
-
4
- describe('packages/ui/package.json — sideEffects', () => {
5
- it('declares sideEffects as exactly ["**/*.css"]', () => {
6
- expect(packageJson.sideEffects).toEqual(['**/*.css']);
7
- });
8
- });
@@ -1,3 +0,0 @@
1
- .root {
2
- border-top: var(--sv-border-width-hairline) solid var(--sv-color-border);
3
- }
@@ -1,110 +0,0 @@
1
- import { useState } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { expect, userEvent, within } from 'storybook/test';
4
- import { Accordion } from './Accordion';
5
-
6
- const meta = {
7
- title: 'Components/Accordion',
8
- component: Accordion,
9
- parameters: {
10
- layout: 'padded',
11
- docs: {
12
- description: {
13
- component:
14
- 'One or more Collapsible sections. type="single" closes other sections when one opens; type="multiple" allows any number open at once.',
15
- },
16
- },
17
- },
18
- args: { items: [], type: 'single', openIds: [], onOpenIdsChange: () => {} },
19
- } satisfies Meta<typeof Accordion>;
20
-
21
- export default meta;
22
- type Story = StoryObj<typeof meta>;
23
-
24
- // ---------------------------------------------------------------------------
25
-
26
- const FAQ_ITEMS = [
27
- {
28
- id: 'plugins',
29
- trigger: 'What plugins ship by default?',
30
- content: 'Only the platform plugins (Console, Launcher, Account) plus Sovereign Tasks.',
31
- },
32
- {
33
- id: 'hosting',
34
- trigger: 'Can I self-host this?',
35
- content: 'Yes — Sovereign is designed to be self-hosted via Docker Compose.',
36
- },
37
- {
38
- id: 'pricing',
39
- trigger: 'Is it free?',
40
- content: 'The platform is open source. Individual plugins may have their own pricing.',
41
- },
42
- ];
43
-
44
- export const Default: Story = {
45
- render: () => {
46
- const [openIds, setOpenIds] = useState<string[]>(['plugins']);
47
- return (
48
- <Accordion items={FAQ_ITEMS} type="single" openIds={openIds} onOpenIdsChange={setOpenIds} />
49
- );
50
- },
51
- };
52
-
53
- export const MultipleOpen: Story = {
54
- render: () => {
55
- const [openIds, setOpenIds] = useState<string[]>(['plugins', 'hosting']);
56
- return (
57
- <Accordion items={FAQ_ITEMS} type="multiple" openIds={openIds} onOpenIdsChange={setOpenIds} />
58
- );
59
- },
60
- };
61
-
62
- export const LongContent: Story = {
63
- render: () => {
64
- const [openIds, setOpenIds] = useState<string[]>(['changelog']);
65
- return (
66
- <Accordion
67
- items={[
68
- {
69
- id: 'changelog',
70
- trigger: 'Full changelog',
71
- content: (
72
- <ul style={{ margin: 0, paddingLeft: 20 }}>
73
- <li>Added component sizing alignment across the design system</li>
74
- <li>Added RadioGroup, Slider, Progress, Table, Alert primitives</li>
75
- <li>Added Breadcrumb, Pagination, and Kbd primitives</li>
76
- <li>Added Accordion and Collapsible primitives</li>
77
- </ul>
78
- ),
79
- },
80
- ]}
81
- type="single"
82
- openIds={openIds}
83
- onOpenIdsChange={setOpenIds}
84
- />
85
- );
86
- },
87
- };
88
-
89
- export const KeyboardInteraction: Story = {
90
- render: () => {
91
- const [openIds, setOpenIds] = useState<string[]>([]);
92
- return (
93
- <Accordion items={FAQ_ITEMS} type="single" openIds={openIds} onOpenIdsChange={setOpenIds} />
94
- );
95
- },
96
- play: async ({ canvasElement }) => {
97
- const canvas = within(canvasElement);
98
- const trigger = canvas.getByRole('button', { name: 'What plugins ship by default?' });
99
-
100
- await expect(trigger).toHaveAttribute('aria-expanded', 'false');
101
-
102
- trigger.focus();
103
- await userEvent.keyboard('{Enter}');
104
- await expect(trigger).toHaveAttribute('aria-expanded', 'true');
105
- await expect(canvas.getByText(/Only the platform plugins/)).toBeVisible();
106
-
107
- await userEvent.keyboard(' ');
108
- await expect(trigger).toHaveAttribute('aria-expanded', 'false');
109
- },
110
- };
@@ -1,53 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- import { Collapsible } from '../Collapsible/Collapsible';
3
- import styles from './Accordion.module.css';
4
-
5
- export interface AccordionItem {
6
- id: string;
7
- trigger: ReactNode;
8
- content: ReactNode;
9
- }
10
-
11
- export interface AccordionProps {
12
- items: AccordionItem[];
13
- /** `single` closes other sections when one opens. `multiple` allows any
14
- * number of sections open at once. */
15
- type: 'single' | 'multiple';
16
- openIds: string[];
17
- onOpenIdsChange: (openIds: string[]) => void;
18
- className?: string;
19
- }
20
-
21
- /**
22
- * Accordion — one or more `Collapsible` sections.
23
- *
24
- * Keyboard support (Enter/Space toggles the focused trigger) comes from
25
- * `Collapsible`'s real `<button>` — no arrow-key roving-tabindex handling
26
- * here, since accordion sections aren't a roving-tabindex widget per the
27
- * WAI-ARIA accordion pattern (each trigger is independently Tab-focusable).
28
- */
29
- export function Accordion({ items, type, openIds, onOpenIdsChange, className }: AccordionProps) {
30
- function handleOpenChange(id: string, open: boolean) {
31
- if (type === 'single') {
32
- onOpenIdsChange(open ? [id] : []);
33
- return;
34
- }
35
- onOpenIdsChange(open ? [...openIds, id] : openIds.filter((openId) => openId !== id));
36
- }
37
-
38
- return (
39
- <div className={[styles.root, className].filter(Boolean).join(' ')}>
40
- {items.map((item) => (
41
- <Collapsible
42
- key={item.id}
43
- id={item.id}
44
- trigger={item.trigger}
45
- open={openIds.includes(item.id)}
46
- onOpenChange={(open) => handleOpenChange(item.id, open)}
47
- >
48
- {item.content}
49
- </Collapsible>
50
- ))}
51
- </div>
52
- );
53
- }
@@ -1,61 +0,0 @@
1
- // @vitest-environment jsdom
2
- import { afterEach, describe, expect, it, vi } from 'vitest';
3
- import { cleanup, render, screen, fireEvent } from '@testing-library/react';
4
- import { Accordion } from '../Accordion';
5
-
6
- afterEach(cleanup);
7
-
8
- const items = [
9
- { id: 'a', trigger: 'Section A', content: 'Content A' },
10
- { id: 'b', trigger: 'Section B', content: 'Content B' },
11
- ];
12
-
13
- describe('Accordion', () => {
14
- it('renders a trigger button per item', () => {
15
- render(<Accordion items={items} type="single" openIds={[]} onOpenIdsChange={() => {}} />);
16
- expect(screen.getByRole('button', { name: 'Section A' })).toBeDefined();
17
- expect(screen.getByRole('button', { name: 'Section B' })).toBeDefined();
18
- });
19
-
20
- it('type="single": opening one section replaces the open set entirely', () => {
21
- const onOpenIdsChange = vi.fn();
22
- render(
23
- <Accordion items={items} type="single" openIds={['a']} onOpenIdsChange={onOpenIdsChange} />,
24
- );
25
- fireEvent.click(screen.getByRole('button', { name: 'Section B' }));
26
- expect(onOpenIdsChange).toHaveBeenCalledWith(['b']);
27
- });
28
-
29
- it('type="multiple": opening a section adds to the open set', () => {
30
- const onOpenIdsChange = vi.fn();
31
- render(
32
- <Accordion items={items} type="multiple" openIds={['a']} onOpenIdsChange={onOpenIdsChange} />,
33
- );
34
- fireEvent.click(screen.getByRole('button', { name: 'Section B' }));
35
- expect(onOpenIdsChange).toHaveBeenCalledWith(['a', 'b']);
36
- });
37
-
38
- it('type="multiple": closing an open section removes only that id', () => {
39
- const onOpenIdsChange = vi.fn();
40
- render(
41
- <Accordion
42
- items={items}
43
- type="multiple"
44
- openIds={['a', 'b']}
45
- onOpenIdsChange={onOpenIdsChange}
46
- />,
47
- );
48
- fireEvent.click(screen.getByRole('button', { name: 'Section A' }));
49
- expect(onOpenIdsChange).toHaveBeenCalledWith(['b']);
50
- });
51
-
52
- it('reflects openIds via aria-expanded on each trigger', () => {
53
- render(<Accordion items={items} type="single" openIds={['a']} onOpenIdsChange={() => {}} />);
54
- expect(screen.getByRole('button', { name: 'Section A' }).getAttribute('aria-expanded')).toBe(
55
- 'true',
56
- );
57
- expect(screen.getByRole('button', { name: 'Section B' }).getAttribute('aria-expanded')).toBe(
58
- 'false',
59
- );
60
- });
61
- });
@@ -1,62 +0,0 @@
1
- .alert {
2
- display: flex;
3
- align-items: flex-start;
4
- gap: var(--sv-space-2);
5
- padding: var(--sv-space-3) var(--sv-space-4);
6
- border: var(--sv-border-width-hairline) solid transparent;
7
- border-radius: var(--sv-radius-md);
8
- font-size: var(--sv-font-size-sm);
9
- }
10
-
11
- .icon {
12
- flex-shrink: 0;
13
- /* Optically align to the first line of text rather than the box's
14
- vertical center — matches how the heading/body cap-height sits. */
15
- margin-top: 2px;
16
- }
17
-
18
- .content {
19
- display: flex;
20
- flex-direction: column;
21
- gap: var(--sv-space-1);
22
- min-width: 0;
23
- }
24
-
25
- .heading {
26
- margin: 0;
27
- font-weight: var(--sv-font-weight-semibold);
28
- }
29
-
30
- .body {
31
- margin: 0;
32
- }
33
-
34
- .info {
35
- background: var(--sv-color-info-surface);
36
- border-color: var(--sv-color-info-border);
37
- color: var(--sv-color-info-text);
38
- }
39
-
40
- .success {
41
- background: var(--sv-color-success-surface);
42
- border-color: var(--sv-color-success-border);
43
- color: var(--sv-color-success-text);
44
- }
45
-
46
- .warning {
47
- background: var(--sv-color-warning-surface);
48
- border-color: var(--sv-color-warning-border);
49
- color: var(--sv-color-warning-text);
50
- }
51
-
52
- .error {
53
- background: var(--sv-color-error-surface);
54
- border-color: var(--sv-color-error-border);
55
- color: var(--sv-color-error-text);
56
- }
57
-
58
- .neutral {
59
- background: var(--sv-color-surface-sunken);
60
- border-color: var(--sv-color-border);
61
- color: var(--sv-color-text-primary);
62
- }