@tamagui/get-font-sized 1.1.6 → 1.1.8

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.
package/dist/cjs/index.js CHANGED
@@ -22,7 +22,7 @@ __export(src_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(src_exports);
24
24
  var import_core = require("@tamagui/core");
25
- const getFontSized = (val = "$true", { fonts, theme, props }) => {
25
+ const getFontSized = (sizeTokenIn = "$true", { fonts, theme, props }) => {
26
26
  var _a, _b, _c;
27
27
  const family = (0, import_core.getVariableValue)(props.fontFamily) || "$body";
28
28
  const font = fonts[family] || fonts["$body"];
@@ -31,19 +31,20 @@ const getFontSized = (val = "$true", { fonts, theme, props }) => {
31
31
  console.warn("\u26A0\uFE0F no font found", {
32
32
  family,
33
33
  fontTokens: Object.keys(fonts),
34
- val
34
+ sizeTokenIn
35
35
  });
36
36
  }
37
37
  return {};
38
38
  }
39
39
  const fontFamily = font.family;
40
- const fontSize = props.fontSize || font.size[val];
41
- const lineHeight = props.lineHeight || font.lineHeight[val];
42
- const fontWeight = props.fontWeight || font.weight[val];
43
- const letterSpacing = props.letterSpacing || font.letterSpacing[val];
44
- const fontStyle = props.fontStyle || ((_a = font.style) == null ? void 0 : _a[val]);
45
- const textTransform = props.textTransform || ((_b = font.transform) == null ? void 0 : _b[val]);
46
- const color = props.color || ((_c = font.color) == null ? void 0 : _c[val]) || theme.color;
40
+ const sizeToken = sizeTokenIn === "$true" ? getDefaultSizeToken(font) : sizeTokenIn;
41
+ const fontSize = props.fontSize || font.size[sizeToken];
42
+ const lineHeight = props.lineHeight || font.lineHeight[sizeToken];
43
+ const fontWeight = props.fontWeight || font.weight[sizeToken];
44
+ const letterSpacing = props.letterSpacing || font.letterSpacing[sizeToken];
45
+ const fontStyle = props.fontStyle || ((_a = font.style) == null ? void 0 : _a[sizeToken]);
46
+ const textTransform = props.textTransform || ((_b = font.transform) == null ? void 0 : _b[sizeToken]);
47
+ const color = props.color || ((_c = font.color) == null ? void 0 : _c[sizeToken]) || theme.color;
47
48
  const style = {
48
49
  color,
49
50
  fontStyle,
@@ -56,13 +57,35 @@ const getFontSized = (val = "$true", { fonts, theme, props }) => {
56
57
  };
57
58
  if (process.env.NODE_ENV === "development") {
58
59
  if (props["debug"]) {
59
- console.groupCollapsed(" \u{1F539} getFont", val, props["fontWeight"], props["fow"]);
60
+ console.groupCollapsed(" \u{1F539} getFontSized", sizeTokenIn, sizeToken);
60
61
  console.log({ style, props, font });
61
62
  console.groupEnd();
62
63
  }
63
64
  }
64
65
  return style;
65
66
  };
67
+ const cache = /* @__PURE__ */ new WeakMap();
68
+ function getDefaultSizeToken(font) {
69
+ if (cache.has(font)) {
70
+ return cache.get(font);
71
+ }
72
+ const sizeTokens = "$true" in font.size ? font.size : (0, import_core.getTokens)(true).size;
73
+ const sizeDefault = sizeTokens["$true"];
74
+ const sizeDefaultSpecific = sizeDefault ? Object.keys(sizeTokens).find(
75
+ (x) => x !== "$true" && sizeTokens[x]["val"] === sizeDefault["val"]
76
+ ) : null;
77
+ if (!sizeDefault || !sizeDefaultSpecific) {
78
+ if (process.env.NODE_ENV === "development") {
79
+ console.warn(`No default size is set in your tokens for the "true" key, fonts will be inconsistent.
80
+
81
+ Fix this by having consistent tokens across fonts and sizes and setting a true key for your size tokens, or
82
+ set true keys for all your font tokens: "size", "lineHeight", "fontStyle", etc.`);
83
+ }
84
+ return Object.keys(font.size)[3];
85
+ }
86
+ cache.set(font, sizeDefaultSpecific);
87
+ return sizeDefaultSpecific;
88
+ }
66
89
  // Annotate the CommonJS export names for ESM import in node:
67
90
  0 && (module.exports = {
68
91
  getFontSized
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["import { getVariableValue } from '@tamagui/core'\nimport type { FontSizeTokens, TextProps, VariantSpreadFunction } from '@tamagui/core'\n\nexport const getFontSized: VariantSpreadFunction<TextProps, FontSizeTokens> = (\n val = '$true',\n { fonts, theme, props }\n) => {\n const family = getVariableValue(props.fontFamily) || '$body'\n const font = fonts[family] || fonts['$body']\n if (!font) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('\u26A0\uFE0F no font found', {\n family,\n fontTokens: Object.keys(fonts),\n val,\n })\n }\n return {} as any\n }\n const fontFamily = font.family\n const fontSize = props.fontSize || font.size[val]\n const lineHeight = props.lineHeight || font.lineHeight[val]\n const fontWeight = props.fontWeight || font.weight[val]\n const letterSpacing = props.letterSpacing || font.letterSpacing[val]\n const fontStyle = props.fontStyle || font.style?.[val]\n const textTransform = props.textTransform || font.transform?.[val]\n const color = props.color || font.color?.[val] || theme.color\n const style = {\n color,\n fontStyle,\n textTransform,\n fontFamily,\n fontWeight,\n letterSpacing,\n fontSize,\n lineHeight,\n }\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(' \uD83D\uDD39 getFont', val, props['fontWeight'], props['fow'])\n // eslint-disable-next-line no-console\n console.log({ style, props, font })\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n }\n return style\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiC;AAG1B,MAAM,eAAiE,CAC5E,MAAM,SACN,EAAE,OAAO,OAAO,MAAM,MACnB;AANL;AAOE,QAAM,aAAS,8BAAiB,MAAM,UAAU,KAAK;AACrD,QAAM,OAAO,MAAM,WAAW,MAAM;AACpC,MAAI,CAAC,MAAM;AACT,QAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,cAAQ,KAAK,8BAAoB;AAAA,QAC/B;AAAA,QACA,YAAY,OAAO,KAAK,KAAK;AAAA,QAC7B;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,CAAC;AAAA,EACV;AACA,QAAM,aAAa,KAAK;AACxB,QAAM,WAAW,MAAM,YAAY,KAAK,KAAK;AAC7C,QAAM,aAAa,MAAM,cAAc,KAAK,WAAW;AACvD,QAAM,aAAa,MAAM,cAAc,KAAK,OAAO;AACnD,QAAM,gBAAgB,MAAM,iBAAiB,KAAK,cAAc;AAChE,QAAM,YAAY,MAAM,eAAa,UAAK,UAAL,mBAAa;AAClD,QAAM,gBAAgB,MAAM,mBAAiB,UAAK,cAAL,mBAAiB;AAC9D,QAAM,QAAQ,MAAM,WAAS,UAAK,UAAL,mBAAa,SAAQ,MAAM;AACxD,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,MAAM,UAAU;AAElB,cAAQ,eAAe,uBAAgB,KAAK,MAAM,eAAe,MAAM,MAAM;AAE7E,cAAQ,IAAI,EAAE,OAAO,OAAO,KAAK,CAAC;AAElC,cAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["import { getTokens, getVariableValue } from '@tamagui/core'\nimport type {\n FontSizeTokens,\n GenericFont,\n TextProps,\n VariantSpreadFunction,\n} from '@tamagui/core'\n\nexport const getFontSized: VariantSpreadFunction<TextProps, FontSizeTokens> = (\n sizeTokenIn = '$true',\n { fonts, theme, props }\n) => {\n const family = getVariableValue(props.fontFamily) || '$body'\n const font = fonts[family] || fonts['$body']\n if (!font) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('\u26A0\uFE0F no font found', {\n family,\n fontTokens: Object.keys(fonts),\n sizeTokenIn,\n })\n }\n return {} as any\n }\n const fontFamily = font.family\n const sizeToken = sizeTokenIn === '$true' ? getDefaultSizeToken(font) : sizeTokenIn\n const fontSize = props.fontSize || font.size[sizeToken]\n const lineHeight = props.lineHeight || font.lineHeight[sizeToken]\n const fontWeight = props.fontWeight || font.weight[sizeToken]\n const letterSpacing = props.letterSpacing || font.letterSpacing[sizeToken]\n const fontStyle = props.fontStyle || font.style?.[sizeToken]\n const textTransform = props.textTransform || font.transform?.[sizeToken]\n const color = props.color || font.color?.[sizeToken] || theme.color\n\n const style = {\n color,\n fontStyle,\n textTransform,\n fontFamily,\n fontWeight,\n letterSpacing,\n fontSize,\n lineHeight,\n }\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(' \uD83D\uDD39 getFontSized', sizeTokenIn, sizeToken)\n // eslint-disable-next-line no-console\n console.log({ style, props, font })\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n }\n return style\n}\n\nconst cache = new WeakMap<any, FontSizeTokens>()\n\nfunction getDefaultSizeToken(font: GenericFont) {\n if (cache.has(font)) {\n return cache.get(font)!\n }\n\n // use either font.size if it has true set, or fallback to tokens.size mapping to the same\n const sizeTokens = '$true' in font.size ? font.size : getTokens(true).size\n const sizeDefault = sizeTokens['$true']\n const sizeDefaultSpecific = sizeDefault\n ? Object.keys(sizeTokens).find(\n (x) => x !== '$true' && sizeTokens[x]['val'] === sizeDefault['val']\n )\n : null\n\n if (!sizeDefault || !sizeDefaultSpecific) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`No default size is set in your tokens for the \"true\" key, fonts will be inconsistent.\n\n Fix this by having consistent tokens across fonts and sizes and setting a true key for your size tokens, or\n set true keys for all your font tokens: \"size\", \"lineHeight\", \"fontStyle\", etc.`)\n }\n return Object.keys(font.size)[3]\n }\n\n cache.set(font, sizeDefaultSpecific as FontSizeTokens)\n return sizeDefaultSpecific\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4C;AAQrC,MAAM,eAAiE,CAC5E,cAAc,SACd,EAAE,OAAO,OAAO,MAAM,MACnB;AAXL;AAYE,QAAM,aAAS,8BAAiB,MAAM,UAAU,KAAK;AACrD,QAAM,OAAO,MAAM,WAAW,MAAM;AACpC,MAAI,CAAC,MAAM;AACT,QAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,cAAQ,KAAK,8BAAoB;AAAA,QAC/B;AAAA,QACA,YAAY,OAAO,KAAK,KAAK;AAAA,QAC7B;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,CAAC;AAAA,EACV;AACA,QAAM,aAAa,KAAK;AACxB,QAAM,YAAY,gBAAgB,UAAU,oBAAoB,IAAI,IAAI;AACxE,QAAM,WAAW,MAAM,YAAY,KAAK,KAAK;AAC7C,QAAM,aAAa,MAAM,cAAc,KAAK,WAAW;AACvD,QAAM,aAAa,MAAM,cAAc,KAAK,OAAO;AACnD,QAAM,gBAAgB,MAAM,iBAAiB,KAAK,cAAc;AAChE,QAAM,YAAY,MAAM,eAAa,UAAK,UAAL,mBAAa;AAClD,QAAM,gBAAgB,MAAM,mBAAiB,UAAK,cAAL,mBAAiB;AAC9D,QAAM,QAAQ,MAAM,WAAS,UAAK,UAAL,mBAAa,eAAc,MAAM;AAE9D,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,MAAM,UAAU;AAElB,cAAQ,eAAe,4BAAqB,aAAa,SAAS;AAElE,cAAQ,IAAI,EAAE,OAAO,OAAO,KAAK,CAAC;AAElC,cAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAEA,MAAM,QAAQ,oBAAI,QAA6B;AAE/C,SAAS,oBAAoB,MAAmB;AAC9C,MAAI,MAAM,IAAI,IAAI,GAAG;AACnB,WAAO,MAAM,IAAI,IAAI;AAAA,EACvB;AAGA,QAAM,aAAa,WAAW,KAAK,OAAO,KAAK,WAAO,uBAAU,IAAI,EAAE;AACtE,QAAM,cAAc,WAAW;AAC/B,QAAM,sBAAsB,cACxB,OAAO,KAAK,UAAU,EAAE;AAAA,IACtB,CAAC,MAAM,MAAM,WAAW,WAAW,GAAG,WAAW,YAAY;AAAA,EAC/D,IACA;AAEJ,MAAI,CAAC,eAAe,CAAC,qBAAqB;AACxC,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,KAAK;AAAA;AAAA;AAAA,sFAGmE;AAAA,IAClF;AACA,WAAO,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,EAChC;AAEA,QAAM,IAAI,MAAM,mBAAqC;AACrD,SAAO;AACT;",
6
6
  "names": []
7
7
  }
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { getVariableValue } from "@tamagui/core";
2
- const getFontSized = (val = "$true", { fonts, theme, props }) => {
1
+ import { getTokens, getVariableValue } from "@tamagui/core";
2
+ const getFontSized = (sizeTokenIn = "$true", { fonts, theme, props }) => {
3
3
  var _a, _b, _c;
4
4
  const family = getVariableValue(props.fontFamily) || "$body";
5
5
  const font = fonts[family] || fonts["$body"];
@@ -8,19 +8,20 @@ const getFontSized = (val = "$true", { fonts, theme, props }) => {
8
8
  console.warn("\u26A0\uFE0F no font found", {
9
9
  family,
10
10
  fontTokens: Object.keys(fonts),
11
- val
11
+ sizeTokenIn
12
12
  });
13
13
  }
14
14
  return {};
15
15
  }
16
16
  const fontFamily = font.family;
17
- const fontSize = props.fontSize || font.size[val];
18
- const lineHeight = props.lineHeight || font.lineHeight[val];
19
- const fontWeight = props.fontWeight || font.weight[val];
20
- const letterSpacing = props.letterSpacing || font.letterSpacing[val];
21
- const fontStyle = props.fontStyle || ((_a = font.style) == null ? void 0 : _a[val]);
22
- const textTransform = props.textTransform || ((_b = font.transform) == null ? void 0 : _b[val]);
23
- const color = props.color || ((_c = font.color) == null ? void 0 : _c[val]) || theme.color;
17
+ const sizeToken = sizeTokenIn === "$true" ? getDefaultSizeToken(font) : sizeTokenIn;
18
+ const fontSize = props.fontSize || font.size[sizeToken];
19
+ const lineHeight = props.lineHeight || font.lineHeight[sizeToken];
20
+ const fontWeight = props.fontWeight || font.weight[sizeToken];
21
+ const letterSpacing = props.letterSpacing || font.letterSpacing[sizeToken];
22
+ const fontStyle = props.fontStyle || ((_a = font.style) == null ? void 0 : _a[sizeToken]);
23
+ const textTransform = props.textTransform || ((_b = font.transform) == null ? void 0 : _b[sizeToken]);
24
+ const color = props.color || ((_c = font.color) == null ? void 0 : _c[sizeToken]) || theme.color;
24
25
  const style = {
25
26
  color,
26
27
  fontStyle,
@@ -33,13 +34,35 @@ const getFontSized = (val = "$true", { fonts, theme, props }) => {
33
34
  };
34
35
  if (process.env.NODE_ENV === "development") {
35
36
  if (props["debug"]) {
36
- console.groupCollapsed(" \u{1F539} getFont", val, props["fontWeight"], props["fow"]);
37
+ console.groupCollapsed(" \u{1F539} getFontSized", sizeTokenIn, sizeToken);
37
38
  console.log({ style, props, font });
38
39
  console.groupEnd();
39
40
  }
40
41
  }
41
42
  return style;
42
43
  };
44
+ const cache = /* @__PURE__ */ new WeakMap();
45
+ function getDefaultSizeToken(font) {
46
+ if (cache.has(font)) {
47
+ return cache.get(font);
48
+ }
49
+ const sizeTokens = "$true" in font.size ? font.size : getTokens(true).size;
50
+ const sizeDefault = sizeTokens["$true"];
51
+ const sizeDefaultSpecific = sizeDefault ? Object.keys(sizeTokens).find(
52
+ (x) => x !== "$true" && sizeTokens[x]["val"] === sizeDefault["val"]
53
+ ) : null;
54
+ if (!sizeDefault || !sizeDefaultSpecific) {
55
+ if (process.env.NODE_ENV === "development") {
56
+ console.warn(`No default size is set in your tokens for the "true" key, fonts will be inconsistent.
57
+
58
+ Fix this by having consistent tokens across fonts and sizes and setting a true key for your size tokens, or
59
+ set true keys for all your font tokens: "size", "lineHeight", "fontStyle", etc.`);
60
+ }
61
+ return Object.keys(font.size)[3];
62
+ }
63
+ cache.set(font, sizeDefaultSpecific);
64
+ return sizeDefaultSpecific;
65
+ }
43
66
  export {
44
67
  getFontSized
45
68
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["import { getVariableValue } from '@tamagui/core'\nimport type { FontSizeTokens, TextProps, VariantSpreadFunction } from '@tamagui/core'\n\nexport const getFontSized: VariantSpreadFunction<TextProps, FontSizeTokens> = (\n val = '$true',\n { fonts, theme, props }\n) => {\n const family = getVariableValue(props.fontFamily) || '$body'\n const font = fonts[family] || fonts['$body']\n if (!font) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('\u26A0\uFE0F no font found', {\n family,\n fontTokens: Object.keys(fonts),\n val,\n })\n }\n return {} as any\n }\n const fontFamily = font.family\n const fontSize = props.fontSize || font.size[val]\n const lineHeight = props.lineHeight || font.lineHeight[val]\n const fontWeight = props.fontWeight || font.weight[val]\n const letterSpacing = props.letterSpacing || font.letterSpacing[val]\n const fontStyle = props.fontStyle || font.style?.[val]\n const textTransform = props.textTransform || font.transform?.[val]\n const color = props.color || font.color?.[val] || theme.color\n const style = {\n color,\n fontStyle,\n textTransform,\n fontFamily,\n fontWeight,\n letterSpacing,\n fontSize,\n lineHeight,\n }\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(' \uD83D\uDD39 getFont', val, props['fontWeight'], props['fow'])\n // eslint-disable-next-line no-console\n console.log({ style, props, font })\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n }\n return style\n}\n"],
5
- "mappings": "AAAA,SAAS,wBAAwB;AAG1B,MAAM,eAAiE,CAC5E,MAAM,SACN,EAAE,OAAO,OAAO,MAAM,MACnB;AANL;AAOE,QAAM,SAAS,iBAAiB,MAAM,UAAU,KAAK;AACrD,QAAM,OAAO,MAAM,WAAW,MAAM;AACpC,MAAI,CAAC,MAAM;AACT,QAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,cAAQ,KAAK,8BAAoB;AAAA,QAC/B;AAAA,QACA,YAAY,OAAO,KAAK,KAAK;AAAA,QAC7B;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,CAAC;AAAA,EACV;AACA,QAAM,aAAa,KAAK;AACxB,QAAM,WAAW,MAAM,YAAY,KAAK,KAAK;AAC7C,QAAM,aAAa,MAAM,cAAc,KAAK,WAAW;AACvD,QAAM,aAAa,MAAM,cAAc,KAAK,OAAO;AACnD,QAAM,gBAAgB,MAAM,iBAAiB,KAAK,cAAc;AAChE,QAAM,YAAY,MAAM,eAAa,UAAK,UAAL,mBAAa;AAClD,QAAM,gBAAgB,MAAM,mBAAiB,UAAK,cAAL,mBAAiB;AAC9D,QAAM,QAAQ,MAAM,WAAS,UAAK,UAAL,mBAAa,SAAQ,MAAM;AACxD,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,MAAM,UAAU;AAElB,cAAQ,eAAe,uBAAgB,KAAK,MAAM,eAAe,MAAM,MAAM;AAE7E,cAAQ,IAAI,EAAE,OAAO,OAAO,KAAK,CAAC;AAElC,cAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["import { getTokens, getVariableValue } from '@tamagui/core'\nimport type {\n FontSizeTokens,\n GenericFont,\n TextProps,\n VariantSpreadFunction,\n} from '@tamagui/core'\n\nexport const getFontSized: VariantSpreadFunction<TextProps, FontSizeTokens> = (\n sizeTokenIn = '$true',\n { fonts, theme, props }\n) => {\n const family = getVariableValue(props.fontFamily) || '$body'\n const font = fonts[family] || fonts['$body']\n if (!font) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('\u26A0\uFE0F no font found', {\n family,\n fontTokens: Object.keys(fonts),\n sizeTokenIn,\n })\n }\n return {} as any\n }\n const fontFamily = font.family\n const sizeToken = sizeTokenIn === '$true' ? getDefaultSizeToken(font) : sizeTokenIn\n const fontSize = props.fontSize || font.size[sizeToken]\n const lineHeight = props.lineHeight || font.lineHeight[sizeToken]\n const fontWeight = props.fontWeight || font.weight[sizeToken]\n const letterSpacing = props.letterSpacing || font.letterSpacing[sizeToken]\n const fontStyle = props.fontStyle || font.style?.[sizeToken]\n const textTransform = props.textTransform || font.transform?.[sizeToken]\n const color = props.color || font.color?.[sizeToken] || theme.color\n\n const style = {\n color,\n fontStyle,\n textTransform,\n fontFamily,\n fontWeight,\n letterSpacing,\n fontSize,\n lineHeight,\n }\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(' \uD83D\uDD39 getFontSized', sizeTokenIn, sizeToken)\n // eslint-disable-next-line no-console\n console.log({ style, props, font })\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n }\n return style\n}\n\nconst cache = new WeakMap<any, FontSizeTokens>()\n\nfunction getDefaultSizeToken(font: GenericFont) {\n if (cache.has(font)) {\n return cache.get(font)!\n }\n\n // use either font.size if it has true set, or fallback to tokens.size mapping to the same\n const sizeTokens = '$true' in font.size ? font.size : getTokens(true).size\n const sizeDefault = sizeTokens['$true']\n const sizeDefaultSpecific = sizeDefault\n ? Object.keys(sizeTokens).find(\n (x) => x !== '$true' && sizeTokens[x]['val'] === sizeDefault['val']\n )\n : null\n\n if (!sizeDefault || !sizeDefaultSpecific) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`No default size is set in your tokens for the \"true\" key, fonts will be inconsistent.\n\n Fix this by having consistent tokens across fonts and sizes and setting a true key for your size tokens, or\n set true keys for all your font tokens: \"size\", \"lineHeight\", \"fontStyle\", etc.`)\n }\n return Object.keys(font.size)[3]\n }\n\n cache.set(font, sizeDefaultSpecific as FontSizeTokens)\n return sizeDefaultSpecific\n}\n"],
5
+ "mappings": "AAAA,SAAS,WAAW,wBAAwB;AAQrC,MAAM,eAAiE,CAC5E,cAAc,SACd,EAAE,OAAO,OAAO,MAAM,MACnB;AAXL;AAYE,QAAM,SAAS,iBAAiB,MAAM,UAAU,KAAK;AACrD,QAAM,OAAO,MAAM,WAAW,MAAM;AACpC,MAAI,CAAC,MAAM;AACT,QAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,cAAQ,KAAK,8BAAoB;AAAA,QAC/B;AAAA,QACA,YAAY,OAAO,KAAK,KAAK;AAAA,QAC7B;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,CAAC;AAAA,EACV;AACA,QAAM,aAAa,KAAK;AACxB,QAAM,YAAY,gBAAgB,UAAU,oBAAoB,IAAI,IAAI;AACxE,QAAM,WAAW,MAAM,YAAY,KAAK,KAAK;AAC7C,QAAM,aAAa,MAAM,cAAc,KAAK,WAAW;AACvD,QAAM,aAAa,MAAM,cAAc,KAAK,OAAO;AACnD,QAAM,gBAAgB,MAAM,iBAAiB,KAAK,cAAc;AAChE,QAAM,YAAY,MAAM,eAAa,UAAK,UAAL,mBAAa;AAClD,QAAM,gBAAgB,MAAM,mBAAiB,UAAK,cAAL,mBAAiB;AAC9D,QAAM,QAAQ,MAAM,WAAS,UAAK,UAAL,mBAAa,eAAc,MAAM;AAE9D,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,MAAM,UAAU;AAElB,cAAQ,eAAe,4BAAqB,aAAa,SAAS;AAElE,cAAQ,IAAI,EAAE,OAAO,OAAO,KAAK,CAAC;AAElC,cAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAEA,MAAM,QAAQ,oBAAI,QAA6B;AAE/C,SAAS,oBAAoB,MAAmB;AAC9C,MAAI,MAAM,IAAI,IAAI,GAAG;AACnB,WAAO,MAAM,IAAI,IAAI;AAAA,EACvB;AAGA,QAAM,aAAa,WAAW,KAAK,OAAO,KAAK,OAAO,UAAU,IAAI,EAAE;AACtE,QAAM,cAAc,WAAW;AAC/B,QAAM,sBAAsB,cACxB,OAAO,KAAK,UAAU,EAAE;AAAA,IACtB,CAAC,MAAM,MAAM,WAAW,WAAW,GAAG,WAAW,YAAY;AAAA,EAC/D,IACA;AAEJ,MAAI,CAAC,eAAe,CAAC,qBAAqB;AACxC,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,KAAK;AAAA;AAAA;AAAA,sFAGmE;AAAA,IAClF;AACA,WAAO,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,EAChC;AAEA,QAAM,IAAI,MAAM,mBAAqC;AACrD,SAAO;AACT;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/get-font-sized",
3
- "version": "1.1.6",
3
+ "version": "1.1.8",
4
4
  "types": "./types/index.d.ts",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -18,11 +18,11 @@
18
18
  "clean:build": "tamagui-build clean:build"
19
19
  },
20
20
  "dependencies": {
21
- "@tamagui/core": "^1.1.6",
21
+ "@tamagui/core": "^1.1.8",
22
22
  "react": "^18.2.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@tamagui/build": "^1.1.6",
25
+ "@tamagui/build": "^1.1.8",
26
26
  "@types/react": "^18.0.15"
27
27
  },
28
28
  "publishConfig": {
package/src/index.ts CHANGED
@@ -1,8 +1,13 @@
1
- import { getVariableValue } from '@tamagui/core'
2
- import type { FontSizeTokens, TextProps, VariantSpreadFunction } from '@tamagui/core'
1
+ import { getTokens, getVariableValue } from '@tamagui/core'
2
+ import type {
3
+ FontSizeTokens,
4
+ GenericFont,
5
+ TextProps,
6
+ VariantSpreadFunction,
7
+ } from '@tamagui/core'
3
8
 
4
9
  export const getFontSized: VariantSpreadFunction<TextProps, FontSizeTokens> = (
5
- val = '$true',
10
+ sizeTokenIn = '$true',
6
11
  { fonts, theme, props }
7
12
  ) => {
8
13
  const family = getVariableValue(props.fontFamily) || '$body'
@@ -13,19 +18,21 @@ export const getFontSized: VariantSpreadFunction<TextProps, FontSizeTokens> = (
13
18
  console.warn('⚠️ no font found', {
14
19
  family,
15
20
  fontTokens: Object.keys(fonts),
16
- val,
21
+ sizeTokenIn,
17
22
  })
18
23
  }
19
24
  return {} as any
20
25
  }
21
26
  const fontFamily = font.family
22
- const fontSize = props.fontSize || font.size[val]
23
- const lineHeight = props.lineHeight || font.lineHeight[val]
24
- const fontWeight = props.fontWeight || font.weight[val]
25
- const letterSpacing = props.letterSpacing || font.letterSpacing[val]
26
- const fontStyle = props.fontStyle || font.style?.[val]
27
- const textTransform = props.textTransform || font.transform?.[val]
28
- const color = props.color || font.color?.[val] || theme.color
27
+ const sizeToken = sizeTokenIn === '$true' ? getDefaultSizeToken(font) : sizeTokenIn
28
+ const fontSize = props.fontSize || font.size[sizeToken]
29
+ const lineHeight = props.lineHeight || font.lineHeight[sizeToken]
30
+ const fontWeight = props.fontWeight || font.weight[sizeToken]
31
+ const letterSpacing = props.letterSpacing || font.letterSpacing[sizeToken]
32
+ const fontStyle = props.fontStyle || font.style?.[sizeToken]
33
+ const textTransform = props.textTransform || font.transform?.[sizeToken]
34
+ const color = props.color || font.color?.[sizeToken] || theme.color
35
+
29
36
  const style = {
30
37
  color,
31
38
  fontStyle,
@@ -39,7 +46,7 @@ export const getFontSized: VariantSpreadFunction<TextProps, FontSizeTokens> = (
39
46
  if (process.env.NODE_ENV === 'development') {
40
47
  if (props['debug']) {
41
48
  // eslint-disable-next-line no-console
42
- console.groupCollapsed(' 🔹 getFont', val, props['fontWeight'], props['fow'])
49
+ console.groupCollapsed(' 🔹 getFontSized', sizeTokenIn, sizeToken)
43
50
  // eslint-disable-next-line no-console
44
51
  console.log({ style, props, font })
45
52
  // eslint-disable-next-line no-console
@@ -48,3 +55,33 @@ export const getFontSized: VariantSpreadFunction<TextProps, FontSizeTokens> = (
48
55
  }
49
56
  return style
50
57
  }
58
+
59
+ const cache = new WeakMap<any, FontSizeTokens>()
60
+
61
+ function getDefaultSizeToken(font: GenericFont) {
62
+ if (cache.has(font)) {
63
+ return cache.get(font)!
64
+ }
65
+
66
+ // use either font.size if it has true set, or fallback to tokens.size mapping to the same
67
+ const sizeTokens = '$true' in font.size ? font.size : getTokens(true).size
68
+ const sizeDefault = sizeTokens['$true']
69
+ const sizeDefaultSpecific = sizeDefault
70
+ ? Object.keys(sizeTokens).find(
71
+ (x) => x !== '$true' && sizeTokens[x]['val'] === sizeDefault['val']
72
+ )
73
+ : null
74
+
75
+ if (!sizeDefault || !sizeDefaultSpecific) {
76
+ if (process.env.NODE_ENV === 'development') {
77
+ console.warn(`No default size is set in your tokens for the "true" key, fonts will be inconsistent.
78
+
79
+ Fix this by having consistent tokens across fonts and sizes and setting a true key for your size tokens, or
80
+ set true keys for all your font tokens: "size", "lineHeight", "fontStyle", etc.`)
81
+ }
82
+ return Object.keys(font.size)[3]
83
+ }
84
+
85
+ cache.set(font, sizeDefaultSpecific as FontSizeTokens)
86
+ return sizeDefaultSpecific
87
+ }