@tamagui/config-v5 0.0.0-bootstrap.0 → 3.0.0-beta.643.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/builder.cjs +19 -0
  3. package/dist/cjs/builder.native.cjs +21 -0
  4. package/dist/cjs/builder.native.js +23 -0
  5. package/dist/cjs/builder.native.js.map +1 -0
  6. package/dist/cjs/create-theme/applyMask.cjs +64 -0
  7. package/dist/cjs/create-theme/applyMask.native.cjs +69 -0
  8. package/dist/cjs/create-theme/applyMask.native.js +71 -0
  9. package/dist/cjs/create-theme/applyMask.native.js.map +1 -0
  10. package/dist/cjs/create-theme/combineMasks.cjs +45 -0
  11. package/dist/cjs/create-theme/combineMasks.native.cjs +67 -0
  12. package/dist/cjs/create-theme/combineMasks.native.js +69 -0
  13. package/dist/cjs/create-theme/combineMasks.native.js.map +1 -0
  14. package/dist/cjs/create-theme/createTheme.cjs +104 -0
  15. package/dist/cjs/create-theme/createTheme.native.cjs +109 -0
  16. package/dist/cjs/create-theme/createTheme.native.js +111 -0
  17. package/dist/cjs/create-theme/createTheme.native.js.map +1 -0
  18. package/dist/cjs/create-theme/createThemeTypes.cjs +17 -0
  19. package/dist/cjs/create-theme/createThemeTypes.native.cjs +19 -0
  20. package/dist/cjs/create-theme/createThemeTypes.native.js +21 -0
  21. package/dist/cjs/create-theme/createThemeTypes.native.js.map +1 -0
  22. package/dist/cjs/create-theme/helpers.cjs +35 -0
  23. package/dist/cjs/create-theme/helpers.native.cjs +39 -0
  24. package/dist/cjs/create-theme/helpers.native.js +41 -0
  25. package/dist/cjs/create-theme/helpers.native.js.map +1 -0
  26. package/dist/cjs/create-theme/index.cjs +24 -0
  27. package/dist/cjs/create-theme/index.native.cjs +26 -0
  28. package/dist/cjs/create-theme/index.native.js +28 -0
  29. package/dist/cjs/create-theme/index.native.js.map +1 -0
  30. package/dist/cjs/create-theme/isMinusZero.cjs +27 -0
  31. package/dist/cjs/create-theme/isMinusZero.native.cjs +29 -0
  32. package/dist/cjs/create-theme/isMinusZero.native.js +31 -0
  33. package/dist/cjs/create-theme/isMinusZero.native.js.map +1 -0
  34. package/dist/cjs/create-theme/masks.cjs +132 -0
  35. package/dist/cjs/create-theme/masks.native.cjs +174 -0
  36. package/dist/cjs/create-theme/masks.native.js +176 -0
  37. package/dist/cjs/create-theme/masks.native.js.map +1 -0
  38. package/dist/cjs/create-theme/tests.cjs +34 -0
  39. package/dist/cjs/create-theme/tests.native.cjs +36 -0
  40. package/dist/cjs/create-theme/tests.native.js +38 -0
  41. package/dist/cjs/create-theme/tests.native.js.map +1 -0
  42. package/dist/cjs/create-theme/themeInfo.cjs +39 -0
  43. package/dist/cjs/create-theme/themeInfo.native.cjs +41 -0
  44. package/dist/cjs/create-theme/themeInfo.native.js +43 -0
  45. package/dist/cjs/create-theme/themeInfo.native.js.map +1 -0
  46. package/dist/cjs/index.cjs +20 -0
  47. package/dist/cjs/index.native.cjs +22 -0
  48. package/dist/cjs/index.native.js +24 -0
  49. package/dist/cjs/index.native.js.map +1 -0
  50. package/dist/cjs/theme-builder/ThemeBuilder.cjs +222 -0
  51. package/dist/cjs/theme-builder/ThemeBuilder.native.cjs +315 -0
  52. package/dist/cjs/theme-builder/ThemeBuilder.native.js +317 -0
  53. package/dist/cjs/theme-builder/ThemeBuilder.native.js.map +1 -0
  54. package/dist/cjs/theme-builder/createStudioThemes.cjs +39 -0
  55. package/dist/cjs/theme-builder/createStudioThemes.native.cjs +41 -0
  56. package/dist/cjs/theme-builder/createStudioThemes.native.js +43 -0
  57. package/dist/cjs/theme-builder/createStudioThemes.native.js.map +1 -0
  58. package/dist/cjs/theme-builder/createThemes.cjs +339 -0
  59. package/dist/cjs/theme-builder/createThemes.native.cjs +348 -0
  60. package/dist/cjs/theme-builder/createThemes.native.js +350 -0
  61. package/dist/cjs/theme-builder/createThemes.native.js.map +1 -0
  62. package/dist/cjs/theme-builder/defaultComponentThemes.cjs +45 -0
  63. package/dist/cjs/theme-builder/defaultComponentThemes.native.cjs +47 -0
  64. package/dist/cjs/theme-builder/defaultComponentThemes.native.js +49 -0
  65. package/dist/cjs/theme-builder/defaultComponentThemes.native.js.map +1 -0
  66. package/dist/cjs/theme-builder/defaultTemplates.cjs +147 -0
  67. package/dist/cjs/theme-builder/defaultTemplates.native.cjs +154 -0
  68. package/dist/cjs/theme-builder/defaultTemplates.native.js +156 -0
  69. package/dist/cjs/theme-builder/defaultTemplates.native.js.map +1 -0
  70. package/dist/cjs/theme-builder/defaultTemplatesStronger.cjs +143 -0
  71. package/dist/cjs/theme-builder/defaultTemplatesStronger.native.cjs +150 -0
  72. package/dist/cjs/theme-builder/defaultTemplatesStronger.native.js +152 -0
  73. package/dist/cjs/theme-builder/defaultTemplatesStronger.native.js.map +1 -0
  74. package/dist/cjs/theme-builder/defaultTemplatesStrongest.cjs +143 -0
  75. package/dist/cjs/theme-builder/defaultTemplatesStrongest.native.cjs +150 -0
  76. package/dist/cjs/theme-builder/defaultTemplatesStrongest.native.js +152 -0
  77. package/dist/cjs/theme-builder/defaultTemplatesStrongest.native.js.map +1 -0
  78. package/dist/cjs/theme-builder/getThemeSuitePalettes.cjs +101 -0
  79. package/dist/cjs/theme-builder/getThemeSuitePalettes.native.cjs +123 -0
  80. package/dist/cjs/theme-builder/getThemeSuitePalettes.native.js +125 -0
  81. package/dist/cjs/theme-builder/getThemeSuitePalettes.native.js.map +1 -0
  82. package/dist/cjs/theme-builder/helpers.cjs +35 -0
  83. package/dist/cjs/theme-builder/helpers.native.cjs +39 -0
  84. package/dist/cjs/theme-builder/helpers.native.js +41 -0
  85. package/dist/cjs/theme-builder/helpers.native.js.map +1 -0
  86. package/dist/cjs/theme-builder/index.cjs +44 -0
  87. package/dist/cjs/theme-builder/index.native.cjs +46 -0
  88. package/dist/cjs/theme-builder/index.native.js +48 -0
  89. package/dist/cjs/theme-builder/index.native.js.map +1 -0
  90. package/dist/cjs/theme-builder/masks.cjs +92 -0
  91. package/dist/cjs/theme-builder/masks.native.cjs +94 -0
  92. package/dist/cjs/theme-builder/masks.native.js +96 -0
  93. package/dist/cjs/theme-builder/masks.native.js.map +1 -0
  94. package/dist/cjs/theme-builder/types.cjs +17 -0
  95. package/dist/cjs/theme-builder/types.native.cjs +19 -0
  96. package/dist/cjs/theme-builder/types.native.js +21 -0
  97. package/dist/cjs/theme-builder/types.native.js.map +1 -0
  98. package/dist/cjs/v5/opacify.cjs +120 -0
  99. package/dist/cjs/v5/opacify.native.cjs +127 -0
  100. package/dist/cjs/v5/opacify.native.js +129 -0
  101. package/dist/cjs/v5/opacify.native.js.map +1 -0
  102. package/dist/cjs/v5/subtleChildrenThemes.cjs +64 -0
  103. package/dist/cjs/v5/subtleChildrenThemes.native.cjs +72 -0
  104. package/dist/cjs/v5/subtleChildrenThemes.native.js +74 -0
  105. package/dist/cjs/v5/subtleChildrenThemes.native.js.map +1 -0
  106. package/dist/cjs/v5/v5-builder.cjs +31 -0
  107. package/dist/cjs/v5/v5-builder.native.cjs +33 -0
  108. package/dist/cjs/v5/v5-builder.native.js +35 -0
  109. package/dist/cjs/v5/v5-builder.native.js.map +1 -0
  110. package/dist/cjs/v5/v5-subtle-builder.cjs +30 -0
  111. package/dist/cjs/v5/v5-subtle-builder.native.cjs +32 -0
  112. package/dist/cjs/v5/v5-subtle-builder.native.js +34 -0
  113. package/dist/cjs/v5/v5-subtle-builder.native.js.map +1 -0
  114. package/dist/cjs/v5/v5-templates.cjs +111 -0
  115. package/dist/cjs/v5/v5-templates.native.cjs +119 -0
  116. package/dist/cjs/v5/v5-templates.native.js +121 -0
  117. package/dist/cjs/v5/v5-templates.native.js.map +1 -0
  118. package/dist/cjs/v5/v5-themes.cjs +390 -0
  119. package/dist/cjs/v5/v5-themes.native.cjs +440 -0
  120. package/dist/cjs/v5/v5-themes.native.js +442 -0
  121. package/dist/cjs/v5/v5-themes.native.js.map +1 -0
  122. package/dist/esm/builder.mjs +1 -0
  123. package/dist/esm/builder.native.js +1 -0
  124. package/dist/esm/create-theme/applyMask.mjs +41 -0
  125. package/dist/esm/create-theme/applyMask.mjs.map +1 -0
  126. package/dist/esm/create-theme/applyMask.native.js +44 -0
  127. package/dist/esm/create-theme/applyMask.native.js.map +1 -0
  128. package/dist/esm/create-theme/combineMasks.mjs +25 -0
  129. package/dist/esm/create-theme/combineMasks.mjs.map +1 -0
  130. package/dist/esm/create-theme/combineMasks.native.js +45 -0
  131. package/dist/esm/create-theme/combineMasks.native.js.map +1 -0
  132. package/dist/esm/create-theme/createTheme.mjs +80 -0
  133. package/dist/esm/create-theme/createTheme.mjs.map +1 -0
  134. package/dist/esm/create-theme/createTheme.native.js +83 -0
  135. package/dist/esm/create-theme/createTheme.native.js.map +1 -0
  136. package/dist/esm/create-theme/createThemeTypes.mjs +0 -0
  137. package/dist/esm/create-theme/createThemeTypes.native.js +0 -0
  138. package/dist/esm/create-theme/helpers.mjs +10 -0
  139. package/dist/esm/create-theme/helpers.mjs.map +1 -0
  140. package/dist/esm/create-theme/helpers.native.js +12 -0
  141. package/dist/esm/create-theme/helpers.native.js.map +1 -0
  142. package/dist/esm/create-theme/index.mjs +11 -0
  143. package/dist/esm/create-theme/index.native.js +11 -0
  144. package/dist/esm/create-theme/isMinusZero.mjs +6 -0
  145. package/dist/esm/create-theme/isMinusZero.mjs.map +1 -0
  146. package/dist/esm/create-theme/isMinusZero.native.js +6 -0
  147. package/dist/esm/create-theme/isMinusZero.native.js.map +1 -0
  148. package/dist/esm/create-theme/masks.mjs +103 -0
  149. package/dist/esm/create-theme/masks.mjs.map +1 -0
  150. package/dist/esm/create-theme/masks.native.js +143 -0
  151. package/dist/esm/create-theme/masks.native.js.map +1 -0
  152. package/dist/esm/create-theme/tests.mjs +36 -0
  153. package/dist/esm/create-theme/tests.mjs.map +1 -0
  154. package/dist/esm/create-theme/tests.native.js +36 -0
  155. package/dist/esm/create-theme/tests.native.js.map +1 -0
  156. package/dist/esm/create-theme/themeInfo.mjs +15 -0
  157. package/dist/esm/create-theme/themeInfo.mjs.map +1 -0
  158. package/dist/esm/create-theme/themeInfo.native.js +15 -0
  159. package/dist/esm/create-theme/themeInfo.native.js.map +1 -0
  160. package/dist/esm/index.mjs +3 -0
  161. package/dist/esm/index.native.js +3 -0
  162. package/dist/esm/theme-builder/ThemeBuilder.mjs +199 -0
  163. package/dist/esm/theme-builder/ThemeBuilder.mjs.map +1 -0
  164. package/dist/esm/theme-builder/ThemeBuilder.native.js +290 -0
  165. package/dist/esm/theme-builder/ThemeBuilder.native.js.map +1 -0
  166. package/dist/esm/theme-builder/createStudioThemes.mjs +19 -0
  167. package/dist/esm/theme-builder/createStudioThemes.mjs.map +1 -0
  168. package/dist/esm/theme-builder/createStudioThemes.native.js +19 -0
  169. package/dist/esm/theme-builder/createStudioThemes.native.js.map +1 -0
  170. package/dist/esm/theme-builder/createThemes.mjs +311 -0
  171. package/dist/esm/theme-builder/createThemes.mjs.map +1 -0
  172. package/dist/esm/theme-builder/createThemes.native.js +318 -0
  173. package/dist/esm/theme-builder/createThemes.native.js.map +1 -0
  174. package/dist/esm/theme-builder/defaultComponentThemes.mjs +24 -0
  175. package/dist/esm/theme-builder/defaultComponentThemes.mjs.map +1 -0
  176. package/dist/esm/theme-builder/defaultComponentThemes.native.js +24 -0
  177. package/dist/esm/theme-builder/defaultComponentThemes.native.js.map +1 -0
  178. package/dist/esm/theme-builder/defaultTemplates.mjs +127 -0
  179. package/dist/esm/theme-builder/defaultTemplates.mjs.map +1 -0
  180. package/dist/esm/theme-builder/defaultTemplates.native.js +132 -0
  181. package/dist/esm/theme-builder/defaultTemplates.native.js.map +1 -0
  182. package/dist/esm/theme-builder/defaultTemplatesStronger.mjs +123 -0
  183. package/dist/esm/theme-builder/defaultTemplatesStronger.mjs.map +1 -0
  184. package/dist/esm/theme-builder/defaultTemplatesStronger.native.js +128 -0
  185. package/dist/esm/theme-builder/defaultTemplatesStronger.native.js.map +1 -0
  186. package/dist/esm/theme-builder/defaultTemplatesStrongest.mjs +123 -0
  187. package/dist/esm/theme-builder/defaultTemplatesStrongest.mjs.map +1 -0
  188. package/dist/esm/theme-builder/defaultTemplatesStrongest.native.js +128 -0
  189. package/dist/esm/theme-builder/defaultTemplatesStrongest.native.js.map +1 -0
  190. package/dist/esm/theme-builder/getThemeSuitePalettes.mjs +78 -0
  191. package/dist/esm/theme-builder/getThemeSuitePalettes.mjs.map +1 -0
  192. package/dist/esm/theme-builder/getThemeSuitePalettes.native.js +98 -0
  193. package/dist/esm/theme-builder/getThemeSuitePalettes.native.js.map +1 -0
  194. package/dist/esm/theme-builder/helpers.mjs +10 -0
  195. package/dist/esm/theme-builder/helpers.mjs.map +1 -0
  196. package/dist/esm/theme-builder/helpers.native.js +12 -0
  197. package/dist/esm/theme-builder/helpers.native.js.map +1 -0
  198. package/dist/esm/theme-builder/index.mjs +12 -0
  199. package/dist/esm/theme-builder/index.native.js +12 -0
  200. package/dist/esm/theme-builder/masks.mjs +72 -0
  201. package/dist/esm/theme-builder/masks.mjs.map +1 -0
  202. package/dist/esm/theme-builder/masks.native.js +72 -0
  203. package/dist/esm/theme-builder/masks.native.js.map +1 -0
  204. package/dist/esm/theme-builder/types.mjs +0 -0
  205. package/dist/esm/theme-builder/types.native.js +0 -0
  206. package/dist/esm/v5/opacify.mjs +96 -0
  207. package/dist/esm/v5/opacify.mjs.map +1 -0
  208. package/dist/esm/v5/opacify.native.js +101 -0
  209. package/dist/esm/v5/opacify.native.js.map +1 -0
  210. package/dist/esm/v5/subtleChildrenThemes.mjs +41 -0
  211. package/dist/esm/v5/subtleChildrenThemes.mjs.map +1 -0
  212. package/dist/esm/v5/subtleChildrenThemes.native.js +47 -0
  213. package/dist/esm/v5/subtleChildrenThemes.native.js.map +1 -0
  214. package/dist/esm/v5/v5-builder.mjs +6 -0
  215. package/dist/esm/v5/v5-builder.native.js +6 -0
  216. package/dist/esm/v5/v5-subtle-builder.mjs +5 -0
  217. package/dist/esm/v5/v5-subtle-builder.native.js +5 -0
  218. package/dist/esm/v5/v5-templates.mjs +91 -0
  219. package/dist/esm/v5/v5-templates.mjs.map +1 -0
  220. package/dist/esm/v5/v5-templates.native.js +97 -0
  221. package/dist/esm/v5/v5-templates.native.js.map +1 -0
  222. package/dist/esm/v5/v5-themes.mjs +352 -0
  223. package/dist/esm/v5/v5-themes.mjs.map +1 -0
  224. package/dist/esm/v5/v5-themes.native.js +400 -0
  225. package/dist/esm/v5/v5-themes.native.js.map +1 -0
  226. package/package.json +59 -8
  227. package/src/builder.ts +1 -0
  228. package/src/create-theme/applyMask.tsx +69 -0
  229. package/src/create-theme/combineMasks.tsx +29 -0
  230. package/src/create-theme/createTheme.tsx +126 -0
  231. package/src/create-theme/createThemeTypes.tsx +85 -0
  232. package/src/create-theme/helpers.tsx +44 -0
  233. package/src/create-theme/index.ts +6 -0
  234. package/src/create-theme/isMinusZero.tsx +3 -0
  235. package/src/create-theme/masks.tsx +137 -0
  236. package/src/create-theme/tests.tsx +28 -0
  237. package/src/create-theme/themeInfo.tsx +36 -0
  238. package/src/index.ts +2 -0
  239. package/src/theme-builder/ThemeBuilder.ts +514 -0
  240. package/src/theme-builder/createStudioThemes.ts +28 -0
  241. package/src/theme-builder/createThemes.ts +794 -0
  242. package/src/theme-builder/defaultComponentThemes.ts +26 -0
  243. package/src/theme-builder/defaultTemplates.ts +157 -0
  244. package/src/theme-builder/defaultTemplatesStronger.ts +152 -0
  245. package/src/theme-builder/defaultTemplatesStrongest.ts +152 -0
  246. package/src/theme-builder/getThemeSuitePalettes.ts +101 -0
  247. package/src/theme-builder/helpers.ts +44 -0
  248. package/src/theme-builder/index.ts +22 -0
  249. package/src/theme-builder/masks.tsx +83 -0
  250. package/src/theme-builder/types.ts +97 -0
  251. package/src/v5/opacify.ts +125 -0
  252. package/src/v5/subtleChildrenThemes.ts +54 -0
  253. package/src/v5/v5-builder.ts +6 -0
  254. package/src/v5/v5-subtle-builder.ts +5 -0
  255. package/src/v5/v5-templates.ts +126 -0
  256. package/src/v5/v5-themes.ts +615 -0
  257. package/types/builder.d.ts +2 -0
  258. package/types/builder.d.ts.map +1 -0
  259. package/types/create-theme/applyMask.d.ts +7 -0
  260. package/types/create-theme/applyMask.d.ts.map +1 -0
  261. package/types/create-theme/combineMasks.d.ts +3 -0
  262. package/types/create-theme/combineMasks.d.ts.map +1 -0
  263. package/types/create-theme/createTheme.d.ts +18 -0
  264. package/types/create-theme/createTheme.d.ts.map +1 -0
  265. package/types/create-theme/createThemeTypes.d.ts +66 -0
  266. package/types/create-theme/createThemeTypes.d.ts.map +1 -0
  267. package/types/create-theme/helpers.d.ts +24 -0
  268. package/types/create-theme/helpers.d.ts.map +1 -0
  269. package/types/create-theme/index.d.ts +7 -0
  270. package/types/create-theme/index.d.ts.map +1 -0
  271. package/types/create-theme/isMinusZero.d.ts +2 -0
  272. package/types/create-theme/isMinusZero.d.ts.map +1 -0
  273. package/types/create-theme/masks.d.ts +14 -0
  274. package/types/create-theme/masks.d.ts.map +1 -0
  275. package/types/create-theme/tests.d.ts +2 -0
  276. package/types/create-theme/tests.d.ts.map +1 -0
  277. package/types/create-theme/themeInfo.d.ts +12 -0
  278. package/types/create-theme/themeInfo.d.ts.map +1 -0
  279. package/types/index.d.ts +3 -0
  280. package/types/index.d.ts.map +1 -0
  281. package/types/theme-builder/ThemeBuilder.d.ts +80 -0
  282. package/types/theme-builder/ThemeBuilder.d.ts.map +1 -0
  283. package/types/theme-builder/createStudioThemes.d.ts +8 -0
  284. package/types/theme-builder/createStudioThemes.d.ts.map +1 -0
  285. package/types/theme-builder/createThemes.d.ts +141 -0
  286. package/types/theme-builder/createThemes.d.ts.map +1 -0
  287. package/types/theme-builder/defaultComponentThemes.d.ts +63 -0
  288. package/types/theme-builder/defaultComponentThemes.d.ts.map +1 -0
  289. package/types/theme-builder/defaultTemplates.d.ts +42 -0
  290. package/types/theme-builder/defaultTemplates.d.ts.map +1 -0
  291. package/types/theme-builder/defaultTemplatesStronger.d.ts +42 -0
  292. package/types/theme-builder/defaultTemplatesStronger.d.ts.map +1 -0
  293. package/types/theme-builder/defaultTemplatesStrongest.d.ts +42 -0
  294. package/types/theme-builder/defaultTemplatesStrongest.d.ts.map +1 -0
  295. package/types/theme-builder/getThemeSuitePalettes.d.ts +7 -0
  296. package/types/theme-builder/getThemeSuitePalettes.d.ts.map +1 -0
  297. package/types/theme-builder/helpers.d.ts +24 -0
  298. package/types/theme-builder/helpers.d.ts.map +1 -0
  299. package/types/theme-builder/index.d.ts +11 -0
  300. package/types/theme-builder/index.d.ts.map +1 -0
  301. package/types/theme-builder/masks.d.ts +18 -0
  302. package/types/theme-builder/masks.d.ts.map +1 -0
  303. package/types/theme-builder/types.d.ts +76 -0
  304. package/types/theme-builder/types.d.ts.map +1 -0
  305. package/types/v5/opacify.d.ts +9 -0
  306. package/types/v5/opacify.d.ts.map +1 -0
  307. package/types/v5/subtleChildrenThemes.d.ts +305 -0
  308. package/types/v5/subtleChildrenThemes.d.ts.map +1 -0
  309. package/types/v5/v5-builder.d.ts +4 -0
  310. package/types/v5/v5-builder.d.ts.map +1 -0
  311. package/types/v5/v5-subtle-builder.d.ts +3 -0
  312. package/types/v5/v5-subtle-builder.d.ts.map +1 -0
  313. package/types/v5/v5-templates.d.ts +42 -0
  314. package/types/v5/v5-templates.d.ts.map +1 -0
  315. package/types/v5/v5-themes.d.ts +525 -0
  316. package/types/v5/v5-themes.d.ts.map +1 -0
  317. package/README.md +0 -1
