@atme-lab/ui-kit 0.1.19 → 0.1.20

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 (294) hide show
  1. package/dist/index.cjs10.js +1 -1
  2. package/dist/index.cjs11.js +1 -1
  3. package/dist/index.cjs12.js +1 -1
  4. package/dist/index.cjs13.js +1 -1
  5. package/dist/index.cjs14.js +1 -1
  6. package/dist/index.cjs15.js +1 -1
  7. package/dist/index.cjs16.js +1 -1
  8. package/dist/index.cjs17.js +1 -1
  9. package/dist/index.cjs18.js +1 -1
  10. package/dist/index.cjs19.js +1 -1
  11. package/dist/index.cjs20.js +1 -1
  12. package/dist/index.cjs21.js +1 -1
  13. package/dist/index.cjs22.js +1 -1
  14. package/dist/index.cjs23.js +1 -1
  15. package/dist/index.cjs24.js +1 -1
  16. package/dist/index.cjs25.js +1 -1
  17. package/dist/index.cjs26.js +1 -1
  18. package/dist/index.cjs27.js +1 -1
  19. package/dist/index.cjs28.js +1 -1
  20. package/dist/index.cjs29.js +1 -1
  21. package/dist/index.cjs30.js +1 -1
  22. package/dist/index.cjs36.js +1 -1
  23. package/dist/index.cjs38.js +1 -1
  24. package/dist/index.cjs38.js.map +1 -1
  25. package/dist/index.cjs385.js +1 -1
  26. package/dist/index.cjs386.js +1 -1
  27. package/dist/index.cjs386.js.map +1 -1
  28. package/dist/index.cjs387.js +1 -1
  29. package/dist/index.cjs387.js.map +1 -1
  30. package/dist/index.cjs388.js +1 -1
  31. package/dist/index.cjs388.js.map +1 -1
  32. package/dist/index.cjs389.js +1 -1
  33. package/dist/index.cjs389.js.map +1 -1
  34. package/dist/index.cjs39.js +1 -1
  35. package/dist/index.cjs390.js +1 -1
  36. package/dist/index.cjs390.js.map +1 -1
  37. package/dist/index.cjs391.js +1 -1
  38. package/dist/index.cjs391.js.map +1 -1
  39. package/dist/index.cjs392.js +1 -1
  40. package/dist/index.cjs392.js.map +1 -1
  41. package/dist/index.cjs40.js +1 -9
  42. package/dist/index.cjs40.js.map +1 -1
  43. package/dist/index.cjs41.js +1 -22
  44. package/dist/index.cjs41.js.map +1 -1
  45. package/dist/index.cjs42.js +9 -1
  46. package/dist/index.cjs42.js.map +1 -1
  47. package/dist/index.cjs420.js +1 -1
  48. package/dist/index.cjs421.js +1 -1
  49. package/dist/index.cjs422.js +1 -1
  50. package/dist/index.cjs423.js +1 -1
  51. package/dist/index.cjs424.js +1 -1
  52. package/dist/index.cjs425.js +1 -1
  53. package/dist/index.cjs426.js +1 -1
  54. package/dist/index.cjs428.js +1 -1
  55. package/dist/index.cjs43.js +22 -1
  56. package/dist/index.cjs43.js.map +1 -1
  57. package/dist/index.cjs430.js +1 -1
  58. package/dist/index.cjs433.js +1 -1
  59. package/dist/index.cjs438.js +1 -1
  60. package/dist/index.cjs438.js.map +1 -1
  61. package/dist/index.cjs439.js +1 -1
  62. package/dist/index.cjs439.js.map +1 -1
  63. package/dist/index.cjs44.js +1 -1
  64. package/dist/index.cjs440.js +1 -1
  65. package/dist/index.cjs440.js.map +1 -1
  66. package/dist/index.cjs441.js +1 -1
  67. package/dist/index.cjs441.js.map +1 -1
  68. package/dist/index.cjs442.js +1 -1
  69. package/dist/index.cjs442.js.map +1 -1
  70. package/dist/index.cjs443.js +1 -1
  71. package/dist/index.cjs443.js.map +1 -1
  72. package/dist/index.cjs444.js +1 -1
  73. package/dist/index.cjs444.js.map +1 -1
  74. package/dist/index.cjs445.js +1 -1
  75. package/dist/index.cjs445.js.map +1 -1
  76. package/dist/index.cjs446.js +1 -1
  77. package/dist/index.cjs446.js.map +1 -1
  78. package/dist/index.cjs447.js +1 -1
  79. package/dist/index.cjs447.js.map +1 -1
  80. package/dist/index.cjs448.js +1 -1
  81. package/dist/index.cjs448.js.map +1 -1
  82. package/dist/index.cjs449.js +1 -1
  83. package/dist/index.cjs449.js.map +1 -1
  84. package/dist/index.cjs45.js +1 -1
  85. package/dist/index.cjs450.js +1 -1
  86. package/dist/index.cjs450.js.map +1 -1
  87. package/dist/index.cjs451.js +1 -1
  88. package/dist/index.cjs451.js.map +1 -1
  89. package/dist/index.cjs452.js +1 -1
  90. package/dist/index.cjs452.js.map +1 -1
  91. package/dist/index.cjs46.js +1 -1
  92. package/dist/index.cjs47.js +1 -1
  93. package/dist/index.cjs48.js +1 -1
  94. package/dist/index.cjs48.js.map +1 -1
  95. package/dist/index.cjs49.js +1 -1
  96. package/dist/index.cjs5.js +1 -1
  97. package/dist/index.cjs5.js.map +1 -1
  98. package/dist/index.cjs50.js +1 -1
  99. package/dist/index.cjs51.js +1 -1
  100. package/dist/index.cjs51.js.map +1 -1
  101. package/dist/index.cjs52.js +1 -1
  102. package/dist/index.cjs52.js.map +1 -1
  103. package/dist/index.cjs53.js +1 -1
  104. package/dist/index.cjs53.js.map +1 -1
  105. package/dist/index.cjs54.js +1 -1
  106. package/dist/index.cjs54.js.map +1 -1
  107. package/dist/index.cjs55.js +1 -1
  108. package/dist/index.cjs56.js +1 -1
  109. package/dist/index.cjs56.js.map +1 -1
  110. package/dist/index.cjs57.js +1 -1
  111. package/dist/index.cjs58.js +1 -1
  112. package/dist/index.cjs59.js +1 -1
  113. package/dist/index.cjs59.js.map +1 -1
  114. package/dist/index.cjs60.js +1 -1
  115. package/dist/index.cjs60.js.map +1 -1
  116. package/dist/index.cjs61.js +1 -1
  117. package/dist/index.cjs62.js +1 -1
  118. package/dist/index.cjs63.js +1 -1
  119. package/dist/index.cjs63.js.map +1 -1
  120. package/dist/index.cjs64.js +1 -1
  121. package/dist/index.cjs64.js.map +1 -1
  122. package/dist/index.cjs65.js +1 -1
  123. package/dist/index.cjs65.js.map +1 -1
  124. package/dist/index.cjs66.js +1 -1
  125. package/dist/index.cjs67.js +1 -1
  126. package/dist/index.cjs67.js.map +1 -1
  127. package/dist/index.cjs68.js +1 -1
  128. package/dist/index.cjs69.js +1 -1
  129. package/dist/index.cjs69.js.map +1 -1
  130. package/dist/index.cjs70.js +1 -1
  131. package/dist/index.cjs71.js +1 -1
  132. package/dist/index.cjs71.js.map +1 -1
  133. package/dist/index.cjs72.js +1 -1
  134. package/dist/index.cjs73.js +1 -1
  135. package/dist/index.cjs73.js.map +1 -1
  136. package/dist/index.cjs86.js +1 -1
  137. package/dist/index.cjs9.js +1 -1
  138. package/dist/index.esm10.js +3 -3
  139. package/dist/index.esm11.js +2 -2
  140. package/dist/index.esm12.js +4 -4
  141. package/dist/index.esm13.js +2 -2
  142. package/dist/index.esm14.js +2 -2
  143. package/dist/index.esm15.js +2 -2
  144. package/dist/index.esm16.js +2 -2
  145. package/dist/index.esm17.js +2 -2
  146. package/dist/index.esm18.js +2 -2
  147. package/dist/index.esm19.js +2 -2
  148. package/dist/index.esm20.js +2 -2
  149. package/dist/index.esm21.js +3 -3
  150. package/dist/index.esm22.js +3 -3
  151. package/dist/index.esm23.js +2 -2
  152. package/dist/index.esm24.js +3 -3
  153. package/dist/index.esm25.js +2 -2
  154. package/dist/index.esm26.js +2 -2
  155. package/dist/index.esm27.js +2 -2
  156. package/dist/index.esm28.js +3 -3
  157. package/dist/index.esm29.js +2 -2
  158. package/dist/index.esm30.js +4 -4
  159. package/dist/index.esm36.js +1 -1
  160. package/dist/index.esm38.js +5 -8
  161. package/dist/index.esm38.js.map +1 -1
  162. package/dist/index.esm385.js +2 -2
  163. package/dist/index.esm386.js +29 -5
  164. package/dist/index.esm386.js.map +1 -1
  165. package/dist/index.esm387.js +24 -25
  166. package/dist/index.esm387.js.map +1 -1
  167. package/dist/index.esm388.js +50 -29
  168. package/dist/index.esm388.js.map +1 -1
  169. package/dist/index.esm389.js +7 -24
  170. package/dist/index.esm389.js.map +1 -1
  171. package/dist/index.esm39.js +41 -2
  172. package/dist/index.esm39.js.map +1 -1
  173. package/dist/index.esm390.js +7 -50
  174. package/dist/index.esm390.js.map +1 -1
  175. package/dist/index.esm391.js +25 -7
  176. package/dist/index.esm391.js.map +1 -1
  177. package/dist/index.esm392.js +5 -7
  178. package/dist/index.esm392.js.map +1 -1
  179. package/dist/index.esm40.js +7 -25
  180. package/dist/index.esm40.js.map +1 -1
  181. package/dist/index.esm41.js +2 -602
  182. package/dist/index.esm41.js.map +1 -1
  183. package/dist/index.esm42.js +26 -5
  184. package/dist/index.esm42.js.map +1 -1
  185. package/dist/index.esm420.js +1 -1
  186. package/dist/index.esm421.js +2 -2
  187. package/dist/index.esm422.js +3 -3
  188. package/dist/index.esm423.js +3 -3
  189. package/dist/index.esm424.js +1 -1
  190. package/dist/index.esm425.js +2 -2
  191. package/dist/index.esm426.js +1 -1
  192. package/dist/index.esm428.js +1 -1
  193. package/dist/index.esm43.js +602 -65
  194. package/dist/index.esm43.js.map +1 -1
  195. package/dist/index.esm430.js +7 -7
  196. package/dist/index.esm433.js +1 -1
  197. package/dist/index.esm438.js +18 -5
  198. package/dist/index.esm438.js.map +1 -1
  199. package/dist/index.esm439.js +16 -9
  200. package/dist/index.esm439.js.map +1 -1
  201. package/dist/index.esm44.js +42 -36
  202. package/dist/index.esm44.js.map +1 -1
  203. package/dist/index.esm440.js +11 -6
  204. package/dist/index.esm440.js.map +1 -1
  205. package/dist/index.esm441.js +4 -3
  206. package/dist/index.esm441.js.map +1 -1
  207. package/dist/index.esm442.js +3 -84
  208. package/dist/index.esm442.js.map +1 -1
  209. package/dist/index.esm443.js +27 -34
  210. package/dist/index.esm443.js.map +1 -1
  211. package/dist/index.esm444.js +30 -27
  212. package/dist/index.esm444.js.map +1 -1
  213. package/dist/index.esm445.js +20 -13
  214. package/dist/index.esm445.js.map +1 -1
  215. package/dist/index.esm446.js +3 -16
  216. package/dist/index.esm446.js.map +1 -1
  217. package/dist/index.esm447.js +5 -11
  218. package/dist/index.esm447.js.map +1 -1
  219. package/dist/index.esm448.js +9 -4
  220. package/dist/index.esm448.js.map +1 -1
  221. package/dist/index.esm449.js +6 -3
  222. package/dist/index.esm449.js.map +1 -1
  223. package/dist/index.esm45.js +28 -8
  224. package/dist/index.esm45.js.map +1 -1
  225. package/dist/index.esm450.js +3 -33
  226. package/dist/index.esm450.js.map +1 -1
  227. package/dist/index.esm451.js +85 -26
  228. package/dist/index.esm451.js.map +1 -1
  229. package/dist/index.esm452.js +37 -3
  230. package/dist/index.esm452.js.map +1 -1
  231. package/dist/index.esm46.js +64 -8
  232. package/dist/index.esm46.js.map +1 -1
  233. package/dist/index.esm47.js +11 -47
  234. package/dist/index.esm48.js +30 -11
  235. package/dist/index.esm48.js.map +1 -1
  236. package/dist/index.esm49.js +39 -5
  237. package/dist/index.esm49.js.map +1 -1
  238. package/dist/index.esm5.js +2 -2
  239. package/dist/index.esm5.js.map +1 -1
  240. package/dist/index.esm50.js +16 -32
  241. package/dist/index.esm50.js.map +1 -1
  242. package/dist/index.esm51.js +16 -7
  243. package/dist/index.esm51.js.map +1 -1
  244. package/dist/index.esm52.js +5 -9
  245. package/dist/index.esm52.js.map +1 -1
  246. package/dist/index.esm53.js +14 -7
  247. package/dist/index.esm53.js.map +1 -1
  248. package/dist/index.esm54.js +87 -43
  249. package/dist/index.esm54.js.map +1 -1
  250. package/dist/index.esm55.js +32 -8
  251. package/dist/index.esm55.js.map +1 -1
  252. package/dist/index.esm56.js +41 -28
  253. package/dist/index.esm56.js.map +1 -1
  254. package/dist/index.esm57.js +36 -40
  255. package/dist/index.esm57.js.map +1 -1
  256. package/dist/index.esm58.js +6 -10
  257. package/dist/index.esm58.js.map +1 -1
  258. package/dist/index.esm59.js +9 -30
  259. package/dist/index.esm59.js.map +1 -1
  260. package/dist/index.esm60.js +7 -41
  261. package/dist/index.esm60.js.map +1 -1
  262. package/dist/index.esm61.js +8 -39
  263. package/dist/index.esm61.js.map +1 -1
  264. package/dist/index.esm62.js +8 -28
  265. package/dist/index.esm62.js.map +1 -1
  266. package/dist/index.esm63.js +85 -17
  267. package/dist/index.esm63.js.map +1 -1
  268. package/dist/index.esm64.js +35 -16
  269. package/dist/index.esm64.js.map +1 -1
  270. package/dist/index.esm65.js +120 -5
  271. package/dist/index.esm65.js.map +1 -1
  272. package/dist/index.esm66.js +47 -59
  273. package/dist/index.esm66.js.map +1 -1
  274. package/dist/index.esm67.js +11 -85
  275. package/dist/index.esm67.js.map +1 -1
  276. package/dist/index.esm68.js +5 -34
  277. package/dist/index.esm68.js.map +1 -1
  278. package/dist/index.esm69.js +41 -120
  279. package/dist/index.esm69.js.map +1 -1
  280. package/dist/index.esm70.js +8 -40
  281. package/dist/index.esm70.js.map +1 -1
  282. package/dist/index.esm71.js +28 -16
  283. package/dist/index.esm71.js.map +1 -1
  284. package/dist/index.esm72.js +58 -13
  285. package/dist/index.esm72.js.map +1 -1
  286. package/dist/index.esm73.js +16 -87
  287. package/dist/index.esm73.js.map +1 -1
  288. package/dist/index.esm86.js +1 -1
  289. package/dist/index.esm9.js +2 -2
  290. package/dist/server.cjs.js +1 -1
  291. package/dist/server.cjs.js.map +1 -1
  292. package/dist/server.esm.js +2 -2
  293. package/dist/server.esm.js.map +1 -1
  294. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"server.cjs.js","sources":["../src/tokens/themes/baseTheme.ts","../src/tokens/themes/lightTheme.ts","../src/tokens/themes/darkTheme.ts","../src/tokens/generate-css-vars.ts","../src/utils/deepMerge.ts","../src/tokens/utils.ts","../src/server.ts"],"sourcesContent":["import type { Theme } from '../types';\n\n\nexport const baseTheme: Omit<Theme, 'palette'> = {\n spacing: {\n unit: 4,\n },\n typography: {\n fontFamily: '\"Martian Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n base: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n shadows: {\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n base: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n none: 'none',\n },\n border: {\n base: '2px'\n },\n borderRadius: {\n none: '0',\n round: '50%',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n full: '9999px',\n },\n transitions: {\n duration: {\n fast: '150ms',\n base: '200ms',\n slow: '300ms',\n verySlow: '500ms',\n },\n easing: {\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n easeOut: 'cubic-bezier(0, 0, 0.2, 1)',\n },\n },\n zIndex: {\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n modalBackdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n },\n} as const;\n\n","import type { Theme } from '../types';\nimport { baseTheme } from './baseTheme';\n\nexport const lightTheme = {\n ...baseTheme,\n palette: {\n primary: {\n main: '#a9d0e7',\n hover: '#96c4de',\n active: '#7eb3d4',\n contrastText: '#171717',\n },\n secondary: {\n main: '#c8d69b',\n hover: '#d4e0b0',\n active: '#b8c882',\n contrastText: '#343b1b',\n },\n error: {\n main: '#ef4444',\n hover: '#f87171',\n active: '#dc2626',\n },\n warning: {\n main: '#f59e0b',\n hover: '#fbbf24',\n active: '#d97706',\n },\n success: {\n main: '#22c55e',\n hover: '#4ade80',\n active: '#16a34a',\n },\n text: {\n primary: '#24292e',\n secondary: '#5a6342',\n disabled: '#a3a3a3',\n },\n background: {\n default: '#fbfcee',\n accent: '#f6e6a5',\n paper: '#ffffff',\n },\n border: {\n default: '#c8d69b',\n subtle: '#e5e5e5',\n strong: '#5a6342',\n },\n },\n} satisfies Theme;\n\n","import type { Theme } from '../types';\nimport { baseTheme } from './baseTheme';\n\n/**\n * Темная тема\n * Расширяет базовую тему, добавляя темную цветовую палитру\n */\nexport const darkTheme = {\n ...baseTheme,\n palette: {\n primary: {\n main: '#6eb3e0',\n hover: '#85c4ed',\n active: '#5a9fd4',\n contrastText: '#ffffff',\n },\n secondary: {\n main: '#65a8d2',\n hover: '#b8c88a',\n active: '#96a85e',\n contrastText: '#0a0a0a',\n },\n error: {\n main: '#ef4444',\n hover: '#f87171',\n active: '#dc2626',\n },\n warning: {\n main: '#f59e0b',\n hover: '#fbbf24',\n active: '#d97706',\n },\n success: {\n main: '#22c55e',\n hover: '#4ade80',\n active: '#16a34a',\n },\n text: {\n primary: '#ffffff',\n secondary: '#e6e6e6',\n disabled: '#6b6b6b',\n },\n background: {\n default: '#0a0a0a',\n accent: '#141414',\n paper: '#1a1a1a',\n },\n border: {\n default: '#404040',\n subtle: '#2a2a2a',\n strong: '#525252',\n },\n },\n} satisfies Theme;\n\n","import type { Theme } from './types';\n\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction pathToCssVarName(path: string[]): string {\n return `--${path.join('-')}`;\n}\n\nfunction traverseObject(\n obj: unknown,\n path: string[],\n vars: Record<string, string>\n): void {\n if (obj === null || obj === undefined) {\n return;\n }\n\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {\n const varName = pathToCssVarName(path);\n vars[varName] = String(obj);\n return;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n traverseObject(item, [...path, String(index)], vars);\n });\n return;\n }\n\n if (typeof obj === 'object') {\n Object.entries(obj).forEach(([key, value]) => {\n const kebabKey = camelToKebab(key);\n traverseObject(value, [...path, kebabKey], vars);\n });\n }\n}\n\nexport function themeToCssVars(theme: Theme): Record<string, string> {\n const vars: Record<string, string> = {};\n traverseObject(theme, [], vars);\n return vars;\n}\n","type DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] };\n\nexport function deepMerge<T>(target: T, source: DeepPartial<T>): T {\n if (source === null || source === undefined) {\n return target;\n }\n\n if (typeof source !== 'object' || Array.isArray(source)) {\n return source as T;\n }\n\n if (typeof target !== 'object' || Array.isArray(target)) {\n return source as T;\n }\n\n const result = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceValue = (source as Record<string, unknown>)[key];\n const targetValue = (target as Record<string, unknown>)[key];\n\n if (\n sourceValue !== null &&\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue) &&\n targetValue !== null\n ) {\n (result as Record<string, unknown>)[key] = deepMerge(targetValue, sourceValue);\n } else {\n (result as Record<string, unknown>)[key] = sourceValue;\n }\n });\n\n return result;\n}\n\n","import type { Theme } from './types';\nimport { deepMerge } from '../utils';\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport function mergeTheme(\n baseTheme: Theme,\n overrides: DeepPartial<Theme>\n): Theme {\n return deepMerge(baseTheme, overrides);\n}\n\nexport function getSpacingVar(\n spacing: number | string | undefined\n): string | undefined {\n if (spacing === undefined) return undefined;\n\n if (typeof spacing === 'number') {\n return `${spacing * 4}px`;\n }\n\n return spacing;\n}\n","import type { Theme } from './tokens/types';\nimport type { DeepPartial } from './tokens/utils';\nimport { darkTheme, lightTheme } from './tokens/themes';\nimport { themeToCssVars } from './tokens/generate-css-vars';\nimport { mergeTheme } from './tokens/utils';\n\nexport { darkTheme, lightTheme, baseTheme } from './tokens/themes';\nexport { themeToCssVars } from './tokens/generate-css-vars';\nexport { mergeTheme, type DeepPartial } from './tokens/utils';\nexport type { Theme } from './tokens/types';\n\nexport type ThemeMode = 'light' | 'dark';\n\nfunction cssVarsToBlock(vars: Record<string, string>): string {\n return Object.entries(vars)\n .map(([key, value]) => `${key}:${value}`)\n .join(';');\n}\n\n/**\n * Возвращает критический CSS в формате data-theme для SSR.\n * Вставьте результат в <style> и добавьте data-theme=\"light\"|\"dark\" на корневой элемент.\n *\n * @param mode — 'light' | 'dark'\n */\nexport function getCriticalThemeCss(mode: ThemeMode): string;\n\n/**\n * @param theme — объект темы (legacy). Определяется light/dark/custom по содержимому.\n */\nexport function getCriticalThemeCss(theme?: Theme | DeepPartial<Theme>): string;\n\nexport function getCriticalThemeCss(\n modeOrTheme?: ThemeMode | Theme | DeepPartial<Theme>\n): string {\n const lightVars = cssVarsToBlock(themeToCssVars(lightTheme));\n const darkVars = cssVarsToBlock(themeToCssVars(darkTheme));\n\n if (modeOrTheme === 'light' || modeOrTheme === 'dark') {\n return `[data-theme=\"light\"]{${lightVars}}[data-theme=\"dark\"]{${darkVars}}`;\n }\n\n const resolvedTheme: Theme = modeOrTheme\n ? modeOrTheme &&\n typeof modeOrTheme === 'object' &&\n 'palette' in modeOrTheme &&\n modeOrTheme.palette &&\n 'primary' in modeOrTheme.palette\n ? (modeOrTheme as Theme)\n : mergeTheme(darkTheme, modeOrTheme as DeepPartial<Theme>)\n : darkTheme;\n\n const themeName =\n resolvedTheme === lightTheme ? 'light' : resolvedTheme === darkTheme ? 'dark' : 'custom';\n const customBlock =\n themeName === 'custom'\n ? `[data-theme=\"custom\"]{${cssVarsToBlock(themeToCssVars(resolvedTheme))}}`\n : '';\n\n return `[data-theme=\"light\"]{${lightVars}}[data-theme=\"dark\"]{${darkVars}}${customBlock}`;\n}\n"],"names":["baseTheme","lightTheme","darkTheme","camelToKebab","str","pathToCssVarName","path","traverseObject","obj","vars","varName","item","index","key","value","kebabKey","themeToCssVars","theme","deepMerge","target","source","result","sourceValue","targetValue","mergeTheme","overrides","cssVarsToBlock","getCriticalThemeCss","modeOrTheme","lightVars","darkVars","resolvedTheme","customBlock"],"mappings":"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"}
