@khanacademy/perseus 7.1.1 → 7.2.1

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 (75) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/es/index.css +61 -61
  3. package/dist/es/index.js +100 -168
  4. package/dist/es/index.js.map +1 -1
  5. package/dist/index.css +61 -61
  6. package/dist/index.js +89 -126
  7. package/dist/index.js.map +1 -1
  8. package/dist/util.d.ts +7 -12
  9. package/dist/util.graphie.d.ts +6 -0
  10. package/dist/util.graphie.js.flow +14 -0
  11. package/dist/util.js.flow +7 -12
  12. package/dist/widgets/plotter.d.ts +47 -13
  13. package/dist/widgets/plotter.js.flow +47 -13
  14. package/package.json +2 -2
  15. package/src/__tests__/item-renderer.test.tsx +1 -1
  16. package/src/components/__stories__/image-loader.stories.tsx +1 -0
  17. package/src/components/graph.tsx +1 -0
  18. package/src/components/icon.tsx +1 -0
  19. package/src/components/image-loader.tsx +1 -0
  20. package/src/components/number-input.tsx +1 -0
  21. package/src/components/sortable.tsx +1 -0
  22. package/src/components/svg-image.tsx +1 -0
  23. package/src/components/tex-buttons.tsx +1 -0
  24. package/src/components/text-input.tsx +1 -0
  25. package/src/components/text-list-editor.tsx +1 -0
  26. package/src/components/zoomable.tsx +1 -0
  27. package/src/hints-renderer.tsx +1 -0
  28. package/src/index.ts +1 -0
  29. package/src/item-renderer.tsx +1 -0
  30. package/src/mixins/provide-keypad.tsx +1 -0
  31. package/src/multi-items/multi-renderer.tsx +1 -0
  32. package/src/renderer.tsx +1 -0
  33. package/src/server-item-renderer.tsx +1 -0
  34. package/src/styles/articles.less +8 -4
  35. package/src/styles/perseus-renderer.less +47 -38
  36. package/src/styles/util.less +1 -1
  37. package/src/styles/variables.boostrap.less +158 -182
  38. package/src/styles/variables.less +20 -20
  39. package/src/styles/variables.shared.less +162 -168
  40. package/src/styles/widgets/categorizer.less +1 -2
  41. package/src/styles/widgets/expression.less +7 -4
  42. package/src/styles/widgets/grapher.less +2 -1
  43. package/src/styles/widgets/image.less +3 -2
  44. package/src/styles/widgets/interactive-graph.less +4 -2
  45. package/src/styles/widgets/label-image.less +2 -1
  46. package/src/styles/widgets/matrix.less +11 -7
  47. package/src/styles/widgets/orderer.less +2 -1
  48. package/src/styles/widgets/passage.less +2 -1
  49. package/src/styles/widgets/plotter.less +4 -3
  50. package/src/styles/widgets/radio.less +4 -2
  51. package/src/styles/widgets/sortable.less +1 -1
  52. package/src/styles/widgets/table.less +2 -1
  53. package/src/styles/widgets/transformer.less +2 -1
  54. package/src/styles/widgets/unit.less +2 -1
  55. package/src/util.graphie.test.ts +45 -0
  56. package/src/util.graphie.ts +59 -0
  57. package/src/util.ts +8 -63
  58. package/src/widgets/__stories__/plotter.stories.tsx +27 -0
  59. package/src/widgets/__testdata__/plotter.testdata.ts +36 -0
  60. package/src/widgets/__tests__/__snapshots__/plotter.test.tsx.snap +863 -0
  61. package/src/widgets/__tests__/plotter.test.tsx +65 -0
  62. package/src/widgets/categorizer.tsx +1 -0
  63. package/src/widgets/graded-group-set.tsx +1 -0
  64. package/src/widgets/graded-group.tsx +1 -0
  65. package/src/widgets/interaction.tsx +1 -0
  66. package/src/widgets/label-image/marker.tsx +1 -0
  67. package/src/widgets/matcher.tsx +1 -0
  68. package/src/widgets/orderer.tsx +1 -0
  69. package/src/widgets/passage-ref-target.tsx +1 -0
  70. package/src/widgets/plotter.tsx +108 -98
  71. package/src/widgets/radio/base-radio.tsx +1 -0
  72. package/src/widgets/radio/choice-icon/choice-icon.tsx +1 -0
  73. package/src/widgets/sorter.tsx +1 -0
  74. package/src/widgets/transformer.tsx +1 -0
  75. package/tsconfig-build.tsbuildinfo +1 -1
