@khanacademy/perseus 4.0.2 → 6.0.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 +57 -0
- package/dist/components/fixed-to-responsive.d.ts +27 -1
- package/dist/components/fixed-to-responsive.js.flow +27 -1
- package/dist/components/graph.d.ts +42 -26
- package/dist/components/graph.js.flow +42 -28
- package/dist/components/graphie.d.ts +34 -22
- package/dist/components/graphie.js.flow +37 -24
- package/dist/components/highlighting/highlightable-content.d.ts +4 -4
- package/dist/components/highlighting/highlightable-content.js.flow +4 -7
- package/dist/components/highlighting/ui/highlight-renderer.d.ts +6 -6
- package/dist/components/highlighting/ui/highlight-renderer.js.flow +6 -8
- package/dist/components/highlighting/ui/highlight-set-renderer.d.ts +5 -5
- package/dist/components/highlighting/ui/highlight-set-renderer.js.flow +5 -8
- package/dist/components/highlighting/ui/highlight-tooltip.d.ts +2 -2
- package/dist/components/highlighting/ui/highlight-tooltip.js.flow +2 -4
- package/dist/components/highlighting/ui/highlighting-ui.d.ts +2 -2
- package/dist/components/highlighting/ui/highlighting-ui.js.flow +2 -2
- package/dist/components/highlighting/ui/selection-tracker.d.ts +5 -5
- package/dist/components/highlighting/ui/selection-tracker.js.flow +5 -7
- package/dist/components/highlighting/word-indexer.d.ts +2 -2
- package/dist/components/highlighting/word-indexer.js.flow +2 -2
- package/dist/components/hud.d.ts +8 -14
- package/dist/components/hud.js.flow +7 -14
- package/dist/components/inline-icon.d.ts +27 -3
- package/dist/components/inline-icon.js.flow +26 -3
- package/dist/components/lint.d.ts +41 -13
- package/dist/components/lint.js.flow +42 -13
- package/dist/components/math-output.d.ts +15 -11
- package/dist/components/math-output.js.flow +15 -11
- package/dist/components/simple-keypad-input.d.ts +1 -1
- package/dist/components/simple-keypad-input.js.flow +1 -1
- package/dist/components/sortable.d.ts +17 -9
- package/dist/components/sortable.js.flow +22 -9
- package/dist/components/svg-image.d.ts +5 -3
- package/dist/components/svg-image.js.flow +5 -3
- package/dist/components/tex-buttons.d.ts +2 -2
- package/dist/components/tex-buttons.js.flow +2 -2
- package/dist/components/tooltip.d.ts +45 -4
- package/dist/components/tooltip.js.flow +44 -31
- package/dist/error-boundary.d.ts +4 -4
- package/dist/error-boundary.js.flow +4 -6
- package/dist/es/index.css +0 -3
- package/dist/es/index.js +484 -658
- package/dist/es/index.js.map +1 -1
- package/dist/index.css +0 -3
- package/dist/index.js +488 -655
- package/dist/index.js.map +1 -1
- package/dist/perseus-types.d.ts +11 -10
- package/dist/perseus-types.js.flow +11 -10
- package/dist/renderer.d.ts +2 -2
- package/dist/renderer.js.flow +1 -3
- package/dist/styles/shared.d.ts +0 -1
- package/dist/styles/shared.js.flow +0 -1
- package/dist/types.d.ts +0 -10
- package/dist/types.js.flow +0 -13
- package/dist/util/a11y.d.ts +0 -1
- package/dist/util/a11y.js.flow +0 -1
- package/dist/util/interactive.d.ts +2 -0
- package/dist/util/interactive.js.flow +2 -0
- package/dist/util.d.ts +3 -3
- package/dist/util.js.flow +4 -3
- package/dist/widgets/__stories__/test-keypad-context-wrapper.d.ts +2 -2
- package/dist/widgets/__stories__/test-keypad-context-wrapper.js.flow +2 -4
- package/dist/widgets/expression.d.ts +2 -2
- package/dist/widgets/expression.js.flow +2 -2
- package/dist/widgets/grapher.d.ts +1 -1
- package/dist/widgets/grapher.js.flow +12 -3
- package/dist/widgets/interaction/element-container.d.ts +5 -4
- package/dist/widgets/interaction/element-container.js.flow +6 -11
- package/dist/widgets/label-image/marker.d.ts +4 -4
- package/dist/widgets/label-image/marker.js.flow +4 -6
- package/dist/widgets/matcher.d.ts +7 -3
- package/dist/widgets/matcher.js.flow +7 -3
- package/dist/widgets/number-line.d.ts +1 -1
- package/dist/widgets/number-line.js.flow +1 -1
- package/dist/widgets/numeric-input.d.ts +0 -2
- package/dist/widgets/numeric-input.js.flow +0 -4
- package/dist/widgets/radio/base-radio.d.ts +7 -1
- package/dist/widgets/radio/base-radio.js.flow +7 -1
- package/dist/widgets/radio/choice-icon/choice-icon.d.ts +1 -1
- package/dist/widgets/radio/choice-icon/choice-icon.js.flow +1 -1
- package/dist/widgets/radio/choice-icon/cross-out-line.d.ts +2 -2
- package/dist/widgets/radio/choice-icon/cross-out-line.js.flow +2 -2
- package/dist/widgets/radio/focus-ring.d.ts +8 -1
- package/dist/widgets/radio/focus-ring.js.flow +8 -1
- package/dist/widgets/radio/option-status.d.ts +2 -2
- package/dist/widgets/radio/option-status.js.flow +2 -2
- package/dist/widgets/video-transcript-link.d.ts +1 -1
- package/dist/widgets/video-transcript-link.js.flow +1 -1
- package/package.json +4 -4
- package/src/__stories__/item-renderer.stories.tsx +2 -6
- package/src/__stories__/server-item-renderer.stories.tsx +2 -6
- package/src/__tests__/__snapshots__/item-renderer.test.tsx.snap +151 -159
- package/src/__tests__/__snapshots__/renderer.test.tsx.snap +358 -394
- package/src/__tests__/__snapshots__/server-item-renderer.test.tsx.snap +169 -189
- package/src/components/__stories__/button-group.stories.tsx +2 -6
- package/src/components/__stories__/fixed-to-responsive.stories.tsx +14 -16
- package/src/components/__stories__/graph.stories.tsx +3 -5
- package/src/components/__stories__/graphie.stories.tsx +3 -5
- package/src/components/__stories__/hud.stories.tsx +2 -6
- package/src/components/__stories__/icon.stories.tsx +1 -1
- package/src/components/__stories__/image-loader.stories.tsx +4 -4
- package/src/components/__stories__/info-tip.stories.tsx +2 -6
- package/src/components/__stories__/inline-icon.stories.tsx +4 -8
- package/src/components/__stories__/input-with-examples.stories.tsx +6 -10
- package/src/components/__stories__/lint.stories.tsx +62 -27
- package/src/components/__stories__/math-input.stories.tsx +4 -8
- package/src/components/__stories__/math-output.stories.tsx +3 -5
- package/src/components/__stories__/multi-button-group.stories.tsx +2 -6
- package/src/components/__stories__/number-input.stories.tsx +6 -8
- package/src/components/__stories__/prop-check-box.stories.tsx +9 -9
- package/src/components/__stories__/range-input.stories.tsx +4 -6
- package/src/components/__stories__/simple-keypad-input.stories.tsx +2 -4
- package/src/components/__stories__/sortable.stories.tsx +20 -20
- package/src/components/__stories__/stub-tag-editor.stories.tsx +5 -9
- package/src/components/__stories__/svg-image.stories.tsx +10 -18
- package/src/components/__stories__/tex.stories.tsx +1 -3
- package/src/components/__stories__/text-buttons.stories.tsx +10 -22
- package/src/components/__stories__/text-input.stories.tsx +4 -10
- package/src/components/__stories__/text-list-editor.stories.tsx +1 -3
- package/src/components/__stories__/tooltip.stories.tsx +52 -0
- package/src/components/__stories__/zoomable-tex.stories.tsx +6 -4
- package/src/components/__stories__/zoomable.stories.tsx +1 -3
- package/src/components/__tests__/__snapshots__/sortable.test.tsx.snap +114 -30
- package/src/components/__tests__/__snapshots__/sorter.test.tsx.snap +172 -204
- package/src/components/__tests__/sortable.test.tsx +54 -16
- package/src/components/__tests__/sorter.test.tsx +12 -9
- package/src/components/fixed-to-responsive.tsx +43 -38
- package/src/components/graph.tsx +95 -81
- package/src/components/graphie.tsx +62 -32
- package/src/components/highlighting/highlightable-content.tsx +4 -7
- package/src/components/highlighting/ui/highlight-renderer.tsx +6 -9
- package/src/components/highlighting/ui/highlight-set-renderer.tsx +5 -8
- package/src/components/highlighting/ui/highlight-tooltip.tsx +2 -2
- package/src/components/highlighting/ui/highlighting-ui.tsx +2 -2
- package/src/components/highlighting/ui/selection-tracker.tsx +5 -8
- package/src/components/highlighting/word-indexer.tsx +2 -2
- package/src/components/hud.tsx +104 -115
- package/src/components/inline-icon.tsx +17 -34
- package/src/components/input-with-examples.tsx +4 -4
- package/src/components/lint.tsx +47 -41
- package/src/components/math-output.tsx +17 -11
- package/src/components/simple-keypad-input.tsx +4 -4
- package/src/components/sortable.tsx +134 -94
- package/src/components/svg-image.tsx +10 -11
- package/src/components/tex-buttons.tsx +2 -2
- package/src/components/tooltip.tsx +189 -171
- package/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx +1 -3
- package/src/error-boundary.tsx +4 -7
- package/src/interactive2/types.ts +2 -2
- package/src/multi-items/__stories__/multi-renderer.stories.tsx +1 -1
- package/src/multi-items/__tests__/__snapshots__/multi-renderer.test.tsx.snap +708 -764
- package/src/multi-items/__tests__/multi-renderer.test.tsx +2 -3
- package/src/perseus-types.ts +13 -12
- package/src/renderer.tsx +11 -22
- package/src/types.ts +0 -18
- package/src/util/graphie.ts +3 -3
- package/src/util/interactive.ts +18 -5
- package/src/util/tex.ts +13 -77
- package/src/util.ts +3 -4
- package/src/widgets/__stories__/categorizer.stories.tsx +1 -1
- package/src/widgets/__stories__/cs-program.stories.tsx +1 -1
- package/src/widgets/__stories__/definition.stories.tsx +3 -7
- package/src/widgets/__stories__/dropdown.stories.tsx +1 -1
- package/src/widgets/__stories__/explanation.stories.tsx +2 -2
- package/src/widgets/__stories__/expression.stories.tsx +5 -11
- package/src/widgets/__stories__/graded-group-set.stories.tsx +1 -1
- package/src/widgets/__stories__/graded-group.stories.tsx +1 -1
- package/src/widgets/__stories__/grapher.stories.tsx +7 -21
- package/src/widgets/__stories__/group.stories.tsx +1 -1
- package/src/widgets/__stories__/iframe.stories.tsx +1 -1
- package/src/widgets/__stories__/image.stories.tsx +1 -1
- package/src/widgets/__stories__/input-number.stories.tsx +3 -12
- package/src/widgets/__stories__/interaction.stories.tsx +1 -1
- package/src/widgets/__stories__/interactive-graph.stories.tsx +9 -9
- package/src/widgets/__stories__/matcher.stories.tsx +1 -1
- package/src/widgets/__stories__/matrix.stories.tsx +1 -1
- package/src/widgets/__stories__/number-line.stories.tsx +1 -1
- package/src/widgets/__stories__/numeric-input.stories.tsx +3 -5
- package/src/widgets/__stories__/orderer.stories.tsx +1 -1
- package/src/widgets/__stories__/passage-ref.stories.tsx +2 -2
- package/src/widgets/__stories__/passage.stories.tsx +3 -9
- package/src/widgets/__stories__/radio.stories.tsx +3 -5
- package/src/widgets/__stories__/sorter.stories.tsx +1 -1
- package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +2 -4
- package/src/widgets/__stories__/transformer.stories.tsx +1 -1
- package/src/widgets/__stories__/unit.stories.tsx +1 -3
- package/src/widgets/__stories__/video-transcript-link.stories.tsx +2 -6
- package/src/widgets/__stories__/video.stories.tsx +1 -1
- package/src/widgets/__testdata__/group.testdata.ts +0 -2
- package/src/widgets/__tests__/__snapshots__/categorizer.test.ts.snap +717 -773
- package/src/widgets/__tests__/__snapshots__/cs-program.test.ts.snap +28 -36
- package/src/widgets/__tests__/__snapshots__/definition.test.ts.snap +52 -60
- package/src/widgets/__tests__/__snapshots__/dropdown.test.ts.snap +100 -108
- package/src/widgets/__tests__/__snapshots__/explanation.test.ts.snap +212 -260
- package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt.test.ts.snap +613 -641
- package/src/widgets/__tests__/__snapshots__/graded-group-set.test.ts.snap +249 -261
- package/src/widgets/__tests__/__snapshots__/graded-group.test.ts.snap +671 -735
- package/src/widgets/__tests__/__snapshots__/grapher.test.ts.snap +2676 -2684
- package/src/widgets/__tests__/__snapshots__/group.test.tsx.snap +938 -1002
- package/src/widgets/__tests__/__snapshots__/iframe.test.ts.snap +28 -36
- package/src/widgets/__tests__/__snapshots__/image.test.ts.snap +227 -255
- package/src/widgets/__tests__/__snapshots__/input-number.test.ts.snap +353 -357
- package/src/widgets/__tests__/__snapshots__/interaction.test.ts.snap +255 -259
- package/src/widgets/__tests__/__snapshots__/interactive-graph.test.ts.snap +2401 -2433
- package/src/widgets/__tests__/__snapshots__/matcher.test.tsx.snap +600 -756
- package/src/widgets/__tests__/__snapshots__/matrix.test.ts.snap +420 -428
- package/src/widgets/__tests__/__snapshots__/number-line.test.ts.snap +762 -770
- package/src/widgets/__tests__/__snapshots__/numeric-input.test.ts.snap +373 -393
- package/src/widgets/__tests__/__snapshots__/orderer.test.ts.snap +116 -148
- package/src/widgets/__tests__/__snapshots__/passage-ref.test.ts.snap +289 -301
- package/src/widgets/__tests__/__snapshots__/passage.test.tsx.snap +1679 -1711
- package/src/widgets/__tests__/__snapshots__/radio.test.ts.snap +2692 -2960
- package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +90 -98
- package/src/widgets/__tests__/group.test.tsx +0 -2
- package/src/widgets/__tests__/matcher.test.tsx +33 -9
- package/src/widgets/__tests__/radio/focus-ring.test.tsx +0 -1
- package/src/widgets/expression.tsx +12 -9
- package/src/widgets/grapher.tsx +3 -3
- package/src/widgets/image.tsx +2 -2
- package/src/widgets/interaction/element-container.tsx +7 -8
- package/src/widgets/interactive-graph.tsx +5 -5
- package/src/widgets/label-image/__stories__/answer-choices.stories.tsx +2 -4
- package/src/widgets/label-image/__stories__/marker.stories.tsx +9 -19
- package/src/widgets/label-image/marker.tsx +4 -4
- package/src/widgets/matcher.tsx +43 -24
- package/src/widgets/number-line.tsx +1 -1
- package/src/widgets/numeric-input.tsx +0 -3
- package/src/widgets/passage/passage-markdown.tsx +2 -2
- package/src/widgets/radio/__stories__/base-radio.stories.tsx +11 -19
- package/src/widgets/radio/__stories__/choice-icon.stories.tsx +9 -11
- package/src/widgets/radio/__stories__/choice-none-above.stories.tsx +1 -1
- package/src/widgets/radio/__stories__/choice.stories.tsx +4 -4
- package/src/widgets/radio/__stories__/focus-ring.stories.tsx +1 -1
- package/src/widgets/radio/__stories__/option-status.stories.tsx +2 -4
- package/src/widgets/radio/base-radio.tsx +1 -1
- package/src/widgets/radio/choice-icon/choice-icon.tsx +5 -5
- package/src/widgets/radio/choice-icon/cross-out-line.tsx +1 -3
- package/src/widgets/radio/choice-none-above.tsx +2 -2
- package/src/widgets/radio/choice.tsx +1 -3
- package/src/widgets/radio/focus-ring.tsx +1 -1
- package/src/widgets/radio/option-status.tsx +2 -4
- package/src/widgets/radio/widget.tsx +0 -1
- package/src/widgets/reaction-diagram.tsx +2 -2
- package/src/widgets/simulator.tsx +4 -6
- package/src/widgets/video-transcript-link.tsx +1 -1
- package/{tsconfig.json → tsconfig-build.json} +6 -6
- package/tsconfig-build.tsbuildinfo +1 -0
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -14,9 +14,7 @@ export default {
|
|
|
14
14
|
|
|
15
15
|
const svgUrl = "http://www.khanacademy.org/images/ohnoes-concerned.svg";
|
|
16
16
|
|
|
17
|
-
export const TextOnMouseover: React.
|
|
18
|
-
args,
|
|
19
|
-
): React.ReactElement => {
|
|
17
|
+
export const TextOnMouseover = (args: StoryArgs): React.ReactElement => {
|
|
20
18
|
return (
|
|
21
19
|
<InfoTip>
|
|
22
20
|
<span>Sample text</span>
|
|
@@ -24,9 +22,7 @@ export const TextOnMouseover: React.FC<StoryArgs> = (
|
|
|
24
22
|
);
|
|
25
23
|
};
|
|
26
24
|
|
|
27
|
-
export const ImageOnMouseover: React.
|
|
28
|
-
args,
|
|
29
|
-
): React.ReactElement => {
|
|
25
|
+
export const ImageOnMouseover = (args: StoryArgs): React.ReactElement => {
|
|
30
26
|
return (
|
|
31
27
|
<InfoTip>
|
|
32
28
|
<img alt="" src={svgUrl} />
|
|
@@ -18,14 +18,12 @@ export default {
|
|
|
18
18
|
title: "Perseus/Components/Inline Icon",
|
|
19
19
|
} as Story;
|
|
20
20
|
|
|
21
|
-
export const BasicIconPathAndSizing: React.
|
|
22
|
-
args,
|
|
23
|
-
): React.ReactElement => {
|
|
21
|
+
export const BasicIconPathAndSizing = (args: StoryArgs): React.ReactElement => {
|
|
24
22
|
return <InlineIcon {...defaultPath} />;
|
|
25
23
|
};
|
|
26
24
|
|
|
27
|
-
export const BasicIconWithAdditionalStyling
|
|
28
|
-
args,
|
|
25
|
+
export const BasicIconWithAdditionalStyling = (
|
|
26
|
+
args: StoryArgs,
|
|
29
27
|
): React.ReactElement => {
|
|
30
28
|
return (
|
|
31
29
|
<InlineIcon
|
|
@@ -37,8 +35,6 @@ export const BasicIconWithAdditionalStyling: React.FC<StoryArgs> = (
|
|
|
37
35
|
);
|
|
38
36
|
};
|
|
39
37
|
|
|
40
|
-
export const BasicIconWithAriaTitle: React.
|
|
41
|
-
args,
|
|
42
|
-
): React.ReactElement => {
|
|
38
|
+
export const BasicIconWithAriaTitle = (args: StoryArgs): React.ReactElement => {
|
|
43
39
|
return <InlineIcon {...defaultPath} title="Sample ARIA title" />;
|
|
44
40
|
};
|
|
@@ -20,20 +20,18 @@ const defaultObject = {
|
|
|
20
20
|
} as const;
|
|
21
21
|
const testExamples = ["Sample 1", "Sample 2", "Sample 3"];
|
|
22
22
|
|
|
23
|
-
export const DefaultAndMostlyEmptyProps
|
|
24
|
-
args,
|
|
23
|
+
export const DefaultAndMostlyEmptyProps = (
|
|
24
|
+
args: StoryArgs,
|
|
25
25
|
): React.ReactElement => {
|
|
26
26
|
return <InputWithExamples {...defaultObject} />;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
export const ListOfExamples: React.
|
|
30
|
-
args,
|
|
31
|
-
): React.ReactElement => {
|
|
29
|
+
export const ListOfExamples = (args: StoryArgs): React.ReactElement => {
|
|
32
30
|
return <InputWithExamples {...defaultObject} examples={testExamples} />;
|
|
33
31
|
};
|
|
34
32
|
|
|
35
|
-
export const AriaLabelTextWithListOfExamples
|
|
36
|
-
args,
|
|
33
|
+
export const AriaLabelTextWithListOfExamples = (
|
|
34
|
+
args: StoryArgs,
|
|
37
35
|
): React.ReactElement => {
|
|
38
36
|
return (
|
|
39
37
|
<InputWithExamples
|
|
@@ -44,9 +42,7 @@ export const AriaLabelTextWithListOfExamples: React.FC<StoryArgs> = (
|
|
|
44
42
|
);
|
|
45
43
|
};
|
|
46
44
|
|
|
47
|
-
export const DisabledInput: React.
|
|
48
|
-
args,
|
|
49
|
-
): React.ReactElement => {
|
|
45
|
+
export const DisabledInput = (args: StoryArgs): React.ReactElement => {
|
|
50
46
|
return (
|
|
51
47
|
<InputWithExamples
|
|
52
48
|
{...defaultObject}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import Lint from "../lint";
|
|
4
|
+
|
|
5
|
+
import type {Meta} from "@storybook/react";
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
title:
|
|
7
|
+
const meta: Meta<typeof Lint> = {
|
|
8
|
+
title: "Perseus/Components/Lint",
|
|
7
9
|
};
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
export default meta;
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
title: "Perseus/Components/Lint",
|
|
13
|
-
} as Story;
|
|
13
|
+
type StoryArgs = Record<any, any>;
|
|
14
14
|
|
|
15
15
|
const defaultObject = {
|
|
16
16
|
children: <div>This is the sample lint child</div>,
|
|
@@ -19,33 +19,68 @@ const defaultObject = {
|
|
|
19
19
|
ruleName: "Test rule",
|
|
20
20
|
} as const;
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
const Container = ({children}: {children: React.ReactNode}) => {
|
|
23
|
+
return (
|
|
24
|
+
<div
|
|
25
|
+
style={{
|
|
26
|
+
width: "250px",
|
|
27
|
+
padding: "8px",
|
|
28
|
+
margin: "20px",
|
|
29
|
+
border: "solid 1px grey",
|
|
30
|
+
}}
|
|
31
|
+
>
|
|
32
|
+
{children}
|
|
33
|
+
</div>
|
|
34
|
+
);
|
|
26
35
|
};
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
|
|
37
|
+
export const DefaultLintContainerAndMessage = (
|
|
38
|
+
args: StoryArgs,
|
|
29
39
|
): React.ReactElement => {
|
|
30
|
-
return
|
|
40
|
+
return (
|
|
41
|
+
<Container>
|
|
42
|
+
<Lint {...defaultObject} />
|
|
43
|
+
</Container>
|
|
44
|
+
);
|
|
31
45
|
};
|
|
32
|
-
export const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
46
|
+
export const LintSeverity1Error = (args: StoryArgs): React.ReactElement => {
|
|
47
|
+
return (
|
|
48
|
+
<Container>
|
|
49
|
+
<Lint {...defaultObject} severity={1} />
|
|
50
|
+
</Container>
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
export const LintSeverity2Warning = (args: StoryArgs): React.ReactElement => {
|
|
54
|
+
return (
|
|
55
|
+
<Container>
|
|
56
|
+
<Lint {...defaultObject} severity={2} />
|
|
57
|
+
</Container>
|
|
58
|
+
);
|
|
36
59
|
};
|
|
37
|
-
export const
|
|
38
|
-
args,
|
|
60
|
+
export const LintSeverity3Recommendation = (
|
|
61
|
+
args: StoryArgs,
|
|
39
62
|
): React.ReactElement => {
|
|
40
|
-
return
|
|
63
|
+
return (
|
|
64
|
+
<Container>
|
|
65
|
+
<Lint {...defaultObject} severity={3} />
|
|
66
|
+
</Container>
|
|
67
|
+
);
|
|
41
68
|
};
|
|
42
|
-
export const
|
|
43
|
-
args,
|
|
69
|
+
export const LintSeverity4OfflineReportingOnly = (
|
|
70
|
+
args: StoryArgs,
|
|
44
71
|
): React.ReactElement => {
|
|
45
|
-
return
|
|
72
|
+
return (
|
|
73
|
+
<Container>
|
|
74
|
+
<Lint {...defaultObject} severity={4} />
|
|
75
|
+
</Container>
|
|
76
|
+
);
|
|
46
77
|
};
|
|
47
|
-
export const InlineLintContainerAndMessage
|
|
48
|
-
args,
|
|
78
|
+
export const InlineLintContainerAndMessage = (
|
|
79
|
+
args: StoryArgs,
|
|
49
80
|
): React.ReactElement => {
|
|
50
|
-
return
|
|
81
|
+
return (
|
|
82
|
+
<Container>
|
|
83
|
+
<Lint {...defaultObject} inline={true} />
|
|
84
|
+
</Container>
|
|
85
|
+
);
|
|
51
86
|
};
|
|
@@ -17,18 +17,14 @@ const defaultObject = {
|
|
|
17
17
|
onChange: () => {},
|
|
18
18
|
} as const;
|
|
19
19
|
|
|
20
|
-
export const DefaultWithBasicButtonSet
|
|
21
|
-
args,
|
|
20
|
+
export const DefaultWithBasicButtonSet = (
|
|
21
|
+
args: StoryArgs,
|
|
22
22
|
): React.ReactElement => {
|
|
23
23
|
return <MathInput {...defaultObject} />;
|
|
24
24
|
};
|
|
25
|
-
export const AlwaysVisibleButtonSet: React.
|
|
26
|
-
args,
|
|
27
|
-
): React.ReactElement => {
|
|
25
|
+
export const AlwaysVisibleButtonSet = (args: StoryArgs): React.ReactElement => {
|
|
28
26
|
return <MathInput {...defaultObject} buttonsVisible="always" />;
|
|
29
27
|
};
|
|
30
|
-
export const DefaultWithAriaLabel: React.
|
|
31
|
-
args,
|
|
32
|
-
): React.ReactElement => {
|
|
28
|
+
export const DefaultWithAriaLabel = (args: StoryArgs): React.ReactElement => {
|
|
33
29
|
return <MathInput {...defaultObject} labelText="Sample label" />;
|
|
34
30
|
};
|
|
@@ -12,14 +12,12 @@ export default {
|
|
|
12
12
|
title: "Perseus/Components/Math Ouput",
|
|
13
13
|
} as Story;
|
|
14
14
|
|
|
15
|
-
export const EmptyPropsObject: React.
|
|
16
|
-
args,
|
|
17
|
-
): React.ReactElement => {
|
|
15
|
+
export const EmptyPropsObject = (args: StoryArgs): React.ReactElement => {
|
|
18
16
|
return <MathOutput />;
|
|
19
17
|
};
|
|
20
|
-
export const StringValue
|
|
18
|
+
export const StringValue = (args: StoryArgs): React.ReactElement => {
|
|
21
19
|
return <MathOutput value="Test string value" />;
|
|
22
20
|
};
|
|
23
|
-
export const NumericValue
|
|
21
|
+
export const NumericValue = (args: StoryArgs): React.ReactElement => {
|
|
24
22
|
return <MathOutput value={1234567890} />;
|
|
25
23
|
};
|
|
@@ -39,9 +39,7 @@ const HarnassedButtonGroup = (
|
|
|
39
39
|
);
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
-
export const ButtonsWithNoTitles: React.
|
|
43
|
-
args,
|
|
44
|
-
): React.ReactElement => {
|
|
42
|
+
export const ButtonsWithNoTitles = (args: StoryArgs): React.ReactElement => {
|
|
45
43
|
return (
|
|
46
44
|
<HarnassedButtonGroup
|
|
47
45
|
{...args}
|
|
@@ -54,9 +52,7 @@ export const ButtonsWithNoTitles: React.FC<StoryArgs> = (
|
|
|
54
52
|
);
|
|
55
53
|
};
|
|
56
54
|
|
|
57
|
-
export const ButtonsWithTitles: React.
|
|
58
|
-
args,
|
|
59
|
-
): React.ReactElement => {
|
|
55
|
+
export const ButtonsWithTitles = (args: StoryArgs): React.ReactElement => {
|
|
60
56
|
return (
|
|
61
57
|
<HarnassedButtonGroup
|
|
62
58
|
{...args}
|
|
@@ -16,28 +16,26 @@ export default {
|
|
|
16
16
|
title: "Perseus/Components/Number Input",
|
|
17
17
|
} as Story;
|
|
18
18
|
|
|
19
|
-
export const EmptyPropsObject: React.
|
|
20
|
-
args,
|
|
21
|
-
): React.ReactElement => {
|
|
19
|
+
export const EmptyPropsObject = (args: StoryArgs): React.ReactElement => {
|
|
22
20
|
return <NumberInput {...defaultObject} />;
|
|
23
21
|
};
|
|
24
22
|
|
|
25
|
-
export const SampleValue
|
|
23
|
+
export const SampleValue = (args: StoryArgs): React.ReactElement => {
|
|
26
24
|
return <NumberInput {...defaultObject} value={1234567890} />;
|
|
27
25
|
};
|
|
28
26
|
|
|
29
|
-
export const Placeholder
|
|
27
|
+
export const Placeholder = (args: StoryArgs): React.ReactElement => {
|
|
30
28
|
return <NumberInput {...defaultObject} placeholder="Sample placeholder" />;
|
|
31
29
|
};
|
|
32
30
|
|
|
33
|
-
export const SizeMini
|
|
31
|
+
export const SizeMini = (args: StoryArgs): React.ReactElement => {
|
|
34
32
|
return <NumberInput {...defaultObject} placeholder="Sample placeholder" />;
|
|
35
33
|
};
|
|
36
34
|
|
|
37
|
-
export const SizeSmall
|
|
35
|
+
export const SizeSmall = (args: StoryArgs): React.ReactElement => {
|
|
38
36
|
return <NumberInput {...defaultObject} size="small" />;
|
|
39
37
|
};
|
|
40
38
|
|
|
41
|
-
export const SizeNormal
|
|
39
|
+
export const SizeNormal = (args: StoryArgs): React.ReactElement => {
|
|
42
40
|
return <NumberInput {...defaultObject} size="normal" />;
|
|
43
41
|
};
|
|
@@ -12,8 +12,8 @@ export default {
|
|
|
12
12
|
title: "Perseus/Components/Prop Check Box",
|
|
13
13
|
} as Story;
|
|
14
14
|
|
|
15
|
-
export const TestLabelWithCheckedObject
|
|
16
|
-
args,
|
|
15
|
+
export const TestLabelWithCheckedObject = (
|
|
16
|
+
args: StoryArgs,
|
|
17
17
|
): React.ReactElement => {
|
|
18
18
|
return (
|
|
19
19
|
<PropCheckBox
|
|
@@ -25,8 +25,8 @@ export const TestLabelWithCheckedObject: React.FC<StoryArgs> = (
|
|
|
25
25
|
);
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
export const TestLabelWithUncheckedObject
|
|
29
|
-
args,
|
|
28
|
+
export const TestLabelWithUncheckedObject = (
|
|
29
|
+
args: StoryArgs,
|
|
30
30
|
): React.ReactElement => {
|
|
31
31
|
return (
|
|
32
32
|
<PropCheckBox
|
|
@@ -38,8 +38,8 @@ export const TestLabelWithUncheckedObject: React.FC<StoryArgs> = (
|
|
|
38
38
|
);
|
|
39
39
|
};
|
|
40
40
|
|
|
41
|
-
export const TestLabelWithCheckedObjectLabelOnTheRight
|
|
42
|
-
args,
|
|
41
|
+
export const TestLabelWithCheckedObjectLabelOnTheRight = (
|
|
42
|
+
args: StoryArgs,
|
|
43
43
|
): React.ReactElement => {
|
|
44
44
|
return (
|
|
45
45
|
<PropCheckBox
|
|
@@ -51,9 +51,9 @@ export const TestLabelWithCheckedObjectLabelOnTheRight: React.FC<StoryArgs> = (
|
|
|
51
51
|
);
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
-
export const TestLabelWithUncheckedObjectLabelOnTheRight
|
|
55
|
-
StoryArgs
|
|
56
|
-
|
|
54
|
+
export const TestLabelWithUncheckedObjectLabelOnTheRight = (
|
|
55
|
+
args: StoryArgs,
|
|
56
|
+
): React.ReactElement => {
|
|
57
57
|
return (
|
|
58
58
|
<PropCheckBox
|
|
59
59
|
test={false}
|
|
@@ -12,19 +12,17 @@ export default {
|
|
|
12
12
|
title: "Perseus/Components/Range Input",
|
|
13
13
|
} as Story;
|
|
14
14
|
|
|
15
|
-
export const EmptyValueArray: React.
|
|
16
|
-
args,
|
|
17
|
-
): React.ReactElement => {
|
|
15
|
+
export const EmptyValueArray = (args: StoryArgs): React.ReactElement => {
|
|
18
16
|
return <RangeInput onChange={() => {}} value={[]} />;
|
|
19
17
|
};
|
|
20
18
|
|
|
21
|
-
export const SimpleWithSmallValueRanges
|
|
22
|
-
args,
|
|
19
|
+
export const SimpleWithSmallValueRanges = (
|
|
20
|
+
args: StoryArgs,
|
|
23
21
|
): React.ReactElement => {
|
|
24
22
|
return <RangeInput onChange={() => {}} value={[-10, 10]} />;
|
|
25
23
|
};
|
|
26
24
|
|
|
27
|
-
export const Placeholders
|
|
25
|
+
export const Placeholders = (args: StoryArgs): React.ReactElement => {
|
|
28
26
|
return (
|
|
29
27
|
<RangeInput onChange={() => {}} placeholder={["?", "!"]} value={[]} />
|
|
30
28
|
);
|
|
@@ -18,12 +18,10 @@ export default {
|
|
|
18
18
|
title: "Perseus/Components/Simple Keypad Input",
|
|
19
19
|
} as Story;
|
|
20
20
|
|
|
21
|
-
export const EmptyPropsObject: React.
|
|
22
|
-
args,
|
|
23
|
-
): React.ReactElement => {
|
|
21
|
+
export const EmptyPropsObject = (args: StoryArgs): React.ReactElement => {
|
|
24
22
|
return <SimpleKeypadInput {...defaultObject} />;
|
|
25
23
|
};
|
|
26
24
|
|
|
27
|
-
export const CustomValue
|
|
25
|
+
export const CustomValue = (args: StoryArgs): React.ReactElement => {
|
|
28
26
|
return <SimpleKeypadInput {...defaultObject} value="Test value" />;
|
|
29
27
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
|
|
3
|
-
import Sortable from "../sortable";
|
|
3
|
+
import Sortable, {Layout} from "../sortable";
|
|
4
4
|
|
|
5
5
|
type StoryArgs = Record<any, any>;
|
|
6
6
|
|
|
@@ -14,57 +14,57 @@ export default {
|
|
|
14
14
|
title: "Perseus/Components/Sortable",
|
|
15
15
|
} as Story;
|
|
16
16
|
|
|
17
|
-
export const SortableHorizontalExample
|
|
18
|
-
args,
|
|
17
|
+
export const SortableHorizontalExample = (
|
|
18
|
+
args: StoryArgs,
|
|
19
19
|
): React.ReactElement => {
|
|
20
20
|
return (
|
|
21
21
|
<Sortable
|
|
22
|
-
layout=
|
|
22
|
+
layout={Layout.HORIZONTAL}
|
|
23
23
|
options={["a", "b", "c"]}
|
|
24
|
-
|
|
24
|
+
waitForTexRendererToLoad={false}
|
|
25
25
|
/>
|
|
26
26
|
);
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
export const SortableVerticalExample
|
|
30
|
-
args,
|
|
29
|
+
export const SortableVerticalExample = (
|
|
30
|
+
args: StoryArgs,
|
|
31
31
|
): React.ReactElement => {
|
|
32
32
|
return (
|
|
33
33
|
<Sortable
|
|
34
|
-
layout=
|
|
34
|
+
layout={Layout.VERTICAL}
|
|
35
35
|
options={["a", "b", "c"]}
|
|
36
|
-
|
|
36
|
+
waitForTexRendererToLoad={false}
|
|
37
37
|
/>
|
|
38
38
|
);
|
|
39
39
|
};
|
|
40
40
|
|
|
41
|
-
export const BasicSortableOptionsTest
|
|
42
|
-
args,
|
|
41
|
+
export const BasicSortableOptionsTest = (
|
|
42
|
+
args: StoryArgs,
|
|
43
43
|
): React.ReactElement => {
|
|
44
44
|
return <Sortable options={defaultOptions} />;
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
-
export const BasicSortableOptionsTestWithNoPadding
|
|
48
|
-
args,
|
|
47
|
+
export const BasicSortableOptionsTestWithNoPadding = (
|
|
48
|
+
args: StoryArgs,
|
|
49
49
|
): React.ReactElement => {
|
|
50
50
|
return <Sortable options={defaultOptions} padding={false} />;
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
export const BasicSortableOptionsTestWithLargeMargin
|
|
54
|
-
args,
|
|
53
|
+
export const BasicSortableOptionsTestWithLargeMargin = (
|
|
54
|
+
args: StoryArgs,
|
|
55
55
|
): React.ReactElement => {
|
|
56
56
|
return <Sortable options={defaultOptions} margin={64} />;
|
|
57
57
|
};
|
|
58
58
|
|
|
59
|
-
export const BasicSortableOptionsTestDisabled
|
|
60
|
-
args,
|
|
59
|
+
export const BasicSortableOptionsTestDisabled = (
|
|
60
|
+
args: StoryArgs,
|
|
61
61
|
): React.ReactElement => {
|
|
62
62
|
return <Sortable options={defaultOptions} disabled={true} />;
|
|
63
63
|
};
|
|
64
64
|
|
|
65
|
-
export const BasicSortableOptionsTestWithWidthAndHeightConstraints
|
|
66
|
-
StoryArgs
|
|
67
|
-
|
|
65
|
+
export const BasicSortableOptionsTestWithWidthAndHeightConstraints = (
|
|
66
|
+
args: StoryArgs,
|
|
67
|
+
): React.ReactElement => {
|
|
68
68
|
return (
|
|
69
69
|
<Sortable
|
|
70
70
|
options={defaultOptions}
|
|
@@ -14,19 +14,15 @@ export default {
|
|
|
14
14
|
|
|
15
15
|
const defaultValues = ["Test value 1", "Test value 2", "Test value 3"];
|
|
16
16
|
|
|
17
|
-
export const ShowingTitle
|
|
17
|
+
export const ShowingTitle = (args: StoryArgs): React.ReactElement => {
|
|
18
18
|
return <StubTagEditor onChange={() => {}} showTitle={true} />;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
export const NotShowingTitle: React.
|
|
22
|
-
args,
|
|
23
|
-
): React.ReactElement => {
|
|
21
|
+
export const NotShowingTitle = (args: StoryArgs): React.ReactElement => {
|
|
24
22
|
return <StubTagEditor onChange={() => {}} showTitle={false} />;
|
|
25
23
|
};
|
|
26
24
|
|
|
27
|
-
export const ShowingTitleWithValue: React.
|
|
28
|
-
args,
|
|
29
|
-
): React.ReactElement => {
|
|
25
|
+
export const ShowingTitleWithValue = (args: StoryArgs): React.ReactElement => {
|
|
30
26
|
return (
|
|
31
27
|
<StubTagEditor
|
|
32
28
|
onChange={() => {}}
|
|
@@ -36,8 +32,8 @@ export const ShowingTitleWithValue: React.FC<StoryArgs> = (
|
|
|
36
32
|
);
|
|
37
33
|
};
|
|
38
34
|
|
|
39
|
-
export const NotShowingTitleWithValue
|
|
40
|
-
args,
|
|
35
|
+
export const NotShowingTitleWithValue = (
|
|
36
|
+
args: StoryArgs,
|
|
41
37
|
): React.ReactElement => {
|
|
42
38
|
return (
|
|
43
39
|
<StubTagEditor
|
|
@@ -17,15 +17,11 @@ const imgUrl = "https://www.khanacademy.org/images/hand-tree.new.png";
|
|
|
17
17
|
const graphieUrl =
|
|
18
18
|
"web+graphie://ka-perseus-graphie.s3.amazonaws.com/1e06f6d4071f30cee2cc3ccb7435b3a66a62fe3f";
|
|
19
19
|
|
|
20
|
-
export const MostlyEmptyPropsObject: React.
|
|
21
|
-
args,
|
|
22
|
-
): React.ReactElement => {
|
|
20
|
+
export const MostlyEmptyPropsObject = (args: StoryArgs): React.ReactElement => {
|
|
23
21
|
return <SvgImage alt="ALT" />;
|
|
24
22
|
};
|
|
25
23
|
|
|
26
|
-
export const SvgImageThatDoesntLoad: React.
|
|
27
|
-
args,
|
|
28
|
-
): React.ReactElement => {
|
|
24
|
+
export const SvgImageThatDoesntLoad = (args: StoryArgs): React.ReactElement => {
|
|
29
25
|
return (
|
|
30
26
|
<SvgImage
|
|
31
27
|
alt="ALT"
|
|
@@ -36,26 +32,22 @@ export const SvgImageThatDoesntLoad: React.FC<StoryArgs> = (
|
|
|
36
32
|
);
|
|
37
33
|
};
|
|
38
34
|
|
|
39
|
-
export const SvgImageBasic: React.
|
|
40
|
-
args,
|
|
41
|
-
): React.ReactElement => {
|
|
35
|
+
export const SvgImageBasic = (args: StoryArgs): React.ReactElement => {
|
|
42
36
|
return <SvgImage src={svgUrl} alt="ALT" />;
|
|
43
37
|
};
|
|
44
38
|
|
|
45
|
-
export const SvgImageWithFixedHeight
|
|
46
|
-
args,
|
|
39
|
+
export const SvgImageWithFixedHeight = (
|
|
40
|
+
args: StoryArgs,
|
|
47
41
|
): React.ReactElement => {
|
|
48
42
|
return <SvgImage height={50} src={svgUrl} alt="ALT" />;
|
|
49
43
|
};
|
|
50
44
|
|
|
51
|
-
export const SvgImageWithFixedWidth: React.
|
|
52
|
-
args,
|
|
53
|
-
): React.ReactElement => {
|
|
45
|
+
export const SvgImageWithFixedWidth = (args: StoryArgs): React.ReactElement => {
|
|
54
46
|
return <SvgImage src={svgUrl} width={50} alt="ALT" />;
|
|
55
47
|
};
|
|
56
48
|
|
|
57
|
-
export const SvgImageWithExtraGraphieProps
|
|
58
|
-
args,
|
|
49
|
+
export const SvgImageWithExtraGraphieProps = (
|
|
50
|
+
args: StoryArgs,
|
|
59
51
|
): React.ReactElement => {
|
|
60
52
|
return (
|
|
61
53
|
<SvgImage
|
|
@@ -73,10 +65,10 @@ export const SvgImageWithExtraGraphieProps: React.FC<StoryArgs> = (
|
|
|
73
65
|
);
|
|
74
66
|
};
|
|
75
67
|
|
|
76
|
-
export const PngImage
|
|
68
|
+
export const PngImage = (args: StoryArgs): React.ReactElement => {
|
|
77
69
|
return <SvgImage src={imgUrl} alt="ALT" />;
|
|
78
70
|
};
|
|
79
71
|
|
|
80
|
-
export const GraphieImage
|
|
72
|
+
export const GraphieImage = (args: StoryArgs): React.ReactElement => {
|
|
81
73
|
return <SvgImage src={graphieUrl} alt="ALT" />;
|
|
82
74
|
};
|
|
@@ -18,8 +18,6 @@ export default {
|
|
|
18
18
|
},
|
|
19
19
|
} as Story;
|
|
20
20
|
|
|
21
|
-
export const BasicOperation: React.
|
|
22
|
-
args,
|
|
23
|
-
): React.ReactElement => {
|
|
21
|
+
export const BasicOperation = (args: StoryArgs): React.ReactElement => {
|
|
24
22
|
return <TeX setAssetStatus={() => {}} children={args.equation} />;
|
|
25
23
|
};
|
|
@@ -12,51 +12,39 @@ export default {
|
|
|
12
12
|
title: "Perseus/Components/Tex Buttons",
|
|
13
13
|
} as Story;
|
|
14
14
|
|
|
15
|
-
export const ButtonSetBasic: React.
|
|
16
|
-
args,
|
|
17
|
-
): React.ReactElement => {
|
|
15
|
+
export const ButtonSetBasic = (args: StoryArgs): React.ReactElement => {
|
|
18
16
|
return <TexButtons sets={["basic"]} onInsert={() => {}} />;
|
|
19
17
|
};
|
|
20
18
|
|
|
21
|
-
export const ButtonSetBasicDiv: React.
|
|
22
|
-
args,
|
|
23
|
-
): React.ReactElement => {
|
|
19
|
+
export const ButtonSetBasicDiv = (args: StoryArgs): React.ReactElement => {
|
|
24
20
|
return <TexButtons sets={["basic+div"]} onInsert={() => {}} />;
|
|
25
21
|
};
|
|
26
22
|
|
|
27
|
-
export const ButtonSetTrig: React.
|
|
28
|
-
args,
|
|
29
|
-
): React.ReactElement => {
|
|
23
|
+
export const ButtonSetTrig = (args: StoryArgs): React.ReactElement => {
|
|
30
24
|
return <TexButtons sets={["trig"]} onInsert={() => {}} />;
|
|
31
25
|
};
|
|
32
26
|
|
|
33
|
-
export const ButtonSetPrealgebra: React.
|
|
34
|
-
args,
|
|
35
|
-
): React.ReactElement => {
|
|
27
|
+
export const ButtonSetPrealgebra = (args: StoryArgs): React.ReactElement => {
|
|
36
28
|
return <TexButtons sets={["prealgebra"]} onInsert={() => {}} />;
|
|
37
29
|
};
|
|
38
30
|
|
|
39
|
-
export const ButtonSetLogarithms: React.
|
|
40
|
-
args,
|
|
41
|
-
): React.ReactElement => {
|
|
31
|
+
export const ButtonSetLogarithms = (args: StoryArgs): React.ReactElement => {
|
|
42
32
|
return <TexButtons sets={["logarithms"]} onInsert={() => {}} />;
|
|
43
33
|
};
|
|
44
34
|
|
|
45
|
-
export const ButtonSetBasicRelations
|
|
46
|
-
args,
|
|
35
|
+
export const ButtonSetBasicRelations = (
|
|
36
|
+
args: StoryArgs,
|
|
47
37
|
): React.ReactElement => {
|
|
48
38
|
return <TexButtons sets={["basic relations"]} onInsert={() => {}} />;
|
|
49
39
|
};
|
|
50
40
|
|
|
51
|
-
export const ButtonSetAdvancedRelations
|
|
52
|
-
args,
|
|
41
|
+
export const ButtonSetAdvancedRelations = (
|
|
42
|
+
args: StoryArgs,
|
|
53
43
|
): React.ReactElement => {
|
|
54
44
|
return <TexButtons sets={["advanced relations"]} onInsert={() => {}} />;
|
|
55
45
|
};
|
|
56
46
|
|
|
57
|
-
export const ButtonSetMultiple: React.
|
|
58
|
-
args,
|
|
59
|
-
): React.ReactElement => {
|
|
47
|
+
export const ButtonSetMultiple = (args: StoryArgs): React.ReactElement => {
|
|
60
48
|
return (
|
|
61
49
|
<TexButtons
|
|
62
50
|
sets={["basic", "trig", "advanced relations"]}
|