@chan.run/design 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/README.md +195 -0
  2. package/assets/favicons/chan/android-chrome-144x144.png +0 -0
  3. package/assets/favicons/chan/android-chrome-192x192.png +0 -0
  4. package/assets/favicons/chan/android-chrome-256x256.png +0 -0
  5. package/assets/favicons/chan/android-chrome-36x36.png +0 -0
  6. package/assets/favicons/chan/android-chrome-384x384.png +0 -0
  7. package/assets/favicons/chan/android-chrome-48x48.png +0 -0
  8. package/assets/favicons/chan/android-chrome-512x512.png +0 -0
  9. package/assets/favicons/chan/android-chrome-72x72.png +0 -0
  10. package/assets/favicons/chan/android-chrome-96x96.png +0 -0
  11. package/assets/favicons/chan/apple-touch-icon-1024x1024.png +0 -0
  12. package/assets/favicons/chan/apple-touch-icon-114x114.png +0 -0
  13. package/assets/favicons/chan/apple-touch-icon-120x120.png +0 -0
  14. package/assets/favicons/chan/apple-touch-icon-144x144.png +0 -0
  15. package/assets/favicons/chan/apple-touch-icon-152x152.png +0 -0
  16. package/assets/favicons/chan/apple-touch-icon-167x167.png +0 -0
  17. package/assets/favicons/chan/apple-touch-icon-180x180.png +0 -0
  18. package/assets/favicons/chan/apple-touch-icon-57x57.png +0 -0
  19. package/assets/favicons/chan/apple-touch-icon-60x60.png +0 -0
  20. package/assets/favicons/chan/apple-touch-icon-72x72.png +0 -0
  21. package/assets/favicons/chan/apple-touch-icon-76x76.png +0 -0
  22. package/assets/favicons/chan/apple-touch-icon-precomposed.png +0 -0
  23. package/assets/favicons/chan/apple-touch-icon.png +0 -0
  24. package/assets/favicons/chan/browserconfig.xml +12 -0
  25. package/assets/favicons/chan/favicon-16x16.png +0 -0
  26. package/assets/favicons/chan/favicon-32x32.png +0 -0
  27. package/assets/favicons/chan/favicon-48x48.png +0 -0
  28. package/assets/favicons/chan/favicon.ico +0 -0
  29. package/assets/favicons/chan/head-snippet.html +25 -0
  30. package/assets/favicons/chan/manifest.webmanifest +68 -0
  31. package/assets/favicons/chan/mstile-144x144.png +0 -0
  32. package/assets/favicons/chan/mstile-150x150.png +0 -0
  33. package/assets/favicons/chan/mstile-310x150.png +0 -0
  34. package/assets/favicons/chan/mstile-310x310.png +0 -0
  35. package/assets/favicons/chan/mstile-70x70.png +0 -0
  36. package/assets/favicons/ensure/android-chrome-144x144.png +0 -0
  37. package/assets/favicons/ensure/android-chrome-192x192.png +0 -0
  38. package/assets/favicons/ensure/android-chrome-256x256.png +0 -0
  39. package/assets/favicons/ensure/android-chrome-36x36.png +0 -0
  40. package/assets/favicons/ensure/android-chrome-384x384.png +0 -0
  41. package/assets/favicons/ensure/android-chrome-48x48.png +0 -0
  42. package/assets/favicons/ensure/android-chrome-512x512.png +0 -0
  43. package/assets/favicons/ensure/android-chrome-72x72.png +0 -0
  44. package/assets/favicons/ensure/android-chrome-96x96.png +0 -0
  45. package/assets/favicons/ensure/apple-touch-icon-1024x1024.png +0 -0
  46. package/assets/favicons/ensure/apple-touch-icon-114x114.png +0 -0
  47. package/assets/favicons/ensure/apple-touch-icon-120x120.png +0 -0
  48. package/assets/favicons/ensure/apple-touch-icon-144x144.png +0 -0
  49. package/assets/favicons/ensure/apple-touch-icon-152x152.png +0 -0
  50. package/assets/favicons/ensure/apple-touch-icon-167x167.png +0 -0
  51. package/assets/favicons/ensure/apple-touch-icon-180x180.png +0 -0
  52. package/assets/favicons/ensure/apple-touch-icon-57x57.png +0 -0
  53. package/assets/favicons/ensure/apple-touch-icon-60x60.png +0 -0
  54. package/assets/favicons/ensure/apple-touch-icon-72x72.png +0 -0
  55. package/assets/favicons/ensure/apple-touch-icon-76x76.png +0 -0
  56. package/assets/favicons/ensure/apple-touch-icon-precomposed.png +0 -0
  57. package/assets/favicons/ensure/apple-touch-icon.png +0 -0
  58. package/assets/favicons/ensure/browserconfig.xml +12 -0
  59. package/assets/favicons/ensure/favicon-16x16.png +0 -0
  60. package/assets/favicons/ensure/favicon-32x32.png +0 -0
  61. package/assets/favicons/ensure/favicon-48x48.png +0 -0
  62. package/assets/favicons/ensure/favicon.ico +0 -0
  63. package/assets/favicons/ensure/head-snippet.html +25 -0
  64. package/assets/favicons/ensure/manifest.webmanifest +68 -0
  65. package/assets/favicons/ensure/mstile-144x144.png +0 -0
  66. package/assets/favicons/ensure/mstile-150x150.png +0 -0
  67. package/assets/favicons/ensure/mstile-310x150.png +0 -0
  68. package/assets/favicons/ensure/mstile-310x310.png +0 -0
  69. package/assets/favicons/ensure/mstile-70x70.png +0 -0
  70. package/assets/favicons/entropy/android-chrome-144x144.png +0 -0
  71. package/assets/favicons/entropy/android-chrome-192x192.png +0 -0
  72. package/assets/favicons/entropy/android-chrome-256x256.png +0 -0
  73. package/assets/favicons/entropy/android-chrome-36x36.png +0 -0
  74. package/assets/favicons/entropy/android-chrome-384x384.png +0 -0
  75. package/assets/favicons/entropy/android-chrome-48x48.png +0 -0
  76. package/assets/favicons/entropy/android-chrome-512x512.png +0 -0
  77. package/assets/favicons/entropy/android-chrome-72x72.png +0 -0
  78. package/assets/favicons/entropy/android-chrome-96x96.png +0 -0
  79. package/assets/favicons/entropy/apple-touch-icon-1024x1024.png +0 -0
  80. package/assets/favicons/entropy/apple-touch-icon-114x114.png +0 -0
  81. package/assets/favicons/entropy/apple-touch-icon-120x120.png +0 -0
  82. package/assets/favicons/entropy/apple-touch-icon-144x144.png +0 -0
  83. package/assets/favicons/entropy/apple-touch-icon-152x152.png +0 -0
  84. package/assets/favicons/entropy/apple-touch-icon-167x167.png +0 -0
  85. package/assets/favicons/entropy/apple-touch-icon-180x180.png +0 -0
  86. package/assets/favicons/entropy/apple-touch-icon-57x57.png +0 -0
  87. package/assets/favicons/entropy/apple-touch-icon-60x60.png +0 -0
  88. package/assets/favicons/entropy/apple-touch-icon-72x72.png +0 -0
  89. package/assets/favicons/entropy/apple-touch-icon-76x76.png +0 -0
  90. package/assets/favicons/entropy/apple-touch-icon-precomposed.png +0 -0
  91. package/assets/favicons/entropy/apple-touch-icon.png +0 -0
  92. package/assets/favicons/entropy/browserconfig.xml +12 -0
  93. package/assets/favicons/entropy/favicon-16x16.png +0 -0
  94. package/assets/favicons/entropy/favicon-32x32.png +0 -0
  95. package/assets/favicons/entropy/favicon-48x48.png +0 -0
  96. package/assets/favicons/entropy/favicon.ico +0 -0
  97. package/assets/favicons/entropy/head-snippet.html +25 -0
  98. package/assets/favicons/entropy/manifest.webmanifest +68 -0
  99. package/assets/favicons/entropy/mstile-144x144.png +0 -0
  100. package/assets/favicons/entropy/mstile-150x150.png +0 -0
  101. package/assets/favicons/entropy/mstile-310x150.png +0 -0
  102. package/assets/favicons/entropy/mstile-310x310.png +0 -0
  103. package/assets/favicons/entropy/mstile-70x70.png +0 -0
  104. package/assets/favicons/restunnel/android-chrome-144x144.png +0 -0
  105. package/assets/favicons/restunnel/android-chrome-192x192.png +0 -0
  106. package/assets/favicons/restunnel/android-chrome-256x256.png +0 -0
  107. package/assets/favicons/restunnel/android-chrome-36x36.png +0 -0
  108. package/assets/favicons/restunnel/android-chrome-384x384.png +0 -0
  109. package/assets/favicons/restunnel/android-chrome-48x48.png +0 -0
  110. package/assets/favicons/restunnel/android-chrome-512x512.png +0 -0
  111. package/assets/favicons/restunnel/android-chrome-72x72.png +0 -0
  112. package/assets/favicons/restunnel/android-chrome-96x96.png +0 -0
  113. package/assets/favicons/restunnel/apple-touch-icon-1024x1024.png +0 -0
  114. package/assets/favicons/restunnel/apple-touch-icon-114x114.png +0 -0
  115. package/assets/favicons/restunnel/apple-touch-icon-120x120.png +0 -0
  116. package/assets/favicons/restunnel/apple-touch-icon-144x144.png +0 -0
  117. package/assets/favicons/restunnel/apple-touch-icon-152x152.png +0 -0
  118. package/assets/favicons/restunnel/apple-touch-icon-167x167.png +0 -0
  119. package/assets/favicons/restunnel/apple-touch-icon-180x180.png +0 -0
  120. package/assets/favicons/restunnel/apple-touch-icon-57x57.png +0 -0
  121. package/assets/favicons/restunnel/apple-touch-icon-60x60.png +0 -0
  122. package/assets/favicons/restunnel/apple-touch-icon-72x72.png +0 -0
  123. package/assets/favicons/restunnel/apple-touch-icon-76x76.png +0 -0
  124. package/assets/favicons/restunnel/apple-touch-icon-precomposed.png +0 -0
  125. package/assets/favicons/restunnel/apple-touch-icon.png +0 -0
  126. package/assets/favicons/restunnel/browserconfig.xml +12 -0
  127. package/assets/favicons/restunnel/favicon-16x16.png +0 -0
  128. package/assets/favicons/restunnel/favicon-32x32.png +0 -0
  129. package/assets/favicons/restunnel/favicon-48x48.png +0 -0
  130. package/assets/favicons/restunnel/favicon.ico +0 -0
  131. package/assets/favicons/restunnel/head-snippet.html +25 -0
  132. package/assets/favicons/restunnel/manifest.webmanifest +68 -0
  133. package/assets/favicons/restunnel/mstile-144x144.png +0 -0
  134. package/assets/favicons/restunnel/mstile-150x150.png +0 -0
  135. package/assets/favicons/restunnel/mstile-310x150.png +0 -0
  136. package/assets/favicons/restunnel/mstile-310x310.png +0 -0
  137. package/assets/favicons/restunnel/mstile-70x70.png +0 -0
  138. package/assets/favicons/seam/android-chrome-144x144.png +0 -0
  139. package/assets/favicons/seam/android-chrome-192x192.png +0 -0
  140. package/assets/favicons/seam/android-chrome-256x256.png +0 -0
  141. package/assets/favicons/seam/android-chrome-36x36.png +0 -0
  142. package/assets/favicons/seam/android-chrome-384x384.png +0 -0
  143. package/assets/favicons/seam/android-chrome-48x48.png +0 -0
  144. package/assets/favicons/seam/android-chrome-512x512.png +0 -0
  145. package/assets/favicons/seam/android-chrome-72x72.png +0 -0
  146. package/assets/favicons/seam/android-chrome-96x96.png +0 -0
  147. package/assets/favicons/seam/apple-touch-icon-1024x1024.png +0 -0
  148. package/assets/favicons/seam/apple-touch-icon-114x114.png +0 -0
  149. package/assets/favicons/seam/apple-touch-icon-120x120.png +0 -0
  150. package/assets/favicons/seam/apple-touch-icon-144x144.png +0 -0
  151. package/assets/favicons/seam/apple-touch-icon-152x152.png +0 -0
  152. package/assets/favicons/seam/apple-touch-icon-167x167.png +0 -0
  153. package/assets/favicons/seam/apple-touch-icon-180x180.png +0 -0
  154. package/assets/favicons/seam/apple-touch-icon-57x57.png +0 -0
  155. package/assets/favicons/seam/apple-touch-icon-60x60.png +0 -0
  156. package/assets/favicons/seam/apple-touch-icon-72x72.png +0 -0
  157. package/assets/favicons/seam/apple-touch-icon-76x76.png +0 -0
  158. package/assets/favicons/seam/apple-touch-icon-precomposed.png +0 -0
  159. package/assets/favicons/seam/apple-touch-icon.png +0 -0
  160. package/assets/favicons/seam/browserconfig.xml +12 -0
  161. package/assets/favicons/seam/favicon-16x16.png +0 -0
  162. package/assets/favicons/seam/favicon-32x32.png +0 -0
  163. package/assets/favicons/seam/favicon-48x48.png +0 -0
  164. package/assets/favicons/seam/favicon.ico +0 -0
  165. package/assets/favicons/seam/head-snippet.html +25 -0
  166. package/assets/favicons/seam/manifest.webmanifest +68 -0
  167. package/assets/favicons/seam/mstile-144x144.png +0 -0
  168. package/assets/favicons/seam/mstile-150x150.png +0 -0
  169. package/assets/favicons/seam/mstile-310x150.png +0 -0
  170. package/assets/favicons/seam/mstile-310x310.png +0 -0
  171. package/assets/favicons/seam/mstile-70x70.png +0 -0
  172. package/assets/favicons/slides/android-chrome-144x144.png +0 -0
  173. package/assets/favicons/slides/android-chrome-192x192.png +0 -0
  174. package/assets/favicons/slides/android-chrome-256x256.png +0 -0
  175. package/assets/favicons/slides/android-chrome-36x36.png +0 -0
  176. package/assets/favicons/slides/android-chrome-384x384.png +0 -0
  177. package/assets/favicons/slides/android-chrome-48x48.png +0 -0
  178. package/assets/favicons/slides/android-chrome-512x512.png +0 -0
  179. package/assets/favicons/slides/android-chrome-72x72.png +0 -0
  180. package/assets/favicons/slides/android-chrome-96x96.png +0 -0
  181. package/assets/favicons/slides/apple-touch-icon-1024x1024.png +0 -0
  182. package/assets/favicons/slides/apple-touch-icon-114x114.png +0 -0
  183. package/assets/favicons/slides/apple-touch-icon-120x120.png +0 -0
  184. package/assets/favicons/slides/apple-touch-icon-144x144.png +0 -0
  185. package/assets/favicons/slides/apple-touch-icon-152x152.png +0 -0
  186. package/assets/favicons/slides/apple-touch-icon-167x167.png +0 -0
  187. package/assets/favicons/slides/apple-touch-icon-180x180.png +0 -0
  188. package/assets/favicons/slides/apple-touch-icon-57x57.png +0 -0
  189. package/assets/favicons/slides/apple-touch-icon-60x60.png +0 -0
  190. package/assets/favicons/slides/apple-touch-icon-72x72.png +0 -0
  191. package/assets/favicons/slides/apple-touch-icon-76x76.png +0 -0
  192. package/assets/favicons/slides/apple-touch-icon-precomposed.png +0 -0
  193. package/assets/favicons/slides/apple-touch-icon.png +0 -0
  194. package/assets/favicons/slides/browserconfig.xml +12 -0
  195. package/assets/favicons/slides/favicon-16x16.png +0 -0
  196. package/assets/favicons/slides/favicon-32x32.png +0 -0
  197. package/assets/favicons/slides/favicon-48x48.png +0 -0
  198. package/assets/favicons/slides/favicon.ico +0 -0
  199. package/assets/favicons/slides/head-snippet.html +25 -0
  200. package/assets/favicons/slides/manifest.webmanifest +68 -0
  201. package/assets/favicons/slides/mstile-144x144.png +0 -0
  202. package/assets/favicons/slides/mstile-150x150.png +0 -0
  203. package/assets/favicons/slides/mstile-310x150.png +0 -0
  204. package/assets/favicons/slides/mstile-310x310.png +0 -0
  205. package/assets/favicons/slides/mstile-70x70.png +0 -0
  206. package/assets/svg/chan-favicon.svg +5 -0
  207. package/assets/svg/chan-wordmark-dark.svg +5 -0
  208. package/assets/svg/chan-wordmark-light.svg +5 -0
  209. package/assets/svg/ensure-favicon.svg +5 -0
  210. package/assets/svg/ensure-icon-dark.svg +5 -0
  211. package/assets/svg/ensure-icon-light.svg +5 -0
  212. package/assets/svg/ensure-wordmark-dark.svg +4 -0
  213. package/assets/svg/ensure-wordmark-light.svg +4 -0
  214. package/assets/svg/entropy-favicon.svg +5 -0
  215. package/assets/svg/entropy-icon-dark.svg +5 -0
  216. package/assets/svg/entropy-icon-light.svg +5 -0
  217. package/assets/svg/entropy-wordmark-dark.svg +4 -0
  218. package/assets/svg/entropy-wordmark-light.svg +4 -0
  219. package/assets/svg/restunnel-favicon.svg +5 -0
  220. package/assets/svg/restunnel-icon-dark.svg +5 -0
  221. package/assets/svg/restunnel-icon-light.svg +5 -0
  222. package/assets/svg/restunnel-wordmark-dark.svg +4 -0
  223. package/assets/svg/restunnel-wordmark-light.svg +4 -0
  224. package/assets/svg/seam-favicon.svg +5 -0
  225. package/assets/svg/seam-icon-dark.svg +5 -0
  226. package/assets/svg/seam-icon-light.svg +5 -0
  227. package/assets/svg/seam-wordmark-dark.svg +4 -0
  228. package/assets/svg/seam-wordmark-light.svg +4 -0
  229. package/assets/svg/slides-favicon.svg +5 -0
  230. package/assets/svg/slides-icon-dark.svg +5 -0
  231. package/assets/svg/slides-icon-light.svg +5 -0
  232. package/assets/svg/slides-wordmark-dark.svg +4 -0
  233. package/assets/svg/slides-wordmark-light.svg +4 -0
  234. package/dist/index.d.mts +88 -12
  235. package/dist/index.mjs +292 -27
  236. package/package.json +21 -11
