@bigbinary/neeto-editor 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/index.js +8 -8
  2. package/package.json +1 -1
  3. package/webpack.config.js +4 -3
  4. package/webpack.dev.config.js +4 -3
  5. package/src/App.js +0 -8
  6. package/src/Common/Avatar.js +0 -168
  7. package/src/Common/Button.js +0 -95
  8. package/src/Common/CodeBlock.js +0 -11
  9. package/src/Common/Description.js +0 -8
  10. package/src/Common/Dropdown/index.js +0 -122
  11. package/src/Common/Heading.js +0 -13
  12. package/src/Common/HighlightText.js +0 -7
  13. package/src/Common/Icons/HashtagFilled.js +0 -59
  14. package/src/Common/Icons/TextColor.js +0 -35
  15. package/src/Common/Icons/index.js +0 -2
  16. package/src/Common/Input.js +0 -70
  17. package/src/Common/Label.js +0 -45
  18. package/src/Common/ListItems.js +0 -17
  19. package/src/Common/Modal.js +0 -91
  20. package/src/Common/Tab.js +0 -79
  21. package/src/Common/ToolTip.js +0 -37
  22. package/src/Editor/CustomExtensions/BubbleMenu/index.js +0 -92
  23. package/src/Editor/CustomExtensions/CodeBlock/CodeBlockComponent.js +0 -12
  24. package/src/Editor/CustomExtensions/CodeBlock/ExtensionConfig.js +0 -10
  25. package/src/Editor/CustomExtensions/Embeds.js +0 -72
  26. package/src/Editor/CustomExtensions/FixedMenu/FontSizeOption.js +0 -32
  27. package/src/Editor/CustomExtensions/FixedMenu/TextColorOption.js +0 -29
  28. package/src/Editor/CustomExtensions/FixedMenu/constants.js +0 -3
  29. package/src/Editor/CustomExtensions/FixedMenu/index.js +0 -183
  30. package/src/Editor/CustomExtensions/Image/ExtensionConfig.js +0 -47
  31. package/src/Editor/CustomExtensions/Image/LinkUploader/URLForm.js +0 -39
  32. package/src/Editor/CustomExtensions/Image/LocalUploader.js +0 -21
  33. package/src/Editor/CustomExtensions/Image/ProgressBar.js +0 -34
  34. package/src/Editor/CustomExtensions/Image/Uploader.js +0 -82
  35. package/src/Editor/CustomExtensions/Image/constants.js +0 -5
  36. package/src/Editor/CustomExtensions/Mention/ExtensionConfig.js +0 -66
  37. package/src/Editor/CustomExtensions/Mention/MentionList.js +0 -96
  38. package/src/Editor/CustomExtensions/Mention/helpers.js +0 -23
  39. package/src/Editor/CustomExtensions/Placeholder/ExtensionConfig.js +0 -81
  40. package/src/Editor/CustomExtensions/Placeholder/helpers.js +0 -18
  41. package/src/Editor/CustomExtensions/SlashCommands/Commands.js +0 -20
  42. package/src/Editor/CustomExtensions/SlashCommands/CommandsList.js +0 -109
  43. package/src/Editor/CustomExtensions/SlashCommands/ExtensionConfig.js +0 -209
  44. package/src/Editor/CustomExtensions/Variable/ExtensionConfig.js +0 -208
  45. package/src/Editor/CustomExtensions/Variable/VariableList.js +0 -45
  46. package/src/Editor/CustomExtensions/Variable/VariableSuggestion.js +0 -20
  47. package/src/Editor/CustomExtensions/Variable/helpers.js +0 -31
  48. package/src/Editor/CustomExtensions/Variable/index.js +0 -35
  49. package/src/Editor/CustomExtensions/useCustomExtensions.js +0 -88
  50. package/src/Editor/index.js +0 -104
  51. package/src/Editor/sharedState.js +0 -8
  52. package/src/constants/regexp.js +0 -1
  53. package/src/examples/constants.js +0 -95
  54. package/src/examples/index.js +0 -186
  55. package/src/hooks/useOutsideClick.js +0 -19
  56. package/src/hooks/useTabBar.js +0 -9
  57. package/src/index.js +0 -10
  58. package/src/index.scss +0 -46
  59. package/src/styles/abstracts/_mixins.scss +0 -20
  60. package/src/styles/abstracts/_neeto-ui-variables.scss +0 -107
  61. package/src/styles/abstracts/_variables.scss +0 -13
  62. package/src/styles/components/_avatar.scss +0 -105
  63. package/src/styles/components/_button.scss +0 -161
  64. package/src/styles/components/_codeblock.scss +0 -16
  65. package/src/styles/components/_command-list.scss +0 -19
  66. package/src/styles/components/_dropdown.scss +0 -69
  67. package/src/styles/components/_editor-variables.scss +0 -12
  68. package/src/styles/components/_editor.scss +0 -102
  69. package/src/styles/components/_fixed-menu.scss +0 -17
  70. package/src/styles/components/_image-uploader.scss +0 -109
  71. package/src/styles/components/_input.scss +0 -165
  72. package/src/styles/components/_tab.scss +0 -74
  73. package/src/styles/components/_tooltip.scss +0 -152
  74. package/src/utils/common.js +0 -13
