@shipfox/react-ui 0.3.0 → 0.5.0

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 (314) hide show
  1. package/.storybook/main.ts +20 -10
  2. package/.storybook/preview.tsx +1 -1
  3. package/.storybook/vitest.setup.ts +4 -0
  4. package/.turbo/turbo-build.log +2 -2
  5. package/.turbo/turbo-check.log +2 -2
  6. package/.turbo/turbo-type.log +1 -1
  7. package/CHANGELOG.md +18 -0
  8. package/README.md +40 -1
  9. package/argos.config.ts +33 -0
  10. package/dist/components/alert/alert.d.ts +2 -2
  11. package/dist/components/alert/alert.js +3 -3
  12. package/dist/components/alert/alert.js.map +1 -1
  13. package/dist/components/alert/alert.stories.js +2 -2
  14. package/dist/components/alert/alert.stories.js.map +1 -1
  15. package/dist/components/avatar/avatar-group.js +3 -3
  16. package/dist/components/avatar/avatar-group.js.map +1 -1
  17. package/dist/components/avatar/avatar.d.ts +4 -1
  18. package/dist/components/avatar/avatar.d.ts.map +1 -1
  19. package/dist/components/avatar/avatar.js +7 -8
  20. package/dist/components/avatar/avatar.js.map +1 -1
  21. package/dist/components/avatar/avatar.stories.js +15 -3
  22. package/dist/components/avatar/avatar.stories.js.map +1 -1
  23. package/dist/components/badge/badge.d.ts +48 -0
  24. package/dist/components/badge/badge.d.ts.map +1 -0
  25. package/dist/components/badge/badge.js +72 -0
  26. package/dist/components/badge/badge.js.map +1 -0
  27. package/dist/components/badge/badge.stories.js +802 -0
  28. package/dist/components/badge/badge.stories.js.map +1 -0
  29. package/dist/components/badge/icon-badge.d.ts +9 -0
  30. package/dist/components/badge/icon-badge.d.ts.map +1 -0
  31. package/dist/components/badge/icon-badge.js +32 -0
  32. package/dist/components/badge/icon-badge.js.map +1 -0
  33. package/dist/components/badge/index.d.ts +5 -0
  34. package/dist/components/badge/index.d.ts.map +1 -0
  35. package/dist/components/badge/index.js +6 -0
  36. package/dist/components/badge/index.js.map +1 -0
  37. package/dist/components/badge/status-badge.d.ts +9 -0
  38. package/dist/components/badge/status-badge.d.ts.map +1 -0
  39. package/dist/components/badge/status-badge.js +29 -0
  40. package/dist/components/badge/status-badge.js.map +1 -0
  41. package/dist/components/badge/user-badge.d.ts +8 -0
  42. package/dist/components/badge/user-badge.d.ts.map +1 -0
  43. package/dist/components/badge/user-badge.js +24 -0
  44. package/dist/components/badge/user-badge.js.map +1 -0
  45. package/dist/components/button/button-link.d.ts +14 -0
  46. package/dist/components/button/button-link.d.ts.map +1 -0
  47. package/dist/components/button/button-link.js +63 -0
  48. package/dist/components/button/button-link.js.map +1 -0
  49. package/dist/components/button/button-link.stories.js +127 -0
  50. package/dist/components/button/button-link.stories.js.map +1 -0
  51. package/dist/components/{button.d.ts → button/button.d.ts} +2 -2
  52. package/dist/components/button/button.d.ts.map +1 -0
  53. package/dist/components/{button.js → button/button.js} +9 -8
  54. package/dist/components/button/button.js.map +1 -0
  55. package/dist/components/{button.stories.js → button/button.stories.js} +2 -14
  56. package/dist/components/button/button.stories.js.map +1 -0
  57. package/dist/components/button/icon-button.d.ts +14 -0
  58. package/dist/components/button/icon-button.d.ts.map +1 -0
  59. package/dist/components/button/icon-button.js +53 -0
  60. package/dist/components/button/icon-button.js.map +1 -0
  61. package/dist/components/button/icon-button.stories.js +254 -0
  62. package/dist/components/button/icon-button.stories.js.map +1 -0
  63. package/dist/components/button/index.d.ts +4 -0
  64. package/dist/components/button/index.d.ts.map +1 -0
  65. package/dist/components/button/index.js +5 -0
  66. package/dist/components/button/index.js.map +1 -0
  67. package/dist/components/checkbox/checkbox-label.d.ts +14 -0
  68. package/dist/components/checkbox/checkbox-label.d.ts.map +1 -0
  69. package/dist/components/checkbox/checkbox-label.js +82 -0
  70. package/dist/components/checkbox/checkbox-label.js.map +1 -0
  71. package/dist/components/checkbox/checkbox-links.d.ts +18 -0
  72. package/dist/components/checkbox/checkbox-links.d.ts.map +1 -0
  73. package/dist/components/checkbox/checkbox-links.js +58 -0
  74. package/dist/components/checkbox/checkbox-links.js.map +1 -0
  75. package/dist/components/checkbox/checkbox.d.ts +9 -0
  76. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  77. package/dist/components/checkbox/checkbox.js +49 -0
  78. package/dist/components/checkbox/checkbox.js.map +1 -0
  79. package/dist/components/checkbox/checkbox.stories.js +566 -0
  80. package/dist/components/checkbox/checkbox.stories.js.map +1 -0
  81. package/dist/components/checkbox/index.d.ts +4 -0
  82. package/dist/components/checkbox/index.d.ts.map +1 -0
  83. package/dist/components/checkbox/index.js +5 -0
  84. package/dist/components/checkbox/index.js.map +1 -0
  85. package/dist/components/code-block/code-block-footer.d.ts +26 -0
  86. package/dist/components/code-block/code-block-footer.d.ts.map +1 -0
  87. package/dist/components/code-block/code-block-footer.js +86 -0
  88. package/dist/components/code-block/code-block-footer.js.map +1 -0
  89. package/dist/components/code-block/code-block.d.ts +50 -0
  90. package/dist/components/code-block/code-block.d.ts.map +1 -0
  91. package/dist/components/code-block/code-block.js +142 -0
  92. package/dist/components/code-block/code-block.js.map +1 -0
  93. package/dist/components/code-block/code-block.stories.js +341 -0
  94. package/dist/components/code-block/code-block.stories.js.map +1 -0
  95. package/dist/components/code-block/code-content.d.ts +11 -0
  96. package/dist/components/code-block/code-content.d.ts.map +1 -0
  97. package/dist/components/code-block/code-content.js +29 -0
  98. package/dist/components/code-block/code-content.js.map +1 -0
  99. package/dist/components/code-block/code-copy-button.d.ts +11 -0
  100. package/dist/components/code-block/code-copy-button.d.ts.map +1 -0
  101. package/dist/components/code-block/code-copy-button.js +49 -0
  102. package/dist/components/code-block/code-copy-button.js.map +1 -0
  103. package/dist/components/code-block/code-tabs.d.ts +16 -0
  104. package/dist/components/code-block/code-tabs.d.ts.map +1 -0
  105. package/dist/components/code-block/code-tabs.js +98 -0
  106. package/dist/components/code-block/code-tabs.js.map +1 -0
  107. package/dist/components/code-block/index.d.ts +4 -0
  108. package/dist/components/code-block/index.d.ts.map +1 -0
  109. package/dist/components/code-block/index.js +5 -0
  110. package/dist/components/code-block/index.js.map +1 -0
  111. package/dist/components/dynamic-item/dynamic-item.d.ts +13 -0
  112. package/dist/components/dynamic-item/dynamic-item.d.ts.map +1 -0
  113. package/dist/components/dynamic-item/dynamic-item.js +43 -0
  114. package/dist/components/dynamic-item/dynamic-item.js.map +1 -0
  115. package/dist/components/dynamic-item/dynamic-item.stories.js +375 -0
  116. package/dist/components/dynamic-item/dynamic-item.stories.js.map +1 -0
  117. package/dist/components/dynamic-item/index.d.ts +2 -0
  118. package/dist/components/dynamic-item/index.d.ts.map +1 -0
  119. package/dist/components/dynamic-item/index.js +3 -0
  120. package/dist/components/dynamic-item/index.js.map +1 -0
  121. package/dist/components/icon/custom/index.d.ts +2 -0
  122. package/dist/components/icon/custom/index.d.ts.map +1 -1
  123. package/dist/components/icon/custom/index.js +2 -0
  124. package/dist/components/icon/custom/index.js.map +1 -1
  125. package/dist/components/icon/custom/slack-logo.d.ts +6 -0
  126. package/dist/components/icon/custom/slack-logo.d.ts.map +1 -0
  127. package/dist/components/icon/custom/slack-logo.js +34 -0
  128. package/dist/components/icon/custom/slack-logo.js.map +1 -0
  129. package/dist/components/icon/custom/stripe-logo.d.ts +8 -0
  130. package/dist/components/icon/custom/stripe-logo.d.ts.map +1 -0
  131. package/dist/components/icon/custom/stripe-logo.js +24 -0
  132. package/dist/components/icon/custom/stripe-logo.js.map +1 -0
  133. package/dist/components/icon/icon.d.ts +13 -2
  134. package/dist/components/icon/icon.d.ts.map +1 -1
  135. package/dist/components/icon/icon.js +14 -3
  136. package/dist/components/icon/icon.js.map +1 -1
  137. package/dist/components/icon/icon.stories.js +6 -3
  138. package/dist/components/icon/icon.stories.js.map +1 -1
  139. package/dist/components/index.d.ts +9 -1
  140. package/dist/components/index.d.ts.map +1 -1
  141. package/dist/components/index.js +10 -2
  142. package/dist/components/index.js.map +1 -1
  143. package/dist/components/inline-tips/inline-tips.d.ts +1 -1
  144. package/dist/components/inline-tips/inline-tips.d.ts.map +1 -1
  145. package/dist/components/inline-tips/inline-tips.js +1 -1
  146. package/dist/components/inline-tips/inline-tips.js.map +1 -1
  147. package/dist/components/inline-tips/inline-tips.stories.js +5 -5
  148. package/dist/components/inline-tips/inline-tips.stories.js.map +1 -1
  149. package/dist/components/input/index.d.ts +2 -0
  150. package/dist/components/input/index.d.ts.map +1 -0
  151. package/dist/components/input/index.js +3 -0
  152. package/dist/components/input/index.js.map +1 -0
  153. package/dist/components/input/input.d.ts.map +1 -0
  154. package/dist/components/{input.js → input/input.js} +2 -2
  155. package/dist/components/input/input.js.map +1 -0
  156. package/dist/components/{input.stories.js → input/input.stories.js} +1 -1
  157. package/dist/components/input/input.stories.js.map +1 -0
  158. package/dist/components/item/index.d.ts +2 -0
  159. package/dist/components/item/index.d.ts.map +1 -0
  160. package/dist/components/item/index.js +3 -0
  161. package/dist/components/item/index.js.map +1 -0
  162. package/dist/components/item/item.d.ts +32 -0
  163. package/dist/components/item/item.d.ts.map +1 -0
  164. package/dist/components/item/item.js +120 -0
  165. package/dist/components/item/item.js.map +1 -0
  166. package/dist/components/item/item.stories.js +232 -0
  167. package/dist/components/item/item.stories.js.map +1 -0
  168. package/dist/components/label/index.d.ts +2 -0
  169. package/dist/components/label/index.d.ts.map +1 -0
  170. package/dist/components/label/index.js +3 -0
  171. package/dist/components/label/index.js.map +1 -0
  172. package/dist/components/label/label.d.ts +7 -0
  173. package/dist/components/label/label.d.ts.map +1 -0
  174. package/dist/components/label/label.js +13 -0
  175. package/dist/components/label/label.js.map +1 -0
  176. package/dist/components/label/label.stories.js +105 -0
  177. package/dist/components/label/label.stories.js.map +1 -0
  178. package/dist/components/moving-border/moving-border.d.ts +9 -0
  179. package/dist/components/moving-border/moving-border.d.ts.map +1 -0
  180. package/dist/components/moving-border/moving-border.js +54 -0
  181. package/dist/components/moving-border/moving-border.js.map +1 -0
  182. package/dist/components/textarea/textarea.js +1 -1
  183. package/dist/components/textarea/textarea.js.map +1 -1
  184. package/dist/components/theme/index.d.ts +2 -0
  185. package/dist/components/theme/index.d.ts.map +1 -0
  186. package/dist/components/theme/index.js +3 -0
  187. package/dist/components/theme/index.js.map +1 -0
  188. package/dist/components/{theme-provider.d.ts → theme/theme-provider.d.ts} +1 -1
  189. package/dist/components/theme/theme-provider.d.ts.map +1 -0
  190. package/dist/components/{theme-provider.js → theme/theme-provider.js} +1 -1
  191. package/dist/components/theme/theme-provider.js.map +1 -0
  192. package/dist/components/toast/index.d.ts +3 -0
  193. package/dist/components/toast/index.d.ts.map +1 -0
  194. package/dist/components/toast/index.js +4 -0
  195. package/dist/components/toast/index.js.map +1 -0
  196. package/dist/components/toast/toast-custom.d.ts +19 -0
  197. package/dist/components/toast/toast-custom.d.ts.map +1 -0
  198. package/dist/components/toast/toast-custom.js +134 -0
  199. package/dist/components/toast/toast-custom.js.map +1 -0
  200. package/dist/components/toast/toast.d.ts +5 -0
  201. package/dist/components/toast/toast.d.ts.map +1 -0
  202. package/dist/components/toast/toast.js +40 -0
  203. package/dist/components/toast/toast.js.map +1 -0
  204. package/dist/components/toast/toast.stories.js +326 -0
  205. package/dist/components/toast/toast.stories.js.map +1 -0
  206. package/dist/components/tooltip/index.d.ts +2 -0
  207. package/dist/components/tooltip/index.d.ts.map +1 -0
  208. package/dist/components/tooltip/index.js +3 -0
  209. package/dist/components/tooltip/index.js.map +1 -0
  210. package/dist/components/tooltip/tooltip.d.ts +18 -5
  211. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  212. package/dist/components/tooltip/tooltip.js +63 -3
  213. package/dist/components/tooltip/tooltip.js.map +1 -1
  214. package/dist/components/tooltip/tooltip.stories.js +560 -0
  215. package/dist/components/tooltip/tooltip.stories.js.map +1 -0
  216. package/dist/hooks/index.d.ts +3 -0
  217. package/dist/hooks/index.d.ts.map +1 -1
  218. package/dist/hooks/index.js +3 -0
  219. package/dist/hooks/index.js.map +1 -1
  220. package/dist/hooks/useResolvedTheme.d.ts +2 -0
  221. package/dist/hooks/useResolvedTheme.d.ts.map +1 -0
  222. package/dist/hooks/useResolvedTheme.js +24 -0
  223. package/dist/hooks/useResolvedTheme.js.map +1 -0
  224. package/dist/hooks/useShikiHighlight.d.ts +28 -0
  225. package/dist/hooks/useShikiHighlight.d.ts.map +1 -0
  226. package/dist/hooks/useShikiHighlight.js +106 -0
  227. package/dist/hooks/useShikiHighlight.js.map +1 -0
  228. package/dist/hooks/useShikiStyleInjection.d.ts +2 -0
  229. package/dist/hooks/useShikiStyleInjection.d.ts.map +1 -0
  230. package/dist/hooks/useShikiStyleInjection.js +34 -0
  231. package/dist/hooks/useShikiStyleInjection.js.map +1 -0
  232. package/dist/onboarding/sign-in.stories.js +93 -0
  233. package/dist/onboarding/sign-in.stories.js.map +1 -0
  234. package/index.css +130 -12
  235. package/package.json +14 -3
  236. package/src/assets/illustration-1.svg +92 -0
  237. package/src/assets/illustration-2.svg +14 -0
  238. package/src/assets/illustration-gradient.svg +7049 -0
  239. package/src/components/alert/alert.stories.tsx +2 -2
  240. package/src/components/alert/alert.tsx +3 -3
  241. package/src/components/avatar/avatar-group.tsx +3 -3
  242. package/src/components/avatar/avatar.stories.tsx +9 -2
  243. package/src/components/avatar/avatar.tsx +10 -6
  244. package/src/components/badge/badge.stories.tsx +468 -0
  245. package/src/components/badge/badge.tsx +147 -0
  246. package/src/components/badge/icon-badge.tsx +43 -0
  247. package/src/components/badge/index.ts +4 -0
  248. package/src/components/badge/status-badge.tsx +43 -0
  249. package/src/components/badge/user-badge.tsx +34 -0
  250. package/src/components/button/button-link.stories.tsx +86 -0
  251. package/src/components/button/button-link.tsx +76 -0
  252. package/src/components/{button.stories.tsx → button/button.stories.tsx} +1 -7
  253. package/src/components/{button.tsx → button/button.tsx} +9 -7
  254. package/src/components/button/icon-button.stories.tsx +182 -0
  255. package/src/components/button/icon-button.tsx +69 -0
  256. package/src/components/button/index.ts +3 -0
  257. package/src/components/checkbox/checkbox-label.tsx +125 -0
  258. package/src/components/checkbox/checkbox-links.tsx +90 -0
  259. package/src/components/checkbox/checkbox.stories.tsx +375 -0
  260. package/src/components/checkbox/checkbox.tsx +71 -0
  261. package/src/components/checkbox/index.ts +3 -0
  262. package/src/components/code-block/code-block-footer.tsx +173 -0
  263. package/src/components/code-block/code-block.stories.tsx +323 -0
  264. package/src/components/code-block/code-block.tsx +283 -0
  265. package/src/components/code-block/code-content.tsx +63 -0
  266. package/src/components/code-block/code-copy-button.tsx +73 -0
  267. package/src/components/code-block/code-tabs.tsx +170 -0
  268. package/src/components/code-block/index.ts +3 -0
  269. package/src/components/dynamic-item/dynamic-item.stories.tsx +261 -0
  270. package/src/components/dynamic-item/dynamic-item.tsx +68 -0
  271. package/src/components/dynamic-item/index.ts +1 -0
  272. package/src/components/icon/custom/index.ts +2 -0
  273. package/src/components/icon/custom/slack-logo.tsx +35 -0
  274. package/src/components/icon/custom/stripe-logo.tsx +27 -0
  275. package/src/components/icon/icon.stories.tsx +3 -1
  276. package/src/components/icon/icon.tsx +23 -1
  277. package/src/components/index.ts +9 -1
  278. package/src/components/inline-tips/inline-tips.stories.tsx +3 -3
  279. package/src/components/inline-tips/inline-tips.tsx +2 -2
  280. package/src/components/input/index.ts +1 -0
  281. package/src/components/{input.tsx → input/input.tsx} +1 -1
  282. package/src/components/item/index.ts +1 -0
  283. package/src/components/item/item.stories.tsx +150 -0
  284. package/src/components/item/item.tsx +182 -0
  285. package/src/components/label/index.ts +1 -0
  286. package/src/components/label/label.stories.tsx +67 -0
  287. package/src/components/label/label.tsx +15 -0
  288. package/src/components/moving-border/moving-border.tsx +67 -0
  289. package/src/components/textarea/textarea.tsx +1 -1
  290. package/src/components/theme/index.ts +1 -0
  291. package/src/components/toast/index.ts +2 -0
  292. package/src/components/toast/toast-custom.tsx +154 -0
  293. package/src/components/toast/toast.stories.tsx +369 -0
  294. package/src/components/toast/toast.tsx +41 -0
  295. package/src/components/tooltip/index.ts +1 -0
  296. package/src/components/tooltip/tooltip.stories.tsx +284 -0
  297. package/src/components/tooltip/tooltip.tsx +79 -10
  298. package/src/hooks/index.ts +3 -0
  299. package/src/hooks/useResolvedTheme.ts +34 -0
  300. package/src/hooks/useShikiHighlight.ts +140 -0
  301. package/src/hooks/useShikiStyleInjection.ts +34 -0
  302. package/src/onboarding/sign-in.stories.tsx +73 -0
  303. package/vitest.config.ts +30 -3
  304. package/dist/components/button.d.ts.map +0 -1
  305. package/dist/components/button.js.map +0 -1
  306. package/dist/components/button.stories.js.map +0 -1
  307. package/dist/components/input.d.ts.map +0 -1
  308. package/dist/components/input.js.map +0 -1
  309. package/dist/components/input.stories.js.map +0 -1
  310. package/dist/components/theme-provider.d.ts.map +0 -1
  311. package/dist/components/theme-provider.js.map +0 -1
  312. /package/dist/components/{input.d.ts → input/input.d.ts} +0 -0
  313. /package/src/components/{input.stories.tsx → input/input.stories.tsx} +0 -0
  314. /package/src/components/{theme-provider.tsx → theme/theme-provider.tsx} +0 -0
