stilo-editor 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -174
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -5,144 +5,40 @@
|
|
|
5
5
|
</picture>
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
|
+
<h3 align="center">A complete rich text editor. Everything included, ready in minutes.</h3>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
Free and open source (MIT) · clean HTML in and out · built on ProseMirror
|
|
12
|
+
</p>
|
|
13
|
+
|
|
8
14
|
<p align="center">
|
|
9
15
|
<a href="https://www.npmjs.com/package/stilo-editor"><img src="https://img.shields.io/npm/v/stilo-editor" alt="npm version"></a>
|
|
10
|
-
<a href="
|
|
16
|
+
<a href="https://github.com/kojak8791/stilo-editor/actions/workflows/ci.yml"><img src="https://github.com/kojak8791/stilo-editor/actions/workflows/ci.yml/badge.svg" alt="CI status"></a>
|
|
11
17
|
<img src="https://img.shields.io/npm/types/stilo-editor" alt="TypeScript types included">
|
|
18
|
+
<a href="LICENSE"><img src="https://img.shields.io/npm/l/stilo-editor" alt="MIT license"></a>
|
|
12
19
|
</p>
|
|
13
20
|
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
<p align="center">
|
|
22
|
+
<a href="https://kojak8791.github.io/stilo-editor/"><strong>Live demo</strong></a> ·
|
|
23
|
+
<a href="docs/API.md"><strong>API</strong></a> ·
|
|
24
|
+
<a href="docs/FEATURES.md"><strong>All features</strong></a>
|
|
25
|
+
</p>
|
|
16
26
|
|
|
17
27
|
<p align="center">
|
|
18
28
|
<img src="https://raw.githubusercontent.com/kojak8791/stilo-editor/main/assets/screenshot.png" alt="Stilo with the default toolbar: formatted text, a checklist, a table and the link popover open" width="800">
|
|
19
29
|
</p>
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
<a href="https://kojak8791.github.io/stilo-editor/">See it in action: try the live demo →</a>
|
|
23
|
-
</h2>
|
|
24
|
-
|
|
25
|
-
> [!WARNING]
|
|
26
|
-
> **Preview release.** Versions `0.x` are early previews: the editor works, but APIs may change
|
|
27
|
-
> in any minor version until `1.0.0`. Read the release notes before updating.
|
|
28
|
-
|
|
29
|
-
## Why Stilo
|
|
30
|
-
|
|
31
|
-
- **Built for very large documents.** Typing stays immediate in a document longer than most
|
|
32
|
-
novels (see [Large documents](https://github.com/kojak8791/stilo-editor#large-documents)).
|
|
33
|
-
Measured in a real browser, checked against budgets, not assumed.
|
|
34
|
-
- **Entirely open source (MIT).** Aiming at the feature level of the established rich text
|
|
35
|
-
editors, with no paid tiers and no closed "pro" extensions.
|
|
36
|
-
- **HTML is the public format.** Content goes in as HTML and comes out as clean, semantic,
|
|
37
|
-
self-contained HTML, with a strict allowlist for tags, attributes and inline styles.
|
|
38
|
-
- **Headless core, optional UI.** The core works without any UI; the default toolbar and menus are
|
|
39
|
-
a separate, replaceable module.
|
|
40
|
-
- **Extensible by design.** Every feature is an extension with the same shape.
|
|
41
|
-
- **Framework-agnostic.** Vanilla TypeScript first; React/Vue wrappers later as thin layers.
|
|
42
|
-
|
|
43
|
-
## Large documents
|
|
44
|
-
|
|
45
|
-
Stilo is made for long documents: contracts, manuals, books, reports. Typing feels immediate in
|
|
46
|
-
a document of 10,000 paragraphs — about 400,000 words, longer than most novels — and the editor
|
|
47
|
-
stays usable at five times that size, without pagination tricks and without splitting the
|
|
48
|
-
content. Formatting, search and selection keep up with the size of the text.
|
|
49
|
-
|
|
50
|
-
This is measured, not promised. A benchmark drives the editor in a real browser on generated
|
|
51
|
-
documents and times everything from loading and exporting the HTML down to the milliseconds
|
|
52
|
-
between a key press and the character on screen; every change is checked against performance
|
|
53
|
-
budgets. What it means in practice, the numbers and the limits:
|
|
54
|
-
[Performance](docs/PERFORMANCE.md).
|
|
55
|
-
|
|
56
|
-
## Features
|
|
57
|
-
|
|
58
|
-
What the editor does today, with `defaultExtensions` and the default toolbar. On macOS, use
|
|
59
|
-
<kbd>⌘</kbd> for <kbd>Ctrl</kbd> and <kbd>Option</kbd> for <kbd>Alt</kbd>. The *Markdown*
|
|
60
|
-
column is what you type to get the format as you write.
|
|
61
|
-
|
|
62
|
-
| Feature | Keyboard | Markdown | Notes |
|
|
63
|
-
|---|---|---|---|
|
|
64
|
-
| **Text** | | | |
|
|
65
|
-
| Bold | <kbd>Ctrl</kbd>+<kbd>B</kbd> | `**text**` | |
|
|
66
|
-
| Italic | <kbd>Ctrl</kbd>+<kbd>I</kbd> | `*text*` `_text_` | |
|
|
67
|
-
| Underline | <kbd>Ctrl</kbd>+<kbd>U</kbd> | | |
|
|
68
|
-
| Strikethrough | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>S</kbd> | `~~text~~` | |
|
|
69
|
-
| Inline code | <kbd>Ctrl</kbd>+<kbd>E</kbd> | `` `text` `` | |
|
|
70
|
-
| Subscript | <kbd>Ctrl</kbd>+<kbd>,</kbd> | | Subscript and superscript exclude each other |
|
|
71
|
-
| Superscript | <kbd>Ctrl</kbd>+<kbd>.</kbd> | | |
|
|
72
|
-
| Font family | | | Toolbar dropdown: generic families (sans serif, serif, monospace) and common fonts, each shown in its own font; a font that is not in the list (e.g. pasted from Word) is still shown |
|
|
73
|
-
| Font size | | | − and + change the size by one point; the field between them shows the size, takes a typed one and opens a list. Unit pt by default (px or rem as an option) |
|
|
74
|
-
| Text color | | | The button applies the last color; its arrow opens a palette, "No color" and a custom color |
|
|
75
|
-
| Highlight | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>H</kbd> | `==text==` | Same button as text color; the shortcut applies the default highlight |
|
|
76
|
-
| Clear formatting | <kbd>Ctrl</kbd>+<kbd>\\</kbd> | | Links stay |
|
|
77
|
-
| Text case | | | A menu: UPPERCASE, lowercase, Title Case, Sentence case, tOGGLE cASE; the letters change, the formatting stays |
|
|
78
|
-
| **Links** | | | |
|
|
79
|
-
| Link | <kbd>Ctrl</kbd>+<kbd>K</kbd> | | A popover sets the URL and "open in new tab"; on a link, a small bubble offers open, edit and remove |
|
|
80
|
-
| **Blocks** | | | |
|
|
81
|
-
| Paragraph | <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>0</kbd> | | |
|
|
82
|
-
| Headings 1–6 | <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>1</kbd>…<kbd>6</kbd> | `# ` … `###### ` | Also in the toolbar dropdown |
|
|
83
|
-
| Quote | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>B</kbd> | `> ` | |
|
|
84
|
-
| Code block | <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>C</kbd> | ```` ``` ```` + space, ```` ```js ```` + space for a language | Plain text in a monospace font, no formatting; the selected paragraphs become one block, a line each, and back. <kbd>Enter</kbd> on an empty last line, or <kbd>Ctrl</kbd>+<kbd>Enter</kbd>, leaves it. The language is written as `class="language-js"` for syntax highlighters |
|
|
85
|
-
| Horizontal line | | `---` | |
|
|
86
|
-
| Line break | <kbd>Shift</kbd>+<kbd>Enter</kbd> | | New line in the same paragraph |
|
|
87
|
-
| Align left / center / right / justify | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>L</kbd> / <kbd>E</kbd> / <kbd>R</kbd> / <kbd>J</kbd> | | Paragraphs and headings; the toolbar button opens the four alignments; changing the block type (also with `# `) keeps the alignment |
|
|
88
|
-
| Line spacing | | | Paragraphs and headings; the toolbar menu offers Default, 1, 1.15, 1.5 and 2; changing the block type keeps it |
|
|
89
|
-
| Move block up / down | <kbd>Alt</kbd>+<kbd>↑</kbd> / <kbd>Alt</kbd>+<kbd>↓</kbd> | | The block or list item at the cursor, or all the selected ones; sub-items move along |
|
|
90
|
-
| **Lists** | | | |
|
|
91
|
-
| Bulleted list | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>8</kbd> | `- ` `* ` `+ ` | |
|
|
92
|
-
| Numbered list | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>7</kbd> | `1. ` | Starts from the number you type |
|
|
93
|
-
| Checklist | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>9</kbd> | `[ ] ` `[x] ` | Click a checkbox, or press <kbd>Ctrl</kbd>+<kbd>Enter</kbd> to check the selected items; checked items are struck through |
|
|
94
|
-
| Indent / outdent item | <kbd>Tab</kbd> / <kbd>Shift</kbd>+<kbd>Tab</kbd> | | |
|
|
95
|
-
| **Tables** | | | |
|
|
96
|
-
| Insert a table | | | Toolbar grid up to 10 × 8, with or without a header row |
|
|
97
|
-
| Rows, columns, cells | | | With the cursor in a table, the same button opens: insert or delete rows and columns, merge and split cells, header row and column, delete table |
|
|
98
|
-
| Table handles | | | Handles on the row and column under the mouse select them and open their menu (insert, delete); a corner handle opens merge, split and delete table |
|
|
99
|
-
| Move between cells | <kbd>Tab</kbd> / <kbd>Shift</kbd>+<kbd>Tab</kbd> | | <kbd>Tab</kbd> in the last cell adds a row |
|
|
100
|
-
| Select cells | | | Drag across cells |
|
|
101
|
-
| Resize a column | | | Drag the border of a column; the width is kept in the HTML |
|
|
102
|
-
| **Images** | | | |
|
|
103
|
-
| Paste an image | <kbd>Ctrl</kbd>+<kbd>V</kbd> | | A copied image or screenshot is embedded in the HTML (PNG, JPEG, GIF, WebP, up to 5 MB by default); an image copied from a web page keeps its address |
|
|
104
|
-
| Resize an image | | | Select it and drag one of its side handles; the proportions stay |
|
|
105
|
-
| **Insert** | | | |
|
|
106
|
-
| Special characters and emoji | | | A popover with search, symbols and emoji; it stays open to insert several in a row |
|
|
107
|
-
| **Editing** | | | |
|
|
108
|
-
| Undo | <kbd>Ctrl</kbd>+<kbd>Z</kbd> | | <kbd>Backspace</kbd> right after a Markdown shortcut undoes it |
|
|
109
|
-
| Redo | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Z</kbd> or <kbd>Ctrl</kbd>+<kbd>Y</kbd> | | |
|
|
110
|
-
| Paste | <kbd>Ctrl</kbd>+<kbd>V</kbd> | | HTML is cleaned up; plain text lines become paragraphs. From Word and Google Docs the body font, size and color are dropped (text that differs keeps them) and Word lists become real lists; tables keep their column widths |
|
|
111
|
-
| Paste as plain text | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>V</kbd> | | Only the text, without formatting |
|
|
112
|
-
| Find and replace | <kbd>Ctrl</kbd>+<kbd>F</kbd> | | A bar under the toolbar: match case, whole word, previous and next match, replace one or all; the matches are counted exactly and the first 1,000 are highlighted; <kbd>Enter</kbd> / <kbd>Shift</kbd>+<kbd>Enter</kbd> go to the next / previous match, <kbd>Esc</kbd> closes it |
|
|
113
|
-
| Word and character count | | | Optional status bar under the editor; also `getWordCount()` in the API |
|
|
114
|
-
|
|
115
|
-
<table>
|
|
116
|
-
<tr>
|
|
117
|
-
<td width="50%"><img src="https://raw.githubusercontent.com/kojak8791/stilo-editor/main/assets/screenshot-find.png" alt="The find bar under the toolbar: five matches of espresso highlighted, the current one in orange, and ristretto in the replace field" width="400"></td>
|
|
118
|
-
<td width="50%"><img src="https://raw.githubusercontent.com/kojak8791/stilo-editor/main/assets/screenshot-table.png" alt="A coffee menu table with a row selected by its handle and the row menu open: insert row above, insert row below, delete row" width="400"></td>
|
|
119
|
-
</tr>
|
|
120
|
-
<tr>
|
|
121
|
-
<td>Find and replace: match case, whole word, an exact count of the matches.</td>
|
|
122
|
-
<td>Tables: handles on rows and columns open their menu.</td>
|
|
123
|
-
</tr>
|
|
124
|
-
<tr>
|
|
125
|
-
<td width="50%"><img src="https://raw.githubusercontent.com/kojak8791/stilo-editor/main/assets/screenshot-fonts.png" alt="The font dropdown open on a Times New Roman text, each font drawn in its own font" width="400"></td>
|
|
126
|
-
<td width="50%"><img src="https://raw.githubusercontent.com/kojak8791/stilo-editor/main/assets/screenshot-color.png" alt="The text color palette open, with No color, the color grid and a custom color field" width="400"></td>
|
|
127
|
-
</tr>
|
|
128
|
-
<tr>
|
|
129
|
-
<td>Fonts and sizes: the toolbar shows the font and the size at the cursor.</td>
|
|
130
|
-
<td>Text color and highlight: a palette, the last color one click away, a custom color.</td>
|
|
131
|
-
</tr>
|
|
132
|
-
</table>
|
|
133
|
-
|
|
134
|
-
**Keyboard and accessibility.** Most shortcuts are the ones of Google Docs; the others follow
|
|
135
|
-
the usual conventions of web editors, and every toolbar tooltip shows its shortcut. The toolbar
|
|
136
|
-
follows the WAI-ARIA *Toolbar* pattern: <kbd>Alt</kbd>+<kbd>F10</kbd> moves the focus from the
|
|
137
|
-
text to the toolbar, the arrow keys move between buttons, <kbd>Esc</kbd> goes back to the text.
|
|
138
|
-
Every popover works with the keyboard alone and <kbd>Esc</kbd> closes it.
|
|
139
|
-
|
|
140
|
-
## Usage
|
|
31
|
+
## Quick start
|
|
141
32
|
|
|
142
33
|
```sh
|
|
143
34
|
npm install stilo-editor
|
|
144
35
|
```
|
|
145
36
|
|
|
37
|
+
```html
|
|
38
|
+
<div id="toolbar"></div>
|
|
39
|
+
<div id="editor"></div>
|
|
40
|
+
```
|
|
41
|
+
|
|
146
42
|
```ts
|
|
147
43
|
import 'stilo-editor/style.css';
|
|
148
44
|
import { Editor, defaultExtensions } from 'stilo-editor';
|
|
@@ -159,69 +55,66 @@ createToolbar(editor, { container: document.querySelector<HTMLElement>('#toolbar
|
|
|
159
55
|
editor.getHTML(); // '<p>Hello <strong>world</strong></p>'
|
|
160
56
|
```
|
|
161
57
|
|
|
162
|
-
|
|
163
|
-
Without the default toolbar, import `stilo-editor/content.css` instead of `style.css` and build
|
|
164
|
-
your own controls on the same API.
|
|
58
|
+
✅ That is the whole setup.
|
|
165
59
|
|
|
166
|
-
|
|
60
|
+
### Want your own UI?
|
|
167
61
|
|
|
168
|
-
|
|
169
|
-
[issue](https://github.com/kojak8791/stilo-editor/issues/new/choose); the forms ask for what
|
|
170
|
-
is needed to reproduce a bug (steps, Stilo version, browser).
|
|
171
|
-
- **Questions:** open an issue too, with a short title that says what you are trying to do.
|
|
172
|
-
- **Security vulnerabilities:** never in a public issue; report them privately as described in
|
|
173
|
-
[SECURITY.md](SECURITY.md).
|
|
62
|
+
Skip the toolbar: the core is headless.
|
|
174
63
|
|
|
175
|
-
|
|
64
|
+
```ts
|
|
65
|
+
import 'stilo-editor/content.css';
|
|
66
|
+
import { Editor, defaultExtensions } from 'stilo-editor';
|
|
67
|
+
|
|
68
|
+
const editor = new Editor({
|
|
69
|
+
element: document.querySelector<HTMLElement>('#editor')!,
|
|
70
|
+
extensions: [defaultExtensions()],
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
document.querySelector('#bold')!.addEventListener('click', () => editor.commands.toggleBold());
|
|
74
|
+
document.querySelector('#undo')!.addEventListener('click', () => editor.commands.undo());
|
|
75
|
+
```
|
|
176
76
|
|
|
177
|
-
|
|
77
|
+
Commands, button states and events: [API reference](docs/API.md).
|
|
178
78
|
|
|
179
|
-
|
|
180
|
-
|---|---|---|
|
|
181
|
-
| M0 — Foundations | Docs, scaffolding, core contracts, HTML pipeline, test helpers, `Bold` reference extension | Done |
|
|
182
|
-
| M1 — MVP | Core editing, history, basic marks and blocks, lists, paste cleanup, default toolbar, demo, benchmarks | Done |
|
|
183
|
-
| M2 — v1.0 | Preview releases `0.x` on npm, then tables, images, fonts and colors, productivity tools up to `1.0.0` | In progress |
|
|
184
|
-
| M3 — Later | Real-time collaboration (Yjs), framework wrappers, embeds | Planned |
|
|
79
|
+
## What's included
|
|
185
80
|
|
|
186
|
-
|
|
81
|
+
- **Text:** bold, italic, underline, strikethrough, code, sub/superscript, fonts, sizes,
|
|
82
|
+
colors, highlight, text case
|
|
83
|
+
- **Blocks:** headings, quotes, code blocks, alignment, line spacing, move up/down
|
|
84
|
+
- **Lists:** bulleted, numbered, checklists
|
|
85
|
+
- **Tables:** insert, merge and split, row and column handles, resizable columns
|
|
86
|
+
- **Images:** paste and resize
|
|
87
|
+
- **Tools:** links, find and replace, special characters and emoji, word count
|
|
187
88
|
|
|
188
|
-
|
|
89
|
+
Markdown shortcuts as you type, a keyboard shortcut for everything, a toolbar you can drive
|
|
90
|
+
from the keyboard alone. Every feature, shortcut and option: [All features](docs/FEATURES.md).
|
|
189
91
|
|
|
190
|
-
|
|
191
|
-
([Claude](https://claude.com/claude-code)). Every decision is written down before the code
|
|
192
|
-
([docs/](docs/), [ADRs](docs/decisions/)), every change goes through the quality gate
|
|
193
|
-
(typecheck, lint, about 950 unit tests including XSS vectors) and is tried in the demo before
|
|
194
|
-
it is merged, and performance is measured against explicit budgets (`npm run bench`).
|
|
92
|
+
## Why Stilo
|
|
195
93
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
| [BACKLOG.md](docs/BACKLOG.md) | Tasks done and planned |
|
|
205
|
-
| [AGENTS.md](AGENTS.md) | Rules for contributors and coding agents |
|
|
206
|
-
| [CONTRIBUTING.md](CONTRIBUTING.md) | How to report bugs and propose changes |
|
|
207
|
-
| [SECURITY.md](SECURITY.md) | How to report a vulnerability |
|
|
94
|
+
- **Clean, safe HTML.** HTML in, semantic HTML out, through a strict allowlist of tags,
|
|
95
|
+
attributes and styles.
|
|
96
|
+
- **Paste from Word and Google Docs.** Real lists, kept tables, no stray fonts and colors.
|
|
97
|
+
- **Big documents welcome.** Typing stays instant at 10,000 paragraphs
|
|
98
|
+
([numbers](docs/PERFORMANCE.md)).
|
|
99
|
+
- **Tested in Chromium, Firefox and WebKit**, with TypeScript types included.
|
|
100
|
+
- **Nothing behind a paywall.** Tables, paste from Word, find and replace: all in the free,
|
|
101
|
+
MIT-licensed package.
|
|
208
102
|
|
|
209
|
-
##
|
|
103
|
+
## Status
|
|
210
104
|
|
|
211
|
-
|
|
105
|
+
`0.x` preview: it works, but APIs may change in minor versions until `1.0.0`.
|
|
106
|
+
Read the [changelog](CHANGELOG.md) before updating.
|
|
107
|
+
Next: framework wrappers, real-time collaboration ([roadmap](docs/SPEC.md)).
|
|
212
108
|
|
|
213
|
-
|
|
214
|
-
npm install
|
|
215
|
-
npm run check # typecheck + lint + unit tests
|
|
216
|
-
npm run dev # demo page
|
|
217
|
-
npm run site # public site (published on GitHub Pages from main)
|
|
218
|
-
npm run bench # performance benchmarks (needs: npx playwright install chromium)
|
|
219
|
-
npm run test:e2e # E2E tests in Chromium, Firefox and WebKit (needs: npx playwright install)
|
|
220
|
-
```
|
|
109
|
+
## Contributing
|
|
221
110
|
|
|
222
|
-
|
|
111
|
+
Bugs, ideas and questions: [issues](https://github.com/kojak8791/stilo-editor/issues/new/choose).
|
|
112
|
+
Code: [CONTRIBUTING.md](CONTRIBUTING.md). Vulnerabilities: [SECURITY.md](SECURITY.md).
|
|
113
|
+
|
|
114
|
+
Designed by Alessio Coggiola and built with [Claude](https://claude.com/claude-code), from a
|
|
115
|
+
written [architecture](docs/ARCHITECTURE.md) and [decision records](docs/decisions/).
|
|
223
116
|
|
|
224
|
-
|
|
117
|
+
## License
|
|
225
118
|
|
|
226
|
-
|
|
227
|
-
[
|
|
119
|
+
[MIT](LICENSE) © 2026 Alessio Coggiola. Logo wordmark from
|
|
120
|
+
[IBM Plex](https://github.com/IBM/plex) ([OFL 1.1](https://openfontlicense.org)).
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stilo-editor",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Open-source
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "A complete rich text editor. Everything included, ready in minutes. Open-source WYSIWYG HTML editor built on ProseMirror: clean HTML in and out, headless core.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"wysiwyg",
|
|
7
7
|
"wysiwyg-editor",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
],
|
|
22
22
|
"author": "Alessio Coggiola <alessio.coggiola@gmail.com>",
|
|
23
23
|
"license": "MIT",
|
|
24
|
-
"homepage": "https://github.
|
|
24
|
+
"homepage": "https://kojak8791.github.io/stilo-editor/",
|
|
25
25
|
"repository": {
|
|
26
26
|
"type": "git",
|
|
27
27
|
"url": "git+https://github.com/kojak8791/stilo-editor.git"
|