@oxyhq/bloom 0.3.2 → 0.3.4

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 (63) hide show
  1. package/lib/commonjs/fonts/FontLoader.js +9 -2
  2. package/lib/commonjs/fonts/FontLoader.js.map +1 -1
  3. package/lib/commonjs/fonts/FontLoader.native.js +60 -2
  4. package/lib/commonjs/fonts/FontLoader.native.js.map +1 -1
  5. package/lib/commonjs/fonts/apply-font-faces.js +9 -38
  6. package/lib/commonjs/fonts/apply-font-faces.js.map +1 -1
  7. package/lib/commonjs/fonts/apply-font-faces.web.js +45 -0
  8. package/lib/commonjs/fonts/apply-font-faces.web.js.map +1 -0
  9. package/lib/commonjs/fonts/font-assets.js +2 -2
  10. package/lib/commonjs/fonts/index.js +1 -1
  11. package/lib/commonjs/fonts/index.web.js +40 -0
  12. package/lib/commonjs/fonts/index.web.js.map +1 -0
  13. package/lib/commonjs/index.js +1 -1
  14. package/lib/commonjs/index.web.js +1 -1
  15. package/lib/module/fonts/FontLoader.js +7 -1
  16. package/lib/module/fonts/FontLoader.js.map +1 -1
  17. package/lib/module/fonts/FontLoader.native.js +59 -1
  18. package/lib/module/fonts/FontLoader.native.js.map +1 -1
  19. package/lib/module/fonts/apply-font-faces.js +9 -37
  20. package/lib/module/fonts/apply-font-faces.js.map +1 -1
  21. package/lib/module/fonts/apply-font-faces.web.js +39 -0
  22. package/lib/module/fonts/apply-font-faces.web.js.map +1 -0
  23. package/lib/module/fonts/font-assets.js +2 -2
  24. package/lib/module/fonts/index.js +1 -1
  25. package/lib/module/fonts/index.js.map +1 -1
  26. package/lib/module/fonts/index.web.js +18 -0
  27. package/lib/module/fonts/index.web.js.map +1 -0
  28. package/lib/module/index.js +1 -1
  29. package/lib/module/index.js.map +1 -1
  30. package/lib/module/index.web.js +1 -1
  31. package/lib/module/index.web.js.map +1 -1
  32. package/lib/typescript/commonjs/fonts/FontLoader.d.ts.map +1 -1
  33. package/lib/typescript/commonjs/fonts/FontLoader.native.d.ts +10 -0
  34. package/lib/typescript/commonjs/fonts/FontLoader.native.d.ts.map +1 -1
  35. package/lib/typescript/commonjs/fonts/apply-font-faces.d.ts +0 -13
  36. package/lib/typescript/commonjs/fonts/apply-font-faces.d.ts.map +1 -1
  37. package/lib/typescript/commonjs/fonts/apply-font-faces.web.d.ts +12 -0
  38. package/lib/typescript/commonjs/fonts/apply-font-faces.web.d.ts.map +1 -0
  39. package/lib/typescript/commonjs/fonts/index.web.d.ts +7 -0
  40. package/lib/typescript/commonjs/fonts/index.web.d.ts.map +1 -0
  41. package/lib/typescript/commonjs/index.web.d.ts +1 -1
  42. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  43. package/lib/typescript/module/fonts/FontLoader.d.ts.map +1 -1
  44. package/lib/typescript/module/fonts/FontLoader.native.d.ts +10 -0
  45. package/lib/typescript/module/fonts/FontLoader.native.d.ts.map +1 -1
  46. package/lib/typescript/module/fonts/apply-font-faces.d.ts +0 -13
  47. package/lib/typescript/module/fonts/apply-font-faces.d.ts.map +1 -1
  48. package/lib/typescript/module/fonts/apply-font-faces.web.d.ts +12 -0
  49. package/lib/typescript/module/fonts/apply-font-faces.web.d.ts.map +1 -0
  50. package/lib/typescript/module/fonts/index.web.d.ts +7 -0
  51. package/lib/typescript/module/fonts/index.web.d.ts.map +1 -0
  52. package/lib/typescript/module/index.web.d.ts +1 -1
  53. package/lib/typescript/module/index.web.d.ts.map +1 -1
  54. package/package.json +6 -1
  55. package/src/__tests__/FontLoader.native.test.tsx +72 -1
  56. package/src/__tests__/apply-font-faces.test.ts +9 -11
  57. package/src/fonts/FontLoader.native.tsx +74 -1
  58. package/src/fonts/FontLoader.tsx +7 -1
  59. package/src/fonts/apply-font-faces.ts +9 -39
  60. package/src/fonts/apply-font-faces.web.ts +38 -0
  61. package/src/fonts/font-assets.ts +2 -2
  62. package/src/fonts/index.web.ts +17 -0
  63. package/src/index.web.ts +1 -1
@@ -71,5 +71,5 @@ export * as ContextMenu from './context-menu';
71
71
  export * as Code from "./code/index.js";
72
72
 
73
73
  // Fonts
