@tamagui/core 1.0.0-alpha.11 → 1.0.0-alpha.12

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 (241) hide show
  1. package/dist/cjs/types.js.map +1 -1
  2. package/dist/esm/constants/constants.js +14 -0
  3. package/dist/esm/constants/constants.js.map +7 -0
  4. package/dist/esm/constants/platform.js +19 -0
  5. package/dist/esm/constants/platform.js.map +7 -0
  6. package/dist/esm/constants/pseudos.js +18 -0
  7. package/dist/esm/constants/pseudos.js.map +7 -0
  8. package/dist/esm/constants/rnw.js +22 -0
  9. package/dist/esm/constants/rnw.js.map +7 -0
  10. package/dist/esm/createComponent.js +464 -0
  11. package/dist/esm/createComponent.js.map +7 -0
  12. package/dist/esm/createFont.js +28 -0
  13. package/dist/esm/createFont.js.map +7 -0
  14. package/dist/esm/createShorthands.js +10 -0
  15. package/dist/esm/createShorthands.js.map +7 -0
  16. package/dist/esm/createTamagui.js +168 -0
  17. package/dist/esm/createTamagui.js.map +7 -0
  18. package/dist/esm/createTheme.js +20 -0
  19. package/dist/esm/createTheme.js.map +7 -0
  20. package/dist/esm/createTokens.js +33 -0
  21. package/dist/esm/createTokens.js.map +7 -0
  22. package/dist/esm/createVariable.js +25 -0
  23. package/dist/esm/createVariable.js.map +7 -0
  24. package/dist/esm/helpers/addStylesUsingClassname.js +57 -0
  25. package/dist/esm/helpers/addStylesUsingClassname.js.map +7 -0
  26. package/dist/esm/helpers/createMediaStyle.js +34 -0
  27. package/dist/esm/helpers/createMediaStyle.js.map +7 -0
  28. package/dist/esm/helpers/createPropMapper.js +160 -0
  29. package/dist/esm/helpers/createPropMapper.js.map +7 -0
  30. package/dist/esm/helpers/createTamaguiProvider.js +25 -0
  31. package/dist/esm/helpers/createTamaguiProvider.js.map +7 -0
  32. package/dist/esm/helpers/extendStaticConfig.js +59 -0
  33. package/dist/esm/helpers/extendStaticConfig.js.map +7 -0
  34. package/dist/esm/helpers/fixNativeShadow.js +8 -0
  35. package/dist/esm/helpers/fixNativeShadow.js.map +7 -0
  36. package/dist/esm/helpers/fixNativeShadow.native.js +30 -0
  37. package/dist/esm/helpers/fixNativeShadow.native.js.map +7 -0
  38. package/dist/esm/helpers/getSplitStyles.js +150 -0
  39. package/dist/esm/helpers/getSplitStyles.js.map +7 -0
  40. package/dist/esm/helpers/getStylesAtomic.js +83 -0
  41. package/dist/esm/helpers/getStylesAtomic.js.map +7 -0
  42. package/dist/esm/helpers/getStylesAtomic.native.js +10 -0
  43. package/dist/esm/helpers/getStylesAtomic.native.js.map +7 -0
  44. package/dist/esm/helpers/insertStyleRule.js +24 -0
  45. package/dist/esm/helpers/insertStyleRule.js.map +7 -0
  46. package/dist/esm/helpers/isObj.js +7 -0
  47. package/dist/esm/helpers/isObj.js.map +7 -0
  48. package/dist/esm/helpers/isTamaguiElement.js +10 -0
  49. package/dist/esm/helpers/isTamaguiElement.js.map +7 -0
  50. package/dist/esm/helpers/matchMedia.js +18 -0
  51. package/dist/esm/helpers/matchMedia.js.map +7 -0
  52. package/dist/esm/helpers/matchMedia.native.js +9 -0
  53. package/dist/esm/helpers/matchMedia.native.js.map +7 -0
  54. package/dist/esm/helpers/themeable.js +26 -0
  55. package/dist/esm/helpers/themeable.js.map +7 -0
  56. package/dist/esm/helpers/validate.js +60 -0
  57. package/dist/esm/helpers/validate.js.map +7 -0
  58. package/dist/esm/hooks/useConstant.js +15 -0
  59. package/dist/esm/hooks/useConstant.js.map +7 -0
  60. package/dist/esm/hooks/useFeatures.js +63 -0
  61. package/dist/esm/hooks/useFeatures.js.map +7 -0
  62. package/dist/esm/hooks/useMedia.js +173 -0
  63. package/dist/esm/hooks/useMedia.js.map +7 -0
  64. package/dist/esm/hooks/usePressable.js +13 -0
  65. package/dist/esm/hooks/usePressable.js.map +7 -0
  66. package/dist/esm/hooks/useTheme.js +89 -0
  67. package/dist/esm/hooks/useTheme.js.map +7 -0
  68. package/dist/esm/index.js +32 -0
  69. package/dist/esm/index.js.map +7 -0
  70. package/dist/esm/static/postProcessStyles.js +18 -0
  71. package/dist/esm/static/postProcessStyles.js.map +7 -0
  72. package/dist/esm/static.js +15 -0
  73. package/dist/esm/static.js.map +7 -0
  74. package/dist/esm/styled.js +21 -0
  75. package/dist/esm/styled.js.map +7 -0
  76. package/dist/esm/types.js +1 -0
  77. package/dist/esm/types.js.map +7 -0
  78. package/dist/esm/views/Animated.js +79 -0
  79. package/dist/esm/views/Animated.js.map +7 -0
  80. package/dist/esm/views/Stack.js +12 -0
  81. package/dist/esm/views/Stack.js.map +7 -0
  82. package/dist/esm/views/Text.js +60 -0
  83. package/dist/esm/views/Text.js.map +7 -0
  84. package/dist/esm/views/TextAncestorContext.js +18 -0
  85. package/dist/esm/views/TextAncestorContext.js.map +7 -0
  86. package/dist/esm/views/Theme.js +68 -0
  87. package/dist/esm/views/Theme.js.map +7 -0
  88. package/dist/esm/views/ThemeContext.js +6 -0
  89. package/dist/esm/views/ThemeContext.js.map +7 -0
  90. package/dist/esm/views/ThemeInverse.js +26 -0
  91. package/dist/esm/views/ThemeInverse.js.map +7 -0
  92. package/dist/esm/views/ThemeManagerContext.js +61 -0
  93. package/dist/esm/views/ThemeManagerContext.js.map +7 -0
  94. package/dist/esm/views/ThemeProvider.js +45 -0
  95. package/dist/esm/views/ThemeProvider.js.map +7 -0
  96. package/dist/jsx/constants/constants.js +13 -0
  97. package/dist/jsx/constants/platform.js +18 -0
  98. package/dist/jsx/constants/pseudos.js +17 -0
  99. package/dist/jsx/constants/rnw.js +21 -0
  100. package/dist/jsx/createComponent.js +458 -0
  101. package/dist/jsx/createFont.js +27 -0
  102. package/dist/jsx/createShorthands.js +9 -0
  103. package/dist/jsx/createTamagui.js +167 -0
  104. package/dist/jsx/createTheme.js +19 -0
  105. package/dist/jsx/createTokens.js +32 -0
  106. package/dist/jsx/createVariable.js +24 -0
  107. package/dist/jsx/helpers/addStylesUsingClassname.js +56 -0
  108. package/dist/jsx/helpers/createMediaStyle.js +33 -0
  109. package/dist/jsx/helpers/createPropMapper.js +159 -0
  110. package/dist/jsx/helpers/createTamaguiProvider.js +19 -0
  111. package/dist/jsx/helpers/extendStaticConfig.js +58 -0
  112. package/dist/jsx/helpers/fixNativeShadow.js +7 -0
  113. package/dist/jsx/helpers/fixNativeShadow.native.js +29 -0
  114. package/dist/jsx/helpers/getSplitStyles.js +149 -0
  115. package/dist/jsx/helpers/getStylesAtomic.js +82 -0
  116. package/dist/jsx/helpers/getStylesAtomic.native.js +9 -0
  117. package/dist/jsx/helpers/insertStyleRule.js +23 -0
  118. package/dist/jsx/helpers/isObj.js +6 -0
  119. package/dist/jsx/helpers/isTamaguiElement.js +9 -0
  120. package/dist/jsx/helpers/matchMedia.js +17 -0
  121. package/dist/jsx/helpers/matchMedia.native.js +8 -0
  122. package/dist/jsx/helpers/themeable.js +23 -0
  123. package/dist/jsx/helpers/validate.js +59 -0
  124. package/dist/jsx/hooks/useConstant.js +14 -0
  125. package/dist/jsx/hooks/useFeatures.js +57 -0
  126. package/dist/jsx/hooks/useMedia.js +172 -0
  127. package/dist/jsx/hooks/usePressable.js +12 -0
  128. package/dist/jsx/hooks/useTheme.js +88 -0
  129. package/dist/jsx/index.js +31 -0
  130. package/dist/jsx/static/postProcessStyles.js +17 -0
  131. package/dist/jsx/static.js +14 -0
  132. package/dist/jsx/styled.js +20 -0
  133. package/dist/jsx/types.js +0 -0
  134. package/dist/jsx/views/Animated.js +74 -0
  135. package/dist/jsx/views/Stack.js +11 -0
  136. package/dist/jsx/views/Text.js +59 -0
  137. package/dist/jsx/views/TextAncestorContext.js +14 -0
  138. package/dist/jsx/views/Theme.js +62 -0
  139. package/dist/jsx/views/ThemeContext.js +5 -0
  140. package/dist/jsx/views/ThemeInverse.js +22 -0
  141. package/dist/jsx/views/ThemeManagerContext.js +60 -0
  142. package/dist/jsx/views/ThemeProvider.js +39 -0
  143. package/package.json +10 -11
  144. package/src/createComponent.tsx +1 -1
  145. package/src/types.tsx +6 -6
  146. package/src/views/Text.tsx +2 -1
  147. package/types/constants/constants.d.ts +8 -0
  148. package/types/constants/constants.d.ts.map +1 -0
  149. package/types/constants/platform.d.ts +9 -0
  150. package/types/constants/platform.d.ts.map +1 -0
  151. package/types/constants/pseudos.d.ts +15 -0
  152. package/types/constants/pseudos.d.ts.map +1 -0
  153. package/types/constants/rnw.d.ts +2 -0
  154. package/types/constants/rnw.d.ts.map +1 -0
  155. package/types/createComponent.d.ts +17 -0
  156. package/types/createComponent.d.ts.map +1 -0
  157. package/types/createFont.d.ts +3 -0
  158. package/types/createFont.d.ts.map +1 -0
  159. package/types/createShorthands.d.ts +2 -0
  160. package/types/createShorthands.d.ts.map +1 -0
  161. package/types/createTamagui.d.ts +38 -0
  162. package/types/createTamagui.d.ts.map +1 -0
  163. package/types/createTheme.d.ts +5 -0
  164. package/types/createTheme.d.ts.map +1 -0
  165. package/types/createTokens.d.ts +55 -0
  166. package/types/createTokens.d.ts.map +1 -0
  167. package/types/createVariable.d.ts +15 -0
  168. package/types/createVariable.d.ts.map +1 -0
  169. package/types/helpers/addStylesUsingClassname.d.ts +3 -0
  170. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -0
  171. package/types/helpers/createMediaStyle.d.ts +8 -0
  172. package/types/helpers/createMediaStyle.d.ts.map +1 -0
  173. package/types/helpers/createPropMapper.d.ts +3 -0
  174. package/types/helpers/createPropMapper.d.ts.map +1 -0
  175. package/types/helpers/createTamaguiProvider.d.ts +5 -0
  176. package/types/helpers/createTamaguiProvider.d.ts.map +1 -0
  177. package/types/helpers/extendStaticConfig.d.ts +5 -0
  178. package/types/helpers/extendStaticConfig.d.ts.map +1 -0
  179. package/types/helpers/fixNativeShadow.d.ts +2 -0
  180. package/types/helpers/fixNativeShadow.d.ts.map +1 -0
  181. package/types/helpers/fixNativeShadow.native.d.ts +2 -0
  182. package/types/helpers/fixNativeShadow.native.d.ts.map +1 -0
  183. package/types/helpers/getSplitStyles.d.ts +15 -0
  184. package/types/helpers/getSplitStyles.d.ts.map +1 -0
  185. package/types/helpers/getStylesAtomic.d.ts +3 -0
  186. package/types/helpers/getStylesAtomic.d.ts.map +1 -0
  187. package/types/helpers/getStylesAtomic.native.d.ts +2 -0
  188. package/types/helpers/getStylesAtomic.native.d.ts.map +1 -0
  189. package/types/helpers/insertStyleRule.d.ts +2 -0
  190. package/types/helpers/insertStyleRule.d.ts.map +1 -0
  191. package/types/helpers/isObj.d.ts +2 -0
  192. package/types/helpers/isObj.d.ts.map +1 -0
  193. package/types/helpers/isTamaguiElement.d.ts +3 -0
  194. package/types/helpers/isTamaguiElement.d.ts.map +1 -0
  195. package/types/helpers/matchMedia.d.ts +2 -0
  196. package/types/helpers/matchMedia.d.ts.map +1 -0
  197. package/types/helpers/matchMedia.native.d.ts +3 -0
  198. package/types/helpers/matchMedia.native.d.ts.map +1 -0
  199. package/types/helpers/themeable.d.ts +10 -0
  200. package/types/helpers/themeable.d.ts.map +1 -0
  201. package/types/helpers/validate.d.ts +4 -0
  202. package/types/helpers/validate.d.ts.map +1 -0
  203. package/types/hooks/useConstant.d.ts +2 -0
  204. package/types/hooks/useConstant.d.ts.map +1 -0
  205. package/types/hooks/useFeatures.d.ts +5 -0
  206. package/types/hooks/useFeatures.d.ts.map +1 -0
  207. package/types/hooks/useMedia.d.ts +16 -0
  208. package/types/hooks/useMedia.d.ts.map +1 -0
  209. package/types/hooks/usePressable.d.ts +3 -0
  210. package/types/hooks/usePressable.d.ts.map +1 -0
  211. package/types/hooks/useTheme.d.ts +20 -0
  212. package/types/hooks/useTheme.d.ts.map +1 -0
  213. package/types/index.d.ts +29 -0
  214. package/types/index.d.ts.map +1 -0
  215. package/types/static/postProcessStyles.d.ts +7 -0
  216. package/types/static/postProcessStyles.d.ts.map +1 -0
  217. package/types/static.d.ts +15 -0
  218. package/types/static.d.ts.map +1 -0
  219. package/types/styled.d.ts +21 -0
  220. package/types/styled.d.ts.map +1 -0
  221. package/types/types.d.ts +306 -0
  222. package/types/types.d.ts.map +1 -0
  223. package/types/views/Animated.d.ts +15 -0
  224. package/types/views/Animated.d.ts.map +1 -0
  225. package/types/views/Stack.d.ts +3 -0
  226. package/types/views/Stack.d.ts.map +1 -0
  227. package/types/views/Text.d.ts +3 -0
  228. package/types/views/Text.d.ts.map +1 -0
  229. package/types/views/TextAncestorContext.d.ts +3 -0
  230. package/types/views/TextAncestorContext.d.ts.map +1 -0
  231. package/types/views/Theme.d.ts +8 -0
  232. package/types/views/Theme.d.ts.map +1 -0
  233. package/types/views/ThemeContext.d.ts +18 -0
  234. package/types/views/ThemeContext.d.ts.map +1 -0
  235. package/types/views/ThemeInverse.d.ts +10 -0
  236. package/types/views/ThemeInverse.d.ts.map +1 -0
  237. package/types/views/ThemeManagerContext.d.ts +22 -0
  238. package/types/views/ThemeManagerContext.d.ts.map +1 -0
  239. package/types/views/ThemeProvider.d.ts +10 -0
  240. package/types/views/ThemeProvider.d.ts.map +1 -0
  241. package/types.d.ts +0 -559