@@ -0,0 +1,126 @@
1
+ import type {
2
+ CreateThemeOptions,
3
+ CreateThemePalette,
4
+ GenericTheme,
5
+ ThemeMask,
6
+ } from './createThemeTypes'
7
+ import { isMinusZero } from './isMinusZero'
8
+ import { setThemeInfo } from './themeInfo'
9
+
10
+ const identityCache = new Map()
11
+
12
+ export function createThemeWithPalettes<
13
+ Definition extends ThemeMask,
14
+ Extras extends GenericTheme = {},
15
+ >(
16
+ palettes: Record<string, CreateThemePalette>,
17
+ defaultPalette: string,
18
+ definition: Definition,
19
+ options?: CreateThemeOptions,
20
+ name?: string,
21
+ skipCache = false
22
+ ): {
23
+ [key in keyof Definition | keyof Extras]: string
24
+ } {
25
+ if (!palettes[defaultPalette]) {
26
+ throw new Error(`No palette: ${defaultPalette}`)
27
+ }
28
+ const newDef = { ...definition }
29
+ for (const key in definition) {
30
+ let val = definition[key]
31
+ if (typeof val === 'string') {
32
+ const [altPaletteName, altPaletteIndex] = val.split('.')
33
+ const parentName = defaultPalette.split('_')[0]
34
+ const altPalette =
35
+ palettes[altPaletteName] || palettes[`${parentName}_${altPaletteName}`]
36
+
37
+ if (altPalette && /^-?\d+$/.test(altPaletteIndex)) {
38
+ const next = getValue(altPalette, +altPaletteIndex)
39
+ if (typeof next !== 'undefined') {
40
+ newDef[key] = next as any
41
+ }
42
+ }
43
+ }
44
+ }
45
+
46
+ return createTheme(palettes[defaultPalette], newDef, options, name, skipCache)
47
+ }
48
+
49
+ export function createTheme<
50
+ Definition extends ThemeMask,
51
+ Extras extends GenericTheme = {},
52
+ >(
53
+ palette: CreateThemePalette,
54
+ definition: Definition,
55
+ options?: CreateThemeOptions,
56
+ name?: string,
57
+ skipCache = false
58
+ ): {
59
+ [key in keyof Definition | keyof Extras]: string
60
+ } {
61
+ const cacheKey = skipCache ? '' : JSON.stringify([name, palette, definition, options])
62
+ if (!skipCache) {
63
+ if (identityCache.has(cacheKey)) {
64
+ return identityCache.get(cacheKey)
65
+ }
66
+ }
67
+
68
+ const theme = {
69
+ ...(Object.fromEntries(
70
+ Object.entries(definition).map(([key, offset]) => {
71
+ return [key, getValue(palette, offset)]
72
+ })
73
+ ) as any),
74
+ ...options?.nonInheritedValues,
75
+ }
76
+
77
+ setThemeInfo(theme, { palette, definition, options, name })
78
+
79
+ if (cacheKey) {
80
+ identityCache.set(cacheKey, theme)
81
+ }
82
+
83
+ return theme
84
+ }
85
+
86
+ const getValue = (palette: CreateThemePalette, value: string | number) => {
87
+ if (!palette) {
88
+ throw new Error(`No palette!`)
89
+ }
90
+ if (typeof value === 'string') {
91
+ return value
92
+ }
93
+ const max = palette.length - 1
94
+ const isPositive = value === 0 ? !isMinusZero(value) : value >= 0
95
+ const next = isPositive ? value : max + value
96
+ const index = Math.min(Math.max(0, next), max)
97
+ return palette[index]
98
+ }
99
+
100
+ type SubThemeKeys<ParentKeys, ChildKeys> = `${ParentKeys extends string
101
+ ? ParentKeys
102
+ : never}_${ChildKeys extends string ? ChildKeys : never}`
103
+
104
+ type ChildGetter<Name extends string | number | symbol, Theme extends GenericTheme> = (
105
+ name: Name,
106
+ theme: Theme
107
+ ) => { [key: string]: Theme }
108
+
109
+ export function addChildren<
110
+ Themes extends { [key: string]: GenericTheme },
111
+ GetChildren extends ChildGetter<keyof Themes, Themes[keyof Themes]>,
112
+ >(
113
+ themes: Themes,
114
+ getChildren: GetChildren
115
+ ): Themes & {
116
+ [key in SubThemeKeys<keyof Themes, keyof ReturnType<GetChildren>>]: Themes[keyof Themes]
117
+ } {
118
+ const out = { ...themes }
119
+ for (const key in themes) {
120
+ const subThemes = getChildren(key, themes[key])
121
+ for (const sKey in subThemes) {
122
+ out[`${key}_${sKey}`] = subThemes[sKey] as any
123
+ }
124
+ }
125
+ return out as any
126
+ }
@@ -0,0 +1,85 @@
1
+ import type { Variable } from '@tamagui/web'
2
+
3
+ export type CreateThemePalette = (string | Variable)[]
4
+
5
+ export type ThemeMask = Record<string, string | number>
6
+
7
+ export type MaskOptions = {
8
+ palette?: CreateThemePalette
9
+ override?: Partial<ThemeMask>
10
+ overrideStrategy?: 'shift' | 'swap'
11
+ overrideSwap?: Partial<ThemeMask>
12
+ overrideShift?: Partial<ThemeMask>
13
+ skip?: Partial<ThemeMask>
14
+ strength?: number
15
+ max?: number
16
+ min?: number
17
+ parentName?: string
18
+ }
19
+
20
+ export type GenericTheme = { [key: string]: string | Variable }
21
+
22
+ export type MaskFunction = <A extends ThemeMask>(template: A, options: MaskOptions) => A
23
+
24
+ export type CreateMask = {
25
+ name: string
26
+ mask: MaskFunction
27
+ }
28
+
29
+ export type CreateThemeOptions = {
30
+ nonInheritedValues?: GenericTheme
31
+ }
32
+
33
+ export type Palette = string[]
34
+
35
+ export type Template = {
36
+ [key: string]: number | string
37
+ }
38
+
39
+ export type ThemeUsingMask<Masks = string> = MaskOptions & {
40
+ mask: Masks
41
+ avoidNestingWithin?: string[]
42
+ childOptions?: MaskOptions & {
43
+ mask?: Masks
44
+ }
45
+ }
46
+
47
+ export type ThemeUsingTemplate = CreateThemeOptions & {
48
+ palette?: string
49
+ template: string
50
+ }
51
+
52
+ type ThemePreDefined = {
53
+ theme: { [key: string]: string }
54
+ }
55
+
56
+ export type Theme<Masks = string> =
57
+ | ThemePreDefined
58
+ | ThemeUsingTemplate
59
+ | ThemeUsingMask<Masks>
60
+
61
+ export type ThemeWithParent<Masks = string> = Theme<Masks> & {
62
+ parent: string
63
+ }
64
+
65
+ export type PaletteDefinitions = {
66
+ [key: string]: Palette
67
+ }
68
+
69
+ export type ThemeDefinition<Masks extends string = string> =
70
+ | Theme<Masks>
71
+ | ThemeWithParent<Masks>[]
72
+
73
+ type UnionableString = string & {}
74
+
75
+ export type ThemeDefinitions<Masks extends string = string> = {
76
+ [key: string]: ThemeDefinition<Masks | UnionableString>
77
+ }
78
+
79
+ export type TemplateDefinitions = {
80
+ [key: string]: Template
81
+ }
82
+
83
+ export type MaskDefinitions = {
84
+ [key: string]: CreateMask | CreateMask['mask']
85
+ }
@@ -0,0 +1,44 @@
1
+ type ObjectType = Record<PropertyKey, unknown>
2
+
3
+ type PickByValue<OBJ_T, VALUE_T> = // From https://stackoverflow.com/a/55153000
4
+ Pick<OBJ_T, { [K in keyof OBJ_T]: OBJ_T[K] extends VALUE_T ? K : never }[keyof OBJ_T]>
5
+
6
+ type ObjectEntries<OBJ_T> = // From https://stackoverflow.com/a/60142095
7
+ { [K in keyof OBJ_T]: [keyof PickByValue<OBJ_T, OBJ_T[K]>, OBJ_T[K]] }[keyof OBJ_T][]
8
+
9
+ export const objectKeys = <O extends object>(obj: O) => Object.keys(obj) as Array<keyof O>
10
+
11
+ export function objectEntries<OBJ_T extends ObjectType>(
12
+ obj: OBJ_T
13
+ ): ObjectEntries<OBJ_T> {
14
+ return Object.entries(obj) as ObjectEntries<OBJ_T>
15
+ }
16
+
17
+ type EntriesType =
18
+ | [PropertyKey, unknown][]
19
+ | ReadonlyArray<readonly [PropertyKey, unknown]>
20
+
21
+ // Existing Utils
22
+ type DeepWritable<OBJ_T> = { -readonly [P in keyof OBJ_T]: DeepWritable<OBJ_T[P]> }
23
+ type UnionToIntersection<UNION_T> = // From https://stackoverflow.com/a/50375286
24
+ (UNION_T extends any ? (k: UNION_T) => void : never) extends (k: infer I) => void
25
+ ? I
26
+ : never
27
+
28
+ // New Utils
29
+ type UnionObjectFromArrayOfPairs<ARR_T extends EntriesType> =
30
+ DeepWritable<ARR_T> extends (infer R)[]
31
+ ? R extends [infer key, infer val]
32
+ ? { [prop in key & PropertyKey]: val }
33
+ : never
34
+ : never
35
+ type MergeIntersectingObjects<ObjT> = { [key in keyof ObjT]: ObjT[key] }
36
+ type EntriesToObject<ARR_T extends EntriesType> = MergeIntersectingObjects<
37
+ UnionToIntersection<UnionObjectFromArrayOfPairs<ARR_T>>
38
+ >
39
+
40
+ export function objectFromEntries<ARR_T extends EntriesType>(
41
+ arr: ARR_T
42
+ ): EntriesToObject<ARR_T> {
43
+ return Object.fromEntries(arr) as EntriesToObject<ARR_T>
44
+ }
@@ -0,0 +1,6 @@
1
+ export * from './createTheme'
2
+ export * from './masks'
3
+ export * from './combineMasks'
4
+ export * from './applyMask'
5
+ export * from './createThemeTypes'
6
+ export * from './helpers'
@@ -0,0 +1,3 @@
1
+ export function isMinusZero(value: number): boolean {
2
+ return 1 / value === Number.NEGATIVE_INFINITY
3
+ }
@@ -0,0 +1,137 @@
1
+ import type { CreateMask, MaskFunction, MaskOptions } from './createThemeTypes'
2
+ import { objectEntries, objectFromEntries } from './helpers'
3
+ import { isMinusZero } from './isMinusZero'
4
+
5
+ export const createMask = <C extends CreateMask | MaskFunction>(
6
+ createMask: C
7
+ ): CreateMask =>
8
+ typeof createMask === 'function'
9
+ ? { name: createMask.name || 'unnamed', mask: createMask }
10
+ : createMask
11
+
12
+ export const skipMask: CreateMask = {
13
+ name: 'skip-mask',
14
+ mask: (template, opts) => {
15
+ const { skip } = opts
16
+ const result = Object.fromEntries(
17
+ Object.entries(template)
18
+ .filter(([k]) => !skip || !(k in skip))
19
+ .map(([k, v]) => [k, applyOverrides(k, v, opts)])
20
+ ) as typeof template
21
+
22
+ return result
23
+ },
24
+ }
25
+
26
+ function applyOverrides(key: string, value: number | string, opts: MaskOptions) {
27
+ let override: string | number | undefined
28
+ let strategy = opts.overrideStrategy
29
+
30
+ const overrideSwap = opts.overrideSwap?.[key]
31
+ if (typeof overrideSwap !== 'undefined') {
32
+ override = overrideSwap
33
+ strategy = 'swap'
34
+ } else {
35
+ const overrideShift = opts.overrideShift?.[key]
36
+ if (typeof overrideShift !== 'undefined') {
37
+ override = overrideShift
38
+ strategy = 'shift'
39
+ } else {
40
+ const overrideDefault = opts.override?.[key]
41
+ if (typeof overrideDefault !== 'undefined') {
42
+ override = overrideDefault
43
+ strategy = opts.overrideStrategy
44
+ }
45
+ }
46
+ }
47
+
48
+ if (typeof override === 'undefined') return value
49
+ if (typeof override === 'string') return value
50
+
51
+ if (strategy === 'swap') {
52
+ return override
53
+ }
54
+
55
+ return value
56
+ }
57
+
58
+ export const createIdentityMask = (): CreateMask => ({
59
+ name: 'identity-mask',
60
+ mask: (template, opts) => skipMask.mask(template, opts),
61
+ })
62
+
63
+ export const createInverseMask = (): CreateMask => {
64
+ const mask: CreateMask = {
65
+ name: 'inverse-mask',
66
+ mask: (template, opts) => {
67
+ const inversed = objectFromEntries(
68
+ objectEntries(template).map(([k, v]) => [k, -v])
69
+ ) as any
70
+ return skipMask.mask(inversed, opts)
71
+ },
72
+ }
73
+ return mask
74
+ }
75
+
76
+ type ShiftMaskOptions = { inverse?: boolean }
77
+
78
+ export const createShiftMask = (
79
+ { inverse }: ShiftMaskOptions = {},
80
+ defaultOptions?: MaskOptions
81
+ ): CreateMask => {
82
+ const mask: CreateMask = {
83
+ name: 'shift-mask',
84
+ mask: (template, opts) => {
85
+ const {
86
+ override,
87
+ overrideStrategy = 'shift',
88
+ max: maxIn,
89
+ palette,
90
+ min = 0,
91
+ strength = 1,
92
+ } = { ...defaultOptions, ...opts }
93
+ const values = Object.entries(template)
94
+ const max =
95
+ maxIn ?? (palette ? Object.values(palette).length - 1 : Number.POSITIVE_INFINITY)
96
+ const out = {}
97
+ for (const [key, value] of values) {
98
+ if (typeof value === 'string') continue
99
+ if (typeof override?.[key] === 'number') {
100
+ const overrideVal = override[key] as number
101
+ out[key] = overrideStrategy === 'shift' ? value + overrideVal : overrideVal
102
+ continue
103
+ }
104
+ if (typeof override?.[key] === 'string') {
105
+ out[key] = override[key]
106
+ continue
107
+ }
108
+ const isPositive = value === 0 ? !isMinusZero(value) : value >= 0
109
+ const direction = isPositive ? 1 : -1
110
+ const invert = inverse ? -1 : 1
111
+ const next = value + strength * direction * invert
112
+ const clamped = isPositive
113
+ ? Math.max(min, Math.min(max, next))
114
+ : Math.min(-min, Math.max(-max, next))
115
+
116
+ out[key] = clamped
117
+ }
118
+
119
+ const skipped = skipMask.mask(out, opts) as typeof template
120
+ return skipped
121
+ },
122
+ }
123
+ return mask
124
+ }
125
+
126
+ export const createWeakenMask = (defaultOptions?: MaskOptions): CreateMask => ({
127
+ name: 'soften-mask',
128
+ mask: createShiftMask({}, defaultOptions).mask,
129
+ })
130
+
131
+ export const createSoftenMask: (defaultOptions?: MaskOptions) => CreateMask =
132
+ createWeakenMask
133
+
134
+ export const createStrengthenMask = (defaultOptions?: MaskOptions): CreateMask => ({
135
+ name: 'strengthen-mask',
136
+ mask: createShiftMask({ inverse: true }, defaultOptions).mask,
137
+ })
@@ -0,0 +1,28 @@
1
+ import { applyMask } from './applyMask'
2
+ import { createTheme } from './createTheme'
3
+ import { createStrengthenMask, createWeakenMask } from './masks'
4
+
5
+ // --- tests ---
6
+ if (process.env.NODE_ENV === 'development') {
7
+ const palette = ['0', '1', '2', '3', '-3', '-2', '-1', '-0']
8
+ const template = { bg: 1, fg: -1 }
9
+
10
+ const stongerMask = createStrengthenMask()
11
+ const weakerMask = createWeakenMask()
12
+
13
+ const theme = createTheme(palette, template)
14
+ if (theme.bg !== '1') throw `❌`
15
+ if (theme.fg !== '-1') throw `❌`
16
+
17
+ const str = applyMask(theme, stongerMask)
18
+ if (str.bg !== '0') throw `❌`
19
+ if (str.fg !== '-0') throw `❌`
20
+
21
+ const weak = applyMask(theme, weakerMask)
22
+ if (weak.bg !== '2') throw `❌`
23
+ if (weak.fg !== '-2') throw `❌`
24
+
25
+ const weak2 = applyMask(theme, weakerMask, { strength: 2 })
26
+ if (weak2.bg !== '3') throw `❌`
27
+ if (weak2.fg !== '-3') throw `❌`
28
+ }
@@ -0,0 +1,36 @@
1
+ import type {
2
+ CreateThemeOptions,
3
+ CreateThemePalette,
4
+ GenericTheme,
5
+ ThemeMask,
6
+ } from './createThemeTypes'
7
+
8
+ export type ThemeInfo = {
9
+ palette: CreateThemePalette
10
+ definition: ThemeMask
11
+ options?: CreateThemeOptions
12
+ cache: Map<any, any>
13
+ }
14
+
15
+ const THEME_INFO = new Map<string, ThemeInfo>()
16
+
17
+ export const getThemeInfo = (
18
+ theme: GenericTheme | ThemeMask,
19
+ name?: string
20
+ ): ThemeInfo | undefined => {
21
+ return THEME_INFO.get(name || JSON.stringify(theme))
22
+ }
23
+
24
+ export const setThemeInfo = (
25
+ theme: GenericTheme | ThemeMask,
26
+ info: Pick<ThemeInfo, 'palette' | 'definition' | 'options'> & {
27
+ name?: string
28
+ }
29
+ ): void => {
30
+ const next = {
31
+ ...info,
32
+ cache: new Map(),
33
+ }
34
+ THEME_INFO.set(info.name || JSON.stringify(theme), next)
35
+ THEME_INFO.set(JSON.stringify(info.definition), next)
36
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './theme-builder'
2
+ export * from './v5/v5-subtle-builder'