1
+ {"version":3,"file":"server.cjs.js","sources":["../src/tokens/themes/baseTheme.ts","../src/tokens/themes/lightTheme.ts","../src/tokens/themes/darkTheme.ts","../src/tokens/generate-css-vars.ts","../src/utils/deepMerge.ts","../src/tokens/utils.ts","../src/server.ts"],"sourcesContent":["import type { Theme } from '../types';\n\n\nexport const baseTheme: Omit<Theme, 'palette'> = {\n spacing: {\n unit: 4,\n },\n typography: {\n fontFamily: '\"Martian Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n base: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.75rem',\n '4xl': '2.5rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n shadows: {\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n base: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n none: 'none',\n },\n border: {\n base: '2px'\n },\n borderRadius: {\n none: '0',\n round: '50%',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n full: '9999px',\n },\n transitions: {\n duration: {\n fast: '150ms',\n base: '200ms',\n slow: '300ms',\n verySlow: '500ms',\n },\n easing: {\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n easeOut: 'cubic-bezier(0, 0, 0.2, 1)',\n },\n },\n zIndex: {\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n modalBackdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n },\n} as const;\n\n","import type { Theme } from '../types';\nimport { baseTheme } from './baseTheme';\n\nexport const lightTheme = {\n ...baseTheme,\n palette: {\n primary: {\n main: '#a9d0e7',\n hover: '#96c4de',\n active: '#7eb3d4',\n contrastText: '#171717',\n },\n secondary: {\n main: '#c8d69b',\n hover: '#d4e0b0',\n active: '#b8c882',\n contrastText: '#343b1b',\n },\n error: {\n main: '#ef4444',\n hover: '#f87171',\n active: '#dc2626',\n },\n warning: {\n main: '#f59e0b',\n hover: '#fbbf24',\n active: '#d97706',\n },\n success: {\n main: '#22c55e',\n hover: '#4ade80',\n active: '#16a34a',\n },\n text: {\n primary: '#24292e',\n secondary: '#5a6342',\n disabled: '#a3a3a3',\n },\n background: {\n default: '#fbfcee',\n accent: '#f6e6a5',\n paper: '#ffffff',\n },\n border: {\n default: '#c8d69b',\n subtle: '#e5e5e5',\n strong: '#5a6342',\n },\n },\n} satisfies Theme;\n\n","import type { Theme } from '../types';\nimport { baseTheme } from './baseTheme';\n\n/**\n * Темная тема\n * Расширяет базовую тему, добавляя темную цветовую палитру\n */\nexport const darkTheme = {\n ...baseTheme,\n palette: {\n primary: {\n main: '#6eb3e0',\n hover: '#85c4ed',\n active: '#5a9fd4',\n contrastText: '#ffffff',\n },\n secondary: {\n main: '#65a8d2',\n hover: '#b8c88a',\n active: '#96a85e',\n contrastText: '#0a0a0a',\n },\n error: {\n main: '#ef4444',\n hover: '#f87171',\n active: '#dc2626',\n },\n warning: {\n main: '#f59e0b',\n hover: '#fbbf24',\n active: '#d97706',\n },\n success: {\n main: '#22c55e',\n hover: '#4ade80',\n active: '#16a34a',\n },\n text: {\n primary: '#ffffff',\n secondary: '#e6e6e6',\n disabled: '#6b6b6b',\n },\n background: {\n default: '#0a0a0a',\n accent: '#141414',\n paper: '#1a1a1a',\n },\n border: {\n default: '#404040',\n subtle: '#2a2a2a',\n strong: '#525252',\n },\n },\n} satisfies Theme;\n\n","import type { Theme } from './types';\n\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction pathToCssVarName(path: string[]): string {\n return `--${path.join('-')}`;\n}\n\nfunction traverseObject(\n obj: unknown,\n path: string[],\n vars: Record<string, string>\n): void {\n if (obj === null || obj === undefined) {\n return;\n }\n\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {\n const varName = pathToCssVarName(path);\n vars[varName] = String(obj);\n return;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n traverseObject(item, [...path, String(index)], vars);\n });\n return;\n }\n\n if (typeof obj === 'object') {\n Object.entries(obj).forEach(([key, value]) => {\n const kebabKey = camelToKebab(key);\n traverseObject(value, [...path, kebabKey], vars);\n });\n }\n}\n\nexport function themeToCssVars(theme: Theme): Record<string, string> {\n const vars: Record<string, string> = {};\n traverseObject(theme, [], vars);\n return vars;\n}\n","type DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] };\n\nexport function deepMerge<T>(target: T, source: DeepPartial<T>): T {\n if (source === null || source === undefined) {\n return target;\n }\n\n if (typeof source !== 'object' || Array.isArray(source)) {\n return source as T;\n }\n\n if (typeof target !== 'object' || Array.isArray(target)) {\n return source as T;\n }\n\n const result = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceValue = (source as Record<string, unknown>)[key];\n const targetValue = (target as Record<string, unknown>)[key];\n\n if (\n sourceValue !== null &&\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue) &&\n targetValue !== null\n ) {\n (result as Record<string, unknown>)[key] = deepMerge(targetValue, sourceValue);\n } else {\n (result as Record<string, unknown>)[key] = sourceValue;\n }\n });\n\n return result;\n}\n\n","import type { Theme } from './types';\nimport { deepMerge } from '../utils';\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport function mergeTheme(\n baseTheme: Theme,\n overrides: DeepPartial<Theme>\n): Theme {\n return deepMerge(baseTheme, overrides);\n}\n\nexport function getSpacingVar(\n spacing: number | string | undefined\n): string | undefined {\n if (spacing === undefined) return undefined;\n\n if (typeof spacing === 'number') {\n return `${spacing * 4}px`;\n }\n\n return spacing;\n}\n","import type { Theme } from './tokens/types';\nimport type { DeepPartial } from './tokens/utils';\nimport { darkTheme, lightTheme } from './tokens/themes';\nimport { themeToCssVars } from './tokens/generate-css-vars';\nimport { mergeTheme } from './tokens/utils';\n\nexport { darkTheme, lightTheme, baseTheme } from './tokens/themes';\nexport { themeToCssVars } from './tokens/generate-css-vars';\nexport { mergeTheme, type DeepPartial } from './tokens/utils';\nexport type { Theme } from './tokens/types';\n\nexport type ThemeMode = 'light' | 'dark';\n\nfunction cssVarsToBlock(vars: Record<string, string>): string {\n return Object.entries(vars)\n .map(([key, value]) => `${key}:${value}`)\n .join(';');\n}\n\n/**\n * Возвращает критический CSS в формате data-theme для SSR.\n * Вставьте результат в <style> и добавьте data-theme=\"light\"|\"dark\" на корневой элемент.\n *\n * @param mode — 'light' | 'dark'\n */\nexport function getCriticalThemeCss(mode: ThemeMode): string;\n\n/**\n * @param theme — объект темы (legacy). Определяется light/dark/custom по содержимому.\n */\nexport function getCriticalThemeCss(theme?: Theme | DeepPartial<Theme>): string;\n\nexport function getCriticalThemeCss(\n modeOrTheme?: ThemeMode | Theme | DeepPartial<Theme>\n): string {\n const lightVars = cssVarsToBlock(themeToCssVars(lightTheme));\n const darkVars = cssVarsToBlock(themeToCssVars(darkTheme));\n\n if (modeOrTheme === 'light' || modeOrTheme === 'dark') {\n return `[data-theme=\"light\"]{${lightVars}}[data-theme=\"dark\"]{${darkVars}}`;\n }\n\n const resolvedTheme: Theme = modeOrTheme\n ? modeOrTheme &&\n typeof modeOrTheme === 'object' &&\n 'palette' in modeOrTheme &&\n modeOrTheme.palette &&\n 'primary' in modeOrTheme.palette\n ? (modeOrTheme as Theme)\n : mergeTheme(darkTheme, modeOrTheme as DeepPartial<Theme>)\n : darkTheme;\n\n const themeName =\n resolvedTheme === lightTheme ? 'light' : resolvedTheme === darkTheme ? 'dark' : 'custom';\n const customBlock =\n themeName === 'custom'\n ? `[data-theme=\"custom\"]{${cssVarsToBlock(themeToCssVars(resolvedTheme))}}`\n : '';\n\n return `[data-theme=\"light\"]{${lightVars}}[data-theme=\"dark\"]{${darkVars}}${customBlock}`;\n}\n"],"names":["baseTheme","lightTheme","darkTheme","camelToKebab","str","pathToCssVarName","path","traverseObject","obj","vars","varName","item","index","key","value","kebabKey","themeToCssVars","theme","deepMerge","target","source","result","sourceValue","targetValue","mergeTheme","overrides","cssVarsToBlock","getCriticalThemeCss","modeOrTheme","lightVars","darkVars","resolvedTheme","customBlock"],"mappings":"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"}
@@ -11,8 +11,8 @@ const p = {
11
11
  lg: "1.125rem",
12
12
  xl: "1.25rem",
13
13
  "2xl": "1.5rem",
14
- "3xl": "1.875rem",
15
- "4xl": "2.25rem"
14
+ "3xl": "1.75rem",
15
+ "4xl": "2.5rem"
16
16
  },
