fontdue-js 1.0.1 → 1.2.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.
Files changed (44) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/__generated__/StoreModalReviewQuery.graphql.js +9 -5
  3. package/dist/__generated__/StoreModalReview_viewer.graphql.js +7 -3
  4. package/dist/__generated__/TypeTesterFeatures_fontStyle.graphql.d.ts +1 -7
  5. package/dist/__generated__/TypeTesterFeatures_fontStyle.graphql.js +3 -35
  6. package/dist/__generated__/TypeTesterFloatingToolbar_testers.graphql.d.ts +1 -1
  7. package/dist/__generated__/TypeTesterFloatingToolbar_testers.graphql.js +5 -1
  8. package/dist/__generated__/TypeTester_StyleQuery.graphql.js +14 -9
  9. package/dist/__generated__/TypeTester_fontStyle.graphql.d.ts +1 -1
  10. package/dist/__generated__/TypeTester_fontStyle.graphql.js +5 -1
  11. package/dist/__generated__/TypeTestersIDQuery.graphql.js +14 -9
  12. package/dist/__generated__/TypeTestersSlugQuery.graphql.js +14 -9
  13. package/dist/__generated__/useFeaturesData_fontStyle.graphql.d.ts +19 -0
  14. package/dist/__generated__/useFeaturesData_fontStyle.graphql.js +59 -0
  15. package/dist/components/CharacterViewer/index.js +4 -4
  16. package/dist/components/ConfigContext.d.ts +22 -4
  17. package/dist/components/ConfigContext.js +15 -6
  18. package/dist/components/SKUPrice/index.js +6 -5
  19. package/dist/components/StoreModal/StoreModalContainer.js +16 -24
  20. package/dist/components/StoreModal/StoreModalReview.js +1 -1
  21. package/dist/components/StoreModalProductSummary/index.js +1 -3
  22. package/dist/components/TypeTester/TypeTesterFeatures.d.ts +1 -1
  23. package/dist/components/TypeTester/TypeTesterFeatures.js +21 -36
  24. package/dist/components/TypeTester/TypeTesterFeaturesButton.d.ts +5 -3
  25. package/dist/components/TypeTester/TypeTesterFeaturesButton.js +72 -14
  26. package/dist/components/TypeTester/TypeTesterFloatingToolbar.js +5 -7
  27. package/dist/components/TypeTester/TypeTesterSlider.d.ts +1 -0
  28. package/dist/components/TypeTester/TypeTesterSlider.js +2 -1
  29. package/dist/components/TypeTester/TypeTesterStandalone.js +1 -4
  30. package/dist/components/TypeTester/TypeTesterState.d.ts +1 -0
  31. package/dist/components/TypeTester/TypeTesterState.js +7 -0
  32. package/dist/components/TypeTester/TypeTesterToolbar.d.ts +3 -0
  33. package/dist/components/TypeTester/TypeTesterToolbar.js +28 -8
  34. package/dist/components/TypeTester/index.d.ts +12 -1
  35. package/dist/components/TypeTester/index.js +26 -12
  36. package/dist/components/TypeTester/useFeaturesData.d.ts +19 -0
  37. package/dist/components/TypeTester/useFeaturesData.js +52 -0
  38. package/dist/components/elements/StoreModalContainer/index.d.ts +1 -0
  39. package/dist/components/elements/StoreModalContainer/index.js +10 -4
  40. package/dist/components/elements/StoreModalPageContainer/index.d.ts +0 -1
  41. package/dist/components/elements/StoreModalPageContainer/index.js +1 -4
  42. package/fontdue.css +81 -27
  43. package/fontdue.css.map +1 -1
  44. package/package.json +1 -1
@@ -31,41 +31,32 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
31
31
 
32
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
33
 
