@mediacubeco/expo-template-fsd 2.3.1 → 2.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 (333) hide show
  1. package/.claude/commands/git-commit.md +164 -0
  2. package/.claude/rules/architecture.md +38 -0
  3. package/.claude/rules/{prettier-eslint-typescript.mdc → prettier-eslint-typescript.md} +5 -10
  4. package/.claude/settings.json +2 -2
  5. package/.claude/skills/api/SKILL.md +362 -0
  6. package/.claude/skills/api/references/client/overview.md +106 -0
  7. package/.claude/skills/api/references/hooks/index.ts +3 -0
  8. package/.claude/skills/api/references/hooks/use-api-health.ts +25 -0
  9. package/.claude/skills/api/references/hooks/use-api-post.ts +46 -0
  10. package/.claude/skills/api/references/hooks/use-api-posts.ts +24 -0
  11. package/.claude/skills/api/references/mock/post.mock.ts +29 -0
  12. package/.claude/skills/{generate-api-model/references → api/references/model}/entities/common.ts +5 -2
  13. package/.claude/skills/api/references/model/resources/common.ts +9 -0
  14. package/.claude/skills/api/references/queries/health.ts +14 -0
  15. package/.claude/skills/api/references/queries/index.ts +2 -0
  16. package/.claude/skills/api/references/queries/post.ts +23 -0
  17. package/.claude/skills/api/references/repository/health/health.ts +11 -0
  18. package/.claude/skills/api/references/repository/health/health.types.ts +25 -0
  19. package/.claude/skills/api/references/repository/health/index.ts +2 -0
  20. package/.claude/skills/api/references/repository/post/index.ts +9 -0
  21. package/.claude/skills/api/references/repository/post/post.ts +34 -0
  22. package/.claude/skills/api/references/repository/post/post.types.ts +61 -0
  23. package/.claude/skills/code-style/SKILL.md +1025 -1
  24. package/.claude/skills/code-style/references/components/payout-speed-option/index.ts +2 -0
  25. package/.claude/skills/code-style/references/components/payout-speed-option/payout-speed-option.styles.ts +76 -0
  26. package/.claude/skills/code-style/references/components/payout-speed-option/payout-speed-option.tsx +58 -0
  27. package/.claude/skills/code-style/references/components/payout-speed-option/payout-speed-option.types.ts +22 -0
  28. package/.claude/skills/code-style/references/components/post/index.ts +2 -0
  29. package/.claude/skills/code-style/references/components/post/post.styles.ts +19 -0
  30. package/.claude/skills/code-style/references/components/post/post.tsx +21 -0
  31. package/.claude/skills/code-style/references/components/post/post.types.ts +9 -0
  32. package/.claude/skills/code-style/references/components/wrap/index.ts +2 -0
  33. package/.claude/skills/code-style/references/components/wrap/wrap.styles.ts +15 -0
  34. package/.claude/skills/code-style/references/components/wrap/wrap.tsx +31 -0
  35. package/.claude/skills/code-style/references/components/wrap/wrap.types.ts +10 -0
  36. package/.claude/skills/code-style/references/hooks/use-posts.ts +37 -0
  37. package/.claude/skills/code-style/references/pages/post/index.ts +4 -0
  38. package/.claude/skills/code-style/references/pages/post/post-details/index.ts +1 -0
  39. package/.claude/skills/code-style/references/pages/post/post-details/post-details.tsx +13 -0
  40. package/.claude/skills/code-style/references/pages/post/post-guide/index.ts +1 -0
  41. package/.claude/skills/code-style/references/pages/post/post-guide/post-guide.tsx +17 -0
  42. package/.claude/skills/code-style/references/pages/post/post-list/index.ts +1 -0
  43. package/.claude/skills/code-style/references/pages/post/post-list/post-list.styles.ts +17 -0
  44. package/.claude/skills/code-style/references/pages/post/post-list/post-list.tsx +25 -0
  45. package/.claude/skills/code-style/references/pages/post/post-share/index.ts +1 -0
  46. package/.claude/skills/code-style/references/pages/post/post-share/post-share.tsx +13 -0
  47. package/.claude/skills/code-style/references/routes/(stack)/_layout.tsx +18 -0
  48. package/.claude/skills/code-style/references/routes/(stack)/details.tsx +8 -0
  49. package/.claude/skills/code-style/references/routes/(stack)/guide.tsx +8 -0
  50. package/.claude/skills/code-style/references/routes/(stack)/index.tsx +8 -0
  51. package/.claude/skills/code-style/references/routes/(stack)/share.tsx +8 -0
  52. package/.claude/skills/code-style/references/routes/(tabs)/(post-details)/index.tsx +8 -0
  53. package/.claude/skills/code-style/references/routes/(tabs)/(post-list)/index.tsx +8 -0
  54. package/.claude/skills/code-style/references/routes/(tabs)/_layout.tsx +50 -0
  55. package/.claude/skills/code-style/references/routes/_app.tsx +20 -0
  56. package/.claude/skills/code-style/references/routes/guide.tsx +8 -0
  57. package/.claude/skills/code-style/references/routes/share.tsx +8 -0
  58. package/.claude/skills/code-style/references/store/use-post-draft-store.ts +62 -0
  59. package/.claude/skills/design-style/SKILL.md +320 -0
  60. package/.env +3 -1
  61. package/.env.example +3 -1
  62. package/CLAUDE.md +5 -11
  63. package/app.json +6 -3
  64. package/axios.d.ts +5 -0
  65. package/env.d.ts +3 -1
  66. package/package.json +33 -40
  67. package/patches/react-native-screens+4.25.2.patch +118 -0
  68. package/react-query.d.ts +13 -0
  69. package/src/app/(root)/(home)/_layout.tsx +2 -2
  70. package/src/app/(root)/(home)/index.tsx +2 -2
  71. package/src/app/(root)/(settings)/_layout.tsx +2 -2
  72. package/src/app/(root)/(settings)/index.tsx +2 -2
  73. package/src/app/(root)/_layout.tsx +35 -32
  74. package/src/pages/home/home-main.tsx +3 -7
  75. package/src/pages/settings/settings-main.tsx +3 -7
  76. package/src/shared/assets/fonts/index.ts +3 -3
  77. package/src/shared/assets/fonts/sf-pro-text-bold.ttf +0 -0
  78. package/src/shared/assets/fonts/sf-pro-text-regular.ttf +0 -0
  79. package/src/shared/assets/fonts/sf-pro-text-semibold.ttf +0 -0
  80. package/src/shared/assets/icons/back.tsx +21 -0
  81. package/src/shared/assets/icons/close.tsx +21 -0
  82. package/src/shared/assets/icons/common.ts +8 -0
  83. package/src/shared/assets/icons/default.tsx +44 -0
  84. package/src/shared/assets/icons/index.ts +13 -1
  85. package/src/shared/assets/icons/refresh.tsx +23 -0
  86. package/src/shared/assets/icons/share.tsx +38 -0
  87. package/src/shared/assets/icons/type.ts +7 -0
  88. package/src/shared/assets/translations/index.ts +4 -4
  89. package/src/shared/constants/config.ts +13 -0
  90. package/src/shared/constants/environment.ts +16 -4
  91. package/src/shared/constants/index.ts +1 -0
  92. package/src/shared/hooks/index.ts +1 -4
  93. package/src/shared/hooks/use-compose.ts +23 -0
  94. package/src/shared/lib/api/api.client.ts +157 -0
  95. package/src/shared/lib/api/api.provider.tsx +14 -36
  96. package/src/shared/lib/api/api.ts +1 -5
  97. package/src/shared/lib/api/api.types.ts +6 -3
  98. package/src/shared/lib/api/hooks/index.ts +1 -0
  99. package/src/shared/lib/api/index.ts +2 -3
  100. package/src/shared/lib/api/models/api-instance/api-instance.client.ts +50 -0
  101. package/src/shared/lib/api/models/api-instance/api-instance.ts +30 -82
  102. package/src/shared/lib/api/models/api-instance/api-instance.types.ts +16 -18
  103. package/src/shared/lib/api/models/api-instance/api-instance.utils.ts +13 -20
  104. package/src/shared/lib/api/models/api-instance/index.ts +3 -0
  105. package/src/shared/lib/api/queries/index.ts +1 -0
  106. package/src/shared/lib/api/repositories/index.ts +1 -1
  107. package/src/shared/lib/localization/constants/index.ts +16 -5
  108. package/src/shared/lib/localization/index.ts +5 -1
  109. package/src/shared/lib/navigation/hooks/index.ts +8 -3
  110. package/src/shared/{hooks/use-breakpoints.ts → lib/navigation/hooks/use-navigation-breakpoints.ts} +2 -5
  111. package/src/shared/lib/navigation/hooks/use-navigation-dimensions.ts +12 -0
  112. package/src/shared/lib/navigation/hooks/use-navigation-options.tsx +175 -0
  113. package/src/shared/lib/navigation/hooks/{use-navigation.ts → use-navigation-route.ts} +2 -2
  114. package/src/shared/lib/navigation/hooks/use-navigation-safe-area.ts +61 -0
  115. package/src/shared/lib/navigation/hooks/use-navigation-tabs-native.ts +10 -0
  116. package/src/shared/lib/navigation/hooks/use-navigation-tabs.tsx +10 -0
  117. package/src/shared/lib/navigation/hooks/use-navigation-transition.ts +27 -0
  118. package/src/shared/lib/navigation/index.ts +11 -4
  119. package/src/shared/lib/navigation/navigation-tabs-native.context.tsx +5 -0
  120. package/src/shared/lib/navigation/navigation-tabs-native.provider.tsx +17 -0
  121. package/src/shared/lib/navigation/navigation-tabs.context.tsx +10 -0
  122. package/src/shared/lib/navigation/navigation-tabs.provider.tsx +22 -0
  123. package/src/shared/lib/navigation/navigation.provider.tsx +6 -1
  124. package/src/shared/lib/storage/index.ts +1 -1
  125. package/src/shared/lib/storage/storage.provider.tsx +4 -0
  126. package/src/shared/lib/storage/storage.ts +29 -25
  127. package/src/shared/lib/theme/constants/animations.ts +26 -0
  128. package/src/shared/lib/theme/constants/colors.ts +336 -43
  129. package/src/shared/lib/theme/constants/delays.ts +1 -1
  130. package/src/shared/lib/theme/constants/durations.ts +1 -1
  131. package/src/shared/lib/theme/constants/fonts.ts +2 -1
  132. package/src/shared/lib/theme/constants/index.ts +42 -20
  133. package/src/shared/lib/theme/constants/shadows.ts +7 -25
  134. package/src/shared/lib/theme/constants/sizes.ts +11 -2
  135. package/src/shared/lib/theme/constants/transparencies.ts +1 -1
  136. package/src/shared/lib/theme/hooks/use-theme-setup.ts +3 -1
  137. package/src/shared/lib/theme/index.ts +10 -1
  138. package/src/shared/lib/theme/theme.provider.tsx +45 -19
  139. package/src/shared/lib/theme/theme.scope.tsx +43 -0
  140. package/src/shared/lib/theme/theme.types.ts +15 -3
  141. package/src/shared/lib/theme/utils/color.ts +81 -0
  142. package/src/shared/lib/theme/utils/index.ts +2 -0
  143. package/src/shared/lib/theme/utils/snapshot.ts +17 -0
  144. package/src/shared/lib/theme/utils/storage.ts +5 -2
  145. package/src/shared/services/browser/browser.ts +66 -0
  146. package/src/shared/services/browser/index.ts +1 -0
  147. package/src/shared/services/cookies/cookies.ts +73 -0
  148. package/src/shared/services/cookies/index.ts +1 -0
  149. package/src/shared/services/index.ts +5 -0
  150. package/src/shared/services/linking/index.ts +1 -0
  151. package/src/shared/services/linking/linking.ts +22 -0
  152. package/src/shared/services/share/index.ts +1 -0
  153. package/src/shared/services/share/share.ts +28 -0
  154. package/src/shared/services/universal-links/index.ts +104 -0
  155. package/src/shared/services/universal-links/universal-links.ts +25 -0
  156. package/src/shared/services/universal-links/universal-links.types.ts +5 -0
  157. package/src/shared/ui/atoms/blur/blur.tsx +9 -4
  158. package/src/shared/ui/atoms/blur/blur.types.ts +1 -1
  159. package/src/shared/ui/atoms/blur-progress/blur-progress.styles.ts +16 -0
  160. package/src/shared/ui/atoms/blur-progress/blur-progress.tsx +30 -0
  161. package/src/shared/ui/atoms/blur-progress/blur-progress.types.tsx +5 -0
  162. package/src/shared/ui/atoms/blur-progress/index.ts +1 -0
  163. package/src/shared/ui/atoms/glass/glass.tsx +13 -5
  164. package/src/shared/ui/atoms/glass/glass.types.ts +1 -1
  165. package/src/shared/ui/atoms/icon/icon.styles.ts +82 -0
  166. package/src/shared/ui/atoms/icon/icon.tsx +21 -0
  167. package/src/shared/ui/atoms/icon/icon.types.ts +23 -0
  168. package/src/shared/ui/atoms/icon/index.ts +2 -0
  169. package/src/shared/ui/atoms/index.ts +7 -0
  170. package/src/shared/ui/atoms/skeleton/index.ts +2 -0
  171. package/src/shared/ui/atoms/skeleton/skeleton.styles.ts +69 -0
  172. package/src/shared/ui/atoms/skeleton/skeleton.tsx +26 -0
  173. package/src/shared/ui/atoms/skeleton/skeleton.types.ts +9 -0
  174. package/src/shared/ui/atoms/spinner/index.ts +2 -0
  175. package/src/shared/ui/atoms/spinner/spinner.styles.ts +102 -0
  176. package/src/shared/ui/atoms/spinner/spinner.tsx +48 -0
  177. package/src/shared/ui/atoms/spinner/spinner.types.ts +25 -0
  178. package/src/shared/ui/atoms/text/index.ts +2 -0
  179. package/src/shared/ui/atoms/text/text.styles.ts +186 -0
  180. package/src/shared/ui/atoms/text/text.tsx +37 -0
  181. package/src/shared/ui/atoms/text/text.types.ts +35 -0
  182. package/src/shared/ui/atoms/touch/components/haptics/haptics.styles.ts +21 -0
  183. package/src/shared/ui/atoms/touch/components/haptics/haptics.tsx +28 -0
  184. package/src/shared/ui/atoms/touch/components/haptics/haptics.types.ts +17 -0
  185. package/src/shared/ui/atoms/touch/components/haptics/index.ts +2 -0
  186. package/src/shared/ui/atoms/touch/components/index.ts +3 -0
  187. package/src/shared/ui/atoms/touch/components/ripple/index.ts +2 -0
  188. package/src/shared/ui/atoms/touch/components/ripple/ripple.styles.ts +78 -0
  189. package/src/shared/ui/atoms/touch/components/ripple/ripple.tsx +29 -0
  190. package/src/shared/ui/atoms/touch/components/ripple/ripple.types.ts +17 -0
  191. package/src/shared/ui/atoms/touch/components/spring/index.ts +2 -0
  192. package/src/shared/ui/atoms/touch/components/spring/spring.styles.ts +31 -0
  193. package/src/shared/ui/atoms/touch/components/spring/spring.tsx +28 -0
  194. package/src/shared/ui/atoms/touch/components/spring/spring.types.ts +17 -0
  195. package/src/shared/ui/atoms/touch/index.ts +2 -0
  196. package/src/shared/ui/atoms/touch/touch.styles.ts +14 -0
  197. package/src/shared/ui/atoms/touch/touch.tsx +137 -0
  198. package/src/shared/ui/atoms/touch/touch.types.ts +27 -0
  199. package/src/shared/ui/atoms/visibility/index.ts +2 -0
  200. package/src/shared/ui/atoms/visibility/visibility.styles.ts +85 -0
  201. package/src/shared/ui/atoms/visibility/visibility.tsx +61 -0
  202. package/src/shared/ui/atoms/visibility/visibility.types.ts +34 -0
  203. package/src/shared/ui/molecules/keyboard-area/keyboard-area.styles.ts +11 -9
  204. package/src/shared/ui/molecules/keyboard-area/keyboard-area.tsx +3 -6
  205. package/src/shared/ui/molecules/refresh-control/refresh-control.tsx +3 -5
  206. package/src/shared/ui/molecules/refresh-control/refresh-control.types.ts +1 -1
  207. package/src/shared/ui/molecules/slider/components/indicator/components/dot/dot.styles.ts +41 -0
  208. package/src/shared/ui/molecules/slider/components/indicator/components/dot/dot.tsx +12 -0
  209. package/src/shared/ui/molecules/slider/components/indicator/components/dot/dot.types.ts +13 -0
  210. package/src/shared/ui/molecules/slider/components/indicator/components/dot/index.ts +2 -0
  211. package/src/shared/ui/molecules/slider/components/indicator/index.ts +2 -0
  212. package/src/shared/ui/molecules/slider/components/indicator/indicator.styles.ts +20 -0
  213. package/src/shared/ui/molecules/slider/components/indicator/indicator.tsx +22 -0
  214. package/src/shared/ui/molecules/slider/components/indicator/indicator.types.ts +10 -0
  215. package/src/shared/ui/molecules/slider/index.ts +3 -0
  216. package/src/shared/ui/molecules/slider/slider.styles.ts +68 -0
  217. package/src/shared/ui/molecules/slider/slider.tsx +64 -0
  218. package/src/shared/ui/molecules/slider/slider.types.ts +28 -0
  219. package/src/shared/ui/organisms/bar/bar.styles.ts +100 -0
  220. package/src/shared/ui/organisms/bar/bar.tsx +89 -0
  221. package/src/shared/ui/organisms/bar/bar.types.ts +49 -0
  222. package/src/shared/ui/organisms/bar/index.ts +2 -0
  223. package/src/shared/ui/organisms/bar-tab/bar-tab.tsx +9 -0
  224. package/src/shared/ui/organisms/bar-tab/bar-tab.types.ts +5 -0
  225. package/src/shared/ui/organisms/bar-tab/components/index.ts +1 -0
  226. package/src/shared/ui/organisms/bar-tab/components/tab/index.ts +2 -0
  227. package/src/shared/ui/organisms/bar-tab/components/tab/tab.styles.ts +21 -0
  228. package/src/shared/ui/organisms/bar-tab/components/tab/tab.tsx +18 -0
  229. package/src/shared/ui/organisms/bar-tab/components/tab/tab.types.ts +5 -0
  230. package/src/shared/ui/organisms/bar-tab/index.ts +2 -0
  231. package/src/shared/ui/organisms/bar-tab-navigation/bar-tab-navigation.styles.ts +22 -0
  232. package/src/shared/ui/organisms/bar-tab-navigation/bar-tab-navigation.tsx +66 -0
  233. package/src/shared/ui/organisms/bar-tab-navigation/bar-tab-navigation.types.ts +5 -0
  234. package/src/shared/ui/organisms/bar-tab-navigation/components/index.ts +1 -0
  235. package/src/shared/ui/organisms/bar-tab-navigation/components/tab-navigation/index.ts +2 -0
  236. package/src/shared/ui/organisms/bar-tab-navigation/components/tab-navigation/tab-navigation.styles.ts +56 -0
  237. package/src/shared/ui/organisms/bar-tab-navigation/components/tab-navigation/tab-navigation.tsx +30 -0
  238. package/src/shared/ui/organisms/bar-tab-navigation/components/tab-navigation/tab-navigation.types.ts +7 -0
  239. package/src/shared/ui/organisms/bar-tab-navigation/index.ts +2 -0
  240. package/src/shared/ui/organisms/index.ts +4 -1
  241. package/src/shared/ui/organisms/slider/components/indicator/components/dot/dot.styles.ts +41 -0
  242. package/src/shared/ui/organisms/slider/components/indicator/components/dot/dot.tsx +12 -0
  243. package/src/shared/ui/organisms/slider/components/indicator/components/dot/dot.types.ts +13 -0
  244. package/src/shared/ui/organisms/slider/components/indicator/components/dot/index.ts +2 -0
  245. package/src/shared/ui/organisms/slider/components/indicator/index.ts +2 -0
  246. package/src/shared/ui/organisms/slider/components/indicator/indicator.styles.ts +20 -0
  247. package/src/shared/ui/organisms/slider/components/indicator/indicator.tsx +22 -0
  248. package/src/shared/ui/organisms/slider/components/indicator/indicator.types.ts +10 -0
  249. package/src/shared/ui/organisms/slider/index.ts +3 -0
  250. package/src/shared/ui/organisms/slider/slider.styles.ts +68 -0
  251. package/src/shared/ui/organisms/slider/slider.tsx +64 -0
  252. package/src/shared/ui/organisms/slider/slider.types.ts +28 -0
  253. package/src/shared/ui/templates/index.ts +3 -0
  254. package/src/shared/ui/templates/modal-container/index.ts +13 -0
  255. package/src/shared/ui/templates/modal-container/modal-container-list.tsx +45 -0
  256. package/src/shared/ui/templates/modal-container/modal-container-scroll.tsx +66 -0
  257. package/src/shared/ui/templates/modal-container/modal-container-section-list.tsx +46 -0
  258. package/src/shared/ui/templates/modal-container/modal-container.hooks.tsx +172 -0
  259. package/src/shared/ui/templates/modal-container/modal-container.styles.ts +121 -0
  260. package/src/shared/ui/templates/modal-container/modal-container.types.ts +69 -0
  261. package/src/shared/ui/templates/screen-container/index.ts +1 -1
  262. package/src/shared/ui/templates/screen-container/screen-container-list.tsx +28 -10
  263. package/src/shared/ui/templates/screen-container/screen-container-scroll.tsx +28 -10
  264. package/src/shared/ui/templates/screen-container/screen-container-section-list.tsx +29 -11
  265. package/src/shared/ui/templates/screen-container/screen-container.hooks.tsx +79 -8
  266. package/src/shared/ui/templates/screen-container/screen-container.styles.ts +105 -15
  267. package/src/shared/ui/templates/screen-container/screen-container.types.tsx +34 -7
  268. package/src/shared/ui/templates/screen-header/components/index.ts +6 -0
  269. package/src/shared/ui/templates/screen-header/components/screen-header-description/index.ts +2 -0
  270. package/src/shared/ui/templates/screen-header/components/screen-header-description/screen-header-description.tsx +15 -0
  271. package/src/shared/ui/templates/screen-header/components/screen-header-description/screen-header-description.types.ts +11 -0
  272. package/src/shared/ui/templates/screen-header/components/screen-header-icon/index.ts +2 -0
  273. package/src/shared/ui/templates/screen-header/components/screen-header-icon/screen-header-icon.styles.ts +44 -0
  274. package/src/shared/ui/templates/screen-header/components/screen-header-icon/screen-header-icon.tsx +65 -0
  275. package/src/shared/ui/templates/screen-header/components/screen-header-icon/screen-header-icon.types.ts +14 -0
  276. package/src/shared/ui/templates/screen-header/components/screen-header-icon-back/index.ts +2 -0
  277. package/src/shared/ui/templates/screen-header/components/screen-header-icon-back/screen-header-icon-back.tsx +17 -0
  278. package/src/shared/ui/templates/screen-header/components/screen-header-icon-back/screen-header-icon-back.types.ts +6 -0
  279. package/src/shared/ui/templates/screen-header/components/screen-header-icon-close/index.ts +2 -0
  280. package/src/shared/ui/templates/screen-header/components/screen-header-icon-close/screen-header-icon-close.tsx +27 -0
  281. package/src/shared/ui/templates/screen-header/components/screen-header-icon-close/screen-header-icon-close.types.ts +10 -0
  282. package/src/shared/ui/templates/screen-header/components/screen-header-info/index.ts +2 -0
  283. package/src/shared/ui/templates/screen-header/components/screen-header-info/screen-header-info.tsx +15 -0
  284. package/src/shared/ui/templates/screen-header/components/screen-header-info/screen-header-info.types.ts +10 -0
  285. package/src/shared/ui/templates/screen-header/components/screen-header-title/index.ts +2 -0
  286. package/src/shared/ui/templates/screen-header/components/screen-header-title/screen-header-title.tsx +19 -0
  287. package/src/shared/ui/templates/screen-header/components/screen-header-title/screen-header-title.types.ts +13 -0
  288. package/src/shared/ui/templates/screen-header/index.ts +3 -0
  289. package/src/shared/ui/templates/screen-header/screen-header.styles.ts +49 -0
  290. package/src/shared/ui/templates/screen-header/screen-header.tsx +26 -0
  291. package/src/shared/ui/templates/screen-header/screen-header.types.ts +15 -0
  292. package/src/shared/ui/templates/web-container/index.ts +2 -0
  293. package/src/shared/ui/templates/web-container/web-container.styles.ts +34 -0
  294. package/src/shared/ui/templates/web-container/web-container.tsx +172 -0
  295. package/src/shared/ui/templates/web-container/web-container.types.ts +21 -0
  296. package/.claude/rules/app-routing.mdc +0 -47
  297. package/.claude/rules/exports-at-end.mdc +0 -55
  298. package/.claude/rules/kebab-case-naming.mdc +0 -29
  299. package/.claude/rules/mediacubeco-packages.mdc +0 -56
  300. package/.claude/skills/generate-api-model/SKILL.md +0 -230
  301. package/.claude/skills/generate-api-model/references/resources/common.ts +0 -8
  302. package/.claude/skills/generate-api-model-mock/SKILL.md +0 -56
  303. package/.claude/skills/git-commit/SKILL.md +0 -139
  304. package/.gitignore +0 -34
  305. package/src/shared/assets/icons/like.tsx +0 -17
  306. package/src/shared/hooks/use-animated.ts +0 -200
  307. package/src/shared/hooks/use-mixins.ts +0 -36
  308. package/src/shared/hooks/use-safe-area.ts +0 -75
  309. package/src/shared/lib/api/repositories/auth/auth.ts +0 -23
  310. package/src/shared/lib/api/repositories/auth/auth.types.ts +0 -22
  311. package/src/shared/lib/api/repositories/auth/index.ts +0 -1
  312. package/src/shared/lib/navigation/hooks/use-navigation-native-tabs.ts +0 -10
  313. package/src/shared/lib/navigation/hooks/use-navigation-options.ts +0 -123
  314. package/src/shared/lib/navigation/navigation-native-tabs.context.tsx +0 -5
  315. package/src/shared/lib/navigation/navigation-native-tabs.provider.tsx +0 -12
  316. package/src/shared/lib/theme/constants/borders.ts +0 -8
  317. package/src/shared/lib/theme/constants/weights.ts +0 -13
  318. /package/.claude/skills/{generate-api-model/references → api/references/model}/entities/index.ts +0 -0
  319. /package/.claude/skills/{generate-api-model/references → api/references/model}/entities/post/index.ts +0 -0
  320. /package/.claude/skills/{generate-api-model/references → api/references/model}/entities/post/post-comment.ts +0 -0
  321. /package/.claude/skills/{generate-api-model/references → api/references/model}/entities/post/post.ts +0 -0
  322. /package/.claude/skills/{generate-api-model/references → api/references/model}/entities/user/index.ts +0 -0
  323. /package/.claude/skills/{generate-api-model/references → api/references/model}/entities/user/user-settings.ts +0 -0
  324. /package/.claude/skills/{generate-api-model/references → api/references/model}/entities/user/user-verification.ts +0 -0
  325. /package/.claude/skills/{generate-api-model/references → api/references/model}/entities/user/user.ts +0 -0
  326. /package/.claude/skills/{generate-api-model/references → api/references/model}/resources/index.ts +0 -0
  327. /package/.claude/skills/{generate-api-model/references → api/references/model}/resources/post/index.ts +0 -0
  328. /package/.claude/skills/{generate-api-model/references → api/references/model}/resources/post/post-comment.ts +0 -0
  329. /package/.claude/skills/{generate-api-model/references → api/references/model}/resources/post/post.ts +0 -0
  330. /package/.claude/skills/{generate-api-model/references → api/references/model}/resources/user/index.ts +0 -0
  331. /package/.claude/skills/{generate-api-model/references → api/references/model}/resources/user/user-settings.ts +0 -0
  332. /package/.claude/skills/{generate-api-model/references → api/references/model}/resources/user/user-verification.ts +0 -0
  333. /package/.claude/skills/{generate-api-model/references → api/references/model}/resources/user/user.ts +0 -0
