@shipfox/react-ui 0.3.0 → 0.4.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 (290) hide show
  1. package/.storybook/preview.tsx +1 -1
  2. package/.turbo/turbo-build.log +2 -2
  3. package/.turbo/turbo-check.log +2 -2
  4. package/.turbo/turbo-type.log +1 -1
  5. package/CHANGELOG.md +11 -0
  6. package/dist/components/alert/alert.d.ts +2 -2
  7. package/dist/components/alert/alert.js +3 -3
  8. package/dist/components/alert/alert.js.map +1 -1
  9. package/dist/components/alert/alert.stories.js +2 -2
  10. package/dist/components/alert/alert.stories.js.map +1 -1
  11. package/dist/components/avatar/avatar-group.js +3 -3
  12. package/dist/components/avatar/avatar-group.js.map +1 -1
  13. package/dist/components/avatar/avatar.d.ts +4 -1
  14. package/dist/components/avatar/avatar.d.ts.map +1 -1
  15. package/dist/components/avatar/avatar.js +7 -8
  16. package/dist/components/avatar/avatar.js.map +1 -1
  17. package/dist/components/avatar/avatar.stories.js +15 -3
  18. package/dist/components/avatar/avatar.stories.js.map +1 -1
  19. package/dist/components/badge/badge.d.ts +48 -0
  20. package/dist/components/badge/badge.d.ts.map +1 -0
  21. package/dist/components/badge/badge.js +72 -0
  22. package/dist/components/badge/badge.js.map +1 -0
  23. package/dist/components/badge/badge.stories.js +802 -0
  24. package/dist/components/badge/badge.stories.js.map +1 -0
  25. package/dist/components/badge/icon-badge.d.ts +9 -0
  26. package/dist/components/badge/icon-badge.d.ts.map +1 -0
  27. package/dist/components/badge/icon-badge.js +32 -0
  28. package/dist/components/badge/icon-badge.js.map +1 -0
  29. package/dist/components/badge/index.d.ts +5 -0
  30. package/dist/components/badge/index.d.ts.map +1 -0
  31. package/dist/components/badge/index.js +6 -0
  32. package/dist/components/badge/index.js.map +1 -0
  33. package/dist/components/badge/status-badge.d.ts +9 -0
  34. package/dist/components/badge/status-badge.d.ts.map +1 -0
  35. package/dist/components/badge/status-badge.js +29 -0
  36. package/dist/components/badge/status-badge.js.map +1 -0
  37. package/dist/components/badge/user-badge.d.ts +8 -0
  38. package/dist/components/badge/user-badge.d.ts.map +1 -0
  39. package/dist/components/badge/user-badge.js +24 -0
  40. package/dist/components/badge/user-badge.js.map +1 -0
  41. package/dist/components/{button.d.ts → button/button.d.ts} +1 -1
  42. package/dist/components/button/button.d.ts.map +1 -0
  43. package/dist/components/{button.js → button/button.js} +2 -2
  44. package/dist/components/button/button.js.map +1 -0
  45. package/dist/components/{button.stories.js → button/button.stories.js} +1 -1
  46. package/dist/components/button/button.stories.js.map +1 -0
  47. package/dist/components/button/index.d.ts +2 -0
  48. package/dist/components/button/index.d.ts.map +1 -0
  49. package/dist/components/button/index.js +3 -0
  50. package/dist/components/button/index.js.map +1 -0
  51. package/dist/components/checkbox/checkbox-label.d.ts +14 -0
  52. package/dist/components/checkbox/checkbox-label.d.ts.map +1 -0
  53. package/dist/components/checkbox/checkbox-label.js +82 -0
  54. package/dist/components/checkbox/checkbox-label.js.map +1 -0
  55. package/dist/components/checkbox/checkbox-links.d.ts +18 -0
  56. package/dist/components/checkbox/checkbox-links.d.ts.map +1 -0
  57. package/dist/components/checkbox/checkbox-links.js +58 -0
  58. package/dist/components/checkbox/checkbox-links.js.map +1 -0
  59. package/dist/components/checkbox/checkbox.d.ts +9 -0
  60. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  61. package/dist/components/checkbox/checkbox.js +49 -0
  62. package/dist/components/checkbox/checkbox.js.map +1 -0
  63. package/dist/components/checkbox/checkbox.stories.js +566 -0
  64. package/dist/components/checkbox/checkbox.stories.js.map +1 -0
  65. package/dist/components/checkbox/index.d.ts +4 -0
  66. package/dist/components/checkbox/index.d.ts.map +1 -0
  67. package/dist/components/checkbox/index.js +5 -0
  68. package/dist/components/checkbox/index.js.map +1 -0
  69. package/dist/components/code-block/code-block-footer.d.ts +26 -0
  70. package/dist/components/code-block/code-block-footer.d.ts.map +1 -0
  71. package/dist/components/code-block/code-block-footer.js +86 -0
  72. package/dist/components/code-block/code-block-footer.js.map +1 -0
  73. package/dist/components/code-block/code-block.d.ts +50 -0
  74. package/dist/components/code-block/code-block.d.ts.map +1 -0
  75. package/dist/components/code-block/code-block.js +142 -0
  76. package/dist/components/code-block/code-block.js.map +1 -0
  77. package/dist/components/code-block/code-block.stories.js +341 -0
  78. package/dist/components/code-block/code-block.stories.js.map +1 -0
  79. package/dist/components/code-block/code-content.d.ts +11 -0
  80. package/dist/components/code-block/code-content.d.ts.map +1 -0
  81. package/dist/components/code-block/code-content.js +29 -0
  82. package/dist/components/code-block/code-content.js.map +1 -0
  83. package/dist/components/code-block/code-copy-button.d.ts +11 -0
  84. package/dist/components/code-block/code-copy-button.d.ts.map +1 -0
  85. package/dist/components/code-block/code-copy-button.js +49 -0
  86. package/dist/components/code-block/code-copy-button.js.map +1 -0
  87. package/dist/components/code-block/code-tabs.d.ts +16 -0
  88. package/dist/components/code-block/code-tabs.d.ts.map +1 -0
  89. package/dist/components/code-block/code-tabs.js +98 -0
  90. package/dist/components/code-block/code-tabs.js.map +1 -0
  91. package/dist/components/code-block/index.d.ts +4 -0
  92. package/dist/components/code-block/index.d.ts.map +1 -0
  93. package/dist/components/code-block/index.js +5 -0
  94. package/dist/components/code-block/index.js.map +1 -0
  95. package/dist/components/dynamic-item/dynamic-item.d.ts +13 -0
  96. package/dist/components/dynamic-item/dynamic-item.d.ts.map +1 -0
  97. package/dist/components/dynamic-item/dynamic-item.js +43 -0
  98. package/dist/components/dynamic-item/dynamic-item.js.map +1 -0
  99. package/dist/components/dynamic-item/dynamic-item.stories.js +375 -0
  100. package/dist/components/dynamic-item/dynamic-item.stories.js.map +1 -0
  101. package/dist/components/dynamic-item/index.d.ts +2 -0
  102. package/dist/components/dynamic-item/index.d.ts.map +1 -0
  103. package/dist/components/dynamic-item/index.js +3 -0
  104. package/dist/components/dynamic-item/index.js.map +1 -0
  105. package/dist/components/icon/custom/index.d.ts +2 -0
  106. package/dist/components/icon/custom/index.d.ts.map +1 -1
  107. package/dist/components/icon/custom/index.js +2 -0
  108. package/dist/components/icon/custom/index.js.map +1 -1
  109. package/dist/components/icon/custom/slack-logo.d.ts +6 -0
  110. package/dist/components/icon/custom/slack-logo.d.ts.map +1 -0
  111. package/dist/components/icon/custom/slack-logo.js +34 -0
  112. package/dist/components/icon/custom/slack-logo.js.map +1 -0
  113. package/dist/components/icon/custom/stripe-logo.d.ts +8 -0
  114. package/dist/components/icon/custom/stripe-logo.d.ts.map +1 -0
  115. package/dist/components/icon/custom/stripe-logo.js +24 -0
  116. package/dist/components/icon/custom/stripe-logo.js.map +1 -0
  117. package/dist/components/icon/icon.d.ts +11 -2
  118. package/dist/components/icon/icon.d.ts.map +1 -1
  119. package/dist/components/icon/icon.js +12 -3
  120. package/dist/components/icon/icon.js.map +1 -1
  121. package/dist/components/icon/icon.stories.js +6 -3
  122. package/dist/components/icon/icon.stories.js.map +1 -1
  123. package/dist/components/index.d.ts +9 -1
  124. package/dist/components/index.d.ts.map +1 -1
  125. package/dist/components/index.js +10 -2
  126. package/dist/components/index.js.map +1 -1
  127. package/dist/components/inline-tips/inline-tips.d.ts +1 -1
  128. package/dist/components/inline-tips/inline-tips.d.ts.map +1 -1
  129. package/dist/components/inline-tips/inline-tips.js +1 -1
  130. package/dist/components/inline-tips/inline-tips.js.map +1 -1
  131. package/dist/components/inline-tips/inline-tips.stories.js +5 -5
  132. package/dist/components/inline-tips/inline-tips.stories.js.map +1 -1
  133. package/dist/components/input/index.d.ts +2 -0
  134. package/dist/components/input/index.d.ts.map +1 -0
  135. package/dist/components/input/index.js +3 -0
  136. package/dist/components/input/index.js.map +1 -0
  137. package/dist/components/input/input.d.ts.map +1 -0
  138. package/dist/components/{input.js → input/input.js} +2 -2
  139. package/dist/components/input/input.js.map +1 -0
  140. package/dist/components/{input.stories.js → input/input.stories.js} +1 -1
  141. package/dist/components/input/input.stories.js.map +1 -0
  142. package/dist/components/item/index.d.ts +2 -0
  143. package/dist/components/item/index.d.ts.map +1 -0
  144. package/dist/components/item/index.js +3 -0
  145. package/dist/components/item/index.js.map +1 -0
  146. package/dist/components/item/item.d.ts +32 -0
  147. package/dist/components/item/item.d.ts.map +1 -0
  148. package/dist/components/item/item.js +120 -0
  149. package/dist/components/item/item.js.map +1 -0
  150. package/dist/components/item/item.stories.js +232 -0
  151. package/dist/components/item/item.stories.js.map +1 -0
  152. package/dist/components/label/index.d.ts +2 -0
  153. package/dist/components/label/index.d.ts.map +1 -0
  154. package/dist/components/label/index.js +3 -0
  155. package/dist/components/label/index.js.map +1 -0
  156. package/dist/components/label/label.d.ts +7 -0
  157. package/dist/components/label/label.d.ts.map +1 -0
  158. package/dist/components/label/label.js +13 -0
  159. package/dist/components/label/label.js.map +1 -0
  160. package/dist/components/label/label.stories.js +105 -0
  161. package/dist/components/label/label.stories.js.map +1 -0
  162. package/dist/components/moving-border/moving-border.d.ts +9 -0
  163. package/dist/components/moving-border/moving-border.d.ts.map +1 -0
  164. package/dist/components/moving-border/moving-border.js +54 -0
  165. package/dist/components/moving-border/moving-border.js.map +1 -0
  166. package/dist/components/textarea/textarea.js +1 -1
  167. package/dist/components/textarea/textarea.js.map +1 -1
  168. package/dist/components/theme/index.d.ts +2 -0
  169. package/dist/components/theme/index.d.ts.map +1 -0
  170. package/dist/components/theme/index.js +3 -0
  171. package/dist/components/theme/index.js.map +1 -0
  172. package/dist/components/{theme-provider.d.ts → theme/theme-provider.d.ts} +1 -1
  173. package/dist/components/theme/theme-provider.d.ts.map +1 -0
  174. package/dist/components/{theme-provider.js → theme/theme-provider.js} +1 -1
  175. package/dist/components/theme/theme-provider.js.map +1 -0
  176. package/dist/components/toast/index.d.ts +3 -0
  177. package/dist/components/toast/index.d.ts.map +1 -0
  178. package/dist/components/toast/index.js +4 -0
  179. package/dist/components/toast/index.js.map +1 -0
  180. package/dist/components/toast/toast-custom.d.ts +19 -0
  181. package/dist/components/toast/toast-custom.d.ts.map +1 -0
  182. package/dist/components/toast/toast-custom.js +134 -0
  183. package/dist/components/toast/toast-custom.js.map +1 -0
  184. package/dist/components/toast/toast.d.ts +5 -0
  185. package/dist/components/toast/toast.d.ts.map +1 -0
  186. package/dist/components/toast/toast.js +40 -0
  187. package/dist/components/toast/toast.js.map +1 -0
  188. package/dist/components/toast/toast.stories.js +326 -0
  189. package/dist/components/toast/toast.stories.js.map +1 -0
  190. package/dist/components/tooltip/index.d.ts +2 -0
  191. package/dist/components/tooltip/index.d.ts.map +1 -0
  192. package/dist/components/tooltip/index.js +3 -0
  193. package/dist/components/tooltip/index.js.map +1 -0
  194. package/dist/components/tooltip/tooltip.d.ts +18 -5
  195. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  196. package/dist/components/tooltip/tooltip.js +63 -3
  197. package/dist/components/tooltip/tooltip.js.map +1 -1
  198. package/dist/components/tooltip/tooltip.stories.js +560 -0
  199. package/dist/components/tooltip/tooltip.stories.js.map +1 -0
  200. package/dist/hooks/index.d.ts +3 -0
  201. package/dist/hooks/index.d.ts.map +1 -1
  202. package/dist/hooks/index.js +3 -0
  203. package/dist/hooks/index.js.map +1 -1
  204. package/dist/hooks/useResolvedTheme.d.ts +2 -0
  205. package/dist/hooks/useResolvedTheme.d.ts.map +1 -0
  206. package/dist/hooks/useResolvedTheme.js +24 -0
  207. package/dist/hooks/useResolvedTheme.js.map +1 -0
  208. package/dist/hooks/useShikiHighlight.d.ts +28 -0
  209. package/dist/hooks/useShikiHighlight.d.ts.map +1 -0
  210. package/dist/hooks/useShikiHighlight.js +106 -0
  211. package/dist/hooks/useShikiHighlight.js.map +1 -0
  212. package/dist/hooks/useShikiStyleInjection.d.ts +2 -0
  213. package/dist/hooks/useShikiStyleInjection.d.ts.map +1 -0
  214. package/dist/hooks/useShikiStyleInjection.js +34 -0
  215. package/dist/hooks/useShikiStyleInjection.js.map +1 -0
  216. package/index.css +101 -9
  217. package/package.json +6 -3
  218. package/src/assets/illustration-1.svg +92 -0
  219. package/src/assets/illustration-2.svg +14 -0
  220. package/src/assets/illustration-gradient.svg +7049 -0
  221. package/src/components/alert/alert.stories.tsx +2 -2
  222. package/src/components/alert/alert.tsx +3 -3
  223. package/src/components/avatar/avatar-group.tsx +3 -3
  224. package/src/components/avatar/avatar.stories.tsx +9 -2
  225. package/src/components/avatar/avatar.tsx +10 -6
  226. package/src/components/badge/badge.stories.tsx +468 -0
  227. package/src/components/badge/badge.tsx +147 -0
  228. package/src/components/badge/icon-badge.tsx +43 -0
  229. package/src/components/badge/index.ts +4 -0
  230. package/src/components/badge/status-badge.tsx +43 -0
  231. package/src/components/badge/user-badge.tsx +34 -0
  232. package/src/components/{button.tsx → button/button.tsx} +1 -1
  233. package/src/components/button/index.ts +1 -0
  234. package/src/components/checkbox/checkbox-label.tsx +125 -0
  235. package/src/components/checkbox/checkbox-links.tsx +90 -0
  236. package/src/components/checkbox/checkbox.stories.tsx +375 -0
  237. package/src/components/checkbox/checkbox.tsx +71 -0
  238. package/src/components/checkbox/index.ts +3 -0
  239. package/src/components/code-block/code-block-footer.tsx +173 -0
  240. package/src/components/code-block/code-block.stories.tsx +323 -0
  241. package/src/components/code-block/code-block.tsx +283 -0
  242. package/src/components/code-block/code-content.tsx +60 -0
  243. package/src/components/code-block/code-copy-button.tsx +73 -0
  244. package/src/components/code-block/code-tabs.tsx +170 -0
  245. package/src/components/code-block/index.ts +3 -0
  246. package/src/components/dynamic-item/dynamic-item.stories.tsx +261 -0
  247. package/src/components/dynamic-item/dynamic-item.tsx +68 -0
  248. package/src/components/dynamic-item/index.ts +1 -0
  249. package/src/components/icon/custom/index.ts +2 -0
  250. package/src/components/icon/custom/slack-logo.tsx +35 -0
  251. package/src/components/icon/custom/stripe-logo.tsx +27 -0
  252. package/src/components/icon/icon.stories.tsx +3 -1
  253. package/src/components/icon/icon.tsx +19 -1
  254. package/src/components/index.ts +9 -1
  255. package/src/components/inline-tips/inline-tips.stories.tsx +3 -3
  256. package/src/components/inline-tips/inline-tips.tsx +2 -2
  257. package/src/components/input/index.ts +1 -0
  258. package/src/components/{input.tsx → input/input.tsx} +1 -1
  259. package/src/components/item/index.ts +1 -0
  260. package/src/components/item/item.stories.tsx +150 -0
  261. package/src/components/item/item.tsx +182 -0
  262. package/src/components/label/index.ts +1 -0
  263. package/src/components/label/label.stories.tsx +67 -0
  264. package/src/components/label/label.tsx +15 -0
  265. package/src/components/moving-border/moving-border.tsx +67 -0
  266. package/src/components/textarea/textarea.tsx +1 -1
  267. package/src/components/theme/index.ts +1 -0
  268. package/src/components/toast/index.ts +2 -0
  269. package/src/components/toast/toast-custom.tsx +154 -0
  270. package/src/components/toast/toast.stories.tsx +369 -0
  271. package/src/components/toast/toast.tsx +41 -0
  272. package/src/components/tooltip/index.ts +1 -0
  273. package/src/components/tooltip/tooltip.stories.tsx +284 -0
  274. package/src/components/tooltip/tooltip.tsx +79 -10
  275. package/src/hooks/index.ts +3 -0
  276. package/src/hooks/useResolvedTheme.ts +34 -0
  277. package/src/hooks/useShikiHighlight.ts +140 -0
  278. package/src/hooks/useShikiStyleInjection.ts +34 -0
  279. package/dist/components/button.d.ts.map +0 -1
  280. package/dist/components/button.js.map +0 -1
  281. package/dist/components/button.stories.js.map +0 -1
  282. package/dist/components/input.d.ts.map +0 -1
  283. package/dist/components/input.js.map +0 -1
  284. package/dist/components/input.stories.js.map +0 -1
  285. package/dist/components/theme-provider.d.ts.map +0 -1
  286. package/dist/components/theme-provider.js.map +0 -1
  287. /package/dist/components/{input.d.ts → input/input.d.ts} +0 -0
  288. /package/src/components/{button.stories.tsx → button/button.stories.tsx} +0 -0
  289. /package/src/components/{input.stories.tsx → input/input.stories.tsx} +0 -0
  290. /package/src/components/{theme-provider.tsx → theme/theme-provider.tsx} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/checkbox/checkbox.stories.tsx"],"sourcesContent":["import type {Meta, StoryObj} from '@storybook/react';\nimport {Code, Header} from 'components/typography';\nimport {Checkbox, CheckboxLabel, CheckboxLinks} from '.';\n\nconst meta = {\n title: 'Components/Checkbox',\n component: Checkbox,\n tags: ['autodocs'],\n argTypes: {\n size: {\n control: 'select',\n options: ['sm', 'md', 'lg'],\n },\n disabled: {control: 'boolean'},\n checked: {control: 'boolean'},\n },\n args: {\n size: 'md',\n disabled: false,\n },\n} satisfies Meta<typeof Checkbox>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Default: Story = {\n render: (args) => (\n <div className=\"flex flex-col gap-32\">\n <div className=\"flex flex-col gap-16\">\n <Header variant=\"h4\">Controlled Checkbox</Header>\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n Use the controls below to change the checkbox state\n </Code>\n <Checkbox {...args} />\n </div>\n\n <div className=\"flex flex-col gap-32\">\n <Header variant=\"h4\">All States</Header>\n {(['sm', 'md', 'lg'] as const).map((size) => (\n <div key={size} className=\"flex flex-wrap gap-16\">\n <Header variant=\"h4\">Size: {size}</Header>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n Unchecked\n </Code>\n <Checkbox size={size} />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n Checked\n </Code>\n <Checkbox size={size} checked />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n Indeterminate\n </Code>\n <Checkbox size={size} checked=\"indeterminate\" />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n Disabled (Unchecked)\n </Code>\n <Checkbox size={size} disabled />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n Disabled (Checked)\n </Code>\n <Checkbox size={size} checked disabled />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n Focus\n </Code>\n <Checkbox size={size} className=\"focus\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n ),\n parameters: {\n pseudo: {\n focusVisible: '.focus',\n },\n },\n};\n\nexport const CheckboxLabelStory: StoryObj = {\n render: () => (\n <div className=\"flex flex-col gap-32 pb-64 pt-32 px-32 bg-background-neutral-base\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n CHECKBOX LABEL - WITHOUT BORDER\n </Code>\n <div className=\"flex flex-col gap-16\">\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Default - Unchecked\n </Code>\n <CheckboxLabel\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Hover - Unchecked\n </Code>\n <CheckboxLabel\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n className=\"hover\"\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Default - Checked\n </Code>\n <CheckboxLabel\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Hover - Checked\n </Code>\n <CheckboxLabel\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked\n className=\"hover\"\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Default - Indeterminate\n </Code>\n <CheckboxLabel\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked=\"indeterminate\"\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Disabled - Checked\n </Code>\n <CheckboxLabel\n label=\"Label\"\n checked\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n disabled\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Disabled - Unchecked\n </Code>\n <CheckboxLabel\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n disabled\n />\n </div>\n </div>\n\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle mt-32\">\n CHECKBOX LABEL - WITH BORDER\n </Code>\n <div className=\"flex flex-col gap-16\">\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Default - Unchecked\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-default-unchecked\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n border\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Hover - Unchecked\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-hover-unchecked\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n border\n className=\"hover\"\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Focus - Unchecked\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-focus-unchecked\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n border\n className=\"focus\"\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Default - Checked\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-default-checked\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked\n border\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Hover - Checked\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-hover-checked\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked\n border\n className=\"hover\"\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Focus - Checked\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-focus-checked\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked\n border\n className=\"focus\"\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Default - Indeterminate\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-default-indeterminate\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked=\"indeterminate\"\n border\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Disabled - Unchecked\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-disabled-unchecked\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n disabled\n border\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Disabled - Checked\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-disabled-checked\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked\n disabled\n border\n />\n </div>\n <div className=\"flex flex-col gap-8\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle text-xs\">\n Disabled - Indeterminate\n </Code>\n <CheckboxLabel\n id=\"checkbox-border-disabled-indeterminate\"\n label=\"Label\"\n optional\n showInfoIcon\n description=\"The quick brown fox jumps over a lazy dog.\"\n checked=\"indeterminate\"\n disabled\n border\n />\n </div>\n </div>\n </div>\n ),\n};\n\nCheckboxLabelStory.parameters = {\n pseudo: {\n hover: '.hover',\n focusVisible: '.focus',\n },\n};\n\nexport const CheckboxLinksStory: StoryObj = {\n args: {\n disabled: true,\n },\n\n render: () => (\n <div className=\"flex flex-col gap-32 pb-64 pt-32 px-32 bg-background-neutral-base\">\n <Code variant=\"label\" className=\"text-foreground-neutral-subtle\">\n CHECKBOX LINKS\n </Code>\n <div className=\"flex flex-col gap-16\">\n <CheckboxLinks\n id=\"checkbox-links-default\"\n label=\"Accept policies\"\n links={[\n {label: 'Terms of use', href: '#'},\n {label: 'Privacy Policy', href: '#'},\n ]}\n />\n <CheckboxLinks\n id=\"checkbox-links-checked\"\n label=\"Accept policies\"\n links={[\n {label: 'Terms of use', href: '#'},\n {label: 'Privacy Policy', href: '#'},\n ]}\n checked\n />\n </div>\n </div>\n ),\n};\n"],"names":["Code","Header","Checkbox","CheckboxLabel","CheckboxLinks","meta","title","component","tags","argTypes","size","control","options","disabled","checked","args","Default","render","div","className","variant","map","parameters","pseudo","focusVisible","CheckboxLabelStory","label","optional","showInfoIcon","description","id","border","hover","CheckboxLinksStory","links","href"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './checkbox';
2
+ export * from './checkbox-label';
3
+ export * from './checkbox-links';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './checkbox.js';
2
+ export * from './checkbox-label.js';
3
+ export * from './checkbox-links.js';
4
+
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/checkbox/index.ts"],"sourcesContent":["export * from './checkbox';\nexport * from './checkbox-label';\nexport * from './checkbox-links';\n"],"names":[],"mappings":"AAAA,cAAc,aAAa;AAC3B,cAAc,mBAAmB;AACjC,cAAc,mBAAmB"}
@@ -0,0 +1,26 @@
1
+ import type { ComponentProps, HTMLAttributes, ReactNode } from 'react';
2
+ export type CodeBlockFooterProps = HTMLAttributes<HTMLDivElement> & {
3
+ asChild?: boolean;
4
+ state?: 'running' | 'done';
5
+ message?: ReactNode;
6
+ description?: ReactNode;
7
+ icon?: ReactNode;
8
+ };
9
+ export declare function CodeBlockFooter({ className, asChild, state, message, description, icon, children, ...props }: CodeBlockFooterProps): import("react/jsx-runtime").JSX.Element;
10
+ export type CodeBlockFooterIconProps = ComponentProps<'div'> & {
11
+ asChild?: boolean;
12
+ };
13
+ export declare function CodeBlockFooterIcon({ className, asChild, children, ...props }: CodeBlockFooterIconProps): import("react/jsx-runtime").JSX.Element;
14
+ export type CodeBlockFooterContentProps = ComponentProps<'div'> & {
15
+ asChild?: boolean;
16
+ };
17
+ export declare function CodeBlockFooterContent({ className, asChild, children, ...props }: CodeBlockFooterContentProps): import("react/jsx-runtime").JSX.Element;
18
+ export type CodeBlockFooterMessageProps = ComponentProps<'div'> & {
19
+ asChild?: boolean;
20
+ };
21
+ export declare function CodeBlockFooterMessage({ className, asChild, children, ...props }: CodeBlockFooterMessageProps): import("react/jsx-runtime").JSX.Element;
22
+ export type CodeBlockFooterDescriptionProps = ComponentProps<'div'> & {
23
+ asChild?: boolean;
24
+ };
25
+ export declare function CodeBlockFooterDescription({ className, asChild, children, ...props }: CodeBlockFooterDescriptionProps): import("react/jsx-runtime").JSX.Element;
26
+ //# sourceMappingURL=code-block-footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block-footer.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/code-block-footer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAGrE,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,OAAe,EACf,KAAiB,EACjB,OAAO,EACP,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,oBAAoB,2CAoDtB;AAED,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,OAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,wBAAwB,2CAY1B;AAED,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,SAAS,EACT,OAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,2BAA2B,2CAY7B;AAED,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,SAAS,EACT,OAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,2BAA2B,2CAe7B;AAED,MAAM,MAAM,+BAA+B,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,EACzC,SAAS,EACT,OAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,+BAA+B,2CAejC"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Slot } from '@radix-ui/react-slot';
3
+ import { Icon } from '../../components/icon/icon.js';
4
+ import { cn } from '../../utils/cn.js';
5
+ export function CodeBlockFooter({ className, asChild = false, state = 'running', message, description, icon, children, ...props }) {
6
+ const Comp = asChild ? Slot : 'div';
7
+ const defaultIcon = icon ?? (state === 'running' ? /*#__PURE__*/ _jsx(Icon, {
8
+ name: "shipfox",
9
+ className: "size-20",
10
+ "aria-hidden": "true"
11
+ }) : /*#__PURE__*/ _jsx(Icon, {
12
+ name: "checkCircleSolid",
13
+ className: "size-20 text-foreground-neutral-base",
14
+ "aria-hidden": "true"
15
+ }));
16
+ if (asChild || children) {
17
+ return /*#__PURE__*/ _jsx(Comp, {
18
+ "data-slot": "code-block-footer",
19
+ className: cn('flex w-full items-center justify-start gap-12 px-16 py-12', className),
20
+ ...props,
21
+ children: children
22
+ });
23
+ }
24
+ return /*#__PURE__*/ _jsxs(Comp, {
25
+ "data-slot": "code-block-footer",
26
+ className: cn('flex w-full items-center justify-start gap-12 px-16 py-12', className),
27
+ ...props,
28
+ children: [
29
+ /*#__PURE__*/ _jsx("div", {
30
+ className: "flex shrink-0 items-center justify-center size-20 text-tag-success-icon",
31
+ children: defaultIcon
32
+ }),
33
+ (message || description) && /*#__PURE__*/ _jsxs("div", {
34
+ className: "flex flex-col items-start justify-center gap-0",
35
+ children: [
36
+ message && /*#__PURE__*/ _jsx("div", {
37
+ className: "overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 text-foreground-neutral-base",
38
+ children: message
39
+ }),
40
+ description && /*#__PURE__*/ _jsx("div", {
41
+ className: "overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 text-foreground-neutral-subtle",
42
+ children: description
43
+ })
44
+ ]
45
+ })
46
+ ]
47
+ });
48
+ }
49
+ export function CodeBlockFooterIcon({ className, asChild = false, children, ...props }) {
50
+ const Comp = asChild ? Slot : 'div';
51
+ return /*#__PURE__*/ _jsx(Comp, {
52
+ "data-slot": "code-block-footer-icon",
53
+ className: cn('flex shrink-0 items-center justify-center size-20', className),
54
+ ...props,
55
+ children: children
56
+ });
57
+ }
58
+ export function CodeBlockFooterContent({ className, asChild = false, children, ...props }) {
59
+ const Comp = asChild ? Slot : 'div';
60
+ return /*#__PURE__*/ _jsx(Comp, {
61
+ "data-slot": "code-block-footer-content",
62
+ className: cn('flex flex-col items-start justify-center gap-0', className),
63
+ ...props,
64
+ children: children
65
+ });
66
+ }
67
+ export function CodeBlockFooterMessage({ className, asChild = false, children, ...props }) {
68
+ const Comp = asChild ? Slot : 'div';
69
+ return /*#__PURE__*/ _jsx(Comp, {
70
+ "data-slot": "code-block-footer-message",
71
+ className: cn('overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 text-foreground-neutral-base', className),
72
+ ...props,
73
+ children: children
74
+ });
75
+ }
76
+ export function CodeBlockFooterDescription({ className, asChild = false, children, ...props }) {
77
+ const Comp = asChild ? Slot : 'div';
78
+ return /*#__PURE__*/ _jsx(Comp, {
79
+ "data-slot": "code-block-footer-description",
80
+ className: cn('overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 text-foreground-neutral-subtle', className),
81
+ ...props,
82
+ children: children
83
+ });
84
+ }
85
+
86
+ //# sourceMappingURL=code-block-footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/code-block/code-block-footer.tsx"],"sourcesContent":["import {Slot} from '@radix-ui/react-slot';\nimport {Icon} from 'components/icon/icon';\nimport type {ComponentProps, HTMLAttributes, ReactNode} from 'react';\nimport {cn} from 'utils/cn';\n\nexport type CodeBlockFooterProps = HTMLAttributes<HTMLDivElement> & {\n asChild?: boolean;\n state?: 'running' | 'done';\n message?: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n};\n\nexport function CodeBlockFooter({\n className,\n asChild = false,\n state = 'running',\n message,\n description,\n icon,\n children,\n ...props\n}: CodeBlockFooterProps) {\n const Comp = asChild ? Slot : 'div';\n\n const defaultIcon =\n icon ??\n (state === 'running' ? (\n <Icon name=\"shipfox\" className=\"size-20\" aria-hidden=\"true\" />\n ) : (\n <Icon\n name=\"checkCircleSolid\"\n className=\"size-20 text-foreground-neutral-base\"\n aria-hidden=\"true\"\n />\n ));\n\n if (asChild || children) {\n return (\n <Comp\n data-slot=\"code-block-footer\"\n className={cn('flex w-full items-center justify-start gap-12 px-16 py-12', className)}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n data-slot=\"code-block-footer\"\n className={cn('flex w-full items-center justify-start gap-12 px-16 py-12', className)}\n {...props}\n >\n <div className=\"flex shrink-0 items-center justify-center size-20 text-tag-success-icon\">\n {defaultIcon}\n </div>\n {(message || description) && (\n <div className=\"flex flex-col items-start justify-center gap-0\">\n {message && (\n <div className=\"overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 text-foreground-neutral-base\">\n {message}\n </div>\n )}\n {description && (\n <div className=\"overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 text-foreground-neutral-subtle\">\n {description}\n </div>\n )}\n </div>\n )}\n </Comp>\n );\n}\n\nexport type CodeBlockFooterIconProps = ComponentProps<'div'> & {\n asChild?: boolean;\n};\n\nexport function CodeBlockFooterIcon({\n className,\n asChild = false,\n children,\n ...props\n}: CodeBlockFooterIconProps) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"code-block-footer-icon\"\n className={cn('flex shrink-0 items-center justify-center size-20', className)}\n {...props}\n >\n {children}\n </Comp>\n );\n}\n\nexport type CodeBlockFooterContentProps = ComponentProps<'div'> & {\n asChild?: boolean;\n};\n\nexport function CodeBlockFooterContent({\n className,\n asChild = false,\n children,\n ...props\n}: CodeBlockFooterContentProps) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"code-block-footer-content\"\n className={cn('flex flex-col items-start justify-center gap-0', className)}\n {...props}\n >\n {children}\n </Comp>\n );\n}\n\nexport type CodeBlockFooterMessageProps = ComponentProps<'div'> & {\n asChild?: boolean;\n};\n\nexport function CodeBlockFooterMessage({\n className,\n asChild = false,\n children,\n ...props\n}: CodeBlockFooterMessageProps) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"code-block-footer-message\"\n className={cn(\n 'overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 text-foreground-neutral-base',\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n}\n\nexport type CodeBlockFooterDescriptionProps = ComponentProps<'div'> & {\n asChild?: boolean;\n};\n\nexport function CodeBlockFooterDescription({\n className,\n asChild = false,\n children,\n ...props\n}: CodeBlockFooterDescriptionProps) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"code-block-footer-description\"\n className={cn(\n 'overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 text-foreground-neutral-subtle',\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n}\n"],"names":["Slot","Icon","cn","CodeBlockFooter","className","asChild","state","message","description","icon","children","props","Comp","defaultIcon","name","aria-hidden","data-slot","div","CodeBlockFooterIcon","CodeBlockFooterContent","CodeBlockFooterMessage","CodeBlockFooterDescription"],"mappings":";AAAA,SAAQA,IAAI,QAAO,uBAAuB;AAC1C,SAAQC,IAAI,QAAO,uBAAuB;AAE1C,SAAQC,EAAE,QAAO,WAAW;AAU5B,OAAO,SAASC,gBAAgB,EAC9BC,SAAS,EACTC,UAAU,KAAK,EACfC,QAAQ,SAAS,EACjBC,OAAO,EACPC,WAAW,EACXC,IAAI,EACJC,QAAQ,EACR,GAAGC,OACkB;IACrB,MAAMC,OAAOP,UAAUL,OAAO;IAE9B,MAAMa,cACJJ,QACCH,CAAAA,UAAU,0BACT,KAACL;QAAKa,MAAK;QAAUV,WAAU;QAAUW,eAAY;uBAErD,KAACd;QACCa,MAAK;QACLV,WAAU;QACVW,eAAY;MAEhB;IAEF,IAAIV,WAAWK,UAAU;QACvB,qBACE,KAACE;YACCI,aAAU;YACVZ,WAAWF,GAAG,6DAA6DE;YAC1E,GAAGO,KAAK;sBAERD;;IAGP;IAEA,qBACE,MAACE;QACCI,aAAU;QACVZ,WAAWF,GAAG,6DAA6DE;QAC1E,GAAGO,KAAK;;0BAET,KAACM;gBAAIb,WAAU;0BACZS;;YAEDN,CAAAA,WAAWC,WAAU,mBACrB,MAACS;gBAAIb,WAAU;;oBACZG,yBACC,KAACU;wBAAIb,WAAU;kCACZG;;oBAGJC,6BACC,KAACS;wBAAIb,WAAU;kCACZI;;;;;;AAOf;AAMA,OAAO,SAASU,oBAAoB,EAClCd,SAAS,EACTC,UAAU,KAAK,EACfK,QAAQ,EACR,GAAGC,OACsB;IACzB,MAAMC,OAAOP,UAAUL,OAAO;IAE9B,qBACE,KAACY;QACCI,aAAU;QACVZ,WAAWF,GAAG,qDAAqDE;QAClE,GAAGO,KAAK;kBAERD;;AAGP;AAMA,OAAO,SAASS,uBAAuB,EACrCf,SAAS,EACTC,UAAU,KAAK,EACfK,QAAQ,EACR,GAAGC,OACyB;IAC5B,MAAMC,OAAOP,UAAUL,OAAO;IAE9B,qBACE,KAACY;QACCI,aAAU;QACVZ,WAAWF,GAAG,kDAAkDE;QAC/D,GAAGO,KAAK;kBAERD;;AAGP;AAMA,OAAO,SAASU,uBAAuB,EACrChB,SAAS,EACTC,UAAU,KAAK,EACfK,QAAQ,EACR,GAAGC,OACyB;IAC5B,MAAMC,OAAOP,UAAUL,OAAO;IAE9B,qBACE,KAACY;QACCI,aAAU;QACVZ,WAAWF,GACT,mGACAE;QAED,GAAGO,KAAK;kBAERD;;AAGP;AAMA,OAAO,SAASW,2BAA2B,EACzCjB,SAAS,EACTC,UAAU,KAAK,EACfK,QAAQ,EACR,GAAGC,OAC6B;IAChC,MAAMC,OAAOP,UAAUL,OAAO;IAE9B,qBACE,KAACY;QACCI,aAAU;QACVZ,WAAWF,GACT,qGACAE;QAED,GAAGO,KAAK;kBAERD;;AAGP"}
@@ -0,0 +1,50 @@
1
+ import type { ComponentProps, HTMLAttributes, ReactNode } from 'react';
2
+ export type BundledLanguage = string;
3
+ export type CodeBlockData = {
4
+ language: string;
5
+ filename: string;
6
+ code: string;
7
+ };
8
+ export type CodeBlockProps = HTMLAttributes<HTMLDivElement> & {
9
+ defaultValue?: string;
10
+ value?: string;
11
+ onValueChange?: (value: string) => void;
12
+ data: CodeBlockData[];
13
+ };
14
+ export declare function CodeBlock({ value: controlledValue, onValueChange: controlledOnValueChange, defaultValue, className, data, ...props }: CodeBlockProps): import("react/jsx-runtime").JSX.Element;
15
+ export type CodeBlockHeaderProps = HTMLAttributes<HTMLDivElement>;
16
+ export declare function CodeBlockHeader({ className, ...props }: CodeBlockHeaderProps): import("react/jsx-runtime").JSX.Element;
17
+ export type CodeBlockFilesProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
18
+ children: (item: CodeBlockData) => ReactNode;
19
+ };
20
+ export declare function CodeBlockFiles({ className, children, ...props }: CodeBlockFilesProps): import("react/jsx-runtime").JSX.Element;
21
+ export type CodeBlockFilenameProps = HTMLAttributes<HTMLDivElement> & {
22
+ value?: string;
23
+ };
24
+ export declare function CodeBlockFilename({ className, value, children, ...props }: CodeBlockFilenameProps): import("react/jsx-runtime").JSX.Element | null;
25
+ export type CodeBlockCopyButtonProps = ComponentProps<'button'> & {
26
+ onCopy?: () => void;
27
+ onError?: (error: Error) => void;
28
+ timeout?: number;
29
+ };
30
+ export declare function CodeBlockCopyButton({ onCopy, onError, timeout, children, className, ...props }: CodeBlockCopyButtonProps): import("react/jsx-runtime").JSX.Element;
31
+ export type CodeBlockBodyProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
32
+ children: (item: CodeBlockData) => ReactNode;
33
+ };
34
+ export declare function CodeBlockBody({ children, ...props }: CodeBlockBodyProps): import("react/jsx-runtime").JSX.Element;
35
+ export type CodeBlockItemProps = HTMLAttributes<HTMLDivElement> & {
36
+ value: string;
37
+ lineNumbers?: boolean;
38
+ };
39
+ export declare function CodeBlockItem({ children, lineNumbers, className, value, ...props }: CodeBlockItemProps): import("react/jsx-runtime").JSX.Element | null;
40
+ export type CodeBlockContentProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
41
+ themes?: {
42
+ light: string;
43
+ dark: string;
44
+ };
45
+ language?: BundledLanguage;
46
+ syntaxHighlighting?: boolean;
47
+ children: string;
48
+ };
49
+ export declare function CodeBlockContent({ children, themes, language, syntaxHighlighting, ...props }: CodeBlockContentProps): import("react/jsx-runtime").JSX.Element;
50
+ //# sourceMappingURL=code-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/code-block.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useControllableState } from '@radix-ui/react-use-controllable-state';
3
+ import { CodeContent } from '../../components/code-block/code-content.js';
4
+ import { CodeCopyButton } from '../../components/code-block/code-copy-button.js';
5
+ import { useResolvedTheme } from '../../hooks/useResolvedTheme.js';
6
+ import { useShikiHighlight } from '../../hooks/useShikiHighlight.js';
7
+ import { useShikiStyleInjection } from '../../hooks/useShikiStyleInjection.js';
8
+ import { createContext, useContext } from 'react';
9
+ import { cn } from '../../utils/cn.js';
10
+ const CodeBlockContext = /*#__PURE__*/ createContext({
11
+ value: undefined,
12
+ onValueChange: undefined,
13
+ data: []
14
+ });
15
+ export function CodeBlock({ value: controlledValue, onValueChange: controlledOnValueChange, defaultValue, className, data, ...props }) {
16
+ const [value, onValueChange] = useControllableState({
17
+ defaultProp: defaultValue ?? '',
18
+ prop: controlledValue,
19
+ onChange: controlledOnValueChange
20
+ });
21
+ return /*#__PURE__*/ _jsx(CodeBlockContext.Provider, {
22
+ value: {
23
+ value,
24
+ onValueChange,
25
+ data
26
+ },
27
+ children: /*#__PURE__*/ _jsx("div", {
28
+ className: cn('size-full overflow-hidden rounded-12 bg-background-components-pressed dark:bg-background-contrast-base shadow-button-neutral', className),
29
+ ...props
30
+ })
31
+ });
32
+ }
33
+ export function CodeBlockHeader({ className, ...props }) {
34
+ return /*#__PURE__*/ _jsx("div", {
35
+ className: cn('flex w-full flex-row items-center gap-12 overflow-clip bg-background-components-pressed dark:bg-background-contrast-base px-16 py-8', className),
36
+ ...props
37
+ });
38
+ }
39
+ export function CodeBlockFiles({ className, children, ...props }) {
40
+ const { data } = useContext(CodeBlockContext);
41
+ return /*#__PURE__*/ _jsx("div", {
42
+ className: cn('flex grow flex-row items-center gap-12', className),
43
+ ...props,
44
+ children: data.map((item, index)=>/*#__PURE__*/ _jsx("div", {
45
+ children: children(item)
46
+ }, item.language || index))
47
+ });
48
+ }
49
+ export function CodeBlockFilename({ className, value, children, ...props }) {
50
+ const { value: activeValue } = useContext(CodeBlockContext);
51
+ if (value !== activeValue) {
52
+ return null;
53
+ }
54
+ return /*#__PURE__*/ _jsx("div", {
55
+ className: cn('flex min-h-0 min-w-0 flex-1 items-center overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 font-code text-foreground-neutral-muted', className),
56
+ ...props,
57
+ children: children
58
+ });
59
+ }
60
+ export function CodeBlockCopyButton({ onCopy, onError, timeout = 2000, children, className, ...props }) {
61
+ const { data, value } = useContext(CodeBlockContext);
62
+ const code = data.find((item)=>item.language === value)?.code ?? '';
63
+ return /*#__PURE__*/ _jsx(CodeCopyButton, {
64
+ content: code,
65
+ onCopy: ()=>onCopy?.(),
66
+ onError: onError,
67
+ timeout: timeout,
68
+ className: className,
69
+ ...props,
70
+ children: children
71
+ });
72
+ }
73
+ function CodeBlockFallback({ children, className, ...props }) {
74
+ const lines = children?.toString().split('\n') ?? [];
75
+ return /*#__PURE__*/ _jsx("pre", {
76
+ className: cn('w-full font-code', className),
77
+ ...props,
78
+ children: /*#__PURE__*/ _jsx("code", {
79
+ children: lines.map((line)=>{
80
+ const isDiffRemove = line.trim().startsWith('-');
81
+ const isDiffAdd = line.trim().startsWith('+');
82
+ const diffClass = isDiffRemove ? 'diff remove' : isDiffAdd ? 'diff add' : '';
83
+ return /*#__PURE__*/ _jsx("span", {
84
+ className: cn('line', diffClass),
85
+ children: line
86
+ }, line);
87
+ })
88
+ })
89
+ });
90
+ }
91
+ export function CodeBlockBody({ children, ...props }) {
92
+ const { data } = useContext(CodeBlockContext);
93
+ return /*#__PURE__*/ _jsx("div", {
94
+ ...props,
95
+ children: data.map((item, index)=>/*#__PURE__*/ _jsx("div", {
96
+ children: children(item)
97
+ }, item.language || index))
98
+ });
99
+ }
100
+ export function CodeBlockItem({ children, lineNumbers = true, className, value, ...props }) {
101
+ const { value: activeValue } = useContext(CodeBlockContext);
102
+ if (value !== activeValue) {
103
+ return null;
104
+ }
105
+ return /*#__PURE__*/ _jsx("div", {
106
+ className: cn('flex w-full shrink-0 items-start overflow-clip px-4 pb-4 pt-0', className),
107
+ ...props,
108
+ children: /*#__PURE__*/ _jsx("div", {
109
+ className: cn('flex min-h-0 min-w-0 flex-1 shrink-0 rounded-8 border border-border-contrast-bottom bg-background-neutral-base dark:bg-background-contrast-subtle font-code', '[&_pre]:py-12 [&_pre]:font-code', '[&_code]:w-full [&_code]:grid [&_code]:overflow-x-auto [&_code]:bg-transparent [&_code]:font-code [&_code]:text-xs [&_code]:leading-20 [&_code]:text-foreground-neutral-base', '[&_.line]:block [&_.line]:px-12 [&_.line]:w-full [&_.line]:relative [&_.line]:font-code [&_.line]:min-h-[1.25rem]', lineNumbers && '[&_code]:[counter-reset:line] [&_code]:[counter-increment:line_0] [&_.line]:before:content-[counter(line)] [&_.line]:before:inline-block [&_.line]:before:[counter-increment:line] [&_.line]:before:w-16 [&_.line]:before:mr-16 [&_.line]:before:text-xs [&_.line]:before:text-right [&_.line]:before:text-foreground-neutral-subtle [&_.line]:before:font-code [&_.line]:before:select-none', '[&_.line.diff]:after:absolute [&_.line.diff]:after:left-0 [&_.line.diff]:after:top-0 [&_.line.diff]:after:bottom-0 [&_.line.diff]:after:w-1', '[&_.line.diff.add]:bg-emerald-50 [&_.line.diff.add]:text-green-700 [&_.line.diff.add]:after:bg-emerald-500', '[&_.line.diff.remove]:bg-rose-50 [&_.line.diff.remove]:text-red-700 [&_.line.diff.remove]:after:bg-rose-500', 'dark:[&_.line.diff.add]:bg-emerald-500/10 dark:[&_.line.diff.add]:text-emerald-400', 'dark:[&_.line.diff.remove]:bg-rose-500/10 dark:[&_.line.diff.remove]:text-rose-400'),
110
+ children: children
111
+ })
112
+ });
113
+ }
114
+ export function CodeBlockContent({ children, themes = {
115
+ light: 'vitesse-light',
116
+ dark: 'vitesse-dark'
117
+ }, language = 'typescript', syntaxHighlighting = false, ...props }) {
118
+ const resolvedTheme = useResolvedTheme();
119
+ useShikiStyleInjection(syntaxHighlighting);
120
+ const { highlightedCode, isLoading } = useShikiHighlight({
121
+ code: children,
122
+ lang: language,
123
+ themes,
124
+ resolvedTheme,
125
+ syntaxHighlighting
126
+ });
127
+ if (!syntaxHighlighting || isLoading) {
128
+ return /*#__PURE__*/ _jsx(CodeBlockFallback, {
129
+ ...props,
130
+ children: children
131
+ });
132
+ }
133
+ return /*#__PURE__*/ _jsx(CodeContent, {
134
+ code: children,
135
+ highlightedCode: highlightedCode,
136
+ isLoading: isLoading,
137
+ syntaxHighlighting: syntaxHighlighting,
138
+ ...props
139
+ });
140
+ }
141
+
142
+ //# sourceMappingURL=code-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/code-block/code-block.tsx"],"sourcesContent":["import {useControllableState} from '@radix-ui/react-use-controllable-state';\nimport {CodeContent} from 'components/code-block/code-content';\nimport {CodeCopyButton} from 'components/code-block/code-copy-button';\nimport {useResolvedTheme} from 'hooks/useResolvedTheme';\nimport {useShikiHighlight} from 'hooks/useShikiHighlight';\nimport {useShikiStyleInjection} from 'hooks/useShikiStyleInjection';\nimport type {ComponentProps, HTMLAttributes, ReactNode} from 'react';\nimport {createContext, useContext} from 'react';\nimport {cn} from 'utils/cn';\n\nexport type BundledLanguage = string;\n\nexport type CodeBlockData = {\n language: string;\n filename: string;\n code: string;\n};\n\ntype CodeBlockContextType = {\n value: string | undefined;\n onValueChange: ((value: string) => void) | undefined;\n data: CodeBlockData[];\n};\n\nconst CodeBlockContext = createContext<CodeBlockContextType>({\n value: undefined,\n onValueChange: undefined,\n data: [],\n});\n\nexport type CodeBlockProps = HTMLAttributes<HTMLDivElement> & {\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n data: CodeBlockData[];\n};\n\nexport function CodeBlock({\n value: controlledValue,\n onValueChange: controlledOnValueChange,\n defaultValue,\n className,\n data,\n ...props\n}: CodeBlockProps) {\n const [value, onValueChange] = useControllableState({\n defaultProp: defaultValue ?? '',\n prop: controlledValue,\n onChange: controlledOnValueChange,\n });\n\n return (\n <CodeBlockContext.Provider value={{value, onValueChange, data}}>\n <div\n className={cn(\n 'size-full overflow-hidden rounded-12 bg-background-components-pressed dark:bg-background-contrast-base shadow-button-neutral',\n className,\n )}\n {...props}\n />\n </CodeBlockContext.Provider>\n );\n}\n\nexport type CodeBlockHeaderProps = HTMLAttributes<HTMLDivElement>;\n\nexport function CodeBlockHeader({className, ...props}: CodeBlockHeaderProps) {\n return (\n <div\n className={cn(\n 'flex w-full flex-row items-center gap-12 overflow-clip bg-background-components-pressed dark:bg-background-contrast-base px-16 py-8',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type CodeBlockFilesProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: (item: CodeBlockData) => ReactNode;\n};\n\nexport function CodeBlockFiles({className, children, ...props}: CodeBlockFilesProps) {\n const {data} = useContext(CodeBlockContext);\n\n return (\n <div className={cn('flex grow flex-row items-center gap-12', className)} {...props}>\n {data.map((item, index) => (\n <div key={item.language || index}>{children(item)}</div>\n ))}\n </div>\n );\n}\n\nexport type CodeBlockFilenameProps = HTMLAttributes<HTMLDivElement> & {\n value?: string;\n};\n\nexport function CodeBlockFilename({className, value, children, ...props}: CodeBlockFilenameProps) {\n const {value: activeValue} = useContext(CodeBlockContext);\n\n if (value !== activeValue) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'flex min-h-0 min-w-0 flex-1 items-center overflow-hidden text-ellipsis whitespace-nowrap text-xs leading-20 font-code text-foreground-neutral-muted',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type CodeBlockCopyButtonProps = ComponentProps<'button'> & {\n onCopy?: () => void;\n onError?: (error: Error) => void;\n timeout?: number;\n};\n\nexport function CodeBlockCopyButton({\n onCopy,\n onError,\n timeout = 2000,\n children,\n className,\n ...props\n}: CodeBlockCopyButtonProps) {\n const {data, value} = useContext(CodeBlockContext);\n const code = data.find((item) => item.language === value)?.code ?? '';\n\n return (\n <CodeCopyButton\n content={code}\n onCopy={() => onCopy?.()}\n onError={onError}\n timeout={timeout}\n className={className}\n {...props}\n >\n {children}\n </CodeCopyButton>\n );\n}\n\ntype CodeBlockFallbackProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: string;\n};\n\nfunction CodeBlockFallback({children, className, ...props}: CodeBlockFallbackProps) {\n const lines = children?.toString().split('\\n') ?? [];\n return (\n <pre\n className={cn('w-full font-code', className)}\n {...(props as HTMLAttributes<HTMLPreElement>)}\n >\n <code>\n {lines.map((line) => {\n const isDiffRemove = line.trim().startsWith('-');\n const isDiffAdd = line.trim().startsWith('+');\n const diffClass = isDiffRemove ? 'diff remove' : isDiffAdd ? 'diff add' : '';\n\n return (\n <span className={cn('line', diffClass)} key={line}>\n {line}\n </span>\n );\n })}\n </code>\n </pre>\n );\n}\n\nexport type CodeBlockBodyProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: (item: CodeBlockData) => ReactNode;\n};\n\nexport function CodeBlockBody({children, ...props}: CodeBlockBodyProps) {\n const {data} = useContext(CodeBlockContext);\n\n return (\n <div {...props}>\n {data.map((item, index) => (\n <div key={item.language || index}>{children(item)}</div>\n ))}\n </div>\n );\n}\n\nexport type CodeBlockItemProps = HTMLAttributes<HTMLDivElement> & {\n value: string;\n lineNumbers?: boolean;\n};\n\nexport function CodeBlockItem({\n children,\n lineNumbers = true,\n className,\n value,\n ...props\n}: CodeBlockItemProps) {\n const {value: activeValue} = useContext(CodeBlockContext);\n\n if (value !== activeValue) {\n return null;\n }\n\n return (\n <div\n className={cn('flex w-full shrink-0 items-start overflow-clip px-4 pb-4 pt-0', className)}\n {...props}\n >\n <div\n className={cn(\n 'flex min-h-0 min-w-0 flex-1 shrink-0 rounded-8 border border-border-contrast-bottom bg-background-neutral-base dark:bg-background-contrast-subtle font-code',\n '[&_pre]:py-12 [&_pre]:font-code',\n '[&_code]:w-full [&_code]:grid [&_code]:overflow-x-auto [&_code]:bg-transparent [&_code]:font-code [&_code]:text-xs [&_code]:leading-20 [&_code]:text-foreground-neutral-base',\n '[&_.line]:block [&_.line]:px-12 [&_.line]:w-full [&_.line]:relative [&_.line]:font-code [&_.line]:min-h-[1.25rem]',\n lineNumbers &&\n '[&_code]:[counter-reset:line] [&_code]:[counter-increment:line_0] [&_.line]:before:content-[counter(line)] [&_.line]:before:inline-block [&_.line]:before:[counter-increment:line] [&_.line]:before:w-16 [&_.line]:before:mr-16 [&_.line]:before:text-xs [&_.line]:before:text-right [&_.line]:before:text-foreground-neutral-subtle [&_.line]:before:font-code [&_.line]:before:select-none',\n '[&_.line.diff]:after:absolute [&_.line.diff]:after:left-0 [&_.line.diff]:after:top-0 [&_.line.diff]:after:bottom-0 [&_.line.diff]:after:w-1',\n '[&_.line.diff.add]:bg-emerald-50 [&_.line.diff.add]:text-green-700 [&_.line.diff.add]:after:bg-emerald-500',\n '[&_.line.diff.remove]:bg-rose-50 [&_.line.diff.remove]:text-red-700 [&_.line.diff.remove]:after:bg-rose-500',\n 'dark:[&_.line.diff.add]:bg-emerald-500/10 dark:[&_.line.diff.add]:text-emerald-400',\n 'dark:[&_.line.diff.remove]:bg-rose-500/10 dark:[&_.line.diff.remove]:text-rose-400',\n )}\n >\n {children}\n </div>\n </div>\n );\n}\n\nexport type CodeBlockContentProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n themes?: {\n light: string;\n dark: string;\n };\n language?: BundledLanguage;\n syntaxHighlighting?: boolean;\n children: string;\n};\n\nexport function CodeBlockContent({\n children,\n themes = {\n light: 'vitesse-light',\n dark: 'vitesse-dark',\n },\n language = 'typescript',\n syntaxHighlighting = false,\n ...props\n}: CodeBlockContentProps) {\n const resolvedTheme = useResolvedTheme();\n\n useShikiStyleInjection(syntaxHighlighting);\n\n const {highlightedCode, isLoading} = useShikiHighlight({\n code: children,\n lang: language,\n themes,\n resolvedTheme,\n syntaxHighlighting,\n });\n\n if (!syntaxHighlighting || isLoading) {\n return <CodeBlockFallback {...props}>{children}</CodeBlockFallback>;\n }\n\n return (\n <CodeContent\n code={children}\n highlightedCode={highlightedCode}\n isLoading={isLoading}\n syntaxHighlighting={syntaxHighlighting}\n {...props}\n />\n );\n}\n"],"names":["useControllableState","CodeContent","CodeCopyButton","useResolvedTheme","useShikiHighlight","useShikiStyleInjection","createContext","useContext","cn","CodeBlockContext","value","undefined","onValueChange","data","CodeBlock","controlledValue","controlledOnValueChange","defaultValue","className","props","defaultProp","prop","onChange","Provider","div","CodeBlockHeader","CodeBlockFiles","children","map","item","index","language","CodeBlockFilename","activeValue","CodeBlockCopyButton","onCopy","onError","timeout","code","find","content","CodeBlockFallback","lines","toString","split","pre","line","isDiffRemove","trim","startsWith","isDiffAdd","diffClass","span","CodeBlockBody","CodeBlockItem","lineNumbers","CodeBlockContent","themes","light","dark","syntaxHighlighting","resolvedTheme","highlightedCode","isLoading","lang"],"mappings":"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"}