34
- const getBackLink = (history, currentRoute) => {
35
- if (currentRoute !== 'index' && history.length === 0) return {
36
- text: 'Browse'
37
- };
38
- const previous = history[history.length - 1];
39
- if (!previous) return null;
40
-
41
- switch (previous.name) {
34
+ const getPageTitle = name => {
35
+ switch (name) {
42
36
  case 'index':
43
- return {
44
- text: 'Browse'
45
- };
37
+ return 'All collections';
46
38
 
47
39
  case 'product':
48
- return {
49
- text: 'Buying options'
50
- };
40
+ return 'Buying options';
51
41
 
52
42
  case 'cart':
53
- return {
54
- text: 'Edit cart'
55
- };
43
+ return 'Cart';
56
44
 
57
45
  case 'checkout':
58
- return {
59
- text: 'Checkout'
60
- };
46
+ return 'Checkout';
61
47
 
62
48
  case 'review':
63
- return {
64
- text: 'Review'
65
- };
49
+ return 'Review';
66
50
  }
67
51
  };
68
52
 
53
+ const getBackLink = (history, currentRoute) => {
54
+ if (currentRoute !== 'index' && history.length === 0) return 'All collections';
55
+ const previous = history[history.length - 1];
56
+ if (!previous) return null;
57
+ return getPageTitle(previous.name);
58
+ };
59
+
69
60
  const StoreModalContainer = _ref => {
70
61
  var _currentOrder$orderIt, _currentOrder, _currentOrder$orderIt2, _settings, _settings2;
71
62
 
@@ -124,7 +115,8 @@ const StoreModalContainer = _ref => {
124
115
  uiFontUrl: (_settings = data.viewer.settings) === null || _settings === void 0 ? void 0 : _settings.uiFontUrl,
125
116
  uiFontName: (_settings2 = data.viewer.settings) === null || _settings2 === void 0 ? void 0 : _settings2.uiFontName
126
117
  }, {
127
- backText: link === null || link === void 0 ? void 0 : link.text,
118
+ backText: link,
119
+ pageTitle: getPageTitle(currentRoute),
128
120
  body: /*#__PURE__*/_react.default.createElement(_react.Suspense, {
129
121
  fallback: /*#__PURE__*/_react.default.createElement(_StoreModalLoadingScreen.default, null)
130
122
  }, children)
@@ -64,7 +64,7 @@ const StoreModalReview = _ref => {
64
64
  stripe
65
65
  } = _ref;
66
66
  const order = (0, _reactRelay.useFragment)(_StoreModalReview_order !== void 0 ? _StoreModalReview_order : (_StoreModalReview_order = require("../../__generated__/StoreModalReview_order.graphql"), _StoreModalReview_order.hash && _StoreModalReview_order.hash !== "c7fc7251b9f1cb7f33e0f7a436498492" && console.error("The definition of 'StoreModalReview_order' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalReview_order), orderKey);
67
- const viewer = (0, _reactRelay.useFragment)(_StoreModalReview_viewer !== void 0 ? _StoreModalReview_viewer : (_StoreModalReview_viewer = require("../../__generated__/StoreModalReview_viewer.graphql"), _StoreModalReview_viewer.hash && _StoreModalReview_viewer.hash !== "425ef90a67fdbd4b8759c296a2440e13" && console.error("The definition of 'StoreModalReview_viewer' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalReview_viewer), viewerKey);
67
+ const viewer = (0, _reactRelay.useFragment)(_StoreModalReview_viewer !== void 0 ? _StoreModalReview_viewer : (_StoreModalReview_viewer = require("../../__generated__/StoreModalReview_viewer.graphql"), _StoreModalReview_viewer.hash && _StoreModalReview_viewer.hash !== "9136dd09437ff0102d8235b72b9b5c66" && console.error("The definition of 'StoreModalReview_viewer' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalReview_viewer), viewerKey);
68
68
  const dispatch = (0, _reactRedux.useDispatch)();
69
69
  const [completing, setCompleting] = (0, _react.useState)(false);
70
70
  const [error, setError] = (0, _react.useState)(null);
@@ -134,9 +134,7 @@ const StoreModalProductSummary = _ref => {
134
134
  const hasSelection = anySkusSelected && licenseOptions.length > 0;
135
135
  return /*#__PURE__*/_react.default.createElement("div", {
136
136
  className: "store-modal__product-summary__container"
137
- }, hasSelection ? viewer.precart.subtotal ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
138
- className: "store-modal__product-summary__label"
139
- }, "Your selection"), /*#__PURE__*/_react.default.createElement("div", {
137
+ }, hasSelection ? viewer.precart.subtotal ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
140
138
  className: "store-modal__product-summary__selection-text"
141
139
  }, (0, _utils.pluralize)(countStyles(viewer), 'style'), ' for ', viewer.precart.subtotal.amount < stylesPrice && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
142
140
  className: "store-modal__product-summary__styles-price"
@@ -1,4 +1,4 @@
1
- import { TypeTesterFeatures_fontStyle } from '../../__generated__/TypeTesterFeatures_fontStyle.graphql';
1
+ import { TypeTesterFeatures_fontStyle } from '__generated__/TypeTesterFeatures_fontStyle.graphql';
2
2
  interface TypeTesterFeatures_props {
3
3
  id: string;
4
4
  fontStyle: TypeTesterFeatures_fontStyle;
@@ -9,8 +9,6 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _reactRelay = require("react-relay");
11
11
 
12
- var _features = _interopRequireDefault(require("./features"));
13
-
14
12
  var _TypeTesterBullet = _interopRequireDefault(require("../TypeTester/TypeTesterBullet"));
15
13
 
16
14
  var _TypeTesterState = _interopRequireDefault(require("./TypeTesterState"));
@@ -19,7 +17,9 @@ var _Checkbox = _interopRequireDefault(require("../Checkbox"));
19
17
 
20
18
  var _ConfigContext = _interopRequireDefault(require("../ConfigContext"));
21
19
 
22
- var _TypeTesterFeatures_stylisticSetName, _TypeTesterFeatures_fontStyle;
20
+ var _useFeaturesData = _interopRequireDefault(require("./useFeaturesData"));
21
+
22
+ var _TypeTesterFeatures_fontStyle;
23
23
 
24
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
25
 
@@ -63,57 +63,42 @@ function useHeightAnimation() {
63
63
  };
64
64
  }
65
65
 
66
- const shouldIncludeFeature = (supportedFeatures, feature) => supportedFeatures.indexOf(feature) >= 0;
67
-
68
- const getStylisticSetName = (feature, stylisticSetNames) => stylisticSetNames.find(_ref => {
69
- let {
70
- featureName
71
- } = _ref;
72
- return featureName === feature;
73
- });
74
-
75
- const getFeatureName = (feature, stylisticSetNames) => {
76
- const stylisticSetName = getStylisticSetName(feature, stylisticSetNames);
77
-
78
- if (stylisticSetName) {
79
- return stylisticSetName.humanName;
80
- }
81
-
82
- if (_features.default.hasOwnProperty(feature)) {
83
- return _features.default[feature];
84
- }
85
-
86
- return null;
66
+ const shouldIncludeFeature = (supportedFeatures, feature) => {
67
+ if (!supportedFeatures) return false;
68
+ return supportedFeatures.indexOf(feature) >= 0;
87
69
  };
88
70
 
89
- _TypeTesterFeatures_stylisticSetName !== void 0 ? _TypeTesterFeatures_stylisticSetName : (_TypeTesterFeatures_stylisticSetName = require("../../__generated__/TypeTesterFeatures_stylisticSetName.graphql"), _TypeTesterFeatures_stylisticSetName.hash && _TypeTesterFeatures_stylisticSetName.hash !== "8420321d8ddf9b3846450d609586db21" && console.error("The definition of 'TypeTesterFeatures_stylisticSetName' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterFeatures_stylisticSetName);
90
-
91
- const TypeTesterFeatures = _ref2 => {
71
+ const TypeTesterFeatures = _ref => {
92
72
  var _config$openTypeFeatu, _config$openTypeFeatu2, _config$openTypeFeatu3, _config$openTypeFeatu4;
93
73
 
94
74
  let {
95
75
  id,
96
76
  fontStyle,
97
77
  features: showFeatures
98
- } = _ref2;
78
+ } = _ref;
99
79
  const {
100
80
  typeTester: config
101
81
  } = (0, _react.useContext)(_ConfigContext.default);
102
82
  const {
103
- features,
83
+ features: selectedFeatures,
104
84
  toggleFeature,
105
85
  featuresOpen
106
86
  } = (0, _TypeTesterState.default)({
107
87
  id
108
88
  });
109
89
  const selectionStyle = config.openTypeFeatures.selectionStyle;
90
+ const {
91
+ featureNames,
92
+ fontFeatures
93
+ } = (0, _useFeaturesData.default)({
94
+ fontStyle,
95
+ features: showFeatures
96
+ });
110
97
 
111
98
  const renderFeature = feature => {
112
- var _fontStyle$fontFeatur;
113
-
114
99
  const featureCode = typeof feature === 'string' ? feature : feature.code;
115
- const featureName = typeof feature === 'string' ? getFeatureName(feature, (_fontStyle$fontFeatur = fontStyle.fontFeatures) === null || _fontStyle$fontFeatur === void 0 ? void 0 : _fontStyle$fontFeatur.stylisticSetNames) : feature.name;
116
- const checked = features.indexOf(featureCode) >= 0;
100
+ const featureName = typeof feature === 'string' ? featureNames[featureCode] : feature.name;
101
+ const checked = selectedFeatures.indexOf(featureCode) >= 0;
117
102
  return /*#__PURE__*/_react.default.createElement("button", {
118
103
  key: featureCode,
119
104
  className: "type-tester__features__button",
@@ -140,9 +125,9 @@ const TypeTesterFeatures = _ref2 => {
140
125
  style: {
141
126
  '--grid-range': columnConfig.range
142
127
  }
143
- }, columnConfig.features.filter(feature => shouldIncludeFeature(fontStyle.fontFeatures.supportedFeatures, typeof feature === 'string' ? feature : feature.code)).map(renderFeature))));
128
+ }, columnConfig.features.filter(feature => shouldIncludeFeature(fontFeatures === null || fontFeatures === void 0 ? void 0 : fontFeatures.supportedFeatures, typeof feature === 'string' ? feature : feature.code)).map(renderFeature))));
144
129
  } else {
145
- featuresColumns = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showFeatures.filter(feature => shouldIncludeFeature(fontStyle.fontFeatures.supportedFeatures, feature)).map(renderFeature));
130
+ featuresColumns = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showFeatures.filter(feature => shouldIncludeFeature(fontFeatures === null || fontFeatures === void 0 ? void 0 : fontFeatures.supportedFeatures, feature)).map(renderFeature));
146
131
  }
147
132
 
148
133
  const {
@@ -167,7 +152,7 @@ const TypeTesterFeatures = _ref2 => {
167
152
  };
168
153
 
169
154
  var _default = (0, _reactRelay.createFragmentContainer)(TypeTesterFeatures, {
170
- fontStyle: _TypeTesterFeatures_fontStyle !== void 0 ? _TypeTesterFeatures_fontStyle : (_TypeTesterFeatures_fontStyle = require("../../__generated__/TypeTesterFeatures_fontStyle.graphql"), _TypeTesterFeatures_fontStyle.hash && _TypeTesterFeatures_fontStyle.hash !== "838ddab02dcbca47c8368b219c302934" && console.error("The definition of 'TypeTesterFeatures_fontStyle' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterFeatures_fontStyle)
155
+ fontStyle: _TypeTesterFeatures_fontStyle !== void 0 ? _TypeTesterFeatures_fontStyle : (_TypeTesterFeatures_fontStyle = require("../../__generated__/TypeTesterFeatures_fontStyle.graphql"), _TypeTesterFeatures_fontStyle.hash && _TypeTesterFeatures_fontStyle.hash !== "25582c33916ebaadd2f674b1d0b6bf4b" && console.error("The definition of 'TypeTesterFeatures_fontStyle' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterFeatures_fontStyle)
171
156
  });
172
157
 
173
158
  exports.default = _default;
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
+ import { useFeaturesData_fontStyle$key } from '__generated__/useFeaturesData_fontStyle.graphql';
2
3
  interface TypeTesterFeaturesButton_props {
3
- featuresOpen: boolean;
4
- features: string[];
5
- toggleFeaturesOpen: () => void;
4
+ id: string;
5
+ fontStyle: useFeaturesData_fontStyle$key;
6
+ onNeedsRefocus?: () => void;
7
+ features: readonly string[] | null | undefined;
6
8
  }
7
9
  declare const TypeTesterFeaturesButton: React.FC<TypeTesterFeaturesButton_props>;
8
10
  export default TypeTesterFeaturesButton;
@@ -5,31 +5,89 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _ConfigContext = _interopRequireDefault(require("../ConfigContext"));
9
11
 
10
12
  var _CarrotDown = _interopRequireDefault(require("../Icons/CarrotDown"));
11
13
 
12
14
  var _CarrotUp = _interopRequireDefault(require("../Icons/CarrotUp"));
13
15
 
16
+ var _Select = _interopRequireDefault(require("../Select"));
17
+
18
+ var _TypeTesterState = _interopRequireDefault(require("./TypeTesterState"));
19
+
20
+ var _useFeaturesData = _interopRequireDefault(require("./useFeaturesData"));
21
+
14
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
23
 
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
16
28
  const TypeTesterFeaturesButton = _ref => {
17
29
  let {
30
+ id,
31
+ fontStyle,
32
+ onNeedsRefocus,
33
+ features: showFeatures
34
+ } = _ref;
35
+ const {
36
+ typeTester: config
37
+ } = (0, _react.useContext)(_ConfigContext.default);
38
+ const {
18
39
  featuresOpen,
40
+ toggleFeaturesOpen,
19
41
  features,
20
- toggleFeaturesOpen
21
- } = _ref;
22
- return /*#__PURE__*/_react.default.createElement("div", {
23
- className: "type-tester__features-button",
24
- "data-features-open": featuresOpen,
25
- "data-features-selected": features.length || 0
26
- }, /*#__PURE__*/_react.default.createElement("button", {
27
- className: "type-tester__features-button__button",
28
- type: "button",
29
- onClick: () => toggleFeaturesOpen()
30
- }, /*#__PURE__*/_react.default.createElement("span", {
31
- className: "type-tester__features-button__text"
32
- }, "OT Features"), ' ', featuresOpen ? /*#__PURE__*/_react.default.createElement(_CarrotUp.default, null) : /*#__PURE__*/_react.default.createElement(_CarrotDown.default, null)));
42
+ setFeatures
43
+ } = (0, _TypeTesterState.default)({
44
+ id
45
+ });
46
+ const selectedFeature = features[0];
47
+ const {
48
+ featureNames
49
+ } = (0, _useFeaturesData.default)({
50
+ fontStyle,
51
+ features
52
+ });
53
+
54
+ if (config.openTypeFeatures.interactionStyle === 'panel') {
55
+ return /*#__PURE__*/_react.default.createElement("div", {
56
+ className: "type-tester__features-button",
57
+ "data-features-open": featuresOpen,
58
+ "data-features-selected": features.length || 0
59
+ }, /*#__PURE__*/_react.default.createElement("button", {
60
+ className: "type-tester__features-button__button",
61
+ type: "button",
62
+ onClick: () => toggleFeaturesOpen()
63
+ }, /*#__PURE__*/_react.default.createElement("span", {
64
+ className: "type-tester__features-button__text"
65
+ }, "OT Features"), ' ', featuresOpen ? /*#__PURE__*/_react.default.createElement(_CarrotUp.default, null) : /*#__PURE__*/_react.default.createElement(_CarrotDown.default, null)));
66
+ }
67
+
68
+ if (config.openTypeFeatures.interactionStyle === 'select') {
69
+ if (!showFeatures || showFeatures.length === 0) return null;
70
+ return /*#__PURE__*/_react.default.createElement("div", {
71
+ className: "type-tester__features-select"
72
+ }, /*#__PURE__*/_react.default.createElement(_Select.default, {
73
+ value: selectedFeature !== null && selectedFeature !== void 0 ? selectedFeature : '',
74
+ options: [{
75
+ value: '',
76
+ text: 'OT Features'
77
+ }].concat(showFeatures.map(feature => ({
78
+ value: feature,
79
+ text: featureNames[feature]
80
+ }))),
81
+ onChange: e => {
82
+ setFeatures(e.target.value === '' ? [] : [e.target.value]);
83
+ onNeedsRefocus === null || onNeedsRefocus === void 0 ? void 0 : onNeedsRefocus();
84
+ },
85
+ onClick: e => e.stopPropagation(),
86
+ onMouseDown: e => e.stopPropagation()
87
+ }));
88
+ }
89
+
90
+ return null;
33
91
  };
34
92
 
35
93
  var _default = TypeTesterFeaturesButton;
@@ -9,8 +9,6 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _reactRelay = require("react-relay");
11
11
 
12
- var _ConfigContext = _interopRequireDefault(require("../ConfigContext"));
13
-
14
12
  var _TypeTesterContext = require("./TypeTesterContext");
15
13
 
16
14
  var _TypeTesterFeatures = _interopRequireDefault(require("./TypeTesterFeatures"));
@@ -33,7 +31,6 @@ const TypeTesterFloatingToolbar = _ref => {
33
31
  features,
34
32
  onToolbarOpenClose
35
33
  } = _ref;
36
- const config = (0, _react.useContext)(_ConfigContext.default);
37
34
  const {
38
35
  testers
39
36
  } = (0, _react.useContext)(_TypeTesterContext.TypeTesterContext);
@@ -75,10 +72,11 @@ const TypeTesterFloatingToolbar = _ref => {
75
72
  className: "type-tester__floating-toolbar",
76
73
  onMouseDown: e => e.preventDefault(),
77
74
  "data-open": activeId && open
78
- }, activeId && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_TypeTesterToolbar.default, {
75
+ }, activeId && fontStyle && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_TypeTesterToolbar.default, {
79
76
  id: activeId,
80
- features: features
81
- }), features && fontStyle && /*#__PURE__*/_react.default.createElement(_TypeTesterFeatures.default, {
77
+ features: features,
78
+ fontStyle: fontStyle
79
+ }), features && /*#__PURE__*/_react.default.createElement(_TypeTesterFeatures.default, {
82
80
  id: activeId,
83
81
  features: features,
84
82
  fontStyle: fontStyle
@@ -86,7 +84,7 @@ const TypeTesterFloatingToolbar = _ref => {
86
84
  };
87
85
 
88
86
  var _default = (0, _reactRelay.createFragmentContainer)(TypeTesterFloatingToolbar, {
89
- testers: _TypeTesterFloatingToolbar_testers !== void 0 ? _TypeTesterFloatingToolbar_testers : (_TypeTesterFloatingToolbar_testers = require("../../__generated__/TypeTesterFloatingToolbar_testers.graphql"), _TypeTesterFloatingToolbar_testers.hash && _TypeTesterFloatingToolbar_testers.hash !== "5554933cac70854b361575a5ed0af8ac" && console.error("The definition of 'TypeTesterFloatingToolbar_testers' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterFloatingToolbar_testers)
87
+ testers: _TypeTesterFloatingToolbar_testers !== void 0 ? _TypeTesterFloatingToolbar_testers : (_TypeTesterFloatingToolbar_testers = require("../../__generated__/TypeTesterFloatingToolbar_testers.graphql"), _TypeTesterFloatingToolbar_testers.hash && _TypeTesterFloatingToolbar_testers.hash !== "3b87269ef35fe6c6cfabcc7a2e330a3c" && console.error("The definition of 'TypeTesterFloatingToolbar_testers' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterFloatingToolbar_testers)
90
88
  });
91
89
 
92
90
  exports.default = _default;
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  interface TypeTesterSliderProps {
3
3
  min: number;
4
4
  max: number;
5
+ stepSize: number;
5
6
  value: number;
6
7
  onChange: (value: number) => void;
7
8
  }
@@ -49,6 +49,7 @@ const TypeTesterSlider = _ref => {
49
49
  let {
50
50
  min,
51
51
  max,
52
+ stepSize,
52
53
  value,
53
54
  onChange
54
55
  } = _ref;
@@ -59,7 +60,7 @@ const TypeTesterSlider = _ref => {
59
60
  } = (0, _reactRanger.useRanger)({
60
61
  min,
61
62
  max,
62
- stepSize: 1,
63
+ stepSize,
63
64
  values: [value],
64
65
  onChange: handleChange,
65
66
  onDrag: handleChange,
@@ -67,10 +67,7 @@ const TypeTesterStandalone = _ref => {
67
67
  features: (_features$split = features === null || features === void 0 ? void 0 : features.split(',')) !== null && _features$split !== void 0 ? _features$split : [],
68
68
  direction: direction === 'rtl' ? 'rtl' : 'ltr',
69
69
  productId: (_props$viewer$fontSty3 = (_props$viewer2 = props.viewer) === null || _props$viewer2 === void 0 ? void 0 : (_props$viewer2$fontSt = _props$viewer2.fontStyle) === null || _props$viewer2$fontSt === void 0 ? void 0 : (_props$viewer2$fontSt2 = _props$viewer2$fontSt.family) === null || _props$viewer2$fontSt2 === void 0 ? void 0 : (_props$viewer2$fontSt3 = _props$viewer2$fontSt2.parent) === null || _props$viewer2$fontSt3 === void 0 ? void 0 : _props$viewer2$fontSt3.id) !== null && _props$viewer$fontSty3 !== void 0 ? _props$viewer$fontSty3 : (_props$viewer3 = props.viewer) === null || _props$viewer3 === void 0 ? void 0 : (_props$viewer3$fontSt = _props$viewer3.fontStyle) === null || _props$viewer3$fontSt === void 0 ? void 0 : (_props$viewer3$fontSt2 = _props$viewer3$fontSt.family) === null || _props$viewer3$fontSt2 === void 0 ? void 0 : _props$viewer3$fontSt2.id,
70
- config: {
71
- groupEdit: false,
72
- buyButton: false
73
- },
70
+ groupEdit: false,
74
71
  onFocus: onFocus,
75
72
  onBlur: onBlur
76
73
  })));
@@ -16,6 +16,7 @@ interface TypeTesterState {
16
16
  focused: boolean;
17
17
  setFocused: (value: boolean) => void;
18
18
  features: string[];
19
+ setFeatures: (value: string[]) => void;
19
20
  toggleFeature: (value: string) => void;
20
21
  featuresOpen: boolean;
21
22
  toggleFeaturesOpen: (value?: boolean) => void;
@@ -75,6 +75,13 @@ const useTypeTesterState = _ref => {
75
75
  });
76
76
  },
77
77
  features,
78
+ setFeatures: value => {
79
+ dispatch({
80
+ type: 'SET_FEATURES',
81
+ value,
82
+ id
83
+ });
84
+ },
78
85
  toggleFeature: feature => {
79
86
  let value;
80
87
 
@@ -1,7 +1,10 @@
1
1
  import React from 'react';
2
+ import { useFeaturesData_fontStyle$key } from '__generated__/useFeaturesData_fontStyle.graphql';
2
3
  interface TypeTesterToolbar_props {
3
4
  id: string;
4
5
  features: readonly string[] | null | undefined;
6
+ fontStyle: useFeaturesData_fontStyle$key;
7
+ onNeedsRefocus?: () => void;
5
8
  }
6
9
  declare const TypeTesterToolbar: React.FC<TypeTesterToolbar_props>;
7
10
  export default TypeTesterToolbar;
@@ -30,7 +30,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
30
30
  const TypeTesterToolbar = _ref => {
31
31
  let {
32
32
  id,
33
- features
33
+ features,
34
+ fontStyle,
35
+ onNeedsRefocus
34
36
  } = _ref;
35
37
  const {
36
38
  typeTester: config
@@ -43,17 +45,35 @@ const TypeTesterToolbar = _ref => {
43
45
  onMouseDown: e => e.preventDefault()
44
46
  }, /*#__PURE__*/_react.default.createElement("div", {
45
47
  className: "type-tester__slider"
46
- }, config.textInput && /*#__PURE__*/_react.default.createElement(_TypeTesterInput.default, {
47
- min: config.min,
48
- max: config.max,
48
+ }, config.size.label && /*#__PURE__*/_react.default.createElement("span", {
49
+ className: "type-tester__slider__size-label"
50
+ }, config.size.label), config.textInput && /*#__PURE__*/_react.default.createElement(_TypeTesterInput.default, {
51
+ min: config.size.min,
52
+ max: config.size.max,
49
53
  value: props.size,
50
54
  onChange: props.setSize
51
55
  }), /*#__PURE__*/_react.default.createElement(_TypeTesterSlider.default, {
52
- min: config.min,
53
- max: config.max,
56
+ min: config.size.min,
57
+ max: config.size.max,
54
58
  value: props.size,
55
- onChange: props.setSize
56
- })), Boolean(features === null || features === void 0 ? void 0 : features.length) && /*#__PURE__*/_react.default.createElement(_TypeTesterFeaturesButton.default, props), config.alignmentButtons && /*#__PURE__*/_react.default.createElement(_TypeTesterAlignButtons.default, props), config.groupEdit && /*#__PURE__*/_react.default.createElement(_TypeTesterEditAll.default, props));
59
+ onChange: props.setSize,
60
+ stepSize: 1
61
+ }), config.lineHeight && /*#__PURE__*/_react.default.createElement("div", {
62
+ className: "type-tester__slider__line-height"
63
+ }, config.lineHeight.label && /*#__PURE__*/_react.default.createElement("span", {
64
+ className: "type-tester__slider__line-height-label"
65
+ }, config.lineHeight.label), /*#__PURE__*/_react.default.createElement(_TypeTesterSlider.default, {
66
+ min: config.lineHeight.min,
67
+ max: config.lineHeight.max,
68
+ value: props.lineHeight,
69
+ onChange: props.setLineHeight,
70
+ stepSize: 0.01
71
+ }))), Boolean(features === null || features === void 0 ? void 0 : features.length) && /*#__PURE__*/_react.default.createElement(_TypeTesterFeaturesButton.default, {
72
+ id: id,
73
+ fontStyle: fontStyle,
74
+ onNeedsRefocus: onNeedsRefocus,
75
+ features: features
76
+ }), config.alignmentButtons && /*#__PURE__*/_react.default.createElement(_TypeTesterAlignButtons.default, props), config.groupEdit && /*#__PURE__*/_react.default.createElement(_TypeTesterEditAll.default, props));
57
77
  };
58
78
 
59
79
  var _default = TypeTesterToolbar;
@@ -19,6 +19,7 @@ export interface TypeTesterConfig {
19
19
  priceText?: boolean;
20
20
  autofitOnChange?: boolean;
21
21
  openTypeFeatures?: {
22
+ interactionStyle: 'panel' | 'select';
22
23
  columns?: {
23
24
  features: ({
24
25
  code: string;
@@ -30,6 +31,16 @@ export interface TypeTesterConfig {
30
31
  };
31
32
  alignmentButtons?: boolean;
32
33
  initialAlignment?: Alignment;
34
+ size?: {
35
+ label?: string | false;
36
+ min?: number;
37
+ max?: number;
38
+ };
39
+ lineHeight?: {
40
+ label?: string | false;
41
+ min?: number;
42
+ max?: number;
43
+ };
33
44
  }
34
45
  export interface TypeTesterBaseProps {
35
46
  id: string;
@@ -37,7 +48,7 @@ export interface TypeTesterBaseProps {
37
48
  direction: 'ltr' | 'rtl';
38
49
  onSelectFontStyleId: (value: string) => void;
39
50
  features?: readonly string[] | null;
40
- config?: TypeTesterConfig;
51
+ groupEdit?: boolean;
41
52
  onFocus?: () => void;
42
53
  onBlur?: () => void;
43
54
  }
@@ -78,18 +78,24 @@ const TypeTesterComponent = _ref => {
78
78
  onFocus,
79
79
  onBlur,
80
80
  features,
81
- config: propsConfig
81
+ groupEdit
82
82
  } = _ref;
83
83
  const contentRef = (0, _react.useRef)(null);
84
84
  const ref = (0, _react.useRef)(null);
85
85
  const [buyButtonIsHovered, setBuyButtonIsHovered] = (0, _react.useState)(false);
86
- const contextConfig = (0, _react.useContext)(_ConfigContext.default);
87
- const config = { ...contextConfig.typeTester,
88
- ...propsConfig
89
- };
86
+ let {
87
+ typeTester: config
88
+ } = (0, _react.useContext)(_ConfigContext.default);
90
89
  const props = (0, _TypeTesterState.default)({
91
90
  id
92
91
  });
92
+
93
+ if (groupEdit) {
94
+ config = { ...config,
95
+ groupEdit
96
+ };
97
+ }
98
+
93
99
  (0, _react.useEffect)(() => {
94
100
  if (onFocus && props.focused) onFocus();
95
101
  if (onBlur && !props.focused) onBlur();
@@ -97,6 +103,13 @@ const TypeTesterComponent = _ref => {
97
103
  const selected = (0, _reactRedux.useSelector)(fontStyle && fontStyle.sku ? (0, _utils.isSelected)(fontStyle.sku.id) : () => false);
98
104
  const precartOpen = (0, _reactRedux.useSelector)(state => state.precartOpen);
99
105
  const sku = getSku(fontStyle);
106
+
107
+ const onNeedsRefocus = () => {
108
+ var _contentRef$current;
109
+
110
+ (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 ? void 0 : _contentRef$current.focus();
111
+ };
112
+
100
113
  if (!fontStyle) return null;
101
114
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, fontStyle.family && fontStyle.family.cssUrl && /*#__PURE__*/_react.default.createElement(_Stylesheet.default, {
102
115
  href: fontStyle.family.cssUrl
@@ -119,10 +132,9 @@ const TypeTesterComponent = _ref => {
119
132
  fontStyle: fontStyle,
120
133
  viewer: viewer,
121
134
  onSelectFontStyleId: value => {
122
- var _contentRef$current;
123
-
124
135
  onSelectFontStyleId(value);
125
- (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 ? void 0 : _contentRef$current.focus();
136
+ props.setFeatures([]);
137
+ onNeedsRefocus();
126
138
  },
127
139
  config: config
128
140
  }), config.priceText && fontStyle.sku && /*#__PURE__*/_react.default.createElement("div", {
@@ -132,7 +144,9 @@ const TypeTesterComponent = _ref => {
132
144
  sku: fontStyle.sku
133
145
  })), config.toolsPosition === 'inline' && /*#__PURE__*/_react.default.createElement(_TypeTesterToolbar.default, {
134
146
  id: id,
135
- features: features
147
+ features: features,
148
+ fontStyle: fontStyle,
149
+ onNeedsRefocus: onNeedsRefocus
136
150
  }), config.selectButton && sku && productId && /*#__PURE__*/_react.default.createElement("div", {
137
151
  className: "type-tester__select-button-wrapper",
138
152
  onMouseDown: e => e.preventDefault()
@@ -169,8 +183,8 @@ const TypeTesterComponent = _ref => {
169
183
  fontStyles: style,
170
184
  truncate: config.truncate,
171
185
  direction: direction,
172
- min: config.min,
173
- max: config.max,
186
+ min: config.size.min,
187
+ max: config.size.max,
174
188
  autofitOnChange: config.autofitOnChange
175
189
  }));
176
190
  }
@@ -187,7 +201,7 @@ const TypeTesterComponent = _ref => {
187
201
 
188
202
  _TypeTester_sku !== void 0 ? _TypeTester_sku : (_TypeTester_sku = require("../../__generated__/TypeTester_sku.graphql"), _TypeTester_sku.hash && _TypeTester_sku.hash !== "1538559015ee3064ae577b7a5e90f34e" && console.error("The definition of 'TypeTester_sku' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTester_sku);
189
203
  const TypeTester = (0, _reactRelay.createFragmentContainer)(TypeTesterComponent, {
190
- fontStyle: _TypeTester_fontStyle !== void 0 ? _TypeTester_fontStyle : (_TypeTester_fontStyle = require("../../__generated__/TypeTester_fontStyle.graphql"), _TypeTester_fontStyle.hash && _TypeTester_fontStyle.hash !== "0d5783f65fd4bf6f0840996214179fca" && 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_fontStyle),
204
+ fontStyle: _TypeTester_fontStyle !== void 0 ? _TypeTester_fontStyle : (_TypeTester_fontStyle = require("../../__generated__/TypeTester_fontStyle.graphql"), _TypeTester_fontStyle.hash && _TypeTester_fontStyle.hash !== "e570d7809bdb60196f3190d2cf27ee0f" && 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_fontStyle),
191
205
  viewer: _TypeTester_viewer !== void 0 ? _TypeTester_viewer : (_TypeTester_viewer = require("../../__generated__/TypeTester_viewer.graphql"), _TypeTester_viewer.hash && _TypeTester_viewer.hash !== "a12af7126d512a50ab0b7e5e14a7d8eb" && 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_viewer)
192
206
  });
193
207
 
@@ -0,0 +1,19 @@
1
+ import { useFeaturesData_fontStyle$key } from '__generated__/useFeaturesData_fontStyle.graphql';
2
+ interface useFeatures_props {
3
+ features: Readonly<string[]>;
4
+ fontStyle: useFeaturesData_fontStyle$key;
5
+ }
6
+ declare const useFeaturesData: ({ fontStyle }: useFeatures_props) => {
7
+ featureNames: {
8
+ [feature: string]: string;
9
+ };
10
+ fontFeatures: {
11
+ readonly supportedFeatures: readonly string[];
12
+ readonly stylisticSetNames: readonly {
13
+ readonly featureName: string;
14
+ readonly humanName: string;
15
+ }[];
16
+ };
17
+ " $refType": "useFeaturesData_fontStyle";
18
+ };
19
+ export default useFeaturesData;