@@ -1,88 +0,0 @@
1
- import StarterKit from "@tiptap/starter-kit";
2
- import Document from "@tiptap/extension-document";
3
- import Typography from "@tiptap/extension-typography";
4
- import Highlight from "@tiptap/extension-highlight";
5
- import Dropcursor from "@tiptap/extension-dropcursor";
6
- import Link from "@tiptap/extension-link";
7
- import Color from "@tiptap/extension-color";
8
- import TextStyle from "@tiptap/extension-text-style";
9
- import isEmpty from "lodash.isempty";
10
-
11
- import ImageExtension from "./Image/ExtensionConfig";
12
- import Underline from "@tiptap/extension-underline";
13
- import SlashCommands from "./SlashCommands/ExtensionConfig";
14
- import CodeBlock from "./CodeBlock/ExtensionConfig";
15
- import Variable from "./Variable/ExtensionConfig";
16
- import Placeholder, {
17
- placeholderGenerator,
18
- } from "./Placeholder/ExtensionConfig";
19
- import Mention, { createMentionSuggestions } from "./Mention/ExtensionConfig";
20
- import Embeds from "./Embeds";
21
-
22
- export default function useCustomExtensions({
23
- forceTitle,
24
- placeholder,
25
- extensions,
26
- mentions,
27
- variables,
28
- isSlashCommandsActive,
29
- showImageInMention,
30
- setImageUploadVisible,
31
- }) {
32
- let customExtensions;
33
-
34
- if (extensions) {
35
- customExtensions = [...extensions];
36
- } else {
37
- customExtensions = [
38
- StarterKit.configure({
39
- document: !forceTitle,
40
- }),
41
- Underline,
42
- Typography,
43
- TextStyle,
44
- Highlight,
45
- CodeBlock,
46
- ImageExtension,
47
- Dropcursor,
48
- Embeds,
49
- Link,
50
- Color,
51
- Placeholder.configure({
52
- placeholder: placeholderGenerator(placeholder),
53
- }),
54
- ];
55
- }
56
-
57
- if (forceTitle) {
58
- customExtensions.unshift(
59
- Document.extend({
60
- content: "heading block*",
61
- })
62
- );
63
- }
64
-
65
- if (isSlashCommandsActive) {
66
- customExtensions.push(SlashCommands.configure({ setImageUploadVisible }));
67
- }
68
-
69
- if (!isEmpty(mentions)) {
70
- customExtensions.push(
71
- Mention.configure({
72
- suggestion: {
73
- items: createMentionSuggestions(mentions, {
74
- showImage: showImageInMention,
75
- }),
76
- },
77
- })
78
- );
79
- }
80
-
81
- if (!isEmpty(variables)) {
82
- customExtensions.push(
83
- Variable.configure({ suggestion: { items: () => variables } })
84
- );
85
- }
86
-
87
- return customExtensions;
88
- }
@@ -1,104 +0,0 @@
1
- import React, { useState } from "react";
2
- import classNames from "classnames";
3
- import { useEditor, EditorContent } from "@tiptap/react";
4
-
5
- import BubbleMenu from "./CustomExtensions/BubbleMenu";
6
- import FixedMenu from "./CustomExtensions/FixedMenu";
7
- import ImageUploader from "./CustomExtensions/Image/Uploader";
8
- import useCustomExtensions from "./CustomExtensions/useCustomExtensions";
9
-
10
- const Tiptap = (
11
- {
12
- forceTitle = false,
13
- hideSlashCommands = false,
14
- hideBubbleMenu = false,
15
- formatterOptions = [
16
- "bold",
17
- "italic",
18
- "code",
19
- "highlight",
20
- "strike",
21
- "link",
22
- ],
23
- className,
24
- uploadEndpoint,
25
- initialValue = "",
26
- onChange = () => {},
27
- menuType = "fixed",
28
- variables,
29
- mentions,
30
- showImageInMention = false,
31
- placeholder,
32
- extensions,
33
- ...otherProps
34
- },
35
- ref
36
- ) => {
37
- const [isImageUploadVisible, setImageUploadVisible] = useState(false);
38
-
39
- const isFixedMenuActive = menuType === "fixed";
40
- const isBubbleMenuActive = menuType === "bubble";
41
- const isSlashCommandsActive = !hideSlashCommands;
42
- const showSlashCommandPlaceholder = !placeholder && isSlashCommandsActive;
43
-
44
- const customExtensions = useCustomExtensions({
45
- forceTitle,
46
- placeholder,
47
- extensions,
48
- mentions,
49
- variables,
50
- isSlashCommandsActive,
51
- showImageInMention,
52
- setImageUploadVisible,
53
- });
54
-
55
- const editor = useEditor({
56
- extensions: customExtensions,
57
- content: initialValue,
58
- injectCSS: false,
59
- editorProps: {
60
- attributes: {
61
- class:
62
- className ||
63
- classNames(
64
- "prose focus:outline-none whitespace-pre-wrap border p-3",
65
- {
66
- "slash-active": showSlashCommandPlaceholder,
67
- "fixed-menu-active": isFixedMenuActive,
68
- "bubble-menu-active": isBubbleMenuActive,
69
- }
70
- ),
71
- },
72
- },
73
- onUpdate: ({ editor }) => onChange(editor.getHTML()),
74
- });
75
-
76
- /* Make editor object available to the parent */
77
- React.useImperativeHandle(ref, () => ({
78
- editor: editor,
79
- }));
80
-
81
- return (
82
- <div>
83
- {isFixedMenuActive ? (
84
- <FixedMenu
85
- editor={editor}
86
- variables={variables}
87
- setImageUploadVisible={setImageUploadVisible}
88
- />
89
- ) : null}
90
- {isBubbleMenuActive ? (
91
- <BubbleMenu editor={editor} formatterOptions={formatterOptions} />
92
- ) : null}
93
- <ImageUploader
94
- isVisible={isImageUploadVisible}
95
- setIsVisible={setImageUploadVisible}
96
- editor={editor}
97
- imageUploadUrl={uploadEndpoint}
98
- />
99
- <EditorContent editor={editor} {...otherProps} />
100
- </div>
101
- );
102
- };
103
-
104
- export default React.forwardRef(Tiptap);
@@ -1,8 +0,0 @@
1
- import { store } from "@risingstack/react-easy-state";
2
-
3
- const sharedState = store({
4
- showImageUpload: false,
5
- showURLInput: false,
6
- });
7
-
8
- export default sharedState;
@@ -1 +0,0 @@
1
- export const UrlRegExp = /(http)?s?:?(\/\/[^"']*)/;
@@ -1,95 +0,0 @@
1
- export const EDITOR_FEATURES = [
2
- "Multiple Menu options such as Fixed, Bubble",
3
- "Support for inline styles: Bold, Italic, Underline, StrikeThrough",
4
- "Support for diffent font sizes, Blockquote and Code",
5
- "Support for font color option",
6
- "Support for adding Links and Images",
7
- "Ordered and Unordered List Support",
8
- "Undo and Redo available",
9
- "Inbuilt variable support",
10
- ];
11
-
12
- export const SAMPLE_VARIABLES = [
13
- {
14
- category_key: "ticket",
15
- category_label: "Ticket",
16
- variables: [
17
- { label: "ID", key: "id" },
18
- { label: "Number", key: "number" },
19
- ],
20
- },
21
- { label: "Subdomain", key: "subdomain" },
22
- {
23
- category_key: "organisation",
24
- category_label: "Organisation",
25
- variables: [
26
- { label: "ID", key: "id" },
27
- { label: "Name", key: "name" },
28
- { label: "Slug", key: "slug" },
29
- ],
30
- },
31
- ];
32
-
33
- export const SAMPLE_MENTIONS = [
34
- {
35
- label: "Oliver Smith",
36
- key: "oliver-smith",
37
- imageUrl: "https://via.placeholder.com/150/0000FF/808080",
38
- },
39
- "Jaden Smith",
40
- ];
41
-
42
- export const STRINGS = {
43
- fixedMenuSampleCode: `
44
- <Editor />`,
45
-
46
- bubbleMenuSampleCode: `
47
- <Editor menuType='bubble'/>`,
48
-
49
- hideSlashCommandSampleCode: `
50
- <Editor hideSlashCommands />`,
51
-
52
- variableSampleCode: `
53
- const variables = [
54
- {
55
- category_key: "ticket",
56
- category_label: "Ticket",
57
- variables: [
58
- { label: "ID", key: "id" },
59
- { label: "Number", key: "number" },
60
- ],
61
- },
62
- { label: "Subdomain", key: "subdomain" },
63
- {
64
- category_key: "organisation",
65
- category_label: "Organisation",
66
- variables: [
67
- { label: "ID", key: "id" },
68
- { label: "Name", key: "name" },
69
- { label: "Slug", key: "slug" },
70
- ],
71
- },
72
- ]
73
-
74
- <Editor variables={variables} />`,
75
-
76
- mentionsSampleCode: `
77
- const mentions = [
78
- {
79
- label: "Oliver Smith",
80
- key: "oliver-smith",
81
- imageUrl: "https://via.placeholder.com/150/0000FF/808080"
82
- },
83
- "Jaden Smith",
84
- ]
85
-
86
- <Editor mentions={mentions} showImageInMention />`,
87
-
88
- placeholderSampleCode: `
89
- <Editor placeholder="Input text here" />`,
90
-
91
- forceTitleSampleCode: `
92
- const placeholder = { heading: 'Input title here' };
93
-
94
- <Editor placeholder={placeholder} forceTitle />`,
95
- };
@@ -1,186 +0,0 @@
1
- import React, { useRef } from "react";
2
-
3
- import CodeBlock from "common/CodeBlock";
4
- import Description from "common/Description";
5
- import Heading from "common/Heading";
6
- import HighlightText from "common/HighlightText";
7
- import ListItems from "common/ListItems";
8
- import Editor from "../Editor";
9
- import {
10
- EDITOR_FEATURES,
11
- SAMPLE_MENTIONS,
12
- SAMPLE_VARIABLES,
13
- STRINGS,
14
- } from "./constants";
15
-
16
- const Example = () => {
17
- const ref = useRef();
18
-
19
- const getHTML = () => {
20
- return ref.current.editor.getHTML();
21
- };
22
-
23
- return (
24
- <div style={{ margin: "48px 60px" }}>
25
- <Heading>Neeto Editor</Heading>
26
- <div className="flex justify-end">
27
- <button
28
- className="px-3 py-1 text-sm font-medium border border-gray-200 rounded shadow-sm"
29
- onClick={() => {
30
- // eslint-disable-next-line no-console
31
- console.log({
32
- html: getHTML(),
33
- });
34
- }}
35
- >
36
- Print output to console
37
- </button>
38
- </div>
39
- <hr className="my-2 border-gray-100" />
40
- <Editor ref={ref} />
41
- <Heading type="sub">Features</Heading>
42
- <ListItems items={EDITOR_FEATURES} ordered />
43
-
44
- <Heading>Installation</Heading>
45
- <CodeBlock>yarn add https://github.com/bigbinary/neeto-editor</CodeBlock>
46
-
47
- <Heading>Usage</Heading>
48
- <CodeBlock>import Editor from 'bigbinary/neeto-editor'</CodeBlock>
49
- <Heading type="sub">Fixed Menu</Heading>
50
- <Description>
51
- The default Neeto Editor layout comes with a set of always-on-top fixed
52
- menu controls to interact with the editor
53
- </Description>
54
- <div className="flex">
55
- <CodeBlock>{STRINGS.fixedMenuSampleCode}</CodeBlock>
56
- <SampleEditor />
57
- </div>
58
-
59
- <Heading type="sub">Bubble Menu</Heading>
60
- <Description>
61
- If you would like to use an on-demand menu to interact with the editor
62
- rather than an always-on-top fixed menu, Neeto Editor support Bubble
63
- Menu option that appears when user selects part of text.
64
- </Description>
65
- <div className="flex">
66
- <CodeBlock>{STRINGS.bubbleMenuSampleCode}</CodeBlock>
67
- <SampleEditor menuType="bubble" />
68
- </div>
69
-
70
- <Heading type="sub">Slash Commands</Heading>
71
- <Description>
72
- Slash commands are actions that can be applied to block of text. This
73
- menu is enabled by default and appears when user types{" "}
74
- <HighlightText>/</HighlightText> at start of new line. Slash commands
75
- can be disabled using <HighlightText>hideSlashCommands</HighlightText>{" "}
76
- prop.
77
- </Description>
78
- <div className="flex">
79
- <CodeBlock>{STRINGS.hideSlashCommandSampleCode}</CodeBlock>
80
- <SampleEditor hideSlashCommands />
81
- </div>
82
-
83
- <Heading type="sub">Variable Support</Heading>
84
- <Description>
85
- Neeto Editor supports variable placement. Pass array of variables as{" "}
86
- <HighlightText>variables</HighlightText> prop. Users can choose from
87
- available variables from the <HighlightText>{"{}"}</HighlightText> menu.
88
- Alternatively, the available variable options can be displayed by typing{" "}
89
- <HighlightText>{"{{"}</HighlightText> within the editor.
90
- </Description>
91
- <div className="flex">
92
- <CodeBlock>{STRINGS.variableSampleCode}</CodeBlock>
93
- <SampleEditor variables={SAMPLE_VARIABLES} />
94
- </div>
95
- <Description>
96
- Variables that belong to a spefic category can be categorised by passing
97
- a <HighlightText>category_key</HighlightText> and{" "}
98
- <HighlightText>category_label</HighlightText> attributes. All other
99
- variables are shown under 'Others'
100
- </Description>
101
-
102
- <Heading type="sub">Support for Mentions</Heading>
103
- <Description>
104
- Neeto Editor comes with inbuilt support for mentions marking. Editor
105
- accepts a list of mention-able values as{" "}
106
- <HighlightText>mentions</HighlightText> prop. The list could either be
107
- items of shape{" "}
108
- <HighlightText>
109
- {
110
- "{label: 'Mention 1', key: 'mention1', imageUrl: 'optional_image_url.jpg'}"
111
- }
112
- </HighlightText>{" "}
113
- or items can be just plain text like{" "}
114
- <HighlightText>'Mention1'</HighlightText>. The available mention
115
- suggestions are shown in editor when user types a{" "}
116
- <HighlightText>@</HighlightText> character within editor content. The
117
- avatar image in the mention suggestion list is enabled by providing
118
- truthy value to the <HighlightText>showImageInMention</HighlightText>{" "}
119
- prop.
120
- </Description>
121
- <div className="flex">
122
- <CodeBlock>{STRINGS.mentionsSampleCode}</CodeBlock>
123
- <SampleEditor mentions={SAMPLE_MENTIONS} showImageInMention />
124
- </div>
125
-
126
- <Heading type="sub">Support for placeholder</Heading>
127
- <Description>
128
- The editor can have placeholder texts for different nodes. These value
129
- is accepted as <HighlightText>placeholder</HighlightText> prop.
130
- </Description>
131
- <ul className="list-disc list-inside">
132
- <li>
133
- Value as object: Each type of node can have corresponding placeholder,
134
- in which case the value should be of type{" "}
135
- <HighlightText>{"{node_name: placeholder_text}"}</HighlightText>.
136
- </li>
137
- <li>
138
- Value as string: When plain string is provided as value for
139
- placeholder, all the nodes will be using the same placeholder text
140
- irrespective of their type in which case the value should be of type{" "}
141
- </li>
142
- <li>
143
- Value as function: the <HighlightText>placeholder</HighlightText> prop
144
- can also accepts a function. For each node in the document, the
145
- function receives node as argument and return the corresponding
146
- placeholder string. eg:{" "}
147
- <HighlightText>{"({node}) => placeholder_text"}</HighlightText>
148
- </li>
149
- </ul>
150
-
151
- <div className="flex">
152
- <CodeBlock>{STRINGS.placeholderSampleCode}</CodeBlock>
153
- <SampleEditor placeholder="Input text here" />
154
- </div>
155
-
156
- <Heading type="sub">Force a title</Heading>
157
- <Description>
158
- Neeto editor can be configured to force user to include a document title
159
- . This can be achieved by providing a truthy value to the{" "}
160
- <HighlightText>forceTitle</HighlightText> prop. Along with that, inorder
161
- to show the placeholder text on the title, the{" "}
162
- <HighlightText>placeholder</HighlightText> prop should also be provided.
163
- </Description>
164
- <div className="flex">
165
- <CodeBlock>{STRINGS.forceTitleSampleCode}</CodeBlock>
166
- <SampleEditor
167
- initialValue="Title Text"
168
- placeholder={{ heading: "Input title here" }}
169
- forceTitle
170
- />
171
- </div>
172
- </div>
173
- );
174
- };
175
-
176
- export default Example;
177
-
178
- const SampleEditor = (props) => {
179
- const ref = useRef();
180
-
181
- return (
182
- <div className="flex-1 mx-3 my-2 h-60">
183
- <Editor ref={ref} initialValue="Edit Text Content" {...props} />
184
- </div>
185
- );
186
- };
@@ -1,19 +0,0 @@
1
- import { useEffect } from "react";
2
-
3
- const useOutsideClick = ({ ref, onClick }) => {
4
- useEffect(() => {
5
- const listener = ({ target }) => {
6
- if (!ref.current || !onClick) return;
7
- // Check if event target is inside reference node
8
- if (ref.current.contains(target)) return;
9
- onClick();
10
- };
11
-
12
- document.addEventListener("click", listener);
13
- return () => {
14
- document.removeEventListener("click", listener);
15
- };
16
- }, []);
17
- };
18
-
19
- export default useOutsideClick;
@@ -1,9 +0,0 @@
1
- import { useState } from "react";
2
-
3
- const useTabBar = (options) => {
4
- const [activeTab, setActiveTab] = useState(options[0]?.key);
5
-
6
- return [activeTab, (option) => setActiveTab(option.key)];
7
- };
8
-
9
- export default useTabBar;
package/src/index.js DELETED
@@ -1,10 +0,0 @@
1
- import React from "react";
2
- import ReactDOM from "react-dom";
3
- import App from "./App";
4
-
5
- ReactDOM.render(
6
- <React.StrictMode>
7
- <App />
8
- </React.StrictMode>,
9
- document.getElementById("root")
10
- );
package/src/index.scss DELETED
@@ -1,46 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- @import "./styles/abstracts/mixins";
6
- @import "./styles/abstracts/variables";
7
- @import "./styles/abstracts/neeto-ui-variables";
8
-
9
- @import "./styles/components/dropdown";
10
- @import "./styles/components/codeblock";
11
- @import "./styles/components/editor-variables";
12
- @import "./styles/components/command-list";
13
- @import "./styles/components/editor";
14
- @import "./styles/components/avatar";
15
- @import "./styles/components/fixed-menu";
16
- @import "./styles/components/image-uploader";
17
- @import "./styles/components/tab";
18
- @import "./styles/components/button";
19
- @import "./styles/components/tooltip";
20
- @import "./styles/components/input";
21
-
22
- body {
23
- margin: 0;
24
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
25
- "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
26
- sans-serif;
27
- -webkit-font-smoothing: antialiased;
28
- -moz-osx-font-smoothing: grayscale;
29
- }
30
-
31
- code {
32
- font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
33
- monospace;
34
- }
35
-
36
- .ProseMirror {
37
- @include scrollbars(4px);
38
-
39
- overflow-y: auto;
40
- min-height: 150px;
41
- max-height: 500px;
42
- }
43
-
44
- .ProseMirror:focus {
45
- outline: none;
46
- }
@@ -1,20 +0,0 @@
1
- @mixin scrollbars(
2
- $size,
3
- $foreground-color: $neeto-ui-gray-300,
4
- $background-color: "transparent"
5
- ) {
6
- // For Google Chrome
7
- &::-webkit-scrollbar {
8
- width: $size;
9
- height: $size;
10
- }
11
-
12
- &::-webkit-scrollbar-thumb {
13
- background: $foreground-color;
14
- border-radius: 50px;
15
- }
16
-
17
- &::-webkit-scrollbar-track {
18
- background: $background-color;
19
- }
20
- }