@@ -1,57 +1,350 @@
1
+ import { withBrightness, withTransparency } from '../utils/color'
2
+
3
+ // WEAK - 80
4
+ // HALF - 40
5
+ // STRONG - 20
6
+ // LIGHT - 10
1
7
  const PALETTE = {
2
- 'LIGHT/WHITE': '#FFFFFF',
3
- 'LIGHT/BLACK': '#111416',
4
- 'LIGHT/GRAY': '#D4D4D4',
8
+ 'transparent': 'rgba(0, 0, 0, 0)', // transparent
9
+
10
+ 'black': 'rgba(0, 0, 0, 1)', // #000000
11
+ 'black-80': 'rgba(0, 0, 0, 0.8)', // #00000080
12
+ 'black-40': 'rgba(0, 0, 0, 0.4)', // #00000040
13
+ 'black-20': 'rgba(0, 0, 0, 0.20)', // #00000020
14
+ 'black-10': 'rgba(0, 0, 0, 0.1)', // #0000001A
15
+
16
+ 'white': 'rgba(255, 255, 255, 1)', // #FFFFFF
17
+ 'white-80': 'rgba(255, 255, 255, 0.8)', // #FFFFFF80
18
+ 'white-40': 'rgba(255, 255, 255, 0.4)', // #FFFFFF40
19
+ 'white-20': 'rgba(255, 255, 255, 0.20)', // #FFFFFF20
20
+ 'white-10': 'rgba(255, 255, 255, 0.1)', // #FFFFFF1A
21
+
22
+ 'glow': 'rgba(235, 250, 255, 1)', // #EBFAFF
23
+
24
+ 'secondary/blue': 'rgba(37, 120, 244, 1)', // #2578F4
25
+ 'secondary/blue-80': 'rgba(37, 120, 244, 0.8)', // #2578F480
26
+ 'secondary/blue-40': 'rgba(37, 120, 244, 0.4)', // #2578F440
27
+ 'secondary/blue-20': 'rgba(37, 120, 244, 0.20)', // #2578F420
28
+ 'secondary/blue-10': 'rgba(37, 120, 244, 0.1)', // #2578F41A
29
+
30
+ 'secondary/green': 'rgba(77, 203, 77, 1)', // #4DCB4D
31
+ 'secondary/green-80': 'rgba(77, 203, 77, 0.8)', // #4DCB4D80
32
+ 'secondary/green-40': 'rgba(77, 203, 77, 0.4)', // #4DCB4D40
33
+ 'secondary/green-20': 'rgba(77, 203, 77, 0.20)', // #4DCB4D20
34
+ 'secondary/green-10': 'rgba(77, 203, 77, 0.1)', // #4DCB4D1A
35
+
36
+ 'secondary/orange': 'rgba(252, 177, 0, 1)', // #FCB100
37
+ 'secondary/orange-80': 'rgba(252, 177, 0, 0.8)', // #FCB10080
38
+ 'secondary/orange-40': 'rgba(252, 177, 0, 0.4)', // #FCB10040
39
+ 'secondary/orange-20': 'rgba(252, 177, 0, 0.20)', // #FCB10020
40
+ 'secondary/orange-10': 'rgba(252, 177, 0, 0.1)', // #FCB1001A
41
+
42
+ 'secondary/red': 'rgba(245, 86, 61, 1)', // #F5563D
43
+ 'secondary/red-80': 'rgba(245, 86, 61, 0.8)', // #F5563D80
44
+ 'secondary/red-40': 'rgba(245, 86, 61, 0.4)', // #F5563D40
45
+ 'secondary/red-20': 'rgba(245, 86, 61, 0.20)', // #F5563D20
46
+ 'secondary/red-10': 'rgba(245, 86, 61, 0.1)', // #F5563D1A
47
+
48
+ 'neutral/dark': 'rgba(92, 102, 112, 1)', // #5C6670
49
+ 'neutral/dark-10': 'rgba(92, 102, 112, 0.1)', // #5C66701A
50
+
51
+ 'neutral/black': 'rgba(32, 36, 39, 1)', // #202427
52
+ 'neutral/black-80': 'rgba(32, 36, 39, 0.8)', // #20242780
53
+
54
+ 'neutral/gray': 'rgba(143, 153, 163, 1)', // #8F99A3
55
+ 'neutral/gray-80': 'rgba(143, 153, 163, 0.8)', // #8F99A3
56
+ 'neutral/gray-40': 'rgba(143, 153, 163, 0.4)', // #8F99A3
57
+ 'neutral/gray-20': 'rgba(143, 153, 163, 0.2)', // #8F99A3
58
+ 'neutral/gray-10': 'rgba(143, 153, 163, 0.1)', // #8F99A3
59
+
60
+ 'neutral/hover-gray': 'rgba(237, 240, 243, 1)', // #EDF0F3
61
+
62
+ 'neutral/background': 'rgba(248, 249, 250, 1)', // #F8F9FA
63
+
64
+ 'neutral/background-app': 'rgba(245, 246, 250, 1)', // #F5F6FA
65
+
66
+ 'neutral/outline': 'rgba(199, 204, 209, 1)', // #C7CCD1
67
+ 'neutral/outline-10': 'rgba(199, 204, 209, 0.1)', // #C7CCD11A
68
+
69
+ 'neutral/outline-light': 'rgba(222, 224, 226, 1)', // #DEE0E2
70
+ 'neutral/outline-light-80': 'rgba(222, 224, 226, 0.8)', // #DEE0E2
71
+ 'neutral/outline-light-40': 'rgba(222, 224, 226, 0.4)', // #DEE0E2
72
+ 'neutral/outline-light-20': 'rgba(222, 224, 226, 0.2)', // #DEE0E2
73
+ 'neutral/outline-light-10': 'rgba(222, 224, 226, 0.1)', // #DEE0E2
74
+
75
+ 'dark/dark': 'rgba(196, 198, 205, 1)', // #C4C6CD
76
+
77
+ 'dark/white': 'rgba(240, 240, 240, 1)', // #F0F0F0
78
+ 'dark/white-80': 'rgba(240, 240, 240, 0.8)', // #F0F0F080
79
+
80
+ 'dark/gray': 'rgba(155, 158, 168, 1)', // #9B9EA8
81
+ 'dark/gray-80': 'rgba(155, 158, 168, 0.8)',
82
+ 'dark/gray-40': 'rgba(155, 158, 168, 0.4)',
83
+ 'dark/gray-20': 'rgba(155, 158, 168, 0.2)',
84
+ 'dark/gray-10': 'rgba(155, 158, 168, 0.1)',
85
+
86
+ 'dark/hover-gray': 'rgba(66, 69, 72, 1)', // #424548
87
+
88
+ 'dark/background': 'rgba(10, 5, 16, 1)', // #0A0510
89
+
90
+ 'dark/outline': 'rgba(83, 83, 83, 1)', // #535353
91
+
92
+ 'dark/outline-gray': 'rgba(83, 83, 83, 1)', // #535353
5
93
 
6
- 'LIGHT/NEUTRAL': '#57626F',
7
- 'LIGHT/DISABLED': '#C3CAD1',
8
- 'LIGHT/SURFACE': '#F5F8FD',
9
- 'LIGHT/FAINT': '#EFF2F7',
94
+ 'dark/outline-gray-dark': 'rgba(53, 53, 53, 1)', // #353535
95
+ 'dark/outline-gray-dark-80': 'rgba(53, 53, 53, 0.8)',
96
+ 'dark/outline-gray-dark-40': 'rgba(53, 53, 53, 0.4)',
97
+ 'dark/outline-gray-dark-20': 'rgba(53, 53, 53, 0.2)',
98
+ 'dark/outline-gray-dark-10': 'rgba(53, 53, 53, 0.1)',
99
+ } as const
10
100
 
