fontdue-js 2.26.1 → 2.28.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 +9 -0
- package/dist/__generated__/TypeTesterFamiliesQuery.graphql.d.ts +29 -0
- package/dist/__generated__/TypeTesterFamiliesQuery.graphql.js +174 -0
- package/dist/__generated__/TypeTesterFamiliesStylesQuery.graphql.d.ts +35 -0
- package/dist/__generated__/TypeTesterFamiliesStylesQuery.graphql.js +170 -0
- package/dist/__generated__/TypeTesterStandaloneChangedStylesQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTesterStandaloneChangedStylesQuery.graphql.js +4 -4
- package/dist/__generated__/TypeTesterStandaloneQuery.graphql.d.ts +1 -3
- package/dist/__generated__/TypeTesterStandaloneQuery.graphql.js +78 -161
- package/dist/__generated__/TypeTesterStyleSelectData_fontStyle.graphql.d.ts +2 -1
- package/dist/__generated__/TypeTesterStyleSelectData_fontStyle.graphql.js +18 -17
- package/dist/__generated__/TypeTestersChangedStylesQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTestersChangedStylesQuery.graphql.js +4 -4
- package/dist/__generated__/TypeTestersIDQuery.graphql.d.ts +1 -5
- package/dist/__generated__/TypeTestersIDQuery.graphql.js +101 -195
- package/dist/__generated__/TypeTestersRefetchQuery.graphql.d.ts +1 -1
- package/dist/__generated__/TypeTestersRefetchQuery.graphql.js +4 -4
- package/dist/__generated__/TypeTestersSlugQuery.graphql.d.ts +1 -3
- package/dist/__generated__/TypeTestersSlugQuery.graphql.js +102 -178
- package/dist/__generated__/orderTrackingUpdateOrderTrackingMutation.graphql.d.ts +27 -0
- package/dist/__generated__/orderTrackingUpdateOrderTrackingMutation.graphql.js +72 -0
- package/dist/components/Cart/CartOrder.js +8 -0
- package/dist/components/Cart/orderTracking.d.ts +10 -0
- package/dist/components/Cart/orderTracking.js +43 -0
- package/dist/components/ConfigContext.d.ts +2 -2
- package/dist/components/FontStyle/index.d.ts +2 -0
- package/dist/components/FontStyle/index.js +4 -2
- package/dist/components/FontdueProvider/FontdueProviderClientComponent.js +2 -1
- package/dist/components/TypeTester/TypeTesterFamilies.d.ts +37 -0
- package/dist/components/TypeTester/TypeTesterFamilies.js +128 -0
- package/dist/components/TypeTester/TypeTesterStandalone.js +2 -7
- package/dist/components/TypeTester/TypeTesterStandalone.server.js +1 -2
- package/dist/components/TypeTester/TypeTesterStyleSelect.d.ts +15 -5
- package/dist/components/TypeTester/TypeTesterStyleSelect.js +57 -47
- package/dist/components/TypeTester/TypeTesterStyleSelectData.d.ts +1 -3
- package/dist/components/TypeTester/TypeTesterStyleSelectData.js +210 -52
- package/dist/components/TypeTester/index.d.ts +1 -3
- package/dist/components/TypeTester/index.js +6 -6
- package/dist/components/TypeTester/useTypeTesterStyler.d.ts +4 -2
- package/dist/components/TypeTester/useTypeTesterStyler.js +78 -11
- package/dist/components/TypeTesters/index.js +6 -20
- package/dist/components/TypeTesters/index.server.js +2 -4
- package/dist/components/elements/StoreModalUnifiedCheckout.js +8 -0
- package/dist/components/useFontStyle.d.ts +7 -0
- package/dist/components/useFontStyle.js +2 -1
- package/dist/fontdue.css +8 -16
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +14 -1
- package/package.json +1 -1
- package/dist/__generated__/FontdueProviderQuery.graphql.d.ts +0 -19
- package/dist/__generated__/FontdueProviderQuery.graphql.js +0 -140
- package/dist/__generated__/ServerConfigProvider_viewer.graphql.d.ts +0 -23
- package/dist/__generated__/ServerConfigProvider_viewer.graphql.js +0 -57
- package/dist/__generated__/TestModeBanner_viewer.graphql.d.ts +0 -19
- package/dist/__generated__/TestModeBanner_viewer.graphql.js +0 -36
- package/dist/__generated__/ThemeConfig_viewer.graphql.d.ts +0 -19
- package/dist/__generated__/ThemeConfig_viewer.graphql.js +0 -36
- package/dist/__generated__/TypeTesterStyleSelectData_viewer.graphql.d.ts +0 -42
- package/dist/__generated__/TypeTesterStyleSelectData_viewer.graphql.js +0 -166
- package/dist/__generated__/TypeTester_viewer.graphql.d.ts +0 -17
- package/dist/__generated__/TypeTester_viewer.graphql.js +0 -40
- package/dist/__generated__/TypeTesters_viewer.graphql.d.ts +0 -17
- package/dist/__generated__/TypeTesters_viewer.graphql.js +0 -40
- package/dist/components/BuyingOptions/index.d.ts +0 -9
- package/dist/components/CookieNotification/index.d.ts +0 -13
- package/dist/components/FontdueContextProvider/index.d.ts +0 -17
- package/dist/components/FontdueContextProvider/index.js +0 -108
- package/dist/components/FontdueContextProvider/index.server.d.ts +0 -4
- package/dist/components/FontdueContextProvider/index.server.js +0 -7
- package/dist/components/FontdueProvider/useAuxUIOwner.d.ts +0 -1
- package/dist/components/FontdueProvider/useAuxUIOwner.js +0 -28
- package/dist/components/TypeTester/TypeTesterStandalone.preload.d.ts +0 -14
- package/dist/components/TypeTester/TypeTesterStandalone.preload.js +0 -20
- package/dist/config.d.ts +0 -7
- package/dist/config.js +0 -31
- package/dist/global-shim.d.ts +0 -1
- package/dist/global-shim.js +0 -8
- package/dist/hooks/useResizeObserver.d.ts +0 -11
- package/dist/hooks/useResizeObserver.js +0 -23
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -1
- package/dist/loadFontdueProviderQuery.d.ts +0 -3
- package/dist/loadFontdueProviderQuery.js +0 -10
- package/dist/vite.d.ts +0 -2
- package/dist/vite.js +0 -139
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Environment } from 'relay-runtime';
|
|
2
|
+
/**
|
|
3
|
+
* Stores the buyer's analytics context (cookie consent, Meta browser IDs,
|
|
4
|
+
* checkout page URL) on the current order. The server emits the purchase
|
|
5
|
+
* event from a Stripe webhook — outside the browser — so this is how that
|
|
6
|
+
* event respects the consent banner and carries attribution.
|
|
7
|
+
*
|
|
8
|
+
* Fire-and-forget: tracking must never break checkout.
|
|
9
|
+
*/
|
|
10
|
+
export declare function sendOrderTracking(environment: Environment): void;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.sendOrderTracking = sendOrderTracking;
|
|
7
|
+
var _orderTrackingUpdateOrderTrackingMutation2 = _interopRequireDefault(require("../../__generated__/orderTrackingUpdateOrderTrackingMutation.graphql"));
|
|
8
|
+
var _reactRelay = require("react-relay");
|
|
9
|
+
var _consent = require("../ConsentBanner/consent");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
function readCookie(name) {
|
|
12
|
+
const match = document.cookie.match(new RegExp('(?:^|;\\s*)' + name + '=([^;]*)'));
|
|
13
|
+
return match ? decodeURIComponent(match[1]) : undefined;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Stores the buyer's analytics context (cookie consent, Meta browser IDs,
|
|
18
|
+
* checkout page URL) on the current order. The server emits the purchase
|
|
19
|
+
* event from a Stripe webhook — outside the browser — so this is how that
|
|
20
|
+
* event respects the consent banner and carries attribution.
|
|
21
|
+
*
|
|
22
|
+
* Fire-and-forget: tracking must never break checkout.
|
|
23
|
+
*/
|
|
24
|
+
function sendOrderTracking(environment) {
|
|
25
|
+
try {
|
|
26
|
+
(0, _reactRelay.commitMutation)(environment, {
|
|
27
|
+
mutation: (_orderTrackingUpdateOrderTrackingMutation2.default.hash && _orderTrackingUpdateOrderTrackingMutation2.default.hash !== "d59a127a7f140424f507ae549731bac7" && console.error("The definition of 'orderTrackingUpdateOrderTrackingMutation' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _orderTrackingUpdateOrderTrackingMutation2.default),
|
|
28
|
+
variables: {
|
|
29
|
+
input: {
|
|
30
|
+
analyticsConsent: (0, _consent.hasConsent)('analytics'),
|
|
31
|
+
anonymousId: (0, _consent.getClientAnonymousId)(),
|
|
32
|
+
fbp: readCookie('_fbp'),
|
|
33
|
+
fbc: readCookie('_fbc'),
|
|
34
|
+
url: window.location.href
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
onCompleted: () => undefined,
|
|
38
|
+
onError: () => undefined
|
|
39
|
+
});
|
|
40
|
+
} catch {
|
|
41
|
+
// Ignore — see above.
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -34,7 +34,7 @@ export interface Config {
|
|
|
34
34
|
export declare const makeConfig: (config?: Config) => {
|
|
35
35
|
typeTester: {
|
|
36
36
|
autofitOnChange: boolean;
|
|
37
|
-
truncate: boolean;
|
|
37
|
+
truncate: number | boolean;
|
|
38
38
|
priceText: boolean;
|
|
39
39
|
selectButtonStyle: "inline" | "outlined";
|
|
40
40
|
selectButtonLabel: string;
|
|
@@ -106,7 +106,7 @@ export declare const makeConfig: (config?: Config) => {
|
|
|
106
106
|
declare const _default: React.Context<{
|
|
107
107
|
typeTester: {
|
|
108
108
|
autofitOnChange: boolean;
|
|
109
|
-
truncate: boolean;
|
|
109
|
+
truncate: number | boolean;
|
|
110
110
|
priceText: boolean;
|
|
111
111
|
selectButtonStyle: "inline" | "outlined";
|
|
112
112
|
selectButtonLabel: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { type JSX } from 'react';
|
|
2
|
+
import { VerticalMetrics } from '../useFontStyle';
|
|
2
3
|
import { FontStyle_fontStyle$key } from '../../__generated__/FontStyle_fontStyle.graphql';
|
|
3
4
|
interface FontStyleProps {
|
|
4
5
|
fontStyle: FontStyle_fontStyle$key;
|
|
@@ -7,6 +8,7 @@ interface FontStyleProps {
|
|
|
7
8
|
children: ((props: {
|
|
8
9
|
loaded: boolean;
|
|
9
10
|
style: React.CSSProperties;
|
|
11
|
+
verticalMetrics: VerticalMetrics | null;
|
|
10
12
|
}) => React.ReactNode) | React.ReactNode;
|
|
11
13
|
}
|
|
12
14
|
export default function FontStyle({ Component, fontStyle: fontStyleKey, style, children, ...rest }: Omit<React.HTMLAttributes<HTMLDivElement | HTMLSpanElement>, 'children'> & FontStyleProps): JSX.Element;
|
|
@@ -20,7 +20,8 @@ function FontStyle(_ref) {
|
|
|
20
20
|
const fontStyle = (0, _reactRelay.useFragment)((_FontStyle_fontStyle2.default.hash && _FontStyle_fontStyle2.default.hash !== "7891603bea1a3e40f40297bf1697eb3c" && console.error("The definition of 'FontStyle_fontStyle' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _FontStyle_fontStyle2.default), fontStyleKey);
|
|
21
21
|
const {
|
|
22
22
|
style: fontStyleStyle,
|
|
23
|
-
loaded
|
|
23
|
+
loaded,
|
|
24
|
+
verticalMetrics
|
|
24
25
|
} = (0, _useFontStyle.default)({
|
|
25
26
|
fontStyle
|
|
26
27
|
});
|
|
@@ -33,6 +34,7 @@ function FontStyle(_ref) {
|
|
|
33
34
|
};
|
|
34
35
|
return /*#__PURE__*/_react.default.createElement(Component, renderProps, typeof children === 'function' ? children({
|
|
35
36
|
loaded,
|
|
36
|
-
style: fontStyleStyle
|
|
37
|
+
style: fontStyleStyle,
|
|
38
|
+
verticalMetrics
|
|
37
39
|
}) : children);
|
|
38
40
|
}
|
|
@@ -16,6 +16,7 @@ var _ComponentsContext = _interopRequireDefault(require("../ComponentsContext"))
|
|
|
16
16
|
var _UrlContext = _interopRequireDefault(require("../UrlContext"));
|
|
17
17
|
var _retryImport = _interopRequireDefault(require("../../retryImport"));
|
|
18
18
|
var _corsError = require("../../corsError");
|
|
19
|
+
var _TypeTesterFamilies = _interopRequireDefault(require("../TypeTester/TypeTesterFamilies"));
|
|
19
20
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
21
|
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); }
|
|
21
22
|
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; }
|
|
@@ -50,7 +51,7 @@ function FontdueProviderClientComponent(_ref) {
|
|
|
50
51
|
value: url ?? (typeof process !== 'undefined' ? process.env.NEXT_PUBLIC_FONTDUE_URL : undefined) ?? ''
|
|
51
52
|
}, /*#__PURE__*/_react.default.createElement(_ComponentsContext.default.Provider, {
|
|
52
53
|
value: components ?? {}
|
|
53
|
-
}, children, /*#__PURE__*/_react.default.createElement(_reactErrorBoundary.ErrorBoundary, {
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement(_TypeTesterFamilies.default, null, children), /*#__PURE__*/_react.default.createElement(_reactErrorBoundary.ErrorBoundary, {
|
|
54
55
|
fallback: null
|
|
55
56
|
}, /*#__PURE__*/_react.default.createElement(_react.Suspense, {
|
|
56
57
|
fallback: null
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { VariableInstance } from '../../utils';
|
|
3
|
+
export interface TypeTesterFamilyListItem {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
isVariableFont: boolean;
|
|
7
|
+
featureStyle: {
|
|
8
|
+
supportedLanguages: readonly string[] | null;
|
|
9
|
+
} | null;
|
|
10
|
+
}
|
|
11
|
+
export interface TypeTesterFamilyStyle {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
cssWeight: string | null;
|
|
15
|
+
cssStyle: string | null;
|
|
16
|
+
cssStretch: string | null;
|
|
17
|
+
variableInstances: ReadonlyArray<VariableInstance> | null;
|
|
18
|
+
}
|
|
19
|
+
export interface TypeTesterFamilyStylesEntry {
|
|
20
|
+
loading: boolean;
|
|
21
|
+
isVariableFont: boolean;
|
|
22
|
+
styles: TypeTesterFamilyStyle[] | null;
|
|
23
|
+
}
|
|
24
|
+
interface FamiliesContextValue {
|
|
25
|
+
families: TypeTesterFamilyListItem[] | null;
|
|
26
|
+
loadingFamilies: boolean;
|
|
27
|
+
loadFamilies: () => void;
|
|
28
|
+
getFamilyStyles: (familyId: string) => TypeTesterFamilyStylesEntry | undefined;
|
|
29
|
+
loadFamilyStyles: (familyId: string) => void;
|
|
30
|
+
}
|
|
31
|
+
export declare function useTypeTesterFamilies(): FamiliesContextValue;
|
|
32
|
+
export declare const typeTesterFamiliesQuery: import("react-relay").GraphQLTaggedNode;
|
|
33
|
+
export declare const typeTesterFamiliesStylesQuery: import("react-relay").GraphQLTaggedNode;
|
|
34
|
+
export default function TypeTesterFamiliesProvider({ children, }: {
|
|
35
|
+
children: React.ReactNode;
|
|
36
|
+
}): React.JSX.Element;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = TypeTesterFamiliesProvider;
|
|
8
|
+
exports.typeTesterFamiliesStylesQuery = exports.typeTesterFamiliesQuery = void 0;
|
|
9
|
+
exports.useTypeTesterFamilies = useTypeTesterFamilies;
|
|
10
|
+
var _TypeTesterFamiliesStylesQuery2 = _interopRequireDefault(require("../../__generated__/TypeTesterFamiliesStylesQuery.graphql"));
|
|
11
|
+
var _TypeTesterFamiliesQuery2 = _interopRequireDefault(require("../../__generated__/TypeTesterFamiliesQuery.graphql"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
var _reactRelay = require("react-relay");
|
|
14
|
+
var _utils = require("../../utils");
|
|
15
|
+
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); }
|
|
16
|
+
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; }
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
+
// A single, lightweight family-list entry for the type tester family switcher.
|
|
19
|
+
// These are all cheap stored columns (plus the once-per-page language filter),
|
|
20
|
+
// so this query never triggers per-style font-binary parsing.
|
|
21
|
+
|
|
22
|
+
const noop = () => {};
|
|
23
|
+
const TypeTesterFamiliesContext = /*#__PURE__*/(0, _react.createContext)({
|
|
24
|
+
families: null,
|
|
25
|
+
loadingFamilies: false,
|
|
26
|
+
loadFamilies: noop,
|
|
27
|
+
getFamilyStyles: () => undefined,
|
|
28
|
+
loadFamilyStyles: noop
|
|
29
|
+
});
|
|
30
|
+
function useTypeTesterFamilies() {
|
|
31
|
+
return (0, _react.useContext)(TypeTesterFamiliesContext);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// The family-switcher dropdown list. Cheap fields only; `featureStyle
|
|
35
|
+
// { supportedLanguages }` resolves the language filter once per page (instead
|
|
36
|
+
// of once per type tester) — see FD-685.
|
|
37
|
+
const typeTesterFamiliesQuery = (_TypeTesterFamiliesQuery2.default.hash && _TypeTesterFamiliesQuery2.default.hash !== "cda53ca94a4951ee5ba29cc57281a002" && console.error("The definition of 'TypeTesterFamiliesQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterFamiliesQuery2.default);
|
|
38
|
+
|
|
39
|
+
// The styles/instances for a single family, fetched lazily when that family is
|
|
40
|
+
// opened or switched to. `variableInstances` font-binary parsing is therefore
|
|
41
|
+
// scoped to one family rather than the whole library.
|
|
42
|
+
exports.typeTesterFamiliesQuery = typeTesterFamiliesQuery;
|
|
43
|
+
const typeTesterFamiliesStylesQuery = (_TypeTesterFamiliesStylesQuery2.default.hash && _TypeTesterFamiliesStylesQuery2.default.hash !== "feee079c690b83b56cfb01cb81f36dce" && console.error("The definition of 'TypeTesterFamiliesStylesQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterFamiliesStylesQuery2.default);
|
|
44
|
+
exports.typeTesterFamiliesStylesQuery = typeTesterFamiliesStylesQuery;
|
|
45
|
+
function TypeTesterFamiliesProvider(_ref) {
|
|
46
|
+
let {
|
|
47
|
+
children
|
|
48
|
+
} = _ref;
|
|
49
|
+
const environment = (0, _reactRelay.useRelayEnvironment)();
|
|
50
|
+
const [families, setFamilies] = (0, _react.useState)(null);
|
|
51
|
+
const [loadingFamilies, setLoadingFamilies] = (0, _react.useState)(false);
|
|
52
|
+
const familiesRequested = (0, _react.useRef)(false);
|
|
53
|
+
const [familyStyles, setFamilyStyles] = (0, _react.useState)(() => new Map());
|
|
54
|
+
const familyStylesRequested = (0, _react.useRef)(new Set());
|
|
55
|
+
const loadFamilies = (0, _react.useCallback)(() => {
|
|
56
|
+
if (familiesRequested.current) return;
|
|
57
|
+
familiesRequested.current = true;
|
|
58
|
+
setLoadingFamilies(true);
|
|
59
|
+
(0, _reactRelay.fetchQuery)(environment, typeTesterFamiliesQuery, {}).toPromise().then(data => {
|
|
60
|
+
var _data$viewer, _data$viewer$families;
|
|
61
|
+
const list = ((data === null || data === void 0 ? void 0 : (_data$viewer = data.viewer) === null || _data$viewer === void 0 ? void 0 : (_data$viewer$families = _data$viewer.families) === null || _data$viewer$families === void 0 ? void 0 : _data$viewer$families.edges) ?? []).map(edge => edge === null || edge === void 0 ? void 0 : edge.node).filter(_utils.notEmpty).map(node => ({
|
|
62
|
+
id: node.id,
|
|
63
|
+
name: node.name,
|
|
64
|
+
isVariableFont: node.isVariableFont,
|
|
65
|
+
featureStyle: node.featureStyle ? {
|
|
66
|
+
supportedLanguages: node.featureStyle.supportedLanguages ?? null
|
|
67
|
+
} : null
|
|
68
|
+
}));
|
|
69
|
+
setFamilies(list);
|
|
70
|
+
}).catch(() => {
|
|
71
|
+
// allow a retry on the next open if the request failed
|
|
72
|
+
familiesRequested.current = false;
|
|
73
|
+
}).finally(() => setLoadingFamilies(false));
|
|
74
|
+
}, [environment]);
|
|
75
|
+
const setEntry = (0, _react.useCallback)((familyId, entry) => {
|
|
76
|
+
setFamilyStyles(prev => {
|
|
77
|
+
const next = new Map(prev);
|
|
78
|
+
next.set(familyId, entry);
|
|
79
|
+
return next;
|
|
80
|
+
});
|
|
81
|
+
}, []);
|
|
82
|
+
const loadFamilyStyles = (0, _react.useCallback)(familyId => {
|
|
83
|
+
if (!familyId || familyStylesRequested.current.has(familyId)) return;
|
|
84
|
+
familyStylesRequested.current.add(familyId);
|
|
85
|
+
setEntry(familyId, {
|
|
86
|
+
loading: true,
|
|
87
|
+
isVariableFont: false,
|
|
88
|
+
styles: null
|
|
89
|
+
});
|
|
90
|
+
(0, _reactRelay.fetchQuery)(environment, typeTesterFamiliesStylesQuery, {
|
|
91
|
+
familyId
|
|
92
|
+
}).toPromise().then(data => {
|
|
93
|
+
const node = data === null || data === void 0 ? void 0 : data.node;
|
|
94
|
+
const fontStyles = node && 'fontStyles' in node ? node.fontStyles : null;
|
|
95
|
+
const isVariableFont = node && 'isVariableFont' in node ? node.isVariableFont : false;
|
|
96
|
+
setEntry(familyId, {
|
|
97
|
+
loading: false,
|
|
98
|
+
isVariableFont: isVariableFont ?? false,
|
|
99
|
+
styles: (fontStyles ?? []).map(style => ({
|
|
100
|
+
id: style.id,
|
|
101
|
+
name: style.name,
|
|
102
|
+
cssWeight: style.cssWeight ?? null,
|
|
103
|
+
cssStyle: style.cssStyle ?? null,
|
|
104
|
+
cssStretch: style.cssStretch ?? null,
|
|
105
|
+
variableInstances: style.variableInstances ?? null
|
|
106
|
+
}))
|
|
107
|
+
});
|
|
108
|
+
}).catch(() => {
|
|
109
|
+
// allow a retry on the next open if the request failed
|
|
110
|
+
familyStylesRequested.current.delete(familyId);
|
|
111
|
+
setEntry(familyId, {
|
|
112
|
+
loading: false,
|
|
113
|
+
isVariableFont: false,
|
|
114
|
+
styles: null
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}, [environment, setEntry]);
|
|
118
|
+
const getFamilyStyles = (0, _react.useCallback)(familyId => familyStyles.get(familyId), [familyStyles]);
|
|
119
|
+
return /*#__PURE__*/_react.default.createElement(TypeTesterFamiliesContext.Provider, {
|
|
120
|
+
value: {
|
|
121
|
+
families,
|
|
122
|
+
loadingFamilies,
|
|
123
|
+
loadFamilies,
|
|
124
|
+
getFamilyStyles,
|
|
125
|
+
loadFamilyStyles
|
|
126
|
+
}
|
|
127
|
+
}, children);
|
|
128
|
+
}
|
|
@@ -95,7 +95,6 @@ function TypeTesterStandaloneComponent(_ref) {
|
|
|
95
95
|
}
|
|
96
96
|
}, /*#__PURE__*/_react.default.createElement(_index.default, {
|
|
97
97
|
id: "standalone",
|
|
98
|
-
viewer: data.viewer,
|
|
99
98
|
fontStyle: changedStyle ? changedStylesData.node : (_data$viewer = data.viewer) === null || _data$viewer === void 0 ? void 0 : _data$viewer.fontStyle,
|
|
100
99
|
onStyleSelect: handleStyleSelect,
|
|
101
100
|
axes: axes,
|
|
@@ -106,7 +105,7 @@ function TypeTesterStandaloneComponent(_ref) {
|
|
|
106
105
|
onBlur: onBlur
|
|
107
106
|
}));
|
|
108
107
|
}
|
|
109
|
-
const query = (_TypeTesterStandaloneQuery2.default.hash && _TypeTesterStandaloneQuery2.default.hash !== "
|
|
108
|
+
const query = (_TypeTesterStandaloneQuery2.default.hash && _TypeTesterStandaloneQuery2.default.hash !== "951214eacb2370ea3ca0b19bebe7fbe7" && console.error("The definition of 'TypeTesterStandaloneQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterStandaloneQuery2.default);
|
|
110
109
|
function TypeTesterStandalonePreloadedQueryRenderer(_ref3) {
|
|
111
110
|
let {
|
|
112
111
|
preloadedQuery,
|
|
@@ -125,13 +124,9 @@ function TypeTesterStandalone(_ref4) {
|
|
|
125
124
|
styleName,
|
|
126
125
|
...rest
|
|
127
126
|
} = _ref4;
|
|
128
|
-
const {
|
|
129
|
-
typeTester: config
|
|
130
|
-
} = (0, _react.useContext)(_ConfigContext.default);
|
|
131
127
|
const data = (0, _reactRelay.useLazyLoadQuery)(query, {
|
|
132
128
|
familyName,
|
|
133
|
-
styleName
|
|
134
|
-
selectable: config.selectable
|
|
129
|
+
styleName
|
|
135
130
|
});
|
|
136
131
|
const fontStyle = (_data$viewer4 = data.viewer) === null || _data$viewer4 === void 0 ? void 0 : _data$viewer4.fontStyle;
|
|
137
132
|
if (!fontStyle) {
|
|
@@ -18,8 +18,7 @@ async function TypeTesterStandalone(_ref) {
|
|
|
18
18
|
} = _ref;
|
|
19
19
|
const preloadedQuery = await (0, _loadSerializableQuery.default)(_TypeTesterStandaloneQuery.default, {
|
|
20
20
|
familyName,
|
|
21
|
-
styleName
|
|
22
|
-
selectable: true
|
|
21
|
+
styleName
|
|
23
22
|
});
|
|
24
23
|
return /*#__PURE__*/_react.default.createElement(_TypeTesterStandalone.TypeTesterStandalonePreloadedQueryRenderer, _extends({
|
|
25
24
|
preloadedQuery: preloadedQuery
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { VariableInstance, VariableSettings } from '../../utils';
|
|
3
|
+
export interface SelectedFamily {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
isVariableFont: boolean;
|
|
7
|
+
fontStyles: ReadonlyArray<{
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
variableInstances: ReadonlyArray<VariableInstance> | null;
|
|
11
|
+
}> | null;
|
|
12
|
+
}
|
|
3
13
|
interface TypeTesterStyleSelectProps {
|
|
4
14
|
families: {
|
|
5
15
|
id: string;
|
|
6
16
|
name: string;
|
|
7
|
-
readonly fontStyles: ReadonlyArray<{
|
|
8
|
-
id: string;
|
|
9
|
-
name: string;
|
|
10
|
-
variableInstances: ReadonlyArray<VariableInstance> | null;
|
|
11
|
-
}> | null;
|
|
12
17
|
}[];
|
|
18
|
+
selectedFamily: SelectedFamily | null;
|
|
19
|
+
familyValue: string | null;
|
|
13
20
|
selectedFontStyleId: string;
|
|
14
21
|
selectedVariableSettings: VariableSettings | null;
|
|
22
|
+
loadingFamilies?: boolean;
|
|
23
|
+
loading?: boolean;
|
|
24
|
+
onOpen?: () => void;
|
|
15
25
|
onSelectFontStyleValue: (value: {
|
|
16
26
|
fontStyleId: string;
|
|
17
27
|
variableSettings?: VariableSettings;
|
|
@@ -9,36 +9,30 @@ var _utils = require("../../utils");
|
|
|
9
9
|
var _Select = _interopRequireDefault(require("../Select"));
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
const VARIABLE_AXES = 'VARIABLE_AXES';
|
|
12
|
+
const LOADING = '__loading__';
|
|
12
13
|
const TypeTesterStyleSelect = _ref => {
|
|
13
|
-
var _selectedFamily$
|
|
14
|
+
var _selectedFamily$fontS4;
|
|
14
15
|
let {
|
|
15
16
|
families,
|
|
17
|
+
selectedFamily,
|
|
18
|
+
familyValue,
|
|
16
19
|
selectedFontStyleId,
|
|
17
20
|
selectedVariableSettings,
|
|
21
|
+
loadingFamilies,
|
|
22
|
+
loading,
|
|
23
|
+
onOpen,
|
|
18
24
|
onSelectFontStyleValue,
|
|
19
25
|
onSelectVariableAxes,
|
|
20
26
|
onSelectFamilyId,
|
|
21
27
|
includeVariableAxesOption
|
|
22
28
|
} = _ref;
|
|
23
|
-
const selectedFamily = families.find(family => family.fontStyles && family.fontStyles.some(_ref2 => {
|
|
24
|
-
let {
|
|
25
|
-
id
|
|
26
|
-
} = _ref2;
|
|
27
|
-
return id === selectedFontStyleId;
|
|
28
|
-
}));
|
|
29
|
-
const selectedFontStyle = selectedFamily && selectedFamily.fontStyles && selectedFamily.fontStyles.find(_ref3 => {
|
|
30
|
-
let {
|
|
31
|
-
id
|
|
32
|
-
} = _ref3;
|
|
33
|
-
return id === selectedFontStyleId;
|
|
34
|
-
});
|
|
35
29
|
const handleSelectFontStyle = selection => {
|
|
36
30
|
if (selection === VARIABLE_AXES) {
|
|
37
31
|
onSelectVariableAxes();
|
|
38
32
|
} else if (selection.includes(':::')) {
|
|
39
33
|
var _selectedFamily$fontS, _selectedFamily$fontS2, _selectedFamily$fontS3;
|
|
40
34
|
const [fontStyleId, instanceName] = selection.split(':::');
|
|
41
|
-
const instance = selectedFamily === null || selectedFamily === void 0 ? void 0 : (_selectedFamily$fontS = selectedFamily.fontStyles) === null || _selectedFamily$fontS === void 0 ? void 0 : (_selectedFamily$fontS2 = _selectedFamily$fontS.find(style => style.id === fontStyleId)) === null || _selectedFamily$fontS2 === void 0 ? void 0 : (_selectedFamily$fontS3 = _selectedFamily$fontS2.variableInstances) === null || _selectedFamily$fontS3 === void 0 ? void 0 : _selectedFamily$fontS3.find(
|
|
35
|
+
const instance = selectedFamily === null || selectedFamily === void 0 ? void 0 : (_selectedFamily$fontS = selectedFamily.fontStyles) === null || _selectedFamily$fontS === void 0 ? void 0 : (_selectedFamily$fontS2 = _selectedFamily$fontS.find(style => style.id === fontStyleId)) === null || _selectedFamily$fontS2 === void 0 ? void 0 : (_selectedFamily$fontS3 = _selectedFamily$fontS2.variableInstances) === null || _selectedFamily$fontS3 === void 0 ? void 0 : _selectedFamily$fontS3.find(inst => inst.name === instanceName);
|
|
42
36
|
let variableSettings;
|
|
43
37
|
if (instance) variableSettings = (0, _utils.variableInstanceSettings)(instance);
|
|
44
38
|
onSelectFontStyleValue({
|
|
@@ -51,25 +45,28 @@ const TypeTesterStyleSelect = _ref => {
|
|
|
51
45
|
});
|
|
52
46
|
}
|
|
53
47
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
value
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
48
|
+
const familyOptions = families.map(_ref2 => {
|
|
49
|
+
let {
|
|
50
|
+
id,
|
|
51
|
+
name
|
|
52
|
+
} = _ref2;
|
|
53
|
+
return {
|
|
54
|
+
value: id,
|
|
55
|
+
text: name
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
if (loadingFamilies) familyOptions.push({
|
|
59
|
+
value: LOADING,
|
|
60
|
+
text: 'Loading…'
|
|
61
|
+
});
|
|
65
62
|
let isVariable = false;
|
|
66
|
-
|
|
63
|
+
const styleOptions = (selectedFamily === null || selectedFamily === void 0 ? void 0 : (_selectedFamily$fontS4 = selectedFamily.fontStyles) === null || _selectedFamily$fontS4 === void 0 ? void 0 : _selectedFamily$fontS4.flatMap(_ref3 => {
|
|
67
64
|
let {
|
|
68
65
|
id,
|
|
69
66
|
name,
|
|
70
67
|
variableInstances
|
|
71
|
-
} =
|
|
72
|
-
if (variableInstances &&
|
|
68
|
+
} = _ref3;
|
|
69
|
+
if (variableInstances && variableInstances.length > 0) {
|
|
73
70
|
isVariable = true;
|
|
74
71
|
return variableInstances.map(instance => ({
|
|
75
72
|
value: `${id}:::${instance.name}`,
|
|
@@ -80,34 +77,47 @@ const TypeTesterStyleSelect = _ref => {
|
|
|
80
77
|
value: id,
|
|
81
78
|
text: name
|
|
82
79
|
}];
|
|
83
|
-
});
|
|
80
|
+
})) ?? [];
|
|
84
81
|
if (isVariable && includeVariableAxesOption) {
|
|
85
|
-
|
|
82
|
+
styleOptions.push({
|
|
86
83
|
value: VARIABLE_AXES,
|
|
87
84
|
text: 'Variable axes...'
|
|
88
85
|
});
|
|
89
86
|
}
|
|
87
|
+
let styleValue = selectedFontStyleId;
|
|
88
|
+
if (selectedVariableSettings) {
|
|
89
|
+
var _selectedFamily$fontS5, _selectedFamily$fontS6, _selectedFamily$fontS7;
|
|
90
|
+
const instance = selectedFamily === null || selectedFamily === void 0 ? void 0 : (_selectedFamily$fontS5 = selectedFamily.fontStyles) === null || _selectedFamily$fontS5 === void 0 ? void 0 : (_selectedFamily$fontS6 = _selectedFamily$fontS5.find(style => style.id === selectedFontStyleId)) === null || _selectedFamily$fontS6 === void 0 ? void 0 : (_selectedFamily$fontS7 = _selectedFamily$fontS6.variableInstances) === null || _selectedFamily$fontS7 === void 0 ? void 0 : _selectedFamily$fontS7.find(inst => (0, _utils.compareVariableSettings)(inst, selectedVariableSettings));
|
|
91
|
+
styleValue = instance ? `${selectedFontStyleId}:::${instance.name}` : null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Ignore the synthetic "Loading…" placeholder if it is somehow selected.
|
|
95
|
+
const ignoreLoading = cb => e => {
|
|
96
|
+
if (e.target.value === LOADING) return;
|
|
97
|
+
cb(e.target.value);
|
|
98
|
+
};
|
|
90
99
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
91
|
-
className: "type-tester-select"
|
|
100
|
+
className: "type-tester-select",
|
|
101
|
+
"data-loading": loading || undefined,
|
|
102
|
+
"aria-busy": loading || undefined,
|
|
103
|
+
style: {
|
|
104
|
+
opacity: loading ? 0.6 : 1,
|
|
105
|
+
transition: 'opacity 120ms ease'
|
|
106
|
+
}
|
|
92
107
|
}, /*#__PURE__*/_react.default.createElement(_Select.default, {
|
|
93
|
-
options:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return {
|
|
99
|
-
value: id,
|
|
100
|
-
text: name
|
|
101
|
-
};
|
|
102
|
-
}),
|
|
103
|
-
value: selectedFamily.id,
|
|
104
|
-
onChange: e => onSelectFamilyId(e.target.value),
|
|
108
|
+
options: familyOptions,
|
|
109
|
+
value: familyValue,
|
|
110
|
+
onChange: ignoreLoading(onSelectFamilyId),
|
|
111
|
+
onMouseDown: () => onOpen === null || onOpen === void 0 ? void 0 : onOpen(),
|
|
112
|
+
onFocus: () => onOpen === null || onOpen === void 0 ? void 0 : onOpen(),
|
|
105
113
|
onClick: e => e.stopPropagation()
|
|
106
|
-
}),
|
|
107
|
-
options:
|
|
108
|
-
value:
|
|
114
|
+
}), styleOptions.length > 0 && /*#__PURE__*/_react.default.createElement(_Select.default, {
|
|
115
|
+
options: styleOptions,
|
|
116
|
+
value: styleValue,
|
|
109
117
|
nullText: "Custom",
|
|
110
|
-
onChange:
|
|
118
|
+
onChange: ignoreLoading(handleSelectFontStyle),
|
|
119
|
+
onMouseDown: () => onOpen === null || onOpen === void 0 ? void 0 : onOpen(),
|
|
120
|
+
onFocus: () => onOpen === null || onOpen === void 0 ? void 0 : onOpen(),
|
|
111
121
|
onClick: e => e.stopPropagation()
|
|
112
122
|
}));
|
|
113
123
|
};
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { VariableSettings } from '../../utils';
|
|
3
3
|
import { TypeTesterStyleSelectData_fontStyle$key } from '../../__generated__/TypeTesterStyleSelectData_fontStyle.graphql';
|
|
4
|
-
import { TypeTesterStyleSelectData_viewer$key } from '../../__generated__/TypeTesterStyleSelectData_viewer.graphql';
|
|
5
4
|
import { TypeTesterConfig } from '.';
|
|
6
5
|
interface TypeTesterStyleSelectDataProps {
|
|
7
6
|
fontStyle: TypeTesterStyleSelectData_fontStyle$key;
|
|
8
|
-
viewer: TypeTesterStyleSelectData_viewer$key | null;
|
|
9
7
|
variableSettings: VariableSettings | null;
|
|
10
8
|
onSelectFontStyleValue: (value: {
|
|
11
9
|
fontStyleId: string;
|
|
@@ -15,5 +13,5 @@ interface TypeTesterStyleSelectDataProps {
|
|
|
15
13
|
config: TypeTesterConfig;
|
|
16
14
|
includeVariableAxesOption: boolean;
|
|
17
15
|
}
|
|
18
|
-
export default function TypeTesterStyleSelectData({ fontStyle: fontStyleKey,
|
|
16
|
+
export default function TypeTesterStyleSelectData({ fontStyle: fontStyleKey, onSelectFontStyleValue, onSelectVariableAxes, config, variableSettings, includeVariableAxesOption, }: TypeTesterStyleSelectDataProps): React.JSX.Element;
|
|
19
17
|
export {};
|