@@ -0,0 +1,2 @@
1
+ export declare function useResolvedTheme(): 'light' | 'dark';
2
+ //# sourceMappingURL=useResolvedTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResolvedTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useResolvedTheme.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,IAAI,OAAO,GAAG,MAAM,CA8BnD"}
@@ -0,0 +1,24 @@
1
+ import { useSyncExternalStore } from 'react';
2
+ import { useTheme } from './useTheme.js';
3
+ export function useResolvedTheme() {
4
+ const { theme } = useTheme();
5
+ const systemTheme = useSyncExternalStore((callback)=>{
6
+ if (typeof window === 'undefined' || theme !== 'system') {
7
+ return ()=>{
8
+ // No-op unsubscribe
9
+ };
10
+ }
11
+ const mql = window.matchMedia('(prefers-color-scheme: dark)');
12
+ mql.addEventListener('change', callback);
13
+ return ()=>{
14
+ mql.removeEventListener('change', callback);
15
+ };
16
+ }, ()=>typeof window !== 'undefined' && theme === 'system' ? window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : 'light', ()=>'light');
17
+ if (theme === 'system') {
18
+ return systemTheme;
19
+ }
20
+ // TypeScript should narrow theme to 'light' | 'dark' here
21
+ return theme;
22
+ }
23
+
24
+ //# sourceMappingURL=useResolvedTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useResolvedTheme.ts"],"sourcesContent":["import {useSyncExternalStore} from 'react';\nimport {useTheme} from './useTheme';\n\nexport function useResolvedTheme(): 'light' | 'dark' {\n const {theme} = useTheme();\n\n const systemTheme = useSyncExternalStore<'light' | 'dark'>(\n (callback) => {\n if (typeof window === 'undefined' || theme !== 'system') {\n return () => {\n // No-op unsubscribe\n };\n }\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n mql.addEventListener('change', callback);\n return () => {\n mql.removeEventListener('change', callback);\n };\n },\n (): 'light' | 'dark' =>\n typeof window !== 'undefined' && theme === 'system'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n (): 'light' | 'dark' => 'light', // Server snapshot\n );\n\n if (theme === 'system') {\n return systemTheme;\n }\n // TypeScript should narrow theme to 'light' | 'dark' here\n return theme as 'light' | 'dark';\n}\n"],"names":["useSyncExternalStore","useTheme","useResolvedTheme","theme","systemTheme","callback","window","mql","matchMedia","addEventListener","removeEventListener","matches"],"mappings":"AAAA,SAAQA,oBAAoB,QAAO,QAAQ;AAC3C,SAAQC,QAAQ,QAAO,aAAa;AAEpC,OAAO,SAASC;IACd,MAAM,EAACC,KAAK,EAAC,GAAGF;IAEhB,MAAMG,cAAcJ,qBAClB,CAACK;QACC,IAAI,OAAOC,WAAW,eAAeH,UAAU,UAAU;YACvD,OAAO;YACL,oBAAoB;YACtB;QACF;QACA,MAAMI,MAAMD,OAAOE,UAAU,CAAC;QAC9BD,IAAIE,gBAAgB,CAAC,UAAUJ;QAC/B,OAAO;YACLE,IAAIG,mBAAmB,CAAC,UAAUL;QACpC;IACF,GACA,IACE,OAAOC,WAAW,eAAeH,UAAU,WACvCG,OAAOE,UAAU,CAAC,gCAAgCG,OAAO,GACvD,SACA,UACF,SACN,IAAwB;IAG1B,IAAIR,UAAU,UAAU;QACtB,OAAOC;IACT;IACA,0DAA0D;IAC1D,OAAOD;AACT"}
@@ -0,0 +1,28 @@
1
+ type ShikiThemes = {
2
+ light: string;
3
+ dark: string;
4
+ };
5
+ type UseShikiHighlightOptions = {
6
+ code: string;
7
+ lang: string;
8
+ themes: ShikiThemes;
9
+ resolvedTheme: 'light' | 'dark';
10
+ syntaxHighlighting: boolean;
11
+ };
12
+ export declare function useShikiHighlight({ code, lang, themes, resolvedTheme, syntaxHighlighting, }: UseShikiHighlightOptions): {
13
+ highlightedCode: string;
14
+ isLoading: boolean;
15
+ };
16
+ type UseShikiHighlightMultipleOptions = {
17
+ codes: Record<string, string>;
18
+ lang: string;
19
+ themes: ShikiThemes;
20
+ resolvedTheme: 'light' | 'dark';
21
+ syntaxHighlighting: boolean;
22
+ };
23
+ export declare function useShikiHighlightMultiple({ codes, lang, themes, resolvedTheme, syntaxHighlighting, }: UseShikiHighlightMultipleOptions): {
24
+ highlightedCodes: Record<string, string>;
25
+ isLoading: boolean;
26
+ };
27
+ export {};
28
+ //# sourceMappingURL=useShikiHighlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useShikiHighlight.d.ts","sourceRoot":"","sources":["../../src/hooks/useShikiHighlight.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,aAAa,EACb,kBAAkB,GACnB,EAAE,wBAAwB,GAAG;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAC,CA6C1E;AAED,KAAK,gCAAgC,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,IAAI,EACJ,MAAM,EACN,aAAa,EACb,kBAAkB,GACnB,EAAE,gCAAgC,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,SAAS,EAAE,OAAO,CAAC;CACpB,CAsDA"}
@@ -0,0 +1,106 @@
1
+ import { useEffect, useState } from 'react';
2
+ export function useShikiHighlight({ code, lang, themes, resolvedTheme, syntaxHighlighting }) {
3
+ const [highlightedCode, setHighlightedCode] = useState('');
4
+ const [isLoading, setIsLoading] = useState(syntaxHighlighting);
5
+ useEffect(()=>{
6
+ if (!syntaxHighlighting) {
7
+ setIsLoading(false);
8
+ return;
9
+ }
10
+ setIsLoading(true);
11
+ let cancelled = false;
12
+ const loadHighlightedCode = async ()=>{
13
+ try {
14
+ const { codeToHtml } = await import('shiki');
15
+ const html = await codeToHtml(code, {
16
+ lang,
17
+ themes: {
18
+ light: themes.light,
19
+ dark: themes.dark
20
+ },
21
+ defaultColor: resolvedTheme === 'dark' ? 'dark' : 'light'
22
+ });
23
+ if (!cancelled) {
24
+ setHighlightedCode(html);
25
+ setIsLoading(false);
26
+ }
27
+ } catch {
28
+ if (!cancelled) {
29
+ setIsLoading(false);
30
+ }
31
+ }
32
+ };
33
+ loadHighlightedCode();
34
+ return ()=>{
35
+ cancelled = true;
36
+ };
37
+ }, [
38
+ code,
39
+ lang,
40
+ themes.light,
41
+ themes.dark,
42
+ resolvedTheme,
43
+ syntaxHighlighting
44
+ ]);
45
+ return {
46
+ highlightedCode,
47
+ isLoading
48
+ };
49
+ }
50
+ export function useShikiHighlightMultiple({ codes, lang, themes, resolvedTheme, syntaxHighlighting }) {
51
+ const [highlightedCodes, setHighlightedCodes] = useState({});
52
+ const [isLoading, setIsLoading] = useState(syntaxHighlighting);
53
+ useEffect(()=>{
54
+ if (!syntaxHighlighting) {
55
+ setIsLoading(false);
56
+ return;
57
+ }
58
+ setIsLoading(true);
59
+ let cancelled = false;
60
+ const loadHighlightedCode = async ()=>{
61
+ try {
62
+ const { codeToHtml } = await import('shiki');
63
+ const newHighlightedCodes = {};
64
+ for (const [command, val] of Object.entries(codes)){
65
+ if (cancelled) {
66
+ return;
67
+ }
68
+ const highlighted = await codeToHtml(val, {
69
+ lang,
70
+ themes: {
71
+ light: themes.light,
72
+ dark: themes.dark
73
+ },
74
+ defaultColor: resolvedTheme === 'dark' ? 'dark' : 'light'
75
+ });
76
+ newHighlightedCodes[command] = highlighted;
77
+ }
78
+ if (!cancelled) {
79
+ setHighlightedCodes(newHighlightedCodes);
80
+ setIsLoading(false);
81
+ }
82
+ } catch {
83
+ if (!cancelled) {
84
+ setIsLoading(false);
85
+ }
86
+ }
87
+ };
88
+ loadHighlightedCode();
89
+ return ()=>{
90
+ cancelled = true;
91
+ };
92
+ }, [
93
+ resolvedTheme,
94
+ lang,
95
+ themes.light,
96
+ themes.dark,
97
+ codes,
98
+ syntaxHighlighting
99
+ ]);
100
+ return {
101
+ highlightedCodes,
102
+ isLoading
103
+ };
104
+ }
105
+
106
+ //# sourceMappingURL=useShikiHighlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useShikiHighlight.ts"],"sourcesContent":["import {useEffect, useState} from 'react';\n\ntype ShikiThemes = {\n light: string;\n dark: string;\n};\n\ntype UseShikiHighlightOptions = {\n code: string;\n lang: string;\n themes: ShikiThemes;\n resolvedTheme: 'light' | 'dark';\n syntaxHighlighting: boolean;\n};\n\nexport function useShikiHighlight({\n code,\n lang,\n themes,\n resolvedTheme,\n syntaxHighlighting,\n}: UseShikiHighlightOptions): {highlightedCode: string; isLoading: boolean} {\n const [highlightedCode, setHighlightedCode] = useState<string>('');\n const [isLoading, setIsLoading] = useState(syntaxHighlighting);\n\n useEffect(() => {\n if (!syntaxHighlighting) {\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n let cancelled = false;\n\n const loadHighlightedCode = async () => {\n try {\n const {codeToHtml} = await import('shiki');\n\n const html = await codeToHtml(code, {\n lang,\n themes: {\n light: themes.light,\n dark: themes.dark,\n },\n defaultColor: resolvedTheme === 'dark' ? 'dark' : 'light',\n });\n\n if (!cancelled) {\n setHighlightedCode(html);\n setIsLoading(false);\n }\n } catch {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n loadHighlightedCode();\n\n return () => {\n cancelled = true;\n };\n }, [code, lang, themes.light, themes.dark, resolvedTheme, syntaxHighlighting]);\n\n return {highlightedCode, isLoading};\n}\n\ntype UseShikiHighlightMultipleOptions = {\n codes: Record<string, string>;\n lang: string;\n themes: ShikiThemes;\n resolvedTheme: 'light' | 'dark';\n syntaxHighlighting: boolean;\n};\n\nexport function useShikiHighlightMultiple({\n codes,\n lang,\n themes,\n resolvedTheme,\n syntaxHighlighting,\n}: UseShikiHighlightMultipleOptions): {\n highlightedCodes: Record<string, string>;\n isLoading: boolean;\n} {\n const [highlightedCodes, setHighlightedCodes] = useState<Record<string, string>>({});\n const [isLoading, setIsLoading] = useState(syntaxHighlighting);\n\n useEffect(() => {\n if (!syntaxHighlighting) {\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n let cancelled = false;\n\n const loadHighlightedCode = async () => {\n try {\n const {codeToHtml} = await import('shiki');\n const newHighlightedCodes: Record<string, string> = {};\n\n for (const [command, val] of Object.entries(codes)) {\n if (cancelled) {\n return;\n }\n\n const highlighted = await codeToHtml(val, {\n lang,\n themes: {\n light: themes.light,\n dark: themes.dark,\n },\n defaultColor: resolvedTheme === 'dark' ? 'dark' : 'light',\n });\n\n newHighlightedCodes[command] = highlighted;\n }\n\n if (!cancelled) {\n setHighlightedCodes(newHighlightedCodes);\n setIsLoading(false);\n }\n } catch {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n loadHighlightedCode();\n\n return () => {\n cancelled = true;\n };\n }, [resolvedTheme, lang, themes.light, themes.dark, codes, syntaxHighlighting]);\n\n return {highlightedCodes, isLoading};\n}\n"],"names":["useEffect","useState","useShikiHighlight","code","lang","themes","resolvedTheme","syntaxHighlighting","highlightedCode","setHighlightedCode","isLoading","setIsLoading","cancelled","loadHighlightedCode","codeToHtml","html","light","dark","defaultColor","useShikiHighlightMultiple","codes","highlightedCodes","setHighlightedCodes","newHighlightedCodes","command","val","Object","entries","highlighted"],"mappings":"AAAA,SAAQA,SAAS,EAAEC,QAAQ,QAAO,QAAQ;AAe1C,OAAO,SAASC,kBAAkB,EAChCC,IAAI,EACJC,IAAI,EACJC,MAAM,EACNC,aAAa,EACbC,kBAAkB,EACO;IACzB,MAAM,CAACC,iBAAiBC,mBAAmB,GAAGR,SAAiB;IAC/D,MAAM,CAACS,WAAWC,aAAa,GAAGV,SAASM;IAE3CP,UAAU;QACR,IAAI,CAACO,oBAAoB;YACvBI,aAAa;YACb;QACF;QAEAA,aAAa;QACb,IAAIC,YAAY;QAEhB,MAAMC,sBAAsB;YAC1B,IAAI;gBACF,MAAM,EAACC,UAAU,EAAC,GAAG,MAAM,MAAM,CAAC;gBAElC,MAAMC,OAAO,MAAMD,WAAWX,MAAM;oBAClCC;oBACAC,QAAQ;wBACNW,OAAOX,OAAOW,KAAK;wBACnBC,MAAMZ,OAAOY,IAAI;oBACnB;oBACAC,cAAcZ,kBAAkB,SAAS,SAAS;gBACpD;gBAEA,IAAI,CAACM,WAAW;oBACdH,mBAAmBM;oBACnBJ,aAAa;gBACf;YACF,EAAE,OAAM;gBACN,IAAI,CAACC,WAAW;oBACdD,aAAa;gBACf;YACF;QACF;QAEAE;QAEA,OAAO;YACLD,YAAY;QACd;IACF,GAAG;QAACT;QAAMC;QAAMC,OAAOW,KAAK;QAAEX,OAAOY,IAAI;QAAEX;QAAeC;KAAmB;IAE7E,OAAO;QAACC;QAAiBE;IAAS;AACpC;AAUA,OAAO,SAASS,0BAA0B,EACxCC,KAAK,EACLhB,IAAI,EACJC,MAAM,EACNC,aAAa,EACbC,kBAAkB,EACe;IAIjC,MAAM,CAACc,kBAAkBC,oBAAoB,GAAGrB,SAAiC,CAAC;IAClF,MAAM,CAACS,WAAWC,aAAa,GAAGV,SAASM;IAE3CP,UAAU;QACR,IAAI,CAACO,oBAAoB;YACvBI,aAAa;YACb;QACF;QAEAA,aAAa;QACb,IAAIC,YAAY;QAEhB,MAAMC,sBAAsB;YAC1B,IAAI;gBACF,MAAM,EAACC,UAAU,EAAC,GAAG,MAAM,MAAM,CAAC;gBAClC,MAAMS,sBAA8C,CAAC;gBAErD,KAAK,MAAM,CAACC,SAASC,IAAI,IAAIC,OAAOC,OAAO,CAACP,OAAQ;oBAClD,IAAIR,WAAW;wBACb;oBACF;oBAEA,MAAMgB,cAAc,MAAMd,WAAWW,KAAK;wBACxCrB;wBACAC,QAAQ;4BACNW,OAAOX,OAAOW,KAAK;4BACnBC,MAAMZ,OAAOY,IAAI;wBACnB;wBACAC,cAAcZ,kBAAkB,SAAS,SAAS;oBACpD;oBAEAiB,mBAAmB,CAACC,QAAQ,GAAGI;gBACjC;gBAEA,IAAI,CAAChB,WAAW;oBACdU,oBAAoBC;oBACpBZ,aAAa;gBACf;YACF,EAAE,OAAM;gBACN,IAAI,CAACC,WAAW;oBACdD,aAAa;gBACf;YACF;QACF;QAEAE;QAEA,OAAO;YACLD,YAAY;QACd;IACF,GAAG;QAACN;QAAeF;QAAMC,OAAOW,KAAK;QAAEX,OAAOY,IAAI;QAAEG;QAAOb;KAAmB;IAE9E,OAAO;QAACc;QAAkBX;IAAS;AACrC"}
@@ -0,0 +1,2 @@
1
+ export declare function useShikiStyleInjection(syntaxHighlighting: boolean): void;
2
+ //# sourceMappingURL=useShikiStyleInjection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useShikiStyleInjection.d.ts","sourceRoot":"","sources":["../../src/hooks/useShikiStyleInjection.ts"],"names":[],"mappings":"AAEA,wBAAgB,sBAAsB,CAAC,kBAAkB,EAAE,OAAO,GAAG,IAAI,CA+BxE"}
@@ -0,0 +1,34 @@
1
+ import { useEffect } from 'react';
2
+ export function useShikiStyleInjection(syntaxHighlighting) {
3
+ useEffect(()=>{
4
+ if (!syntaxHighlighting) {
5
+ return;
6
+ }
7
+ const styleId = 'shiki-override-styles';
8
+ if (document.getElementById(styleId)) {
9
+ return;
10
+ }
11
+ const style = document.createElement('style');
12
+ style.id = styleId;
13
+ style.textContent = `
14
+ .shiki-override pre,
15
+ .shiki-override code,
16
+ .shiki-override pre *,
17
+ .shiki-override code * {
18
+ background: transparent !important;
19
+ font-family: "Commit Mono", monospace !important;
20
+ }
21
+ `;
22
+ document.head.appendChild(style);
23
+ return ()=>{
24
+ const existingStyle = document.getElementById(styleId);
25
+ if (existingStyle) {
26
+ existingStyle.remove();
27
+ }
28
+ };
29
+ }, [
30
+ syntaxHighlighting
31
+ ]);
32
+ }
33
+
34
+ //# sourceMappingURL=useShikiStyleInjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useShikiStyleInjection.ts"],"sourcesContent":["import {useEffect} from 'react';\n\nexport function useShikiStyleInjection(syntaxHighlighting: boolean): void {\n useEffect(() => {\n if (!syntaxHighlighting) {\n return;\n }\n\n const styleId = 'shiki-override-styles';\n if (document.getElementById(styleId)) {\n return;\n }\n\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n .shiki-override pre,\n .shiki-override code,\n .shiki-override pre *,\n .shiki-override code * {\n background: transparent !important;\n font-family: \"Commit Mono\", monospace !important;\n }\n `;\n document.head.appendChild(style);\n\n return () => {\n const existingStyle = document.getElementById(styleId);\n if (existingStyle) {\n existingStyle.remove();\n }\n };\n }, [syntaxHighlighting]);\n}\n"],"names":["useEffect","useShikiStyleInjection","syntaxHighlighting","styleId","document","getElementById","style","createElement","id","textContent","head","appendChild","existingStyle","remove"],"mappings":"AAAA,SAAQA,SAAS,QAAO,QAAQ;AAEhC,OAAO,SAASC,uBAAuBC,kBAA2B;IAChEF,UAAU;QACR,IAAI,CAACE,oBAAoB;YACvB;QACF;QAEA,MAAMC,UAAU;QAChB,IAAIC,SAASC,cAAc,CAACF,UAAU;YACpC;QACF;QAEA,MAAMG,QAAQF,SAASG,aAAa,CAAC;QACrCD,MAAME,EAAE,GAAGL;QACXG,MAAMG,WAAW,GAAG,CAAC;;;;;;;;IAQrB,CAAC;QACDL,SAASM,IAAI,CAACC,WAAW,CAACL;QAE1B,OAAO;YACL,MAAMM,gBAAgBR,SAASC,cAAc,CAACF;YAC9C,IAAIS,eAAe;gBACjBA,cAAcC,MAAM;YACtB;QACF;IACF,GAAG;QAACX;KAAmB;AACzB"}
@@ -0,0 +1,93 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { argosScreenshot } from '@argos-ci/storybook/vitest';
3
+ import { Avatar } from '../components/avatar/index.js';
4
+ import { Button } from '../components/button/index.js';
5
+ import { Header, Text } from '../components/typography/index.js';
6
+ const meta = {
7
+ title: 'Onboarding/Signin',
8
+ parameters: {
9
+ layout: 'fullscreen'
10
+ }
11
+ };
12
+ export default meta;
13
+ export const Default = {
14
+ play: async (ctx)=>{
15
+ await argosScreenshot(ctx, 'example-screenshot');
16
+ },
17
+ render: ()=>{
18
+ return /*#__PURE__*/ _jsxs("div", {
19
+ className: "flex min-h-screen items-center justify-center bg-background-subtle-base",
20
+ children: [
21
+ /*#__PURE__*/ _jsx("div", {
22
+ className: "pointer-events-none absolute left-1/2 top-0 -translate-x-1/2 -translate-y-[120px]",
23
+ children: /*#__PURE__*/ _jsx("div", {
24
+ className: "h-[332px] w-[800px] opacity-20",
25
+ style: {
26
+ backgroundImage: `radial-gradient(circle, rgba(255, 75, 0, 0.3) 1px, transparent 1px)`,
27
+ backgroundSize: '24px 24px',
28
+ backgroundPosition: '-80px 31px'
29
+ }
30
+ })
31
+ }),
32
+ /*#__PURE__*/ _jsxs("div", {
33
+ className: "relative flex w-full max-w-[384px] flex-col items-center gap-32 px-24 pb-80 pt-24",
34
+ children: [
35
+ /*#__PURE__*/ _jsxs("div", {
36
+ className: "flex flex-col items-center gap-16",
37
+ children: [
38
+ /*#__PURE__*/ _jsx(Avatar, {
39
+ content: "logo",
40
+ size: "xl",
41
+ radius: "rounded",
42
+ logoName: "shipfox"
43
+ }),
44
+ /*#__PURE__*/ _jsxs("div", {
45
+ className: "flex min-w-[128px] flex-col items-center gap-4 text-center",
46
+ children: [
47
+ /*#__PURE__*/ _jsx(Header, {
48
+ variant: "h1",
49
+ className: "text-[28px] font-medium leading-[44px] text-foreground-neutral-base",
50
+ children: "Connect to Shipfox"
51
+ }),
52
+ /*#__PURE__*/ _jsx(Text, {
53
+ size: "sm",
54
+ className: "text-sm font-normal leading-[24px] text-foreground-neutral-subtle",
55
+ children: "Log in to access Shipfox."
56
+ })
57
+ ]
58
+ })
59
+ ]
60
+ }),
61
+ /*#__PURE__*/ _jsxs("div", {
62
+ className: "flex w-full flex-col gap-20",
63
+ children: [
64
+ /*#__PURE__*/ _jsx(Button, {
65
+ variant: "primary",
66
+ size: "md",
67
+ iconLeft: "google",
68
+ className: "w-full",
69
+ children: "Continue with Google"
70
+ }),
71
+ /*#__PURE__*/ _jsx(Button, {
72
+ variant: "primary",
73
+ size: "md",
74
+ iconLeft: "microsoft",
75
+ className: "w-full",
76
+ children: "Continue with Microsoft"
77
+ }),
78
+ /*#__PURE__*/ _jsx(Button, {
79
+ variant: "transparent",
80
+ size: "md",
81
+ className: "w-full",
82
+ children: "Connect with Enterprise SSO"
83
+ })
84
+ ]
85
+ })
86
+ ]
87
+ })
88
+ ]
89
+ });
90
+ }
91
+ };
92
+
93
+ //# sourceMappingURL=sign-in.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/onboarding/sign-in.stories.tsx"],"sourcesContent":["import {argosScreenshot} from '@argos-ci/storybook/vitest';\nimport type {Meta, StoryObj} from '@storybook/react';\nimport {Avatar} from 'components/avatar';\nimport {Button} from 'components/button';\nimport {Header, Text} from 'components/typography';\n\nconst meta = {\n title: 'Onboarding/Signin',\n parameters: {\n layout: 'fullscreen',\n },\n} satisfies Meta;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Default: Story = {\n play: async (ctx) => {\n await argosScreenshot(ctx, 'example-screenshot');\n },\n render: () => {\n return (\n <div className=\"flex min-h-screen items-center justify-center bg-background-subtle-base\">\n {/* Background illustration - simplified decorative element */}\n <div className=\"pointer-events-none absolute left-1/2 top-0 -translate-x-1/2 -translate-y-[120px]\">\n <div\n className=\"h-[332px] w-[800px] opacity-20\"\n style={{\n backgroundImage: `radial-gradient(circle, rgba(255, 75, 0, 0.3) 1px, transparent 1px)`,\n backgroundSize: '24px 24px',\n backgroundPosition: '-80px 31px',\n }}\n />\n </div>\n\n {/* Main content */}\n <div className=\"relative flex w-full max-w-[384px] flex-col items-center gap-32 px-24 pb-80 pt-24\">\n {/* Logo and title section */}\n <div className=\"flex flex-col items-center gap-16\">\n <Avatar content=\"logo\" size=\"xl\" radius=\"rounded\" logoName=\"shipfox\" />\n <div className=\"flex min-w-[128px] flex-col items-center gap-4 text-center\">\n <Header\n variant=\"h1\"\n className=\"text-[28px] font-medium leading-[44px] text-foreground-neutral-base\"\n >\n Connect to Shipfox\n </Header>\n <Text\n size=\"sm\"\n className=\"text-sm font-normal leading-[24px] text-foreground-neutral-subtle\"\n >\n Log in to access Shipfox.\n </Text>\n </div>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex w-full flex-col gap-20\">\n <Button variant=\"primary\" size=\"md\" iconLeft=\"google\" className=\"w-full\">\n Continue with Google\n </Button>\n <Button variant=\"primary\" size=\"md\" iconLeft=\"microsoft\" className=\"w-full\">\n Continue with Microsoft\n </Button>\n <Button variant=\"transparent\" size=\"md\" className=\"w-full\">\n Connect with Enterprise SSO\n </Button>\n </div>\n </div>\n </div>\n );\n },\n};\n"],"names":["argosScreenshot","Avatar","Button","Header","Text","meta","title","parameters","layout","Default","play","ctx","render","div","className","style","backgroundImage","backgroundSize","backgroundPosition","content","size","radius","logoName","variant","iconLeft"],"mappings":";AAAA,SAAQA,eAAe,QAAO,6BAA6B;AAE3D,SAAQC,MAAM,QAAO,oBAAoB;AACzC,SAAQC,MAAM,QAAO,oBAAoB;AACzC,SAAQC,MAAM,EAAEC,IAAI,QAAO,wBAAwB;AAEnD,MAAMC,OAAO;IACXC,OAAO;IACPC,YAAY;QACVC,QAAQ;IACV;AACF;AAEA,eAAeH,KAAK;AAGpB,OAAO,MAAMI,UAAiB;IAC5BC,MAAM,OAAOC;QACX,MAAMX,gBAAgBW,KAAK;IAC7B;IACAC,QAAQ;QACN,qBACE,MAACC;YAAIC,WAAU;;8BAEb,KAACD;oBAAIC,WAAU;8BACb,cAAA,KAACD;wBACCC,WAAU;wBACVC,OAAO;4BACLC,iBAAiB,CAAC,mEAAmE,CAAC;4BACtFC,gBAAgB;4BAChBC,oBAAoB;wBACtB;;;8BAKJ,MAACL;oBAAIC,WAAU;;sCAEb,MAACD;4BAAIC,WAAU;;8CACb,KAACb;oCAAOkB,SAAQ;oCAAOC,MAAK;oCAAKC,QAAO;oCAAUC,UAAS;;8CAC3D,MAACT;oCAAIC,WAAU;;sDACb,KAACX;4CACCoB,SAAQ;4CACRT,WAAU;sDACX;;sDAGD,KAACV;4CACCgB,MAAK;4CACLN,WAAU;sDACX;;;;;;sCAOL,MAACD;4BAAIC,WAAU;;8CACb,KAACZ;oCAAOqB,SAAQ;oCAAUH,MAAK;oCAAKI,UAAS;oCAASV,WAAU;8CAAS;;8CAGzE,KAACZ;oCAAOqB,SAAQ;oCAAUH,MAAK;oCAAKI,UAAS;oCAAYV,WAAU;8CAAS;;8CAG5E,KAACZ;oCAAOqB,SAAQ;oCAAcH,MAAK;oCAAKN,WAAU;8CAAS;;;;;;;;IAOrE;AACF,EAAE"}
package/index.css CHANGED
@@ -4,9 +4,10 @@
4
4
  @import "tailwindcss";