11
- 'LIGHT/PRIMARY': '#8756FF',
12
- 'LIGHT/PRIMARY_ACTIVE': '#7238FF',
13
- 'LIGHT/PRIMARY_DISABLED': '#D5C9FF',
101
+ /** Идентификаторы акцентного цвета темы. */
102
+ const ThemeAccent = {
103
+ Mint: 'mint',
104
+ Violet: 'violet',
105
+ Indigo: 'indigo',
106
+ Lime: 'lime',
107
+ } as const
14
108
 
15
- 'LIGHT/ACCENT': '#FF2B75',
16
- 'LIGHT/ACCENT_ACTIVE': '#E62464',
17
- 'LIGHT/ACCENT_DISABLED': '#FFBAD2',
109
+ /** Идентификатор акцентного цвета темы. */
110
+ type ThemeAccent = (typeof ThemeAccent)[keyof typeof ThemeAccent]
18
111
 
19
- 'TRANSPARENT': '#FFFFFF00',
112
+ /** Базовый акцентный цвет по идентификатору. */
113
+ const ACCENT_COLORS = {
114
+ [ThemeAccent.Mint]: 'rgba(43, 172, 143, 1)', // #2BAC8F
115
+ [ThemeAccent.Violet]: 'rgba(135, 86, 255, 1)', // #8756FF
116
+ [ThemeAccent.Indigo]: 'rgba(74, 96, 214, 1)', // #4A60D6
117
+ [ThemeAccent.Lime]: 'rgba(211, 242, 11, 1)', // #D3F20B
118
+ } as const
119
+
120
+ /** Цвет контента поверх акцентного фона: тёмный для светлых акцентов, белый для остальных. */
121
+ const ACCENT_CONTRAST_COLORS = {
122
+ [ThemeAccent.Mint]: PALETTE['white'],
123
+ [ThemeAccent.Violet]: PALETTE['white'],
124
+ [ThemeAccent.Indigo]: PALETTE['white'],
125
+ [ThemeAccent.Lime]: PALETTE['neutral/black'],
126
+ } as const
127
+
128
+ /** Собирает блок PRIMARY-токенов из акцентного цвета с альфа-вариантами. */
129
+ const createPrimaryColors = (themeAccent: ThemeAccent) => {
130
+ const accentColor = ACCENT_COLORS[themeAccent]
131
+
132
+ return {
133
+ PRIMARY: accentColor,
134
+ PRIMARY_WEAK: withTransparency(accentColor, 0.8),
135
+ PRIMARY_HALF: withTransparency(accentColor, 0.4),
136
+ PRIMARY_STRONG: withTransparency(accentColor, 0.2),
137
+ PRIMARY_LIGHT: withTransparency(accentColor, 0.1),
138
+ PRIMARY_CONTRAST: ACCENT_CONTRAST_COLORS[themeAccent],
139
+ }
20
140
  }