package/dist/util.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import * as GraphieUtil from "./util.graphie";
1
2
  import type { Range } from "./perseus-types";
2
3
  import type { Widget, PerseusScore } from "./types";
3
4
  import type { KEScore } from "@khanacademy/perseus-core";
@@ -171,13 +172,7 @@ declare function extractPointerLocation(event: any): Position | null | undefined
171
172
  * avoid sending the touch to the mobile scratchpad
172
173
  */
173
174
  declare function captureScratchpadTouchStart(e: TouchEvent): void;
174
- declare function getImageSizeModern(url: string): Promise<[number, number]>;
175
175
  declare function getImageSize(url: string, callback: (width: number, height: number) => void): void;
176
- declare function getRealImageUrl(url: string): string;
177
- declare function isLabeledSVG(url: string): boolean;
178
- declare function getBaseUrl(url: string): string;
179
- declare function getSvgUrl(url: string): string;
180
- declare function getDataUrl(url: string): string;
181
176
  /**
182
177
  * Gets the word right before where the textarea cursor is
183
178
  *
@@ -234,12 +229,12 @@ declare const Util: {
234
229
  readonly supportsPassiveEvents: () => boolean;
235
230
  readonly captureScratchpadTouchStart: typeof captureScratchpadTouchStart;
236
231
  readonly getImageSize: typeof getImageSize;
237
- readonly getImageSizeModern: typeof getImageSizeModern;
238
- readonly getRealImageUrl: typeof getRealImageUrl;
239
- readonly isLabeledSVG: typeof isLabeledSVG;
240
- readonly getBaseUrl: typeof getBaseUrl;
241
- readonly getSvgUrl: typeof getSvgUrl;
242
- readonly getDataUrl: typeof getDataUrl;
232
+ readonly getImageSizeModern: typeof GraphieUtil.getImageSizeModern;
233
+ readonly getRealImageUrl: typeof GraphieUtil.getRealImageUrl;
234
+ readonly isLabeledSVG: typeof GraphieUtil.isLabeledSVG;
235
+ readonly getBaseUrl: typeof GraphieUtil.getBaseUrl;
236
+ readonly getSvgUrl: typeof GraphieUtil.getSvgUrl;
237
+ readonly getDataUrl: typeof GraphieUtil.getDataUrl;
243
238
  readonly textarea: {
244
239
  readonly getWordBeforeCursor: typeof getWordBeforeCursor;
245
240
  readonly moveCursor: typeof moveCursor;
@@ -0,0 +1,6 @@
1
+ export declare function getRealImageUrl(graphieUrl: string): string;
2
+ export declare function isLabeledSVG(graphieUrl: string): boolean;
3
+ export declare function getBaseUrl(graphieUrl: string): string;
4
+ export declare function getSvgUrl(graphieUrl: string): string;
5
+ export declare function getDataUrl(graphieUrl: string): string;
6
+ export declare function getImageSizeModern(url: string): Promise<[number, number]>;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Flowtype definitions for data
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.21.0
5
+ * @flow
6
+ */
7
+ declare export function getRealImageUrl(graphieUrl: string): string;
8
+ declare export function isLabeledSVG(graphieUrl: string): boolean;
9
+ declare export function getBaseUrl(graphieUrl: string): string;
10
+ declare export function getSvgUrl(graphieUrl: string): string;
11
+ declare export function getDataUrl(graphieUrl: string): string;
12
+ declare export function getImageSizeModern(
13
+ url: string
14
+ ): Promise<[number, number]>;
package/dist/util.js.flow CHANGED
@@ -4,6 +4,7 @@
4
4
  * Flowgen v1.21.0