@@ -0,0 +1,24 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { isWeb } from "../constants/platform";
4
+ function insertStyleRule(rule) {
5
+ if (typeof window === "undefined") {
6
+ return;
7
+ }
8
+ if (process.env.NODE_ENV === "development") {
9
+ if (!isWeb) {
10
+ console.warn("non web platform, dont use this");
11
+ return;
12
+ }
13
+ }
14
+ const sheet = window.document.styleSheets[0];
15
+ if (!sheet) {
16
+ return;
17
+ }
18
+ sheet.insertRule(rule, sheet.cssRules.length);
19
+ }
20
+ __name(insertStyleRule, "insertStyleRule");
21
+ export {
22
+ insertStyleRule
23
+ };
24
+ //# sourceMappingURL=insertStyleRule.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/insertStyleRule.tsx"],
4
+ "sourcesContent": ["import { isWeb } from '../constants/platform'\n\nexport function insertStyleRule(rule: string) {\n if (typeof window === 'undefined') {\n return\n }\n if (process.env.NODE_ENV === 'development') {\n if (!isWeb) {\n console.warn('non web platform, dont use this')\n return\n }\n }\n const sheet = window.document.styleSheets[0]\n if (!sheet) {\n return\n }\n sheet.insertRule(rule, sheet.cssRules.length)\n}\n"],
5
+ "mappings": ";;AAAA;AAEO,yBAAyB,MAAc;AAC5C,MAAI,OAAO,WAAW,aAAa;AACjC;AAAA;AAEF,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,CAAC,OAAO;AACV,cAAQ,KAAK;AACb;AAAA;AAAA;AAGJ,QAAM,QAAQ,OAAO,SAAS,YAAY;AAC1C,MAAI,CAAC,OAAO;AACV;AAAA;AAEF,QAAM,WAAW,MAAM,MAAM,SAAS;AAAA;AAdxB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ const isObj = /* @__PURE__ */ __name((x) => x && !Array.isArray(x) && typeof x === "object", "isObj");
4
+ export {
5
+ isObj
6
+ };
7
+ //# sourceMappingURL=isObj.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/isObj.ts"],
4
+ "sourcesContent": ["export const isObj = (x: any) => x && !Array.isArray(x) && typeof x === 'object'\n"],
5
+ "mappings": ";;AAAO,MAAM,QAAQ,wBAAC,MAAW,KAAK,CAAC,MAAM,QAAQ,MAAM,OAAO,MAAM,UAAnD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,10 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { isValidElement } from "react";
4
+ const isTamaguiElement = /* @__PURE__ */ __name((child) => {
5
+ return isValidElement(child) && !!child.type["staticConfig"]?.parsed;
6
+ }, "isTamaguiElement");
7
+ export {
8
+ isTamaguiElement
9
+ };
10
+ //# sourceMappingURL=isTamaguiElement.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/isTamaguiElement.tsx"],
4
+ "sourcesContent": ["import React, { isValidElement } from 'react'\n\nexport const isTamaguiElement = (child: any): child is React.ReactElement => {\n return isValidElement(child) && !!child.type['staticConfig']?.parsed\n}\n"],
5
+ "mappings": ";;AAAA;AAEO,MAAM,mBAAmB,wBAAC,UAA4C;AAC3E,SAAO,eAAe,UAAU,CAAC,CAAC,MAAM,KAAK,iBAAiB;AAAA,GADhC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ const matchMedia = typeof window !== "undefined" && window.matchMedia || /* @__PURE__ */ __name(function matchMediaFallback(query) {
4
+ return {
5
+ addListener() {
6
+ if (process.env.NODE_ENV === "development" && !process.env.IS_STATIC && process.env.TAMAGUI_TARGET !== "web") {
7
+ console.log("warning: matchMedia not loading! Is native picking up .native.js files?");
8
+ }
9
+ },
10
+ removeListener() {
11
+ },
12
+ matches: false
13
+ };
14
+ }, "matchMediaFallback");
15
+ export {
16
+ matchMedia
17
+ };
18
+ //# sourceMappingURL=matchMedia.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/matchMedia.ts"],
4
+ "sourcesContent": ["export const matchMedia =\n (typeof window !== 'undefined' && window.matchMedia) ||\n (function matchMediaFallback(query: string) {\n return {\n addListener() {\n if (\n process.env.NODE_ENV === 'development' &&\n !process.env.IS_STATIC &&\n process.env.TAMAGUI_TARGET !== 'web'\n ) {\n console.log('warning: matchMedia not loading! Is native picking up .native.js files?')\n }\n },\n removeListener() {},\n matches: false,\n }\n } as any)\n"],
5
+ "mappings": ";;AAAO,MAAM,aACV,OAAO,WAAW,eAAe,OAAO,cACxC,mDAA4B,OAAe;AAC1C,SAAO;AAAA,IACL,cAAc;AACZ,UACE,QAAQ,IAAI,aAAa,iBACzB,CAAC,QAAQ,IAAI,aACb,QAAQ,IAAI,mBAAmB,OAC/B;AACA,gBAAQ,IAAI;AAAA;AAAA;AAAA,IAGhB,iBAAiB;AAAA;AAAA,IACjB,SAAS;AAAA;AAAA,GAZZ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import MediaQueryList from "@expo/match-media/build/MediaQueryList.js";
4
+ const matchMedia = /* @__PURE__ */ __name((media) => new MediaQueryList(media), "matchMedia");
5
+ globalThis["matchMedia"] = matchMedia;
6
+ export {
7
+ matchMedia
8
+ };
9
+ //# sourceMappingURL=matchMedia.native.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/matchMedia.native.ts"],
4
+ "sourcesContent": ["import MediaQueryList from '@expo/match-media/build/MediaQueryList.js'\n\nexport const matchMedia = (media: string) => new MediaQueryList(media)\n\n// @ts-ignore\nglobalThis['matchMedia'] = matchMedia\n"],
5
+ "mappings": ";;AAAA;AAEO,MAAM,aAAa,wBAAC,UAAkB,IAAI,eAAe,QAAtC;AAG1B,WAAW,gBAAgB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,26 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import React, { forwardRef } from "react";
4
+ import { Theme } from "../views/Theme";
5
+ import { ThemeInverse } from "../views/ThemeInverse";
6
+ const themeable = /* @__PURE__ */ __name(function graphql(component) {
7
+ const withThemeComponent = forwardRef(/* @__PURE__ */ __name(function WithTheme({ themeInverse, ...rest }, ref) {
8
+ const el = React.createElement(component, { ...rest, ref });
9
+ if (themeInverse) {
10
+ return /* @__PURE__ */ React.createElement(ThemeInverse, null, el);
11
+ }
12
+ if (rest.theme) {
13
+ return /* @__PURE__ */ React.createElement(Theme, {
14
+ name: rest.theme || null
15
+ }, el);
16
+ }
17
+ return el;
18
+ }, "WithTheme"));
19
+ const withTheme = withThemeComponent;
20
+ withTheme.displayName = `Themed(${component?.displayName || component?.name || "Anonymous"})`;
21
+ return withTheme;
22
+ }, "graphql");
23
+ export {
24
+ themeable
25
+ };
26
+ //# sourceMappingURL=themeable.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/themeable.tsx"],
4
+ "sourcesContent": ["import React, { ReactElement, forwardRef } from 'react'\n\nimport { Theme } from '../views/Theme'\nimport { ThemeInverse } from '../views/ThemeInverse'\n\nexport type ThemeableProps = {\n theme?: string | null\n themeInverse?: boolean\n}\n\nexport const themeable: ThemeableHOC = function graphql<\n R extends ReactElement<any, any> | null,\n P extends ThemeableProps = {}\n>(component: (props: P) => R) {\n const withThemeComponent = forwardRef(function WithTheme({ themeInverse, ...rest }: P, ref) {\n const el = React.createElement(component, { ...rest, ref } as any) as R\n if (themeInverse) {\n return (<ThemeInverse>{el}</ThemeInverse>) as R\n }\n if (rest.theme) {\n return (<Theme name={rest.theme || null}>{el}</Theme>) as R\n }\n return el\n })\n\n const withTheme: {\n (props: P): R\n displayName: string\n } = withThemeComponent as any\n\n withTheme.displayName = `Themed(${\n (component as any)?.displayName || (component as any)?.name || 'Anonymous'\n })`\n\n return withTheme\n}\n\nexport interface ThemeableHOC {\n <R extends ReactElement<any, any> | null, P extends ThemeableProps = {}>(\n component: (props: P) => R\n ): (props: P) => R\n}\n"],
5
+ "mappings": ";;AAAA;AAEA;AACA;AAOO,MAAM,YAA0B,wCAGrC,WAA4B;AAC5B,QAAM,qBAAqB,WAAW,0CAAmB,EAAE,iBAAiB,QAAW,KAAK;AAC1F,UAAM,KAAK,MAAM,cAAc,WAAW,KAAK,MAAM;AACrD,QAAI,cAAc;AAChB,aAAQ,oCAAC,cAAD,MAAe;AAAA;AAEzB,QAAI,KAAK,OAAO;AACd,aAAQ,oCAAC,OAAD;AAAA,QAAO,MAAM,KAAK,SAAS;AAAA,SAAO;AAAA;AAE5C,WAAO;AAAA,KAR6B;AAWtC,QAAM,YAGF;AAEJ,YAAU,cAAc,UACrB,WAAmB,eAAgB,WAAmB,QAAQ;AAGjE,SAAO;AAAA,GAxB8B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,60 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import ow from "@tamagui/ow";
4
+ const validateConfig = /* @__PURE__ */ __name((conf) => {
5
+ if (!conf) {
6
+ console.warn("no conf?");
7
+ return;
8
+ }
9
+ try {
10
+ ow(conf, validConfig);
11
+ } catch (err) {
12
+ console.log("Given config:\n", JSON.stringify(conf, null, 2));
13
+ throw err;
14
+ }
15
+ }, "validateConfig");
16
+ const validConfig = ow.object.exactShape({
17
+ defaultTheme: ow.optional.string,
18
+ disableRootThemeClass: ow.optional.boolean,
19
+ shorthands: ow.optional.object.valuesOfType(ow.string),
20
+ themes: ow.object.valuesOfType(ow.object),
21
+ tokens: ow.object.valuesOfType(ow.object),
22
+ media: ow.object.valuesOfType(ow.object)
23
+ });
24
+ const validFont = ow.object.exactShape({
25
+ family: ow.string,
26
+ size: ow.object.nonEmpty.valuesOfType(ow.number),
27
+ lineHeight: ow.object.nonEmpty.valuesOfType(ow.number),
28
+ weight: ow.object.nonEmpty.valuesOfType(ow.string),
29
+ letterSpacing: ow.object.nonEmpty.valuesOfType(ow.number)
30
+ });
31
+ const validTokens = ow.object.exactShape({
32
+ font: ow.object.valuesOfType(validFont),
33
+ size: ow.object.nonEmpty.valuesOfType(ow.number),
34
+ space: ow.object.nonEmpty.valuesOfType(ow.number),
35
+ zIndex: ow.object.nonEmpty.valuesOfType(ow.number),
36
+ radius: ow.object.nonEmpty.valuesOfType(ow.number),
37
+ color: ow.object.nonEmpty.valuesOfType(ow.string)
38
+ });
39
+ const validateTokens = /* @__PURE__ */ __name((tokens) => {
40
+ try {
41
+ ow(tokens, validTokens);
42
+ } catch (err) {
43
+ console.log("Given tokens:\n", JSON.stringify(tokens, null, 2));
44
+ throw err;
45
+ }
46
+ }, "validateTokens");
47
+ const validateFont = /* @__PURE__ */ __name((font) => {
48
+ try {
49
+ ow(font, validFont);
50
+ } catch (err) {
51
+ console.log("Given font:\n", JSON.stringify(font, null, 2));
52
+ throw err;
53
+ }
54
+ }, "validateFont");
55
+ export {
56
+ validateConfig,
57
+ validateFont,
58
+ validateTokens
59
+ };
60
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/validate.ts"],
4
+ "sourcesContent": ["// published a patched version that works on native\nimport ow from '@tamagui/ow'\n\nexport const validateConfig = (conf: any) => {\n if (!conf) {\n console.warn('no conf?')\n return\n }\n try {\n ow(conf, validConfig)\n } catch (err: any) {\n console.log('Given config:\\n', JSON.stringify(conf, null, 2))\n throw err\n }\n}\n\nconst validConfig = ow.object.exactShape({\n defaultTheme: ow.optional.string,\n disableRootThemeClass: ow.optional.boolean,\n shorthands: ow.optional.object.valuesOfType(ow.string),\n themes: ow.object.valuesOfType(ow.object),\n tokens: ow.object.valuesOfType(ow.object),\n media: ow.object.valuesOfType(ow.object),\n})\n\nconst validFont = ow.object.exactShape({\n family: ow.string,\n size: ow.object.nonEmpty.valuesOfType(ow.number),\n lineHeight: ow.object.nonEmpty.valuesOfType(ow.number),\n weight: ow.object.nonEmpty.valuesOfType(ow.string),\n letterSpacing: ow.object.nonEmpty.valuesOfType(ow.number),\n})\n\nconst validTokens = ow.object.exactShape({\n font: ow.object.valuesOfType(validFont),\n size: ow.object.nonEmpty.valuesOfType(ow.number),\n space: ow.object.nonEmpty.valuesOfType(ow.number),\n zIndex: ow.object.nonEmpty.valuesOfType(ow.number),\n radius: ow.object.nonEmpty.valuesOfType(ow.number),\n color: ow.object.nonEmpty.valuesOfType(ow.string),\n})\n\nexport const validateTokens = (tokens: any) => {\n try {\n ow(tokens, validTokens)\n } catch (err: any) {\n console.log('Given tokens:\\n', JSON.stringify(tokens, null, 2))\n throw err\n }\n}\n\nexport const validateFont = (font: any) => {\n try {\n ow(font, validFont)\n } catch (err: any) {\n console.log('Given font:\\n', JSON.stringify(font, null, 2))\n throw err\n }\n}\n"],
5
+ "mappings": ";;AACA;AAEO,MAAM,iBAAiB,wBAAC,SAAc;AAC3C,MAAI,CAAC,MAAM;AACT,YAAQ,KAAK;AACb;AAAA;AAEF,MAAI;AACF,OAAG,MAAM;AAAA,WACF,KAAP;AACA,YAAQ,IAAI,mBAAmB,KAAK,UAAU,MAAM,MAAM;AAC1D,UAAM;AAAA;AAAA,GAToB;AAa9B,MAAM,cAAc,GAAG,OAAO,WAAW;AAAA,EACvC,cAAc,GAAG,SAAS;AAAA,EAC1B,uBAAuB,GAAG,SAAS;AAAA,EACnC,YAAY,GAAG,SAAS,OAAO,aAAa,GAAG;AAAA,EAC/C,QAAQ,GAAG,OAAO,aAAa,GAAG;AAAA,EAClC,QAAQ,GAAG,OAAO,aAAa,GAAG;AAAA,EAClC,OAAO,GAAG,OAAO,aAAa,GAAG;AAAA;AAGnC,MAAM,YAAY,GAAG,OAAO,WAAW;AAAA,EACrC,QAAQ,GAAG;AAAA,EACX,MAAM,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA,EACzC,YAAY,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA,EAC/C,QAAQ,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA,EAC3C,eAAe,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA;AAGpD,MAAM,cAAc,GAAG,OAAO,WAAW;AAAA,EACvC,MAAM,GAAG,OAAO,aAAa;AAAA,EAC7B,MAAM,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA,EACzC,OAAO,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA,EAC1C,QAAQ,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA,EAC3C,QAAQ,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA,EAC3C,OAAO,GAAG,OAAO,SAAS,aAAa,GAAG;AAAA;AAGrC,MAAM,iBAAiB,wBAAC,WAAgB;AAC7C,MAAI;AACF,OAAG,QAAQ;AAAA,WACJ,KAAP;AACA,YAAQ,IAAI,mBAAmB,KAAK,UAAU,QAAQ,MAAM;AAC5D,UAAM;AAAA;AAAA,GALoB;AASvB,MAAM,eAAe,wBAAC,SAAc;AACzC,MAAI;AACF,OAAG,MAAM;AAAA,WACF,KAAP;AACA,YAAQ,IAAI,iBAAiB,KAAK,UAAU,MAAM,MAAM;AACxD,UAAM;AAAA;AAAA,GALkB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { useRef } from "react";
4
+ function useConstant(fn) {
5
+ const ref = useRef();
6
+ if (!ref.current) {
7
+ ref.current = { v: fn() };
8
+ }
9
+ return ref.current.v;
10
+ }
11
+ __name(useConstant, "useConstant");
12
+ export {
13
+ useConstant
14
+ };
15
+ //# sourceMappingURL=useConstant.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useConstant.tsx"],
4
+ "sourcesContent": ["import { useRef } from 'react'\n\ntype ResultBox<T> = { v: T }\nexport function useConstant<T>(fn: () => T): T {\n const ref = useRef<ResultBox<T>>()\n if (!ref.current) {\n ref.current = { v: fn() }\n }\n return ref.current.v\n}\n"],
5
+ "mappings": ";;AAAA;AAGO,qBAAwB,IAAgB;AAC7C,QAAM,MAAM;AACZ,MAAI,CAAC,IAAI,SAAS;AAChB,QAAI,UAAU,EAAE,GAAG;AAAA;AAErB,SAAO,IAAI,QAAQ;AAAA;AALL;",
6
+ "names": []
7
+ }
@@ -0,0 +1,63 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import React from "react";
4
+ import { isWeb, useIsomorphicLayoutEffect } from "../constants/platform";
5
+ import { addMediaQueryListener, mediaState, removeMediaQueryListener } from "./useMedia";
6
+ const createDefinition = /* @__PURE__ */ __name(({
7
+ Component,
8
+ propNames
9
+ }) => ({
10
+ isEnabled: (props) => propNames.some((name) => !!props[name]),
11
+ Component
12
+ }), "createDefinition");
13
+ let featureDefinitions = null;
14
+ const useFeatures = /* @__PURE__ */ __name((props, utils) => {
15
+ if (!featureDefinitions) {
16
+ featureDefinitions = loadFeatures();
17
+ }
18
+ const features = [];
19
+ for (const name in featureDefinitions) {
20
+ const { isEnabled, Component } = featureDefinitions[name];
21
+ if (isEnabled(props) && Component) {
22
+ features.push(/* @__PURE__ */ React.createElement(Component, {
23
+ key: name,
24
+ ...props,
25
+ _utils: utils
26
+ }));
27
+ }
28
+ }
29
+ return features;
30
+ }, "useFeatures");
31
+ function loadFeatures() {
32
+ return {
33
+ ...!isWeb && {
34
+ mediaQuery: loadMediaQueryFeature()
35
+ }
36
+ };
37
+ }
38
+ __name(loadFeatures, "loadFeatures");
39
+ function loadMediaQueryFeature() {
40
+ const mediaPropNames = Object.keys(mediaState);
41
+ return createDefinition({
42
+ Component: (props) => {
43
+ const keys = mediaPropNames.flatMap((x) => x in props ? x.slice(1) : []);
44
+ useIsomorphicLayoutEffect(() => {
45
+ for (const key of keys) {
46
+ addMediaQueryListener(key, props._utils.forceUpdate);
47
+ }
48
+ return () => {
49
+ for (const key of keys) {
50
+ removeMediaQueryListener(key, props._utils.forceUpdate);
51
+ }
52
+ };
53
+ }, [keys.join(",")]);
54
+ return null;
55
+ },
56
+ propNames: mediaPropNames
57
+ });
58
+ }
59
+ __name(loadMediaQueryFeature, "loadMediaQueryFeature");
60
+ export {
61
+ useFeatures
62
+ };
63
+ //# sourceMappingURL=useFeatures.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useFeatures.tsx"],
4
+ "sourcesContent": ["import React from 'react'\n\nimport { isWeb, useIsomorphicLayoutEffect } from '../constants/platform'\nimport { addMediaQueryListener, mediaState, removeMediaQueryListener } from './useMedia'\n\ntype FeatureDefinition = {\n isEnabled: (props: any) => boolean\n Component: any\n}\n\nconst createDefinition = ({\n Component,\n propNames,\n}: {\n Component: any\n propNames: string[]\n}): FeatureDefinition => ({\n isEnabled: (props: any) => propNames.some((name) => !!props[name]),\n Component,\n})\n\nlet featureDefinitions: Record<string, FeatureDefinition> | null = null\n\nexport const useFeatures = (props: any, utils?: { forceUpdate?: Function }) => {\n if (!featureDefinitions) {\n featureDefinitions = loadFeatures()\n }\n const features: JSX.Element[] = []\n for (const name in featureDefinitions) {\n const { isEnabled, Component } = featureDefinitions[name]\n if (isEnabled(props) && Component) {\n features.push(<Component key={name} {...props} _utils={utils} />)\n }\n }\n return features\n}\n\nfunction loadFeatures(): Record<string, FeatureDefinition> {\n return {\n // TODO\n // measureLayout: createDefinition({\n // Component: (props) => {\n // console.log('measure', props)\n // return null\n // },\n // propNames: ['onLayout'],\n // }),\n\n // will update the parent whenever media query changes\n // no need on web, media queries are inserted and run in css\n ...(!isWeb && {\n mediaQuery: loadMediaQueryFeature(),\n }),\n }\n}\n\nfunction loadMediaQueryFeature() {\n const mediaPropNames = Object.keys(mediaState)\n\n return createDefinition({\n Component: (props: any) => {\n const keys = mediaPropNames.flatMap((x) => (x in props ? x.slice(1) : []))\n\n useIsomorphicLayoutEffect(() => {\n for (const key of keys) {\n addMediaQueryListener(key, props._utils.forceUpdate)\n }\n return () => {\n for (const key of keys) {\n removeMediaQueryListener(key, props._utils.forceUpdate)\n }\n }\n }, [keys.join(',')])\n\n return null\n },\n propNames: mediaPropNames,\n })\n}\n"],
5
+ "mappings": ";;AAAA;AAEA;AACA;AAOA,MAAM,mBAAmB,wBAAC;AAAA,EACxB;AAAA,EACA;AAAA,MAIwB;AAAA,EACxB,WAAW,CAAC,UAAe,UAAU,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM;AAAA,EAC5D;AAAA,IARuB;AAWzB,IAAI,qBAA+D;AAE5D,MAAM,cAAc,wBAAC,OAAY,UAAuC;AAC7E,MAAI,CAAC,oBAAoB;AACvB,yBAAqB;AAAA;AAEvB,QAAM,WAA0B;AAChC,aAAW,QAAQ,oBAAoB;AACrC,UAAM,EAAE,WAAW,cAAc,mBAAmB;AACpD,QAAI,UAAU,UAAU,WAAW;AACjC,eAAS,KAAK,oCAAC,WAAD;AAAA,QAAW,KAAK;AAAA,WAAU;AAAA,QAAO,QAAQ;AAAA;AAAA;AAAA;AAG3D,SAAO;AAAA,GAXkB;AAc3B,wBAA2D;AACzD,SAAO;AAAA,OAYD,CAAC,SAAS;AAAA,MACZ,YAAY;AAAA;AAAA;AAAA;AAdT;AAmBT,iCAAiC;AAC/B,QAAM,iBAAiB,OAAO,KAAK;AAEnC,SAAO,iBAAiB;AAAA,IACtB,WAAW,CAAC,UAAe;AACzB,YAAM,OAAO,eAAe,QAAQ,CAAC,MAAO,KAAK,QAAQ,EAAE,MAAM,KAAK;AAEtE,gCAA0B,MAAM;AAC9B,mBAAW,OAAO,MAAM;AACtB,gCAAsB,KAAK,MAAM,OAAO;AAAA;AAE1C,eAAO,MAAM;AACX,qBAAW,OAAO,MAAM;AACtB,qCAAyB,KAAK,MAAM,OAAO;AAAA;AAAA;AAAA,SAG9C,CAAC,KAAK,KAAK;AAEd,aAAO;AAAA;AAAA,IAET,WAAW;AAAA;AAAA;AApBN;",
6
+ "names": []
7
+ }
@@ -0,0 +1,173 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { useForceUpdate } from "@tamagui/use-force-update";
4
+ import { useRef } from "react";
5
+ import { useIsomorphicLayoutEffect } from "../constants/platform";
6
+ import { matchMedia } from "../helpers/matchMedia";
7
+ import { useConstant } from "./useConstant";
8
+ const mediaState = {};
9
+ const mediaQueryListeners = {};
10
+ const addMediaQueryListener = /* @__PURE__ */ __name((key, cb) => {
11
+ mediaQueryListeners[key] = mediaQueryListeners[key] || new Set();
12
+ mediaQueryListeners[key].add(cb);
13
+ }, "addMediaQueryListener");
14
+ const removeMediaQueryListener = /* @__PURE__ */ __name((key, cb) => {
15
+ mediaQueryListeners[key].delete(cb);
16
+ }, "removeMediaQueryListener");
17
+ let conf = null;
18
+ const mediaQueryConfig = new Proxy({}, {
19
+ get(target, key) {
20
+ if (!conf) {
21
+ console.warn("Warning: accessing media query before init");
22
+ return null;
23
+ }
24
+ return Reflect.get(conf, key);
25
+ },
26
+ ownKeys() {
27
+ if (!conf) {
28
+ console.warn("Warning: accessing media query before init");
29
+ return [];
30
+ }
31
+ return Object.keys(conf);
32
+ },
33
+ getOwnPropertyDescriptor() {
34
+ return {
35
+ enumerable: true,
36
+ configurable: true
37
+ };
38
+ }
39
+ });
40
+ const getMedia = /* @__PURE__ */ __name(() => {
41
+ if (!conf) {
42
+ throw new Error(`not configured yet`);
43
+ }
44
+ return mediaState;
45
+ }, "getMedia");
46
+ const configureMedia = /* @__PURE__ */ __name(({
47
+ queries,
48
+ defaultActive = ["sm", "xs"]
49
+ } = {}) => {
50
+ if (conf) {
51
+ console.warn(`Already configured mediaQueries once (you may have called getMedia() before configureMedia())`);
52
+ }
53
+ if (queries) {
54
+ conf = queries;
55
+ }
56
+ for (const key in queries) {
57
+ const str = mediaObjectToString(queries[key]);
58
+ try {
59
+ const getMatch = /* @__PURE__ */ __name(() => matchMedia(str), "getMatch");
60
+ const match = getMatch();
61
+ if (!match || typeof match.addListener !== "function") {
62
+ throw new Error("\u26A0\uFE0F No match (seeing this in RN sometimes)");
63
+ }
64
+ mediaState[key] = !!match.matches;
65
+ match.addListener(() => {
66
+ const next = !!getMatch().matches;
67
+ if (next === mediaState[key])
68
+ return;
69
+ mediaState[key] = next;
70
+ const listeners = mediaQueryListeners[key];
71
+ if (listeners?.size) {
72
+ for (const cb of [...listeners]) {
73
+ cb();
74
+ }
75
+ }
76
+ });
77
+ } catch (err) {
78
+ console.error("Error running media query", str, err.message, err.stack);
79
+ const isDefaultActive = defaultActive?.includes(key) ?? true;
80
+ mediaState[key] = isDefaultActive;
81
+ }
82
+ }
83
+ }, "configureMedia");
84
+ const useMedia = /* @__PURE__ */ __name(() => {
85
+ const forceUpdate = useForceUpdate();
86
+ const state = useRef();
87
+ if (!state.current) {
88
+ state.current = {
89
+ selections: {},
90
+ nextSelections: {},
91
+ isUnmounted: false,
92
+ isRendering: true
93
+ };
94
+ }
95
+ state.current.isRendering = true;
96
+ useIsomorphicLayoutEffect(() => {
97
+ const st = state.current;
98
+ st.isRendering = false;
99
+ for (const key in st.selections) {
100
+ if (!(key in st.nextSelections)) {
101
+ removeMediaQueryListener(key, forceUpdate);
102
+ }
103
+ }
104
+ for (const key in st.nextSelections) {
105
+ if (!(key in st.selections)) {
106
+ addMediaQueryListener(key, forceUpdate);
107
+ }
108
+ }
109
+ });
110
+ useIsomorphicLayoutEffect(() => {
111
+ return () => {
112
+ const st = state.current;
113
+ st.isUnmounted = true;
114
+ const allKeys = {
115
+ ...st.selections,
116
+ ...st.nextSelections
117
+ };
118
+ for (const key in allKeys) {
119
+ removeMediaQueryListener(key, forceUpdate);
120
+ }
121
+ };
122
+ }, []);
123
+ return useConstant(() => {
124
+ const st = state.current;
125
+ return new Proxy(mediaState, {
126
+ get(target, key) {
127
+ if (!(key in mediaState)) {
128
+ return Reflect.get(target, key);
129
+ }
130
+ if (!st.isUnmounted) {
131
+ if (st.isRendering) {
132
+ st.nextSelections[key] = true;
133
+ }
134
+ }
135
+ if (key in mediaState) {
136
+ return mediaState[key];
137
+ }
138
+ return Reflect.get(mediaState, key);
139
+ }
140
+ });
141
+ });
142
+ }, "useMedia");
143
+ function camelToHyphen(str) {
144
+ return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase();
145
+ }
146
+ __name(camelToHyphen, "camelToHyphen");
147
+ function mediaObjectToString(query) {
148
+ if (typeof query === "string") {
149
+ return query;
150
+ }
151
+ return Object.entries(query).map(([feature, value]) => {
152
+ feature = camelToHyphen(feature);
153
+ if (typeof value === "string") {
154
+ return `(${feature}: ${value})`;
155
+ }
156
+ if (typeof value === "number" && /[height|width]$/.test(feature)) {
157
+ value = `${value}px`;
158
+ }
159
+ return `(${feature}: ${value})`;
160
+ }).join(" and ");
161
+ }
162
+ __name(mediaObjectToString, "mediaObjectToString");
163
+ export {
164
+ addMediaQueryListener,
165
+ configureMedia,
166
+ getMedia,
167
+ mediaObjectToString,
168
+ mediaQueryConfig,
169
+ mediaState,
170
+ removeMediaQueryListener,
171
+ useMedia
172
+ };
173
+ //# sourceMappingURL=useMedia.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useMedia.tsx"],
4
+ "sourcesContent": ["import { useForceUpdate } from '@tamagui/use-force-update'\nimport { useRef } from 'react'\n\nimport { useIsomorphicLayoutEffect } from '../constants/platform'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n ConfigureMediaQueryOptions,\n MediaQueries,\n MediaQueryObject,\n MediaQueryState,\n} from '../types'\nimport { useConstant } from './useConstant'\n\nexport const mediaState: { [key in keyof MediaQueryState]: boolean } = {} as any\nconst mediaQueryListeners: { [key: string]: Set<Function> } = {}\n\nexport const addMediaQueryListener = (key: string, cb: any) => {\n mediaQueryListeners[key] = mediaQueryListeners[key] || new Set()\n mediaQueryListeners[key].add(cb)\n}\n\nexport const removeMediaQueryListener = (key: string, cb: any) => {\n mediaQueryListeners[key].delete(cb)\n}\n\nlet conf: MediaQueries | null = null\n\nexport const mediaQueryConfig = new Proxy<MediaQueries>({} as any, {\n get(target, key) {\n if (!conf) {\n console.warn('Warning: accessing media query before init')\n return null\n }\n return Reflect.get(conf, key)\n },\n ownKeys() {\n if (!conf) {\n console.warn('Warning: accessing media query before init')\n return []\n }\n return Object.keys(conf)\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n})\n\nexport const getMedia = () => {\n if (!conf) {\n throw new Error(`not configured yet`)\n }\n return mediaState\n}\n\nexport const configureMedia = ({\n queries,\n defaultActive = ['sm', 'xs'],\n}: ConfigureMediaQueryOptions = {}) => {\n if (conf) {\n console.warn(\n `Already configured mediaQueries once (you may have called getMedia() before configureMedia())`\n )\n }\n\n if (queries) {\n conf = queries\n }\n\n // setup\n for (const key in queries) {\n const str = mediaObjectToString(queries[key])\n try {\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match || typeof match.addListener !== 'function') {\n // caught below\n throw new Error('\u26A0\uFE0F No match (seeing this in RN sometimes)')\n }\n mediaState[key] = !!match.matches\n match.addListener(() => {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState[key] = next\n const listeners = mediaQueryListeners[key]\n if (listeners?.size) {\n for (const cb of [...listeners]) {\n cb()\n }\n }\n })\n } catch (err: any) {\n console.error('Error running media query', str, err.message, err.stack)\n const isDefaultActive = defaultActive?.includes(key as any) ?? true\n mediaState[key] = isDefaultActive\n }\n }\n}\n\ntype UseMediaState = {\n selections: { [key: string]: boolean }\n nextSelections: { [key: string]: boolean }\n isRendering: boolean\n isUnmounted: boolean\n}\n\nexport const useMedia = () => {\n const forceUpdate = useForceUpdate()\n const state = useRef() as React.MutableRefObject<UseMediaState>\n if (!state.current) {\n state.current = {\n selections: {},\n nextSelections: {},\n isUnmounted: false,\n isRendering: true,\n }\n }\n state.current.isRendering = true\n\n // track usage\n useIsomorphicLayoutEffect(() => {\n const st = state.current\n st.isRendering = false\n // delete old\n for (const key in st.selections) {\n if (!(key in st.nextSelections)) {\n removeMediaQueryListener(key, forceUpdate)\n }\n }\n // add new\n for (const key in st.nextSelections) {\n if (!(key in st.selections)) {\n addMediaQueryListener(key, forceUpdate)\n }\n }\n })\n\n // unmount\n useIsomorphicLayoutEffect(() => {\n return () => {\n const st = state.current\n st.isUnmounted = true\n const allKeys = {\n ...st.selections,\n ...st.nextSelections,\n }\n for (const key in allKeys) {\n removeMediaQueryListener(key, forceUpdate)\n }\n }\n }, [])\n\n return useConstant(() => {\n const st = state.current\n return new Proxy(mediaState, {\n get(target, key: string) {\n if (!(key in mediaState)) {\n return Reflect.get(target, key)\n }\n if (!st.isUnmounted) {\n if (st.isRendering) {\n st.nextSelections[key] = true\n }\n }\n if (key in mediaState) {\n return mediaState[key]\n }\n return Reflect.get(mediaState, key)\n },\n })\n })\n}\n\nfunction camelToHyphen(str: string) {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase()\n}\n\nexport function mediaObjectToString(query: string | MediaQueryObject) {\n if (typeof query === 'string') {\n return query\n }\n return Object.entries(query)\n .map(([feature, value]) => {\n feature = camelToHyphen(feature)\n if (typeof value === 'string') {\n return `(${feature}: ${value})`\n }\n if (typeof value === 'number' && /[height|width]$/.test(feature)) {\n value = `${value}px`\n }\n return `(${feature}: ${value})`\n })\n .join(' and ')\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { Pressable } from "react-native";
4
+ const getPressable = Pressable?.["type"]?.["render"];
5
+ const usePressable = /* @__PURE__ */ __name((props) => {
6
+ const out = getPressable(props);
7
+ const { children, style, ...pressableProps } = out.props;
8
+ return [pressableProps, style];
9
+ }, "usePressable");
10
+ export {
11
+ usePressable
12
+ };
13
+ //# sourceMappingURL=usePressable.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/usePressable.tsx"],
4
+ "sourcesContent": ["import { Pressable, PressableProps } from 'react-native'\n\nconst getPressable = Pressable?.['type']?.['render']\n\nexport const usePressable = (props: PressableProps) => {\n const out = getPressable(props)\n const { children, style, ...pressableProps } = out.props\n return [pressableProps, style] as const\n}\n"],
5
+ "mappings": ";;AAAA;AAEA,MAAM,eAAe,YAAY,UAAU;AAEpC,MAAM,eAAe,wBAAC,UAA0B;AACrD,QAAM,MAAM,aAAa;AACzB,QAAM,EAAE,UAAU,UAAU,mBAAmB,IAAI;AACnD,SAAO,CAAC,gBAAgB;AAAA,GAHE;",
6
+ "names": []
7
+ }
@@ -0,0 +1,89 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { useForceUpdate } from "@tamagui/use-force-update";
4
+ import { useContext, useEffect, useMemo, useRef, useState } from "react";
5
+ import { useIsomorphicLayoutEffect } from "../constants/platform";
6
+ import { Variable } from "../createVariable";
7
+ import { ThemeContext } from "../views/ThemeContext";
8
+ import { ThemeManagerContext } from "../views/ThemeManagerContext";
9
+ import { GET_DEFAULT_THEME } from "../views/ThemeProvider";
10
+ const areEqualSets = /* @__PURE__ */ __name((a, b) => {
11
+ if (a.size !== b.size)
12
+ return false;
13
+ for (const val in a) {
14
+ if (!b.has(val)) {
15
+ return false;
16
+ }
17
+ }
18
+ return true;
19
+ }, "areEqualSets");
20
+ const useThemeName = /* @__PURE__ */ __name((opts) => {
21
+ const parent = useContext(ThemeManagerContext);
22
+ const [name, setName] = useState(parent.name);
23
+ useIsomorphicLayoutEffect(() => {
24
+ return parent.onChangeTheme((next, manager) => {
25
+ setName(opts?.parent ? manager.parentName : next);
26
+ });
27
+ }, [parent]);
28
+ return name || "light";
29
+ }, "useThemeName");
30
+ const useDefaultThemeName = /* @__PURE__ */ __name(() => {
31
+ return useContext(ThemeContext)[GET_DEFAULT_THEME];
32
+ }, "useDefaultThemeName");
33
+ const useTheme = /* @__PURE__ */ __name(() => {
34
+ const forceUpdate = useForceUpdate();
35
+ const manager = useContext(ThemeManagerContext);
36
+ const themes = useContext(ThemeContext);
37
+ const state = useRef();
38
+ if (!state.current) {
39
+ state.current = {
40
+ uuid: {},
41
+ keys: new Set(),
42
+ isRendering: true
43
+ };
44
+ }
45
+ state.current.isRendering = true;
46
+ useIsomorphicLayoutEffect(() => {
47
+ const st = state.current;
48
+ st.isRendering = false;
49
+ const cur = manager.keys.get(st.uuid);
50
+ if (!cur || !areEqualSets(st.keys, cur)) {
51
+ manager.track(st.uuid, st.keys);
52
+ }
53
+ });
54
+ useEffect(() => {
55
+ return manager.onUpdate(state.current.uuid, forceUpdate);
56
+ }, []);
57
+ const theme = (manager.name ? themes[manager.name] : themes.light) ?? themes.light;
58
+ return useMemo(() => {
59
+ return new Proxy(theme, {
60
+ get(_, key) {
61
+ const name = manager.name;
62
+ if (!name) {
63
+ return Reflect.get(_, key);
64
+ }
65
+ let activeTheme = themes[name];
66
+ if (!activeTheme) {
67
+ console.error("No theme by name", name, "only:", themes, "keeping current theme");
68
+ activeTheme = theme;
69
+ }
70
+ const val = activeTheme[key];
71
+ if (process.env.NODE_ENV === "development") {
72
+ if (typeof val === "undefined") {
73
+ throw new Error(`No theme value "${String(key)}" in: ${Object.keys(activeTheme)}`);
74
+ }
75
+ }
76
+ if (state.current.isRendering) {
77
+ state.current.keys.add(key);
78
+ }
79
+ return new Variable({ val: val.val, name: key });
80
+ }
81
+ });
82
+ }, []);
83
+ }, "useTheme");
84
+ export {
85
+ useDefaultThemeName,
86
+ useTheme,
87
+ useThemeName
88
+ };
89
+ //# sourceMappingURL=useTheme.js.map