21
141
 
22
- const LIGHT_COLORS_COMMON = {
23
- PRIMARY: PALETTE['LIGHT/PRIMARY'],
24
- PRIMARY_ACTIVE: PALETTE['LIGHT/PRIMARY_ACTIVE'],
25
- PRIMARY_DISABLED: PALETTE['LIGHT/PRIMARY_DISABLED'],
142
+ /** Собирает общие токены цвета для заданного акцента. */
143
+ const createCommonColors = (themeAccent: ThemeAccent) => ({
144
+ ...createPrimaryColors(themeAccent),
145
+
146
+ TRANSPARENT: PALETTE['transparent'],
147
+
148
+ MATTER: PALETTE['black'],
149
+ MATTER_WEAK: PALETTE['black-80'],
150
+ MATTER_HALF: PALETTE['black-40'],
151
+ MATTER_STRONG: PALETTE['black-20'],
152
+ MATTER_LIGHT: PALETTE['black-10'],
153
+
154
+ CONTRAST: PALETTE['white'],
155
+ CONTRAST_WEAK: PALETTE['white-80'],
156
+ CONTRAST_HALF: PALETTE['white-40'],
157
+ CONTRAST_STRONG: PALETTE['white-20'],
158
+ CONTRAST_LIGHT: PALETTE['white-10'],
159
+
160
+ INFO: PALETTE['secondary/blue'],
161
+ INFO_WEAK: PALETTE['secondary/blue-80'],
162
+ INFO_HALF: PALETTE['secondary/blue-40'],
163
+ INFO_STRONG: PALETTE['secondary/blue-20'],
164
+ INFO_LIGHT: PALETTE['secondary/blue-10'],
165
+
166
+ SUCCESS: PALETTE['secondary/green'],
167
+ SUCCESS_WEAK: PALETTE['secondary/green-80'],
168
+ SUCCESS_HALF: PALETTE['secondary/green-40'],
169
+ SUCCESS_STRONG: PALETTE['secondary/green-20'],
170
+ SUCCESS_LIGHT: PALETTE['secondary/green-10'],
171
+
172
+ WARNING: PALETTE['secondary/orange'],
173
+ WARNING_WEAK: PALETTE['secondary/orange-80'],
174
+ WARNING_HALF: PALETTE['secondary/orange-40'],
175
+ WARNING_STRONG: PALETTE['secondary/orange-20'],
176
+ WARNING_LIGHT: PALETTE['secondary/orange-10'],
177
+
178
+ DANGER: PALETTE['secondary/red'],
179
+ DANGER_WEAK: PALETTE['secondary/red-80'],
180
+ DANGER_HALF: PALETTE['secondary/red-40'],
181
+ DANGER_STRONG: PALETTE['secondary/red-20'],
182
+ DANGER_LIGHT: PALETTE['secondary/red-10'],
183
+ })
184
+
185
+ /** Собирает общие токены светлой темы для заданного акцента. */
186
+ const createCommonLightColors = (themeAccent: ThemeAccent) => ({
187
+ ...createCommonColors(themeAccent),
188
+
189
+ NEUTRAL: PALETTE['neutral/gray'],
190
+ NEUTRAL_WEAK: PALETTE['neutral/gray-80'],
191
+ NEUTRAL_HALF: PALETTE['neutral/gray-40'],
192
+ NEUTRAL_STRONG: PALETTE['neutral/gray-20'],
193
+ NEUTRAL_LIGHT: PALETTE['neutral/gray-10'],
26
194
 
27
- ACCENT: PALETTE['LIGHT/ACCENT'],
28
- ACCENT_ACTIVE: PALETTE['LIGHT/ACCENT_ACTIVE'],
29
- ACCENT_DISABLED: PALETTE['LIGHT/ACCENT_DISABLED'],
195
+ OUTLINE: PALETTE['neutral/outline-light'],
196
+ OUTLINE_WEAK: PALETTE['neutral/outline-light-80'],
197
+ OUTLINE_HALF: PALETTE['neutral/outline-light-40'],
198
+ OUTLINE_STRONG: PALETTE['neutral/outline-light-20'],
199
+ OUTLINE_LIGHT: PALETTE['neutral/outline-light-10'],
200
+ })
30
201
 
31
- TRANSPARENT: PALETTE['TRANSPARENT'],
202
+ /** Собирает общие токены тёмной темы для заданного акцента. */
203
+ const createCommonDarkColors = (themeAccent: ThemeAccent) => ({
204
+ ...createCommonColors(themeAccent),
205
+
206
+ NEUTRAL: PALETTE['dark/gray'],
207
+ NEUTRAL_WEAK: PALETTE['dark/gray-80'],
208
+ NEUTRAL_HALF: PALETTE['dark/gray-40'],
209
+ NEUTRAL_STRONG: PALETTE['dark/gray-20'],
210
+ NEUTRAL_LIGHT: PALETTE['dark/gray-10'],
211
+
212
+ OUTLINE: PALETTE['dark/outline-gray-dark'],
213
+ OUTLINE_WEAK: PALETTE['dark/outline-gray-dark-80'],
214
+ OUTLINE_HALF: PALETTE['dark/outline-gray-dark-40'],
215
+ OUTLINE_STRONG: PALETTE['dark/outline-gray-dark-20'],
216
+ OUTLINE_LIGHT: PALETTE['dark/outline-gray-dark-10'],
217
+ })
218
+
219
+ /** Собирает цвета светлой темы для заданного акцента. */
220
+ const createLightColors = (themeAccent: ThemeAccent) => {
221
+ const accentColor = ACCENT_COLORS[themeAccent]
222
+ const commonLightColors = createCommonLightColors(themeAccent)
223
+
224
+ return {
225
+ // special colors
226
+ BACKGROUND: {
227
+ BASE: PALETTE['neutral/background-app'],
228
+ SECONDARY: PALETTE['white'],
229
+ DISABLED: PALETTE['transparent'],
230
+ GLOW: PALETTE['glow'],
231
+ },
232
+ BAR: {
233
+ BASE: PALETTE['white'],
234
+ SECONDARY: PALETTE['neutral/dark-10'],
235
+ DISABLED: PALETTE['neutral/outline-10'],
236
+ },
237
+ INPUT: {
238
+ BASE: PALETTE['neutral/background-app'],
239
+ SECONDARY: PALETTE['white'],
240
+ DISABLED: PALETTE['neutral/hover-gray'],
241
+ },
242
+
243
+ // common colors
244
+ FILL: {
245
+ BASE: PALETTE['neutral/hover-gray'],
246
+ SECONDARY: PALETTE['white'],
247
+ DISABLED: PALETTE['neutral/outline'],
248
+ NEUTRAL_SURFACE: PALETTE['neutral/black'],
249
+ NEUTRAL_SURFACE_WEAK: PALETTE['neutral/black-80'],
250
+ NEUTRAL_SURFACE_STRONG: PALETTE['neutral/outline-light'],
251
+ NEUTRAL_SURFACE_LIGHT: PALETTE['neutral/hover-gray'],
252
+ ...commonLightColors,
253
+ },
254
+ STROKE: {
255
+ BASE: PALETTE['neutral/outline'],
256
+ SECONDARY: PALETTE['neutral/dark'],
257
+ DISABLED: PALETTE['neutral/hover-gray'],
258
+ ...commonLightColors,
259
+ },
260
+ TYPOGRAPHY: {
261
+ BASE: PALETTE['neutral/black'],
262
+ SECONDARY: PALETTE['neutral/dark'],
263
+ DISABLED: PALETTE['neutral/outline'],
264
+ ...commonLightColors,
265
+ },
266
+ GRADIENT: {
267
+ PRIMARY: [
268
+ { offset: 0, color: withBrightness(accentColor, 0.55) },
269
+ { offset: 0.37, color: accentColor },
270
+ { offset: 0.57, color: PALETTE['neutral/background'] },
271
+ ],
272
+ },
273
+ }
32
274
  }
33
275
 
34
- const LIGHT_COLORS = {
35
- FILL: {
36
- BASE: PALETTE['LIGHT/SURFACE'],
37
- NEUTRAL: PALETTE['LIGHT/FAINT'],
38
- CONTRAST: PALETTE['LIGHT/WHITE'],
39
- DISABLED: PALETTE['LIGHT/GRAY'],
40
- ...LIGHT_COLORS_COMMON,
41
- },
42
- STROKE: {
43
- BASE: PALETTE['LIGHT/FAINT'],
44
- ...LIGHT_COLORS_COMMON,
45
- },
46
- TYPOGRAPHY: {
47
- BASE: PALETTE['LIGHT/BLACK'],
48
- NEUTRAL: PALETTE['LIGHT/NEUTRAL'],
49
- CONTRAST: PALETTE['LIGHT/WHITE'],
50
- DISABLED: PALETTE['LIGHT/DISABLED'],
51
- ...LIGHT_COLORS_COMMON,
52
- },
276
+ /** Собирает цвета тёмной темы для заданного акцента. */
277
+ const createDarkColors = (themeAccent: ThemeAccent) => {
278
+ const commonDarkColors = createCommonDarkColors(themeAccent)
279
+
280
+ return {
281
+ // special colors
282
+ BACKGROUND: {
283
+ BASE: PALETTE['dark/background'],
284
+ SECONDARY: PALETTE['dark/background'],
285
+ DISABLED: PALETTE['transparent'],
286
+ GLOW: PALETTE['glow'],
287
+ },
288
+ BAR: {
289
+ BASE: PALETTE['white-10'],
290
+ SECONDARY: PALETTE['neutral/dark-10'],
291
+ DISABLED: PALETTE['neutral/outline-10'],
292
+ },
293
+ INPUT: {
294
+ BASE: PALETTE['white-10'],
295
+ SECONDARY: PALETTE['white-10'],
296
+ DISABLED: PALETTE['white-20'],
297
+ },
298
+
299
+ // common colors
300
+ FILL: {
301
+ BASE: PALETTE['dark/hover-gray'],
302
+ SECONDARY: PALETTE['white-10'],
303
+ DISABLED: PALETTE['dark/outline'],
304
+ NEUTRAL_SURFACE: PALETTE['dark/white'],
305
+ NEUTRAL_SURFACE_WEAK: PALETTE['dark/white-80'],
306
+ NEUTRAL_SURFACE_STRONG: PALETTE['white-10'],
307
+ NEUTRAL_SURFACE_LIGHT: PALETTE['white-20'],
308
+ ...commonDarkColors,
309
+ },
310
+ STROKE: {
311
+ BASE: PALETTE['dark/outline'],
312
+ SECONDARY: PALETTE['dark/dark'],
313
+ DISABLED: PALETTE['dark/hover-gray'],
314
+ ...commonDarkColors,
315
+ },
316
+ TYPOGRAPHY: {
317
+ BASE: PALETTE['dark/white'],
318
+ SECONDARY: PALETTE['dark/dark'],
319
+ DISABLED: PALETTE['dark/outline'],
320
+ ...commonDarkColors,
321
+ },
322
+ GRADIENT: {
323
+ PRIMARY: [
324
+ { offset: 0, color: PALETTE['dark/background'] },
325
+ { offset: 1, color: PALETTE['dark/background'] },
326
+ ],
327
+ },
328
+ }
53
329
  }
54
330
 
55
- const DARK_COLORS = LIGHT_COLORS
331
+ const COLOR_BY_VARIANT = {
332
+ base: 'BASE',
333
+ secondary: 'SECONDARY',
334
+ disabled: 'DISABLED',
335
+
336
+ transparent: 'TRANSPARENT',
337
+ matter: 'MATTER',
338
+ contrast: 'CONTRAST',
339
+
340
+ primary: 'PRIMARY',
341
+ info: 'INFO',
342
+ success: 'SUCCESS',
343
+ warning: 'WARNING',
344
+ danger: 'DANGER',
345
+
346
+ neutral: 'NEUTRAL',
347
+ outline: 'OUTLINE',
348
+ }
56
349
 
57
- export { LIGHT_COLORS, DARK_COLORS }
350
+ export { ThemeAccent, ACCENT_COLORS, COLOR_BY_VARIANT, createDarkColors, createLightColors }
@@ -3,6 +3,6 @@ const DELAYS = {
3
3
  SHORT: 100,
4
4
  BASE: 200,
5
5
  LONG: 500,
6
- }
6
+ } as const
7
7
 
8
8
  export { DELAYS }
@@ -3,6 +3,6 @@ const DURATIONS = {
3
3
  SHORT: 100,
4
4
  BASE: 200,
5
5
  LONG: 500,
6
- }
6
+ } as const
7
7
 