5
5
  @import "tw-animate-css";
6
6
 
7
- @theme {
7
+ /* Commented because it breaks default Tailwind theme with breakpoints */
8
+ /* @theme {
8
9
  --\*: initial;
9
- }
10
+ } */
10
11
 
11
12
  @custom-variant hover (&:hover);
12
13
 
@@ -197,14 +198,17 @@
197
198
  --background-button-transparent-default: var(--color-alpha-white-0);
198
199
  --background-button-neutral-hover: var(--color-neutral-100);
199
200
  --background-button-danger-hover: var(--color-red-700);
201
+ --background-button-success-hover: var(--color-green-700);
200
202
  --background-button-neutral-pressed: var(--color-neutral-200);
201
203
  --background-button-neutral-default: var(--color-neutral-0);
202
- --background-button-transparent-hover: var(--color-alpha-white-6);
204
+ --background-button-transparent-hover: var(--color-alpha-black-6);
203
205
  --background-button-inverted-pressed: var(--color-neutral-600);
204
- --background-button-transparent-pressed: var(--color-alpha-white-10);
206
+ --background-button-transparent-pressed: var(--color-alpha-black-10);
205
207
  --background-button-danger-pressed: var(--color-red-800);
208
+ --background-button-success-pressed: var(--color-green-800);
206
209
  --background-button-inverted-hover: var(--color-neutral-700);
207
210
  --background-button-danger-default: var(--color-red-600);
211
+ --background-button-success-default: var(--color-green-600);
208
212
  --background-button-inverted-default: var(--color-neutral-800);
209
213
 
210
214
  /* Accent Background */
@@ -267,7 +271,7 @@
267
271
  --tag-error-icon: var(--color-red-500);
268
272
  --tag-error-text: var(--color-red-800);
269
273
  --tag-warning-icon: var(--color-orange-400);
270
- --tag-warning-text: var(--color-orange-200);
274
+ --tag-warning-text: var(--color-orange-800);
271
275
  --tag-success-bg: var(--color-green-100);
272
276
  --tag-success-border: var(--color-green-200);
273
277
  --tag-success-text: var(--color-green-800);
@@ -307,12 +311,11 @@
307
311
  var(--color-neutral-600), 0 0 0 2px var(--color-alpha-white-88), 0 0 0 4px
308
312
  var(--color-primary-500);
309
313
  --shadow-button-neutral:
310
- 0 -1px 0 0 var(--color-alpha-white-6), 0 0 0 1px var(--color-alpha-white-6), 0 0 0 1px
311
- var(--color-neutral-800), 0 0 1px 1.5px var(--color-alpha-black-24), 0 2px 2px 0
312
- var(--color-alpha-black-24);
314
+ 0 0 0 1px var(--color-alpha-black-8), 0 2px 4px 0 var(--color-alpha-black-8), 0 4px 8px 0
315
+ var(--color-alpha-black-8);
313
316
  --shadow-button-neutral-focus:
314
317
  0 -1px 0 0 var(--color-alpha-white-6), 0 0 0 1px var(--color-alpha-white-6), 0 0 0 1px
315
- var(--color-neutral-800), 0 0 0 2px var(--color-alpha-white-88), 0 0 0 4px
318
+ var(--color-alpha-black-8), 0 0 0 2px var(--color-alpha-white-88), 0 0 0 4px
316
319
  var(--color-primary-500);
317
320
  --shadow-button-danger:
318
321
  0 -1px 0 0 var(--color-alpha-white-16), 0 0 0 1px var(--color-alpha-white-12), 0 0 0 1px
@@ -321,6 +324,49 @@
321
324
  --shadow-button-danger-focus:
322
325
  0 -1px 0 0 var(--color-alpha-white-16), 0 0 0 1px var(--color-alpha-white-12), 0 0 0 1px
323
326
  var(--color-red-700), 0 0 0 2px var(--color-alpha-white-88), 0 0 0 4px var(--color-primary-500);
327
+ --shadow-button-success:
328
+ 0 -1px 0 0 var(--color-alpha-white-16), 0 0 0 1px var(--color-alpha-white-12), 0 0 0 1px
329
+ var(--color-green-700), 0 0 1px 1.5px var(--color-alpha-black-24), 0 2px 2px 0
330
+ var(--color-alpha-black-24);
331
+ --shadow-button-success-focus:
332
+ 0 -1px 0 0 var(--color-alpha-white-16), 0 0 0 1px var(--color-alpha-white-12), 0 0 0 1px
333
+ var(--color-green-700), 0 0 0 2px var(--color-alpha-white-88), 0 0 0 4px
334
+ var(--color-primary-500);
335
+
336
+ /* Checkbox */
337
+ /* Checkbox - Unchecked States */
338
+ --checkbox-unchecked-bg: var(--background-components-base);
339
+ --checkbox-unchecked-bg-hover: var(--background-components-hover);
340
+ --checkbox-unchecked-border: var(--color-alpha-black-8);
341
+ --checkbox-unchecked-shadow:
342
+ 0px 1px 2px 0px var(--color-alpha-black-12), 0px 0px 0px 1px var(--color-alpha-black-8);
343
+ --checkbox-unchecked-focus-shadow:
344
+ 0px 1px 2px 0px rgba(30, 58, 138, 0.5), 0px 0px 0px 1px #ff4b00, 0px 0px 0px 2px
345
+ var(--color-neutral-0), 0px 0px 0px 4px rgba(255, 75, 0, 0.6);
346
+
347
+ /* Checkbox - Checked States */
348
+ --checkbox-checked-bg: var(--foreground-highlight-interactive);
349
+ --checkbox-checked-bg-hover: var(--foreground-highlight-interactive-hover);
350
+ --checkbox-checked-border: rgba(255, 75, 0, 0.69);
351
+ --checkbox-checked-shadow:
352
+ 0px 1px 2px 0px rgba(30, 58, 138, 0.5), 0px 0px 0px 1px rgba(255, 75, 0, 0.69);
353
+ --checkbox-checked-focus-shadow:
354
+ 0px 1px 2px 0px rgba(30, 58, 138, 0.5), 0px 0px 0px 1px #ff4b00, 0px 0px 0px 2px
355
+ var(--color-neutral-0), 0px 0px 0px 4px rgba(255, 75, 0, 0.6);
356
+
357
+ /* Checkbox - Indeterminate States */
358
+ --checkbox-indeterminate-bg: var(--foreground-highlight-interactive);
359
+ --checkbox-indeterminate-bg-hover: var(--foreground-highlight-interactive-hover);
360
+ --checkbox-indeterminate-border: rgba(255, 75, 0, 0.69);
361
+ --checkbox-indeterminate-shadow:
362
+ 0px 1px 2px 0px rgba(30, 58, 138, 0.5), 0px 0px 0px 1px rgba(255, 75, 0, 0.69);
363
+ --checkbox-indeterminate-focus-shadow:
364
+ 0px 0px 0px 1px var(--color-neutral-0), 0px 0px 0px 3px rgba(255, 75, 0, 0.6);
365
+ --shadow-tooltip:
366
+ 0 0 0 1px var(--color-alpha-black-8), 0 2px 4px 0 var(--color-alpha-black-8), 0 4px 8px 0
367
+ var(--color-alpha-black-8);
368
+ --shadow-separator-inset:
369
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.15), inset 0 -1px 0 0 rgba(0, 0, 0, 0.06);
324
370
  }