74
- export * as Fonts from "./fonts/index.js";
74
+ export * as Fonts from './fonts';
75
75
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["atoms","flatten","tokens","web","native","ios","android","platform","select","useInteractionState","useDelayedLoading","useThrottledValue","Icons","sizes","iconSizes","useCommonSVGProps","Dialog","Prompt","ErrorBoundary","PromptInput","Toast","Typography","Skeleton","Grid","Fill","IconCircle","TextField","SegmentedControl","SearchInput","BottomSheet","Tabs","Accordion","Admonition","Menu","Tooltip","Select","ContextMenu","Code","Fonts"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,cAAc,kBAAS;;AAEvB;AACA,SAASA,KAAK,EAAEC,OAAO,QAAQ,mBAAU;AAEzC,OAAO,KAAKC,MAAM,MAAM,oBAAiB;AACzC,SAASC,GAAG,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,sBAAmB;;AAE/E;AACA,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,iBAAiB,QAAQ,8BAA2B;AAC7D,SAASC,iBAAiB,QAAQ,8BAA2B;;AAE7D;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS;AAChC,SAAkCC,KAAK,IAAIC,SAAS,EAAEC,iBAAiB,QAAQ,mBAAgB;;AAE/F;AACA,cAAc,UAAU;AACxB,OAAO,KAAKC,MAAM,MAAM,UAAU;AAClC,OAAO,KAAKC,MAAM,MAAM,mBAAU;AAClC,cAAc,mBAAU;AACxB,cAAc,4BAAmB;AACjC,cAAc,oBAAW;AACzB,cAAc,4BAAmB;AACjC,cAAc,wBAAe;AAC7B,SAASC,aAAa,QAAQ,2BAAkB;AAEhD,cAAc,mBAAU;AACxB,cAAc,oBAAW;AACzB,OAAO,KAAKC,WAAW,MAAM,yBAAgB;AAC7C,cAAc,mBAAU;AACxB,OAAO,KAAKC,KAAK,MAAM,SAAS;;AAEhC;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;;AAE1C;AACA,OAAO,KAAKC,QAAQ,MAAM,qBAAY;AACtC,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,SAASC,IAAI,QAAQ,iBAAQ;AAC7B,SAASC,UAAU,QAAQ,wBAAe;;AAE1C;AACA,OAAO,KAAKC,SAAS,MAAM,uBAAc;AACzC,OAAO,KAAKC,gBAAgB,MAAM,8BAAqB;AACvD,SAASC,WAAW,QAAQ,yBAAgB;;AAE5C;AACA,SAASC,WAAW,QAAQ,yBAAgB;AAG5C;AACA,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,iBAAQ;AACtB,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,cAAc,qBAAY;AAC1B,OAAO,KAAKC,SAAS,MAAM,sBAAa;;AAExC;AACA,cAAc,0BAAiB;;AAE/B;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;AAC1C,OAAO,KAAKC,IAAI,MAAM,QAAQ;AAC9B,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAO,KAAKC,MAAM,MAAM,UAAU;AAClC,OAAO,KAAKC,WAAW,MAAM,gBAAgB;;AAE7C;AACA,OAAO,KAAKC,IAAI,MAAM,iBAAQ;;AAE9B;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS","ignoreList":[]}
1
+ {"version":3,"names":["atoms","flatten","tokens","web","native","ios","android","platform","select","useInteractionState","useDelayedLoading","useThrottledValue","Icons","sizes","iconSizes","useCommonSVGProps","Dialog","Prompt","ErrorBoundary","PromptInput","Toast","Typography","Skeleton","Grid","Fill","IconCircle","TextField","SegmentedControl","SearchInput","BottomSheet","Tabs","Accordion","Admonition","Menu","Tooltip","Select","ContextMenu","Code","Fonts"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,cAAc,kBAAS;;AAEvB;AACA,SAASA,KAAK,EAAEC,OAAO,QAAQ,mBAAU;AAEzC,OAAO,KAAKC,MAAM,MAAM,oBAAiB;AACzC,SAASC,GAAG,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,sBAAmB;;AAE/E;AACA,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,iBAAiB,QAAQ,8BAA2B;AAC7D,SAASC,iBAAiB,QAAQ,8BAA2B;;AAE7D;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS;AAChC,SAAkCC,KAAK,IAAIC,SAAS,EAAEC,iBAAiB,QAAQ,mBAAgB;;AAE/F;AACA,cAAc,UAAU;AACxB,OAAO,KAAKC,MAAM,MAAM,UAAU;AAClC,OAAO,KAAKC,MAAM,MAAM,mBAAU;AAClC,cAAc,mBAAU;AACxB,cAAc,4BAAmB;AACjC,cAAc,oBAAW;AACzB,cAAc,4BAAmB;AACjC,cAAc,wBAAe;AAC7B,SAASC,aAAa,QAAQ,2BAAkB;AAEhD,cAAc,mBAAU;AACxB,cAAc,oBAAW;AACzB,OAAO,KAAKC,WAAW,MAAM,yBAAgB;AAC7C,cAAc,mBAAU;AACxB,OAAO,KAAKC,KAAK,MAAM,SAAS;;AAEhC;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;;AAE1C;AACA,OAAO,KAAKC,QAAQ,MAAM,qBAAY;AACtC,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,SAASC,IAAI,QAAQ,iBAAQ;AAC7B,SAASC,UAAU,QAAQ,wBAAe;;AAE1C;AACA,OAAO,KAAKC,SAAS,MAAM,uBAAc;AACzC,OAAO,KAAKC,gBAAgB,MAAM,8BAAqB;AACvD,SAASC,WAAW,QAAQ,yBAAgB;;AAE5C;AACA,SAASC,WAAW,QAAQ,yBAAgB;AAG5C;AACA,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,iBAAQ;AACtB,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,cAAc,qBAAY;AAC1B,OAAO,KAAKC,SAAS,MAAM,sBAAa;;AAExC;AACA,cAAc,0BAAiB;;AAE/B;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;AAC1C,OAAO,KAAKC,IAAI,MAAM,QAAQ;AAC9B,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAO,KAAKC,MAAM,MAAM,UAAU;AAClC,OAAO,KAAKC,WAAW,MAAM,gBAAgB;;AAE7C;AACA,OAAO,KAAKC,IAAI,MAAM,iBAAQ;;AAE9B;AACA,OAAO,KAAKC,KAAK,MAAM,SAAS","ignoreList":[]}
@@ -76,5 +76,5 @@ export * as ContextMenu from "./context-menu/index.web.js";
76
76
  export * as Code from "./code/index.js";
77
77
 
78
78
  // Fonts
79
- export * as Fonts from "./fonts/index.js";
79
+ export * as Fonts from "./fonts/index.web.js";
80
80
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["atoms","flatten","tokens","web","native","ios","android","platform","select","useInteractionState","useDelayedLoading","useThrottledValue","Icons","sizes","iconSizes","useCommonSVGProps","Dialog","Prompt","ErrorBoundary","PromptInput","Toast","Typography","Skeleton","Grid","Fill","IconCircle","TextField","SegmentedControl","SearchInput","BottomSheet","Tabs","Accordion","Admonition","Menu","Tooltip","Select","ContextMenu","Code","Fonts"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAS;;AAEvB;AACA,SAASA,KAAK,EAAEC,OAAO,QAAQ,mBAAU;AAEzC,OAAO,KAAKC,MAAM,MAAM,oBAAiB;AACzC,SAASC,GAAG,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,sBAAmB;;AAE/E;AACA,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,iBAAiB,QAAQ,8BAA2B;AAC7D,SAASC,iBAAiB,QAAQ,8BAA2B;;AAE7D;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS;AAChC,SAAkCC,KAAK,IAAIC,SAAS,EAAEC,iBAAiB,QAAQ,mBAAgB;;AAE/F;AACA,cAAc,uBAAoB;AAClC,OAAO,KAAKC,MAAM,MAAM,uBAAoB;AAC5C,OAAO,KAAKC,MAAM,MAAM,mBAAU;AAClC,cAAc,mBAAU;AACxB,cAAc,4BAAmB;AACjC,cAAc,oBAAW;AACzB,cAAc,4BAAmB;AACjC,cAAc,wBAAe;AAC7B,SAASC,aAAa,QAAQ,2BAAkB;AAEhD,cAAc,mBAAU;AACxB,cAAc,oBAAW;AACzB,OAAO,KAAKC,WAAW,MAAM,yBAAgB;AAC7C,cAAc,mBAAU;AACxB,OAAO,KAAKC,KAAK,MAAM,sBAAmB;;AAE1C;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;;AAE1C;AACA,OAAO,KAAKC,QAAQ,MAAM,qBAAY;AACtC,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,SAASC,IAAI,QAAQ,iBAAQ;AAC7B,SAASC,UAAU,QAAQ,wBAAe;;AAE1C;AACA,OAAO,KAAKC,SAAS,MAAM,uBAAc;AACzC,OAAO,KAAKC,gBAAgB,MAAM,8BAAqB;AACvD,SAASC,WAAW,QAAQ,yBAAgB;;AAE5C;AACA,SAASC,WAAW,QAAQ,yBAAgB;AAG5C;AACA,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,iBAAQ;AACtB,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,cAAc,qBAAY;AAC1B,OAAO,KAAKC,SAAS,MAAM,sBAAa;;AAExC;AACA,cAAc,0BAAiB;;AAE/B;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;AAC1C,OAAO,KAAKC,IAAI,MAAM,qBAAkB;AACxC,OAAO,KAAKC,OAAO,MAAM,wBAAqB;AAC9C,OAAO,KAAKC,MAAM,MAAM,uBAAoB;AAC5C,OAAO,KAAKC,WAAW,MAAM,6BAA0B;;AAEvD;AACA,OAAO,KAAKC,IAAI,MAAM,iBAAQ;;AAE9B;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS","ignoreList":[]}
1
+ {"version":3,"names":["atoms","flatten","tokens","web","native","ios","android","platform","select","useInteractionState","useDelayedLoading","useThrottledValue","Icons","sizes","iconSizes","useCommonSVGProps","Dialog","Prompt","ErrorBoundary","PromptInput","Toast","Typography","Skeleton","Grid","Fill","IconCircle","TextField","SegmentedControl","SearchInput","BottomSheet","Tabs","Accordion","Admonition","Menu","Tooltip","Select","ContextMenu","Code","Fonts"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAS;;AAEvB;AACA,SAASA,KAAK,EAAEC,OAAO,QAAQ,mBAAU;AAEzC,OAAO,KAAKC,MAAM,MAAM,oBAAiB;AACzC,SAASC,GAAG,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,sBAAmB;;AAE/E;AACA,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,iBAAiB,QAAQ,8BAA2B;AAC7D,SAASC,iBAAiB,QAAQ,8BAA2B;;AAE7D;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS;AAChC,SAAkCC,KAAK,IAAIC,SAAS,EAAEC,iBAAiB,QAAQ,mBAAgB;;AAE/F;AACA,cAAc,uBAAoB;AAClC,OAAO,KAAKC,MAAM,MAAM,uBAAoB;AAC5C,OAAO,KAAKC,MAAM,MAAM,mBAAU;AAClC,cAAc,mBAAU;AACxB,cAAc,4BAAmB;AACjC,cAAc,oBAAW;AACzB,cAAc,4BAAmB;AACjC,cAAc,wBAAe;AAC7B,SAASC,aAAa,QAAQ,2BAAkB;AAEhD,cAAc,mBAAU;AACxB,cAAc,oBAAW;AACzB,OAAO,KAAKC,WAAW,MAAM,yBAAgB;AAC7C,cAAc,mBAAU;AACxB,OAAO,KAAKC,KAAK,MAAM,sBAAmB;;AAE1C;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;;AAE1C;AACA,OAAO,KAAKC,QAAQ,MAAM,qBAAY;AACtC,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,SAASC,IAAI,QAAQ,iBAAQ;AAC7B,SAASC,UAAU,QAAQ,wBAAe;;AAE1C;AACA,OAAO,KAAKC,SAAS,MAAM,uBAAc;AACzC,OAAO,KAAKC,gBAAgB,MAAM,8BAAqB;AACvD,SAASC,WAAW,QAAQ,yBAAgB;;AAE5C;AACA,SAASC,WAAW,QAAQ,yBAAgB;AAG5C;AACA,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,iBAAQ;AACtB,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,cAAc,qBAAY;AAC1B,OAAO,KAAKC,SAAS,MAAM,sBAAa;;AAExC;AACA,cAAc,0BAAiB;;AAE/B;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;AAC1C,OAAO,KAAKC,IAAI,MAAM,qBAAkB;AACxC,OAAO,KAAKC,OAAO,MAAM,wBAAqB;AAC9C,OAAO,KAAKC,MAAM,MAAM,uBAAoB;AAC5C,OAAO,KAAKC,WAAW,MAAM,6BAA0B;;AAEvD;AACA,OAAO,KAAKC,IAAI,MAAM,iBAAQ;;AAE9B;AACA,OAAO,KAAKC,KAAK,MAAM,sBAAmB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"FontLoader.d.ts","sourceRoot":"","sources":["../../../../src/fonts/FontLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAGtC,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAOhE"}
1
+ {"version":3,"file":"FontLoader.d.ts","sourceRoot":"","sources":["../../../../src/fonts/FontLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAStC,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAOhE"}
@@ -17,6 +17,16 @@ export interface FontLoaderProps {
17
17
  * fonts get loaded. This keeps Hook order stable across renders and means
18
18
  * `<BloomThemeProvider fonts={false}>` still gets fonts pre-loaded if the
19
19
  * provider tree ever flips `fonts` back on.
20
+ *
21
+ * Once the bundled fonts report `loaded === true`, this component also
22
+ * mutates `Text.defaultProps.style` to prepend `{ fontFamily: 'Inter' }`
23
+ * so every native `<Text>` in the consuming app inherits Bloom's sans
24
+ * family without callers needing to import `<Text>` from `@oxyhq/bloom`.
25
+ * The mutation is gated by a `useRef` so it runs at most once per
26
+ * FontLoader instance, and the underlying apply is idempotent — the
27
+ * Bloom default is prepended to any caller `defaultProps.style`, so
28
+ * per-call `style` overrides (which React applies after `defaultProps`)
29
+ * still take precedence.
20
30
  */
21
31
  export declare function FontLoader({ enabled, fallback, children }: FontLoaderProps): import("react/jsx-runtime").JSX.Element;
22
32
  //# sourceMappingURL=FontLoader.native.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FontLoader.native.d.ts","sourceRoot":"","sources":["../../../../src/fonts/FontLoader.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAK1E"}
1
+ {"version":3,"file":"FontLoader.native.d.ts","sourceRoot":"","sources":["../../../../src/fonts/FontLoader.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAKtC,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAyDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAY1E"}
@@ -1,15 +1,2 @@
1
- /**
2
- * Inject @font-face rules and font CSS variables onto :root.
3
- *
4
- * No-op on native and when `document` is unavailable (SSR). Idempotent —
5
- * safe to call multiple times; subsequent calls early-return after the
6
- * `<style id="bloom-fonts">` tag has been mounted.
7
- *
8
- * Follows the same shape as `applyDarkClass` / `applyColorPresetVars`: a
9
- * single file with an internal `Platform.OS` check rather than a `.web.ts` /
10
- * `.native.ts` split. Bundlers strip the unreachable web import code path
11
- * on native because the function body short-circuits before referencing the
12
- * woff2 URLs.
13
- */
14
1
  export declare function applyFontFaces(): void;
15
2
  //# sourceMappingURL=apply-font-faces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-font-faces.d.ts","sourceRoot":"","sources":["../../../../src/fonts/apply-font-faces.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAkBrC"}
1
+ {"version":3,"file":"apply-font-faces.d.ts","sourceRoot":"","sources":["../../../../src/fonts/apply-font-faces.ts"],"names":[],"mappings":"AAQA,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Inject @font-face rules and font CSS variables onto :root.
3
+ *
4
+ * Web-only. The native counterpart in `apply-font-faces.ts` is a no-op
5
+ * stub — Metro cannot parse `.woff2` imports, so the file split keeps
6
+ * those imports out of the native bundle entirely. Idempotent: safe to
7
+ * call multiple times; subsequent calls early-return after the
8
+ * `<style id="bloom-fonts">` tag has been mounted. SSR-safe via the
9
+ * `typeof document === 'undefined'` guard.
10
+ */
11
+ export declare function applyFontFaces(): void;
12
+ //# sourceMappingURL=apply-font-faces.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-font-faces.web.d.ts","sourceRoot":"","sources":["../../../../src/fonts/apply-font-faces.web.ts"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAkBrC"}
@@ -0,0 +1,7 @@
1
+ export { fontFamilies, fontCssVars } from './tokens';
2
+ export type { FontFamilyName } from './tokens';
3
+ export { applyFontFaces } from './apply-font-faces.web';
4
+ export { FONT_ASSETS } from './font-assets';
5
+ export { FontLoader } from './FontLoader';
6
+ export type { FontLoaderProps } from './FontLoader';
7
+ //# sourceMappingURL=index.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/fonts/index.web.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -46,5 +46,5 @@ export * as Tooltip from './tooltip/index.web';
46
46
  export * as Select from './select/index.web';
47
47
  export * as ContextMenu from './context-menu/index.web';
48
48
  export * as Code from './code';
49
- export * as Fonts from './fonts';
49
+ export * as Fonts from './fonts/index.web';
50
50
  //# sourceMappingURL=index.web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGhG,cAAc,oBAAoB,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,cAAc,UAAU,CAAC;AACzB,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAG3C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAGxD,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGhG,cAAc,oBAAoB,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,cAAc,UAAU,CAAC;AACzB,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAG3C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAGxD,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FontLoader.d.ts","sourceRoot":"","sources":["../../../../src/fonts/FontLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAGtC,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAOhE"}
1
+ {"version":3,"file":"FontLoader.d.ts","sourceRoot":"","sources":["../../../../src/fonts/FontLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAStC,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAOhE"}
@@ -17,6 +17,16 @@ export interface FontLoaderProps {
17
17
  * fonts get loaded. This keeps Hook order stable across renders and means
18
18
  * `<BloomThemeProvider fonts={false}>` still gets fonts pre-loaded if the
19
19
  * provider tree ever flips `fonts` back on.
20
+ *
21
+ * Once the bundled fonts report `loaded === true`, this component also
22
+ * mutates `Text.defaultProps.style` to prepend `{ fontFamily: 'Inter' }`
23
+ * so every native `<Text>` in the consuming app inherits Bloom's sans
24
+ * family without callers needing to import `<Text>` from `@oxyhq/bloom`.
25
+ * The mutation is gated by a `useRef` so it runs at most once per
26
+ * FontLoader instance, and the underlying apply is idempotent — the
27
+ * Bloom default is prepended to any caller `defaultProps.style`, so
28
+ * per-call `style` overrides (which React applies after `defaultProps`)
29
+ * still take precedence.
20
30
  */
21
31
  export declare function FontLoader({ enabled, fallback, children }: FontLoaderProps): import("react/jsx-runtime").JSX.Element;
22
32
  //# sourceMappingURL=FontLoader.native.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FontLoader.native.d.ts","sourceRoot":"","sources":["../../../../src/fonts/FontLoader.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAK1E"}
1
+ {"version":3,"file":"FontLoader.native.d.ts","sourceRoot":"","sources":["../../../../src/fonts/FontLoader.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAKtC,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAyDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAY1E"}
@@ -1,15 +1,2 @@
1
- /**
2
- * Inject @font-face rules and font CSS variables onto :root.
3
- *
4
- * No-op on native and when `document` is unavailable (SSR). Idempotent —
5
- * safe to call multiple times; subsequent calls early-return after the
6
- * `<style id="bloom-fonts">` tag has been mounted.
7
- *
8
- * Follows the same shape as `applyDarkClass` / `applyColorPresetVars`: a
9
- * single file with an internal `Platform.OS` check rather than a `.web.ts` /
10
- * `.native.ts` split. Bundlers strip the unreachable web import code path
11
- * on native because the function body short-circuits before referencing the
12
- * woff2 URLs.
13
- */
14
1
  export declare function applyFontFaces(): void;
15
2
  //# sourceMappingURL=apply-font-faces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-font-faces.d.ts","sourceRoot":"","sources":["../../../../src/fonts/apply-font-faces.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAkBrC"}
1
+ {"version":3,"file":"apply-font-faces.d.ts","sourceRoot":"","sources":["../../../../src/fonts/apply-font-faces.ts"],"names":[],"mappings":"AAQA,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Inject @font-face rules and font CSS variables onto :root.
3
+ *
4
+ * Web-only. The native counterpart in `apply-font-faces.ts` is a no-op
5
+ * stub — Metro cannot parse `.woff2` imports, so the file split keeps
6
+ * those imports out of the native bundle entirely. Idempotent: safe to
7
+ * call multiple times; subsequent calls early-return after the
8
+ * `<style id="bloom-fonts">` tag has been mounted. SSR-safe via the
9
+ * `typeof document === 'undefined'` guard.
10
+ */
11
+ export declare function applyFontFaces(): void;
12
+ //# sourceMappingURL=apply-font-faces.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-font-faces.web.d.ts","sourceRoot":"","sources":["../../../../src/fonts/apply-font-faces.web.ts"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAkBrC"}
@@ -0,0 +1,7 @@
1
+ export { fontFamilies, fontCssVars } from './tokens';
2
+ export type { FontFamilyName } from './tokens';
3
+ export { applyFontFaces } from './apply-font-faces.web';
4
+ export { FONT_ASSETS } from './font-assets';
5
+ export { FontLoader } from './FontLoader';
6
+ export type { FontLoaderProps } from './FontLoader';
7
+ //# sourceMappingURL=index.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/fonts/index.web.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -46,5 +46,5 @@ export * as Tooltip from './tooltip/index.web';
46
46
  export * as Select from './select/index.web';
47
47
  export * as ContextMenu from './context-menu/index.web';
48
48
  export * as Code from './code';
49
- export * as Fonts from './fonts';
49
+ export * as Fonts from './fonts/index.web';
50
50
  //# sourceMappingURL=index.web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGhG,cAAc,oBAAoB,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,cAAc,UAAU,CAAC;AACzB,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAG3C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAGxD,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGhG,cAAc,oBAAoB,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,cAAc,UAAU,CAAC;AACzB,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAG3C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAGxD,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -527,6 +527,11 @@
527
527
  },
528
528
  "./fonts": {
529
529
  "react-native": "./src/fonts/index.ts",
530
+ "browser": {
531
+ "types": "./lib/typescript/module/fonts/index.web.d.ts",
532
+ "import": "./lib/module/fonts/index.web.js",
533
+ "require": "./lib/commonjs/fonts/index.web.js"
534
+ },
530
535
  "import": {
531
536
  "types": "./lib/typescript/module/fonts/index.d.ts",
532
537
  "default": "./lib/module/fonts/index.js"
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Text } from 'react-native';
2
+ import { Text, type TextProps } from 'react-native';
3
3
  import { render } from '@testing-library/react-native';
4
4
 
5
5
  type UseFontsResult = readonly [boolean, Error | null];
@@ -16,9 +16,22 @@ function setUseFontsResult(result: UseFontsResult): void {
16
16
  mockUseFontsResult = result;
17
17
  }
18
18
 
19
+ type TextWithDefaults = typeof Text & {
20
+ defaultProps?: Partial<TextProps>;
21
+ };
22
+
23
+ function resetTextDefaults(): void {
24
+ (Text as TextWithDefaults).defaultProps = undefined;
25
+ }
26
+
19
27
  describe('FontLoader (native)', () => {
28
+ beforeEach(() => {
29
+ resetTextDefaults();
30
+ });
31
+
20
32
  afterEach(() => {
21
33
  setUseFontsResult([true, null]);
34
+ resetTextDefaults();
22
35
  });
23
36
 
24
37
  it('renders children when fonts are loaded and enabled', () => {
@@ -72,4 +85,62 @@ describe('FontLoader (native)', () => {
72
85
  );
73
86
  expect(getByText('content')).toBeTruthy();
74
87
  });
88
+
89
+ it('prepends Inter to Text.defaultProps.style once fonts are loaded', () => {
90
+ setUseFontsResult([true, null]);
91
+ render(
92
+ <FontLoader enabled>
93
+ <Text>content</Text>
94
+ </FontLoader>,
95
+ );
96
+ const defaults = (Text as TextWithDefaults).defaultProps;
97
+ expect(defaults?.style).toEqual({ fontFamily: 'Inter' });
98
+ });
99
+
100
+ it('does not touch Text.defaultProps until fonts are loaded', () => {
101
+ setUseFontsResult([false, null]);
102
+ render(
103
+ <FontLoader enabled>
104
+ <Text>content</Text>
105
+ </FontLoader>,
106
+ );
107
+ expect((Text as TextWithDefaults).defaultProps?.style).toBeUndefined();
108
+ });
109
+
110
+ it('preserves a pre-existing default style by appending it after Inter', () => {
111
+ const preExisting = { color: '#abcdef' } as const;
112
+ (Text as TextWithDefaults).defaultProps = { style: preExisting };
113
+ setUseFontsResult([true, null]);
114
+ render(
115
+ <FontLoader enabled>
116
+ <Text>content</Text>
117
+ </FontLoader>,
118
+ );
119
+ const style = (Text as TextWithDefaults).defaultProps?.style;
120
+ expect(Array.isArray(style)).toBe(true);
121
+ if (Array.isArray(style)) {
122
+ expect(style[0]).toEqual({ fontFamily: 'Inter' });
123
+ expect(style[1]).toBe(preExisting);
124
+ }
125
+ });
126
+
127
+ it('is idempotent across multiple FontLoader mounts', () => {
128
+ setUseFontsResult([true, null]);
129
+ const first = render(
130
+ <FontLoader enabled>
131
+ <Text>first</Text>
132
+ </FontLoader>,
133
+ );
134
+ first.unmount();
135
+ const second = render(
136
+ <FontLoader enabled>
137
+ <Text>second</Text>
138
+ </FontLoader>,
139
+ );
140
+ second.unmount();
141
+ const style = (Text as TextWithDefaults).defaultProps?.style;
142
+ // Should still be the single, plain Inter object — not nested arrays
143
+ // or duplicated entries.
144
+ expect(style).toEqual({ fontFamily: 'Inter' });
145
+ });
75
146
  });
@@ -2,20 +2,18 @@
2
2
  * @jest-environment jsdom
3
3
  */
4
4
 
5
- import { Platform } from 'react-native';
6
- import { applyFontFaces } from '../fonts/apply-font-faces';
7
-
8
- describe('applyFontFaces', () => {
9
- const originalOS = Platform.OS;
10
-
5
+ // Import the web variant directly. The default `apply-font-faces.ts` is a
6
+ // no-op stub that exists only so Metro never sees a module-level `.woff2`
7
+ // import on native — the real font-face injection lives in
8
+ // `apply-font-faces.web.ts`. Web bundlers select that file via extension
9
+ // resolution; here we reach for it explicitly so the test exercises the
10
+ // actual implementation under jsdom.
11
+ import { applyFontFaces } from '../fonts/apply-font-faces.web';
12
+
13
+ describe('applyFontFaces (web)', () => {
11
14
  beforeEach(() => {
12
15
  document.head.innerHTML = '';
13
16
  document.body.innerHTML = '';
14
- Platform.OS = 'web';
15
- });
16
-
17
- afterAll(() => {
18
- Platform.OS = originalOS;
19
17
  });
20
18
 
21
19
  it('injects a <style id="bloom-fonts"> element on first call', () => {
@@ -1,4 +1,5 @@
1
- import React from 'react';
1
+ import React, { useRef } from 'react';
2
+ import { Text, type TextProps, type TextStyle, type StyleProp } from 'react-native';
2
3
  import { useFonts } from 'expo-font';
3
4
  import { FONT_ASSETS } from './font-assets';
4
5
 
@@ -14,6 +15,61 @@ export interface FontLoaderProps {
14
15
  children: React.ReactNode;
15
16
  }
16
17
 
18
+ /**
19
+ * React Native's `Text` exposes a static `defaultProps` for app-wide prop
20
+ * defaults. The public type definition omits it (it's an implementation
21
+ * detail, not part of the stable API), so we describe it locally rather
22
+ * than casting to `any`.
23
+ */
24
+ type TextWithDefaults = typeof Text & {
25
+ defaultProps?: Partial<TextProps>;
26
+ };
27
+
28
+ /**
29
+ * Mutates `Text.defaultProps.style` so every native `<Text>` in the consuming
30
+ * app inherits Bloom's sans font (Inter). The Bloom family name is prepended
31
+ * to any existing default style so caller-provided `style` (which React
32
+ * applies AFTER `defaultProps.style`) still wins for overrides.
33
+ *
34
+ * Idempotent: re-invoking it after the first apply is a no-op because the
35
+ * first style entry will already be the Bloom default we added.
36
+ */
37
+ function applyDefaultTextFont(): void {
38
+ const TextWithDefaults = Text as TextWithDefaults;
39
+ const existing = TextWithDefaults.defaultProps?.style;
40
+ const bloomDefault: TextStyle = { fontFamily: 'Inter' };
41
+
42
+ // Detect whether we've already prepended ourselves. `existing` may be an
43
+ // array (multiple style fragments), a single object, a registered style
44
+ // number, or undefined. Only the array/object cases need inspection — if
45
+ // it's a number, we can't read the contents so we just prepend.
46
+ if (Array.isArray(existing)) {
47
+ const first = existing[0];
48
+ if (
49
+ first &&
50
+ typeof first === 'object' &&
51
+ !Array.isArray(first) &&
52
+ (first as TextStyle).fontFamily === bloomDefault.fontFamily
53
+ ) {
54
+ return;
55
+ }
56
+ } else if (
57
+ existing &&
58
+ typeof existing === 'object' &&
59
+ (existing as TextStyle).fontFamily === bloomDefault.fontFamily
60
+ ) {
61
+ return;
62
+ }
63
+
64
+ const nextStyle: StyleProp<TextStyle> =
65
+ existing == null ? bloomDefault : [bloomDefault, existing];
66
+
67
+ TextWithDefaults.defaultProps = {
68
+ ...TextWithDefaults.defaultProps,
69
+ style: nextStyle,
70
+ };
71
+ }
72
+
17
73
  /**
18
74
  * Native font loader. Calls `expo-font`'s `useFonts` with the Bloom font
19
75
  * asset map and gates `children` on the load result. The hook is invoked
@@ -21,9 +77,26 @@ export interface FontLoaderProps {
21
77
  * fonts get loaded. This keeps Hook order stable across renders and means
22
78
  * `<BloomThemeProvider fonts={false}>` still gets fonts pre-loaded if the
23
79
  * provider tree ever flips `fonts` back on.
80
+ *
81
+ * Once the bundled fonts report `loaded === true`, this component also
82
+ * mutates `Text.defaultProps.style` to prepend `{ fontFamily: 'Inter' }`
83
+ * so every native `<Text>` in the consuming app inherits Bloom's sans
84
+ * family without callers needing to import `<Text>` from `@oxyhq/bloom`.
85
+ * The mutation is gated by a `useRef` so it runs at most once per
86
+ * FontLoader instance, and the underlying apply is idempotent — the
87
+ * Bloom default is prepended to any caller `defaultProps.style`, so
88
+ * per-call `style` overrides (which React applies after `defaultProps`)
89
+ * still take precedence.
24
90
  */
25
91
  export function FontLoader({ enabled, fallback, children }: FontLoaderProps) {
26
92
  const [loaded] = useFonts(FONT_ASSETS);
93
+ const defaultsApplied = useRef(false);
94
+
95
+ if (loaded && !defaultsApplied.current) {
96
+ defaultsApplied.current = true;
97
+ applyDefaultTextFont();
98
+ }
99
+
27
100
  if (!enabled) return <>{children}</>;
28
101
  if (!loaded) return <>{fallback ?? null}</>;
29
102
  return <>{children}</>;
@@ -1,5 +1,11 @@
1
1
  import React, { useRef } from 'react';
2
- import { applyFontFaces } from './apply-font-faces';
2
+ // Reach for the web variant explicitly. The default `./apply-font-faces`
3
+ // is a no-op stub that exists so Metro never sees the module-level
4
+ // `.woff2` imports on native (Metro's default `assetExts` does not include
5
+ // `.woff2`). This file (`FontLoader.tsx`) is only picked up by web
6
+ // bundlers — Metro selects `FontLoader.native.tsx` on iOS/Android — so it
7
+ // is safe to take a direct dependency on the web implementation here.
8
+ import { applyFontFaces } from './apply-font-faces.web';
3
9
 
4
10
  export interface FontLoaderProps {
5
11
  /**
@@ -1,41 +1,11 @@
1
- import { Platform } from 'react-native';
2
- import blomusReg from './assets/BlomusModernus-Regular.woff2';
3
- import blomusBold from './assets/BlomusModernus-Bold.woff2';
4
- import interVar from './assets/InterVariable.woff2';
5
- import geistMono from './assets/GeistMono-Variable.woff2';
6
- import { fontFamilies } from './tokens';
7
-
8
- const STYLE_ID = 'bloom-fonts';
9
-
10
- /**
11
- * Inject @font-face rules and font CSS variables onto :root.
12
- *
13
- * No-op on native and when `document` is unavailable (SSR). Idempotent —
14
- * safe to call multiple times; subsequent calls early-return after the
15
- * `<style id="bloom-fonts">` tag has been mounted.
16
- *
17
- * Follows the same shape as `applyDarkClass` / `applyColorPresetVars`: a
18
- * single file with an internal `Platform.OS` check rather than a `.web.ts` /
19
- * `.native.ts` split. Bundlers strip the unreachable web import code path
20
- * on native because the function body short-circuits before referencing the
21
- * woff2 URLs.
22
- */
1
+ // No-op on native. The web variant lives in apply-font-faces.web.ts and
2
+ // is selected by bundlers via the package.json conditions. RN consumers
3
+ // never need font-face injection — useFonts handles loading on native.
4
+ //
5
+ // This file MUST have zero `.woff2` imports. Metro parses module-level
6
+ // imports at bundle time and would otherwise fail to resolve the `.woff2`
7
+ // assets (not in Metro's default `assetExts`). See
8
+ // `apply-font-faces.web.ts` for the real implementation.
23
9
  export function applyFontFaces(): void {
24
- if (Platform.OS !== 'web' || typeof document === 'undefined') return;
25
- if (document.getElementById(STYLE_ID)) return;
26
-
27
- const style = document.createElement('style');
28
- style.id = STYLE_ID;
29
- style.textContent = `
30
- @font-face { font-family: 'BlomusModernus'; src: url(${blomusReg}) format('woff2'); font-weight: 400; font-style: normal; font-display: swap; }
31
- @font-face { font-family: 'BlomusModernus'; src: url(${blomusBold}) format('woff2'); font-weight: 700; font-style: normal; font-display: swap; }
32
- @font-face { font-family: 'Inter'; src: url(${interVar}) format('woff2-variations'); font-weight: 100 900; font-style: normal; font-display: swap; }
33
- @font-face { font-family: 'Geist Mono'; src: url(${geistMono}) format('woff2-variations'); font-weight: 100 900; font-style: normal; font-display: swap; }
34
- :root {
35
- --bloom-font-display: ${fontFamilies.display};
36
- --bloom-font-sans: ${fontFamilies.sans};
37
- --bloom-font-mono: ${fontFamilies.mono};
38
- }
39
- `;
40
- document.head.appendChild(style);
10
+ // intentionally empty
41
11
  }
@@ -0,0 +1,38 @@
1
+ /// <reference path="../assets.d.ts" />
2
+ import blomusReg from './assets/BlomusModernus-Regular.woff2';
3
+ import blomusBold from './assets/BlomusModernus-Bold.woff2';
4
+ import interVar from './assets/InterVariable.woff2';
5
+ import geistMono from './assets/GeistMono-Variable.woff2';
6
+ import { fontFamilies } from './tokens';
7
+
8
+ const STYLE_ID = 'bloom-fonts';
9
+
10
+ /**
11
+ * Inject @font-face rules and font CSS variables onto :root.
12
+ *
13
+ * Web-only. The native counterpart in `apply-font-faces.ts` is a no-op
14
+ * stub — Metro cannot parse `.woff2` imports, so the file split keeps
15
+ * those imports out of the native bundle entirely. Idempotent: safe to
16
+ * call multiple times; subsequent calls early-return after the
17
+ * `<style id="bloom-fonts">` tag has been mounted. SSR-safe via the
18
+ * `typeof document === 'undefined'` guard.
19
+ */
20
+ export function applyFontFaces(): void {
21
+ if (typeof document === 'undefined') return;
22
+ if (document.getElementById(STYLE_ID)) return;
23
+
24
+ const style = document.createElement('style');
25
+ style.id = STYLE_ID;
26
+ style.textContent = `
27
+ @font-face { font-family: 'BlomusModernus'; src: url(${blomusReg}) format('woff2'); font-weight: 400; font-style: normal; font-display: swap; }
28
+ @font-face { font-family: 'BlomusModernus'; src: url(${blomusBold}) format('woff2'); font-weight: 700; font-style: normal; font-display: swap; }
29
+ @font-face { font-family: 'Inter'; src: url(${interVar}) format('woff2-variations'); font-weight: 100 900; font-style: normal; font-display: swap; }
30
+ @font-face { font-family: 'Geist Mono'; src: url(${geistMono}) format('woff2-variations'); font-weight: 100 900; font-style: normal; font-display: swap; }
31
+ :root {
32
+ --bloom-font-display: ${fontFamilies.display};
33
+ --bloom-font-sans: ${fontFamilies.sans};
34
+ --bloom-font-mono: ${fontFamilies.mono};
35
+ }
36
+ `;
37
+ document.head.appendChild(style);
38
+ }
@@ -5,8 +5,8 @@
5
5
  // covers all weights at runtime. `@fontsource(-variable)?/*` packages only
6
6
  // publish .woff2 for their variable axes — modern react-native font loading
7
7
  // requires .ttf, so we use the upstream variable TTFs instead. On web,
8
- // `apply-font-faces.ts` references the .woff2 variants directly and this file
9
- // is never imported.
8
+ // `apply-font-faces.web.ts` references the .woff2 variants directly and this
9
+ // file is never imported.
10
10
 
11
11
  export const FONT_ASSETS = {
12
12
  BlomusModernus: require('./assets/BlomusModernus-Regular.ttf'),
@@ -0,0 +1,17 @@
1
+ // Web variant of the `./fonts` barrel.
2
+ //
3
+ // The default barrel (`./index.ts`) re-exports `applyFontFaces` from
4
+ // `./apply-font-faces`, which on native resolves to a no-op stub — Metro
5
+ // cannot parse `.woff2` module-level imports. The web fork explicitly
6
+ // reaches for `./apply-font-faces.web`, which performs the real `@font-face`
7
+ // injection.
8
+ //
9
+ // Web bundlers select this file via the `"browser"` condition in
10
+ // `package.json`'s `exports['./fonts']`; native bundlers fall through to
11
+ // `./index.ts` via the `"react-native"` condition.
12
+ export { fontFamilies, fontCssVars } from './tokens';
13
+ export type { FontFamilyName } from './tokens';
14
+ export { applyFontFaces } from './apply-font-faces.web';
15
+ export { FONT_ASSETS } from './font-assets';
16
+ export { FontLoader } from './FontLoader';
17
+ export type { FontLoaderProps } from './FontLoader';