8
8
  export { DURATIONS }
@@ -1,5 +1,6 @@
1
+ /** Логические имена семейств шрифтов; значение совпадает с ключом регистрации в `useFonts` (см. `~shared/assets/fonts`). */
1
2
  const FONTS = {
2
- BASE_MEDIUM: 'BASE_MEDIUM',
3
+ BASE_REGULAR: 'BASE_REGULAR',
3
4
  BASE_SEMIBOLD: 'BASE_SEMIBOLD',
4
5
  BASE_BOLD: 'BASE_BOLD',
5
6
  }
@@ -1,15 +1,20 @@
1
- import { BORDERS } from './borders'
2
- import { DARK_COLORS, LIGHT_COLORS } from './colors'
1
+ import { ANIMATIONS } from './animations'
2
+ import {
3
+ ACCENT_COLORS,
4
+ COLOR_BY_VARIANT,
5
+ createDarkColors,
6
+ createLightColors,
7
+ ThemeAccent,
8
+ } from './colors'
3
9
  import { DELAYS } from './delays'
4
10
  import { DURATIONS } from './durations'
5
11
  import { FONTS } from './fonts'
6
12
  import { SHADOWS } from './shadows'
7
13
  import { SIZES } from './sizes'
8
14
  import { TRANSPARENCIES } from './transparencies'
