@codecademy/codebytes 1.3.0-alpha.c459366758.0 → 2.0.0-alpha.319255f0ae.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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@codecademy/codebytes",
3
3
  "description": "Codebytes Editor",
4
- "version": "1.3.0-alpha.c459366758.0",
4
+ "version": "2.0.0-alpha.319255f0ae.0",
5
5
  "author": "Codecademy Engineering <dev@codecademy.com>",
6
6
  "dependencies": {
7
7
  "@monaco-editor/react": "^4.4.5",
@@ -17,7 +17,7 @@
17
17
  "@codecademy/gamut": "*",
18
18
  "@codecademy/gamut-icons": "*",
19
19
  "@codecademy/gamut-styles": "*",
20
- "@codecademy/tracking": "1.2.0-alpha.c459366758.0",
20
+ "@codecademy/tracking": "2.0.0-alpha.319255f0ae.0",
21
21
  "@codecademy/variance": "*",
22
22
  "@emotion/styled": "^11.3.0",
23
23
  "monaco-editor": "*",
@@ -1,32 +0,0 @@
1
- export declare const syntax: {
2
- attribute: "#b4d353";
3
- annotation: "#ea6c8b";
4
- atom: "#cc7bc2";
5
- basic: "#ffffff";
6
- comment: "#939598";
7
- constant: "#ff8973";
8
- decoration: "#ea6c8b";
9
- invalid: "#ea6c8b";
10
- key: "#83fff5";
11
- keyword: "#b3ccff";
12
- number: "#ea6c8b";
13
- operator: "#ea6c8b";
14
- predefined: "#ffffff";
15
- property: "#ea6c8b";
16
- regexp: "#b4d353";
17
- string: "#ffe083";
18
- tag: "#ea6c8b";
19
- text: "#ff8973";
20
- value: "#ffe083";
21
- variable: "#b4d353";
22
- };
23
- export declare const ui: {
24
- background: string;
25
- text: "#ffffff";
26
- indent: {
27
- active: string;
28
- inactive: string;
29
- };
30
- };
31
- export type SyntaxColors = typeof syntax;
32
- export type UIColors = typeof ui;
@@ -1,47 +0,0 @@
1
- // DO NOT CHANGE ANYTHING HERE
2
- // This file is part of the Codebytes MVP and only includes basic configuration around theming for the SimpleMonacoEditor component
3
- // We are working on a monaco package in client-modules that has more configuration around themes and languages
4
- // Monaco as a shared package RFC https://www.notion.so/codecademy/Monaco-editor-as-a-shared-package-1f4484db165b4abc8394c3556451ef6a
5
-
6
- import { colors, editorColors } from '@codecademy/gamut-styles';
7
- const darkTheme = {
8
- blue: editorColors.blue,
9
- deepPurple: editorColors.deepPurple,
10
- gray: editorColors.gray,
11
- green: editorColors.green,
12
- orange: editorColors.orange,
13
- purple: editorColors.purple,
14
- red: editorColors.red,
15
- white: colors.white,
16
- yellow: editorColors.yellow
17
- };
18
- export const syntax = {
19
- attribute: darkTheme.green,
20
- annotation: darkTheme.red,
21
- atom: darkTheme.deepPurple,
22
- basic: darkTheme.white,
23
- comment: darkTheme.gray,
24
- constant: darkTheme.orange,
25
- decoration: darkTheme.red,
26
- invalid: darkTheme.red,
27
- key: darkTheme.blue,
28
- keyword: darkTheme.purple,
29
- number: darkTheme.red,
30
- operator: darkTheme.red,
31
- predefined: darkTheme.white,
32
- property: darkTheme.red,
33
- regexp: darkTheme.green,
34
- string: darkTheme.yellow,
35
- tag: darkTheme.red,
36
- text: darkTheme.orange,
37
- value: darkTheme.yellow,
38
- variable: darkTheme.green
39
- };
40
- export const ui = {
41
- background: '#211E2F',
42
- text: darkTheme.white,
43
- indent: {
44
- active: '#393b41',
45
- inactive: '#494b51'
46
- }
47
- };
@@ -1,8 +0,0 @@
1
- import { EditorProps } from '@monaco-editor/react';
2
- import React from 'react';
3
- export type SimpleMonacoEditorProps = {
4
- value: string;
5
- language: string;
6
- onChange?: EditorProps['onChange'];
7
- };
8
- export declare const SimpleMonacoEditor: React.FC<SimpleMonacoEditorProps>;
@@ -1,45 +0,0 @@
1
- // DO NOT CHANGE ANYTHING HERE
2
- // This component is part of the Codebytes MVP and only includes basic configuration around theming
3
- // We are working on a monaco package in client-modules that has more configuration around themes and languages
4
- // Monaco as a shared package RFC https://www.notion.so/codecademy/Monaco-editor-as-a-shared-package-1f4484db165b4abc8394c3556451ef6a
5
-
6
- import ReactMonacoEditor from '@monaco-editor/react';
7
- import React, { useCallback, useRef } from 'react';
8
- import ResizeObserver from 'react-resize-observer';
9
- import { dark } from './theme';
10
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
11
- export const SimpleMonacoEditor = _ref => {
12
- let value = _ref.value,
13
- language = _ref.language,
14
- onChange = _ref.onChange;
15
- const editorRef = useRef(null);
16
- const editorWillMount = useCallback((editor, monaco) => {
17
- editorRef.current = editor;
18
- monaco.editor.defineTheme('dark', dark);
19
- monaco.editor.setTheme('dark');
20
- }, []);
21
- return /*#__PURE__*/_jsxs(_Fragment, {
22
- children: [/*#__PURE__*/_jsx(ResizeObserver, {
23
- onResize: _ref2 => {
24
- var _editorRef$current;
25
- let height = _ref2.height,
26
- width = _ref2.width;
27
- (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.layout({
28
- height,
29
- width
30
- });
31
- }
32
- }), /*#__PURE__*/_jsx(ReactMonacoEditor, {
33
- onMount: editorWillMount,
34
- onChange: onChange,
35
- options: {
36
- minimap: {
37
- enabled: false
38
- }
39
- },
40
- theme: "vs-dark",
41
- value: value,
42
- language: language
43
- })]
44
- });
45
- };
@@ -1,2 +0,0 @@
1
- import type * as monaco from 'monaco-editor';
2
- export declare const dark: monaco.editor.IStandaloneThemeData;
@@ -1,120 +0,0 @@
1
- // DO NOT CHANGE ANYTHING HERE
2
- // This file is part of the Codebytes MVP and only includes basic configuration around theming for the SimpleMonacoEditor component
3
- // We are working on a monaco package in client-modules that has more configuration around themes and languages
4
- // Monaco as a shared package RFC https://www.notion.so/codecademy/Monaco-editor-as-a-shared-package-1f4484db165b4abc8394c3556451ef6a
5
-
6
- import * as darkColors from './colorsDark';
7
- const c = color => color.slice(1, color.length);
8
- const theme = _ref => {
9
- let ui = _ref.ui,
10
- syntax = _ref.syntax;
11
- return {
12
- base: 'vs-dark',
13
- inherit: true,
14
- rules: [
15
- // Base
16
- {
17
- token: '',
18
- foreground: c(syntax.basic)
19
- }, {
20
- token: 'regexp',
21
- foreground: c(syntax.regexp)
22
- }, {
23
- token: 'annotation',
24
- foreground: c(syntax.annotation)
25
- }, {
26
- token: 'type',
27
- foreground: c(syntax.annotation)
28
- }, {
29
- token: 'doctype',
30
- foreground: c(syntax.comment)
31
- }, {
32
- token: 'delimiter',
33
- foreground: c(syntax.decoration)
34
- }, {
35
- token: 'invalid',
36
- foreground: c(syntax.invalid)
37
- }, {
38
- token: 'emphasis',
39
- fontStyle: 'italic'
40
- }, {
41
- token: 'strong',
42
- fontStyle: 'bold'
43
- }, {
44
- token: 'variable',
45
- foreground: c(syntax.variable)
46
- }, {
47
- token: 'variable.predefined',
48
- foreground: c(syntax.variable)
49
- }, {
50
- token: 'constant',
51
- foreground: c(syntax.constant)
52
- }, {
53
- token: 'comment',
54
- foreground: c(syntax.comment)
55
- }, {
56
- token: 'number',
57
- foreground: c(syntax.number)
58
- }, {
59
- token: 'number.hex',
60
- foreground: c(syntax.number)
61
- }, {
62
- token: 'keyword.directive',
63
- foreground: c(syntax.comment)
64
- }, {
65
- token: 'include',
66
- foreground: c(syntax.comment)
67
- }, {
68
- token: 'key',
69
- foreground: c(syntax.property)
70
- }, {
71
- token: 'attribute.name',
72
- foreground: c(syntax.attribute)
73
- }, {
74
- token: 'attribute.name-numeric',
75
- foreground: c(syntax.string)
76
- }, {
77
- token: 'attribute.value',
78
- foreground: c(syntax.property)
79
- }, {
80
- token: 'attribute.value.number',
81
- foreground: c(syntax.number)
82
- }, {
83
- token: 'string',
84
- foreground: c(syntax.string)
85
- }, {
86
- token: 'string.yaml',
87
- foreground: c(syntax.string)
88
- }, {
89
- token: 'tag',
90
- foreground: c(syntax.tag)
91
- }, {
92
- token: 'tag.id.jade',
93
- foreground: c(syntax.tag)
94
- }, {
95
- token: 'tag.class.jade',
96
- foreground: c(syntax.tag)
97
- }, {
98
- token: 'metatag',
99
- foreground: c(syntax.comment)
100
- }, {
101
- token: 'attribute.value.unit',
102
- foreground: c(syntax.string)
103
- }, {
104
- token: 'keyword',
105
- foreground: c(syntax.keyword)
106
- }, {
107
- token: 'keyword.flow',
108
- foreground: c(syntax.keyword)
109
- }],
110
- colors: {
111
- 'editor.background': ui.background,
112
- 'editor.foreground': ui.text,
113
- 'editorIndentGuide.background': ui.indent.inactive,
114
- 'editorIndentGuide.activeBackground': ui.indent.active,
115
- 'editorWhitespace.foreground': syntax.comment,
116
- 'editorLineNumber.foreground': '#9FA2AC'
117
- }
118
- };
119
- };
120
- export const dark = theme(darkColors);
@@ -1 +0,0 @@
1
- export type Monaco = typeof import('monaco-editor');
@@ -1 +0,0 @@
1
- export {};
package/dist/api.d.ts DELETED
@@ -1,12 +0,0 @@
1
- import type { LanguageOption } from './consts';
2
- interface Response {
3
- stderr: string;
4
- stdout: string;
5
- exit_code: number;
6
- }
7
- interface PostSnippetData {
8
- language: LanguageOption;
9
- code: string;
10
- }
11
- export declare const postSnippet: (data: PostSnippetData, snippetsBaseUrl?: string) => Promise<Response>;
12
- export {};
package/dist/api.js DELETED
@@ -1,8 +0,0 @@
1
- export const postSnippet = async (data, snippetsBaseUrl) => {
2
- const snippetsEndpoint = "https://".concat(snippetsBaseUrl, "/snippets");
3
- const response = await fetch(snippetsEndpoint, {
4
- method: 'POST',
5
- body: JSON.stringify(data)
6
- });
7
- return response.json();
8
- };
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import { CodeByteEditorProps } from './types';
3
- export declare const CodeByteEditor: React.FC<CodeByteEditorProps>;
4
- export default CodeByteEditor;
@@ -1,131 +0,0 @@
1
- import _styled from "@emotion/styled/base";
2
- const _excluded = ["text", "language", "hideCopyButton", "snippetsBaseUrl", "onEdit", "onLanguageChange", "copyFormatter", "trackingData", "trackFirstEdit"];
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
6
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
7
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
9
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
11
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
12
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
13
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
14
- function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
15
- function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
16
- import { Box, IconButton } from '@codecademy/gamut';
17
- import { FaviconIcon } from '@codecademy/gamut-icons';
18
- import { Background, system } from '@codecademy/gamut-styles';
19
- import React, { useEffect, useState } from 'react';
20
- import { helloWorld } from './consts';
21
- import { Editor } from './editor';
22
- import { trackClick } from './helpers';
23
- import { useEverInView } from './helpers/useEverInView';
24
- import { LanguageSelection } from './languageSelection';
25
- import { trackUserImpression } from './libs/eventTracking';
26
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
27
- const editorBaseStyles = system.css({
28
- border: 1,
29
- borderColor: 'gray-900',
30
- display: 'flex',
31
- flexDirection: 'column',
32
- minHeight: '25rem'
33
- });
34
- const EditorContainer = /*#__PURE__*/_styled(Background, {
35
- target: "e1epka4g0",
36
- label: "EditorContainer"
37
- })(editorBaseStyles, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2RlQnl0ZUVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0JFIiwiZmlsZSI6Ii4uL3NyYy9jb2RlQnl0ZUVkaXRvci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb3gsIEljb25CdXR0b24gfSBmcm9tICdAY29kZWNhZGVteS9nYW11dCc7XG5pbXBvcnQgeyBGYXZpY29uSWNvbiB9IGZyb20gJ0Bjb2RlY2FkZW15L2dhbXV0LWljb25zJztcbmltcG9ydCB7IEJhY2tncm91bmQsIHN5c3RlbSB9IGZyb20gJ0Bjb2RlY2FkZW15L2dhbXV0LXN0eWxlcyc7XG5pbXBvcnQgeyBTdHlsZVByb3BzIH0gZnJvbSAnQGNvZGVjYWRlbXkvdmFyaWFuY2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IGhlbGxvV29ybGQsIExhbmd1YWdlT3B0aW9uIH0gZnJvbSAnLi9jb25zdHMnO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnLi9lZGl0b3InO1xuaW1wb3J0IHsgdHJhY2tDbGljayB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyB1c2VFdmVySW5WaWV3IH0gZnJvbSAnLi9oZWxwZXJzL3VzZUV2ZXJJblZpZXcnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZWxlY3Rpb24gfSBmcm9tICcuL2xhbmd1YWdlU2VsZWN0aW9uJztcbmltcG9ydCB7IHRyYWNrVXNlckltcHJlc3Npb24gfSBmcm9tICcuL2xpYnMvZXZlbnRUcmFja2luZyc7XG5pbXBvcnQgeyBDb2RlQnl0ZUVkaXRvclByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGVkaXRvckJhc2VTdHlsZXMgPSBzeXN0ZW0uY3NzKHtcbiAgYm9yZGVyOiAxLFxuICBib3JkZXJDb2xvcjogJ2dyYXktOTAwJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgbWluSGVpZ2h0OiAnMjVyZW0nLFxufSk7XG5cbmNvbnN0IEVkaXRvckNvbnRhaW5lciA9XG4gIHN0eWxlZChCYWNrZ3JvdW5kKTxTdHlsZVByb3BzPHR5cGVvZiBlZGl0b3JCYXNlU3R5bGVzPj4oZWRpdG9yQmFzZVN0eWxlcyk7XG5cbmV4cG9ydCBjb25zdCBDb2RlQnl0ZUVkaXRvcjogUmVhY3QuRkM8Q29kZUJ5dGVFZGl0b3JQcm9wcz4gPSAoe1xuICB0ZXh0OiBpbml0aWFsVGV4dCxcbiAgbGFuZ3VhZ2U6IGluaXRpYWxMYW5ndWFnZSxcbiAgaGlkZUNvcHlCdXR0b24gPSBmYWxzZSxcbiAgc25pcHBldHNCYXNlVXJsLFxuICBvbkVkaXQsXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UsXG4gIGNvcHlGb3JtYXR0ZXIsXG4gIHRyYWNraW5nRGF0YSxcbiAgdHJhY2tGaXJzdEVkaXQgPSBmYWxzZSxcbiAgLi4ucmVzdFxufSkgPT4ge1xuICBjb25zdCB7IGV2ZXJJblZpZXcsIHJlZiB9ID0gdXNlRXZlckluVmlldygpO1xuXG4gIGNvbnN0IGdldEluaXRpYWxUZXh0ID0gKCkgPT4ge1xuICAgIGlmIChpbml0aWFsVGV4dCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaW5pdGlhbFRleHQ7XG4gICAgcmV0dXJuIGluaXRpYWxMYW5ndWFnZSA/IGhlbGxvV29ybGRbaW5pdGlhbExhbmd1YWdlXSA6ICcnO1xuICB9O1xuXG4gIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlPHN0cmluZz4oZ2V0SW5pdGlhbFRleHQoKSk7XG4gIGNvbnN0IFtsYW5ndWFnZSwgc2V0TGFuZ3VhZ2VdID0gdXNlU3RhdGU8TGFuZ3VhZ2VPcHRpb24+KFxuICAgIGluaXRpYWxMYW5ndWFnZSA/PyAnJ1xuICApO1xuICBjb25zdCBbaGFzQmVlbkVkaXRlZCwgc2V0SGFzQmVlbkVkaXRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXZlckluVmlldykge1xuICAgICAgdHJhY2tVc2VySW1wcmVzc2lvbih7XG4gICAgICAgIHBhZ2VfbmFtZTogdHJhY2tpbmdEYXRhPy5wYWdlX25hbWUgPz8gJ1Vua25vd24nLFxuICAgICAgICBjb250ZXh0OiB0cmFja2luZ0RhdGE/LmNvbnRleHQgPz8gZG9jdW1lbnQucmVmZXJyZXIsXG4gICAgICAgIHRhcmdldDogJ2NvZGVieXRlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2V2ZXJJblZpZXcsIHRyYWNraW5nRGF0YV0pO1xuXG4gIHJldHVybiAoXG4gICAgPEVkaXRvckNvbnRhaW5lclxuICAgICAgYmc9XCJibGFja1wiXG4gICAgICBtYXhXaWR0aD1cIjQzcmVtXCJcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgb3ZlcmZsb3c9XCJoaWRkZW5cIlxuICAgICAgcmVmPXtyZWZ9XG4gICAgPlxuICAgICAgPEJveCBib3JkZXJCb3R0b209ezF9IGJvcmRlckNvbG9yPVwiZ3JheS05MDBcIiBweT17NH0gcGw9ezh9PlxuICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgIGljb249e0Zhdmljb25JY29ufVxuICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy5jb2RlY2FkZW15LmNvbS9cIlxuICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgcmVsPVwibm9yZWZlcnJlclwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdHJhY2tDbGljaygnbG9nbycsIHRyYWNraW5nRGF0YSl9XG4gICAgICAgICAgdGlwPVwiVmlzaXQgdXNcIlxuICAgICAgICAgIHRpcFByb3BzPXt7XG4gICAgICAgICAgICBhbGlnbm1lbnQ6ICdib3R0b20tY2VudGVyJyxcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ2Zsb2F0aW5nJyxcbiAgICAgICAgICAgIG5hcnJvdzogdHJ1ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgICB7bGFuZ3VhZ2UgPyAoXG4gICAgICAgIDxFZGl0b3JcbiAgICAgICAgICBsYW5ndWFnZT17bGFuZ3VhZ2V9XG4gICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICBoaWRlQ29weUJ1dHRvbj17aGlkZUNvcHlCdXR0b259XG4gICAgICAgICAgb25DaGFuZ2U9eyhuZXdUZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHNldFRleHQobmV3VGV4dCk7XG4gICAgICAgICAgICBvbkVkaXQ/LihuZXdUZXh0LCBsYW5ndWFnZSk7XG4gICAgICAgICAgICBpZiAodHJhY2tGaXJzdEVkaXQgJiYgaGFzQmVlbkVkaXRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgc2V0SGFzQmVlbkVkaXRlZCh0cnVlKTtcbiAgICAgICAgICAgICAgdHJhY2tDbGljaygnZWRpdCcsIHRyYWNraW5nRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBzbmlwcGV0c0Jhc2VVcmw9e3NuaXBwZXRzQmFzZVVybH1cbiAgICAgICAgICBjb3B5Rm9ybWF0dGVyPXtjb3B5Rm9ybWF0dGVyfVxuICAgICAgICAgIHRyYWNraW5nRGF0YT17dHJhY2tpbmdEYXRhfVxuICAgICAgICAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPExhbmd1YWdlU2VsZWN0aW9uXG4gICAgICAgICAgb25DaGFuZ2U9eyhuZXdMYW5ndWFnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VGV4dDogc3RyaW5nID1cbiAgICAgICAgICAgICAgdGV4dCB8fCAobmV3TGFuZ3VhZ2UgPyBoZWxsb1dvcmxkW25ld0xhbmd1YWdlXSA6ICcnKTtcbiAgICAgICAgICAgIHNldExhbmd1YWdlKG5ld0xhbmd1YWdlKTtcbiAgICAgICAgICAgIHNldFRleHQobmV3VGV4dCk7XG4gICAgICAgICAgICB0cmFja0NsaWNrKCdsYW5nX3NlbGVjdCcsIHRyYWNraW5nRGF0YSk7XG4gICAgICAgICAgICBvbkxhbmd1YWdlQ2hhbmdlPy4obmV3VGV4dCwgbmV3TGFuZ3VhZ2UpO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvRWRpdG9yQ29udGFpbmVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29kZUJ5dGVFZGl0b3I7XG4iXX0= */");
38
- export const CodeByteEditor = _ref => {
39
- let initialText = _ref.text,
40
- initialLanguage = _ref.language,
41
- _ref$hideCopyButton = _ref.hideCopyButton,
42
- hideCopyButton = _ref$hideCopyButton === void 0 ? false : _ref$hideCopyButton,
43
- snippetsBaseUrl = _ref.snippetsBaseUrl,
44
- onEdit = _ref.onEdit,
45
- onLanguageChange = _ref.onLanguageChange,
46
- copyFormatter = _ref.copyFormatter,
47
- trackingData = _ref.trackingData,
48
- _ref$trackFirstEdit = _ref.trackFirstEdit,
49
- trackFirstEdit = _ref$trackFirstEdit === void 0 ? false : _ref$trackFirstEdit,
50
- rest = _objectWithoutProperties(_ref, _excluded);
51
- const _useEverInView = useEverInView(),
52
- everInView = _useEverInView.everInView,
53
- ref = _useEverInView.ref;
54
- const getInitialText = () => {
55
- if (initialText !== undefined) return initialText;
56
- return initialLanguage ? helloWorld[initialLanguage] : '';
57
- };
58
- const _useState = useState(getInitialText()),
59
- _useState2 = _slicedToArray(_useState, 2),
60
- text = _useState2[0],
61
- setText = _useState2[1];
62
- const _useState3 = useState(initialLanguage !== null && initialLanguage !== void 0 ? initialLanguage : ''),
63
- _useState4 = _slicedToArray(_useState3, 2),
64
- language = _useState4[0],
65
- setLanguage = _useState4[1];
66
- const _useState5 = useState(false),
67
- _useState6 = _slicedToArray(_useState5, 2),
68
- hasBeenEdited = _useState6[0],
69
- setHasBeenEdited = _useState6[1];
70
- useEffect(() => {
71
- if (everInView) {
72
- var _trackingData$page_na, _trackingData$context;
73
- trackUserImpression({
74
- page_name: (_trackingData$page_na = trackingData === null || trackingData === void 0 ? void 0 : trackingData.page_name) !== null && _trackingData$page_na !== void 0 ? _trackingData$page_na : 'Unknown',
75
- context: (_trackingData$context = trackingData === null || trackingData === void 0 ? void 0 : trackingData.context) !== null && _trackingData$context !== void 0 ? _trackingData$context : document.referrer,
76
- target: 'codebyte'
77
- });
78
- }
79
- }, [everInView, trackingData]);
80
- return /*#__PURE__*/_jsxs(EditorContainer, _objectSpread(_objectSpread({
81
- bg: "black",
82
- maxWidth: "43rem"
83
- }, rest), {}, {
84
- overflow: "hidden",
85
- ref: ref,
86
- children: [/*#__PURE__*/_jsx(Box, {
87
- borderBottom: 1,
88
- borderColor: "gray-900",
89
- py: 4,
90
- pl: 8,
91
- children: /*#__PURE__*/_jsx(IconButton, {
92
- icon: FaviconIcon,
93
- variant: "secondary",
94
- href: "https://www.codecademy.com/",
95
- target: "_blank",
96
- rel: "noreferrer",
97
- onClick: () => trackClick('logo', trackingData),
98
- tip: "Visit us",
99
- tipProps: {
100
- alignment: 'bottom-center',
101
- placement: 'floating',
102
- narrow: true
103
- }
104
- })
105
- }), language ? /*#__PURE__*/_jsx(Editor, {
106
- language: language,
107
- text: text,
108
- hideCopyButton: hideCopyButton,
109
- onChange: newText => {
110
- setText(newText);
111
- onEdit === null || onEdit === void 0 ? void 0 : onEdit(newText, language);
112
- if (trackFirstEdit && hasBeenEdited === false) {
113
- setHasBeenEdited(true);
114
- trackClick('edit', trackingData);
115
- }
116
- },
117
- snippetsBaseUrl: snippetsBaseUrl,
118
- copyFormatter: copyFormatter,
119
- trackingData: trackingData
120
- }) : /*#__PURE__*/_jsx(LanguageSelection, {
121
- onChange: newLanguage => {
122
- const newText = text || (newLanguage ? helloWorld[newLanguage] : '');
123
- setLanguage(newLanguage);
124
- setText(newText);
125
- trackClick('lang_select', trackingData);
126
- onLanguageChange === null || onLanguageChange === void 0 ? void 0 : onLanguageChange(newText, newLanguage);
127
- }
128
- })]
129
- }));
130
- };
131
- export default CodeByteEditor;
package/dist/consts.d.ts DELETED
@@ -1,23 +0,0 @@
1
- export declare const LanguageOptions: {
2
- '': string;
3
- cpp: string;
4
- csharp: string;
5
- golang: string;
6
- javascript: string;
7
- php: string;
8
- python: string;
9
- ruby: string;
10
- scheme: string;
11
- };
12
- export type LanguageOption = keyof typeof LanguageOptions;
13
- export declare const validLanguages: Exclude<LanguageOption, "">[];
14
- export declare const helloWorld: {
15
- readonly cpp: "#include <iostream>\nint main() {\n std::cout << \"Hello world!\";\n return 0;\n}";
16
- readonly csharp: "namespace HelloWorld {\n class Hello {\n static void Main(string[] args) {\n System.Console.WriteLine(\"Hello world!\");\n }\n }\n}";
17
- readonly golang: "package main\nimport \"fmt\"\nfunc main() {\n fmt.Println(\"Hello world!\")\n}";
18
- readonly javascript: "console.log('Hello world!');";
19
- readonly php: "<?php\n echo \"Hello world!\";\n?>";
20
- readonly python: "print('Hello world!')";
21
- readonly ruby: "puts \"Hello world!\"";
22
- readonly scheme: "(begin\n (display \"Hello world!\")\n (newline))";
23
- };
package/dist/consts.js DELETED
@@ -1,32 +0,0 @@
1
- // key = language param to send to snippets service
2
- // val = label in language selection drop down
3
- export const LanguageOptions = {
4
- '': 'Select a language',
5
- cpp: 'C++',
6
- csharp: 'C#',
7
- golang: 'Go',
8
- javascript: 'JavaScript',
9
- php: 'PHP',
10
- python: 'Python 3',
11
- ruby: 'Ruby',
12
- scheme: 'Scheme'
13
- };
14
- export const validLanguages = Object.keys(LanguageOptions).filter(option => !!option);
15
- const cpp = "#include <iostream>\nint main() {\n std::cout << \"Hello world!\";\n return 0;\n}";
16
- const csharp = "namespace HelloWorld {\n class Hello {\n static void Main(string[] args) {\n System.Console.WriteLine(\"Hello world!\");\n }\n }\n}";
17
- const golang = "package main\nimport \"fmt\"\nfunc main() {\n fmt.Println(\"Hello world!\")\n}";
18
- const javascript = "console.log('Hello world!');";
19
- const php = "<?php\n echo \"Hello world!\";\n?>";
20
- const python = "print('Hello world!')";
21
- const ruby = 'puts "Hello world!"';
22
- const scheme = "(begin\n (display \"Hello world!\")\n (newline))";
23
- export const helloWorld = {
24
- cpp,
25
- csharp,
26
- golang,
27
- javascript,
28
- php,
29
- python,
30
- ruby,
31
- scheme
32
- };
package/dist/drawers.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- export type DrawersProps = {
3
- leftChild: React.ReactNode;
4
- rightChild: React.ReactNode;
5
- };
6
- export declare const Drawers: React.FC<DrawersProps>;
package/dist/drawers.js DELETED
@@ -1,149 +0,0 @@
1
- import _styled from "@emotion/styled/base";
2
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
3
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
5
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
6
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
7
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
8
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
9
- import { Box, FlexBox, IconButton } from '@codecademy/gamut';
10
- import { ArrowChevronLeftIcon, ArrowChevronRightIcon } from '@codecademy/gamut-icons';
11
- import React, { useState } from 'react';
12
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
- const DrawerLabel = /*#__PURE__*/_styled("span", {
14
- target: "e1keub6a2",
15
- label: "DrawerLabel"
16
- })(process.env.NODE_ENV === "production" ? {
17
- name: "1u2ibt9",
18
- styles: "padding:0.875rem 0.5rem"
19
- } : {
20
- name: "1u2ibt9",
21
- styles: "padding:0.875rem 0.5rem/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kcmF3ZXJzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRK0IiLCJmaWxlIjoiLi4vc3JjL2RyYXdlcnMudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm94LCBGbGV4Qm94LCBJY29uQnV0dG9uIH0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQnO1xuaW1wb3J0IHtcbiAgQXJyb3dDaGV2cm9uTGVmdEljb24sXG4gIEFycm93Q2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQtaWNvbnMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBEcmF3ZXJMYWJlbCA9IHN0eWxlZC5zcGFuYFxuICBwYWRkaW5nOiAwLjg3NXJlbSAwLjVyZW07XG5gO1xuXG5jb25zdCBMZWZ0RHJhd2VySWNvbiA9IHN0eWxlZChBcnJvd0NoZXZyb25MZWZ0SWNvbik8eyBvcGVuPzogYm9vbGVhbiB9PmBcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQ7XG5gO1xuY29uc3QgUmlnaHREcmF3ZXJJY29uID0gTGVmdERyYXdlckljb24ud2l0aENvbXBvbmVudChBcnJvd0NoZXZyb25SaWdodEljb24pO1xuXG5jb25zdCBEcmF3ZXIgPSBzdHlsZWQoRmxleEJveCk8eyBvcGVuPzogYm9vbGVhbjsgaGlkZU9uQ2xvc2U/OiBib29sZWFuIH0+YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICR7KHsgb3BlbiwgaGlkZU9uQ2xvc2UgfSkgPT4gYFxuICAgIGZsZXgtYmFzaXM6ICR7b3BlbiA/ICcxMDAlJyA6ICcwJSd9O1xuICAgIHZpc2liaWxpdHk6ICR7IW9wZW4gJiYgaGlkZU9uQ2xvc2UgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJ307XG4gICAgdHJhbnNpdGlvbjogZmxleC1iYXNpcyAwLjJzICR7XG4gICAgICBvcGVuID8gJ2Vhc2Utb3V0JyA6ICdlYXNlLWluLCB2aXNpYmlsaXR5IDBzIDAuMnMnXG4gICAgfTtcblxuICAgICR7TGVmdERyYXdlckljb259LCAke1JpZ2h0RHJhd2VySWNvbn0ge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGVaKCR7b3BlbiA/ICcwJyA6ICcxODAnfWRlZyl9O1xuICAgIH1cbiAgYH1cbmA7XG5cbmV4cG9ydCB0eXBlIERyYXdlcnNQcm9wcyA9IHtcbiAgbGVmdENoaWxkOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHJpZ2h0Q2hpbGQ6IFJlYWN0LlJlYWN0Tm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCBEcmF3ZXJzOiBSZWFjdC5GQzxEcmF3ZXJzUHJvcHM+ID0gKHsgbGVmdENoaWxkLCByaWdodENoaWxkIH0pID0+IHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGU8J2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3RoJz4oJ2JvdGgnKTtcblxuICBsZXQgYXJpYUxhYmVsQ29kZUJ1dHRvbiA9ICdIaWRlIGNvZGUnO1xuICBsZXQgYXJpYUxhYmVsT3V0cHV0QnV0dG9uID0gJ0hpZGUgb3V0cHV0JztcbiAgbGV0IGlzTGVmdE9wZW4gPSBmYWxzZTtcbiAgbGV0IGlzUmlnaHRPcGVuID0gZmFsc2U7XG5cbiAgaWYgKG9wZW4gPT09ICdsZWZ0Jykge1xuICAgIGFyaWFMYWJlbENvZGVCdXR0b24gPSBhcmlhTGFiZWxPdXRwdXRCdXR0b24gPSAnU2hvdyBvdXRwdXQnO1xuICAgIGlzTGVmdE9wZW4gPSB0cnVlO1xuICB9IGVsc2UgaWYgKG9wZW4gPT09ICdyaWdodCcpIHtcbiAgICBhcmlhTGFiZWxDb2RlQnV0dG9uID0gYXJpYUxhYmVsT3V0cHV0QnV0dG9uID0gJ1Nob3cgY29kZSc7XG4gICAgaXNSaWdodE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEZsZXhCb3g+XG4gICAgICAgIDxEcmF3ZXJcbiAgICAgICAgICBvcGVuPXshaXNSaWdodE9wZW59XG4gICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgICAgZmxleFdyYXA9XCJub3dyYXBcIlxuICAgICAgICAgIHRleHRBbGlnbj1cImxlZnRcIlxuICAgICAgICAgIGJvcmRlclJpZ2h0PXsxfVxuICAgICAgICAgIGJvcmRlckNvbG9yPVwiZ3JheS05MDBcIlxuICAgICAgICAgIHB4PXs4fVxuICAgICAgICA+XG4gICAgICAgICAgPEJveCBtbD17OH0+XG4gICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICBpY29uPXtMZWZ0RHJhd2VySWNvbn1cbiAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgc2V0T3Blbigoc3RhdGUpID0+IChzdGF0ZSA9PT0gJ2JvdGgnID8gJ3JpZ2h0JyA6ICdib3RoJykpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImNvZGUtZHJhd2VyXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17IWlzUmlnaHRPcGVufVxuICAgICAgICAgICAgICB0aXA9e2FyaWFMYWJlbENvZGVCdXR0b259XG4gICAgICAgICAgICAgIHRpcFByb3BzPXt7IGFsaWdubWVudDogJ2JvdHRvbS1jZW50ZXInLCBuYXJyb3c6IHRydWUgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPERyYXdlckxhYmVsIGlkPVwiY29kZS1kcmF3ZXItbGFiZWxcIj5Db2RlPC9EcmF3ZXJMYWJlbD5cbiAgICAgICAgPC9EcmF3ZXI+XG4gICAgICAgIDxEcmF3ZXJcbiAgICAgICAgICBvcGVuPXshaXNMZWZ0T3Blbn1cbiAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICBmbGV4V3JhcD1cIm5vd3JhcFwiXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiXG4gICAgICAgICAgcHg9ezh9XG4gICAgICAgID5cbiAgICAgICAgICA8RHJhd2VyTGFiZWwgaWQ9XCJvdXRwdXQtZHJhd2VyLWxhYmVsXCI+T3V0cHV0PC9EcmF3ZXJMYWJlbD5cbiAgICAgICAgICA8Qm94IG1yPXs4fT5cbiAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGVcIlxuICAgICAgICAgICAgICBpY29uPXtSaWdodERyYXdlckljb259XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIHNldE9wZW4oKHN0YXRlKSA9PiAoc3RhdGUgPT09ICdib3RoJyA/ICdsZWZ0JyA6ICdib3RoJykpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cIm91dHB1dC1kcmF3ZXJcIlxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXshaXNMZWZ0T3Blbn1cbiAgICAgICAgICAgICAgdGlwPXthcmlhTGFiZWxPdXRwdXRCdXR0b259XG4gICAgICAgICAgICAgIHRpcFByb3BzPXt7IGFsaWdubWVudDogJ2JvdHRvbS1jZW50ZXInLCBuYXJyb3c6IHRydWUgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvRHJhd2VyPlxuICAgICAgPC9GbGV4Qm94PlxuICAgICAgPEZsZXhCb3hcbiAgICAgICAgZmxleEdyb3c9ezF9XG4gICAgICAgIGJvcmRlclk9ezF9XG4gICAgICAgIGJvcmRlckNvbG9yPVwiZ3JheS05MDBcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwic3RyZXRjaFwiXG4gICAgICAgIG92ZXJmbG93PVwiaGlkZGVuXCJcbiAgICAgID5cbiAgICAgICAgPERyYXdlclxuICAgICAgICAgIGhpZGVPbkNsb3NlXG4gICAgICAgICAgaWQ9XCJjb2RlLWRyYXdlclwiXG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiY29kZS1kcmF3ZXItbGFiZWxcIlxuICAgICAgICAgIG9wZW49eyFpc1JpZ2h0T3Blbn1cbiAgICAgICAgICBmbGV4R3Jvdz17MH1cbiAgICAgICAgICBvdmVyZmxvdz1cImhpZGRlblwiXG4gICAgICAgICAgYm9yZGVyQ29sb3I9XCJncmF5LTkwMFwiXG4gICAgICAgICAgYm9yZGVyU3R5bGVSaWdodD1cInNvbGlkXCJcbiAgICAgICAgICBib3JkZXJXaWR0aFJpZ2h0PVwidGhpblwiXG4gICAgICAgID5cbiAgICAgICAgICB7bGVmdENoaWxkfVxuICAgICAgICA8L0RyYXdlcj5cbiAgICAgICAgPERyYXdlclxuICAgICAgICAgIGhpZGVPbkNsb3NlXG4gICAgICAgICAgaWQ9XCJvdXRwdXQtZHJhd2VyXCJcbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJvdXRwdXQtZHJhd2VyLWxhYmVsXCJcbiAgICAgICAgICByb2xlPVwicmVnaW9uXCJcbiAgICAgICAgICBvcGVuPXshaXNMZWZ0T3Blbn1cbiAgICAgICAgICBvdmVyZmxvdz1cImhpZGRlblwiXG4gICAgICAgID5cbiAgICAgICAgICB7cmlnaHRDaGlsZH1cbiAgICAgICAgPC9EcmF3ZXI+XG4gICAgICA8L0ZsZXhCb3g+XG4gICAgPC8+XG4gICk7XG59O1xuIl19 */",
22
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
23
- });
24
- const LeftDrawerIcon = /*#__PURE__*/_styled(ArrowChevronLeftIcon, {
25
- target: "e1keub6a1",
26
- label: "LeftDrawerIcon"
27
- })(process.env.NODE_ENV === "production" ? {
28
- name: "jlwh11",
29
- styles: "transition:transform 0.2s ease-in-out"
30
- } : {
31
- name: "jlwh11",
32
- styles: "transition:transform 0.2s ease-in-out/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kcmF3ZXJzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZdUUiLCJmaWxlIjoiLi4vc3JjL2RyYXdlcnMudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm94LCBGbGV4Qm94LCBJY29uQnV0dG9uIH0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQnO1xuaW1wb3J0IHtcbiAgQXJyb3dDaGV2cm9uTGVmdEljb24sXG4gIEFycm93Q2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQtaWNvbnMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBEcmF3ZXJMYWJlbCA9IHN0eWxlZC5zcGFuYFxuICBwYWRkaW5nOiAwLjg3NXJlbSAwLjVyZW07XG5gO1xuXG5jb25zdCBMZWZ0RHJhd2VySWNvbiA9IHN0eWxlZChBcnJvd0NoZXZyb25MZWZ0SWNvbik8eyBvcGVuPzogYm9vbGVhbiB9PmBcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQ7XG5gO1xuY29uc3QgUmlnaHREcmF3ZXJJY29uID0gTGVmdERyYXdlckljb24ud2l0aENvbXBvbmVudChBcnJvd0NoZXZyb25SaWdodEljb24pO1xuXG5jb25zdCBEcmF3ZXIgPSBzdHlsZWQoRmxleEJveCk8eyBvcGVuPzogYm9vbGVhbjsgaGlkZU9uQ2xvc2U/OiBib29sZWFuIH0+YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICR7KHsgb3BlbiwgaGlkZU9uQ2xvc2UgfSkgPT4gYFxuICAgIGZsZXgtYmFzaXM6ICR7b3BlbiA/ICcxMDAlJyA6ICcwJSd9O1xuICAgIHZpc2liaWxpdHk6ICR7IW9wZW4gJiYgaGlkZU9uQ2xvc2UgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJ307XG4gICAgdHJhbnNpdGlvbjogZmxleC1iYXNpcyAwLjJzICR7XG4gICAgICBvcGVuID8gJ2Vhc2Utb3V0JyA6ICdlYXNlLWluLCB2aXNpYmlsaXR5IDBzIDAuMnMnXG4gICAgfTtcblxuICAgICR7TGVmdERyYXdlckljb259LCAke1JpZ2h0RHJhd2VySWNvbn0ge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGVaKCR7b3BlbiA/ICcwJyA6ICcxODAnfWRlZyl9O1xuICAgIH1cbiAgYH1cbmA7XG5cbmV4cG9ydCB0eXBlIERyYXdlcnNQcm9wcyA9IHtcbiAgbGVmdENoaWxkOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHJpZ2h0Q2hpbGQ6IFJlYWN0LlJlYWN0Tm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCBEcmF3ZXJzOiBSZWFjdC5GQzxEcmF3ZXJzUHJvcHM+ID0gKHsgbGVmdENoaWxkLCByaWdodENoaWxkIH0pID0+IHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGU8J2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3RoJz4oJ2JvdGgnKTtcblxuICBsZXQgYXJpYUxhYmVsQ29kZUJ1dHRvbiA9ICdIaWRlIGNvZGUnO1xuICBsZXQgYXJpYUxhYmVsT3V0cHV0QnV0dG9uID0gJ0hpZGUgb3V0cHV0JztcbiAgbGV0IGlzTGVmdE9wZW4gPSBmYWxzZTtcbiAgbGV0IGlzUmlnaHRPcGVuID0gZmFsc2U7XG5cbiAgaWYgKG9wZW4gPT09ICdsZWZ0Jykge1xuICAgIGFyaWFMYWJlbENvZGVCdXR0b24gPSBhcmlhTGFiZWxPdXRwdXRCdXR0b24gPSAnU2hvdyBvdXRwdXQnO1xuICAgIGlzTGVmdE9wZW4gPSB0cnVlO1xuICB9IGVsc2UgaWYgKG9wZW4gPT09ICdyaWdodCcpIHtcbiAgICBhcmlhTGFiZWxDb2RlQnV0dG9uID0gYXJpYUxhYmVsT3V0cHV0QnV0dG9uID0gJ1Nob3cgY29kZSc7XG4gICAgaXNSaWdodE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEZsZXhCb3g+XG4gICAgICAgIDxEcmF3ZXJcbiAgICAgICAgICBvcGVuPXshaXNSaWdodE9wZW59XG4gICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgICAgZmxleFdyYXA9XCJub3dyYXBcIlxuICAgICAgICAgIHRleHRBbGlnbj1cImxlZnRcIlxuICAgICAgICAgIGJvcmRlclJpZ2h0PXsxfVxuICAgICAgICAgIGJvcmRlckNvbG9yPVwiZ3JheS05MDBcIlxuICAgICAgICAgIHB4PXs4fVxuICAgICAgICA+XG4gICAgICAgICAgPEJveCBtbD17OH0+XG4gICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICBpY29uPXtMZWZ0RHJhd2VySWNvbn1cbiAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgc2V0T3Blbigoc3RhdGUpID0+IChzdGF0ZSA9PT0gJ2JvdGgnID8gJ3JpZ2h0JyA6ICdib3RoJykpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImNvZGUtZHJhd2VyXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17IWlzUmlnaHRPcGVufVxuICAgICAgICAgICAgICB0aXA9e2FyaWFMYWJlbENvZGVCdXR0b259XG4gICAgICAgICAgICAgIHRpcFByb3BzPXt7IGFsaWdubWVudDogJ2JvdHRvbS1jZW50ZXInLCBuYXJyb3c6IHRydWUgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPERyYXdlckxhYmVsIGlkPVwiY29kZS1kcmF3ZXItbGFiZWxcIj5Db2RlPC9EcmF3ZXJMYWJlbD5cbiAgICAgICAgPC9EcmF3ZXI+XG4gICAgICAgIDxEcmF3ZXJcbiAgICAgICAgICBvcGVuPXshaXNMZWZ0T3Blbn1cbiAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICBmbGV4V3JhcD1cIm5vd3JhcFwiXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiXG4gICAgICAgICAgcHg9ezh9XG4gICAgICAgID5cbiAgICAgICAgICA8RHJhd2VyTGFiZWwgaWQ9XCJvdXRwdXQtZHJhd2VyLWxhYmVsXCI+T3V0cHV0PC9EcmF3ZXJMYWJlbD5cbiAgICAgICAgICA8Qm94IG1yPXs4fT5cbiAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGVcIlxuICAgICAgICAgICAgICBpY29uPXtSaWdodERyYXdlckljb259XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIHNldE9wZW4oKHN0YXRlKSA9PiAoc3RhdGUgPT09ICdib3RoJyA/ICdsZWZ0JyA6ICdib3RoJykpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cIm91dHB1dC1kcmF3ZXJcIlxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXshaXNMZWZ0T3Blbn1cbiAgICAgICAgICAgICAgdGlwPXthcmlhTGFiZWxPdXRwdXRCdXR0b259XG4gICAgICAgICAgICAgIHRpcFByb3BzPXt7IGFsaWdubWVudDogJ2JvdHRvbS1jZW50ZXInLCBuYXJyb3c6IHRydWUgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvRHJhd2VyPlxuICAgICAgPC9GbGV4Qm94PlxuICAgICAgPEZsZXhCb3hcbiAgICAgICAgZmxleEdyb3c9ezF9XG4gICAgICAgIGJvcmRlclk9ezF9XG4gICAgICAgIGJvcmRlckNvbG9yPVwiZ3JheS05MDBcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwic3RyZXRjaFwiXG4gICAgICAgIG92ZXJmbG93PVwiaGlkZGVuXCJcbiAgICAgID5cbiAgICAgICAgPERyYXdlclxuICAgICAgICAgIGhpZGVPbkNsb3NlXG4gICAgICAgICAgaWQ9XCJjb2RlLWRyYXdlclwiXG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiY29kZS1kcmF3ZXItbGFiZWxcIlxuICAgICAgICAgIG9wZW49eyFpc1JpZ2h0T3Blbn1cbiAgICAgICAgICBmbGV4R3Jvdz17MH1cbiAgICAgICAgICBvdmVyZmxvdz1cImhpZGRlblwiXG4gICAgICAgICAgYm9yZGVyQ29sb3I9XCJncmF5LTkwMFwiXG4gICAgICAgICAgYm9yZGVyU3R5bGVSaWdodD1cInNvbGlkXCJcbiAgICAgICAgICBib3JkZXJXaWR0aFJpZ2h0PVwidGhpblwiXG4gICAgICAgID5cbiAgICAgICAgICB7bGVmdENoaWxkfVxuICAgICAgICA8L0RyYXdlcj5cbiAgICAgICAgPERyYXdlclxuICAgICAgICAgIGhpZGVPbkNsb3NlXG4gICAgICAgICAgaWQ9XCJvdXRwdXQtZHJhd2VyXCJcbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJvdXRwdXQtZHJhd2VyLWxhYmVsXCJcbiAgICAgICAgICByb2xlPVwicmVnaW9uXCJcbiAgICAgICAgICBvcGVuPXshaXNMZWZ0T3Blbn1cbiAgICAgICAgICBvdmVyZmxvdz1cImhpZGRlblwiXG4gICAgICAgID5cbiAgICAgICAgICB7cmlnaHRDaGlsZH1cbiAgICAgICAgPC9EcmF3ZXI+XG4gICAgICA8L0ZsZXhCb3g+XG4gICAgPC8+XG4gICk7XG59O1xuIl19 */",
33
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
34
- });
35
- const RightDrawerIcon = LeftDrawerIcon.withComponent(ArrowChevronRightIcon, {
36
- target: "e1keub6a3",
37
- label: "RightDrawerIcon"
38
- });
39
- const Drawer = /*#__PURE__*/_styled(FlexBox, {
40
- target: "e1keub6a0",
41
- label: "Drawer"
42
- })("position:relative;", _ref => {
43
- let open = _ref.open,
44
- hideOnClose = _ref.hideOnClose;
45
- return "\n flex-basis: ".concat(open ? '100%' : '0%', ";\n visibility: ").concat(!open && hideOnClose ? 'hidden' : 'visible', ";\n transition: flex-basis 0.2s ").concat(open ? 'ease-out' : 'ease-in, visibility 0s 0.2s', ";\n\n ").concat(LeftDrawerIcon, ", ").concat(RightDrawerIcon, " {\n transform: rotateZ(").concat(open ? '0' : '180', "deg)};\n }\n ");
46
- }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kcmF3ZXJzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQnlFIiwiZmlsZSI6Ii4uL3NyYy9kcmF3ZXJzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJveCwgRmxleEJveCwgSWNvbkJ1dHRvbiB9IGZyb20gJ0Bjb2RlY2FkZW15L2dhbXV0JztcbmltcG9ydCB7XG4gIEFycm93Q2hldnJvbkxlZnRJY29uLFxuICBBcnJvd0NoZXZyb25SaWdodEljb24sXG59IGZyb20gJ0Bjb2RlY2FkZW15L2dhbXV0LWljb25zJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgRHJhd2VyTGFiZWwgPSBzdHlsZWQuc3BhbmBcbiAgcGFkZGluZzogMC44NzVyZW0gMC41cmVtO1xuYDtcblxuY29uc3QgTGVmdERyYXdlckljb24gPSBzdHlsZWQoQXJyb3dDaGV2cm9uTGVmdEljb24pPHsgb3Blbj86IGJvb2xlYW4gfT5gXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UtaW4tb3V0O1xuYDtcbmNvbnN0IFJpZ2h0RHJhd2VySWNvbiA9IExlZnREcmF3ZXJJY29uLndpdGhDb21wb25lbnQoQXJyb3dDaGV2cm9uUmlnaHRJY29uKTtcblxuY29uc3QgRHJhd2VyID0gc3R5bGVkKEZsZXhCb3gpPHsgb3Blbj86IGJvb2xlYW47IGhpZGVPbkNsb3NlPzogYm9vbGVhbiB9PmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAkeyh7IG9wZW4sIGhpZGVPbkNsb3NlIH0pID0+IGBcbiAgICBmbGV4LWJhc2lzOiAke29wZW4gPyAnMTAwJScgOiAnMCUnfTtcbiAgICB2aXNpYmlsaXR5OiAkeyFvcGVuICYmIGhpZGVPbkNsb3NlID8gJ2hpZGRlbicgOiAndmlzaWJsZSd9O1xuICAgIHRyYW5zaXRpb246IGZsZXgtYmFzaXMgMC4ycyAke1xuICAgICAgb3BlbiA/ICdlYXNlLW91dCcgOiAnZWFzZS1pbiwgdmlzaWJpbGl0eSAwcyAwLjJzJ1xuICAgIH07XG5cbiAgICAke0xlZnREcmF3ZXJJY29ufSwgJHtSaWdodERyYXdlckljb259IHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlWigke29wZW4gPyAnMCcgOiAnMTgwJ31kZWcpfTtcbiAgICB9XG4gIGB9XG5gO1xuXG5leHBvcnQgdHlwZSBEcmF3ZXJzUHJvcHMgPSB7XG4gIGxlZnRDaGlsZDogUmVhY3QuUmVhY3ROb2RlO1xuICByaWdodENoaWxkOiBSZWFjdC5SZWFjdE5vZGU7XG59O1xuXG5leHBvcnQgY29uc3QgRHJhd2VyczogUmVhY3QuRkM8RHJhd2Vyc1Byb3BzPiA9ICh7IGxlZnRDaGlsZCwgcmlnaHRDaGlsZCB9KSA9PiB7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlPCdsZWZ0JyB8ICdyaWdodCcgfCAnYm90aCc+KCdib3RoJyk7XG5cbiAgbGV0IGFyaWFMYWJlbENvZGVCdXR0b24gPSAnSGlkZSBjb2RlJztcbiAgbGV0IGFyaWFMYWJlbE91dHB1dEJ1dHRvbiA9ICdIaWRlIG91dHB1dCc7XG4gIGxldCBpc0xlZnRPcGVuID0gZmFsc2U7XG4gIGxldCBpc1JpZ2h0T3BlbiA9IGZhbHNlO1xuXG4gIGlmIChvcGVuID09PSAnbGVmdCcpIHtcbiAgICBhcmlhTGFiZWxDb2RlQnV0dG9uID0gYXJpYUxhYmVsT3V0cHV0QnV0dG9uID0gJ1Nob3cgb3V0cHV0JztcbiAgICBpc0xlZnRPcGVuID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChvcGVuID09PSAncmlnaHQnKSB7XG4gICAgYXJpYUxhYmVsQ29kZUJ1dHRvbiA9IGFyaWFMYWJlbE91dHB1dEJ1dHRvbiA9ICdTaG93IGNvZGUnO1xuICAgIGlzUmlnaHRPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxGbGV4Qm94PlxuICAgICAgICA8RHJhd2VyXG4gICAgICAgICAgb3Blbj17IWlzUmlnaHRPcGVufVxuICAgICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICAgIGZsZXhXcmFwPVwibm93cmFwXCJcbiAgICAgICAgICB0ZXh0QWxpZ249XCJsZWZ0XCJcbiAgICAgICAgICBib3JkZXJSaWdodD17MX1cbiAgICAgICAgICBib3JkZXJDb2xvcj1cImdyYXktOTAwXCJcbiAgICAgICAgICBweD17OH1cbiAgICAgICAgPlxuICAgICAgICAgIDxCb3ggbWw9ezh9PlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgaWNvbj17TGVmdERyYXdlckljb259XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgIHNldE9wZW4oKHN0YXRlKSA9PiAoc3RhdGUgPT09ICdib3RoJyA/ICdyaWdodCcgOiAnYm90aCcpKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJjb2RlLWRyYXdlclwiXG4gICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9eyFpc1JpZ2h0T3Blbn1cbiAgICAgICAgICAgICAgdGlwPXthcmlhTGFiZWxDb2RlQnV0dG9ufVxuICAgICAgICAgICAgICB0aXBQcm9wcz17eyBhbGlnbm1lbnQ6ICdib3R0b20tY2VudGVyJywgbmFycm93OiB0cnVlIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDxEcmF3ZXJMYWJlbCBpZD1cImNvZGUtZHJhd2VyLWxhYmVsXCI+Q29kZTwvRHJhd2VyTGFiZWw+XG4gICAgICAgIDwvRHJhd2VyPlxuICAgICAgICA8RHJhd2VyXG4gICAgICAgICAgb3Blbj17IWlzTGVmdE9wZW59XG4gICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgICAgZmxleFdyYXA9XCJub3dyYXBcIlxuICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIlxuICAgICAgICAgIHB4PXs4fVxuICAgICAgICA+XG4gICAgICAgICAgPERyYXdlckxhYmVsIGlkPVwib3V0cHV0LWRyYXdlci1sYWJlbFwiPk91dHB1dDwvRHJhd2VyTGFiZWw+XG4gICAgICAgICAgPEJveCBtcj17OH0+XG4gICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVG9nZ2xlXCJcbiAgICAgICAgICAgICAgaWNvbj17UmlnaHREcmF3ZXJJY29ufVxuICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBzZXRPcGVuKChzdGF0ZSkgPT4gKHN0YXRlID09PSAnYm90aCcgPyAnbGVmdCcgOiAnYm90aCcpKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJvdXRwdXQtZHJhd2VyXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17IWlzTGVmdE9wZW59XG4gICAgICAgICAgICAgIHRpcD17YXJpYUxhYmVsT3V0cHV0QnV0dG9ufVxuICAgICAgICAgICAgICB0aXBQcm9wcz17eyBhbGlnbm1lbnQ6ICdib3R0b20tY2VudGVyJywgbmFycm93OiB0cnVlIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0RyYXdlcj5cbiAgICAgIDwvRmxleEJveD5cbiAgICAgIDxGbGV4Qm94XG4gICAgICAgIGZsZXhHcm93PXsxfVxuICAgICAgICBib3JkZXJZPXsxfVxuICAgICAgICBib3JkZXJDb2xvcj1cImdyYXktOTAwXCJcbiAgICAgICAgYWxpZ25JdGVtcz1cInN0cmV0Y2hcIlxuICAgICAgICBvdmVyZmxvdz1cImhpZGRlblwiXG4gICAgICA+XG4gICAgICAgIDxEcmF3ZXJcbiAgICAgICAgICBoaWRlT25DbG9zZVxuICAgICAgICAgIGlkPVwiY29kZS1kcmF3ZXJcIlxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImNvZGUtZHJhd2VyLWxhYmVsXCJcbiAgICAgICAgICBvcGVuPXshaXNSaWdodE9wZW59XG4gICAgICAgICAgZmxleEdyb3c9ezB9XG4gICAgICAgICAgb3ZlcmZsb3c9XCJoaWRkZW5cIlxuICAgICAgICAgIGJvcmRlckNvbG9yPVwiZ3JheS05MDBcIlxuICAgICAgICAgIGJvcmRlclN0eWxlUmlnaHQ9XCJzb2xpZFwiXG4gICAgICAgICAgYm9yZGVyV2lkdGhSaWdodD1cInRoaW5cIlxuICAgICAgICA+XG4gICAgICAgICAge2xlZnRDaGlsZH1cbiAgICAgICAgPC9EcmF3ZXI+XG4gICAgICAgIDxEcmF3ZXJcbiAgICAgICAgICBoaWRlT25DbG9zZVxuICAgICAgICAgIGlkPVwib3V0cHV0LWRyYXdlclwiXG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwib3V0cHV0LWRyYXdlci1sYWJlbFwiXG4gICAgICAgICAgcm9sZT1cInJlZ2lvblwiXG4gICAgICAgICAgb3Blbj17IWlzTGVmdE9wZW59XG4gICAgICAgICAgb3ZlcmZsb3c9XCJoaWRkZW5cIlxuICAgICAgICA+XG4gICAgICAgICAge3JpZ2h0Q2hpbGR9XG4gICAgICAgIDwvRHJhd2VyPlxuICAgICAgPC9GbGV4Qm94PlxuICAgIDwvPlxuICApO1xufTtcbiJdfQ== */"));
47
- export const Drawers = _ref2 => {
48
- let leftChild = _ref2.leftChild,
49
- rightChild = _ref2.rightChild;
50
- const _useState = useState('both'),
51
- _useState2 = _slicedToArray(_useState, 2),
52
- open = _useState2[0],
53
- setOpen = _useState2[1];
54
- let ariaLabelCodeButton = 'Hide code';
55
- let ariaLabelOutputButton = 'Hide output';
56
- let isLeftOpen = false;
57
- let isRightOpen = false;
58
- if (open === 'left') {
59
- ariaLabelCodeButton = ariaLabelOutputButton = 'Show output';
60
- isLeftOpen = true;
61
- } else if (open === 'right') {
62
- ariaLabelCodeButton = ariaLabelOutputButton = 'Show code';
63
- isRightOpen = true;
64
- }
65
- return /*#__PURE__*/_jsxs(_Fragment, {
66
- children: [/*#__PURE__*/_jsxs(FlexBox, {
67
- children: [/*#__PURE__*/_jsxs(Drawer, {
68
- open: !isRightOpen,
69
- alignItems: "center",
70
- flexWrap: "nowrap",
71
- textAlign: "left",
72
- borderRight: 1,
73
- borderColor: "gray-900",
74
- px: 8,
75
- children: [/*#__PURE__*/_jsx(Box, {
76
- ml: 8,
77
- children: /*#__PURE__*/_jsx(IconButton, {
78
- icon: LeftDrawerIcon,
79
- variant: "secondary",
80
- size: "small",
81
- onClick: () => setOpen(state => state === 'both' ? 'right' : 'both'),
82
- "aria-controls": "code-drawer",
83
- "aria-expanded": !isRightOpen,
84
- tip: ariaLabelCodeButton,
85
- tipProps: {
86
- alignment: 'bottom-center',
87
- narrow: true
88
- }
89
- })
90
- }), /*#__PURE__*/_jsx(DrawerLabel, {
91
- id: "code-drawer-label",
92
- children: "Code"
93
- })]
94
- }), /*#__PURE__*/_jsxs(Drawer, {
95
- open: !isLeftOpen,
96
- alignItems: "center",
97
- flexWrap: "nowrap",
98
- justifyContent: "flex-end",
99
- px: 8,
100
- children: [/*#__PURE__*/_jsx(DrawerLabel, {
101
- id: "output-drawer-label",
102
- children: "Output"
103
- }), /*#__PURE__*/_jsx(Box, {
104
- mr: 8,
105
- children: /*#__PURE__*/_jsx(IconButton, {
106
- "aria-label": "Toggle",
107
- icon: RightDrawerIcon,
108
- variant: "secondary",
109
- size: "small",
110
- onClick: () => setOpen(state => state === 'both' ? 'left' : 'both'),
111
- "aria-controls": "output-drawer",
112
- "aria-expanded": !isLeftOpen,
113
- tip: ariaLabelOutputButton,
114
- tipProps: {
115
- alignment: 'bottom-center',
116
- narrow: true
117
- }
118
- })
119
- })]
120
- })]
121
- }), /*#__PURE__*/_jsxs(FlexBox, {
122
- flexGrow: 1,
123
- borderY: 1,
124
- borderColor: "gray-900",
125
- alignItems: "stretch",
126
- overflow: "hidden",
127
- children: [/*#__PURE__*/_jsx(Drawer, {
128
- hideOnClose: true,
129
- id: "code-drawer",
130
- "aria-labelledby": "code-drawer-label",
131
- open: !isRightOpen,
132
- flexGrow: 0,
133
- overflow: "hidden",
134
- borderColor: "gray-900",
135
- borderStyleRight: "solid",
136
- borderWidthRight: "thin",
137
- children: leftChild
138
- }), /*#__PURE__*/_jsx(Drawer, {
139
- hideOnClose: true,
140
- id: "output-drawer",
141
- "aria-labelledby": "output-drawer-label",
142
- role: "region",
143
- open: !isLeftOpen,
144
- overflow: "hidden",
145
- children: rightChild
146
- })]
147
- })]
148
- });
149
- };
package/dist/editor.d.ts DELETED
@@ -1,15 +0,0 @@
1
- import { UserClickData } from '@codecademy/tracking';
2
- import React from 'react';
3
- import type { LanguageOption } from './consts';
4
- import { CodebytesCopyFormatter } from './types';
5
- type EditorProps = {
6
- hideCopyButton: boolean;
7
- language: LanguageOption;
8
- text: string;
9
- onChange: (text: string) => void;
10
- snippetsBaseUrl?: string;
11
- copyFormatter?: CodebytesCopyFormatter;
12
- trackingData?: Omit<UserClickData, 'target'>;
13
- };
14
- export declare const Editor: React.FC<EditorProps>;
15
- export {};
package/dist/editor.js DELETED
@@ -1,123 +0,0 @@
1
- import _styled from "@emotion/styled/base";
2
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
3
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
5
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
6
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
7
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
8
- import { FillButton, FlexBox, Spinner, TextButton, ToolTip } from '@codecademy/gamut';
9
- import { CopyIcon } from '@codecademy/gamut-icons';
10
- import React, { useState } from 'react';
11
- import { postSnippet } from './api';
12
- import { Drawers } from './drawers';
13
- import { trackClick } from './helpers';
14
- import { SimpleMonacoEditor } from './MonacoEditor';
15
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
16
- const Output = /*#__PURE__*/_styled("pre", {
17
- target: "e1lzxy8e0",
18
- label: "Output"
19
- })("width:100%;height:100%;margin:0;padding:0 1rem;font-family:Monaco;font-size:0.875rem;overflow:auto;", _ref => {
20
- let hasError = _ref.hasError,
21
- theme = _ref.theme;
22
- return "\n color: ".concat(hasError ? theme.colors.orange : theme.colors.text, ";\n background-color: ").concat(theme.colors['navy-900'], ";\n");
23
- }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lZGl0b3IudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CZ0QiLCJmaWxlIjoiLi4vc3JjL2VkaXRvci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBGaWxsQnV0dG9uLFxuICBGbGV4Qm94LFxuICBTcGlubmVyLFxuICBUZXh0QnV0dG9uLFxuICBUb29sVGlwLFxufSBmcm9tICdAY29kZWNhZGVteS9nYW11dCc7XG5pbXBvcnQgeyBDb3B5SWNvbiB9IGZyb20gJ0Bjb2RlY2FkZW15L2dhbXV0LWljb25zJztcbmltcG9ydCB7IFVzZXJDbGlja0RhdGEgfSBmcm9tICdAY29kZWNhZGVteS90cmFja2luZyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IHBvc3RTbmlwcGV0IH0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHR5cGUgeyBMYW5ndWFnZU9wdGlvbiB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IERyYXdlcnMgfSBmcm9tICcuL2RyYXdlcnMnO1xuaW1wb3J0IHsgdHJhY2tDbGljayB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBTaW1wbGVNb25hY29FZGl0b3IgfSBmcm9tICcuL01vbmFjb0VkaXRvcic7XG5pbXBvcnQgeyBDb2RlYnl0ZXNDb3B5Rm9ybWF0dGVyIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IE91dHB1dCA9IHN0eWxlZC5wcmU8eyBoYXNFcnJvcjogYm9vbGVhbiB9PmBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwIDFyZW07XG4gIGZvbnQtZmFtaWx5OiBNb25hY287XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIG92ZXJmbG93OiBhdXRvO1xuICAkeyh7IGhhc0Vycm9yLCB0aGVtZSB9KSA9PiBgXG4gIGNvbG9yOiAke2hhc0Vycm9yID8gdGhlbWUuY29sb3JzLm9yYW5nZSA6IHRoZW1lLmNvbG9ycy50ZXh0fTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHt0aGVtZS5jb2xvcnNbJ25hdnktOTAwJ119O1xuYH1cbmA7XG5cbmNvbnN0IERPQ0tFUl9TSUdURVJNID0gMTQzO1xuXG50eXBlIEVkaXRvclByb3BzID0ge1xuICBoaWRlQ29weUJ1dHRvbjogYm9vbGVhbjtcbiAgbGFuZ3VhZ2U6IExhbmd1YWdlT3B0aW9uO1xuICB0ZXh0OiBzdHJpbmc7XG4gIG9uQ2hhbmdlOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBzbmlwcGV0c0Jhc2VVcmw/OiBzdHJpbmc7XG4gIGNvcHlGb3JtYXR0ZXI/OiBDb2RlYnl0ZXNDb3B5Rm9ybWF0dGVyO1xuICB0cmFja2luZ0RhdGE/OiBPbWl0PFVzZXJDbGlja0RhdGEsICd0YXJnZXQnPjtcbn07XG5cbmV4cG9ydCBjb25zdCBFZGl0b3I6IFJlYWN0LkZDPEVkaXRvclByb3BzPiA9ICh7XG4gIGxhbmd1YWdlLFxuICB0ZXh0LFxuICBoaWRlQ29weUJ1dHRvbixcbiAgb25DaGFuZ2UsXG4gIGNvcHlGb3JtYXR0ZXIsXG4gIHNuaXBwZXRzQmFzZVVybCxcbiAgdHJhY2tpbmdEYXRhLFxufSkgPT4ge1xuICBjb25zdCBbb3V0cHV0LCBzZXRPdXRwdXRdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGU8J3JlYWR5JyB8ICd3YWl0aW5nJyB8ICdlcnJvcic+KCdyZWFkeScpO1xuICBjb25zdCBbaXNDb2RlQnl0ZUNvcGllZCwgc2V0SXNDb2RlQnl0ZUNvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG9uQ29weUNsaWNrID0gKCkgPT4ge1xuICAgIGlmICghaXNDb2RlQnl0ZUNvcGllZCkge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZFxuICAgICAgICAud3JpdGVUZXh0KGNvcHlGb3JtYXR0ZXIgPyBjb3B5Rm9ybWF0dGVyKHsgdGV4dCwgbGFuZ3VhZ2UgfSkgOiB0ZXh0KVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIC5jYXRjaCgoKSA9PiBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weScpKTtcbiAgICAgIHNldElzQ29kZUJ5dGVDb3BpZWQodHJ1ZSk7XG4gICAgICB0cmFja0NsaWNrKCdjb3B5JywgdHJhY2tpbmdEYXRhKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2V0RXJyb3JTdGF0dXNBbmRPdXRwdXQgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0T3V0cHV0KG1lc3NhZ2UpO1xuICAgIHNldFN0YXR1cygnZXJyb3InKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBjb2RlOiB0ZXh0LFxuICAgIH07XG4gICAgc2V0U3RhdHVzKCd3YWl0aW5nJyk7XG4gICAgc2V0T3V0cHV0KCcnKTtcbiAgICB0cmFja0NsaWNrKCdydW4nLCB0cmFja2luZ0RhdGEpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdFNuaXBwZXQoZGF0YSwgc25pcHBldHNCYXNlVXJsKTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGRlcnIubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXRFcnJvclN0YXR1c0FuZE91dHB1dChyZXNwb25zZS5zdGRlcnIpO1xuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5leGl0X2NvZGUgPT09IERPQ0tFUl9TSUdURVJNKSB7XG4gICAgICAgIHNldEVycm9yU3RhdHVzQW5kT3V0cHV0KFxuICAgICAgICAgICdZb3VyIGNvZGUgdG9vayB0b28gbG9uZyB0byByZXR1cm4gYSByZXN1bHQuIERvdWJsZSBjaGVjayB5b3VyIGNvZGUgZm9yIGFueSBpc3N1ZXMgYW5kIHRyeSBhZ2FpbiEnXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmV4aXRfY29kZSAhPT0gMCkge1xuICAgICAgICBzZXRFcnJvclN0YXR1c0FuZE91dHB1dCgnQW4gdW5rbm93biBlcnJvciBvY2N1cmVkLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0T3V0cHV0KHJlc3BvbnNlLnN0ZG91dCk7XG4gICAgICAgIHNldFN0YXR1cygncmVhZHknKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0RXJyb3JTdGF0dXNBbmRPdXRwdXQoJ0Vycm9yOiAnICsgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RHJhd2Vyc1xuICAgICAgICBsZWZ0Q2hpbGQ9e1xuICAgICAgICAgIDxTaW1wbGVNb25hY29FZGl0b3JcbiAgICAgICAgICAgIHZhbHVlPXt0ZXh0fVxuICAgICAgICAgICAgbGFuZ3VhZ2U9e2xhbmd1YWdlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgICAgcmlnaHRDaGlsZD17XG4gICAgICAgICAgPE91dHB1dCBoYXNFcnJvcj17c3RhdHVzID09PSAnZXJyb3InfSBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIHtvdXRwdXR9XG4gICAgICAgICAgPC9PdXRwdXQ+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8RmxleEJveFxuICAgICAgICBqdXN0aWZ5Q29udGVudD17aGlkZUNvcHlCdXR0b24gPyAnZmxleC1lbmQnIDogJ3NwYWNlLWJldHdlZW4nfVxuICAgICAgICBwbD17OH1cbiAgICAgID5cbiAgICAgICAgeyFoaWRlQ29weUJ1dHRvbiA/IChcbiAgICAgICAgICA8VG9vbFRpcFxuICAgICAgICAgICAgaWQ9XCJjb2RlYnl0ZS1jb3BpZWRcIlxuICAgICAgICAgICAgYWxpZ25tZW50PVwidG9wLWNlbnRlclwiXG4gICAgICAgICAgICBpbmZvPXtpc0NvZGVCeXRlQ29waWVkID8gJ0NvcGllZCEnIDogJ0NvcHkgdG8geW91ciBjbGlwYm9hcmQnfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0QnV0dG9uXG4gICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJjb2RlYnl0ZS1jb3BpZWRcIlxuICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgb25DbGljaz17b25Db3B5Q2xpY2t9XG4gICAgICAgICAgICAgIG9uQmx1cj17KCkgPT4gc2V0SXNDb2RlQnl0ZUNvcGllZChmYWxzZSl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY29weS1jb2RlYnl0ZS1idG5cIlxuICAgICAgICAgICAgICBpY29uPXtDb3B5SWNvbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ29weSBDb2RlYnl0ZVxuICAgICAgICAgICAgPC9UZXh0QnV0dG9uPlxuICAgICAgICAgIDwvVG9vbFRpcD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxGaWxsQnV0dG9uIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAge3N0YXR1cyA9PT0gJ3dhaXRpbmcnID8gPFNwaW5uZXIgLz4gOiAnUnVuJ31cbiAgICAgICAgPC9GaWxsQnV0dG9uPlxuICAgICAgPC9GbGV4Qm94PlxuICAgIDwvPlxuICApO1xufTtcbiJdfQ== */"));
24
- const DOCKER_SIGTERM = 143;
25
- export const Editor = _ref2 => {
26
- let language = _ref2.language,
27
- text = _ref2.text,
28
- hideCopyButton = _ref2.hideCopyButton,
29
- onChange = _ref2.onChange,
30
- copyFormatter = _ref2.copyFormatter,
31
- snippetsBaseUrl = _ref2.snippetsBaseUrl,
32
- trackingData = _ref2.trackingData;
33
- const _useState = useState(''),
34
- _useState2 = _slicedToArray(_useState, 2),
35
- output = _useState2[0],
36
- setOutput = _useState2[1];
37
- const _useState3 = useState('ready'),
38
- _useState4 = _slicedToArray(_useState3, 2),
39
- status = _useState4[0],
40
- setStatus = _useState4[1];
41
- const _useState5 = useState(false),
42
- _useState6 = _slicedToArray(_useState5, 2),
43
- isCodeByteCopied = _useState6[0],
44
- setIsCodeByteCopied = _useState6[1];
45
- const onCopyClick = () => {
46
- if (!isCodeByteCopied) {
47
- navigator.clipboard.writeText(copyFormatter ? copyFormatter({
48
- text,
49
- language
50
- }) : text)
51
-
52
- // eslint-disable-next-line no-console
53
- .catch(() => console.error('Failed to copy'));
54
- setIsCodeByteCopied(true);
55
- trackClick('copy', trackingData);
56
- }
57
- };
58
- const setErrorStatusAndOutput = message => {
59
- setOutput(message);
60
- setStatus('error');
61
- };
62
- const handleSubmit = async () => {
63
- if (text.trim().length === 0) {
64
- return;
65
- }
66
- const data = {
67
- language,
68
- code: text
69
- };
70
- setStatus('waiting');
71
- setOutput('');
72
- trackClick('run', trackingData);
73
- try {
74
- const response = await postSnippet(data, snippetsBaseUrl);
75
- if (response.stderr.length > 0) {
76
- setErrorStatusAndOutput(response.stderr);
77
- } else if (response.exit_code === DOCKER_SIGTERM) {
78
- setErrorStatusAndOutput('Your code took too long to return a result. Double check your code for any issues and try again!');
79
- } else if (response.exit_code !== 0) {
80
- setErrorStatusAndOutput('An unknown error occured.');
81
- } else {
82
- setOutput(response.stdout);
83
- setStatus('ready');
84
- }
85
- } catch (error) {
86
- setErrorStatusAndOutput('Error: ' + error);
87
- }
88
- };
89
- return /*#__PURE__*/_jsxs(_Fragment, {
90
- children: [/*#__PURE__*/_jsx(Drawers, {
91
- leftChild: /*#__PURE__*/_jsx(SimpleMonacoEditor, {
92
- value: text,
93
- language: language,
94
- onChange: onChange
95
- }),
96
- rightChild: /*#__PURE__*/_jsx(Output, {
97
- hasError: status === 'error',
98
- "aria-live": "polite",
99
- children: output
100
- })
101
- }), /*#__PURE__*/_jsxs(FlexBox, {
102
- justifyContent: hideCopyButton ? 'flex-end' : 'space-between',
103
- pl: 8,
104
- children: [!hideCopyButton ? /*#__PURE__*/_jsx(ToolTip, {
105
- id: "codebyte-copied",
106
- alignment: "top-center",
107
- info: isCodeByteCopied ? 'Copied!' : 'Copy to your clipboard',
108
- children: /*#__PURE__*/_jsx(TextButton, {
109
- "aria-describedby": "codebyte-copied",
110
- variant: "secondary",
111
- onClick: onCopyClick,
112
- onBlur: () => setIsCodeByteCopied(false),
113
- "data-testid": "copy-codebyte-btn",
114
- icon: CopyIcon,
115
- children: "Copy Codebyte"
116
- })
117
- }) : null, /*#__PURE__*/_jsx(FillButton, {
118
- onClick: handleSubmit,
119
- children: status === 'waiting' ? /*#__PURE__*/_jsx(Spinner, {}) : 'Run'
120
- })]
121
- })]
122
- });
123
- };
@@ -1,2 +0,0 @@
1
- import { UserClickData } from '@codecademy/tracking';
2
- export declare const trackClick: (target: string, trackingData?: Omit<UserClickData, "target">) => void;
@@ -1,9 +0,0 @@
1
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
- import { trackUserClick } from '../libs/eventTracking';
7
- export const trackClick = (target, trackingData) => trackUserClick(_objectSpread(_objectSpread({}, trackingData), {}, {
8
- target
9
- }));
@@ -1,4 +0,0 @@
1
- export declare const useEverInView: (rootMargin?: string, threshold?: number) => {
2
- everInView: boolean;
3
- ref: import("react").MutableRefObject<null>;
4
- };
@@ -1,43 +0,0 @@
1
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
- /**
8
- * this code is duplicated from /libs/hooks/sensors
9
- * importing library code into a library is challenging at the moment
10
- * until we have an easy way to do that, this is the solution!
11
- */
12
- import { useEffect, useRef, useState } from 'react';
13
- import { useIntersection } from './useIntersection';
14
-
15
- // Set either rootMargin or threshold for your use case. The threshold
16
- // will determine the amount of the element that needs to come into the viewport
17
- // before the useEverInView hook is triggered. The rootMargin will determine the
18
- // size of the root element's bounding box.
19
- // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API#intersection_observer_options
20
- export const useEverInView = function () {
21
- let rootMargin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '0px';
22
- let threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.2;
23
- const ref = useRef(null);
24
- const _useState = useState(false),
25
- _useState2 = _slicedToArray(_useState, 2),
26
- everInView = _useState2[0],
27
- setEverInView = _useState2[1];
28
- const intersection = useIntersection(ref, {
29
- root: null,
30
- rootMargin,
31
- threshold
32
- });
33
- const inView = intersection === null || intersection === void 0 ? void 0 : intersection.isIntersecting;
34
- useEffect(() => {
35
- if (inView) {
36
- setEverInView(true);
37
- }
38
- }, [inView]);
39
- return {
40
- everInView: Boolean(everInView || inView),
41
- ref
42
- };
43
- };
@@ -1,39 +0,0 @@
1
- import { renderHook } from '@testing-library/react';
2
- import { useEverInView } from './useEverInView';
3
- const mockUseIntersection = jest.fn();
4
- jest.mock('./useIntersection', () => ({
5
- get useIntersection() {
6
- return mockUseIntersection;
7
- }
8
- }));
9
- const ref = {
10
- current: null
11
- };
12
- describe('useEverInView', () => {
13
- it('returns true after inView becomes false after true', async () => {
14
- mockUseIntersection.mockReturnValueOnce(null);
15
- const _renderHook = renderHook(() => useEverInView()),
16
- result = _renderHook.result,
17
- rerender = _renderHook.rerender;
18
- expect(result.current).toEqual({
19
- everInView: false,
20
- ref
21
- });
22
- mockUseIntersection.mockReturnValueOnce({
23
- isIntersecting: true
24
- });
25
- rerender();
26
- expect(result.current).toEqual({
27
- everInView: true,
28
- ref
29
- });
30
- mockUseIntersection.mockReturnValueOnce({
31
- isIntersecting: false
32
- });
33
- rerender();
34
- expect(result.current).toEqual({
35
- everInView: true,
36
- ref
37
- });
38
- });
39
- });
@@ -1,2 +0,0 @@
1
- import { RefObject } from 'react';
2
- export declare const useIntersection: (ref: RefObject<HTMLElement>, options: IntersectionObserverInit) => IntersectionObserverEntry | null;
@@ -1,33 +0,0 @@
1
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
- import { useEffect, useState } from 'react';
8
- export const useIntersection = (ref, options) => {
9
- const _useState = useState(null),
10
- _useState2 = _slicedToArray(_useState, 2),
11
- intersectionObserverEntry = _useState2[0],
12
- setIntersectionObserverEntry = _useState2[1];
13
- useEffect(() => {
14
- if (ref.current && typeof IntersectionObserver === 'function') {
15
- const handler = entries => {
16
- setIntersectionObserverEntry(entries[0]);
17
- };
18
- const observer = new IntersectionObserver(handler, {
19
- threshold: options.threshold,
20
- root: options.root,
21
- rootMargin: options.rootMargin
22
- });
23
- observer.observe(ref.current);
24
- return () => {
25
- setIntersectionObserverEntry(null);
26
- observer.disconnect();
27
- };
28
- }
29
- // eslint-disable-next-line @typescript-eslint/no-empty-function
30
- return () => {};
31
- }, [ref, options.threshold, options.root, options.rootMargin]);
32
- return intersectionObserverEntry;
33
- };
@@ -1,76 +0,0 @@
1
- import { act, renderHook } from '@testing-library/react';
2
- import { useIntersection } from './useIntersection';
3
- const originalIntersectionObserver = window.IntersectionObserver;
4
- const mockObserve = jest.fn();
5
- const mockDisconnect = jest.fn();
6
- const mockIntersectionObserver = jest.fn();
7
- const mockIntersectionObserverInstance = {
8
- observe: mockObserve,
9
- disconnect: mockDisconnect
10
- };
11
- const ref = {
12
- current: document.createElement('div')
13
- };
14
- const options = {
15
- root: null,
16
- rootMargin: '0px',
17
- threshold: 0.2
18
- };
19
- beforeEach(() => {
20
- mockIntersectionObserver.mockReturnValue(mockIntersectionObserverInstance);
21
- window.IntersectionObserver = mockIntersectionObserver;
22
- });
23
- afterEach(() => {
24
- window.IntersectionObserver = originalIntersectionObserver;
25
- });
26
- describe('useIntersection', () => {
27
- test('intersection observer is not called', async () => {
28
- // We render useIntersection with ref.current = null,
29
- // which should prevent our hook from calling intersectionObserver.
30
- const hook = renderHook(() => useIntersection({
31
- current: null
32
- }, options));
33
- expect(mockObserve).not.toHaveBeenCalled();
34
- hook.unmount();
35
- expect(mockDisconnect).not.toHaveBeenCalled();
36
- });
37
- test('intersection observer is called', async () => {
38
- // We render useIntersection with ref.current = HTMLdivElement,
39
- // which should make our hook call intersectionObserver.
40
- const hook = renderHook(() => useIntersection(ref, options));
41
- expect(mockObserve).toHaveBeenCalledWith(ref.current);
42
- hook.unmount();
43
- expect(mockDisconnect).toHaveBeenCalled();
44
- });
45
- it('returns the IntersectionObserverEntry from the callback', async () => {
46
- const fakeIntersectionObserverEntry = {};
47
- let handler = () => {
48
- return null;
49
- };
50
-
51
- // We mock the insersectionObserver Implementation
52
- // to grab the handler, which allows us to simulate
53
- // the element getting scrolled into view.
54
- mockIntersectionObserver.mockImplementationOnce(cb => {
55
- handler = cb;
56
- return mockIntersectionObserverInstance;
57
- });
58
- const _renderHook = renderHook(() => useIntersection(ref, options)),
59
- result = _renderHook.result,
60
- rerender = _renderHook.rerender;
61
-
62
- // Element hasn't been scrolled into view and therefore
63
- // results.current should be null.
64
- expect(result.current).toBeNull();
65
-
66
- // Simulate element being scrolled into view
67
- act(() => {
68
- handler([fakeIntersectionObserverEntry]);
69
- });
70
- expect(result.current).toEqual(fakeIntersectionObserverEntry);
71
-
72
- // We expect the results to remain the same after a rerender
73
- rerender();
74
- expect(result.current).toEqual(fakeIntersectionObserverEntry);
75
- });
76
- });
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from './codeByteEditor';
2
- export * from './consts';
3
- export * from './types';
package/dist/index.js DELETED
@@ -1,3 +0,0 @@
1
- export * from './codeByteEditor';
2
- export * from './consts';
3
- export * from './types';
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import type { LanguageOption } from './consts';
3
- export type LanguageSelectionProps = {
4
- onChange: (newLanguage: LanguageOption) => void;
5
- };
6
- export declare const LanguageSelection: React.FC<LanguageSelectionProps>;
@@ -1,23 +0,0 @@
1
- import { Select, Text } from '@codecademy/gamut';
2
- import { ColorMode } from '@codecademy/gamut-styles';
3
- import React from 'react';
4
- import { LanguageOptions } from './consts';
5
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
- export const LanguageSelection = _ref => {
7
- let onChange = _ref.onChange;
8
- return /*#__PURE__*/_jsxs(ColorMode, {
9
- mode: "dark",
10
- flex: 1,
11
- px: 16,
12
- pt: 48,
13
- children: [/*#__PURE__*/_jsx(Text, {
14
- mb: 16,
15
- children: "Which language do you want to code in?"
16
- }), /*#__PURE__*/_jsx(Select, {
17
- id: "language-select",
18
- "aria-label": "Select a language",
19
- options: LanguageOptions,
20
- onChange: e => onChange(e.target.value)
21
- })]
22
- });
23
- };
@@ -1 +0,0 @@
1
- export declare const trackUserClick: (data: import("@codecademy/tracking").UserClickData) => void, trackUserVisit: (data: import("@codecademy/tracking").UserVisitData) => void, trackUserImpression: (data: import("@codecademy/tracking").UserImpressionData) => void;
@@ -1,12 +0,0 @@
1
- import { createTracker } from '@codecademy/tracking';
2
- const IS_DEV = process.env.NODE_ENV === 'development';
3
-
4
- // TODO: confirm tracking details and implementation DISC-447
5
- const tracker = createTracker({
6
- apiBaseUrl: typeof window === 'undefined' ? 'https://www.codecademy.com' : window.location.origin,
7
- verbose: IS_DEV
8
- });
9
- const trackUserClick = tracker.click,
10
- trackUserVisit = tracker.visit,
11
- trackUserImpression = tracker.impression;
12
- export { trackUserClick, trackUserVisit, trackUserImpression };
package/dist/theme.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import { CoreTheme } from '@codecademy/gamut-styles';
2
-
3
- declare module '@emotion/react' {
4
- export interface Theme extends CoreTheme {}
5
- }
package/dist/types.d.ts DELETED
@@ -1,22 +0,0 @@
1
- import { BackgroundProps } from '@codecademy/gamut-styles';
2
- import { UserClickData } from '@codecademy/tracking';
3
- import { LanguageOption } from './consts';
4
- export interface CodebytesChangeHandler {
5
- (text: string, language: LanguageOption): void;
6
- }
7
- export interface CodebytesCopyFormatterParams {
8
- text: string;
9
- language: LanguageOption;
10
- }
11
- export type CodebytesCopyFormatter = ({ text, language, }: CodebytesCopyFormatterParams) => string;
12
- export interface CodeByteEditorProps extends Omit<BackgroundProps, 'bg'> {
13
- text?: string;
14
- language?: LanguageOption;
15
- hideCopyButton?: boolean;
16
- copyFormatter?: CodebytesCopyFormatter;
17
- snippetsBaseUrl?: string;
18
- onEdit?: CodebytesChangeHandler;
19
- onLanguageChange?: CodebytesChangeHandler;
20
- trackingData?: Omit<UserClickData, 'target'>;
21
- trackFirstEdit?: boolean;
22
- }
package/dist/types.js DELETED
@@ -1 +0,0 @@
1
- export {};