5
5
  * @flow
6
6
  */
7
+ import * as GraphieUtil from "./util.graphie";
7
8
  import type { Range } from "./perseus-types";
8
9
  import type { Widget, PerseusScore } from "./types";
9
10
  import type { KEScore } from "@khanacademy/perseus-core";
@@ -236,16 +237,10 @@ declare function extractPointerLocation(event: any): Position | null | void;
236
237
  * avoid sending the touch to the mobile scratchpad
237
238
  */
238
239
  declare function captureScratchpadTouchStart(e: TouchEvent): void;
239
- declare function getImageSizeModern(url: string): Promise<[number, number]>;
240
240
  declare function getImageSize(
241
241
  url: string,
242
242
  callback: (width: number, height: number) => void
243
243
  ): void;
244
- declare function getRealImageUrl(url: string): string;
245
- declare function isLabeledSVG(url: string): boolean;
246
- declare function getBaseUrl(url: string): string;
247
- declare function getSvgUrl(url: string): string;
248
- declare function getDataUrl(url: string): string;
249
244
 
250
245
  /**
251
246
  * Gets the word right before where the textarea cursor is
@@ -308,12 +303,12 @@ declare var Util: {|
308
303
  +supportsPassiveEvents: () => boolean,
309
304
  +captureScratchpadTouchStart: typeof captureScratchpadTouchStart,
310
305
  +getImageSize: typeof getImageSize,
311
- +getImageSizeModern: typeof getImageSizeModern,
312
- +getRealImageUrl: typeof getRealImageUrl,
313
- +isLabeledSVG: typeof isLabeledSVG,
314
- +getBaseUrl: typeof getBaseUrl,
315
- +getSvgUrl: typeof getSvgUrl,
316
- +getDataUrl: typeof getDataUrl,
306
+ +getImageSizeModern: typeof GraphieUtil.getImageSizeModern,
307
+ +getRealImageUrl: typeof GraphieUtil.getRealImageUrl,
308
+ +isLabeledSVG: typeof GraphieUtil.isLabeledSVG,
309
+ +getBaseUrl: typeof GraphieUtil.getBaseUrl,
310
+ +getSvgUrl: typeof GraphieUtil.getSvgUrl,
311
+ +getDataUrl: typeof GraphieUtil.getDataUrl,
317
312
  +textarea: {|
318
313
  +getWordBeforeCursor: typeof getWordBeforeCursor,
319
314
  +moveCursor: typeof moveCursor,
@@ -1,25 +1,58 @@
1
- import PropTypes from "prop-types";
2
1
  import * as React from "react";
3
- declare class Plotter extends React.Component<any, any> {
2
+ import type { APIOptions } from "../types";
3
+ declare const plotTypes: string[];
4
+ type PlotType = typeof plotTypes[number];
5
+ type Props = {
6
+ type: PlotType;
7
+ labels: ReadonlyArray<string>;
8
+ categories: ReadonlyArray<string | number>;
9
+ scaleY: number;
10
+ maxY: number;
11
+ snapsPerLine: number;
12
+ picSize: number;
13
+ picBoxHeight: number;
14
+ picUrl: string;
15
+ plotDimensions: ReadonlyArray<number>;
16
+ labelInterval: number;
17
+ starting: Array<number>;
18
+ static: boolean;
19
+ markings: any;
20
+ onChange: any;
21
+ trackInteraction: () => void;
22
+ apiOptions: APIOptions;
23
+ };
24
+ type DefaultProps = {
25
+ type: Props["type"];
26
+ labels: Props["labels"];
27
+ categories: Props["categories"];
28
+ scaleY: Props["scaleY"];
29
+ maxY: Props["maxY"];
30
+ snapsPerLine: Props["snapsPerLine"];
31
+ picSize: Props["picSize"];
32
+ picBoxHeight: Props["picBoxHeight"];
33
+ picUrl: Props["picUrl"];
34
+ plotDimensions: Props["plotDimensions"];
35
+ labelInterval: Props["labelInterval"];
36
+ };
37
+ type State = {
38
+ values: Array<number>;
39
+ categoryHeights: Record<string, number>;
40
+ };
41
+ export declare class Plotter extends React.Component<Props, State> {
4
42
  shouldSetupGraphie: boolean;
5
43
  _isMounted: boolean;
6
44
  horizHairline: any;
7
45
  hairlineRange: any;
8
46
  graphie: any;
9
- static propTypes: {
10
- onChange: PropTypes.Validator<(...args: any[]) => any>;
11
- trackInteraction: PropTypes.Validator<(...args: any[]) => any>;
12
- };
13
- static defaultProps: any;
14
- state: any;
47
+ static defaultProps: DefaultProps;
48
+ state: State;
49
+ componentDidMount(): void;
50
+ UNSAFE_componentWillReceiveProps(nextProps: Props): void;
51
+ componentDidUpdate(prevProps: Props, prevState: State): void;
52
+ componentWillUnmount(): void;
15
53
  DOT_PLOT_POINT_SIZE: () => number;
16
54
  DOT_PLOT_POINT_PADDING: () => number;
17
55
  DOT_TICK_POINT_SIZE: () => number;
18
- render(): React.ReactNode;
19
- componentDidUpdate(prevProps: any, prevState: any): void;
20
- componentDidMount(): void;
21
- UNSAFE_componentWillReceiveProps(nextProps: any): void;
22
- componentWillUnmount(): void;
23
56
  setupGraphie: (arg1: any) => void;
24
57
  showHairlines: (arg1: any) => void;
25
58
  hideHairlines: () => void;
@@ -44,6 +77,7 @@ declare class Plotter extends React.Component<any, any> {
44
77
  drawPicHeights: (arg1: any, arg2: any) => void;
45
78
  getUserInput: () => any;
46
79
  simpleValidate: (arg1: any) => any;
80
+ render(): React.ReactNode;
47
81
  }
48
82
  declare const _default: Readonly<{
49
83
  name: string;
@@ -5,28 +5,61 @@
5
5
  * @flow
6
6
  */