17
17
  fontWeight: {
18
18
  normal: 400,
@@ -1 +1 @@
1
- {"version":3,"file":"server.esm.js","sources":["../src/tokens/themes/baseTheme.ts","../src/tokens/themes/lightTheme.ts","../src/tokens/themes/darkTheme.ts","../src/tokens/generate-css-vars.ts","../src/utils/deepMerge.ts","../src/tokens/utils.ts","../src/server.ts"],"sourcesContent":["import type { Theme } from '../types';\n\n\nexport const baseTheme: Omit<Theme, 'palette'> = {\n spacing: {\n unit: 4,\n },\n typography: {\n fontFamily: '\"Martian Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n base: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n shadows: {\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n base: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n none: 'none',\n },\n border: {\n base: '2px'\n },\n borderRadius: {\n none: '0',\n round: '50%',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n full: '9999px',\n },\n transitions: {\n duration: {\n fast: '150ms',\n base: '200ms',\n slow: '300ms',\n verySlow: '500ms',\n },\n easing: {\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n easeOut: 'cubic-bezier(0, 0, 0.2, 1)',\n },\n },\n zIndex: {\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n modalBackdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n },\n} as const;\n\n","import type { Theme } from '../types';\nimport { baseTheme } from './baseTheme';\n\nexport const lightTheme = {\n ...baseTheme,\n palette: {\n primary: {\n main: '#a9d0e7',\n hover: '#96c4de',\n active: '#7eb3d4',\n contrastText: '#171717',\n },\n secondary: {\n main: '#c8d69b',\n hover: '#d4e0b0',\n active: '#b8c882',\n contrastText: '#343b1b',\n },\n error: {\n main: '#ef4444',\n hover: '#f87171',\n active: '#dc2626',\n },\n warning: {\n main: '#f59e0b',\n hover: '#fbbf24',\n active: '#d97706',\n },\n success: {\n main: '#22c55e',\n hover: '#4ade80',\n active: '#16a34a',\n },\n text: {\n primary: '#24292e',\n secondary: '#5a6342',\n disabled: '#a3a3a3',\n },\n background: {\n default: '#fbfcee',\n accent: '#f6e6a5',\n paper: '#ffffff',\n },\n border: {\n default: '#c8d69b',\n subtle: '#e5e5e5',\n strong: '#5a6342',\n },\n },\n} satisfies Theme;\n\n","import type { Theme } from '../types';\nimport { baseTheme } from './baseTheme';\n\n/**\n * Темная тема\n * Расширяет базовую тему, добавляя темную цветовую палитру\n */\nexport const darkTheme = {\n ...baseTheme,\n palette: {\n primary: {\n main: '#6eb3e0',\n hover: '#85c4ed',\n active: '#5a9fd4',\n contrastText: '#ffffff',\n },\n secondary: {\n main: '#65a8d2',\n hover: '#b8c88a',\n active: '#96a85e',\n contrastText: '#0a0a0a',\n },\n error: {\n main: '#ef4444',\n hover: '#f87171',\n active: '#dc2626',\n },\n warning: {\n main: '#f59e0b',\n hover: '#fbbf24',\n active: '#d97706',\n },\n success: {\n main: '#22c55e',\n hover: '#4ade80',\n active: '#16a34a',\n },\n text: {\n primary: '#ffffff',\n secondary: '#e6e6e6',\n disabled: '#6b6b6b',\n },\n background: {\n default: '#0a0a0a',\n accent: '#141414',\n paper: '#1a1a1a',\n },\n border: {\n default: '#404040',\n subtle: '#2a2a2a',\n strong: '#525252',\n },\n },\n} satisfies Theme;\n\n","import type { Theme } from './types';\n\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction pathToCssVarName(path: string[]): string {\n return `--${path.join('-')}`;\n}\n\nfunction traverseObject(\n obj: unknown,\n path: string[],\n vars: Record<string, string>\n): void {\n if (obj === null || obj === undefined) {\n return;\n }\n\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {\n const varName = pathToCssVarName(path);\n vars[varName] = String(obj);\n return;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n traverseObject(item, [...path, String(index)], vars);\n });\n return;\n }\n\n if (typeof obj === 'object') {\n Object.entries(obj).forEach(([key, value]) => {\n const kebabKey = camelToKebab(key);\n traverseObject(value, [...path, kebabKey], vars);\n });\n }\n}\n\nexport function themeToCssVars(theme: Theme): Record<string, string> {\n const vars: Record<string, string> = {};\n traverseObject(theme, [], vars);\n return vars;\n}\n","type DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] };\n\nexport function deepMerge<T>(target: T, source: DeepPartial<T>): T {\n if (source === null || source === undefined) {\n return target;\n }\n\n if (typeof source !== 'object' || Array.isArray(source)) {\n return source as T;\n }\n\n if (typeof target !== 'object' || Array.isArray(target)) {\n return source as T;\n }\n\n const result = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceValue = (source as Record<string, unknown>)[key];\n const targetValue = (target as Record<string, unknown>)[key];\n\n if (\n sourceValue !== null &&\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue) &&\n targetValue !== null\n ) {\n (result as Record<string, unknown>)[key] = deepMerge(targetValue, sourceValue);\n } else {\n (result as Record<string, unknown>)[key] = sourceValue;\n }\n });\n\n return result;\n}\n\n","import type { Theme } from './types';\nimport { deepMerge } from '../utils';\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport function mergeTheme(\n baseTheme: Theme,\n overrides: DeepPartial<Theme>\n): Theme {\n return deepMerge(baseTheme, overrides);\n}\n\nexport function getSpacingVar(\n spacing: number | string | undefined\n): string | undefined {\n if (spacing === undefined) return undefined;\n\n if (typeof spacing === 'number') {\n return `${spacing * 4}px`;\n }\n\n return spacing;\n}\n","import type { Theme } from './tokens/types';\nimport type { DeepPartial } from './tokens/utils';\nimport { darkTheme, lightTheme } from './tokens/themes';\nimport { themeToCssVars } from './tokens/generate-css-vars';\nimport { mergeTheme } from './tokens/utils';\n\nexport { darkTheme, lightTheme, baseTheme } from './tokens/themes';\nexport { themeToCssVars } from './tokens/generate-css-vars';\nexport { mergeTheme, type DeepPartial } from './tokens/utils';\nexport type { Theme } from './tokens/types';\n\nexport type ThemeMode = 'light' | 'dark';\n\nfunction cssVarsToBlock(vars: Record<string, string>): string {\n return Object.entries(vars)\n .map(([key, value]) => `${key}:${value}`)\n .join(';');\n}\n\n/**\n * Возвращает критический CSS в формате data-theme для SSR.\n * Вставьте результат в <style> и добавьте data-theme=\"light\"|\"dark\" на корневой элемент.\n *\n * @param mode — 'light' | 'dark'\n */\nexport function getCriticalThemeCss(mode: ThemeMode): string;\n\n/**\n * @param theme — объект темы (legacy). Определяется light/dark/custom по содержимому.\n */\nexport function getCriticalThemeCss(theme?: Theme | DeepPartial<Theme>): string;\n\nexport function getCriticalThemeCss(\n modeOrTheme?: ThemeMode | Theme | DeepPartial<Theme>\n): string {\n const lightVars = cssVarsToBlock(themeToCssVars(lightTheme));\n const darkVars = cssVarsToBlock(themeToCssVars(darkTheme));\n\n if (modeOrTheme === 'light' || modeOrTheme === 'dark') {\n return `[data-theme=\"light\"]{${lightVars}}[data-theme=\"dark\"]{${darkVars}}`;\n }\n\n const resolvedTheme: Theme = modeOrTheme\n ? modeOrTheme &&\n typeof modeOrTheme === 'object' &&\n 'palette' in modeOrTheme &&\n modeOrTheme.palette &&\n 'primary' in modeOrTheme.palette\n ? (modeOrTheme as Theme)\n : mergeTheme(darkTheme, modeOrTheme as DeepPartial<Theme>)\n : darkTheme;\n\n const themeName =\n resolvedTheme === lightTheme ? 'light' : resolvedTheme === darkTheme ? 'dark' : 'custom';\n const customBlock =\n themeName === 'custom'\n ? `[data-theme=\"custom\"]{${cssVarsToBlock(themeToCssVars(resolvedTheme))}}`\n : '';\n\n return `[data-theme=\"light\"]{${lightVars}}[data-theme=\"dark\"]{${darkVars}}${customBlock}`;\n}\n"],"names":["baseTheme","lightTheme","darkTheme","camelToKebab","str","pathToCssVarName","path","traverseObject","obj","vars","varName","item","index","key","value","kebabKey","themeToCssVars","theme","deepMerge","target","source","result","sourceValue","targetValue","mergeTheme","overrides","cssVarsToBlock","getCriticalThemeCss","modeOrTheme","lightVars","darkVars","resolvedTheme","customBlock"],"mappings":"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"}
1
+ {"version":3,"file":"server.esm.js","sources":["../src/tokens/themes/baseTheme.ts","../src/tokens/themes/lightTheme.ts","../src/tokens/themes/darkTheme.ts","../src/tokens/generate-css-vars.ts","../src/utils/deepMerge.ts","../src/tokens/utils.ts","../src/server.ts"],"sourcesContent":["import type { Theme } from '../types';\n\n\nexport const baseTheme: Omit<Theme, 'palette'> = {\n spacing: {\n unit: 4,\n },\n typography: {\n fontFamily: '\"Martian Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n base: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.75rem',\n '4xl': '2.5rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n shadows: {\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n base: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n none: 'none',\n },\n border: {\n base: '2px'\n },\n borderRadius: {\n none: '0',\n round: '50%',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n full: '9999px',\n },\n transitions: {\n duration: {\n fast: '150ms',\n base: '200ms',\n slow: '300ms',\n verySlow: '500ms',\n },\n easing: {\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n easeOut: 'cubic-bezier(0, 0, 0.2, 1)',\n },\n },\n zIndex: {\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n modalBackdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n },\n} as const;\n\n","import type { Theme } from '../types';\nimport { baseTheme } from './baseTheme';\n\nexport const lightTheme = {\n ...baseTheme,\n palette: {\n primary: {\n main: '#a9d0e7',\n hover: '#96c4de',\n active: '#7eb3d4',\n contrastText: '#171717',\n },\n secondary: {\n main: '#c8d69b',\n hover: '#d4e0b0',\n active: '#b8c882',\n contrastText: '#343b1b',\n },\n error: {\n main: '#ef4444',\n hover: '#f87171',\n active: '#dc2626',\n },\n warning: {\n main: '#f59e0b',\n hover: '#fbbf24',\n active: '#d97706',\n },\n success: {\n main: '#22c55e',\n hover: '#4ade80',\n active: '#16a34a',\n },\n text: {\n primary: '#24292e',\n secondary: '#5a6342',\n disabled: '#a3a3a3',\n },\n background: {\n default: '#fbfcee',\n accent: '#f6e6a5',\n paper: '#ffffff',\n },\n border: {\n default: '#c8d69b',\n subtle: '#e5e5e5',\n strong: '#5a6342',\n },\n },\n} satisfies Theme;\n\n","import type { Theme } from '../types';\nimport { baseTheme } from './baseTheme';\n\n/**\n * Темная тема\n * Расширяет базовую тему, добавляя темную цветовую палитру\n */\nexport const darkTheme = {\n ...baseTheme,\n palette: {\n primary: {\n main: '#6eb3e0',\n hover: '#85c4ed',\n active: '#5a9fd4',\n contrastText: '#ffffff',\n },\n secondary: {\n main: '#65a8d2',\n hover: '#b8c88a',\n active: '#96a85e',\n contrastText: '#0a0a0a',\n },\n error: {\n main: '#ef4444',\n hover: '#f87171',\n active: '#dc2626',\n },\n warning: {\n main: '#f59e0b',\n hover: '#fbbf24',\n active: '#d97706',\n },\n success: {\n main: '#22c55e',\n hover: '#4ade80',\n active: '#16a34a',\n },\n text: {\n primary: '#ffffff',\n secondary: '#e6e6e6',\n disabled: '#6b6b6b',\n },\n background: {\n default: '#0a0a0a',\n accent: '#141414',\n paper: '#1a1a1a',\n },\n border: {\n default: '#404040',\n subtle: '#2a2a2a',\n strong: '#525252',\n },\n },\n} satisfies Theme;\n\n","import type { Theme } from './types';\n\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction pathToCssVarName(path: string[]): string {\n return `--${path.join('-')}`;\n}\n\nfunction traverseObject(\n obj: unknown,\n path: string[],\n vars: Record<string, string>\n): void {\n if (obj === null || obj === undefined) {\n return;\n }\n\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {\n const varName = pathToCssVarName(path);\n vars[varName] = String(obj);\n return;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n traverseObject(item, [...path, String(index)], vars);\n });\n return;\n }\n\n if (typeof obj === 'object') {\n Object.entries(obj).forEach(([key, value]) => {\n const kebabKey = camelToKebab(key);\n traverseObject(value, [...path, kebabKey], vars);\n });\n }\n}\n\nexport function themeToCssVars(theme: Theme): Record<string, string> {\n const vars: Record<string, string> = {};\n traverseObject(theme, [], vars);\n return vars;\n}\n","type DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] };\n\nexport function deepMerge<T>(target: T, source: DeepPartial<T>): T {\n if (source === null || source === undefined) {\n return target;\n }\n\n if (typeof source !== 'object' || Array.isArray(source)) {\n return source as T;\n }\n\n if (typeof target !== 'object' || Array.isArray(target)) {\n return source as T;\n }\n\n const result = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceValue = (source as Record<string, unknown>)[key];\n const targetValue = (target as Record<string, unknown>)[key];\n\n if (\n sourceValue !== null &&\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue) &&\n targetValue !== null\n ) {\n (result as Record<string, unknown>)[key] = deepMerge(targetValue, sourceValue);\n } else {\n (result as Record<string, unknown>)[key] = sourceValue;\n }\n });\n\n return result;\n}\n\n","import type { Theme } from './types';\nimport { deepMerge } from '../utils';\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport function mergeTheme(\n baseTheme: Theme,\n overrides: DeepPartial<Theme>\n): Theme {\n return deepMerge(baseTheme, overrides);\n}\n\nexport function getSpacingVar(\n spacing: number | string | undefined\n): string | undefined {\n if (spacing === undefined) return undefined;\n\n if (typeof spacing === 'number') {\n return `${spacing * 4}px`;\n }\n\n return spacing;\n}\n","import type { Theme } from './tokens/types';\nimport type { DeepPartial } from './tokens/utils';\nimport { darkTheme, lightTheme } from './tokens/themes';\nimport { themeToCssVars } from './tokens/generate-css-vars';\nimport { mergeTheme } from './tokens/utils';\n\nexport { darkTheme, lightTheme, baseTheme } from './tokens/themes';\nexport { themeToCssVars } from './tokens/generate-css-vars';\nexport { mergeTheme, type DeepPartial } from './tokens/utils';\nexport type { Theme } from './tokens/types';\n\nexport type ThemeMode = 'light' | 'dark';\n\nfunction cssVarsToBlock(vars: Record<string, string>): string {\n return Object.entries(vars)\n .map(([key, value]) => `${key}:${value}`)\n .join(';');\n}\n\n/**\n * Возвращает критический CSS в формате data-theme для SSR.\n * Вставьте результат в <style> и добавьте data-theme=\"light\"|\"dark\" на корневой элемент.\n *\n * @param mode — 'light' | 'dark'\n */\nexport function getCriticalThemeCss(mode: ThemeMode): string;\n\n/**\n * @param theme — объект темы (legacy). Определяется light/dark/custom по содержимому.\n */\nexport function getCriticalThemeCss(theme?: Theme | DeepPartial<Theme>): string;\n\nexport function getCriticalThemeCss(\n modeOrTheme?: ThemeMode | Theme | DeepPartial<Theme>\n): string {\n const lightVars = cssVarsToBlock(themeToCssVars(lightTheme));\n const darkVars = cssVarsToBlock(themeToCssVars(darkTheme));\n\n if (modeOrTheme === 'light' || modeOrTheme === 'dark') {\n return `[data-theme=\"light\"]{${lightVars}}[data-theme=\"dark\"]{${darkVars}}`;\n }\n\n const resolvedTheme: Theme = modeOrTheme\n ? modeOrTheme &&\n typeof modeOrTheme === 'object' &&\n 'palette' in modeOrTheme &&\n modeOrTheme.palette &&\n 'primary' in modeOrTheme.palette\n ? (modeOrTheme as Theme)\n : mergeTheme(darkTheme, modeOrTheme as DeepPartial<Theme>)\n : darkTheme;\n\n const themeName =\n resolvedTheme === lightTheme ? 'light' : resolvedTheme === darkTheme ? 'dark' : 'custom';\n const customBlock =\n themeName === 'custom'\n ? `[data-theme=\"custom\"]{${cssVarsToBlock(themeToCssVars(resolvedTheme))}}`\n : '';\n\n return `[data-theme=\"light\"]{${lightVars}}[data-theme=\"dark\"]{${darkVars}}${customBlock}`;\n}\n"],"names":["baseTheme","lightTheme","darkTheme","camelToKebab","str","pathToCssVarName","path","traverseObject","obj","vars","varName","item","index","key","value","kebabKey","themeToCssVars","theme","deepMerge","target","source","result","sourceValue","targetValue","mergeTheme","overrides","cssVarsToBlock","getCriticalThemeCss","modeOrTheme","lightVars","darkVars","resolvedTheme","customBlock"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atme-lab/ui-kit",
3
- "version": "0.1.19",
3
+ "version": "0.1.20",
4
4
  "description": "Component library for personal projects",
5
5
  "type": "module",
6
6
  "sideEffects": false,