325
371
 
326
372
  .dark {
@@ -357,14 +403,17 @@
357
403
  --background-button-transparent-default: var(--color-alpha-white-0);
358
404
  --background-button-neutral-hover: var(--color-alpha-white-8);
359
405
  --background-button-danger-hover: var(--color-red-700);
406
+ --background-button-success-hover: var(--color-green-700);
360
407
  --background-button-neutral-pressed: var(--color-alpha-white-12);
361
408
  --background-button-neutral-default: var(--color-alpha-white-4);
362
409
  --background-button-transparent-hover: var(--color-alpha-white-8);
363
410
  --background-button-inverted-pressed: var(--color-neutral-400);
364
411
  --background-button-transparent-pressed: var(--color-alpha-white-12);
365
412
  --background-button-danger-pressed: var(--color-red-600);
413
+ --background-button-success-pressed: var(--color-green-600);
366
414
  --background-button-inverted-hover: var(--color-neutral-500);
367
415
  --background-button-danger-default: var(--color-red-800);
416
+ --background-button-success-default: var(--color-green-800);
368
417
  --background-button-inverted-default: var(--color-neutral-600);
369
418
 
370
419
  /* Accent Background */
@@ -466,9 +515,8 @@
466
515
  0 -1px 0 0 var(--color-alpha-white-12), 0 0 0 1px var(--color-alpha-white-12), 0 0 0 1px
467
516
  var(--color-neutral-600), 0 0 0 2px var(--color-neutral-950), 0 0 0 4px var(--color-primary-500);
468
517
  --shadow-button-neutral:
469
- 0 -1px 0 0 var(--color-alpha-white-6), 0 0 0 1px var(--color-alpha-white-6), 0 0 0 1px
470
- var(--color-neutral-800), 0 0 1px 1.5px var(--color-alpha-black-24), 0 2px 2px 0
471
- var(--color-alpha-black-24);
518
+ 0 -1px 0 0 var(--color-alpha-white-4), 0 2px 4px 0 var(--color-alpha-black-40), 0 0 0 1px
519
+ var(--color-alpha-white-10), 0 4px 8px 0 var(--color-alpha-black-40);
472
520
  --shadow-button-neutral-focus:
473
521
  0 -1px 0 0 var(--color-alpha-white-6), 0 0 0 1px var(--color-alpha-white-6), 0 0 0 1px
474
522
  var(--color-neutral-800), 0 0 0 2px var(--color-neutral-950), 0 0 0 4px var(--color-primary-500);
@@ -479,6 +527,52 @@
479
527
  --shadow-button-danger-focus:
480
528
  0 -1px 0 0 var(--color-alpha-white-16), 0 0 0 1px var(--color-alpha-white-12), 0 0 0 1px
481
529
  var(--color-red-700), 0 0 0 2px var(--color-neutral-950), 0 0 0 4px var(--color-primary-500);
530
+ --shadow-button-success:
531
+ 0 -1px 0 0 var(--color-alpha-white-16), 0 0 0 1px var(--color-alpha-white-12), 0 0 0 1px
532
+ var(--color-green-700), 0 0 1px 1.5px var(--color-alpha-black-24), 0 2px 2px 0
533
+ var(--color-alpha-black-24);
534
+ --shadow-button-success-focus:
535
+ 0 -1px 0 0 var(--color-alpha-white-16), 0 0 0 1px var(--color-alpha-white-12), 0 0 0 1px
536
+ var(--color-green-700), 0 0 0 2px var(--color-neutral-950), 0 0 0 4px var(--color-primary-500);
537
+
538
+ /* Checkbox */
539
+ /* Checkbox - Unchecked States */
540
+ --checkbox-unchecked-bg: var(--background-components-base);
541
+ --checkbox-unchecked-bg-hover: var(--background-components-hover);
542
+ --checkbox-unchecked-border: var(--color-alpha-white-10);
543
+ --checkbox-unchecked-shadow:
544
+ 0px 1px 2px 0px var(--color-alpha-black-12), 0px 0px 0px 1px var(--color-alpha-white-10);
545
+ --checkbox-unchecked-focus-shadow:
546
+ 0px 1px 2px 0px rgba(30, 58, 138, 0.5), 0px 0px 0px 1px #ff4b00, 0px 0px 0px 2px var(
547
+ --color-alpha-black-80
548
+ ),
549
+ 0px 0px 0px 4px rgba(255, 75, 0, 0.6);
550
+
551
+ /* Checkbox - Checked States */
552
+ --checkbox-checked-bg: var(--foreground-highlight-interactive);
553
+ --checkbox-checked-bg-hover: var(--foreground-highlight-interactive-hover);
554
+ --checkbox-checked-border: rgba(255, 75, 0, 0.69);
555
+ --checkbox-checked-shadow:
556
+ 0px 1px 2px 0px rgba(30, 58, 138, 0.5), 0px 0px 0px 1px rgba(255, 75, 0, 0.69);
557
+ --checkbox-checked-focus-shadow:
558
+ 0px 1px 2px 0px rgba(30, 58, 138, 0.5), 0px 0px 0px 1px #ff4b00, 0px 0px 0px 2px var(
559
+ --color-alpha-black-80
560
+ ),
561
+ 0px 0px 0px 4px rgba(255, 75, 0, 0.6);
562
+
563
+ /* Checkbox - Indeterminate States */
564
+ --checkbox-indeterminate-bg: var(--foreground-highlight-interactive);
565
+ --checkbox-indeterminate-bg-hover: var(--foreground-highlight-interactive-hover);
566
+ --checkbox-indeterminate-border: rgba(255, 75, 0, 0.69);
567
+ --checkbox-indeterminate-shadow:
568
+ 0px 1px 2px 0px rgba(30, 58, 138, 0.5), 0px 0px 0px 1px rgba(255, 75, 0, 0.69);
569
+ --checkbox-indeterminate-focus-shadow:
570
+ 0px 0px 0px 1px var(--color-alpha-black-80), 0px 0px 0px 3px rgba(255, 75, 0, 0.6);
571
+ --shadow-tooltip:
572
+ 0 -1px 0 0 var(--color-alpha-white-4), 0 2px 4px 0 var(--color-alpha-black-40), 0 0 0 1px
573
+ var(--color-alpha-white-10), 0 4px 8px 0 var(--color-alpha-black-40);
574
+ --shadow-separator-inset:
575
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.06), inset 0 -1px 0 0 rgba(0, 0, 0, 0.1);
482
576
  }