package/dist/index.mjs CHANGED
@@ -1,7 +1,31 @@
1
1
  import { Badge, Box, Card, Center, Code, Flex, Grid, HStack, Heading, IconButton, Text, createSystem, defaultConfig, defineConfig, defineSlotRecipe, useSlotRecipe } from "@chakra-ui/react";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
3
  import { useTheme } from "next-themes";
3
4
  import { useCallback, useEffect, useRef, useState } from "react";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/brand/Wordmark.tsx
6
+ function Wordmark({ fontSize = "20px", color = "chan.text", pulseDot, ...rest }) {
7
+ const dotProps = pulseDot ? {
8
+ animation: "chan-pulse",
9
+ display: "inline-block"
10
+ } : {};
11
+ return /* @__PURE__ */ jsxs(Text, {
12
+ textStyle: "chan.wordmark",
13
+ fontSize,
14
+ color,
15
+ ...rest,
16
+ children: [
17
+ "CHAN",
18
+ /* @__PURE__ */ jsx(Box, {
19
+ as: "span",
20
+ color: "chan.orange",
21
+ ...dotProps,
22
+ children: "."
23
+ }),
24
+ "RUN"
25
+ ]
26
+ });
27
+ }
28
+ //#endregion
5
29
  //#region src/components/ColorModeButton.tsx
