fontdue-js 2.19.2 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +11 -10
- package/dist/__generated__/CartItemProduct_product.graphql.d.ts +1 -7
- package/dist/__generated__/CartItemProduct_product.graphql.js +11 -36
- package/dist/__generated__/CartOrderCompleteOrderMutation.graphql.d.ts +1 -1
- package/dist/__generated__/CartOrderCompleteOrderMutation.graphql.js +65 -23
- package/dist/__generated__/CartOrderRemoveDiscountMutation.graphql.d.ts +1 -1
- package/dist/__generated__/CartOrderRemoveDiscountMutation.graphql.js +65 -23
- package/dist/__generated__/CartOrderUpdateMutation.graphql.d.ts +1 -1
- package/dist/__generated__/CartOrderUpdateMutation.graphql.js +65 -23
- package/dist/__generated__/CartQuery.graphql.d.ts +1 -1
- package/dist/__generated__/CartQuery.graphql.js +119 -87
- package/dist/__generated__/CartStateUpdateMutation.graphql.d.ts +1 -1
- package/dist/__generated__/CartStateUpdateMutation.graphql.js +65 -23
- package/dist/__generated__/CharacterViewerIDQuery.graphql.d.ts +1 -1
- package/dist/__generated__/CharacterViewerIDQuery.graphql.js +40 -26
- package/dist/__generated__/CharacterViewerSlugQuery.graphql.d.ts +1 -1
- package/dist/__generated__/CharacterViewerSlugQuery.graphql.js +40 -26
- package/dist/__generated__/CharacterViewerStyleRefetchQuery.graphql.d.ts +1 -1
- package/dist/__generated__/CharacterViewerStyleRefetchQuery.graphql.js +62 -41
- package/dist/__generated__/CharacterViewer_collection.graphql.d.ts +1 -3
- package/dist/__generated__/CharacterViewer_collection.graphql.js +6 -13
- package/dist/__generated__/CharacterViewer_family.graphql.d.ts +1 -2
- package/dist/__generated__/CharacterViewer_family.graphql.js +2 -8
- package/dist/__generated__/CharacterViewer_style.graphql.d.ts +2 -1
- package/dist/__generated__/CharacterViewer_style.graphql.js +6 -2
- package/dist/__generated__/CheckoutUpdateCustomerMutation.graphql.d.ts +1 -1
- package/dist/__generated__/CheckoutUpdateCustomerMutation.graphql.js +65 -23
- package/dist/__generated__/CheckoutUpdateOrderMutation.graphql.d.ts +1 -1
- package/dist/__generated__/CheckoutUpdateOrderMutation.graphql.js +65 -23
- package/dist/__generated__/CollectionAa_Query.graphql.d.ts +1 -1
- package/dist/__generated__/CollectionAa_Query.graphql.js +57 -3
- package/dist/__generated__/Family_node.graphql.d.ts +1 -2
- package/dist/__generated__/Family_node.graphql.js +2 -8
- package/dist/__generated__/FontFamiliesQuery.graphql.d.ts +1 -1
- package/dist/__generated__/FontFamiliesQuery.graphql.js +80 -31
- package/dist/__generated__/FontStyle_fontStyle.graphql.d.ts +2 -3
- package/dist/__generated__/FontStyle_fontStyle.graphql.js +4 -12
- package/dist/__generated__/PrecartAddToCartMutation.graphql.d.ts +1 -1
- package/dist/__generated__/PrecartAddToCartMutation.graphql.js +71 -29
- package/dist/__generated__/ServerConfigProviderQuery.graphql.d.ts +24 -0
- package/dist/__generated__/ServerConfigProviderQuery.graphql.js +108 -0
- package/dist/__generated__/StoreModalCartQuery.graphql.d.ts +1 -1
- package/dist/__generated__/StoreModalCartQuery.graphql.js +108 -76
- package/dist/__generated__/StoreModalContainerQuery.graphql.d.ts +4 -7
- package/dist/__generated__/StoreModalContainerQuery.graphql.js +58 -25
- package/dist/__generated__/StoreModalFamily_collection.graphql.d.ts +1 -2
- package/dist/__generated__/StoreModalFamily_collection.graphql.js +2 -8
- package/dist/__generated__/StoreModalIndexItem_fontCollection.graphql.d.ts +1 -4
- package/dist/__generated__/StoreModalIndexItem_fontCollection.graphql.js +2 -17
- package/dist/__generated__/StoreModalIndexQuery.graphql.d.ts +1 -1
- package/dist/__generated__/StoreModalIndexQuery.graphql.js +48 -9
- package/dist/__generated__/StoreModalProductQuery.graphql.d.ts +1 -1
- package/dist/__generated__/StoreModalProductQuery.graphql.js +85 -41
- package/dist/__generated__/StoreModalProductRefetchQuery.graphql.d.ts +1 -1
- package/dist/__generated__/StoreModalProductRefetchQuery.graphql.js +78 -34
- package/dist/__generated__/TestFontsFormUpdateCustomerMutation.graphql.d.ts +1 -1
- package/dist/__generated__/TestFontsFormUpdateCustomerMutation.graphql.js +65 -23
- package/dist/__generated__/TypeTesterStandaloneChangedStylesQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTesterStandaloneChangedStylesQuery.graphql.js +55 -7
- package/dist/__generated__/TypeTesterStandaloneQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTesterStandaloneQuery.graphql.js +56 -8
- package/dist/__generated__/TypeTester_fontStyle.graphql.d.ts +1 -4
- package/dist/__generated__/TypeTester_fontStyle.graphql.js +2 -17
- package/dist/__generated__/TypeTestersChangedStylesQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTestersChangedStylesQuery.graphql.js +55 -7
- package/dist/__generated__/TypeTestersIDQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTestersIDQuery.graphql.js +55 -7
- package/dist/__generated__/TypeTestersRefetchQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTestersRefetchQuery.graphql.js +55 -7
- package/dist/__generated__/TypeTestersSlugQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTestersSlugQuery.graphql.js +55 -7
- package/dist/__generated__/useFontStyle_fontStyle.graphql.d.ts +28 -0
- package/dist/__generated__/useFontStyle_fontStyle.graphql.js +94 -0
- package/dist/__tests__/collectionBundleSelection.test.js +0 -1
- package/dist/components/Cart/CartItem/CartItemProduct.js +3 -9
- package/dist/components/CharacterViewer/index.js +5 -11
- package/dist/components/ConfigContext.d.ts +13 -0
- package/dist/components/ConfigContext.js +6 -2
- package/dist/components/ConsentBanner/consent.d.ts +18 -0
- package/dist/components/ConsentBanner/consent.js +93 -0
- package/dist/components/ConsentBanner/index.d.ts +3 -0
- package/dist/components/ConsentBanner/index.js +84 -0
- package/dist/components/Family/index.js +2 -5
- package/dist/components/FontStyle/index.js +2 -8
- package/dist/components/FontdueProvider/FontdueProviderClientComponent.js +14 -1
- package/dist/components/FontdueProvider/index.js +1 -2
- package/dist/components/FontdueProvider/index.server.js +1 -2
- package/dist/components/ServerConfigProvider/index.d.ts +8 -0
- package/dist/components/ServerConfigProvider/index.js +41 -0
- package/dist/components/StoreModal/StoreModalContainer.js +15 -17
- package/dist/components/StoreModal/StoreModalFamily.js +1 -5
- package/dist/components/StoreModal/StoreModalIndexItem.js +6 -11
- package/dist/components/Tracking/index.d.ts +2 -0
- package/dist/components/Tracking/index.js +166 -0
- package/dist/components/TypeTester/TypeTesterSlider.js +10 -3
- package/dist/components/TypeTester/index.js +2 -5
- package/dist/components/TypeTester/useTypeTesterStyler.js +27 -85
- package/dist/components/UrlContext.d.ts +3 -0
- package/dist/components/UrlContext.js +15 -0
- package/dist/components/elements/StoreModalContainer/index.d.ts +2 -6
- package/dist/components/elements/StoreModalContainer/index.js +3 -8
- package/dist/components/elements/StoreModalFamily/index.d.ts +0 -1
- package/dist/components/elements/StoreModalFamily/index.js +1 -2
- package/dist/components/useConsent.d.ts +9 -0
- package/dist/components/useConsent.js +26 -0
- package/dist/components/useFont.d.ts +29 -0
- package/dist/components/useFont.js +77 -0
- package/dist/components/useFontLoaded.d.ts +24 -0
- package/dist/components/useFontLoaded.js +60 -0
- package/dist/components/useFontStyle.d.ts +3 -4
- package/dist/components/useFontStyle.js +24 -16
- package/dist/deepMerge.d.ts +4 -0
- package/dist/deepMerge.js +24 -0
- package/dist/fontLoader.d.ts +13 -0
- package/dist/fontLoader.js +55 -0
- package/dist/fontdue.css +65 -0
- package/dist/hooks/useAutofit.d.ts +20 -0
- package/dist/hooks/useAutofit.js +114 -0
- package/dist/react-ranger.js +5 -1
- package/dist/reducer.d.ts +0 -4
- package/dist/reducer.js +0 -11
- package/package.json +5 -2
|
@@ -11,21 +11,20 @@ var _reactRelay = require("react-relay");
|
|
|
11
11
|
var _StoreModalIndexItem = _interopRequireDefault(require("../elements/StoreModalIndexItem"));
|
|
12
12
|
var _ConfigContext = _interopRequireDefault(require("../ConfigContext"));
|
|
13
13
|
var _FontStyle = _interopRequireDefault(require("../FontStyle"));
|
|
14
|
-
var _Stylesheet = _interopRequireDefault(require("../Stylesheet"));
|
|
15
14
|
var _useTotalStyles = _interopRequireDefault(require("../useTotalStyles"));
|
|
16
15
|
var _utils = require("../../utils");
|
|
17
16
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
17
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
19
|
const StoreModalIndexItem = _ref => {
|
|
21
|
-
var _data$featureStyle
|
|
20
|
+
var _data$featureStyle;
|
|
22
21
|
let {
|
|
23
22
|
collection
|
|
24
23
|
} = _ref;
|
|
25
24
|
const {
|
|
26
25
|
storeModal: config
|
|
27
26
|
} = (0, _react.useContext)(_ConfigContext.default);
|
|
28
|
-
const data = (0, _reactRelay.useFragment)((_StoreModalIndexItem_fontCollection2.default.hash && _StoreModalIndexItem_fontCollection2.default.hash !== "
|
|
27
|
+
const data = (0, _reactRelay.useFragment)((_StoreModalIndexItem_fontCollection2.default.hash && _StoreModalIndexItem_fontCollection2.default.hash !== "8a990fad8dc50c9f00b391902e9bc482" && console.error("The definition of 'StoreModalIndexItem_fontCollection' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalIndexItem_fontCollection2.default), collection);
|
|
29
28
|
const dispatch = (0, _reactRedux.useDispatch)();
|
|
30
29
|
const handleClickProduct = productId => {
|
|
31
30
|
dispatch({
|
|
@@ -53,16 +52,12 @@ const StoreModalIndexItem = _ref => {
|
|
|
53
52
|
key: data.id,
|
|
54
53
|
onClick: handleClickProduct.bind(null, data.id)
|
|
55
54
|
}, {
|
|
56
|
-
aa: config.indexLayout === 'styled-aa' && (data.featureStyle ? /*#__PURE__*/_react.default.createElement(
|
|
57
|
-
href: data.featureStyle.family.cssUrl
|
|
58
|
-
}), /*#__PURE__*/_react.default.createElement(_FontStyle.default, {
|
|
55
|
+
aa: config.indexLayout === 'styled-aa' && (data.featureStyle ? /*#__PURE__*/_react.default.createElement(_FontStyle.default, {
|
|
59
56
|
fontStyle: data.featureStyle
|
|
60
|
-
}, (0, _utils.getFeatureGlyphs)((_data$featureStyle = data.featureStyle) === null || _data$featureStyle === void 0 ? void 0 : _data$featureStyle.supportedLanguages))
|
|
61
|
-
name: config.indexLayout === 'styled-font-names' ? data.featureStyle && /*#__PURE__*/_react.default.createElement(
|
|
62
|
-
href: data.featureStyle.family.cssUrl
|
|
63
|
-
}), /*#__PURE__*/_react.default.createElement(_FontStyle.default, {
|
|
57
|
+
}, (0, _utils.getFeatureGlyphs)((_data$featureStyle = data.featureStyle) === null || _data$featureStyle === void 0 ? void 0 : _data$featureStyle.supportedLanguages)) : null),
|
|
58
|
+
name: config.indexLayout === 'styled-font-names' ? data.featureStyle && /*#__PURE__*/_react.default.createElement(_FontStyle.default, {
|
|
64
59
|
fontStyle: data.featureStyle
|
|
65
|
-
}, data.name)
|
|
60
|
+
}, data.name) : data.name,
|
|
66
61
|
label: label.join(', ')
|
|
67
62
|
});
|
|
68
63
|
};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _ConfigContext = _interopRequireDefault(require("../ConfigContext"));
|
|
10
|
+
var _UrlContext = require("../UrlContext");
|
|
11
|
+
var _consent = require("../ConsentBanner/consent");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
function getCampaignDataFromUrl() {
|
|
14
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
15
|
+
const campaign = {};
|
|
16
|
+
const properties = {};
|
|
17
|
+
let hasCampaign = false;
|
|
18
|
+
let hasProperties = false;
|
|
19
|
+
const utmMapping = {
|
|
20
|
+
utm_source: 'source',
|
|
21
|
+
utm_medium: 'medium',
|
|
22
|
+
utm_campaign: 'name',
|
|
23
|
+
utm_term: 'term',
|
|
24
|
+
utm_content: 'content'
|
|
25
|
+
};
|
|
26
|
+
for (const [urlParam, campaignKey] of Object.entries(utmMapping)) {
|
|
27
|
+
const value = urlParams.get(urlParam);
|
|
28
|
+
if (value) {
|
|
29
|
+
campaign[campaignKey] = value;
|
|
30
|
+
hasCampaign = true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const clickIds = ['gclid', 'fbclid'];
|
|
34
|
+
for (const param of clickIds) {
|
|
35
|
+
const value = urlParams.get(param);
|
|
36
|
+
if (value) {
|
|
37
|
+
properties[param] = value;
|
|
38
|
+
hasProperties = true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
campaign: hasCampaign ? campaign : null,
|
|
43
|
+
properties: hasProperties ? properties : null
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
async function sendPageView(baseUrl, anonymousId) {
|
|
47
|
+
try {
|
|
48
|
+
const {
|
|
49
|
+
campaign,
|
|
50
|
+
properties: clickIdProperties
|
|
51
|
+
} = getCampaignDataFromUrl();
|
|
52
|
+
const properties = {
|
|
53
|
+
url: window.location.href,
|
|
54
|
+
path: window.location.pathname,
|
|
55
|
+
referrer: document.referrer,
|
|
56
|
+
title: document.title,
|
|
57
|
+
search: window.location.search,
|
|
58
|
+
...clickIdProperties
|
|
59
|
+
};
|
|
60
|
+
const context = {
|
|
61
|
+
userAgent: navigator.userAgent
|
|
62
|
+
};
|
|
63
|
+
if (campaign) {
|
|
64
|
+
context.campaign = campaign;
|
|
65
|
+
}
|
|
66
|
+
const body = {
|
|
67
|
+
properties,
|
|
68
|
+
context
|
|
69
|
+
};
|
|
70
|
+
if (anonymousId) {
|
|
71
|
+
body.anonymous_id = anonymousId;
|
|
72
|
+
}
|
|
73
|
+
const response = await fetch(`${baseUrl}/api/track/page`, {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
headers: {
|
|
76
|
+
'Content-Type': 'application/json'
|
|
77
|
+
},
|
|
78
|
+
credentials: 'include',
|
|
79
|
+
body: JSON.stringify(body)
|
|
80
|
+
});
|
|
81
|
+
const data = await response.json();
|
|
82
|
+
return data.anonymous_id || null;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.debug('Tracking error:', error);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const Tracking = () => {
|
|
89
|
+
const config = (0, _react.useContext)(_ConfigContext.default);
|
|
90
|
+
const url = (0, _UrlContext.useFontdueUrl)();
|
|
91
|
+
(0, _react.useEffect)(() => {
|
|
92
|
+
var _config$tracking$segm, _config$tracking$segm2;
|
|
93
|
+
if (!config.tracking.enabled) return;
|
|
94
|
+
|
|
95
|
+
// Generate client-side anonymous ID for cookieless tracking when consent is required
|
|
96
|
+
const clientAnonymousId = config.tracking.consentRequired ? crypto.randomUUID() : undefined;
|
|
97
|
+
if (clientAnonymousId) {
|
|
98
|
+
(0, _consent.setClientAnonymousId)(clientAnonymousId);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Only send the client ID when in cookieless mode (consent required but not yet granted)
|
|
102
|
+
const analyticsConsent = (0, _consent.hasConsent)('analytics');
|
|
103
|
+
const effectiveAnonymousId = clientAnonymousId && config.tracking.consentRequired && !analyticsConsent ? clientAnonymousId : undefined;
|
|
104
|
+
|
|
105
|
+
// Send initial page view
|
|
106
|
+
const pageViewPromise = sendPageView(url, effectiveAnonymousId);
|
|
107
|
+
|
|
108
|
+
// Segment SDK for device-mode integrations (e.g. Google Tag Manager)
|
|
109
|
+
// The analytics factory is provided by the entry point — it calls AnalyticsBrowser.load()
|
|
110
|
+
// when invoked. We defer calling it until after consent when consentRequired is true.
|
|
111
|
+
const loadAnalytics = (_config$tracking$segm = config.tracking.segment) === null || _config$tracking$segm === void 0 ? void 0 : _config$tracking$segm.analytics;
|
|
112
|
+
const integrations = ((_config$tracking$segm2 = config.tracking.segment) === null || _config$tracking$segm2 === void 0 ? void 0 : _config$tracking$segm2.integrations) || {
|
|
113
|
+
All: false,
|
|
114
|
+
'Google Tag Manager': true
|
|
115
|
+
};
|
|
116
|
+
let consentCleanup;
|
|
117
|
+
if (loadAnalytics) {
|
|
118
|
+
const fireSegmentPage = async () => {
|
|
119
|
+
try {
|
|
120
|
+
const analytics = loadAnalytics();
|
|
121
|
+
const anonymousId = await pageViewPromise;
|
|
122
|
+
if (anonymousId) {
|
|
123
|
+
await analytics.setAnonymousId(anonymousId);
|
|
124
|
+
}
|
|
125
|
+
await analytics.page(undefined, undefined, undefined, {
|
|
126
|
+
integrations
|
|
127
|
+
});
|
|
128
|
+
} catch (error) {
|
|
129
|
+
console.debug('Segment SDK error:', error);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
if (config.tracking.consentRequired) {
|
|
133
|
+
consentCleanup = (0, _consent.onConsent)('analytics', fireSegmentPage);
|
|
134
|
+
} else {
|
|
135
|
+
fireSegmentPage();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Track client-side route changes
|
|
140
|
+
const originalPushState = history.pushState.bind(history);
|
|
141
|
+
const originalReplaceState = history.replaceState.bind(history);
|
|
142
|
+
const handleRouteChange = () => {
|
|
143
|
+
// Defer slightly to let document.title update
|
|
144
|
+
setTimeout(() => sendPageView(url), 0);
|
|
145
|
+
};
|
|
146
|
+
history.pushState = function () {
|
|
147
|
+
originalPushState(...arguments);
|
|
148
|
+
handleRouteChange();
|
|
149
|
+
};
|
|
150
|
+
history.replaceState = function () {
|
|
151
|
+
originalReplaceState(...arguments);
|
|
152
|
+
handleRouteChange();
|
|
153
|
+
};
|
|
154
|
+
window.addEventListener('popstate', handleRouteChange);
|
|
155
|
+
return () => {
|
|
156
|
+
var _consentCleanup;
|
|
157
|
+
history.pushState = originalPushState;
|
|
158
|
+
history.replaceState = originalReplaceState;
|
|
159
|
+
window.removeEventListener('popstate', handleRouteChange);
|
|
160
|
+
(_consentCleanup = consentCleanup) === null || _consentCleanup === void 0 ? void 0 : _consentCleanup();
|
|
161
|
+
};
|
|
162
|
+
}, []);
|
|
163
|
+
return null;
|
|
164
|
+
};
|
|
165
|
+
var _default = Tracking;
|
|
166
|
+
exports.default = _default;
|
|
@@ -8,6 +8,7 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
8
8
|
var _reactRanger = require("../../react-ranger");
|
|
9
9
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
10
10
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
11
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
11
12
|
const logInterpolator = {
|
|
12
13
|
getPercentageForValue: (val, min, max) => {
|
|
13
14
|
const minSign = Math.sign(min);
|
|
@@ -58,13 +59,19 @@ const TypeTesterSlider = _ref => {
|
|
|
58
59
|
});
|
|
59
60
|
return /*#__PURE__*/_react.default.createElement("div", getTrackProps({
|
|
60
61
|
className: 'type-tester__slider__track'
|
|
61
|
-
}), handles.map(_ref2 => {
|
|
62
|
+
}), handles.map((_ref2, index) => {
|
|
62
63
|
let {
|
|
63
64
|
getHandleProps
|
|
64
65
|
} = _ref2;
|
|
65
|
-
|
|
66
|
+
const {
|
|
67
|
+
key,
|
|
68
|
+
...handleProps
|
|
69
|
+
} = getHandleProps({
|
|
66
70
|
className: 'type-tester__slider__handle'
|
|
67
|
-
})
|
|
71
|
+
});
|
|
72
|
+
return /*#__PURE__*/_react.default.createElement("button", _extends({
|
|
73
|
+
key: key ?? index
|
|
74
|
+
}, handleProps));
|
|
68
75
|
}));
|
|
69
76
|
};
|
|
70
77
|
var _default = TypeTesterSlider;
|
|
@@ -9,7 +9,6 @@ var _TypeTester_fontStyle2 = _interopRequireDefault(require("../../__generated__
|
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _reactRelay = require("react-relay");
|
|
11
11
|
var _reactRedux = require("react-redux");
|
|
12
|
-
var _Stylesheet = _interopRequireDefault(require("../Stylesheet"));
|
|
13
12
|
var _ConfigContext = _interopRequireDefault(require("../ConfigContext"));
|
|
14
13
|
var _FontStyle = _interopRequireDefault(require("../FontStyle"));
|
|
15
14
|
var _SKUPrice = _interopRequireDefault(require("../SKUPrice"));
|
|
@@ -40,7 +39,7 @@ const TypeTester = _ref => {
|
|
|
40
39
|
onStyleSelect,
|
|
41
40
|
isLoading
|
|
42
41
|
} = _ref;
|
|
43
|
-
const fontStyle = (0, _reactRelay.useFragment)((_TypeTester_fontStyle2.default.hash && _TypeTester_fontStyle2.default.hash !== "
|
|
42
|
+
const fontStyle = (0, _reactRelay.useFragment)((_TypeTester_fontStyle2.default.hash && _TypeTester_fontStyle2.default.hash !== "bf89a32c8a0661f2102bbcf8c6bd1aa7" && console.error("The definition of 'TypeTester_fontStyle' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTester_fontStyle2.default), fontStyleKey);
|
|
44
43
|
const viewer = (0, _reactRelay.useFragment)((_TypeTester_viewer2.default.hash && _TypeTester_viewer2.default.hash !== "26c2b3145462407675ab9b202b0d1b4c" && console.error("The definition of 'TypeTester_viewer' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTester_viewer2.default), viewerKey);
|
|
45
44
|
const contentRef = (0, _react.useRef)(null);
|
|
46
45
|
const ref = (0, _react.useRef)(null);
|
|
@@ -64,9 +63,7 @@ const TypeTester = _ref => {
|
|
|
64
63
|
(_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 ? void 0 : _contentRef$current.focus();
|
|
65
64
|
};
|
|
66
65
|
if (!fontStyle) return null;
|
|
67
|
-
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null,
|
|
68
|
-
href: fontStyle.family.cssUrl
|
|
69
|
-
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
66
|
+
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
70
67
|
className: "type-tester select-button-hover-parent",
|
|
71
68
|
ref: ref,
|
|
72
69
|
"data-type-tester-id": id,
|
|
@@ -5,26 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
const createClone = styles => {
|
|
11
|
-
const clone = document.createElement('div');
|
|
12
|
-
clone.style.display = 'inline-block';
|
|
13
|
-
clone.style.whiteSpace = 'pre';
|
|
14
|
-
clone.style.position = 'absolute';
|
|
15
|
-
clone.style.top = '0';
|
|
16
|
-
clone.style.width = '0';
|
|
17
|
-
clone.style.overflow = 'scroll';
|
|
18
|
-
clone.style.visibility = 'hidden';
|
|
19
|
-
clone.style.fontFamily = `${styles.fontFamily}`;
|
|
20
|
-
clone.style.fontWeight = `${styles.fontWeight}`;
|
|
21
|
-
clone.style.fontStyle = `${styles.fontStyle}`;
|
|
22
|
-
clone.style.wordWrap = 'normal';
|
|
23
|
-
clone.style.letterSpacing = `${styles.letterSpacing}`;
|
|
24
|
-
clone.style.fontVariationSettings = styles.fontVariationSettings;
|
|
25
|
-
clone.style.fontFeatureSettings = styles.fontFeatureSettings;
|
|
26
|
-
return clone;
|
|
27
|
-
};
|
|
8
|
+
var _useAutofit = _interopRequireDefault(require("../../hooks/useAutofit"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
28
10
|
const useTypeTesterStyler = _ref => {
|
|
29
11
|
let {
|
|
30
12
|
size,
|
|
@@ -45,76 +27,36 @@ const useTypeTesterStyler = _ref => {
|
|
|
45
27
|
variableSettings,
|
|
46
28
|
columns
|
|
47
29
|
} = _ref;
|
|
48
|
-
const ref = (0, _react.useRef)(null);
|
|
49
30
|
const fontVariationSettings = variableSettings ? Object.keys(variableSettings).map(axis => `'${axis}' ${variableSettings[axis]}`).join(',') : undefined;
|
|
50
31
|
const fontFeatureSettings = features.map(feature => `"${feature}"`).join(', ');
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
32
|
+
const sideBuffer = autofit ? 10 : 0;
|
|
33
|
+
const text = content.getCurrentContent().getPlainText();
|
|
34
|
+
const {
|
|
35
|
+
ref,
|
|
36
|
+
fontSize: autofitSize
|
|
37
|
+
} = (0, _useAutofit.default)({
|
|
38
|
+
text,
|
|
39
|
+
fontFamily: fontStyles.fontFamily,
|
|
40
|
+
fontSize: size,
|
|
41
|
+
min,
|
|
42
|
+
max,
|
|
43
|
+
letterSpacing,
|
|
44
|
+
fontWeight: fontStyles.fontWeight,
|
|
45
|
+
fontStyle: fontStyles.fontStyle,
|
|
54
46
|
fontVariationSettings,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const latestSizeRef = (0, _react.useRef)(size);
|
|
58
|
-
let sideBuffer = autofit ? 10 : 0;
|
|
59
|
-
const computeSize = () => {
|
|
60
|
-
if (!autofit) return;
|
|
61
|
-
if (!ref.current) return;
|
|
62
|
-
|
|
63
|
-
// stop autofitting after user edited content
|
|
64
|
-
if (contentEdited === true && !autofitOnChange) return;
|
|
65
|
-
const availableWidth = ref.current.clientWidth - sideBuffer;
|
|
66
|
-
if (!availableWidth) return;
|
|
67
|
-
const $textElement = ref.current.querySelector('.public-DraftStyleDefault-block');
|
|
68
|
-
if (!$textElement) {
|
|
69
|
-
console.warn('Didnt find editor text element');
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const currentWidth = clone.current.scrollWidth;
|
|
73
|
-
const ratio = availableWidth / currentWidth;
|
|
74
|
-
let newSize = Math.min(Math.max(min, ratio * latestSizeRef.current), max);
|
|
75
|
-
|
|
76
|
-
// safari rounds font sizes, so it's impossible to get the width exactly right
|
|
77
|
-
//
|
|
78
|
-
// https://bugs.webkit.org/show_bug.cgi?id=46987
|
|
79
|
-
// "Yeah, we purposely round the font sizes so that we get a higher
|
|
80
|
-
// hit rate in our various caches."
|
|
81
|
-
//
|
|
82
|
-
// so we truncate it since we prefer it slightly smaller than slightly bigger
|
|
83
|
-
if (_reactDeviceDetect.isSafari || _reactDeviceDetect.isMobileSafari) {
|
|
84
|
-
newSize = Math.trunc(newSize);
|
|
85
|
-
}
|
|
86
|
-
clone.current.style.fontSize = `${newSize}px`;
|
|
87
|
-
latestSizeRef.current = newSize;
|
|
88
|
-
setSize(newSize, {
|
|
89
|
-
auto: true
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
(0, _react.useLayoutEffect)(() => {
|
|
93
|
-
var _ref$current;
|
|
94
|
-
const $textElement = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector('.public-DraftStyleDefault-block');
|
|
95
|
-
clone.current.innerHTML = ($textElement === null || $textElement === void 0 ? void 0 : $textElement.innerHTML) ?? '';
|
|
96
|
-
clone.current.style.fontSize = `${size}px`;
|
|
97
|
-
document.body.appendChild(clone.current);
|
|
98
|
-
computeSize();
|
|
99
|
-
return () => {
|
|
100
|
-
document.body.removeChild(clone.current);
|
|
101
|
-
};
|
|
102
|
-
}, []);
|
|
103
|
-
const windowWidth = (0, _throttled.useWindowWidth)({
|
|
104
|
-
fps: 60
|
|
47
|
+
enabled: autofit && (!contentEdited || autofitOnChange),
|
|
48
|
+
padding: sideBuffer
|
|
105
49
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
computeSize();
|
|
110
|
-
}, [letterSpacing]);
|
|
50
|
+
|
|
51
|
+
// When autofit calculates a new size, push it into the shared state
|
|
52
|
+
// before the browser paints to avoid a flash of wrapped text.
|
|
111
53
|
(0, _react.useLayoutEffect)(() => {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}, [
|
|
54
|
+
if (autofit && autofitSize !== size) {
|
|
55
|
+
setSize(autofitSize, {
|
|
56
|
+
auto: true
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}, [autofitSize]);
|
|
118
60
|
const shouldTruncate = truncate && !focused;
|
|
119
61
|
const style = {
|
|
120
62
|
fontSize: autofit ? `${size}px` : `calc(var(--type-tester--adjustment, 1) * ${size}px)`,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
exports.useFontdueUrl = useFontdueUrl;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
const FONTDUE_URL = typeof process !== 'undefined' ? process.env.NEXT_PUBLIC_FONTDUE_URL : undefined;
|
|
10
|
+
const UrlContext = /*#__PURE__*/(0, _react.createContext)(FONTDUE_URL ?? '');
|
|
11
|
+
function useFontdueUrl() {
|
|
12
|
+
return (0, _react.useContext)(UrlContext);
|
|
13
|
+
}
|
|
14
|
+
var _default = UrlContext;
|
|
15
|
+
exports.default = _default;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
interface FontData {
|
|
3
|
-
name: string;
|
|
4
|
-
cssUrl: string | null;
|
|
5
|
-
}
|
|
6
2
|
interface StoreModalContainerProps {
|
|
7
3
|
onClickBackground?: () => void;
|
|
8
4
|
onClickClose?: () => void;
|
|
@@ -12,8 +8,8 @@ interface StoreModalContainerProps {
|
|
|
12
8
|
orderItemCount: number;
|
|
13
9
|
routeName: string;
|
|
14
10
|
fonts: {
|
|
15
|
-
regular:
|
|
16
|
-
bold:
|
|
11
|
+
regular: string | null;
|
|
12
|
+
bold: string | null;
|
|
17
13
|
};
|
|
18
14
|
children: {
|
|
19
15
|
backText?: React.ReactNode;
|
|
@@ -7,8 +7,6 @@ exports.default = void 0;
|
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _Icons = require("../../Icons");
|
|
9
9
|
var _StoreModalContainerContext = _interopRequireDefault(require("./StoreModalContainerContext"));
|
|
10
|
-
var _Stylesheet = _interopRequireDefault(require("../../Stylesheet"));
|
|
11
|
-
var _utils = require("../../../utils");
|
|
12
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
11
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
12
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -43,18 +41,15 @@ const StoreModalContainer = _ref => {
|
|
|
43
41
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
44
42
|
className: "store-modal__container__overlay",
|
|
45
43
|
"data-route": routeName
|
|
46
|
-
},
|
|
47
|
-
key: font.name,
|
|
48
|
-
href: font.cssUrl
|
|
49
|
-
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
44
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
50
45
|
className: "store-modal__container__background",
|
|
51
46
|
onClick: onClickBackground
|
|
52
47
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
53
48
|
className: "store-modal__container__container",
|
|
54
49
|
ref: container,
|
|
55
50
|
style: {
|
|
56
|
-
'--font-family': fonts.regular ? `"${fonts.regular
|
|
57
|
-
'--font-family__bold': fonts.bold ? `"${fonts.bold
|
|
51
|
+
'--font-family': fonts.regular ? `"${fonts.regular}"` : undefined,
|
|
52
|
+
'--font-family__bold': fonts.bold ? `"${fonts.bold}"` : undefined,
|
|
58
53
|
fontFamily: 'var(--font-family, inherit)'
|
|
59
54
|
}
|
|
60
55
|
}, /*#__PURE__*/_react.default.createElement("nav", {
|
|
@@ -9,7 +9,6 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
9
9
|
const StoreModalFamily = _ref => {
|
|
10
10
|
let {
|
|
11
11
|
children: {
|
|
12
|
-
stylesheet,
|
|
13
12
|
bundles,
|
|
14
13
|
familyButton,
|
|
15
14
|
styleGroups,
|
|
@@ -18,7 +17,7 @@ const StoreModalFamily = _ref => {
|
|
|
18
17
|
} = _ref;
|
|
19
18
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
20
19
|
className: "store-modal__family__container"
|
|
21
|
-
},
|
|
20
|
+
}, title && /*#__PURE__*/_react.default.createElement("h3", {
|
|
22
21
|
className: "store-modal__family__title"
|
|
23
22
|
}, title), /*#__PURE__*/_react.default.cloneElement(familyButton, {
|
|
24
23
|
className: 'store-modal__family__family-button'
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns true when the visitor has granted consent for the given category.
|
|
3
|
+
* Re-renders automatically when consent changes (e.g. the visitor clicks
|
|
4
|
+
* "Accept all" on the consent banner).
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const analyticsConsent = useConsent('analytics');
|
|
8
|
+
*/
|
|
9
|
+
export declare function useConsent(category: string): boolean;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useConsent = useConsent;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _consent = require("./ConsentBanner/consent");
|
|
10
|
+
const CONSENT_EVENT = 'fontdue:consent';
|
|
11
|
+
function subscribe(callback) {
|
|
12
|
+
window.addEventListener(CONSENT_EVENT, callback);
|
|
13
|
+
return () => window.removeEventListener(CONSENT_EVENT, callback);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Returns true when the visitor has granted consent for the given category.
|
|
18
|
+
* Re-renders automatically when consent changes (e.g. the visitor clicks
|
|
19
|
+
* "Accept all" on the consent banner).
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const analyticsConsent = useConsent('analytics');
|
|
23
|
+
*/
|
|
24
|
+
function useConsent(category) {
|
|
25
|
+
return (0, _react.useSyncExternalStore)(subscribe, () => (0, _consent.hasConsent)(category), () => false);
|
|
26
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface FontSource {
|
|
3
|
+
readonly url: string | null;
|
|
4
|
+
readonly format: string | null;
|
|
5
|
+
}
|
|
6
|
+
interface UseFontProps {
|
|
7
|
+
fontFamily: string;
|
|
8
|
+
webfontSources?: ReadonlyArray<FontSource | null> | null;
|
|
9
|
+
fontWeight?: React.CSSProperties['fontWeight'];
|
|
10
|
+
fontStyle?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Hook to load and detect web fonts.
|
|
14
|
+
*
|
|
15
|
+
* When `webfontSources` is provided, loads the font directly via the FontFace
|
|
16
|
+
* API (no CSS @font-face required). When omitted, falls back to
|
|
17
|
+
* `document.fonts.load()` to detect fonts loaded by CSS @font-face rules.
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* const { style, loaded } = useFont({
|
|
21
|
+
* fontFamily: "Tonka Regular",
|
|
22
|
+
* webfontSources: [{ url: "https://...", format: "woff2" }],
|
|
23
|
+
* });
|
|
24
|
+
*/
|
|
25
|
+
declare const useFont: ({ fontFamily, webfontSources, fontWeight, fontStyle: fontStyleProp, }: UseFontProps) => {
|
|
26
|
+
style: React.CSSProperties;
|
|
27
|
+
loaded: boolean;
|
|
28
|
+
};
|
|
29
|
+
export default useFont;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _fontLoader = require("../fontLoader");
|
|
9
|
+
const FALLBACK_FAMILY = 'Fallback';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Hook to load and detect web fonts.
|
|
13
|
+
*
|
|
14
|
+
* When `webfontSources` is provided, loads the font directly via the FontFace
|
|
15
|
+
* API (no CSS @font-face required). When omitted, falls back to
|
|
16
|
+
* `document.fonts.load()` to detect fonts loaded by CSS @font-face rules.
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* const { style, loaded } = useFont({
|
|
20
|
+
* fontFamily: "Tonka Regular",
|
|
21
|
+
* webfontSources: [{ url: "https://...", format: "woff2" }],
|
|
22
|
+
* });
|
|
23
|
+
*/
|
|
24
|
+
const useFont = _ref => {
|
|
25
|
+
let {
|
|
26
|
+
fontFamily,
|
|
27
|
+
webfontSources,
|
|
28
|
+
fontWeight = 400,
|
|
29
|
+
fontStyle: fontStyleProp = 'normal'
|
|
30
|
+
} = _ref;
|
|
31
|
+
const [loaded, setLoaded] = (0, _react.useState)(false);
|
|
32
|
+
const mounted = (0, _react.useRef)(false);
|
|
33
|
+
(0, _react.useEffect)(() => {
|
|
34
|
+
mounted.current = true;
|
|
35
|
+
return () => {
|
|
36
|
+
mounted.current = false;
|
|
37
|
+
};
|
|
38
|
+
}, []);
|
|
39
|
+
(0, _react.useEffect)(() => {
|
|
40
|
+
if (!fontFamily) return;
|
|
41
|
+
if (webfontSources && webfontSources.length > 0) {
|
|
42
|
+
// Load directly via FontFace API
|
|
43
|
+
(0, _fontLoader.loadFont)(fontFamily, webfontSources).then(() => {
|
|
44
|
+
if (mounted.current) setLoaded(true);
|
|
45
|
+
}).catch(console.error);
|
|
46
|
+
} else {
|
|
47
|
+
// Fall back to detecting CSS-loaded fonts
|
|
48
|
+
let cancelled = false;
|
|
49
|
+
const tryLoad = () => {
|
|
50
|
+
document.fonts.load(`${fontStyleProp} ${fontWeight} 16px "${fontFamily}"`).then(fontFaces => {
|
|
51
|
+
if (!cancelled && fontFaces.length > 0) setLoaded(true);
|
|
52
|
+
}).catch(() => {});
|
|
53
|
+
};
|
|
54
|
+
tryLoad();
|
|
55
|
+
document.fonts.addEventListener('loadingdone', tryLoad);
|
|
56
|
+
return () => {
|
|
57
|
+
cancelled = true;
|
|
58
|
+
document.fonts.removeEventListener('loadingdone', tryLoad);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}, [fontFamily]);
|
|
62
|
+
const cssStyle = loaded ? {
|
|
63
|
+
fontFamily: `"${fontFamily}", ${FALLBACK_FAMILY}`,
|
|
64
|
+
fontWeight,
|
|
65
|
+
fontStyle: fontStyleProp
|
|
66
|
+
} : {
|
|
67
|
+
fontFamily: FALLBACK_FAMILY,
|
|
68
|
+
fontWeight: 'normal',
|
|
69
|
+
fontStyle: 'normal'
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
style: cssStyle,
|
|
73
|
+
loaded
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
var _default = useFont;
|
|
77
|
+
exports.default = _default;
|