483
577
 
484
578
  @theme inline {
@@ -654,14 +748,17 @@
654
748
  --color-background-button-transparent-default: var(--background-button-transparent-default);
655
749
  --color-background-button-neutral-hover: var(--background-button-neutral-hover);
656
750
  --color-background-button-danger-hover: var(--background-button-danger-hover);
751
+ --color-background-button-success-hover: var(--background-button-success-hover);
657
752
  --color-background-button-neutral-pressed: var(--background-button-neutral-pressed);
658
753
  --color-background-button-neutral-default: var(--background-button-neutral-default);
659
754
  --color-background-button-transparent-hover: var(--background-button-transparent-hover);
660
755
  --color-background-button-inverted-pressed: var(--background-button-inverted-pressed);
661
756
  --color-background-button-transparent-pressed: var(--background-button-transparent-pressed);
662
757
  --color-background-button-danger-pressed: var(--background-button-danger-pressed);
758
+ --color-background-button-success-pressed: var(--background-button-success-pressed);
663
759
  --color-background-button-inverted-hover: var(--background-button-inverted-hover);
664
760
  --color-background-button-danger-default: var(--background-button-danger-default);
761
+ --color-background-button-success-default: var(--background-button-success-default);
665
762
  --color-background-button-inverted-default: var(--background-button-inverted-default);
666
763
 
667
764
  /* Theme tokens - accent background */
@@ -802,6 +899,27 @@
802
899
  --shadow-button-neutral-focus: var(--shadow-button-neutral-focus);
803
900
  --shadow-button-danger: var(--shadow-button-danger);
804
901
  --shadow-button-danger-focus: var(--shadow-button-danger-focus);
902
+ --shadow-button-success: var(--shadow-button-success);
903
+ --shadow-button-success-focus: var(--shadow-button-success-focus);
904
+
905
+ /* Checkbox */
906
+ --color-checkbox-unchecked-bg: var(--checkbox-unchecked-bg);
907
+ --color-checkbox-unchecked-bg-hover: var(--checkbox-unchecked-bg-hover);
908
+ --color-checkbox-unchecked-border: var(--checkbox-unchecked-border);
909
+ --shadow-checkbox-unchecked: var(--checkbox-unchecked-shadow);
910
+ --shadow-checkbox-unchecked-focus: var(--checkbox-unchecked-focus-shadow);
911
+ --color-checkbox-checked-bg: var(--checkbox-checked-bg);
912
+ --color-checkbox-checked-bg-hover: var(--checkbox-checked-bg-hover);
913
+ --color-checkbox-checked-border: var(--checkbox-checked-border);
914
+ --shadow-checkbox-checked: var(--checkbox-checked-shadow);
915
+ --shadow-checkbox-checked-focus: var(--checkbox-checked-focus-shadow);
916
+ --color-checkbox-indeterminate-bg: var(--checkbox-indeterminate-bg);
917
+ --color-checkbox-indeterminate-bg-hover: var(--checkbox-indeterminate-bg-hover);
918
+ --color-checkbox-indeterminate-border: var(--checkbox-indeterminate-border);
919
+ --shadow-checkbox-indeterminate: var(--checkbox-indeterminate-shadow);
920
+ --shadow-checkbox-indeterminate-focus: var(--checkbox-indeterminate-focus-shadow);
921
+ --shadow-tooltip: var(--shadow-tooltip);
922
+ --shadow-separator-inset: var(--shadow-separator-inset);
805
923
  }