9
- import { WEIGHTS } from './weights'
10
15
 
11
16
  const common = {
12
- BORDERS,
17
+ ANIMATIONS,
13
18
  // COLORS,
14
19
  DELAYS,
15
20
  DURATIONS,
@@ -17,40 +22,57 @@ const common = {
17
22
  SHADOWS,
18
23
  SIZES,
19
24
  TRANSPARENCIES,
20
- WEIGHTS,
21
- }
22
-
23
- const lightTheme = {
24
- ...common,
25
- COLORS: LIGHT_COLORS,
26
- }
27
-
28
- const darkTheme = {
29
- ...common,
30
- COLORS: DARK_COLORS,
31
25
  }
32
26
 
27
+ /** Режим темы, выбранный пользователем. */
33
28
  enum ThemeMode {
34
29
  Light = 'light',
35
30
  Dark = 'dark',
36
31
  System = 'system',
37
32
  }
38
33
 
34
+ /** Фактический режим отображения после разрешения системного. */
39
35
  enum ThemeModeSystem {
40
36
  Light = 'light',
41
37
  Dark = 'dark',
42
38
  }
43
39
 
40
+ /** Стиль системного статус-бара по режиму отображения. */
44
41
  enum ThemeModeStatusBar {
45
42
  Dark = 'dark-content',
46
43
  Light = 'light-content',
47
44
  }
48
45
 
49
- const themes = {
50
- [ThemeModeSystem.Light]: lightTheme,
51
- [ThemeModeSystem.Dark]: darkTheme,
46
+ /** Собирает пару светлой/тёмной темы для заданного акцента. */
47
+ const createThemes = (themeAccent: ThemeAccent) => ({
48
+ [ThemeModeSystem.Light]: {
49
+ ...common,
50
+ COLORS: createLightColors(themeAccent),
51
+ },
52
+ [ThemeModeSystem.Dark]: {
53
+ ...common,
54
+ COLORS: createDarkColors(themeAccent),
55
+ },
56
+ })
57
+
58
+ /** Наборы тем по акцентному цвету. */
59
+ const themesByAccent = {
60
+ [ThemeAccent.Mint]: createThemes(ThemeAccent.Mint),
61
+ [ThemeAccent.Violet]: createThemes(ThemeAccent.Violet),
62
+ [ThemeAccent.Indigo]: createThemes(ThemeAccent.Indigo),
63
+ [ThemeAccent.Lime]: createThemes(ThemeAccent.Lime),
52
64
  }
53
65
 
54
- const hasDarkMode = LIGHT_COLORS !== DARK_COLORS
66
+ /** Темы акцента по умолчанию. */
67
+ const themes = themesByAccent[ThemeAccent.Mint]
55
68
 
56
- export { ThemeMode, ThemeModeSystem, ThemeModeStatusBar, themes, hasDarkMode }
69
+ export {
70
+ ACCENT_COLORS,
71
+ COLOR_BY_VARIANT,
72
+ ThemeAccent,
73
+ ThemeMode,
74
+ ThemeModeStatusBar,
75
+ ThemeModeSystem,
76
+ themes,
77
+ themesByAccent,
78
+ }
@@ -8,33 +8,15 @@ const SHADOWS = {
8
8
  height: 0,
9
9
  },
10
10
  },
11
- THIN: {
12
- elevation: 2,
13
- shadowOpacity: 0.2,
14
- shadowRadius: 1.5,
15
- shadowOffset: {
16
- width: 0,
17
- height: 1,
18
- },
19
- },
11
+ THIN: {},
20
12
  BASE: {
21
- elevation: 12,
22
- shadowOpacity: 0.4,
23
- shadowRadius: 6,
24
- shadowOffset: {
25
- width: 0,
26
- height: 6,
27
- },
28
- },
29
- FAT: {
30
- elevation: 24,
31
- shadowRadius: 16,
32
- shadowOpacity: 0.6,
33
- shadowOffset: {
34
- width: 0,
35
- height: 12,
36
- },
13
+ shadowColor: 'rgba(0,0,0, 0.4)',
14
+ shadowOffset: { width: 0, height: 0 },
15
+ shadowOpacity: 0.2,
16
+ shadowRadius: 5,
17
+ elevation: 20,
37
18
  },
19
+ FAT: {},
38
20
  }