6
30
  function ColorModeButton(props) {
7
31
  const { resolvedTheme, setTheme } = useTheme();
@@ -12,7 +36,7 @@ function ColorModeButton(props) {
12
36
  const isDark = resolvedTheme === "dark";
13
37
  return /* @__PURE__ */ jsx(Flex, {
14
38
  as: "button",
15
- "aria-label": isDark ? "Switch to light mode" : "Switch to dark mode",
39
+ "aria-label": getAriaLabel(mounted, isDark),
16
40
  onClick: () => setTheme(isDark ? "light" : "dark"),
17
41
  w: "34px",
18
42
  h: "34px",
@@ -36,6 +60,11 @@ function ColorModeButton(props) {
36
60
  children: renderIcon(mounted, isDark)
37
61
  });
38
62
  }
63
+ function getAriaLabel(mounted, isDark) {
64
+ if (!mounted) return "Toggle color mode";
65
+ if (isDark) return "Switch to light mode";
66
+ return "Switch to dark mode";
67
+ }
39
68
  function renderIcon(mounted, isDark) {
40
69
  if (!mounted) return null;
41
70
  if (isDark) return /* @__PURE__ */ jsx(MoonIcon, {});
@@ -821,30 +850,6 @@ function SlideViewer({ slides, currentSlide, onSlideChange, isPresenting = false
821
850
  });
822
851
  }
823
852
  //#endregion
824
- //#region src/components/Wordmark.tsx
825
- function Wordmark({ fontSize = "20px", color = "chan.text", pulseDot, ...rest }) {
826
- const dotProps = pulseDot ? {
827
- animation: "chan-pulse",
828
- display: "inline-block"
829
- } : {};
830
- return /* @__PURE__ */ jsxs(Text, {
831
- textStyle: "chan.wordmark",
832
- fontSize,
833
- color,
834
- ...rest,
835
- children: [
836
- "CHAN",
837
- /* @__PURE__ */ jsx(Box, {
838
- as: "span",
839
- color: "chan.orange",
840
- ...dotProps,
841
- children: "."
842
- }),
843
- "RUN"
844
- ]
845
- });
846
- }
847
- //#endregion
848
853
  //#region src/components/Topbar.tsx
849
854
  function HamburgerButton({ onClick }) {
850
855
  return /* @__PURE__ */ jsxs(Flex, {
@@ -923,6 +928,263 @@ function Topbar({ onMenuOpen }) {
923
928
  });
924
929
  }
925
930
  //#endregion
931
+ //#region src/favicons/index.tsx
932
+ function urls(name) {
933
+ const base = (file) => new URL(`../../assets/favicons/${name}/${file}`, import.meta.url).href;
934
+ return {
935
+ ico: base("favicon.ico"),
936
+ png16: base("favicon-16x16.png"),
937
+ png32: base("favicon-32x32.png"),
938
+ apple: base("apple-touch-icon.png"),
939
+ android192: base("android-chrome-192x192.png"),
940
+ android512: base("android-chrome-512x512.png"),
941
+ manifest: base("manifest.webmanifest")
942
+ };
943
+ }
944
+ function FaviconLinks({ assets, manifest }) {
945
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
946
+ /* @__PURE__ */ jsx("link", {
947
+ rel: "icon",
948
+ type: "image/x-icon",
949
+ href: assets.ico
950
+ }),
951
+ /* @__PURE__ */ jsx("link", {
952
+ rel: "icon",
953
+ type: "image/png",
954
+ sizes: "16x16",
955
+ href: assets.png16
956
+ }),
957
+ /* @__PURE__ */ jsx("link", {
958
+ rel: "icon",
959
+ type: "image/png",
960
+ sizes: "32x32",
961
+ href: assets.png32
962
+ }),
963
+ /* @__PURE__ */ jsx("link", {
964
+ rel: "apple-touch-icon",
965
+ sizes: "180x180",
966
+ href: assets.apple
967
+ }),
968
+ /* @__PURE__ */ jsx("link", {
969
+ rel: "icon",
970
+ type: "image/png",
971
+ sizes: "192x192",
972
+ href: assets.android192
973
+ }),
974
+ /* @__PURE__ */ jsx("link", {
975
+ rel: "icon",
976
+ type: "image/png",
977
+ sizes: "512x512",
978
+ href: assets.android512
979
+ }),
980
+ manifest && /* @__PURE__ */ jsx("link", {
981
+ rel: "manifest",
982
+ href: assets.manifest
983
+ }),
984
+ /* @__PURE__ */ jsx("meta", {
985
+ name: "theme-color",
986
+ content: "#ff4d00"
987
+ })
988
+ ] });
989
+ }
990
+ const chanFaviconAssets = urls("chan");
991
+ const ensureFaviconAssets = urls("ensure");
992
+ const entropyFaviconAssets = urls("entropy");
993
+ const restunnelFaviconAssets = urls("restunnel");
994
+ const seamFaviconAssets = urls("seam");
995
+ const slidesFaviconAssets = urls("slides");
996
+ function ChanFaviconHead(props = {}) {
997
+ return /* @__PURE__ */ jsx(FaviconLinks, {
998
+ assets: chanFaviconAssets,
999
+ manifest: props.manifest
1000
+ });
1001
+ }
1002
+ function EnsureFaviconHead(props = {}) {
1003
+ return /* @__PURE__ */ jsx(FaviconLinks, {
1004
+ assets: ensureFaviconAssets,
1005
+ manifest: props.manifest
1006
+ });
1007
+ }
1008
+ function EntropyFaviconHead(props = {}) {
1009
+ return /* @__PURE__ */ jsx(FaviconLinks, {
1010
+ assets: entropyFaviconAssets,
1011
+ manifest: props.manifest
1012
+ });
1013
+ }
1014
+ function RestunnelFaviconHead(props = {}) {
1015
+ return /* @__PURE__ */ jsx(FaviconLinks, {
1016
+ assets: restunnelFaviconAssets,
1017
+ manifest: props.manifest
1018
+ });
1019
+ }
1020
+ function SeamFaviconHead(props = {}) {
1021
+ return /* @__PURE__ */ jsx(FaviconLinks, {
1022
+ assets: seamFaviconAssets,
1023
+ manifest: props.manifest
1024
+ });
1025
+ }
1026
+ function SlidesFaviconHead(props = {}) {
1027
+ return /* @__PURE__ */ jsx(FaviconLinks, {
1028
+ assets: slidesFaviconAssets,
1029
+ manifest: props.manifest
1030
+ });
1031
+ }
1032
+ //#endregion
1033
+ //#region src/products/_internal.tsx
1034
+ const monogramLineStyles = {
1035
+ fontFamily: "display",
1036
+ fontWeight: 900,
1037
+ fontSize: "17px",
1038
+ textTransform: "uppercase",
1039
+ letterSpacing: "-0.02em",
1040
+ lineHeight: "0.82"
1041
+ };
1042
+ function ProductIcon({ top, bottom }) {
1043
+ return /* @__PURE__ */ jsx(Flex, {
1044
+ w: "44px",
1045
+ h: "44px",
1046
+ borderRadius: "22%",
1047
+ bg: "chan.bg.soft",
1048
+ border: "1px solid",
1049
+ borderColor: "chan.border",
1050
+ align: "center",
1051
+ justify: "center",
1052
+ flexShrink: 0,
1053
+ children: /* @__PURE__ */ jsxs(Flex, {
1054
+ direction: "column",
1055
+ children: [/* @__PURE__ */ jsx(Text, {
1056
+ as: "span",
1057
+ color: "chan.text",
1058
+ ...monogramLineStyles,
1059
+ children: top
1060
+ }), /* @__PURE__ */ jsx(Text, {
1061
+ as: "span",
1062
+ color: "chan.orange",
1063
+ ...monogramLineStyles,
1064
+ children: bottom
1065
+ })]
1066
+ })
1067
+ });
1068
+ }
1069
+ function ProductWordmark({ fontSize = "24px", color = "chan.text", prefix, terminal, ...rest }) {
1070
+ return /* @__PURE__ */ jsxs(Text, {
1071
+ fontFamily: "display",
1072
+ fontWeight: 900,
1073
+ fontSize,
1074
+ letterSpacing: "-0.02em",
1075
+ textTransform: "uppercase",
1076
+ lineHeight: 1,
1077
+ color,
1078
+ ...rest,
1079
+ children: [prefix, /* @__PURE__ */ jsx(Box, {
1080
+ as: "span",
1081
+ color: "chan.orange",
1082
+ children: terminal
1083
+ })]
1084
+ });
1085
+ }
1086
+ //#endregion
1087
+ //#region src/products/ensure/EnsureIcon.tsx
1088
+ function EnsureIcon() {
1089
+ return /* @__PURE__ */ jsx(ProductIcon, {
1090
+ top: "EN",
1091
+ bottom: "SU"
1092
+ });
1093
+ }
1094
+ //#endregion
1095
+ //#region src/products/ensure/EnsureWordmark.tsx
1096
+ function EnsureWordmark(props) {
1097
+ return /* @__PURE__ */ jsx(ProductWordmark, {
1098
+ prefix: "ENSUR",
1099
+ terminal: "E",
1100
+ ...props
1101
+ });
1102
+ }
1103
+ //#endregion
1104
+ //#region src/products/entropy/EntropyIcon.tsx
1105
+ function EntropyIcon() {
1106
+ return /* @__PURE__ */ jsx(ProductIcon, {
1107
+ top: "EN",
1108
+ bottom: "TR"
1109
+ });
1110
+ }
1111
+ //#endregion
1112
+ //#region src/products/entropy/EntropyWordmark.tsx
1113
+ function EntropyWordmark(props) {
1114
+ return /* @__PURE__ */ jsx(ProductWordmark, {
1115
+ prefix: "ENTROP",
1116
+ terminal: "Y",
1117
+ ...props
1118
+ });
1119
+ }
1120
+ //#endregion
1121
+ //#region src/products/restunnel/RestunnelIcon.tsx
1122
+ function RestunnelIcon() {
1123
+ return /* @__PURE__ */ jsx(ProductIcon, {
1124
+ top: "RE",
1125
+ bottom: "TU"
1126
+ });
1127
+ }
1128
+ //#endregion
1129
+ //#region src/products/restunnel/RestunnelWordmark.tsx
1130
+ function RestunnelWordmark(props) {
1131
+ return /* @__PURE__ */ jsx(ProductWordmark, {
1132
+ prefix: "RESTUNNE",
1133
+ terminal: "L",
1134
+ ...props
1135
+ });
1136
+ }
1137
+ //#endregion
1138
+ //#region src/products/seam/SeamIcon.tsx
1139
+ function SeamIcon() {
1140
+ return /* @__PURE__ */ jsx(ProductIcon, {
1141
+ top: "SE",
1142
+ bottom: "AM"
1143
+ });
1144
+ }
1145
+ //#endregion
1146
+ //#region src/products/seam/SeamWordmark.tsx
1147
+ function SeamWordmark(props) {
1148
+ return /* @__PURE__ */ jsx(ProductWordmark, {
1149
+ prefix: "SEA",
1150
+ terminal: "M",
1151
+ ...props
1152
+ });
1153
+ }
1154
+ //#endregion
1155
+ //#region src/products/slides/SlidesIcon.tsx
1156
+ function SlidesIcon() {
1157
+ return /* @__PURE__ */ jsx(ProductIcon, {
1158
+ top: "SL",
1159
+ bottom: "ID"
1160
+ });
1161
+ }
1162
+ //#endregion
1163
+ //#region src/products/slides/SlidesWordmark.tsx
1164
+ function SlidesWordmark(props) {
1165
+ return /* @__PURE__ */ jsx(ProductWordmark, {
1166
+ prefix: "SLIDE",
1167
+ terminal: "S",
1168
+ ...props
1169
+ });
1170
+ }
1171
+ //#endregion
1172
+ //#region src/products/index.ts
1173
+ const PRODUCT_ICONS = {
1174
+ ensure: EnsureIcon,
1175
+ entropy: EntropyIcon,
1176
+ restunnel: RestunnelIcon,
1177
+ seam: SeamIcon,
1178
+ slides: SlidesIcon
1179
+ };
1180
+ const PRODUCT_WORDMARKS = {
1181
+ ensure: EnsureWordmark,
1182
+ entropy: EntropyWordmark,
1183
+ restunnel: RestunnelWordmark,
1184
+ seam: SeamWordmark,
1185
+ slides: SlidesWordmark
1186
+ };
1187
+ //#endregion
926
1188
  //#region src/TokenShowcase.tsx