806
924
 
807
925
  @layer base {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shipfox/react-ui",
3
3
  "license": "MIT",
4
- "version": "0.3.0",
4
+ "version": "0.5.0",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -22,12 +22,15 @@
22
22
  "@radix-ui/react-slot": "^1.2.3",
23
23
  "@radix-ui/react-tabs": "^1.1.13",
24
24
  "@radix-ui/react-tooltip": "^1.2.8",
25
+ "@radix-ui/react-use-controllable-state": "^1.2.2",
25
26
  "@remixicon/react": "^4.6.0",
26
27
  "class-variance-authority": "^0.7.1",
27
28
  "clsx": "^2.1.1",
28
- "lucide-react": "^0.541.0",
29
+ "framer-motion": "^12.23.24",
30
+ "lucide-react": "^0.553.0",
29
31
  "react-day-picker": "^9.5.1",
30
32
  "recharts": "^3.1.0",
33
+ "shiki": "^3.15.0",
31
34
  "sonner": "^2.0.7",
32
35
  "tailwind-merge": "^3.2.0"
33
36
  },
@@ -40,6 +43,9 @@
40
43
  "react-hook-form": "^7.52.1"
41
44
  },
42
45
  "devDependencies": {
46
+ "@argos-ci/cli": "^3.2.1",
47
+ "@argos-ci/storybook": "^5.2.1",
48
+ "@storybook/addon-vitest": "^9.1.16",
43
49
  "@storybook/builder-vite": "^9.1.8",
44
50
  "@storybook/react": "^9.1.8",
45
51
  "@storybook/react-vite": "^9.1.8",
@@ -56,7 +62,11 @@
56
62
  "storybook-addon-pseudo-states": "^9.1.8",
57
63
  "tailwindcss": "^4.1.13",
58
64
  "tw-animate-css": "^1.4.0",
59
- "@shipfox/biome": "1.3.0",
65
+ "vitest": "^4.0.8",
66
+ "playwright": "^1.56.1",
67
+ "@vitest/browser-playwright": "^4.0.8",
68
+ "@vitest/coverage-v8": "^4.0.8",
69
+ "@shipfox/biome": "1.3.1",
60
70
  "@shipfox/swc": "1.2.1",
61
71
  "@shipfox/ts-config": "1.3.5",
62
72
  "@shipfox/typescript": "1.1.2",
@@ -68,6 +78,7 @@
68
78
  "check": "biome-check",
69
79
  "storybook": "storybook dev",
70
80
  "storybook:build": "storybook build -o storybook-static",
81
+ "argos": "argos upload --build-name react-ui storybook-static",
71
82
  "test": "vitest-run",
72
83
  "type": "tsc-emit"
73
84
  }