39
21
 
40
22
  export { SHADOWS }
@@ -1,11 +1,16 @@
1
1
  const SIZES = {
2
- 'EMPTY': 0,
2
+ 'MIN': '0%',
3
+ '4XS': 0.125,
4
+ '3XS': 0.25,
3
5
  '2XS': 0.5,
4
6
  'XS': 1,
5
7
  'S': 2,
6
8
  'M': 4,
9
+ 'M-L': 6,
7
10
  'L': 8,
11
+ 'L-XL': 10,
8
12
  'XL': 12,
13
+ 'XL-2XL': 14,
9
14
  '2XL': 16,
10
15
  '3XL': 20,
11
16
  '4XL': 24,
@@ -25,8 +30,12 @@ const SIZES = {
25
30
  '18XL': 80,
26
31
  '19XL': 84,
27
32
  '20XL': 88,
33
+ '21XL': 92,
34
+ '22XL': 96,
35
+ '23XL': 100,
36
+ '24XL': 104,
28
37
  'MAX': '100%' as const,
29
38
  'INFINITY': Number.MAX_SAFE_INTEGER,
30
- }
39
+ } as const
31
40
 
32
41
  export { SIZES }
@@ -5,6 +5,6 @@ const TRANSPARENCIES = {
5
5
  STRONG: 0.2,
6
6
  LIGHT: 0.1,
7
7
  INVISIBLE: 0,
8
- }
8
+ } as const
9
9
 