927
1189
  function Swatch({ name, token, hex }) {
928
1190
  return /* @__PURE__ */ jsxs(Box, {
@@ -1766,6 +2028,9 @@ const system = createSystem(defaultConfig, defineConfig({
1766
2028
  "chan.green": { value: "#3a8c5c" },
1767
2029
  "chan.green.bg": { value: "rgba(58, 140, 92, 0.08)" },
1768
2030
  "chan.green.border": { value: "rgba(58, 140, 92, 0.20)" },
2031
+ "chan.teal": { value: "#2f9c9c" },
2032
+ "chan.teal.bg": { value: "rgba(47, 156, 156, 0.08)" },
2033
+ "chan.teal.border": { value: "rgba(47, 156, 156, 0.20)" },
1769
2034
  "chan.yellow": { value: "#a88000" },
1770
2035
  "chan.yellow.bg": { value: "rgba(200, 160, 0, 0.07)" },
1771
2036
  "chan.yellow.border": { value: "rgba(200, 160, 0, 0.15)" },
@@ -2032,4 +2297,4 @@ const system = createSystem(defaultConfig, defineConfig({
2032
2297
  }
2033
2298
  }));
2034
2299
  //#endregion
2035
- export { ColorModeButton, DeckCard, SlideControls, SlideLayoutComponent as SlideLayout, SlideViewer, Splash, TokenShowcase, Topbar, Wordmark, getSlideComponents, system };
2300
+ export { ChanFaviconHead, ColorModeButton, DeckCard, EnsureFaviconHead, EnsureIcon, EnsureWordmark, EntropyFaviconHead, EntropyIcon, EntropyWordmark, PRODUCT_ICONS, PRODUCT_WORDMARKS, RestunnelFaviconHead, RestunnelIcon, RestunnelWordmark, SeamFaviconHead, SeamIcon, SeamWordmark, SlideControls, SlideLayoutComponent as SlideLayout, SlideViewer, SlidesFaviconHead, SlidesIcon, SlidesWordmark, Splash, TokenShowcase, Topbar, Wordmark, chanFaviconAssets, ensureFaviconAssets, entropyFaviconAssets, getSlideComponents, restunnelFaviconAssets, seamFaviconAssets, slidesFaviconAssets, system };
package/package.json CHANGED
@@ -1,29 +1,36 @@
1
1
  {
2
2
  "name": "@chan.run/design",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Shared Chakra UI v3 theme and component library for chan.run",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
+ "main": "./dist/index.mjs",
8
+ "types": "./dist/index.d.mts",
7
9
  "exports": {
8
10
  ".": {
9
- "import": "./dist/index.mjs",
10
- "types": "./dist/index.d.mts"
11
- }
11
+ "types": "./dist/index.d.mts",
12
+ "import": "./dist/index.mjs"
13
+ },
14
+ "./favicons/*": "./assets/favicons/*",
15
+ "./svg/*": "./assets/svg/*"
12
16
  },
13
- "main": "./dist/index.mjs",
14
- "types": "./dist/index.d.mts",
15
17
  "files": [
16
- "dist"
18
+ "dist",
19
+ "assets"
17
20
  ],
18
21
  "peerDependencies": {
19
- "@chakra-ui/react": "3.34.0",
22
+ "@chakra-ui/react": "^3.35.0",
20
23
  "next-themes": "*",
21
- "react": "19.2.4"
24
+ "react": "^19.0.0"
22
25
  },
23
26
  "devDependencies": {
24
- "@chakra-ui/cli": "3.34.0",
27
+ "@chakra-ui/cli": "3.35.0",
28
+ "@types/opentype.js": "^1.3.9",
25
29
  "@types/react": "19.2.14",
30
+ "favicons": "^7.2.0",
31
+ "opentype.js": "^1.3.4",
26
32
  "tsdown": "^0.21.7",
33
+ "tsx": "^4.21.0",
27
34
  "typescript": "5.9.3"
28
35
  },
29
36
  "repository": {
@@ -33,6 +40,9 @@
33
40
  },
34
41
  "scripts": {
35
42
  "build": "tsdown",
36
- "typecheck": "tsc --noEmit"
43
+ "typecheck": "tsc --noEmit && tsc -p scripts",
44
+ "export-svg": "tsx scripts/export-svg.ts",
45
+ "gen-favicons": "tsx scripts/gen-favicons.ts",
46
+ "gen-brand": "pnpm export-svg && pnpm gen-favicons"
37
47
  }
38
48
  }