mimeforge 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +291 -2
- package/THIRD_PARTY.md +10 -0
- package/assets/bodies/archive.svg +13 -0
- package/assets/bodies/audio.svg +14 -0
- package/assets/bodies/code.svg +14 -0
- package/assets/bodies/data.svg +13 -0
- package/assets/bodies/database.svg +14 -0
- package/assets/bodies/design.svg +15 -0
- package/assets/bodies/disk.svg +16 -0
- package/assets/bodies/ebook.svg +13 -0
- package/assets/bodies/executable.svg +13 -0
- package/assets/bodies/font.svg +13 -0
- package/assets/bodies/game.svg +17 -0
- package/assets/bodies/generic.svg +13 -0
- package/assets/bodies/geo.svg +13 -0
- package/assets/bodies/image.svg +14 -0
- package/assets/bodies/mail.svg +13 -0
- package/assets/bodies/model3d.svg +14 -0
- package/assets/bodies/pdf.svg +13 -0
- package/assets/bodies/science.svg +13 -0
- package/assets/bodies/security.svg +14 -0
- package/assets/bodies/sheet.svg +13 -0
- package/assets/bodies/slides.svg +13 -0
- package/assets/bodies/text.svg +14 -0
- package/assets/bodies/video.svg +13 -0
- package/assets/bodies/word.svg +12 -0
- package/assets/fonts/monogram.json +106 -0
- package/dist/body.d.ts +24 -0
- package/dist/body.js +70 -0
- package/dist/categories.d.ts +10 -0
- package/dist/categories.js +122 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +127 -0
- package/dist/color.d.ts +12 -0
- package/dist/color.js +34 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.js +30 -0
- package/dist/font.d.ts +47 -0
- package/dist/font.js +102 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8 -0
- package/dist/label.d.ts +18 -0
- package/dist/label.js +36 -0
- package/dist/mime.d.ts +6 -0
- package/dist/mime.js +28 -0
- package/dist/palette.d.ts +13 -0
- package/dist/palette.js +32 -0
- package/dist/paths.d.ts +3 -0
- package/dist/paths.js +5 -0
- package/dist/png.d.ts +2 -0
- package/dist/png.js +11 -0
- package/dist/render.d.ts +26 -0
- package/dist/render.js +23 -0
- package/dist/testrun.d.ts +12 -0
- package/dist/testrun.js +70 -0
- package/docs/bodies.md +86 -0
- package/docs/categories.md +42 -0
- package/docs/fonts.md +63 -0
- package/docs/preview.svg +1 -0
- package/package.json +76 -4
- package/third_party/MIME-DB-LICENSE +23 -0
- package/third_party/monogram/CREDITS.txt +15 -0
- package/third_party/monogram/monogram.ttf +0 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the
|
|
4
|
+
project uses [Semantic Versioning](https://semver.org/).
|
|
5
|
+
|
|
6
|
+
## [0.1.0] - 2026-10-07
|
|
7
|
+
|
|
8
|
+
First release.
|
|
9
|
+
|
|
10
|
+
- 24 bundled icon bodies and a bitmap label font (Monogram, CC0)
|
|
11
|
+
- ~1,365 extensions mapped to categories from mime-db plus curated mappings
|
|
12
|
+
- CLI: `--all`, `--list`, `--test-run`, `--font`, `--body`, `--color`, `--colors`, `--accent`, `--label-case`, `--no-label`,
|
|
13
|
+
`--png`, `--config`
|
|
14
|
+
- Library API: `renderIcon`, `loadFont`, `loadBodies`, `createPalette` and friends
|
|
15
|
+
- Pluggable fonts (bitmap JSON, TTF, OTF, WOFF), bodies (directory or single SVG) and colors (per category or extension)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Levent Kurt
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,292 @@
|
|
|
1
|
-
#
|
|
1
|
+
# MimeForge
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/reachdevel/mimeforge/actions/workflows/ci.yml) [](LICENSE)
|
|
4
|
+
|
|
5
|
+
**Generate file-type icons as SVG from a file extension.**
|
|
6
|
+
A page with a type emblem and a colored extension label (`PDF`, `DOCX`, `ROM`, …), ready to drop into a file
|
|
7
|
+
browser, a download list or a docs site.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
- **Tiny and crisp:** ~1.3 KB per icon, plain SVG shapes, no fonts or scripts, identical output on every run.
|
|
12
|
+
- **~1,365 known extensions** in 24 categories (via [mime-db](https://github.com/jshttp/mime-db) plus our own mappings). Anything unknown gets a generic icon (a question mark).
|
|
13
|
+
- **Size is up to you:** the SVG scales to any size, `<img src="pdf.svg" width="16">` or `width="1024"`.
|
|
14
|
+
- **Everything is swappable:** colors, label font, and the icon bodies themselves.
|
|
15
|
+
|
|
16
|
+
## Why MimeForge exists
|
|
17
|
+
|
|
18
|
+
I needed file-type icons as **SVG**, and finding them turned out to be harder than it should be. The projects I could
|
|
19
|
+
find either shipped a fixed set of PNGs or generated PNGs, which means one file per size (16, 20, 32, 48, …) and blurry
|
|
20
|
+
results as soon as the size you need is not one of them. Their code was old, too, and a missing extension meant a
|
|
21
|
+
missing icon.
|
|
22
|
+
|
|
23
|
+
MimeForge starts from the other end: one small SVG per extension, generated on demand for any of the ~1,365
|
|
24
|
+
extensions it knows (and a sensible fallback for the rest). The size is a choice you make in your HTML, not something
|
|
25
|
+
baked into a file. Colors, fonts and the icon bodies are all replaceable, so it can match your product instead of the
|
|
26
|
+
other way around.
|
|
27
|
+
|
|
28
|
+
And, frankly, why not? :)
|
|
29
|
+
|
|
30
|
+
## Contents
|
|
31
|
+
|
|
32
|
+
[Quick start](#quick-start) · [Everyday use](#everyday-use) · [Customize](#customize) ([colors](#change-colors) · [label](#change-the-label) · [font](#change-the-font) · [bodies](#change-the-bodies) · [config file](#use-a-config-file) · [PNG](#export-png)) · [Edge cases](#edge-cases) · [Library API](#library-api) · [CLI reference](#cli-reference) · [Categories](#categories) · [Development](#development)
|
|
33
|
+
|
|
34
|
+
## Quick start
|
|
35
|
+
|
|
36
|
+
Requires Node.js 20 or newer.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx mimeforge pdf docx webm -o icons # no install needed
|
|
40
|
+
npm i mimeforge # or add it to a project (CLI + library)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
To work from source instead:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
git clone https://github.com/reachdevel/mimeforge.git
|
|
47
|
+
cd mimeforge
|
|
48
|
+
npm install # also builds the project
|
|
49
|
+
node dist/cli.js pdf docx webm -o icons
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
This writes `icons/pdf.svg`, `icons/docx.svg` and `icons/webm.svg`. Use them like any image:
|
|
53
|
+
|
|
54
|
+
```html
|
|
55
|
+
<img src="icons/pdf.svg" width="32" height="32" alt="PDF">
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The examples below use `mimeforge`. Install it globally with `npm i -g mimeforge`, use `npx mimeforge`, or (from a
|
|
59
|
+
source checkout) run `npm link` once or replace `mimeforge` with `node dist/cli.js`.
|
|
60
|
+
|
|
61
|
+
## Everyday use
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
mimeforge pdf docx webm -o icons # a few icons
|
|
65
|
+
mimeforge --all -o icons # every known extension, plus icons/manifest.json (ext → category)
|
|
66
|
+
mimeforge --list # which extension gets which category
|
|
67
|
+
mimeforge --test-run # visual check, see below
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**See what you get:** `mimeforge --test-run` writes `out/test-run/index.html`. Open it in a browser. It shows one icon
|
|
71
|
+
per category, with its color, at 16, 48 and 128 px as plain `<img>` tags, plus a label-length stress test. It accepts
|
|
72
|
+
all the options below (`--font`, `--body`, `--color`, …), so it is the quickest way to preview your changes.
|
|
73
|
+
|
|
74
|
+
Extensions are case-insensitive and a leading dot is fine: `mimeforge .PDF` is the same as `mimeforge pdf`.
|
|
75
|
+
|
|
76
|
+
## Customize
|
|
77
|
+
|
|
78
|
+
### Change colors
|
|
79
|
+
|
|
80
|
+
Every category has a default accent color. Override it per category, per extension, or for everything:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
mimeforge pdf docx --color pdf=#0a7 --color .docx=#c06 -o icons # category pdf, and only the extension .docx
|
|
84
|
+
mimeforge --all --accent '#3366cc' -o icons # one color for every icon
|
|
85
|
+
mimeforge --all --colors my-colors.json -o icons # many overrides from a file
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
`my-colors.json`:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{ "pdf": "#d64545", "archive": "#996600", ".docx": "#2b6cb0" }
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Keys without a dot are categories (see [Categories](#categories)); keys starting with a dot are single extensions.
|
|
95
|
+
Priority: `--accent` > extension color > category color > default. Colors are `#rgb` or `#rrggbb`.
|
|
96
|
+
|
|
97
|
+
The lighter tint inside the emblems is derived from the accent automatically, and the label text switches
|
|
98
|
+
between white and dark ink so it stays readable on light accents (like `kml`'s yellow-green).
|
|
99
|
+
|
|
100
|
+
### Change the label
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
mimeforge pdf --label-case lower -o icons # "pdf" instead of "PDF"
|
|
104
|
+
mimeforge --all --no-label -o icons # bodies only, no extension text
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Custom label text (e.g. `WORD` on a `.docx` icon) is available through the [library API](#library-api).
|
|
108
|
+
|
|
109
|
+
### Change the font
|
|
110
|
+
|
|
111
|
+
The label font is pluggable. The default is [Monogram](https://datagoblin.itch.io/monogram), a CC0 pixel font.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
mimeforge --test-run --font ./fonts/Inter-Bold.ttf # any .ttf, .otf or .woff file
|
|
115
|
+
mimeforge --all --font ./my-pixel-font.json -o icons # a bitmap font in the JSON format below
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- **Outline fonts** (`.ttf`, `.otf`, `.woff`; not `.woff2`): glyph outlines are converted to SVG paths and scaled so the
|
|
119
|
+
capital height fits the label. Nothing is embedded, so the icons do not need the font installed.
|
|
120
|
+
- **Bitmap fonts** (`.json`): drawn as crisp rectangles. Tiny example, a 3×3 font with two letters:
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"name": "Tiny",
|
|
125
|
+
"cols": 3, "rows": 3, "advance": 4,
|
|
126
|
+
"glyphs": {
|
|
127
|
+
"A": ["###", "#.#", "#.#"],
|
|
128
|
+
"B": ["##.", "###", "##."]
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`advance` is the distance between letters in cells; every glyph has `rows` strings of `cols` characters
|
|
134
|
+
(`#` = filled). Optional `descender` adds rows below the baseline. See [docs/fonts.md](docs/fonts.md).
|
|
135
|
+
|
|
136
|
+
Check the font's license before you ship icons made with it.
|
|
137
|
+
|
|
138
|
+
### Change the bodies
|
|
139
|
+
|
|
140
|
+
A *body* is the SVG with the page shape and the type emblem. Point `--body` at a directory of `<category>.svg` files
|
|
141
|
+
or at a single SVG that is used for every type:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
mimeforge --test-run --body ./my-bodies # my-bodies/pdf.svg, my-bodies/code.svg, ...
|
|
145
|
+
mimeforge --all --body ./one-shape.svg -o icons # the same body for everything
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Categories you do not provide fall back to your `generic.svg`, then to the bundled body. A body only has to follow a
|
|
149
|
+
few rules (a 32×32 viewBox and two placeholder colors that MimeForge replaces with the accent). The rules, a ready-made
|
|
150
|
+
skeleton and a prompt for generating bodies with an AI design tool are in [docs/bodies.md](docs/bodies.md).
|
|
151
|
+
MimeForge prints a warning when a body breaks the rules.
|
|
152
|
+
|
|
153
|
+
### Use a config file
|
|
154
|
+
|
|
155
|
+
Put a `mimeforge.config.json` in the folder you run MimeForge from (or pass `--config path`) so you do not repeat flags:
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"out": "icons",
|
|
160
|
+
"font": "./fonts/Inter-Bold.ttf",
|
|
161
|
+
"body": "./my-bodies",
|
|
162
|
+
"colors": { "pdf": "#d64545", ".docx": "#2b6cb0" },
|
|
163
|
+
"labelCase": "upper",
|
|
164
|
+
"png": [16, 32, 48]
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Relative paths are resolved against the config file. Command-line flags win over the file.
|
|
169
|
+
|
|
170
|
+
### Export PNG
|
|
171
|
+
|
|
172
|
+
SVG is the primary output, but some systems need raster images:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
mimeforge pdf docx --png 16,20,32,48 -o icons
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
writes `icons/pdf.svg` and `icons/16/pdf.png`, `icons/20/pdf.png`, … Any size works. PNG export uses the
|
|
179
|
+
optional dependency `@resvg/resvg-js` (installed by default; if it is missing, MimeForge tells you).
|
|
180
|
+
|
|
181
|
+
## Edge cases
|
|
182
|
+
|
|
183
|
+
| Situation | What happens |
|
|
184
|
+
|---|---|
|
|
185
|
+
| Unknown extension (`mimeforge xyz`) | generic body (question mark) with the label `XYZ` |
|
|
186
|
+
| Long extension (`webmanifest`) | up to 6 letters are drawn at full size; longer text is scaled down proportionally to fit the label, and below about a third of the size letters are dropped from the end |
|
|
187
|
+
| Light accent color | label text switches to a dark ink when white would have less than 3:1 contrast |
|
|
188
|
+
| Character the font does not have | skipped |
|
|
189
|
+
| Extension with several mime types (`mp4`) | the first mime type that maps to a category wins |
|
|
190
|
+
| Same input twice | byte-identical SVG |
|
|
191
|
+
| Wrong path or option | `error: …` on stderr and exit code 1 |
|
|
192
|
+
|
|
193
|
+
How crisp the label looks: the default pixel font is aligned to a grid that matches a 48 px rendering, so the label
|
|
194
|
+
is perfectly sharp when an icon is shown at 48, 96, 144 px, … and still clean (just antialiased) at other sizes.
|
|
195
|
+
Outline fonts have no such grid.
|
|
196
|
+
|
|
197
|
+
An extension lands in the wrong category? See [docs/categories.md](docs/categories.md) for how the mapping works and
|
|
198
|
+
how to change it.
|
|
199
|
+
|
|
200
|
+
## Library API
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
import { renderIcon, loadFont, loadBodies, createPalette } from 'mimeforge';
|
|
204
|
+
|
|
205
|
+
renderIcon('pdf').svg; // SVG string
|
|
206
|
+
renderIcon('docx', { accent: '#0a7', label: 'WORD' }).svg; // custom accent and label text
|
|
207
|
+
|
|
208
|
+
renderIcon('xyz', {
|
|
209
|
+
font: loadFont('./fonts/Inter-Bold.ttf'),
|
|
210
|
+
bodies: loadBodies('./my-bodies'),
|
|
211
|
+
palette: createPalette({ pdf: '#d00', '.zip': '#fa0' }),
|
|
212
|
+
category: 'archive', // skip the lookup and force a category
|
|
213
|
+
labelCase: 'lower', // 'upper' (default) | 'lower' | 'none'
|
|
214
|
+
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
`renderIcon` returns `{ svg, ext, category, accent }`. Other exports: `categoryFor`, `allExtensions`, `CATEGORIES`,
|
|
218
|
+
`DEFAULT_PALETTE`, `validateBody`, `renderLabel`, `bitmapFont`, `outlineFont` (see `src/index.ts`).
|
|
219
|
+
The package is ESM only.
|
|
220
|
+
|
|
221
|
+
## CLI reference
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
mimeforge <ext...> [options] write <out>/<ext>.svg for the given extensions
|
|
225
|
+
mimeforge --all [options] every known extension + manifest.json
|
|
226
|
+
mimeforge --test-run [options] HTML preview page (default dir: out/test-run)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
| Option | Description |
|
|
230
|
+
|---|---|
|
|
231
|
+
| `-o, --out <dir>` | output directory (default `out`) |
|
|
232
|
+
| `--font <spec>` | `monogram` (default), a `.ttf`/`.otf`/`.woff` file, or a bitmap-font `.json` |
|
|
233
|
+
| `--body <path>` | a directory of `<category>.svg` files, or one `.svg` for every type |
|
|
234
|
+
| `--color <key=#hex>` | accent for a category (`pdf=#0a7`) or an extension (`.docx=#c06`); repeatable |
|
|
235
|
+
| `--colors <file>` | the same overrides as a JSON object |
|
|
236
|
+
| `--accent <#hex>` | one accent for every icon |
|
|
237
|
+
| `--label-case <upper\|lower\|none>` | label text case: `upper` (default), `lower`, or `none` (leave the text as is, which is the lowercase extension) |
|
|
238
|
+
| `--no-label` | draw bodies only |
|
|
239
|
+
| `--png <sizes>` | also write PNGs, e.g. `16,32,48`, to `<out>/<size>/<ext>.png` |
|
|
240
|
+
| `--config <file>` | JSON config (default `./mimeforge.config.json` if it exists) |
|
|
241
|
+
| `--list` | print `extension category` for every known extension |
|
|
242
|
+
| `-h, --help`, `-v, --version` | |
|
|
243
|
+
|
|
244
|
+
## Categories
|
|
245
|
+
|
|
246
|
+
| Category | Emblem | Examples |
|
|
247
|
+
|---|---|---|
|
|
248
|
+
| `generic` | question mark | unknown or rare formats |
|
|
249
|
+
| `text` | text lines | `txt` `md` `log` `ini` `tex` |
|
|
250
|
+
| `code` | `</>` | `py` `js` `ts` `html` `css` `sh` |
|
|
251
|
+
| `data` | `{ }` | `json` `yaml` `xml` `toml` `nt` |
|
|
252
|
+
| `pdf` | flame | `pdf` `ps` `xps` `fdf` |
|
|
253
|
+
| `word` | W | `docx` `doc` `odt` `rtf` `wpd` |
|
|
254
|
+
| `sheet` | table | `xlsx` `csv` `ods` `numbers` |
|
|
255
|
+
| `slides` | bar chart | `pptx` `odp` `key` |
|
|
256
|
+
| `image` | landscape | `png` `jpg` `gif` `svg` `webp` |
|
|
257
|
+
| `audio` | music note | `mp3` `wav` `flac` `m4a` |
|
|
258
|
+
| `video` | play button | `mp4` `mov` `webm` `mkv` |
|
|
259
|
+
| `archive` | zipper | `zip` `tar` `gz` `7z` `apk` `deb` |
|
|
260
|
+
| `font` | letter A | `ttf` `otf` `woff2` |
|
|
261
|
+
| `ebook` | open book | `epub` `mobi` `cbz` |
|
|
262
|
+
| `database` | cylinder | `sqlite` `sql` `mdb` |
|
|
263
|
+
| `executable` | terminal prompt | `exe` `dll` `msi` `class` |
|
|
264
|
+
| `security` | padlock | `pem` `crt` `gpg` `kdbx` |
|
|
265
|
+
| `model3d` | cube | `glb` `stl` `obj` `fbx` |
|
|
266
|
+
| `geo` | map pin | `kml` `gpx` `geojson` `shp` |
|
|
267
|
+
| `mail` | envelope | `eml` `ics` `vcf` `mbox` |
|
|
268
|
+
| `science` | flask | `fits` `nc` `cif` `mat` |
|
|
269
|
+
| `disk` | hard drive | `iso` `dmg` `vmdk` `vhd` |
|
|
270
|
+
| `design` | pen nib | `psd` `ai` `sketch` `fig` `indd` |
|
|
271
|
+
| `game` | gamepad | `rom` `nes` `wad` `sav` `swf` |
|
|
272
|
+
|
|
273
|
+
Default colors live in `src/palette.ts`. The category list and the extension mapping are described in
|
|
274
|
+
[docs/categories.md](docs/categories.md).
|
|
275
|
+
|
|
276
|
+
## Development
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
npm install # installs and builds
|
|
280
|
+
npm test # vitest
|
|
281
|
+
npm run dev -- pdf # run the CLI from source (tsx)
|
|
282
|
+
npm run test-run # build the HTML preview from source
|
|
283
|
+
npm run preview # regenerate docs/preview.svg (after npm run build)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Project layout: `src/` (TypeScript, ESM), `assets/bodies/` (the 24 bundled bodies), `assets/fonts/` (Monogram as a
|
|
287
|
+
bitmap table), `tests/`, `docs/`, `third_party/` (font source and license texts).
|
|
288
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) to contribute.
|
|
289
|
+
|
|
290
|
+
## License
|
|
291
|
+
|
|
292
|
+
© 2026 Levent Kurt. [MIT](LICENSE). Third-party material (Monogram font, mime-db) is listed in [THIRD_PARTY.md](THIRD_PARTY.md).
|
package/THIRD_PARTY.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Third-party material
|
|
2
|
+
|
|
3
|
+
| Component | Used for | License |
|
|
4
|
+
|---|---|---|
|
|
5
|
+
| **[Monogram](https://datagoblin.itch.io/monogram)** pixel font by Vinícius Menézio (datagoblin) | default label font. The glyph bitmaps are in `assets/fonts/monogram.json`; the source TTF and its credits are in `third_party/monogram/` | CC0 1.0 (public domain dedication) |
|
|
6
|
+
| **[mime-db](https://github.com/jshttp/mime-db)** | extension → mime type table (runtime dependency) | MIT, see `third_party/MIME-DB-LICENSE` |
|
|
7
|
+
| **[opentype.js](https://github.com/opentypejs/opentype.js)** | reading TTF/OTF/WOFF fonts for `--font` (runtime dependency) | MIT |
|
|
8
|
+
| **[resvg-js](https://github.com/yisibl/resvg-js)** | optional PNG export (optional dependency) | MPL-2.0 |
|
|
9
|
+
|
|
10
|
+
The icon bodies in `assets/bodies/` were created for this project and are covered by the project's MIT license.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M13 6h3v2h-3z M16 8h3v2h-3z M13 10h3v2h-3z M16 12h3v2h-3z" fill="#FF00FF"/>
|
|
7
|
+
<rect x="12" y="16" width="8" height="2" rx="1" fill="#FF00FF"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<circle cx="13" cy="15" r="3" fill="#FF00FF"/>
|
|
7
|
+
<rect x="14" y="7" width="2" height="8" rx="0" fill="#FF00FF"/>
|
|
8
|
+
<path d="M15 7.5Q21 8 20 13" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
9
|
+
</g>
|
|
10
|
+
<g id="fold">
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
12
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
13
|
+
</g>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M11.5 7L10 12L11.5 17" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
|
+
<path d="M20.5 7L22 12L20.5 17" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
<path d="M16.7 7L15.3 17" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
9
|
+
</g>
|
|
10
|
+
<g id="fold">
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
12
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
13
|
+
</g>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M14 7Q12 7 12 9.5V10.5Q12 12 10 12Q12 12 12 13.5V14.5Q12 17 14 17" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
|
+
<path d="M18 7Q20 7 20 9.5V10.5Q20 12 22 12Q20 12 20 13.5V14.5Q20 17 18 17" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M9 10.5V15.5A7 2.5 0 0 0 23 15.5V10.5Z" fill="#FF99FF"/>
|
|
7
|
+
<ellipse cx="16" cy="10.5" rx="7" ry="2.5" fill="#FF00FF"/>
|
|
8
|
+
<path d="M9 12.8A7 2.5 0 0 0 23 12.8V14.8A7 2.5 0 0 1 9 14.8Z" fill="#FF00FF"/>
|
|
9
|
+
</g>
|
|
10
|
+
<g id="fold">
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
12
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
13
|
+
</g>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<polygon points="12.5,6 19.5,6 20,8 12,8" fill="#FF99FF"/>
|
|
7
|
+
<path d="M12.2 10H19.8L20.5 13L16 18L11.5 13Z" fill="#FF00FF"/>
|
|
8
|
+
<rect x="15.3" y="12.8" width="1.4" height="5.2" rx="0" fill="#FFFFFF"/>
|
|
9
|
+
<circle cx="16" cy="12.8" r="1.5" fill="#FFFFFF"/>
|
|
10
|
+
</g>
|
|
11
|
+
<g id="fold">
|
|
12
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
13
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
14
|
+
</g>
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<rect x="9" y="6" width="14" height="12" rx="2" fill="#FF00FF"/>
|
|
7
|
+
<circle cx="14.5" cy="12" r="4" fill="#FF99FF"/>
|
|
8
|
+
<circle cx="14.5" cy="12" r="1" fill="#FF00FF"/>
|
|
9
|
+
<path d="M20 15.5L17.2 12.4" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round"/>
|
|
10
|
+
<circle cx="20" cy="15.5" r="1.5" fill="#FFFFFF"/>
|
|
11
|
+
</g>
|
|
12
|
+
<g id="fold">
|
|
13
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
14
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
15
|
+
</g>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M9 10Q12 8.5 15 10V18Q12 16 9 18Z" fill="#FF00FF"/>
|
|
7
|
+
<path d="M23 10Q20 8.5 17 10V18Q20 16 23 18Z" fill="#FF00FF"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M10.5 8L15 12.5L10.5 17" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
|
+
<path d="M17 17H22" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M11 17L16 7L21 17M13.3 13H18.7" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
|
+
<path d="M9 16h6v2H9z M17 16h6v2h-6z" fill="#FF00FF"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M13 7.5H19C21.5 7.5 23 9.5 23 12.5C23 15.5 21.5 17.5 19.5 17.5C18 17.5 17.5 15.5 16 15.5C14.5 15.5 14 17.5 12.5 17.5C10.5 17.5 9 15.5 9 12.5C9 9.5 10.5 7.5 13 7.5Z" fill="#FF00FF"/>
|
|
7
|
+
<polygon points="11.6,9.9 13.6,9.9 13.6,11.2 14.9,11.2 14.9,13.2 13.6,13.2 13.6,14.5 11.6,14.5 11.6,13.2 10.3,13.2 10.3,11.2 11.6,11.2" fill="#FFFFFF"/>
|
|
8
|
+
<circle cx="18.8" cy="9.9" r="1" fill="#FFFFFF"/>
|
|
9
|
+
<circle cx="18.8" cy="14.5" r="1" fill="#FFFFFF"/>
|
|
10
|
+
<circle cx="16.5" cy="12.2" r="1" fill="#FFFFFF"/>
|
|
11
|
+
<circle cx="21.1" cy="12.2" r="1" fill="#FFFFFF"/>
|
|
12
|
+
</g>
|
|
13
|
+
<g id="fold">
|
|
14
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
15
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
16
|
+
</g>
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M13 10A3 3 0 0 1 19 10C19 11.8 16 11.5 16 13" fill="none" stroke="#FF00FF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
|
+
<circle cx="16" cy="17" r="1" fill="#FF00FF"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M16 18C14 15.5 11 13.5 11 11A5 5 0 0 1 21 11C21 13.5 18 15.5 16 18Z" fill="#FF00FF"/>
|
|
7
|
+
<circle cx="16" cy="11" r="2" fill="#FFFFFF"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<rect x="9" y="9" width="14" height="9" rx="2" fill="#FF99FF"/>
|
|
7
|
+
<polygon points="11,18 15,11.5 19,18" fill="#FF00FF"/>
|
|
8
|
+
<circle cx="20" cy="12.5" r="1.5" fill="#FF00FF"/>
|
|
9
|
+
</g>
|
|
10
|
+
<g id="fold">
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
12
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
13
|
+
</g>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<rect x="9" y="9.5" width="14" height="8.5" rx="2" fill="#FF00FF"/>
|
|
7
|
+
<polygon points="11.2,9.5 20.8,9.5 16,14.5" fill="#FF99FF"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<polygon points="16,7 20.76,9.75 20.76,15.25 16,18 11.24,15.25 11.24,9.75" fill="#FF00FF"/>
|
|
7
|
+
<polygon points="16,7 20.76,9.75 16,12.5 11.24,9.75" fill="#FF99FF"/>
|
|
8
|
+
<path d="M16 12.5L11.24 9.75M16 12.5L20.76 9.75M16 12.5V18" fill="none" stroke="#FFFFFF" stroke-width="2"/>
|
|
9
|
+
</g>
|
|
10
|
+
<g id="fold">
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
12
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
13
|
+
</g>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M16 6C18.8 9.5 22.5 11.5 22.5 14.5C22.5 16.8 19.6 18 16 18C12.4 18 9.5 16.8 9.5 14.5C9.5 11.5 13.2 9.5 16 6Z" fill="#FF00FF"/>
|
|
7
|
+
<path d="M16 11C17.8 12.8 19 13.8 19 15C19 16 17.7 16.6 16 16.6C14.3 16.6 13 16 13 15C13 13.8 14.2 12.8 16 11Z" fill="#FF99FF"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
|
2
|
+
<g id="page">
|
|
3
|
+
<path d="M7.5 2.5H19.5L26.5 9.5V27.5A2 2 0 0 1 24.5 29.5H7.5A2 2 0 0 1 5.5 27.5V4.5A2 2 0 0 1 7.5 2.5Z" fill="#FFFFFF" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g id="emblem">
|
|
6
|
+
<path d="M13.5 6H18.5V11.5L22.5 17Q23 18 22 18H10Q9 18 9.5 17L13.5 11.5Z" fill="#FF99FF"/>
|
|
7
|
+
<path d="M11.3 14.5H20.7L22.5 17Q23 18 22 18H10Q9 18 9.5 17Z" fill="#FF00FF"/>
|
|
8
|
+
</g>
|
|
9
|
+
<g id="fold">
|
|
10
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="#E3E7EB"/>
|
|
11
|
+
<path d="M19.5 2.5V7.5Q19.5 9.5 21.5 9.5H26.5Z" fill="none" stroke="#B8BFC7" stroke-linejoin="round"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|