10
10
  export { TRANSPARENCIES }
@@ -4,7 +4,7 @@ import { ThemeMode, ThemeModeSystem } from '../constants'
4
4
  import { useTheme } from './use-theme'
5
5
 
6
6
  const useThemeSetup = () => {
7
- const { themeMode, themeModeSystem, setThemeMode } = useTheme()
7
+ const { themeAccent, themeMode, themeModeSystem, setThemeAccent, setThemeMode } = useTheme()
8
8
 
9
9
  const isThemeModeSystem = themeMode === ThemeMode.System
10
10
  const isThemeModeSystemLight = isThemeModeSystem && themeModeSystem === ThemeModeSystem.Light
@@ -32,6 +32,7 @@ const useThemeSetup = () => {
32
32
  }, [setThemeMode])
33
33
 
34
34
  return {
35
+ themeAccent,
35
36
  themeMode,
36
37
  themeModeSystem,
37
38
  isThemeModeSystem,
@@ -39,6 +40,7 @@ const useThemeSetup = () => {
39
40
  isThemeModeSystemDark,
40
41
  isThemeModeLight,
41
42
  isThemeModeDark,
43
+ setThemeAccent,
42
44
  setThemeMode,
43
45
  setThemeModeLight,
44
46
  setThemeModeDark,
@@ -1,4 +1,13 @@
1
- export { ThemeMode, ThemeModeSystem } from './constants'
1
+ export {
2
+ ACCENT_COLORS,
3
+ COLOR_BY_VARIANT,
4
+ ThemeAccent,
5
+ ThemeMode,
6
+ ThemeModeSystem,
7
+ themesByAccent,
8
+ } from './constants'
2
9
  export { useThemeSetup, useThemeMode } from './hooks'
3
10
  export { default as ThemeProvider } from './theme.provider'
11
+ export { default as ThemeScope, ThemeScopeLight, ThemeScopeDark } from './theme.scope'
4
12
  export type { Theme } from './theme.types'
13
+ export { themeSnapshot, withBrightness, withTransparency } from './utils'