├── .babelrc
├── .eslintrc.js
├── .github
└── ISSUE_TEMPLATE
│ └── ------md.md
├── .gitignore
├── .prettierrc
├── README.md
├── package-lock.json
├── package.json
├── public
├── favicon.ico
└── index.html
├── src
├── @types
│ ├── animation.ts
│ ├── colorType.ts
│ ├── index.d.ts
│ └── tabData.ts
├── MainPage.tsx
├── components
│ ├── Alert
│ │ ├── AlertComponent.tsx
│ │ ├── index.tsx
│ │ ├── magicNumber.ts
│ │ └── style.ts
│ ├── Common
│ │ ├── Button
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── Canvas
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── DictionaryContent
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── DropDown
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── LatexContent
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── LatexSymbolContent
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── RoundButton
│ │ │ └── style.tsx
│ │ ├── SaveModeButton
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── Svg
│ │ │ └── index.tsx
│ │ ├── SvgButton
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ ├── Title
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ └── ToolbarButton
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ ├── Header
│ │ ├── HeaderTitle.tsx
│ │ ├── SaveButtons.tsx
│ │ ├── index.tsx
│ │ └── style.tsx
│ ├── LeftSection
│ │ ├── BottomWhiteSpace
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ ├── InputSelectionSection
│ │ │ ├── InputBottomSelectionSection.tsx
│ │ │ ├── InputTopSelectionSection.tsx
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── LeftSection.tsx
│ │ ├── LeftSectionStyle.ts
│ │ ├── LeftSectionTemplate.tsx
│ │ ├── ResizingArea
│ │ │ ├── MathSection
│ │ │ │ ├── ButtonList.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── style.tsx
│ │ │ ├── TemplateSection
│ │ │ │ ├── index.tsx
│ │ │ │ └── style.tsx
│ │ │ └── index.tsx
│ │ └── ResizingBar
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ ├── MainSection
│ │ ├── CropSection.tsx
│ │ ├── LatexSection
│ │ │ ├── Handle.tsx
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── MainSection.tsx
│ │ ├── MainSectionStyle.ts
│ │ ├── MainSectionTemplate.tsx
│ │ ├── MathQuill
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ └── Tab
│ │ │ ├── PlusTab.tsx
│ │ │ ├── TabList.tsx
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ ├── SubSection
│ │ ├── index.tsx
│ │ └── style.ts
│ ├── Toolbar
│ │ ├── AlignDropdown
│ │ │ ├── AlignContent.tsx
│ │ │ ├── Button.tsx
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── BackgroundDropdown
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── FontColorDropdown
│ │ │ ├── Button.tsx
│ │ │ ├── DropdownContent.tsx
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── FontSizeDropdown
│ │ │ ├── FontButton.tsx
│ │ │ ├── FontContent.tsx
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── GraphButton
│ │ │ ├── Button.tsx
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── HistoryButtons
│ │ │ └── index.tsx
│ │ ├── ItalicButton
│ │ │ └── index.tsx
│ │ ├── PaintDropdown
│ │ │ ├── index.tsx
│ │ │ └── style.tsx
│ │ ├── ToolBar.tsx
│ │ ├── ToolBarStyle.ts
│ │ └── ToolBarTemplate.tsx
│ ├── index.tsx
│ └── style.ts
├── constants
│ ├── InputSection.ts
│ ├── colorList.ts
│ ├── fontSizeList.ts
│ ├── mathSection.ts
│ ├── symbolList.ts
│ └── templateSection.ts
├── hooks
│ ├── useInterval.ts
│ └── useOutSideClick.ts
├── index.tsx
├── mainPageStyle.ts
├── store
│ ├── index.ts
│ └── modules
│ │ ├── alert.ts
│ │ ├── backgroundDropdown.ts
│ │ ├── fontAlign.ts
│ │ ├── fontColorDropdown.ts
│ │ ├── fontDecline.ts
│ │ ├── fontSizeDropdown.ts
│ │ ├── graph.ts
│ │ ├── index.ts
│ │ ├── leftSection.ts
│ │ ├── mathQuill.ts
│ │ ├── paintDropdown.ts
│ │ ├── saveMode.ts
│ │ └── tab.ts
└── utils
│ ├── colors.ts
│ ├── drawingRainAnimation.ts
│ ├── drawingSnowAnimation.ts
│ ├── global-style.ts
│ ├── localstorage.ts
│ ├── savefile.ts
│ ├── setColor.ts
│ └── svg
│ ├── background
│ ├── background_icon.svg
│ ├── blackboard.svg
│ ├── fall.svg
│ ├── spring.svg
│ ├── summer.svg
│ ├── winter.svg
│ ├── 눈배경화면.jpg
│ └── 비배경화면.jpg
│ ├── footer
│ └── .txt
│ ├── header
│ ├── cloud.svg
│ └── logo.svg
│ ├── latex
│ ├── integral
│ │ ├── .txt
│ │ ├── operator
│ │ │ ├── 1.svg
│ │ │ ├── 1_hover.svg
│ │ │ ├── operator1.svg
│ │ │ ├── operator10.svg
│ │ │ ├── operator11.svg
│ │ │ ├── operator2.svg
│ │ │ ├── operator3.svg
│ │ │ ├── operator4.svg
│ │ │ ├── operator5.svg
│ │ │ ├── operator6.svg
│ │ │ ├── operator7.svg
│ │ │ ├── operator8.svg
│ │ │ └── operator9.svg
│ │ └── template
│ │ │ ├── template1.svg
│ │ │ ├── template2.svg
│ │ │ ├── template3.svg
│ │ │ └── template4.svg
│ ├── limit
│ │ ├── .txt
│ │ ├── operator
│ │ │ ├── 1.svg
│ │ │ ├── 1_hover.svg
│ │ │ ├── 2.svg
│ │ │ ├── 3.svg
│ │ │ ├── 4.svg
│ │ │ ├── 5.svg
│ │ │ ├── 6.svg
│ │ │ ├── 7.svg
│ │ │ └── 8.svg
│ │ └── template
│ │ │ ├── template1.svg
│ │ │ ├── template2.svg
│ │ │ ├── template3.svg
│ │ │ ├── template4.svg
│ │ │ ├── template5.svg
│ │ │ └── template6.svg
│ ├── nullPreview.png
│ └── sigma
│ │ ├── .txt
│ │ ├── operator
│ │ ├── 1.svg
│ │ ├── 10.svg
│ │ ├── 11.svg
│ │ ├── 12.svg
│ │ ├── 13.svg
│ │ ├── 1_hover.svg
│ │ ├── 2.svg
│ │ ├── 3.svg
│ │ ├── 4.svg
│ │ ├── 5.svg
│ │ ├── 6.svg
│ │ ├── 7.svg
│ │ ├── 8.svg
│ │ └── 9.svg
│ │ └── template
│ │ ├── template1.svg
│ │ ├── template2.svg
│ │ ├── template3.svg
│ │ ├── template4.svg
│ │ └── template5.svg
│ ├── leftsection
│ ├── inputsection
│ │ ├── arrow.svg
│ │ ├── decoration.svg
│ │ ├── division.svg
│ │ ├── figure.svg
│ │ ├── font.svg
│ │ ├── galho.svg
│ │ ├── greece.svg
│ │ ├── inequality.svg
│ │ ├── inputdraw.svg
│ │ ├── integral.svg
│ │ ├── limit.svg
│ │ ├── matrix.svg
│ │ ├── minus.svg
│ │ ├── multiple.svg
│ │ ├── multiply.svg
│ │ ├── notoperator.svg
│ │ ├── operator.svg
│ │ ├── plus.svg
│ │ ├── pow.svg
│ │ ├── root.svg
│ │ ├── sigma.svg
│ │ ├── sin.svg
│ │ ├── specialsymbol.svg
│ │ └── unit.svg
│ ├── mathsection
│ │ ├── bracket
│ │ │ ├── absolute.svg
│ │ │ ├── absolute2.svg
│ │ │ ├── absolute3.svg
│ │ │ ├── angle-bracket.svg
│ │ │ ├── curly-bracket.svg
│ │ │ ├── delimited-angle-brackets.svg
│ │ │ ├── delimited-angle-brackets2.svg
│ │ │ ├── delimited-braces.svg
│ │ │ ├── index.ts
│ │ │ ├── lower-bound.svg
│ │ │ ├── parentheses.svg
│ │ │ ├── separated-parentheses.svg
│ │ │ ├── square-bracket.svg
│ │ │ └── upper-bound.svg
│ │ ├── combi
│ │ │ ├── combi-all.svg
│ │ │ ├── combi-down-both.svg
│ │ │ ├── combi-down.svg
│ │ │ ├── combi-left.svg
│ │ │ ├── combi-right.svg
│ │ │ ├── combi.svg
│ │ │ └── index.ts
│ │ ├── deco
│ │ │ ├── acute.svg
│ │ │ ├── bar.svg
│ │ │ ├── bbar.svg
│ │ │ ├── boxed.svg
│ │ │ ├── breve.svg
│ │ │ ├── check.svg
│ │ │ ├── dot.svg
│ │ │ ├── double-dot.svg
│ │ │ ├── grave.svg
│ │ │ ├── hat.svg
│ │ │ ├── index.ts
│ │ │ ├── over-left-arrow.svg
│ │ │ ├── over-left-harpoon-up.svg
│ │ │ ├── over-left-right-arrow.svg
│ │ │ ├── over-right-arrow.svg
│ │ │ ├── over-right-harpoon-up.svg
│ │ │ ├── overbrace.svg
│ │ │ ├── overbrace2.svg
│ │ │ ├── overline.svg
│ │ │ ├── tilde.svg
│ │ │ ├── triple-dot.svg
│ │ │ ├── underbrace.svg
│ │ │ ├── underbrace2.svg
│ │ │ └── underline.svg
│ │ ├── fraction
│ │ │ ├── fraction.svg
│ │ │ ├── index.ts
│ │ │ └── slash.svg
│ │ ├── index.ts
│ │ ├── integral
│ │ │ ├── definite-integral.svg
│ │ │ ├── double-integral.svg
│ │ │ ├── double-integral2.svg
│ │ │ ├── index.ts
│ │ │ ├── integral-theorem.svg
│ │ │ ├── integral.svg
│ │ │ ├── line-integral.svg
│ │ │ ├── line-integral2.svg
│ │ │ ├── surface-integral.svg
│ │ │ ├── surface-integral2.svg
│ │ │ ├── volumn-integral.svg
│ │ │ └── volumn-integral2.svg
│ │ ├── large-operator
│ │ │ ├── index.ts
│ │ │ ├── intersection.svg
│ │ │ ├── intersection2.svg
│ │ │ ├── pi.svg
│ │ │ ├── pi2.svg
│ │ │ ├── sigma.svg
│ │ │ ├── sigma2.svg
│ │ │ ├── union.svg
│ │ │ ├── union2.svg
│ │ │ ├── vee.svg
│ │ │ ├── vee2.svg
│ │ │ ├── wedge.svg
│ │ │ └── wedge2.svg
│ │ ├── limit
│ │ │ ├── index.ts
│ │ │ ├── lim.svg
│ │ │ ├── lim2.svg
│ │ │ ├── ln.svg
│ │ │ ├── log.svg
│ │ │ ├── log2.svg
│ │ │ ├── max.svg
│ │ │ └── min.svg
│ │ ├── matrix
│ │ │ ├── add-matrix-col.svg
│ │ │ ├── add-matrix-row.svg
│ │ │ ├── bmatrix.svg
│ │ │ ├── cases.svg
│ │ │ ├── cases2.svg
│ │ │ ├── index.ts
│ │ │ ├── matrix_1x2.svg
│ │ │ ├── matrix_2x1.svg
│ │ │ ├── matrix_2x2.svg
│ │ │ ├── matrix_2x3.svg
│ │ │ ├── matrix_3x2.svg
│ │ │ ├── matrix_3x3.svg
│ │ │ ├── pmatrix.svg
│ │ │ └── vmatrix.svg
│ │ ├── sqrt
│ │ │ ├── index.ts
│ │ │ ├── sqrt-with-degree.svg
│ │ │ └── sqrt.svg
│ │ ├── symbol
│ │ │ ├── colon-equal.svg
│ │ │ ├── def-equal.svg
│ │ │ ├── delta-equal.svg
│ │ │ ├── equal.svg
│ │ │ ├── index.ts
│ │ │ ├── m-equal.svg
│ │ │ ├── minus-equal.svg
│ │ │ ├── plus-equal.svg
│ │ │ ├── x-left-arrow.svg
│ │ │ ├── x-left-arrow2.svg
│ │ │ ├── x-left-arrow3.svg
│ │ │ ├── x-left-arrow4.svg
│ │ │ ├── x-left-arrow5.svg
│ │ │ ├── x-left-arrow6.svg
│ │ │ ├── x-left-right-arrow.svg
│ │ │ ├── x-left-right-arrow2.svg
│ │ │ ├── x-left-right-arrow3.svg
│ │ │ ├── x-left-right-arrow4.svg
│ │ │ ├── x-left-right-arrow5.svg
│ │ │ ├── x-left-right-arrow6.svg
│ │ │ ├── x-right-arrow.svg
│ │ │ ├── x-right-arrow2.svg
│ │ │ ├── x-right-arrow3.svg
│ │ │ ├── x-right-arrow4.svg
│ │ │ ├── x-right-arrow5.svg
│ │ │ └── x-right-arrow6.svg
│ │ └── trigonometric
│ │ │ ├── cos.svg
│ │ │ ├── cos2.svg
│ │ │ ├── cot.svg
│ │ │ ├── cot2.svg
│ │ │ ├── csc.svg
│ │ │ ├── csc2.svg
│ │ │ ├── f-func.svg
│ │ │ ├── f-func2.svg
│ │ │ ├── g-func.svg
│ │ │ ├── g-func2.svg
│ │ │ ├── h-func.svg
│ │ │ ├── h-func2.svg
│ │ │ ├── index.ts
│ │ │ ├── sec.svg
│ │ │ ├── sec2.svg
│ │ │ ├── sin.svg
│ │ │ ├── sin2.svg
│ │ │ ├── tan.svg
│ │ │ └── tan2.svg
│ └── templatesection
│ │ ├── bracket
│ │ ├── bracket.svg
│ │ ├── bracket2.svg
│ │ ├── bracket3.svg
│ │ ├── bracket4.svg
│ │ └── index.ts
│ │ ├── combi
│ │ ├── combi.svg
│ │ ├── combi2.svg
│ │ ├── combi3.svg
│ │ ├── combi4.svg
│ │ ├── combi5.svg
│ │ ├── combi6.svg
│ │ └── index.ts
│ │ ├── deco
│ │ ├── deco.svg
│ │ ├── deco2.svg
│ │ ├── deco3.svg
│ │ └── index.ts
│ │ ├── down-arrow.svg
│ │ ├── fraction
│ │ ├── fraction.svg
│ │ ├── fraction2.svg
│ │ └── index.ts
│ │ ├── index.ts
│ │ ├── integral
│ │ ├── index.ts
│ │ ├── integral.svg
│ │ ├── integral2.svg
│ │ ├── integral3.svg
│ │ └── integral4.svg
│ │ ├── large-operator
│ │ ├── index.ts
│ │ ├── large-operator.svg
│ │ ├── large-operator2.svg
│ │ ├── large-operator3.svg
│ │ ├── large-operator4.svg
│ │ └── large-operator5.svg
│ │ ├── limit
│ │ ├── index.ts
│ │ ├── limit.svg
│ │ ├── limit2.svg
│ │ ├── limit3.svg
│ │ ├── limit4.svg
│ │ ├── limit5.svg
│ │ └── limit6.svg
│ │ ├── matrix
│ │ ├── index.ts
│ │ ├── matrix.svg
│ │ └── matrix2.svg
│ │ ├── sqrt
│ │ ├── index.ts
│ │ ├── sqrt.svg
│ │ └── sqrt2.svg
│ │ ├── symbol
│ │ ├── index.ts
│ │ ├── symbol.svg
│ │ ├── symbol2.svg
│ │ ├── symbol3.svg
│ │ └── symbol4.svg
│ │ ├── trigonometric
│ │ ├── cos.svg
│ │ ├── func.svg
│ │ ├── func2.svg
│ │ ├── func3.svg
│ │ ├── func4.svg
│ │ ├── func5.svg
│ │ ├── index.ts
│ │ ├── sin.svg
│ │ └── tan.svg
│ │ └── up-arrow.svg
│ ├── loading.svg
│ ├── rightsection
│ └── .txt
│ ├── tab
│ ├── plus_icon.svg
│ └── x_icon.svg
│ └── toolbar
│ ├── align-center.svg
│ ├── align-left.svg
│ ├── align-right.svg
│ ├── back.svg
│ ├── clear.svg
│ ├── drawer.svg
│ ├── erase.svg
│ ├── font-check.svg
│ ├── font-color-active.svg
│ ├── forward.svg
│ └── graph.svg
├── tsconfig.json
└── webpack.config.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env",{
3 | "targets":{
4 | "node":"current",
5 | "ie":11,
6 | "browsers":["last 2 versions", ">= 5% in KR"]
7 | },
8 | "corejs": 3,
9 | }, "@babel/preset-react"]
10 | }
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | parser: '@typescript-eslint/parser',
3 | plugins: ['@typescript-eslint', 'react-hooks'],
4 | extends: [
5 | 'airbnb',
6 | 'plugin:react/recommended',
7 | 'plugin:jsx-a11y/recommended',
8 | 'plugin:import/errors',
9 | 'plugin:import/warnings',
10 | 'plugin:@typescript-eslint/recommended',
11 | 'plugin:prettier/recommended',
12 | ],
13 | rules: {
14 | 'import/no-unresolved': 'off',
15 | 'prettier/prettier': [
16 | 'error',
17 | {
18 | endOfLine: 'auto',
19 | },
20 | ],
21 | 'react/jsx-filename-extension': [
22 | 2,
23 | { extensions: ['.js', '.jsx', '.ts', '.tsx'] },
24 | ],
25 | 'no-use-before-define': 'off',
26 | '@typescript-eslint/no-use-before-define': ['error'],
27 | '@typescript-eslint/no-var-requires': 0,
28 | '@typescript-eslint/no-inferrable-types': 0,
29 | '@typescript-eslint/explicit-function-return-type': 'off',
30 | '@typescript-eslint/explicit-module-boundary-types': 'off',
31 | 'import/prefer-default-export': 'off',
32 | 'import/extensions': ['off', 'never'],
33 | 'func-names': ['off', 'always'],
34 | },
35 |
36 | settings: {
37 | 'import/resolver': {
38 | node: {
39 | extensions: ['.js', '.jsx', '.ts', '.tsx'],
40 | },
41 | },
42 | },
43 | };
44 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/------md.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 이슈템플릿.md
3 | about: 이슈템플릿입니다.
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## 목표
11 |
12 |
13 | ## 체크 리스트
14 | - [ ]
15 | - [ ]
16 | - [ ]
17 |
18 | ## 참고
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (http://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # Typescript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "parser": "typescript",
4 | "semi": true,
5 | "useTabs": false,
6 | "tabWidth": 2,
7 | "printWidth": 80,
8 | "arrowParens": "always"
9 | }
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcamp-2020/Project15-A-Client-Based-Formula-Editor/27e339f92a89fb38ee7ef8b4100c96cf714a3e06/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 수식판
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/@types/animation.ts:
--------------------------------------------------------------------------------
1 | interface Position {
2 | x: number;
3 | y: number;
4 | }
5 | export interface SnowProps extends Position {
6 | randomRadius: number;
7 | g: CanvasGradient;
8 | distance: number;
9 | t: number;
10 | }
11 | export interface RainProps extends Position {
12 | distance: number;
13 | rainLength: number;
14 | }
15 |
--------------------------------------------------------------------------------
/src/@types/colorType.ts:
--------------------------------------------------------------------------------
1 | export interface colorType {
2 | fontGreen: string;
3 | black: string;
4 | white: string;
5 | alertWhite: string;
6 | borderGrey: string;
7 | mainGreen: string;
8 | lightGrey: string;
9 | grey: string;
10 | darkGrey: string;
11 | backgroundGrey: string;
12 | hoverGrey: string;
13 | dragEffect: string;
14 | graphPuple: string;
15 | rainColor: string;
16 | errorBackground: string;
17 | errorBorder: string;
18 | error: string;
19 | succesBackground: string;
20 | succesBorder: string;
21 | success: string;
22 | infoBackround: string;
23 | infoBorder: string;
24 | info: string;
25 | }
26 |
--------------------------------------------------------------------------------
/src/@types/index.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.svg' {
2 | const src: string;
3 | export default src;
4 | }
5 |
6 | declare module '*.png' {
7 | const src: string;
8 | export default src;
9 | }
10 |
11 | declare module '*.jpg' {
12 | const src: string;
13 | export default src;
14 | }
15 |
--------------------------------------------------------------------------------
/src/@types/tabData.ts:
--------------------------------------------------------------------------------
1 | export interface TabData {
2 | id: number;
3 | title: string;
4 | latex: string;
5 | fontColor: string;
6 | fontSize: number;
7 | fontDecline: boolean;
8 | fontAlign: string;
9 | preLaTex: string[];
10 | nextLaTex: string[];
11 | }
12 |
--------------------------------------------------------------------------------
/src/MainPage.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { GlobalStyle } from '@src/utils/global-style';
3 | import * as Semantic from '@src/components/index';
4 | import * as StyleComponent from './mainPageStyle';
5 |
6 | const MainPage = () => {
7 | return (
8 | <>
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | >
18 | );
19 | };
20 |
21 | export default MainPage;
22 |
--------------------------------------------------------------------------------
/src/components/Alert/AlertComponent.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/destructuring-assignment */
2 | import React from 'react';
3 |
4 | const AlertComponent = (props: any) => {
5 | return (
6 | <>
7 |
8 | {props.messageType}
9 |
10 |
11 | >
12 | );
13 | };
14 |
15 | export default AlertComponent;
16 |
--------------------------------------------------------------------------------
/src/components/Alert/magicNumber.ts:
--------------------------------------------------------------------------------
1 | const masicNumber = {
2 | INFO: 0,
3 | ERROR: 1,
4 | SUCCESS: 2,
5 | };
6 | export default masicNumber;
7 |
--------------------------------------------------------------------------------
/src/components/Alert/style.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const MiddleHolder = styled.div<{ visible: boolean }>`
5 | position: absolute;
6 | visibility: ${(props) => (props.visible ? 'visible' : 'hidden')};
7 | top: 10px;
8 | width: 100%;
9 | margin: 0 auto;
10 | border-radius: 0 0 5px 5px;
11 | background: transparent;
12 | opacity: ${(props) => (props.visible ? 1 : 0)};
13 | align-items: center;
14 | z-index: 10;
15 | transition: ${(props) =>
16 | props.visible
17 | ? 'opacity 0.1s linear'
18 | : 'visibility 0s 2s, opacity 2s linear'};
19 | strong {
20 | font-weight: bold;
21 | }
22 | .alert {
23 | width: fit-content;
24 | margin: 10px auto 20px;
25 | padding: 8px 35px;
26 | border: 1px solid #fbeed5;
27 | border-radius: 4px;
28 | text-shadow: 0 1px 0 ${colors.alertWhite};
29 | }
30 | .alert-error {
31 | border-color: ${colors.errorBorder};
32 | background-color: ${colors.errorBackground};
33 | color: ${colors.error};
34 | }
35 | .alert-success {
36 | border-color: ${colors.succesBorder};
37 | background-color: ${colors.succesBackground};
38 | color: ${colors.success};
39 | }
40 | .alert-info {
41 | border-color: ${colors.infoBorder};
42 | background-color: ${colors.infoBackround};
43 | color: ${colors.info};
44 | }
45 | `;
46 |
--------------------------------------------------------------------------------
/src/components/Common/Button/index.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/extensions */
2 | import React from 'react';
3 | import * as StyleComponent from './style';
4 |
5 | interface ButtonProps {
6 | color: string;
7 | value: string;
8 | onClick: () => void;
9 | }
10 |
11 | const Button = ({ color, value, onClick }: ButtonProps) => {
12 | return (
13 |
14 | {value}
15 |
16 | );
17 | };
18 | export default Button;
19 |
--------------------------------------------------------------------------------
/src/components/Common/Button/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const CustomButton = styled.button`
5 | width: 100px;
6 | height: 100%;
7 | margin-left: 5px;
8 | outline: 0;
9 | border-radius: 7px;
10 | border: none;
11 | background-color: ${colors.mainGreen};
12 | color: ${colors.white};
13 | text-align: center;
14 | font-size: 18px;
15 | font-weight: bold;
16 | cursor: pointer;
17 | &:hover {
18 | opacity: 0.6;
19 | }
20 | `;
21 |
--------------------------------------------------------------------------------
/src/components/Common/Canvas/index.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/destructuring-assignment */
2 | import React, { RefObject } from 'react';
3 | import * as StyledComponent from './style';
4 |
5 | interface ButtonProps {
6 | backgroundCanvas: RefObject;
7 | show: string;
8 | }
9 |
10 | const Canvas = ({ backgroundCanvas, show }: ButtonProps) => {
11 | return ;
12 | };
13 | export default Canvas;
14 |
--------------------------------------------------------------------------------
/src/components/Common/Canvas/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | interface canvasProps {
5 | show: string;
6 | }
7 | export const CanvasContainer = styled.canvas`
8 | position: absolute;
9 | left: 0;
10 | top: 0;
11 | width: 100%;
12 | height: 100%;
13 | background-color: ${colors.white};
14 | z-index: -1;
15 | `;
16 |
--------------------------------------------------------------------------------
/src/components/Common/DictionaryContent/index.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/require-default-props */
2 | import React from 'react';
3 | import { addStyles, StaticMathField } from 'react-mathquill';
4 | import * as StyleComponent from './style';
5 |
6 | addStyles();
7 | interface Props {
8 | latex: string;
9 | width: string;
10 | height: string;
11 | onClick?: () => void;
12 | }
13 |
14 | export const DictionaryContent = ({ latex, width, height, onClick }: Props) => {
15 | return (
16 | <>
17 |
22 |
23 | {latex}
24 |
25 |
26 | >
27 | );
28 | };
29 |
--------------------------------------------------------------------------------
/src/components/Common/DictionaryContent/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | interface LatexProps {
5 | width: string;
6 | height: string;
7 | }
8 | export const InputLatexContent = styled.div`
9 | flex: auto;
10 | display: flex;
11 | width: ${(props) => props.width};
12 | height: ${(props) => props.height}px;
13 | border: 1px dashed ${colors.borderGrey};
14 | opacity: 1;
15 | justify-content: center;
16 | align-items: center;
17 | font-size: 80%;
18 | transition-duration: 0.4s;
19 | cursor: pointer;
20 | * {
21 | cursor: pointer;
22 | }
23 | &:hover {
24 | background-color: ${colors.lightGrey};
25 | }
26 | `;
27 |
--------------------------------------------------------------------------------
/src/components/Common/DropDown/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Drawer from '@src/components/Toolbar/PaintDropdown';
3 | import Background from '@src/components/Toolbar/BackgroundDropdown';
4 | import { DropdownDiv, DropdownContent } from './style';
5 |
6 | interface DropDownProps {
7 | click: string;
8 | }
9 | const DropDown = ({ click }: DropDownProps) => {
10 | return (
11 |
12 |
13 | {click === 'drawer' && }
14 | {click === 'background' && }
15 |
16 |
17 | );
18 | };
19 |
20 | export default DropDown;
21 |
--------------------------------------------------------------------------------
/src/components/Common/DropDown/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export const DropdownDiv = styled.div`
4 | position: absolute;
5 | width: 20%;
6 | margin-top: 70px;
7 | margin-left: 20px;
8 | `;
9 | export const DropdownContent = styled.div`
10 | width: 100%;
11 | height: 50px;
12 | box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
13 | z-index: 1;
14 | `;
15 |
--------------------------------------------------------------------------------
/src/components/Common/LatexContent/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | interface LatexProps {
5 | width: string;
6 | height: string;
7 | opacity: number;
8 | }
9 | export const InputLatexContent = styled.div`
10 | flex: auto;
11 | display: flex;
12 | width: ${(props) => props.width}px;
13 | height: ${(props) => props.height}px;
14 | border: 1px dashed ${colors.borderGrey};
15 | opacity: ${(props) => props.opacity};
16 | align-items: center;
17 | justify-content: center;
18 | cursor: pointer;
19 | transition-duration: 0.4s;
20 | &:hover {
21 | background-color: ${colors.lightGrey};
22 | }
23 | `;
24 |
--------------------------------------------------------------------------------
/src/components/Common/LatexSymbolContent/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useDrag } from 'react-dnd';
3 | import * as StyleComponent from './style';
4 |
5 | interface Props {
6 | latex: string;
7 | name: string;
8 | symbol: string;
9 | width: string;
10 | height: string;
11 | onClick?: () => void;
12 | isPossible: boolean;
13 | }
14 |
15 | export const LatexSymbolContent = ({
16 | latex,
17 | name,
18 | symbol,
19 | width,
20 | height,
21 | onClick,
22 | isPossible,
23 | }: Props) => {
24 | const [{ isDragging }, drag] = useDrag({
25 | item: { name, type: 'box', latex, isPossible },
26 | collect: (monitor) => ({
27 | isDragging: monitor.isDragging(),
28 | }),
29 | });
30 | const opacity = isDragging ? 0.4 : 1;
31 |
32 | return (
33 | <>
34 |
41 | {symbol}
42 |
43 | >
44 | );
45 | };
46 |
--------------------------------------------------------------------------------
/src/components/Common/LatexSymbolContent/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | interface LatexProps {
5 | width: string;
6 | height: string;
7 | opacity: number;
8 | }
9 | export const InputLatexContent = styled.div`
10 | flex: auto;
11 | display: flex;
12 | width: ${(props) => props.width}px;
13 | height: ${(props) => props.height}px;
14 | border: 1px dashed ${colors.borderGrey};
15 | opacity: ${(props) => props.opacity};
16 | align-items: center;
17 | justify-content: center;
18 | cursor: pointer;
19 | transition-duration: 0.4s;
20 | &:hover {
21 | background-color: ${colors.lightGrey};
22 | }
23 | `;
24 |
--------------------------------------------------------------------------------
/src/components/Common/RoundButton/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const RoundButton = styled.div`
5 | display: flex;
6 | width: 2rem;
7 | height: 2rem;
8 | border-radius: 3.125rem;
9 | background-color: ${colors.white};
10 | overflow: hidden;
11 | cursor: pointer;
12 | .title {
13 | margin: auto;
14 | color: ${colors.black};
15 | font-family: 'Times New Roman', Times, serif;
16 | font-size: 1 rem;
17 | font-weight: bold;
18 | }
19 | .italic {
20 | margin: auto;
21 | color: ${colors.black};
22 | font-family: 'Times New Roman', Times, serif;
23 | font-size: 1 rem;
24 | font-weight: bold;
25 | font-style: italic;
26 | }
27 | svg {
28 | margin: auto;
29 | }
30 | &:hover {
31 | background-color: #f1f3f4;
32 | }
33 | `;
34 |
--------------------------------------------------------------------------------
/src/components/Common/SaveModeButton/index.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/extensions */
2 | import React from 'react';
3 | import * as StyleComponent from './style';
4 |
5 | interface ButtonProps {
6 | color: string;
7 | value: string;
8 | onClick: () => void;
9 | }
10 |
11 | const Button = ({ color, value, onClick }: ButtonProps) => {
12 | return (
13 |
14 | Save
15 |
16 | );
17 | };
18 | export default Button;
19 |
--------------------------------------------------------------------------------
/src/components/Common/SaveModeButton/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const CustomButton = styled.button`
5 | display: inline-block;
6 | width: 100px;
7 | height: 100%;
8 | outline: 0;
9 | border-radius: 7px;
10 | border: none;
11 | background-color: ${colors.mainGreen};
12 | color: #ffffff;
13 | font-size: 18px;
14 | font-weight: bold;
15 | text-align: center;
16 | cursor: pointer;
17 | transition: all 0.5s;
18 | `;
19 |
20 | export const Span = styled.span`
21 | display: inline-block;
22 | position: relative;
23 | transition: 0.5s;
24 | cursor: pointer;
25 |
26 | &::after {
27 | position: absolute;
28 | top: 0;
29 | right: -20px;
30 | opacity: 0;
31 | transition: 0.5s;
32 | content: '\\00bb';
33 | }
34 |
35 | ${CustomButton}:hover & {
36 | padding-right: 25px;
37 | }
38 |
39 | ${CustomButton}:hover &::after {
40 | right: 0;
41 | opacity: 1;
42 | }
43 | `;
44 |
--------------------------------------------------------------------------------
/src/components/Common/Svg/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | interface SvgProps {
4 | Svg: string;
5 | }
6 | const SvgSection = ({ Svg }: SvgProps) => {
7 | return ;
8 | };
9 |
10 | export default SvgSection;
11 |
--------------------------------------------------------------------------------
/src/components/Common/SvgButton/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import * as StyleComponent from './style';
3 |
4 | interface ButtonProps {
5 | svgColor: string;
6 | Svg: string;
7 | onClick: () => void;
8 | }
9 |
10 | const SvgButton = ({ svgColor, Svg, onClick }: ButtonProps) => {
11 | return (
12 |
13 |
14 |
15 | );
16 | };
17 |
18 | export default SvgButton;
19 |
--------------------------------------------------------------------------------
/src/components/Common/SvgButton/style.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export interface Props {
4 | svgColor: string;
5 | }
6 |
7 | export const CustomButton = styled.div`
8 | svg {
9 | fill: ${(props) => props.svgColor};
10 | }
11 | `;
12 |
--------------------------------------------------------------------------------
/src/components/Common/Title/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import * as StyledComponent from './style';
3 |
4 | export interface NameProps {
5 | title?: string;
6 | }
7 |
8 | const Title = ({ title }: NameProps) => {
9 | return (
10 | {title}
11 | );
12 | };
13 |
14 | export default Title;
15 |
--------------------------------------------------------------------------------
/src/components/Common/Title/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export const TitleContainer = styled.div`
4 | flex: none;
5 | display: flex;
6 | width: 97%;
7 | height: 33px;
8 | padding-left: 7px;
9 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
10 | align-items: center;
11 | font-size: 17px;
12 | font-weight: bold;
13 | `;
14 |
--------------------------------------------------------------------------------
/src/components/Common/ToolbarButton/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import * as StyleComponent from './style';
3 |
4 | interface ButtonProps {
5 | color: string;
6 | Svg: string;
7 | onClick: () => void;
8 | }
9 | const ToolBarButton = ({ Svg, color, onClick }: ButtonProps) => {
10 | return (
11 | <>
12 |
13 |
14 |
15 | >
16 | );
17 | };
18 | export default ToolBarButton;
19 |
--------------------------------------------------------------------------------
/src/components/Common/ToolbarButton/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const CustomButton = styled.div`
5 | cursor: pointer;
6 | svg {
7 | fill: ${colors.white};
8 | &:hover {
9 | fill: ${colors.darkGrey};
10 | }
11 | }
12 | `;
13 |
--------------------------------------------------------------------------------
/src/components/Header/HeaderTitle.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import * as StyledComponent from './style';
3 |
4 | const HeaderTitle = () => {
5 | return (
6 |
7 | 수식판
8 | Formula-Editor-A
9 |
10 | );
11 | };
12 |
13 | export default HeaderTitle;
14 |
--------------------------------------------------------------------------------
/src/components/LeftSection/BottomWhiteSpace/index.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/ban-types */
2 | import React from 'react';
3 | import * as StyledComponent from './style';
4 |
5 | const BottomWhiteSpace = () => {
6 | return ;
7 | };
8 |
9 | export default BottomWhiteSpace;
10 |
--------------------------------------------------------------------------------
/src/components/LeftSection/BottomWhiteSpace/style.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const BottomWhiteSpace = styled.div`
5 | width: 98%;
6 | height: 3%;
7 | background-color: ${colors.borderGrey};
8 | `;
9 |
--------------------------------------------------------------------------------
/src/components/LeftSection/InputSelectionSection/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Title from '@src/components/Common/Title';
3 | import InputTopSelectionSection from '@src/components/LeftSection/InputSelectionSection/InputTopSelectionSection';
4 | import InputBottomSelectionSection from '@src/components/LeftSection/InputSelectionSection/InputBottomSelectionSection';
5 | import * as StyledComponent from './style';
6 |
7 | const InputSelectionSectionContainer = () => {
8 | return (
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | );
17 | };
18 | export default InputSelectionSectionContainer;
19 |
--------------------------------------------------------------------------------
/src/components/LeftSection/LeftSection.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import LeftSectionTemplate from './LeftSectionTemplate';
3 | import InputSelectionSection from './InputSelectionSection';
4 | import ResizingBar from './ResizingBar';
5 | import BottomWhiteSpace from './BottomWhiteSpace';
6 | import ResizingArea from './ResizingArea';
7 |
8 | const LeftSection = () => {
9 | return (
10 | <>
11 | }
13 | ResizingArea={}
14 | ResizingBar={}
15 | BottomWhiteSpace={}
16 | />
17 | >
18 | );
19 | };
20 |
21 | export default LeftSection;
22 |
--------------------------------------------------------------------------------
/src/components/LeftSection/LeftSectionStyle.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const Aside = styled.div`
5 | display: flex;
6 | flex-direction: column;
7 | width: 100%;
8 | height: 100%;
9 | background-color: ${colors.backgroundGrey};
10 |
11 | .SplitPane {
12 | flex: 1 1 0 !important;
13 | position: relative !important;
14 | min-height: initial !important;
15 | }
16 |
17 | .Pane1 {
18 | max-height: 90% !important;
19 | }
20 | .Pane2 {
21 | height: 0px;
22 | }
23 |
24 | .Resizer {
25 | border: 3px solid ${colors.borderGrey};
26 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
27 | -moz-box-sizing: border-box;
28 | -webkit-box-sizing: border-box;
29 | box-sizing: border-box;
30 | background: #000;
31 | opacity: 0.2;
32 | z-index: 1;
33 | -moz-background-clip: padding;
34 | -webkit-background-clip: padding;
35 | background-clip: padding-box;
36 | cursor: row-resize;
37 | }
38 |
39 | .Resizer:hover {
40 | border-color: ${colors.darkGrey};
41 | }
42 | `;
43 |
--------------------------------------------------------------------------------
/src/components/LeftSection/LeftSectionTemplate.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import * as StyleComponent from './LeftSectionStyle';
3 |
4 | interface Props {
5 | InputSectionContainer: JSX.Element;
6 | ResizingBar: JSX.Element;
7 | BottomWhiteSpace: JSX.Element;
8 | ResizingArea: JSX.Element;
9 | }
10 |
11 | const LeftSectionTemplate = ({
12 | InputSectionContainer,
13 | ResizingBar,
14 | BottomWhiteSpace,
15 | ResizingArea,
16 | }: Props) => {
17 | return (
18 |
19 | {InputSectionContainer}
20 | {ResizingBar}
21 | {ResizingArea}
22 | {BottomWhiteSpace}
23 |
24 | );
25 | };
26 |
27 | export default LeftSectionTemplate;
28 |
--------------------------------------------------------------------------------
/src/components/LeftSection/ResizingArea/MathSection/ButtonList.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Loading from '@src/utils/svg/loading.svg';
3 | import * as StyleComponent from './style';
4 |
5 | interface Props {
6 | loading: boolean;
7 | latexContentList: JSX.Element[];
8 | }
9 | const LatexContentList = ({ loading, latexContentList }: Props) => {
10 | return (
11 | <>
12 | {loading === true ? (
13 |
14 |
15 |
16 | ) : (
17 | latexContentList
18 | )}
19 | >
20 | );
21 | };
22 |
23 | export default LatexContentList;
24 |
--------------------------------------------------------------------------------
/src/components/LeftSection/ResizingArea/MathSection/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const MathSectionContainer = styled.div`
5 | display: flex;
6 | flex-direction: column;
7 | width: 98%;
8 | height: 100%;
9 | border: 1px solid ${colors.borderGrey};
10 | background-color: ${colors.white};
11 | `;
12 | export const ButtonContainer = styled.div`
13 | flex: 1;
14 | display: flex;
15 | flex-wrap: wrap;
16 | align-content: flex-start;
17 | overflow: auto;
18 | &::-webkit-scrollbar {
19 | width: 8px;
20 | height: 8px;
21 | background: ${colors.white};
22 | }
23 | &::-webkit-scrollbar-thumb {
24 | border-radius: 3.5px;
25 | background-color: ${colors.lightGrey};
26 |
27 | &:hover {
28 | background-color: ${colors.grey};
29 | }
30 | }
31 | &::-webkit-scrollbar-track {
32 | background: ${colors.white};
33 | }
34 | `;
35 |
36 | export const LoadingContainer = styled.div`
37 | display: flex;
38 | width: 100%;
39 | height: 100%;
40 | align-items: center;
41 | justify-content: center;
42 | `;
43 |
--------------------------------------------------------------------------------
/src/components/LeftSection/ResizingArea/TemplateSection/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const TemplateSectionContainer = styled.div`
5 | display: flex;
6 | flex-direction: column;
7 | width: 98%;
8 | height: 100%;
9 | border: 1px solid ${colors.borderGrey};
10 | background-color: ${colors.white};
11 | `;
12 |
13 | export const Header = styled.div`
14 | display: flex;
15 | align-items: center;
16 | button {
17 | width: 28px;
18 | height: 22px;
19 | margin-left: auto;
20 | margin-right: 10px;
21 | outline: none;
22 | border: none;
23 | background-color: ${colors.white};
24 | opacity: 0.6;
25 | cursor: pointer;
26 | }
27 |
28 | button:hover {
29 | opacity: 1;
30 | }
31 |
32 | & > button > svg {
33 | fill: ${colors.grey};
34 | }
35 | `;
36 |
37 | export const ButtonContainer = styled.div`
38 | display: flex;
39 | flex-wrap: wrap;
40 | align-content: flex-start;
41 | overflow: auto;
42 | &::-webkit-scrollbar {
43 | width: 8px;
44 | height: 8px;
45 | background: ${colors.white};
46 | }
47 | &::-webkit-scrollbar-thumb {
48 | border-radius: 3.5px;
49 | background-color: ${colors.lightGrey};
50 |
51 | &:hover {
52 | background-color: ${colors.grey};
53 | }
54 | }
55 | &::-webkit-scrollbar-track {
56 | background: ${colors.white};
57 | }
58 | `;
59 |
--------------------------------------------------------------------------------
/src/components/LeftSection/ResizingArea/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import SplitPane from 'react-split-pane';
3 | import MathSectionContainer from './MathSection';
4 | import TemplateContainer from './TemplateSection';
5 |
6 | const SplitArea = () => {
7 | return (
8 |
9 |
10 |
11 |
12 | );
13 | };
14 |
15 | export default SplitArea;
16 |
--------------------------------------------------------------------------------
/src/components/LeftSection/ResizingBar/index.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/ban-types */
2 | import React from 'react';
3 | import * as StyledComponent from './style';
4 |
5 | const ResizingBar = () => {
6 | return ;
7 | };
8 |
9 | export default ResizingBar;
10 |
--------------------------------------------------------------------------------
/src/components/LeftSection/ResizingBar/style.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const Bar = styled.div`
5 | width: 100%;
6 | height: 3px;
7 | background-color: ${colors.borderGrey};
8 | `;
9 |
--------------------------------------------------------------------------------
/src/components/MainSection/LatexSection/Handle.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useDrag, DragPreviewImage } from 'react-dnd';
3 | import NullPreviewPng from '@src/utils/svg/latex/nullPreview.png';
4 | import * as StyleComponent from './style';
5 |
6 | export default function Handle() {
7 | const [{ isDragging }, drag, resizePreview] = useDrag({
8 | item: { type: 'resize' },
9 | collect: (monitor) => ({
10 | isDragging: monitor.isDragging(),
11 | }),
12 | });
13 |
14 | return (
15 | <>
16 |
17 |
18 | LaTeX
19 |
20 | >
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/src/components/MainSection/LatexSection/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Handle from './Handle';
3 | import * as StyleComponent from './style';
4 |
5 | interface Props {
6 | value: string;
7 | onChange: (e: React.ChangeEvent) => void;
8 | }
9 |
10 | export default function LaTeXSection({ value, onChange }: Props) {
11 | return (
12 | <>
13 |
14 |
15 |
16 |
17 | >
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/src/components/MainSection/LatexSection/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const LaTex = styled.div`
5 | overflow: hidden;
6 | `;
7 |
8 | export const Handle = styled.div`
9 | display: flex;
10 | padding-top: 10px;
11 | padding-bottom: 10px;
12 | margin-left: 6px;
13 | align-items: center;
14 | color: ${colors.backgroundGrey};
15 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
16 | font-weight: bold;
17 | cursor: row-resize;
18 | `;
19 |
20 | export const Content = styled.div`
21 | display: flex;
22 | height: 100%;
23 | textarea {
24 | padding: 10px;
25 | min-width: 96%;
26 | min-height: 90%;
27 | resize: none;
28 | border: none;
29 | outline: none;
30 | font-size: 17px;
31 | font-weight: bold;
32 | background-color: transparent;
33 | color: ${colors.white};
34 | }
35 | `;
36 |
--------------------------------------------------------------------------------
/src/components/MainSection/MainSectionTemplate.tsx:
--------------------------------------------------------------------------------
1 | import React, { MutableRefObject } from 'react';
2 | import * as StyleComponent from './MainSectionStyle';
3 |
4 | interface Props {
5 | mainSectionRef: MutableRefObject;
6 | mathQuill: JSX.Element;
7 | latex: JSX.Element;
8 | tab: JSX.Element;
9 | resizing: any;
10 | height: number;
11 | canvas: JSX.Element;
12 | alert: JSX.Element;
13 | show: boolean;
14 | }
15 |
16 | const MainSectionTemplate = ({
17 | mainSectionRef,
18 | mathQuill,
19 | latex,
20 | tab,
21 | resizing,
22 | height,
23 | canvas,
24 | alert,
25 | show,
26 | }: Props) => {
27 | return (
28 |
29 |
30 | {alert}
31 | {mathQuill}
32 | {canvas}
33 |
34 |
35 | {latex}
36 | {tab}
37 |
38 | );
39 | };
40 |
41 | export default MainSectionTemplate;
42 |
--------------------------------------------------------------------------------
/src/components/MainSection/Tab/PlusTab.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PlusIcon from '@src/utils/svg/tab/plus_icon.svg';
3 | import * as StyleComponent from './style';
4 |
5 | interface Props {
6 | handleAddTab: () => void;
7 | }
8 |
9 | const PlusTab = ({ handleAddTab }: Props) => {
10 | const onClickHandler = () => {
11 | handleAddTab();
12 | };
13 |
14 | return (
15 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default PlusTab;
22 |
--------------------------------------------------------------------------------
/src/components/MainSection/Tab/TabList.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import SvgButton from '@src/components/Common/SvgButton';
3 | import XIcon from '@src/utils/svg/tab/x_icon.svg';
4 | import colors from '@src/utils/colors';
5 | import * as StyleComponent from './style';
6 |
7 | interface Props {
8 | tabId: number;
9 | selectedTabId: number;
10 | tabTitle: string;
11 | handleChangeTab: (tabId: number) => void;
12 | handleDeleteTab: (tabId: number) => void;
13 | }
14 |
15 | const TabList = ({
16 | tabId,
17 | selectedTabId,
18 | tabTitle,
19 | handleChangeTab,
20 | handleDeleteTab,
21 | }: Props) => {
22 | const onClickHandler = () => {
23 | handleChangeTab(tabId);
24 | };
25 |
26 | const deleteHandler = () => {
27 | handleDeleteTab(tabId);
28 | };
29 |
30 | return (
31 |
36 |
37 | {tabTitle}
38 |
39 |
40 |
45 |
46 | );
47 | };
48 |
49 | export default TabList;
50 |
--------------------------------------------------------------------------------
/src/components/SubSection/style.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | interface Props {
5 | show: boolean;
6 | }
7 |
8 | export const RightArea = styled.div`
9 | flex: 0 1;
10 | flex-basis: ${(props) => (props.show ? '30%' : '0%')};
11 | display: flex;
12 | flex-direction: column;
13 | width: ${(props) => (props.show ? '30%' : '0%')};
14 | background-color: ${colors.graphPuple};
15 | align-items: center;
16 | overflow: hidden;
17 | z-index: 10;
18 | `;
19 |
20 | export const GraphContainer = styled.div`
21 | width: 400px;
22 | height: 300px;
23 | `;
24 |
25 | export const Title = styled.div`
26 | width: 100%;
27 | height: 45px;
28 | margin-top: 30px;
29 | margin-bottom: 30px;
30 | display: flex;
31 | align-items: center;
32 | cursor: pointer;
33 |
34 | .edge {
35 | width: 10px;
36 | height: 100%;
37 | background-color: ${colors.mainGreen};
38 | }
39 | .title {
40 | margin-left: 30px;
41 | font-size: 30px;
42 | font-weight: bold;
43 | color: ${colors.white};
44 | }
45 | `;
46 |
--------------------------------------------------------------------------------
/src/components/Toolbar/AlignDropdown/Button.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import AlignLeft from '@src/utils/svg/toolbar/align-left.svg';
3 | import AlignCenter from '@src/utils/svg/toolbar/align-center.svg';
4 | import AlignRight from '@src/utils/svg/toolbar/align-right.svg';
5 | import * as StyledComponent from './style';
6 |
7 | interface AlignProps {
8 | onClick: () => void;
9 | fontAlign: string;
10 | }
11 | const AlignButton = ({ onClick, fontAlign }: AlignProps) => {
12 | return (
13 |
14 | {fontAlign === 'left' && }
15 | {fontAlign === 'center' && }
16 | {fontAlign === 'right' && }
17 |
18 | );
19 | };
20 |
21 | export default AlignButton;
22 |
--------------------------------------------------------------------------------
/src/components/Toolbar/AlignDropdown/index.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { useDispatch, useSelector } from 'react-redux';
3 | import { RootState } from '@src/store/modules';
4 | import * as fontAlignReducer from '@src/store/modules/fontAlign';
5 | import useOutsideClick from '@src/hooks/useOutSideClick';
6 | import Button from './Button';
7 | import AlignContent from './AlignContent';
8 | import * as StyledComponent from './style';
9 |
10 | const AlignButton = () => {
11 | const { fontAlignDropdown, fontAlign } = useSelector(
12 | (state: RootState) => state.fontAlignReducer
13 | );
14 | const dispatch = useDispatch();
15 | const onClickHandler = () => {
16 | dispatch(fontAlignReducer.showFontAlignDropdown());
17 | };
18 | const onChangeAlignHandler = (position: string) => {
19 | dispatch(fontAlignReducer.changeFontAlign(position));
20 | };
21 | const alignRef = useRef(null);
22 | useOutsideClick(
23 | alignRef,
24 | fontAlignDropdown,
25 | fontAlignReducer.closeFontAlignDropdown
26 | );
27 |
28 | return (
29 |
30 |
31 | {fontAlignDropdown && }
32 |
33 | );
34 | };
35 |
36 | export default AlignButton;
37 |
--------------------------------------------------------------------------------
/src/components/Toolbar/AlignDropdown/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import { RoundButton } from '@src/components/Common/RoundButton/style';
3 | import colors from '@src/utils/colors';
4 |
5 | export const ButtonContainer = styled(RoundButton)`
6 | svg {
7 | background-color: transparent;
8 | }
9 | `;
10 | export const DropdownContainer = styled.div`
11 | display: flex;
12 | position: absolute;
13 | top: 3.75rem;
14 | padding: 12px;
15 | border: solid 1px ${colors.borderGrey};
16 | background-color: ${colors.white};
17 | box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
18 | z-index: 15;
19 | `;
20 |
21 | export const AlignDropdown = styled.div``;
22 |
23 | export const RowContainer = styled.div`
24 | display: flex;
25 | width: 100%;
26 | `;
27 |
28 | export const ColorBox = styled.div`
29 | cursor: pointer;
30 | & + & {
31 | margin-left: 0.3rem;
32 | }
33 | &:hover {
34 | border-radius: 4px;
35 | background-color: ${colors.hoverGrey};
36 | }
37 | `;
38 |
--------------------------------------------------------------------------------
/src/components/Toolbar/BackgroundDropdown/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 | import { RoundButton } from '@src/components/Common/RoundButton/style';
4 |
5 | interface Props {
6 | backgroundDropdown: boolean;
7 | }
8 | export const BackgroundDropdownButton = styled(RoundButton)`
9 | background-color: ${(props) =>
10 | props.backgroundDropdown ? colors.darkGrey : colors.white};
11 | svg path {
12 | fill: ${(props) => props.backgroundDropdown && colors.white};
13 | }
14 |
15 | &:hover {
16 | background-color: ${(props) =>
17 | props.backgroundDropdown ? colors.darkGrey : '#f1f3f4'};
18 | opacity: 0.8;
19 | }
20 | `;
21 |
22 | export const BackgroundContainer = styled.div`
23 | display: flex;
24 | position: absolute;
25 | top: 3.75rem;
26 | width: 70px;
27 | padding: 12px;
28 | border: solid 1px ${colors.borderGrey};
29 | box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
30 | background-color: ${colors.white};
31 | justify-content: space-between;
32 | z-index: 15;
33 | & svg {
34 | cursor: pointer;
35 | width: 30px;
36 | height: 30px;
37 | border: solid 1px ${colors.borderGrey};
38 | border-radius: 4px;
39 | }
40 | & svg:hover {
41 | background-color: ${colors.hoverGrey};
42 | border-radius: 4px;
43 | }
44 | input {
45 | width: 10px;
46 | }
47 | `;
48 |
--------------------------------------------------------------------------------
/src/components/Toolbar/FontColorDropdown/Button.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import * as StyleComponent from './style';
3 |
4 | interface Props {
5 | onClick: () => void;
6 | fontColor: string;
7 | fontColorDropdown: boolean;
8 | }
9 | const FontColorButton = ({ onClick, fontColorDropdown, fontColor }: Props) => {
10 | return (
11 |
12 | {fontColorDropdown ? (
13 | <>
14 | A
15 |
16 | >
17 | ) : (
18 | <>
19 | A
20 |
21 | >
22 | )}
23 |
24 | );
25 | };
26 |
27 | export default FontColorButton;
28 |
--------------------------------------------------------------------------------
/src/components/Toolbar/FontColorDropdown/DropdownContent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import colorList from '@src/constants/colorList';
3 | import * as StyleComponent from './style';
4 |
5 | interface Props {
6 | onClick: (color: string) => void;
7 | }
8 | const DropdownContent = ({ onClick }: Props) => {
9 | return (
10 |
11 |
12 | {colorList.map((color) => {
13 | return (
14 | onClick(color)}
18 | />
19 | );
20 | })}
21 |
22 |
23 | );
24 | };
25 |
26 | export default DropdownContent;
27 |
--------------------------------------------------------------------------------
/src/components/Toolbar/FontSizeDropdown/FontButton.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { RoundButton } from '@src/components/Common/RoundButton/style';
3 |
4 | interface Props {
5 | changeStatus: () => void;
6 | selectedFontSize: number;
7 | }
8 |
9 | const FontButton = ({ changeStatus, selectedFontSize }: Props) => {
10 | const onClickHandler = () => {
11 | changeStatus();
12 | };
13 |
14 | return (
15 |
16 | {selectedFontSize}
17 |
18 | );
19 | };
20 | export default FontButton;
21 |
--------------------------------------------------------------------------------
/src/components/Toolbar/FontSizeDropdown/FontContent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import CheckIcon from '@src/utils/svg/toolbar/font-check.svg';
3 | import * as StyledComponent from './style';
4 |
5 | interface Props {
6 | fontSize: number;
7 | changeFontSize: (size: number) => void;
8 | selectedFontSize: number;
9 | }
10 |
11 | const FontContent = ({ fontSize, changeFontSize, selectedFontSize }: Props) => {
12 | const onClickHandler = () => {
13 | changeFontSize(fontSize);
14 | };
15 |
16 | let isSelected = false;
17 | if (fontSize === selectedFontSize) {
18 | isSelected = true;
19 | }
20 |
21 | return (
22 |
23 | {fontSize}
24 |
25 |
26 | );
27 | };
28 |
29 | export default FontContent;
30 |
--------------------------------------------------------------------------------
/src/components/Toolbar/FontSizeDropdown/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const FontDropdown = styled.div``;
5 | export const DropDownContent = styled.div<{ fontSizeDropdown: boolean }>`
6 | display: ${(props) => (props.fontSizeDropdown ? 'block' : 'none')};
7 | position: absolute;
8 | top: 3.75rem;
9 | width: 6.25rem;
10 | border: 1px solid ${colors.borderGrey};
11 | box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
12 | background-color: white;
13 | z-index: 15;
14 | cursor: pointer;
15 | `;
16 |
17 | export const Content = styled.div<{ isSelected: boolean }>`
18 | display: flex;
19 | align-items: center;
20 | .number {
21 | margin-left: 15px;
22 | color: ${(props) => (props.isSelected ? colors.fontGreen : colors.black)};
23 | font-size: 13px;
24 | }
25 | svg {
26 | visibility: ${(props) => (props.isSelected ? 'visible' : 'hidden')};
27 | margin-left: auto;
28 | margin-top: 5px;
29 | }
30 | &:hover {
31 | background-color: ${colors.hoverGrey};
32 | }
33 | `;
34 |
--------------------------------------------------------------------------------
/src/components/Toolbar/GraphButton/Button.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import GraphIcon from '@src/utils/svg/toolbar/graph.svg';
3 | import * as StyledComponent from './style';
4 |
5 | interface Props {
6 | onClick: () => void;
7 | }
8 | const GraphButton = ({ onClick }: Props) => {
9 | return (
10 |
11 |
12 |
13 | );
14 | };
15 |
16 | export default GraphButton;
17 |
--------------------------------------------------------------------------------
/src/components/Toolbar/GraphButton/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import * as GraphAction from '@src/store/modules/graph';
3 | import { useDispatch } from 'react-redux';
4 | import Button from './Button';
5 |
6 | const Graph = () => {
7 | const dispatch = useDispatch();
8 |
9 | const onClickHandler = () => {
10 | dispatch(GraphAction.clickGraphButton());
11 | };
12 |
13 | return ;
14 | };
15 |
16 | export default Graph;
17 |
--------------------------------------------------------------------------------
/src/components/Toolbar/GraphButton/style.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import { RoundButton } from '@src/components/Common/RoundButton/style';
3 |
4 | export const ButtonContainer = styled(RoundButton)`
5 | svg {
6 | background-color: transparent;
7 | }
8 | `;
9 |
--------------------------------------------------------------------------------
/src/components/Toolbar/HistoryButtons/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useDispatch } from 'react-redux';
3 | import BACK from '@src/utils/svg/toolbar/back.svg';
4 | import FORWORD from '@src/utils/svg/toolbar/forward.svg';
5 | import CLEAR from '@src/utils/svg/toolbar/clear.svg';
6 | import ToolBarButton from '@src/components/Common/ToolbarButton';
7 | import { clear, redo, undo } from '@src/store/modules/mathQuill';
8 | import colors from '@src/utils/colors';
9 |
10 | const OptionButtons = () => {
11 | const dispatch = useDispatch();
12 |
13 | const onClickClearHandler = () => {
14 | dispatch(clear());
15 | };
16 | const onClickBackHandler = () => {
17 | dispatch(undo());
18 | };
19 | const onClickForwardHandler = () => {
20 | dispatch(redo());
21 | };
22 |
23 | const options = [
24 | { Svg: BACK, onClick: onClickBackHandler, id: 1 },
25 | { Svg: FORWORD, onClick: onClickForwardHandler, id: 2 },
26 | { Svg: CLEAR, onClick: onClickClearHandler, id: 3 },
27 | ];
28 |
29 | return (
30 | <>
31 | {options.map((value) => {
32 | return (
33 |
39 | );
40 | })}
41 | >
42 | );
43 | };
44 |
45 | export default OptionButtons;
46 |
--------------------------------------------------------------------------------
/src/components/Toolbar/ItalicButton/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useDispatch, useSelector } from 'react-redux';
3 | import { RootState } from '@src/store/modules';
4 | import { changeDecline } from '@src/store/modules/fontDecline';
5 | import { RoundButton } from '@src/components/Common/RoundButton/style';
6 |
7 | const ItalicButton = () => {
8 | const { fontDecline } = useSelector(
9 | (state: RootState) => state.fontDeclineReducer
10 | );
11 |
12 | const dispatch = useDispatch();
13 |
14 | const onClickDeclineHandler = () => {
15 | dispatch(changeDecline({ fontDecline: !fontDecline }));
16 | };
17 |
18 | return (
19 |
20 | I
21 |
22 | );
23 | };
24 |
25 | export default ItalicButton;
26 |
--------------------------------------------------------------------------------
/src/components/Toolbar/ToolBar.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import FontSizeDropDown from '@src/components/Toolbar/FontSizeDropdown';
3 | import FontColorDropDown from '@src/components/Toolbar/FontColorDropdown';
4 | import ItalicButton from '@src/components/Toolbar/ItalicButton';
5 | import DrawerDropDown from '@src/components/Toolbar/PaintDropdown';
6 | import BackgroundDropDown from '@src/components/Toolbar/BackgroundDropdown';
7 | import AlignDropDown from '@src/components/Toolbar/AlignDropdown';
8 | import GraphButton from '@src/components/Toolbar/GraphButton';
9 | import OptionButtons from '@src/components/Toolbar/HistoryButtons';
10 | import ToolBarTemplate from './ToolBarTemplate';
11 |
12 | const ToolBar = () => {
13 | return (
14 | }
16 | FontColorDropDown={}
17 | AlignDropDown={}
18 | ItalicButton={}
19 | DrawerDropDown={}
20 | BackgroundButton={}
21 | graphButton={}
22 | optionButtons={}
23 | />
24 | );
25 | };
26 |
27 | export default ToolBar;
28 |
--------------------------------------------------------------------------------
/src/components/Toolbar/ToolBarStyle.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const ToolBarTemplate = styled.div`
5 | flex: none;
6 | display: flex;
7 | position: relative;
8 | height: 3rem;
9 | background-color: ${colors.mainGreen};
10 | align-items: center;
11 | `;
12 |
13 | export const Attributes = styled.div`
14 | display: flex;
15 | width: 300px;
16 | margin-left: 20px;
17 | margin-right: 20px;
18 | align-items: center;
19 | justify-content: space-between;
20 | `;
21 |
22 | export const Options = styled.div`
23 | display: flex;
24 | width: 105px;
25 | margin-left: auto;
26 | margin-right: 20px;
27 | align-items: center;
28 | justify-content: space-between;
29 | `;
30 |
--------------------------------------------------------------------------------
/src/components/Toolbar/ToolBarTemplate.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import * as StyleComponent from './ToolBarStyle';
3 |
4 | interface Props {
5 | FontSizeDropDown: JSX.Element;
6 | FontColorDropDown: JSX.Element;
7 | AlignDropDown: JSX.Element;
8 | ItalicButton: JSX.Element;
9 | DrawerDropDown: JSX.Element;
10 | BackgroundButton: JSX.Element;
11 | graphButton: JSX.Element;
12 | optionButtons: JSX.Element;
13 | }
14 |
15 | const ToolBarTemplate = ({
16 | FontSizeDropDown,
17 | FontColorDropDown,
18 | AlignDropDown,
19 | ItalicButton,
20 | DrawerDropDown,
21 | BackgroundButton,
22 | graphButton,
23 | optionButtons,
24 | }: Props) => {
25 | return (
26 |
27 |
28 | {FontColorDropDown}
29 | {FontSizeDropDown}
30 | {AlignDropDown}
31 | {ItalicButton}
32 | {graphButton}
33 | {DrawerDropDown}
34 | {BackgroundButton}
35 |
36 | {optionButtons}
37 |
38 | );
39 | };
40 |
41 | export default ToolBarTemplate;
42 |
--------------------------------------------------------------------------------
/src/components/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ToolBar from '@src/components/Toolbar/ToolBar';
3 | import Header from '@src/components/Header';
4 | import LeftSection from '@src/components/LeftSection/LeftSection';
5 | import MainSection from '@src/components/MainSection/MainSection';
6 | import SubSection from '@src/components/SubSection';
7 | import { RootState } from '@src/store/modules';
8 | import { useSelector } from 'react-redux';
9 | import * as StyleComponent from './style';
10 |
11 | export const HeaderSection = () => {
12 | return (
13 |
14 |
15 |
16 | );
17 | };
18 |
19 | export const Aside = () => {
20 | return (
21 |
22 |
23 |
24 | );
25 | };
26 |
27 | export const Section = () => {
28 | const { visible } = useSelector((state: RootState) => state.graphReducer);
29 | return (
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | );
38 | };
39 |
--------------------------------------------------------------------------------
/src/components/style.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import colors from '@src/utils/colors';
3 |
4 | export const Header = styled.div`
5 | display: flex;
6 | height: 3.8rem;
7 | border-bottom: 1px solid ${colors.borderGrey};
8 | background-color: ${colors.white};
9 | `;
10 |
11 | export const Aside = styled.div`
12 | width: 23%;
13 | @media screen and (max-width: 1600px) {
14 | width: 30%;
15 | }
16 | height: 100%;
17 | `;
18 | export const Main = styled.div`
19 | display: flex;
20 | flex-direction: column;
21 | width: 77%;
22 | @media screen and (max-width: 1600px) {
23 | width: 70%;
24 | }
25 | `;
26 |
27 | export const MoveArea = styled.div`
28 | flex: 1;
29 | display: flex;
30 | width: 100%;
31 |
32 | & > div {
33 | transition: all 1s;
34 | }
35 | `;
36 |
--------------------------------------------------------------------------------
/src/constants/colorList.ts:
--------------------------------------------------------------------------------
1 | const colorList: string[] = [
2 | 'black',
3 | 'red',
4 | 'blue',
5 | 'green',
6 | 'yellow',
7 | 'white',
8 | ];
9 |
10 | export default colorList;
11 |
--------------------------------------------------------------------------------
/src/constants/fontSizeList.ts:
--------------------------------------------------------------------------------
1 | const fontSizeList: number[] = [15, 16, 19, 24, 28, 30, 34];
2 |
3 | export default fontSizeList;
4 |
--------------------------------------------------------------------------------
/src/constants/symbolList.ts:
--------------------------------------------------------------------------------
1 | const symbolList = [
2 | 'arrow',
3 | 'inequality',
4 | 'notoperator',
5 | 'figure',
6 | 'specialsymbol',
7 | 'unit',
8 | 'misc',
9 | 'division',
10 | 'plus',
11 | 'minus',
12 | 'multiple',
13 | 'greece',
14 | ];
15 |
16 | export default symbolList;
17 |
--------------------------------------------------------------------------------
/src/hooks/useInterval.ts:
--------------------------------------------------------------------------------
1 | import React, { MutableRefObject, useEffect, useRef } from 'react';
2 |
3 | const useInterval = (
4 | callback: MutableRefObject,
5 | delay: number
6 | ) => {
7 | const savedCallback: any = useRef();
8 |
9 | // Remember the latest callback.
10 | useEffect(() => {
11 | savedCallback.current = callback;
12 | }, [callback]);
13 |
14 | // Set up the interval.
15 | useEffect(() => {
16 | function tick() {
17 | savedCallback.current();
18 | }
19 | if (delay !== null) {
20 | const id = setInterval(tick, delay);
21 | return () => clearInterval(id);
22 | }
23 | return undefined;
24 | }, [delay]);
25 | };
26 |
27 | export default useInterval;
28 |
--------------------------------------------------------------------------------
/src/hooks/useOutSideClick.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-useless-return */
2 | import { useEffect, MutableRefObject } from 'react';
3 | import { useDispatch } from 'react-redux';
4 |
5 | const outsideClick = (
6 | ref: MutableRefObject,
7 | state: boolean,
8 | action: any
9 | ) => {
10 | const dispatch = useDispatch();
11 | const click = (e: MouseEvent) => {
12 | if (ref && !ref.current.contains(e.target as Element)) {
13 | if (state) dispatch(action());
14 | }
15 | };
16 | useEffect(() => {
17 | document.addEventListener('click', click);
18 | return () => {
19 | document.removeEventListener('click', click);
20 | };
21 | });
22 | };
23 | export default outsideClick;
24 |
--------------------------------------------------------------------------------
/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Provider } from 'react-redux';
3 | import ReactDOM from 'react-dom';
4 | import store from '@src/store';
5 | import MainPage from '@src/MainPage';
6 | import { DndProvider } from 'react-dnd';
7 | import { HTML5Backend } from 'react-dnd-html5-backend';
8 |
9 | ReactDOM.render(
10 |
11 |
12 |
13 |
14 | ,
15 | document.getElementById('root')
16 | );
17 |
--------------------------------------------------------------------------------
/src/mainPageStyle.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export const Wrap = styled.div`
4 | display: flex;
5 | flex-direction: column;
6 | width: 100%;
7 | height: 100%;
8 | `;
9 |
10 | export const Content = styled.div`
11 | flex: 1;
12 | display: flex;
13 | width: 100%;
14 | `;
15 |
--------------------------------------------------------------------------------
/src/store/index.ts:
--------------------------------------------------------------------------------
1 | import { createStore } from 'redux';
2 | import modules from './modules';
3 |
4 | const configureStore = () => {
5 | const store = createStore(modules);
6 |
7 | return store;
8 | };
9 |
10 | export default configureStore();
11 |
--------------------------------------------------------------------------------
/src/store/modules/alert.ts:
--------------------------------------------------------------------------------
1 | import { createAction, handleActions } from 'redux-actions';
2 |
3 | const CHANGE_ALERT_MODE = 'alert/CHANGE_ALERT_MODE' as const;
4 |
5 | export const changeAlertMode = createAction(CHANGE_ALERT_MODE);
6 |
7 | type Action = ReturnType;
8 |
9 | export interface AlertModeState {
10 | mode: number;
11 | toggle: boolean;
12 | }
13 |
14 | const initialState = {
15 | mode: 0,
16 | toggle: false,
17 | };
18 |
19 | export const alertReducer = handleActions(
20 | {
21 | [CHANGE_ALERT_MODE]: (
22 | state: AlertModeState = initialState,
23 | action: Action
24 | ) => {
25 | return { ...state, mode: action.payload, toggle: !state.toggle };
26 | },
27 | },
28 | initialState
29 | );
30 |
--------------------------------------------------------------------------------
/src/store/modules/fontDecline.ts:
--------------------------------------------------------------------------------
1 | import { createAction, handleActions } from 'redux-actions';
2 |
3 | const CHANGE_DECLINE = 'fontDecline/CHANGE_DECLINE' as const;
4 | const LOAD_DECLINE = 'fontDecline/LOAD_DECLINE' as const;
5 |
6 | export const changeDecline = createAction(CHANGE_DECLINE);
7 | export const loadDeline = createAction(LOAD_DECLINE);
8 | type Action = ReturnType | ReturnType;
9 |
10 | export interface DeclineState {
11 | fontDecline: boolean;
12 | }
13 |
14 | const initialState: DeclineState = {
15 | fontDecline: false,
16 | };
17 |
18 | export const fontDeclineReducer = handleActions(
19 | {
20 | [CHANGE_DECLINE]: (state: DeclineState = initialState) => {
21 | return {
22 | ...state,
23 | fontDecline: !state.fontDecline,
24 | };
25 | },
26 | [LOAD_DECLINE]: (state: DeclineState = initialState, action: Action) => {
27 | return {
28 | ...state,
29 | fontDecline: action.payload,
30 | };
31 | },
32 | },
33 | initialState
34 | );
35 |
--------------------------------------------------------------------------------
/src/store/modules/graph.ts:
--------------------------------------------------------------------------------
1 | import { createAction, handleActions } from 'redux-actions';
2 |
3 | const CLICK_GRAPH_BUTTON = 'graph/CLICK_GRAPH_BUTTON' as const;
4 |
5 | export const clickGraphButton = createAction(CLICK_GRAPH_BUTTON);
6 |
7 | export interface GraphState {
8 | visible: boolean;
9 | }
10 | const initialState: GraphState = {
11 | visible: false,
12 | };
13 |
14 | export const graphReducer = handleActions(
15 | {
16 | [CLICK_GRAPH_BUTTON]: (state: GraphState = initialState) => {
17 | return { ...state, visible: !state.visible };
18 | },
19 | },
20 | initialState
21 | );
22 |
--------------------------------------------------------------------------------
/src/store/modules/leftSection.ts:
--------------------------------------------------------------------------------
1 | import { createAction, handleActions } from 'redux-actions';
2 |
3 | const CHANGE_FOMULAR = 'mathquill/CHANGE_FOMULAR' as const;
4 |
5 | export const changeFomula = createAction(CHANGE_FOMULAR);
6 |
7 | type Action = ReturnType;
8 |
9 | export interface LeftSectionState {
10 | name: string;
11 | }
12 |
13 | const initialState = {
14 | name: '',
15 | };
16 |
17 | export const leftSectionReducer = handleActions(
18 | {
19 | [CHANGE_FOMULAR]: (
20 | state: LeftSectionState = initialState,
21 | action: Action
22 | ) => {
23 | return { ...state, name: action.payload };
24 | },
25 | },
26 | initialState
27 | );
28 |
--------------------------------------------------------------------------------
/src/utils/colors.ts:
--------------------------------------------------------------------------------
1 | import { colorType } from '@src/@types/colorType';
2 |
3 | const colors: colorType = {
4 | fontGreen: '#00c73c',
5 | black: '#333',
6 | borderGrey: '#e0e0e0',
7 | mainGreen: '#41D3BD',
8 | lightGrey: '#C7C7C7',
9 | grey: '#818181',
10 | darkGrey: '#464653',
11 | backgroundGrey: '#e3e3e4',
12 | white: '#fff',
13 | hoverGrey: '#f1f1f1',
14 | dragEffect: '#F2F5E9',
15 | graphPuple: '#776e81',
16 | rainColor: '#dfdfdf',
17 | alertWhite: '#fff',
18 | errorBackground: '#f2dede',
19 | errorBorder: '#eed3d7',
20 | error: '#b94a48',
21 | succesBackground: '#dff0d8',
22 | succesBorder: '#d6e9c6',
23 | success: '#468847',
24 | infoBackround: '#d9edf7',
25 | infoBorder: '#bce8f1',
26 | info: '#3a87ad',
27 | };
28 | export default colors;
29 |
--------------------------------------------------------------------------------
/src/utils/global-style.ts:
--------------------------------------------------------------------------------
1 | import { createGlobalStyle } from 'styled-components';
2 | import { reset } from 'styled-reset';
3 |
4 | export const GlobalStyle = createGlobalStyle`
5 | ${reset}
6 | html{
7 | height: 100%;
8 | }
9 | body {
10 | height: 100%;
11 | }
12 | #root {
13 | width: 100vw;
14 | height: 100vh;
15 | overflow: hidden;
16 | }
17 | `;
18 |
--------------------------------------------------------------------------------
/src/utils/localstorage.ts:
--------------------------------------------------------------------------------
1 | export const getLastId = () => {
2 | const storedData = JSON.parse(window.localStorage.getItem('tab-data'));
3 | if (storedData) {
4 | return storedData[storedData.length - 1].id;
5 | }
6 | return 1;
7 | };
8 |
9 | export default { getLastId };
10 |
--------------------------------------------------------------------------------
/src/utils/savefile.ts:
--------------------------------------------------------------------------------
1 | const saveAsFile = (str: string, filename: string) => {
2 | const fileLength = filename.length;
3 | const lastDot = filename.lastIndexOf('.');
4 | const fileExtension = filename.substring(lastDot + 1, fileLength);
5 | const hiddenElement = document.createElement('a');
6 | hiddenElement.href =
7 | fileExtension === 'gif' ? str : `data:attachment/text,${encodeURI(str)}`;
8 | hiddenElement.target = '_blank';
9 | hiddenElement.download = filename;
10 | hiddenElement.click();
11 | };
12 |
13 | export default saveAsFile;
14 |
--------------------------------------------------------------------------------
/src/utils/setColor.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-param-reassign */
2 | /* eslint-disable consistent-return */
3 | const setColor = (e: EventTarget, context: CanvasRenderingContext2D) => {
4 | const e1 = e as HTMLElement;
5 | const colorVal = e1.getAttribute('color');
6 | context.fillStyle = colorVal;
7 | return [colorVal, context];
8 | };
9 | export const canvasX = (clientX: number, canvas: HTMLCanvasElement) => {
10 | const bound = canvas.getBoundingClientRect();
11 | return (clientX - bound.left) * (canvas.width / bound.width);
12 | };
13 |
14 | export const canvasY = (clientY: number, canvas: HTMLCanvasElement) => {
15 | const bound = canvas.getBoundingClientRect();
16 | return (clientY - bound.top) * (canvas.height / bound.height);
17 | };
18 |
19 | export default setColor;
20 |
--------------------------------------------------------------------------------
/src/utils/svg/background/background_icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
43 |
--------------------------------------------------------------------------------
/src/utils/svg/background/눈배경화면.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcamp-2020/Project15-A-Client-Based-Formula-Editor/27e339f92a89fb38ee7ef8b4100c96cf714a3e06/src/utils/svg/background/눈배경화면.jpg
--------------------------------------------------------------------------------
/src/utils/svg/background/비배경화면.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcamp-2020/Project15-A-Client-Based-Formula-Editor/27e339f92a89fb38ee7ef8b4100c96cf714a3e06/src/utils/svg/background/비배경화면.jpg
--------------------------------------------------------------------------------
/src/utils/svg/footer/.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcamp-2020/Project15-A-Client-Based-Formula-Editor/27e339f92a89fb38ee7ef8b4100c96cf714a3e06/src/utils/svg/footer/.txt
--------------------------------------------------------------------------------
/src/utils/svg/header/cloud.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/integral/.txt:
--------------------------------------------------------------------------------
1 | 미/적분 수식
2 | 부정적분 : \int _{\ }^{\ }
3 | 정적분 : \int _{ }^{ }
4 | 이중적분 : \iint _{\ }^{\ }
5 | 이중적분 : \iint _{ }^{ }
6 | 선적분 : \oint _{\ }^{\ }
7 | 선적분 : \oint _{ }^{ }
8 | 면적분 : \oiint _{\ }^{\ }
9 | 면적분 : \oiint _{ }^{ }
10 | 체적분 : \oiiint _{\ }^{\ }
11 | 체적분 : \oiiint _{ }^{ }
12 | 적분의 정리 : \left\lceil \right\rceil _{ }^{ }
13 |
14 | 미/적분 템플릿
15 | 미/적분 템플릿1 : \frac{dy}{dx}
16 | 미/적분 템플릿2 : \frac{\triangle y}{\triangle x}
17 | 미/적분 템플릿3 : \int _{\ }^{\ }f\left(x\right)dx
18 | 미/적분 템플릿4 : \frac{d}{dx}\int _a^sf\left(t\right)dt
--------------------------------------------------------------------------------
/src/utils/svg/latex/integral/operator/operator11.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/integral/operator/operator5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/integral/template/template2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/limit/.txt:
--------------------------------------------------------------------------------
1 | 극한 수식
2 | 로그 : \log _{ }\combi{ }
3 | 로그 : \log \combi{ }
4 | 자연로그 : \ln \combi{ }
5 | 극한 : \lim _{ }^{ }\combi{ }
6 | 극한 : \lim _{\combi{ }\to \combi{ }}^{ }\combi{ }
7 | 최소값 : \min _{ }^{ }\combi{ }
8 | 최대값 : \max _{ }^{ }\combi{ }
9 |
10 | 극한 템플릿
11 | 극한 및 로그 템플릿1 : a^{\log _bx}
12 | 극한 및 로그 템플릿2 : \lim _{n\to \infty }^{ }\combi{ }
13 | 극한 및 로그 템플릿3 : \lim _{n\to \infty }^{ }\left(a_n\pm b_n\right)
14 | 극한 및 로그 템플릿4 : \lim _{\righttriangle x\to 0}^{ }\frac{\righttriangle y}{\righttriangle x}
15 | 극한 및 로그 템플릿5 : \lim _{n\to \infty }^{ }\left(1+\frac{1}{n}\right)^n
16 | 극한 및 로그 템플릿6 : \lim _{n\to \infty }^{ }\sum _{k=1}^n\combi{ }
--------------------------------------------------------------------------------
/src/utils/svg/latex/limit/operator/4.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/limit/template/template2.svg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcamp-2020/Project15-A-Client-Based-Formula-Editor/27e339f92a89fb38ee7ef8b4100c96cf714a3e06/src/utils/svg/latex/limit/template/template2.svg
--------------------------------------------------------------------------------
/src/utils/svg/latex/nullPreview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcamp-2020/Project15-A-Client-Based-Formula-Editor/27e339f92a89fb38ee7ef8b4100c96cf714a3e06/src/utils/svg/latex/nullPreview.png
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/.txt:
--------------------------------------------------------------------------------
1 | 대형 연산자(시그마) 수식
2 | 총합 : \sum _{\ }^{\ }
3 | 총합 : \sum _{ }^{ }
4 | 곱 : \prod _{\ }^{\ }
5 | 곱 : \prod _{ }^{ }
6 | 합집합 : \bigcup _{\ }^{\ }
7 | 합집합 : \bigcup _{ }^{ }
8 | 교집합 : \bigcap _{\ }^{\ }
9 | 교집합 : \bigcap _{ }^{ }
10 | V자형 : \bigvee _{\ }^{\ }
11 | V자형 : \bigvee _{ }^{ }
12 | 쐐기형 : \bigwedge _{\ }^{\ }
13 | 쐐기형 : \bigwedge _{ }^{ }
14 |
15 | 대형 연산자(시그마) 템플릿
16 | 대형 연산자 템플릿1 : \sum _{i=0}^n
17 | 대형 연산자 템플릿2 : \sum _{k=1}^n
18 | 대형 연산자 템플릿3 : \sum _{k=1}^{\infty }
19 | 대형 연산자 템플릿4 : \sum _{k=1}^{\infty }\left(\frac{1}{n}\right)^n
20 | 대형 연산자 템플릿5 : \sum _{k=1}^{\infty }\log
21 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/10.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/11.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/12.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/13.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/1_hover.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/4.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/6.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/7.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/8.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/latex/sigma/operator/9.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/decoration.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/division.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/figure.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/font.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/greece.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/inequality.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/matrix.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/minus.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/multiple.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/multiply.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/notoperator.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/operator.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/plus.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/pow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/root.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/sigma.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/inputsection/specialsymbol.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/absolute.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/absolute2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/absolute3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/angle-bracket.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/curly-bracket.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/delimited-angle-brackets.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/delimited-braces.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/index.ts:
--------------------------------------------------------------------------------
1 | import ABSOLUTE from './absolute.svg';
2 | import ABSOLUTE_2 from './absolute2.svg';
3 | import ABSOLUTE_3 from './absolute3.svg';
4 | import ANGLE_BRACKET from './angle-bracket.svg';
5 | import CURLY_BRACKET from './curly-bracket.svg';
6 | import DELIMITED_ANGLE_BRACKET from './delimited-angle-brackets.svg';
7 | import DELIMITED_ANGLE_BRACKET_2 from './delimited-angle-brackets2.svg';
8 | import DELIMITED_BRACES from './delimited-braces.svg';
9 | import LOWER_BOUND from './lower-bound.svg';
10 | import PARENTHESES from './parentheses.svg';
11 | import SEPARATED_PARENTHESES from './separated-parentheses.svg';
12 | import SQUARE_BRACKET from './square-bracket.svg';
13 | import UPPER_BOUND from './upper-bound.svg';
14 |
15 | export default {
16 | ABSOLUTE,
17 | ABSOLUTE_2,
18 | ABSOLUTE_3,
19 | ANGLE_BRACKET,
20 | CURLY_BRACKET,
21 | DELIMITED_ANGLE_BRACKET,
22 | DELIMITED_ANGLE_BRACKET_2,
23 | DELIMITED_BRACES,
24 | LOWER_BOUND,
25 | PARENTHESES,
26 | SEPARATED_PARENTHESES,
27 | SQUARE_BRACKET,
28 | UPPER_BOUND,
29 | };
30 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/lower-bound.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/parentheses.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/square-bracket.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/bracket/upper-bound.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/combi/combi-down-both.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/combi/combi-down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/combi/combi-left.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/combi/combi-right.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/combi/combi.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/combi/index.ts:
--------------------------------------------------------------------------------
1 | import COMBI from './combi.svg';
2 | import COMBI_DOWN from './combi-down.svg';
3 | import COMBI_DOWN_BOTH from './combi-down-both.svg';
4 | import COMBI_LEFT from './combi-left.svg';
5 | import COMBI_RIGHT from './combi-right.svg';
6 | import COMBI_ALL from './combi-all.svg';
7 |
8 | export default {
9 | COMBI,
10 | COMBI_DOWN,
11 | COMBI_DOWN_BOTH,
12 | COMBI_LEFT,
13 | COMBI_RIGHT,
14 | COMBI_ALL,
15 | };
16 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/acute.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/bar.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/bbar.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/boxed.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/breve.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/check.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/dot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/double-dot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/grave.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/hat.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/over-left-arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/over-left-harpoon-up.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/over-left-right-arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/over-right-arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/over-right-harpoon-up.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/overbrace.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/overbrace2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/overline.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/tilde.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/triple-dot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/underbrace.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/underbrace2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/deco/underline.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/fraction/fraction.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/fraction/index.ts:
--------------------------------------------------------------------------------
1 | import FRACTION from './fraction.svg';
2 | import SLASH from './slash.svg';
3 |
4 | const fraction = {
5 | FRACTION,
6 | SLASH,
7 | };
8 | export default fraction;
9 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/fraction/slash.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/index.ts:
--------------------------------------------------------------------------------
1 | import bracket from './bracket';
2 | import combi from './combi';
3 | import deco from './deco';
4 | import fraction from './fraction';
5 | import integral from './integral';
6 | import largeOperator from './large-operator';
7 | import limit from './limit';
8 | import matrix from './matrix';
9 | import sqrt from './sqrt';
10 | import symbol from './symbol';
11 | import trigonometric from './trigonometric';
12 |
13 | export const SVG = {
14 | fraction,
15 | sqrt,
16 | combi,
17 | integral,
18 | largeOperator,
19 | bracket,
20 | trigonometric,
21 | limit,
22 | deco,
23 | symbol,
24 | matrix,
25 | };
26 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/integral/index.ts:
--------------------------------------------------------------------------------
1 | import INTEGRAL from './integral.svg';
2 | import DEFINITE_INTEGRAL from './definite-integral.svg';
3 | import DOUBLE_INTEGRAL from './double-integral.svg';
4 | import DOUBLE_INTEGRAL_2 from './double-integral2.svg';
5 | import LINE_INTEGRAL from './line-integral.svg';
6 | import LINE_INTEGRAL_2 from './line-integral2.svg';
7 | import VOLUMN_INTEGRAL from './volumn-integral.svg';
8 | import VOLUMN_INTEGRAL_2 from './volumn-integral2.svg';
9 | import SURFACE_INTEGRAL from './surface-integral.svg';
10 | import SURFACE_INTEGRAL_2 from './surface-integral2.svg';
11 | import INTEGRAL_THEOREM from './integral-theorem.svg';
12 |
13 | const integral = {
14 | INTEGRAL,
15 | DEFINITE_INTEGRAL,
16 | DOUBLE_INTEGRAL,
17 | DOUBLE_INTEGRAL_2,
18 | LINE_INTEGRAL,
19 | LINE_INTEGRAL_2,
20 | VOLUMN_INTEGRAL,
21 | VOLUMN_INTEGRAL_2,
22 | SURFACE_INTEGRAL,
23 | SURFACE_INTEGRAL_2,
24 | INTEGRAL_THEOREM,
25 | };
26 | export default integral;
27 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/integral/integral-theorem.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/integral/line-integral.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/index.ts:
--------------------------------------------------------------------------------
1 | import INTERSECTION from './intersection.svg';
2 | import INTERSECTION_2 from './intersection2.svg';
3 | import PI from './pi.svg';
4 | import PI_2 from './pi2.svg';
5 | import SIMGA from './sigma.svg';
6 | import SIMGA_2 from './sigma2.svg';
7 | import UNION from './union.svg';
8 | import UNION_2 from './union2.svg';
9 | import VEE from './vee.svg';
10 | import VEE_2 from './vee2.svg';
11 | import WEDGE from './wedge.svg';
12 | import WEDGE_2 from './wedge2.svg';
13 |
14 | const largeOperator = {
15 | INTERSECTION,
16 | INTERSECTION_2,
17 | PI,
18 | PI_2,
19 | SIMGA,
20 | SIMGA_2,
21 | UNION,
22 | UNION_2,
23 | VEE,
24 | VEE_2,
25 | WEDGE,
26 | WEDGE_2,
27 | };
28 | export default largeOperator;
29 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/intersection.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/pi.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/sigma.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/union.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/vee.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/vee2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/wedge.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/large-operator/wedge2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/limit/index.ts:
--------------------------------------------------------------------------------
1 | import LIM from './lim.svg';
2 | import LIM_2 from './lim2.svg';
3 | import LN from './ln.svg';
4 | import LOG from './log.svg';
5 | import LOG_2 from './log2.svg';
6 | import MAX from './max.svg';
7 | import MIN from './min.svg';
8 |
9 | const limit = { LIM, LIM_2, LN, LOG, LOG_2, MAX, MIN };
10 |
11 | export default limit;
12 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/limit/ln.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/matrix/bmatrix.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/matrix/cases.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/matrix/index.ts:
--------------------------------------------------------------------------------
1 | import MATRIX_1X2 from './matrix_1x2.svg';
2 | import MATRIX_2X1 from './matrix_2x2.svg';
3 | import MATRIX_2X2 from './matrix_2x1.svg';
4 | import MATRIX_2X3 from './matrix_2x3.svg';
5 | import MATRIX_3X2 from './matrix_3x2.svg';
6 | import MATRIX_3X3 from './matrix_3x3.svg';
7 | import CASES from './cases.svg';
8 | import CASES_2 from './cases2.svg';
9 | import BMATRIX from './bmatrix.svg';
10 | import VMATRIX from './vmatrix.svg';
11 | import PMATRIX from './pmatrix.svg';
12 | import ADD_MATRTIX_ROW from './add-matrix-row.svg';
13 | import ADD_MATRTIX_COL from './add-matrix-col.svg';
14 |
15 | const matrix = {
16 | MATRIX_1X2,
17 | MATRIX_2X1,
18 | MATRIX_2X2,
19 | MATRIX_2X3,
20 | MATRIX_3X2,
21 | MATRIX_3X3,
22 | CASES,
23 | CASES_2,
24 | BMATRIX,
25 | VMATRIX,
26 | PMATRIX,
27 | ADD_MATRTIX_COL,
28 | ADD_MATRTIX_ROW,
29 | };
30 |
31 | export default matrix;
32 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/matrix/matrix_1x2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/matrix/matrix_2x1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/matrix/matrix_2x2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/matrix/vmatrix.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/sqrt/index.ts:
--------------------------------------------------------------------------------
1 | import SQRT from './sqrt.svg';
2 | import SQRT_WITH_DEGREE from './sqrt-with-degree.svg';
3 |
4 | const sqrt = { SQRT, SQRT_WITH_DEGREE };
5 | export default sqrt;
6 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/sqrt/sqrt-with-degree.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/sqrt/sqrt.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/colon-equal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/def-equal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/delta-equal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/equal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/m-equal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/minus-equal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/plus-equal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-arrow2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-arrow3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-arrow4.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-arrow5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-arrow6.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-right-arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-right-arrow2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-right-arrow3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-right-arrow4.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-right-arrow5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-left-right-arrow6.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-right-arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-right-arrow2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-right-arrow3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-right-arrow4.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-right-arrow5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/symbol/x-right-arrow6.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/mathsection/trigonometric/index.ts:
--------------------------------------------------------------------------------
1 | import F_FUNC from './f-func.svg';
2 | import F_FUNC_2 from './f-func2.svg';
3 | import G_FUNC from './g-func.svg';
4 | import G_FUNC_2 from './g-func2.svg';
5 | import H_FUNC from './h-func.svg';
6 | import H_FUNC_2 from './h-func2.svg';
7 | import SIN from './sin.svg';
8 | import SIN_2 from './sin2.svg';
9 | import COS from './cos.svg';
10 | import COS_2 from './cos2.svg';
11 | import TAN from './tan.svg';
12 | import TAN_2 from './tan2.svg';
13 | import CSC from './csc.svg';
14 | import CSC_2 from './csc2.svg';
15 | import COT from './cot.svg';
16 | import COT_2 from './cot2.svg';
17 | import SEC from './sec.svg';
18 | import SEC_2 from './sec2.svg';
19 |
20 | const trigonometric = {
21 | F_FUNC,
22 | F_FUNC_2,
23 | G_FUNC,
24 | G_FUNC_2,
25 | H_FUNC,
26 | H_FUNC_2,
27 | SIN,
28 | SIN_2,
29 | COS,
30 | COS_2,
31 | TAN,
32 | TAN_2,
33 | CSC,
34 | CSC_2,
35 | COT,
36 | COT_2,
37 | SEC,
38 | SEC_2,
39 | };
40 | export default trigonometric;
41 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/bracket/bracket.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/bracket/index.ts:
--------------------------------------------------------------------------------
1 | import BRACKET from './bracket.svg';
2 | import BRACKET_2 from './bracket2.svg';
3 | import BRACKET_3 from './bracket3.svg';
4 | import BRACKET_4 from './bracket4.svg';
5 |
6 | const bracket = {
7 | BRACKET,
8 | BRACKET_2,
9 | BRACKET_3,
10 | BRACKET_4,
11 | };
12 |
13 | export default bracket;
14 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/combi/combi.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/combi/combi5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/combi/combi6.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/combi/index.ts:
--------------------------------------------------------------------------------
1 | import COMBI from './combi.svg';
2 | import COMBI_2 from './combi2.svg';
3 | import COMBI_3 from './combi3.svg';
4 | import COMBI_4 from './combi4.svg';
5 | import COMBI_5 from './combi5.svg';
6 | import COMBI_6 from './combi6.svg';
7 |
8 | const combi = {
9 | COMBI,
10 | COMBI_2,
11 | COMBI_3,
12 | COMBI_4,
13 | COMBI_5,
14 | COMBI_6,
15 | };
16 |
17 | export default combi;
18 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/deco/deco.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/deco/deco2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/deco/deco3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/deco/index.ts:
--------------------------------------------------------------------------------
1 | import DECO from './deco.svg';
2 | import DECO_2 from './deco2.svg';
3 | import DECO_3 from './deco3.svg';
4 |
5 | const deco = {
6 | DECO,
7 | DECO_2,
8 | DECO_3,
9 | };
10 |
11 | export default deco;
12 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/down-arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/fraction/fraction2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/fraction/index.ts:
--------------------------------------------------------------------------------
1 | import FRACTION from './fraction.svg';
2 | import FRACTION_2 from './fraction2.svg';
3 |
4 | const fraction = {
5 | FRACTION,
6 | FRACTION_2,
7 | };
8 |
9 | export default fraction;
10 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/index.ts:
--------------------------------------------------------------------------------
1 | import fraction from './fraction';
2 | import sqrt from './sqrt';
3 | import combi from './combi';
4 | import integral from './integral';
5 | import largeOperator from './large-operator';
6 | import bracket from './bracket';
7 | import deco from './deco';
8 | import limit from './limit';
9 | import trigonometric from './trigonometric';
10 | import symbol from './symbol';
11 | import matrix from './matrix';
12 |
13 | export const SVG = {
14 | fraction,
15 | sqrt,
16 | combi,
17 | integral,
18 | largeOperator,
19 | bracket,
20 | deco,
21 | limit,
22 | trigonometric,
23 | symbol,
24 | matrix,
25 | };
26 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/integral/index.ts:
--------------------------------------------------------------------------------
1 | import INTEGRAL from './integral.svg';
2 | import INTEGRAL_2 from './integral2.svg';
3 | import INTEGRAL_3 from './integral3.svg';
4 | import INTEGRAL_4 from './integral4.svg';
5 |
6 | const integral = {
7 | INTEGRAL,
8 | INTEGRAL_2,
9 | INTEGRAL_3,
10 | INTEGRAL_4,
11 | };
12 |
13 | export default integral;
14 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/large-operator/index.ts:
--------------------------------------------------------------------------------
1 | import LAREGE_OPERATOR from './large-operator.svg';
2 | import LAREGE_OPERATOR_2 from './large-operator2.svg';
3 | import LAREGE_OPERATOR_3 from './large-operator3.svg';
4 | import LAREGE_OPERATOR_4 from './large-operator4.svg';
5 | import LAREGE_OPERATOR_5 from './large-operator5.svg';
6 |
7 | const largeOperator = {
8 | LAREGE_OPERATOR,
9 | LAREGE_OPERATOR_2,
10 | LAREGE_OPERATOR_3,
11 | LAREGE_OPERATOR_4,
12 | LAREGE_OPERATOR_5,
13 | };
14 |
15 | export default largeOperator;
16 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/limit/index.ts:
--------------------------------------------------------------------------------
1 | import LIMIT from './limit.svg';
2 | import LIMIT_2 from './limit2.svg';
3 | import LIMIT_3 from './limit3.svg';
4 | import LIMIT_4 from './limit4.svg';
5 | import LIMIT_5 from './limit5.svg';
6 | import LIMIT_6 from './limit6.svg';
7 |
8 | const limit = {
9 | LIMIT,
10 | LIMIT_2,
11 | LIMIT_3,
12 | LIMIT_4,
13 | LIMIT_5,
14 | LIMIT_6,
15 | };
16 |
17 | export default limit;
18 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/matrix/index.ts:
--------------------------------------------------------------------------------
1 | import MATRIX from './matrix.svg';
2 | import MATRIX_2 from './matrix2.svg';
3 |
4 | const matrix = {
5 | MATRIX,
6 | MATRIX_2,
7 | };
8 |
9 | export default matrix;
10 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/sqrt/index.ts:
--------------------------------------------------------------------------------
1 | import SQRT from './sqrt.svg';
2 | import SQRT_2 from './sqrt2.svg';
3 |
4 | const sqrt = {
5 | SQRT,
6 | SQRT_2,
7 | };
8 |
9 | export default sqrt;
10 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/sqrt/sqrt.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/sqrt/sqrt2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/symbol/index.ts:
--------------------------------------------------------------------------------
1 | import SYMBOL from './symbol.svg';
2 | import SYMBOL_2 from './symbol2.svg';
3 | import SYMBOL_3 from './symbol3.svg';
4 | import SYMBOL_4 from './symbol4.svg';
5 |
6 | const symbol = {
7 | SYMBOL,
8 | SYMBOL_2,
9 | SYMBOL_3,
10 | SYMBOL_4,
11 | };
12 |
13 | export default symbol;
14 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/symbol/symbol2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/trigonometric/func3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/trigonometric/index.ts:
--------------------------------------------------------------------------------
1 | import COS from './cos.svg';
2 | import SIN from './sin.svg';
3 | import TAN from './tan.svg';
4 | import FUNC from './func.svg';
5 | import FUNC_2 from './func2.svg';
6 | import FUNC_3 from './func3.svg';
7 | import FUNC_4 from './func4.svg';
8 | import FUNC_5 from './func5.svg';
9 |
10 | const trigonometric = {
11 | COS,
12 | SIN,
13 | TAN,
14 | FUNC,
15 | FUNC_2,
16 | FUNC_3,
17 | FUNC_4,
18 | FUNC_5,
19 | };
20 |
21 | export default trigonometric;
22 |
--------------------------------------------------------------------------------
/src/utils/svg/leftsection/templatesection/up-arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
45 |
--------------------------------------------------------------------------------
/src/utils/svg/rightsection/.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boostcamp-2020/Project15-A-Client-Based-Formula-Editor/27e339f92a89fb38ee7ef8b4100c96cf714a3e06/src/utils/svg/rightsection/.txt
--------------------------------------------------------------------------------
/src/utils/svg/tab/plus_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/tab/x_icon.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/align-center.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/align-left.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/align-right.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/back.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
46 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/clear.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/drawer.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/erase.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/font-check.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/font-color-active.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/utils/svg/toolbar/forward.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
46 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions":{
3 | "outDir": "./build/",
4 | "noImplicitAny": true,
5 | "jsx":"react",
6 | "allowJs":true,
7 | "checkJs":true,
8 | "allowSyntheticDefaultImports": true,
9 | "esModuleInterop": true,
10 | "baseUrl": "./",
11 | "paths":{
12 | "@src/*":["src/*"]
13 | }
14 | },
15 | "exclude" :[
16 | "node_modules", "src/components/SubSection"
17 | ],
18 | }
--------------------------------------------------------------------------------