7
7
  import * as $Flowgen$Import$_2e__2e__2f_types from "../types";
8
- import PropTypes from "prop-types";
9
8
  import * as React from "react";
10
- declare class Plotter extends React.Component<any, any> {
9
+ import type { APIOptions } from "../types";
10
+ declare var plotTypes: string[];
11
+ declare type PlotType = $ElementType<typeof plotTypes, number>;
12
+ declare type Props = {|
13
+ type: PlotType,
14
+ labels: $ReadOnlyArray<string>,
15
+ categories: $ReadOnlyArray<string | number>,
16
+ scaleY: number,
17
+ maxY: number,
18
+ snapsPerLine: number,
19
+ picSize: number,
20
+ picBoxHeight: number,
21
+ picUrl: string,
22
+ plotDimensions: $ReadOnlyArray<number>,
23
+ labelInterval: number,
24
+ starting: Array<number>,
25
+ static: boolean,
26
+ markings: any,
27
+ onChange: any,
28
+ trackInteraction: () => void,
29
+ apiOptions: APIOptions,
30
+ |};
31
+ declare type DefaultProps = {|
32
+ type: $PropertyType<Props, "type">,
33
+ labels: $PropertyType<Props, "labels">,
34
+ categories: $PropertyType<Props, "categories">,
35
+ scaleY: $PropertyType<Props, "scaleY">,
36
+ maxY: $PropertyType<Props, "maxY">,
37
+ snapsPerLine: $PropertyType<Props, "snapsPerLine">,
38
+ picSize: $PropertyType<Props, "picSize">,
39
+ picBoxHeight: $PropertyType<Props, "picBoxHeight">,
40
+ picUrl: $PropertyType<Props, "picUrl">,
41
+ plotDimensions: $PropertyType<Props, "plotDimensions">,
42
+ labelInterval: $PropertyType<Props, "labelInterval">,
43
+ |};
44
+ declare type State = {|
45
+ values: Array<number>,
46
+ categoryHeights: { [key: string]: number },
47
+ |};
48
+ declare export class Plotter extends React.Component<Props, State> {
11
49
  shouldSetupGraphie: boolean;
12
50
  _isMounted: boolean;
13
51
  horizHairline: any;
14
52
  hairlineRange: any;
15
53
  graphie: any;
16
- static propTypes: {|
17
- onChange: PropTypes.Validator<(...args: any[]) => any>,
18
- trackInteraction: PropTypes.Validator<(...args: any[]) => any>,
19
- |};
20
- static defaultProps: any;
21
- state: any;
54
+ static defaultProps: DefaultProps;
55
+ state: State;
56
+ componentDidMount(): void;
57
+ UNSAFE_componentWillReceiveProps(nextProps: Props): void;
58
+ componentDidUpdate(prevProps: Props, prevState: State): void;
59
+ componentWillUnmount(): void;
22
60
  DOT_PLOT_POINT_SIZE: () => number;
23
61
  DOT_PLOT_POINT_PADDING: () => number;
24
62
  DOT_TICK_POINT_SIZE: () => number;
25
- render(): React.Node;
26
- componentDidUpdate(prevProps: any, prevState: any): void;
27
- componentDidMount(): void;
28
- UNSAFE_componentWillReceiveProps(nextProps: any): void;
29
- componentWillUnmount(): void;
30
63
  setupGraphie: (arg1: any) => void;
31
64
  showHairlines: (arg1: any) => void;
32
65
  hideHairlines: () => void;
@@ -52,6 +85,7 @@ declare class Plotter extends React.Component<any, any> {
52
85
  drawPicHeights: (arg1: any, arg2: any) => void;
53
86
  getUserInput: () => any;
54
87
  simpleValidate: (arg1: any) => any;
88
+ render(): React.Node;
55
89
  }
56
90
  declare var _default: $ReadOnly<{|
57
91
  name: string,
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Core Perseus API (includes renderers and widgets)",
4
4
  "author": "Khan Academy",
5
5
  "license": "MIT",
6
- "version": "7.1.1",
6
+ "version": "7.2.1",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -23,7 +23,7 @@
23
23
  "dependencies": {
24
24
  "@khanacademy/kas": "^0.3.1",
25
25
  "@khanacademy/kmath": "^0.1.1",
26
- "@khanacademy/math-input": "^8.1.1",
26
+ "@khanacademy/math-input": "^8.1.2",
27
27
  "@khanacademy/perseus-core": "0.1.1",
28
28
  "@khanacademy/perseus-linter": "^0.3.1",
29
29
  "@khanacademy/pure-markdown": "^0.2.3",
@@ -309,7 +309,7 @@ describe("item renderer", () => {
309
309
  renderer.focus();
310
310
 
311
311
  // Assert
312
- expect(screen.getByLabelText("Up arrow")).toBeVisible();
312
+ expect(screen.getByLabelText("7")).toBeVisible();
313
313
  });
314
314
 
315
315
  it("should provide current and previous focus paths on focus change to, and away from, a single widget", () => {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  import * as React from "react";
2
3
 
3
4
  type StoryArgs = Record<any, any>;
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable react/no-unsafe */
2
3
  import $ from "jquery";
3
4
  import * as React from "react";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /**
2
3
  * SVG Icon React Component
3
4
  *
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable jsx-a11y/alt-text, react/no-unsafe */
2
3
  // TODO(scottgrant): Enable the alt-text eslint rule above.
3
4
  /**
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable react/sort-comp */
2
3
  import {number as knumber} from "@khanacademy/kmath";
3
4
  import classNames from "classnames";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable @babel/no-invalid-this, react/no-unsafe, react/sort-comp */
2
3
  import * as PerseusLinter from "@khanacademy/perseus-linter";
3
4
  import {CircularSpinner} from "@khanacademy/wonder-blocks-progress-spinner";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable no-useless-escape, react/no-unsafe */
2
3
  import {CircularSpinner} from "@khanacademy/wonder-blocks-progress-spinner";
3
4
  import classNames from "classnames";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  import {Keys} from "@khanacademy/math-input";
2
3
  import * as i18n from "@khanacademy/wonder-blocks-i18n";
3
4
  import PropTypes from "prop-types";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable react/sort-comp */
2
3
  import {TextField} from "@khanacademy/wonder-blocks-form";
3
4
  import * as React from "react";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable @babel/no-invalid-this, react/forbid-prop-types, react/no-unsafe, react/sort-comp */
2
3
  import $ from "jquery";
3
4
  import PropTypes from "prop-types";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /**
2
3
  * Zooms child to fit with tap-to-zoom behavior.
3
4
  */
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  import * as PerseusLinter from "@khanacademy/perseus-linter";
2
3
  import * as i18n from "@khanacademy/wonder-blocks-i18n";
3
4
  import {StyleSheet, css} from "aphrodite";
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /**
2
3
  * Main entry point
3
4
  */
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable react/no-unsafe */
2
3
  import * as PerseusLinter from "@khanacademy/perseus-linter";
3
4
  import $ from "jquery";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /**
2
3
  * A mixin that renders a custom software keypad in additional to the base
3
4
  * component. The base component will receive blur events when the keypad is
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable react/no-unsafe */
2
3
  // TODO(mdr): There are some TypeScript errors in this file, and they're tricky, so
3
4
  // I'm skipping TypeScript errors for now.
package/src/renderer.tsx CHANGED
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  /* eslint-disable react/no-unsafe */
2
3
  import * as PerseusLinter from "@khanacademy/perseus-linter";
3
4
  import classNames from "classnames";
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @khanacademy/ts-no-error-suppressions */
1
2
  import {StyleSheet, css} from "aphrodite";
2
3
  /**
3
4
  * A copy of the ItemRenderer which renders its question renderer and hints
@@ -58,7 +58,8 @@
58
58
  // inline, so we rely on the "actual paragraph" check above
59
59
  // (a .paragraph that contains another .paragraph instead of a
60
60
  // .perseus-block-math).
61
- .katex, mjx-container {
61
+ .katex,
62
+ mjx-container {
62
63
  font-size: 100%;
63
64
  }
64
65
 
@@ -243,7 +244,8 @@
243
244
  .paragraph {
244
245
  .text(@choiceTextSize, @choiceLineHeight, @gray17);
245
246
 
246
- .katex, mjx-container {
247
+ .katex,
248
+ mjx-container {
247
249
  color: @gray17;
248
250
  }
249
251
  }
@@ -391,7 +393,8 @@
391
393
  .paragraph {
392
394
  .text(@choiceTextSize, @choiceLineHeight, @gray17);
393
395
 
394
- .katex, mjx-container {
396
+ .katex,
397
+ mjx-container {
395
398
  color: @gray17;
396
399
  }
397
400
  }
@@ -418,7 +421,8 @@
418
421
 
419
422
  .math(@blockMathTextSize; @blockMathLineHeight;
420
423
  @inlineMathTextSize; @inlineMathLineHeight) {
421
- .katex, mjx-container {
424
+ .katex,
425
+ mjx-container {
422
426
  font-size: @inlineMathTextSize;
423
427
  line-height: @inlineMathLineHeight;
424
428
  color: @gray17;