rich-tree-cli 0.3.12__py3-none-any.whl
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.
- rich_tree_cli/__init__.py +5 -0
- rich_tree_cli/_get_console.py +40 -0
- rich_tree_cli/constants.py +49 -0
- rich_tree_cli/export/__init__.py +0 -0
- rich_tree_cli/export/_common.py +34 -0
- rich_tree_cli/export/as_html.py +132 -0
- rich_tree_cli/export/as_json.py +49 -0
- rich_tree_cli/export/as_toml.py +7 -0
- rich_tree_cli/export/html/__init__.py +0 -0
- rich_tree_cli/export/html/assets/icons/css.svg +4 -0
- rich_tree_cli/export/html/assets/icons/db.svg +1 -0
- rich_tree_cli/export/html/assets/icons/env.svg +1 -0
- rich_tree_cli/export/html/assets/icons/file.svg +1 -0
- rich_tree_cli/export/html/assets/icons/folder.svg +1 -0
- rich_tree_cli/export/html/assets/icons/git.svg +1 -0
- rich_tree_cli/export/html/assets/icons/html.svg +1 -0
- rich_tree_cli/export/html/assets/icons/javascript.svg +1 -0
- rich_tree_cli/export/html/assets/icons/json.svg +1 -0
- rich_tree_cli/export/html/assets/icons/log.svg +1 -0
- rich_tree_cli/export/html/assets/icons/markdown.svg +1 -0
- rich_tree_cli/export/html/assets/icons/nix.svg +1 -0
- rich_tree_cli/export/html/assets/icons/python.svg +1 -0
- rich_tree_cli/export/html/assets/icons/settings.svg +1 -0
- rich_tree_cli/export/html/assets/icons/src.svg +1 -0
- rich_tree_cli/export/html/assets/icons/svg.svg +1 -0
- rich_tree_cli/export/html/assets/icons/tests.svg +1 -0
- rich_tree_cli/export/html/assets/icons/toml.svg +1 -0
- rich_tree_cli/export/html/assets/icons/txt.svg +1 -0
- rich_tree_cli/export/html/assets/icons/vscode.svg +1 -0
- rich_tree_cli/export/html/assets/styles.css +66 -0
- rich_tree_cli/export/html/assets/template.jinja2 +10 -0
- rich_tree_cli/export/html/html_template.py +9 -0
- rich_tree_cli/export/icons.py +171 -0
- rich_tree_cli/export/replace_tags.py +37 -0
- rich_tree_cli/ignore_handler.py +80 -0
- rich_tree_cli/main.py +256 -0
- rich_tree_cli/output_manager.py +116 -0
- rich_tree_cli-0.3.12.dist-info/METADATA +184 -0
- rich_tree_cli-0.3.12.dist-info/RECORD +41 -0
- rich_tree_cli-0.3.12.dist-info/WHEEL +4 -0
- rich_tree_cli-0.3.12.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from dataclasses import asdict, dataclass
|
|
2
|
+
from io import StringIO
|
|
3
|
+
|
|
4
|
+
from rich.console import Console
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class ConsoleConfig:
|
|
9
|
+
"""Configuration for the console."""
|
|
10
|
+
|
|
11
|
+
file: StringIO | None = None
|
|
12
|
+
highlight: bool = True
|
|
13
|
+
soft_wrap: bool = True
|
|
14
|
+
width: int = 80
|
|
15
|
+
emoji: bool = True
|
|
16
|
+
emoji_variant: str = "emoji"
|
|
17
|
+
markup: bool = True
|
|
18
|
+
record: bool = False
|
|
19
|
+
force_terminal: bool = True
|
|
20
|
+
style: str | None = None
|
|
21
|
+
|
|
22
|
+
def update(self, **kwargs) -> None:
|
|
23
|
+
"""Update the console configuration with additional keyword arguments."""
|
|
24
|
+
for key, value in kwargs.items():
|
|
25
|
+
setattr(self, key, value)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_console(disable_color: bool, **kwargs) -> Console:
|
|
29
|
+
"""Create the output and capture consoles with the specified configurations."""
|
|
30
|
+
base_config = ConsoleConfig()
|
|
31
|
+
if file := kwargs.pop("file", None):
|
|
32
|
+
base_config.file = file
|
|
33
|
+
if disable_color:
|
|
34
|
+
base_config.highlight = False
|
|
35
|
+
base_config.markup = False
|
|
36
|
+
base_config.force_terminal = False
|
|
37
|
+
if kwargs: # allows an override anything that comes before this
|
|
38
|
+
base_config.update(**kwargs)
|
|
39
|
+
|
|
40
|
+
return Console(**asdict(base_config))
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from enum import StrEnum
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from rich.tree import Tree
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from rich_tree_cli.main import RichTreeCLI
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class RunResult:
|
|
13
|
+
"""Data returned from :class:`RichTreeCLI.run`."""
|
|
14
|
+
|
|
15
|
+
tree: Tree
|
|
16
|
+
totals: str
|
|
17
|
+
cli: "RichTreeCLI"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class OutputFormat(StrEnum):
|
|
21
|
+
"""Enum for output formats."""
|
|
22
|
+
|
|
23
|
+
TEXT = "txt"
|
|
24
|
+
MARKDOWN = "md"
|
|
25
|
+
HTML = "html"
|
|
26
|
+
JSON = "json"
|
|
27
|
+
SVG = "svg"
|
|
28
|
+
TOML = "toml"
|
|
29
|
+
|
|
30
|
+
@classmethod
|
|
31
|
+
def key_to_value(cls, key: str) -> str:
|
|
32
|
+
"""Get the value of the enum based on the key."""
|
|
33
|
+
try:
|
|
34
|
+
return cls[key.upper()].value
|
|
35
|
+
except KeyError:
|
|
36
|
+
raise ValueError(f"Invalid output format key: {key}") from None
|
|
37
|
+
|
|
38
|
+
@staticmethod
|
|
39
|
+
def choices() -> list[str]:
|
|
40
|
+
"""Return a list of available output format choices."""
|
|
41
|
+
return [format.name.lower() for format in OutputFormat]
|
|
42
|
+
|
|
43
|
+
@staticmethod
|
|
44
|
+
def default() -> list[str]:
|
|
45
|
+
"""Return the default output format."""
|
|
46
|
+
|
|
47
|
+
DEFAULT = OutputFormat.TEXT
|
|
48
|
+
|
|
49
|
+
return [DEFAULT.name.lower()]
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from enum import StrEnum
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
# from .html.rich_css import DEFINED_CSS
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
ICON_DIR: Path = Path(__file__).parent / "html" / "assets" / "icons"
|
|
8
|
+
|
|
9
|
+
OB = "{{ "
|
|
10
|
+
CB = " }}"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def jinja_template(txt: str) -> str:
|
|
14
|
+
"""Wrap text in curly braces for templating, unless already wrapped."""
|
|
15
|
+
if not txt.startswith(OB) and not txt.endswith(CB):
|
|
16
|
+
return OB + txt + CB
|
|
17
|
+
return txt
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
##############################################################
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class URIScheme(StrEnum):
|
|
24
|
+
"""Enum for URI schemes."""
|
|
25
|
+
|
|
26
|
+
FILE = "file:///"
|
|
27
|
+
VSC_IN = "vscode-insiders://file"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
FILE = URIScheme.FILE
|
|
31
|
+
VSC_IN = URIScheme.VSC_IN
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
##############################################################
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
from hashlib import blake2b
|
|
2
|
+
from io import StringIO
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from types import SimpleNamespace
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
from urllib.parse import quote
|
|
7
|
+
|
|
8
|
+
from jinja2 import Template
|
|
9
|
+
from rich.console import Console
|
|
10
|
+
from rich.tree import Tree
|
|
11
|
+
|
|
12
|
+
from ._common import VSC_IN, URIScheme
|
|
13
|
+
from ._common import jinja_template as jt
|
|
14
|
+
from .html.html_template import HTML_TEMPLATE, STYLES_CSS
|
|
15
|
+
from .icons import IconManager, IconMode
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from ..main import RichTreeCLI
|
|
19
|
+
|
|
20
|
+
css_classes = SimpleNamespace()
|
|
21
|
+
css_classes.folder = "class='folder'"
|
|
22
|
+
css_classes.file = "class='file'"
|
|
23
|
+
css_classes.hidden = "class='hidden'"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _hash(txt: str, length=20) -> str:
|
|
27
|
+
return "h" + blake2b(txt.encode(encoding="utf-8"), digest_size=length // 2).hexdigest()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def build_html(cli: "RichTreeCLI") -> str:
|
|
31
|
+
html_template = HTMLHandler(cli=cli)
|
|
32
|
+
return html_template.render()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class HTMLHandler:
|
|
36
|
+
def __init__(self, cli: "RichTreeCLI", uri_mode: URIScheme = VSC_IN) -> None:
|
|
37
|
+
self.cli: "RichTreeCLI" = cli
|
|
38
|
+
self.icon = IconManager(mode=IconMode.SVG_ICONS)
|
|
39
|
+
self.root: Path = cli.root.resolve()
|
|
40
|
+
self.template_map: SimpleNamespace = SimpleNamespace()
|
|
41
|
+
self.tree = Tree(self.link(path=self.root, uri=VSC_IN, cls_name=css_classes.folder), highlight=True)
|
|
42
|
+
self.capture: Console = Console(record=True, markup=False, file=StringIO(), emoji=True, soft_wrap=False)
|
|
43
|
+
self.add_to_html_tree(path=cli.root, tree_node=self.tree, current_depth=cli.max_depth)
|
|
44
|
+
self.capture.print(self.tree)
|
|
45
|
+
|
|
46
|
+
def link(self, path: Path, uri: URIScheme, cls_name: str) -> str:
|
|
47
|
+
"""
|
|
48
|
+
Create a link and return a Jinja2 hash reference to avoid Rich formatting issues.
|
|
49
|
+
|
|
50
|
+
Generates an HTML link with icon and styling, stores it in the template map using
|
|
51
|
+
a hash as the attribute name, and returns {{ hash.{href_hash} }} for dot notation
|
|
52
|
+
access in Jinja2 templates. This keeps Rich trees clean while preserving full links.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
path (Path): The file path to link to.
|
|
56
|
+
uri (URIScheme): The URI scheme to use, e.g., FILE or VSC_IN.
|
|
57
|
+
cls_name (str): CSS class to apply to the link.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
str: Jinja2 template variable "{{ hash.{href_hash} }}" for dot notation access.
|
|
61
|
+
|
|
62
|
+
Raises:
|
|
63
|
+
ValueError: If a hash collision is detected.
|
|
64
|
+
"""
|
|
65
|
+
label: str = f"{self.icon.get(path)} {path.name}"
|
|
66
|
+
a_href = '<a href="{url}" {cls}>{label}</a>'
|
|
67
|
+
link: str = f"{uri}{quote(str(path.resolve()), safe='/')}"
|
|
68
|
+
a_href: str = a_href.format(url=link, cls=cls_name, label=label)
|
|
69
|
+
href_hash: str = _hash(a_href)
|
|
70
|
+
if hasattr(self.template_map, href_hash):
|
|
71
|
+
raise ValueError(f"WEE WOO! Hash collision detected: {href_hash} for {path}. WEE WOO!")
|
|
72
|
+
setattr(self.template_map, href_hash, a_href)
|
|
73
|
+
return jt(f"hash.{href_hash}")
|
|
74
|
+
|
|
75
|
+
def add_to_html_tree(self, path: Path, tree_node: Tree, current_depth: int = 0) -> Tree:
|
|
76
|
+
"""
|
|
77
|
+
Recursively add items to the tree structure.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
path (Path): The current directory path.
|
|
81
|
+
tree_node (Tree): The current tree node to add items to.
|
|
82
|
+
current_depth (int): The current depth in the directory structure.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
Tree: The updated tree node with items added.
|
|
86
|
+
"""
|
|
87
|
+
if self.cli.max_depth and current_depth >= self.cli.max_depth:
|
|
88
|
+
return tree_node
|
|
89
|
+
|
|
90
|
+
for item in self.cli.get_items(path):
|
|
91
|
+
if self.cli.ignore_handler.should_ignore(item):
|
|
92
|
+
continue
|
|
93
|
+
icon: str = self.icon.get(item)
|
|
94
|
+
if item.is_dir():
|
|
95
|
+
branch: Tree = tree_node.add(
|
|
96
|
+
label=self.link(path=item, uri=VSC_IN, cls_name=css_classes.folder), highlight=True
|
|
97
|
+
)
|
|
98
|
+
self.add_to_html_tree(path=item, tree_node=branch, current_depth=current_depth + 1)
|
|
99
|
+
else:
|
|
100
|
+
file = self.link(path=item, uri=VSC_IN, cls_name=css_classes.file)
|
|
101
|
+
hidden = self.link(path=item, uri=VSC_IN, cls_name=css_classes.hidden)
|
|
102
|
+
cls_func = hidden if item.name.startswith(".") else file
|
|
103
|
+
tree_node.add(label=cls_func, highlight=False)
|
|
104
|
+
return tree_node
|
|
105
|
+
|
|
106
|
+
def render(self) -> str:
|
|
107
|
+
"""
|
|
108
|
+
Build HTML output from the captured console output.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
capture (Console): The console object that has captured the output.
|
|
112
|
+
Returns:
|
|
113
|
+
str: The HTML formatted string.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
tree = self.capture.export_text()
|
|
117
|
+
##########################
|
|
118
|
+
### FOR DEBUGGING ONLY ###
|
|
119
|
+
# with open("hash_test.txt", "w", encoding="utf-8") as f:
|
|
120
|
+
# f.write(tree)
|
|
121
|
+
##########################
|
|
122
|
+
html = Template(
|
|
123
|
+
HTML_TEMPLATE.render(
|
|
124
|
+
defined_css=STYLES_CSS,
|
|
125
|
+
tree_content=tree,
|
|
126
|
+
totals=self.cli.totals,
|
|
127
|
+
)
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
return html.render(
|
|
131
|
+
hash=self.template_map, # type: ignore[dict-item]
|
|
132
|
+
)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from ..main import RichTreeCLI
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def build_json(cli: "RichTreeCLI", path: Path) -> dict:
|
|
9
|
+
"""Build a dictionary representation of the directory structure."""
|
|
10
|
+
|
|
11
|
+
if path == cli.root:
|
|
12
|
+
tree_data: dict[str, str] = build_tree_dict(cli, path)
|
|
13
|
+
return {
|
|
14
|
+
"metadata": {
|
|
15
|
+
"total_dirs": cli.dir_count,
|
|
16
|
+
"total_files": cli.file_count,
|
|
17
|
+
"root_path": str(path),
|
|
18
|
+
},
|
|
19
|
+
"tree": tree_data,
|
|
20
|
+
}
|
|
21
|
+
else:
|
|
22
|
+
return build_tree_dict(cli, path)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def build_tree_dict(cli: "RichTreeCLI", path: Path) -> dict[str, str]:
|
|
26
|
+
"""Build just the tree part without metadata wrapper."""
|
|
27
|
+
result = {"name": path.name, "type": "directory", "children": []}
|
|
28
|
+
for item in cli.get_items(path):
|
|
29
|
+
if cli.ignore_handler.should_ignore(item):
|
|
30
|
+
continue
|
|
31
|
+
if item.is_dir():
|
|
32
|
+
result["children"].append(build_tree_dict(cli=cli, path=item))
|
|
33
|
+
else:
|
|
34
|
+
try:
|
|
35
|
+
file_info = {
|
|
36
|
+
"name": item.name,
|
|
37
|
+
"type": "file",
|
|
38
|
+
"size": item.stat().st_size,
|
|
39
|
+
"lines": len(item.read_text(encoding="utf-8").splitlines()),
|
|
40
|
+
}
|
|
41
|
+
except UnicodeDecodeError:
|
|
42
|
+
file_info = {
|
|
43
|
+
"name": item.name,
|
|
44
|
+
"type": "file",
|
|
45
|
+
"size": item.stat().st_size,
|
|
46
|
+
"lines": 0, # Binary file
|
|
47
|
+
}
|
|
48
|
+
result["children"].append(file_info)
|
|
49
|
+
return result
|
|
File without changes
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000">
|
|
2
|
+
<path fill="#639" d="M0 0H840A160 160 0 0 1 1000 160V840A160 160 0 0 1 840 1000H160A160 160 0 0 1 0 840V0Z"/>
|
|
3
|
+
<path fill="#fff" d="M816.54 919.9c-32.39 0-57.16-9.42-74.5-28.35-17.15-19.03-26.08-46.18-26.88-81.64h69.8c.4 31.36 11.42 47.08 33.08 47.08 11.04 0 18.86-3.5 23.37-10.42 4.41-6.9 6.72-17.93 6.72-33.05 0-12.02-3.01-22.04-8.83-29.95a73.2 73.2 0 0 0-29.48-21.14L783.95 750c-23.06-11.02-39.81-24.04-50.14-39.27-10.03-15.13-15.04-36.36-15.04-63.5 0-30.36 8.83-55 26.37-73.94 18.05-18.93 42.62-28.34 74-28.34 30.3 0 53.76 9.31 70.3 27.84 16.85 18.64 25.67 45.28 26.38 80.14h-67.19c.4-11.4-1.9-22.72-6.72-33.06-3.8-7.6-11.23-11.41-22.26-11.41-19.65 0-29.48 11.71-29.48 35.05 0 11.83 2.4 21.04 7.22 28.05A65.18 65.18 0 0 0 822.76 689l24.77 10.92c25.57 11.72 44.02 26.05 55.35 43.38 11.43 17.23 17.05 40.27 17.05 69.12 0 34.56-9.03 61.1-27.38 79.63-18.25 18.53-43.62 27.85-76 27.85Zm-225.42 0c-32.4 0-57.16-9.42-74.51-28.35-17.15-19.03-26.07-46.18-26.87-81.64h69.79c.4 31.36 11.43 47.08 33.1 47.08 11.02 0 18.84-3.5 23.25-10.42 4.52-6.9 6.72-17.93 6.72-33.05 0-12.02-2.9-22.04-8.72-29.95a73.2 73.2 0 0 0-29.48-21.14L558.53 750c-23.07-11.02-39.81-24.04-50.14-39.27-10.03-15.13-15.04-36.36-15.04-63.5 0-30.36 8.82-55 26.37-73.94 18.05-18.93 42.62-28.34 74-28.34 30.29 0 53.75 9.31 70.2 27.84 17.05 18.64 25.77 45.28 26.47 80.14h-67.18c.4-11.4-1.9-22.72-6.72-33.06-3.81-7.6-11.23-11.41-22.26-11.41-19.66 0-29.49 11.71-29.49 35.05 0 11.83 2.41 21.04 7.22 28.05A65.18 65.18 0 0 0 597.33 689l24.77 10.92c25.57 11.72 44.02 26.05 55.36 43.38 11.33 17.23 17.04 40.27 17.04 69.12 0 34.56-9.12 61.1-27.37 79.63-18.25 18.53-43.62 27.85-76.01 27.85Zm-234.75 0c-31.7 0-56.86-8.62-75.51-25.85-18.65-17.12-27.88-42.87-27.88-76.93V648.83c0-33.85 9.83-59.5 29.48-77.13 19.96-17.43 46.13-26.24 78.52-26.24 31.39 0 56.15 9.01 74.5 26.84 18.56 17.93 27.88 44.58 27.88 80.14v13.32h-73.9v-12.92c0-13.72-3.01-23.84-8.83-30.45a26.46 26.46 0 0 0-21.66-10.32c-12.03 0-20.55 4.1-25.37 12.42a79.04 79.04 0 0 0-6.72 36.66v146.26c0 30.55 10.74 46.08 32.1 46.38 10.02 0 17.54-3.61 22.76-10.82a51.74 51.74 0 0 0 7.72-30.46V801.6h73.9v11.42c0 23.74-4.61 43.57-13.94 59.4a88.8 88.8 0 0 1-38.2 35.66 121.46 121.46 0 0 1-54.85 11.82Z"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 260.73 208.58"><path fill="#dba710" d="M234.68,20.91H130.37c.74,0-25.8-20.91-26.07-20.91H26.07A26,26,0,0,0,.13,26.06h0L0,182.51a26.06,26.06,0,0,0,26.05,26.07H234.66a26.06,26.06,0,0,0,26.07-26.05V47A26.07,26.07,0,0,0,234.68,20.91Z"/><path fill="#fff" d="M229.83,135.18v28.23c0,17.15-30.68,31.06-68.54,31.06s-68.55-13.91-68.55-31.06V135.17c0,17.16,30.69,31.07,68.55,31.07s68.54-13.92,68.54-31.07Zm0-45.79v28.24c0,17.16-30.68,31.06-68.54,31.06s-68.55-13.9-68.55-31V89.39c0,17.15,30.69,31.06,68.55,31.06S229.83,106.54,229.83,89.39ZM161.29,43.67c37.86,0,68.54,13.26,68.54,29.62s-30.68,29.63-68.54,29.63S92.74,89.65,92.74,73.28,123.43,43.67,161.29,43.67Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path d="m.044 153.005h15.508v15.508h-15.508zm31.562 15.508v-81.048h60.107v13.696h-43.807v17.999h40.75v13.696h-40.75v21.96h45.279v13.697zm75.615 0v-81.048h15.96l33.167 54.107v-54.107h15.168v81.048h-16.413l-32.714-52.862v52.862zm102.235 0-28.865-81.048h17.659l20.488 59.994 19.923-59.994h17.319l-28.98 81.048h-17.545z" fill="#ffac00" fill-rule="nonzero"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg enable-background="new 0 0 48 48" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="m40 45h-32v-42h22l10 10z" fill="#90caf9"/><path d="m38.5 14h-9.5v-9.5z" fill="#e1f5fe"/><g fill="#1976d2"><path d="m16 21h17v2h-17z"/><path d="m16 25h13v2h-13z"/><path d="m16 29h17v2h-17z"/><path d="m16 33h13v2h-13z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 260.73 208.59"><path d="M104.29 0H26.07A26 26 0 00.13 26.07L0 182.51a26.06 26.06 0 0026.07 26.07h208.59a26.06 26.06 0 0026.07-26.07V47a26.07 26.07 0 00-26.07-26.07H130.37C131.1 20.91 104.57 0 104.29 0z" fill="#42a5f5"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 260.73 208.59"><path d="M234.66 20.91H130.37c.74 0-25.8-20.91-26.07-20.91H26.07A26 26 0 00.13 26.07L0 182.51a26.06 26.06 0 0026.07 26.07h208.59a26.06 26.06 0 0026.07-26.07V47a26.07 26.07 0 00-26.07-26.09zm1.64 101.23l-62.16 62.16a9.19 9.19 0 01-13 0L98.7 121.88a9.19 9.19 0 010-13l42.8-42.8 16.19 16.22a11 11 0 006 14.3v39.33a10.93 10.93 0 108.94.26V97.27L187.47 112a10.93 10.93 0 106.53-6.2L178.17 90a10.93 10.93 0 00-13.84-13.84l-16.44-16.48 13-13a9.19 9.19 0 0113 0l62.41 62.41a9.19 9.19 0 010 13.05z" fill="#e64a19" data-name="Calque 2"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"> <polyline fill="none" stroke="#D4843E" stroke-width="24" stroke-miterlimit="10" points="74.5,192.1 21,130 74.5,67.9"/><polyline fill="none" stroke="#D4843E" stroke-width="24" stroke-miterlimit="10" points="181.5,70.1 235,132.1 181.5,194.2"/><polygon fill="#D4843E" points="119.5,202.8 92,202.8 134.5,57.2 162,57.2"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg enable-background="new 0 0 482.2 367.2" viewBox="0 0 482.2 367.2" xmlns="http://www.w3.org/2000/svg"><path d="m130.9 39.7h64.9v181.9c0 82-39.2 110.6-102 110.6-15.3 0-35-2.6-47.8-6.9l7.3-52.5c10.8 3.4 22 5.2 33.3 5.1 27.3 0 44.4-12.4 44.4-56.8 0 .1-.1-181.4-.1-181.4zm121.3 221.2c17.1 9 44.4 17.9 72.1 17.9 29.9 0 45.7-12.4 45.7-31.5 0-17.5-13.6-28.2-48.2-40.1-47.8-17.1-79.4-43.5-79.4-85.8 0-49.2 41.4-86.3 108.9-86.3 32.9 0 56.4 6.4 73.4 14.5l-14.5 52.1c-18.6-9.1-39.1-13.8-59.8-13.6-28.2 0-41.8 13.2-41.8 27.8 0 18.3 15.8 26.5 53.4 41 50.8 18.8 74.3 45.2 74.3 86.3 0 48.2-36.8 89.3-115.8 89.3-32.9 0-65.4-9-81.6-17.9z" fill="#f4bf75"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><path fill="#FBC234" d="M32.5,64.8v39.1c0,4.6-1.7,8.2-5,10.8c-3.3,2.5-8,3.8-14.1,3.8V137c6.1,0,10.8,1.3,14.1,3.8, c3.3,2.5,5,6.1,5,10.8v39.2c0,11.6,3.8,20.6,11.4,26.9c7.6,6.3,18.3,9.5,32.1,9.5v-18.5c-6.6,0-11.7-1.4-15.3-4.2,c-3.6-2.8-5.4-6.7-5.4-11.7v-40.1c0-10.6-3.5-18.9-10.4-24.8c6.9-5.7,10.4-13.7,10.4-23.9V62.6c0-5,1.8-8.9,5.4-11.7,c3.6-2.7,8.7-4.1,15.3-4.1V28.3c-13.8,0-24.6,3.2-32.1,9.6C36.3,44.2,32.5,53.2,32.5,64.8z"/><rect x="76.4" y="159.2" fill="#FBC234" width="19" height="20.4"/><rect x="118.5" y="159.2" fill="#FBC234" width="19" height="20.4"/><rect x="160.6" y="159.2" fill="#FBC234" width="19" height="20.4"/><path fill="#FBC234" d="M228.5,114.7c-3.3-2.5-5-6.1-5-10.8V64.8c0-11.6-3.8-20.6-11.4-26.9c-7.6-6.4-18.3-9.6-32.1-9.6v18.5,c6.6,0,11.7,1.4,15.3,4.1c3.6,2.7,5.4,6.6,5.4,11.7V104c0,10.2,3.5,18.2,10.4,23.9c-6.9,5.9-10.4,14.2-10.4,24.8v40.1,c0,5-1.8,8.9-5.4,11.7c-3.6,2.8-8.7,4.2-15.3,4.2v18.5c13.8,0,24.5-3.2,32.1-9.5c7.6-6.3,11.4-15.3,11.4-26.9v-39.2,c0-4.6,1.7-8.2,5-10.8c3.3-2.5,8-3.8,14.1-3.8v-18.5C236.5,118.5,231.8,117.2,228.5,114.7z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg viewBox="0 0 63 57" xmlns="http://www.w3.org/2000/svg"><path d="m23 2h33v3 1h-37-2-10v-1-3h3v-2h10z" fill="#e29f33"/><path d="m17 6h39v2 1h-36l-2-2z" fill="#edab37"/><path d="m20 9h36 3v3 1h-55v-1-3h3v-3h10l1 1z" fill="#f6bb42"/><path d="m63 19v36a2 2 0 0 1 -2 2h-59a2 2 0 0 1 -2-2v-36a2 2 0 0 1 2-2h59a2 2 0 0 1 2 2zm-19.5 20.5v-3a1.5 1.5 0 0 0 -3 0v1.5h-18v-1.5a1.5 1.5 0 0 0 -3 0v3a1.5 1.5 0 0 0 1.5 1.5h21a1.5 1.5 0 0 0 1.5-1.5z" fill="#656d78"/><path d="m59 16v1h-55v-1-3h55z" fill="#ffce54"/><path d="m43.5 36.5v3a1.5 1.5 0 0 1 -1.5 1.5h-21a1.5 1.5 0 0 1 -1.5-1.5v-3a1.5 1.5 0 0 1 3 0v1.5h18v-1.5a1.5 1.5 0 0 1 3 0z" fill="#ccd1d9"/><path d="m7 11h49v2h-49z" fill="#fff"/><path d="m10 4h43v2h-43z" fill="#e6e9ed"/><path d="m3 52.5a.5.5 0 0 1 -.5-.5v-30a.5.5 0 0 1 1 0v30a.5.5 0 0 1 -.5.5zm57 0a.5.5 0 0 1 -.5-.5v-30a.5.5 0 1 1 1 0v30a.5.5 0 0 1 -.5.5z" fill="#545c66"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg viewBox="0 0 32 19.7" xmlns="http://www.w3.org/2000/svg"><path d="m29.69 19.7h-27.38a2.31 2.31 0 0 1 -2.31-2.31v-15.08a2.31 2.31 0 0 1 2.31-2.31h27.38a2.31 2.31 0 0 1 2.31 2.31v15.08a2.3 2.3 0 0 1 -2.31 2.31zm-22-4.62v-6l3.08 3.85 3.07-3.85v6h3.08v-10.46h-3.08l-3.07 3.85-3.08-3.85h-3.08v10.46zm20.62-5.23h-3.08v-5.23h-3.08v5.23h-3.07l4.61 5.39z" fill="#42a5f5"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg height="464.15" viewBox="0 0 501.704 435.14" width="535.15" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="271.247" x2="360.737" y1="-703.74" y2="-548.963"><stop offset="0" stop-color="#699ad7"/><stop offset=".243" stop-color="#7eb1dd"/><stop offset="1" stop-color="#7ebae4"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="280.497" x2="368.399" y1="-709.004" y2="-553.626"><stop offset="0" stop-color="#415e9a"/><stop offset=".232" stop-color="#4a6baf"/><stop offset="1" stop-color="#5277c3"/></linearGradient><g fill-rule="evenodd"><path d="m153.065 222.938 122.197 211.675-56.157.527-32.624-56.869-32.856 56.565-27.903-.01-14.29-24.69 46.81-80.49-33.23-57.826z" fill="#5277c3"/><path d="m197.17 135.747-122.216 211.663-28.535-48.37 32.939-56.687-65.416-.172-13.942-24.171 14.236-24.72 93.112.293 33.464-57.69zm9.377 169.2 244.414.012-27.622 48.897-65.562-.181 32.559 56.737-13.961 24.158-28.528.032-46.301-80.784-66.693-.135zm142.257-92.745-122.196-211.675 56.157-.527 32.623 56.87 32.857-56.567 27.902.01 14.291 24.69-46.81 80.49 33.229 57.826z" fill="#7ebae4"/><path d="m153.065 222.938 122.197 211.675-56.157.527-32.624-56.869-32.856 56.565-27.903-.01-14.29-24.69 46.81-80.49-33.23-57.826zm141.933-93.28-244.415-.012 27.623-48.897 65.562.182-32.56-56.737 13.962-24.159 28.527-.031 46.301 80.784 66.693.135zm9.535 169.69 122.218-211.663 28.534 48.37-32.938 56.688 65.415.171 13.942 24.17-14.237 24.721-93.112-.294-33.463 57.69z" fill="#5277c3"/></g><g transform="translate(-156.339 933.19)"><path id="c" d="m309.549-710.388 122.197 211.675-56.157.527-32.624-56.87-32.856 56.566-27.903-.011-14.29-24.69 46.81-80.49-33.23-57.826z" fill="url(#a)" fill-rule="evenodd"/><use height="100%" transform="matrix(.5 .8660254 -.8660254 .5 -416.333726 -710.462834)" width="100%" xlink:href="#c"/><use height="100%" transform="matrix(.5 -.8660254 .8660254 .5 823.470381 -5.107461)" width="100%" xlink:href="#c"/><use height="100%" transform="matrix(-1 0 0 -1 814.838 -1431.512)" width="100%" xlink:href="#c"/><path id="d" d="m309.549-710.388 122.197 211.675-56.157.527-32.624-56.87-32.856 56.566-27.903-.011-14.29-24.69 46.81-80.49-33.23-57.826z" fill="url(#b)" fill-rule="evenodd"/><use height="100%" transform="matrix(-.5 .8660254 -.8660254 -.5 -9.136935 -1426.892788)" width="100%" xlink:href="#d"/><use height="100%" transform="matrix(-.5 -.8660254 .8660254 -.5 1230.893606 -721.083245)" width="100%" xlink:href="#d"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg viewBox="0 0 256 255" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="12.959%" y1="12.039%" x2="79.639%" y2="78.201%" id="a"><stop stop-color="#387EB8" offset="0%"/><stop stop-color="#366994" offset="100%"/></linearGradient><linearGradient x1="19.128%" y1="20.579%" x2="90.742%" y2="88.429%" id="b"><stop stop-color="#FFE052" offset="0%"/><stop stop-color="#FFC331" offset="100%"/></linearGradient></defs><path d="M126.916.072c-64.832 0-60.784 28.115-60.784 28.115l.072 29.128h61.868v8.745H41.631S.145 61.355.145 126.77c0 65.417 36.21 63.097 36.21 63.097h21.61v-30.356s-1.165-36.21 35.632-36.21h61.362s34.475.557 34.475-33.319V33.97S194.67.072 126.916.072zM92.802 19.66a11.12 11.12 0 0111.13 11.13 11.12 11.12 0 01-11.13 11.13 11.12 11.12 0 01-11.13-11.13 11.12 11.12 0 0111.13-11.13z" fill="url(#a)"/><path d="M128.757 254.126c64.832 0 60.784-28.115 60.784-28.115l-.072-29.127H127.6v-8.745h86.441s41.486 4.705 41.486-60.712c0-65.416-36.21-63.096-36.21-63.096h-21.61v30.355s1.165 36.21-35.632 36.21h-61.362s-34.475-.557-34.475 33.32v56.013s-5.235 33.897 62.518 33.897zm34.114-19.586a11.12 11.12 0 01-11.13-11.13 11.12 11.12 0 0111.13-11.131 11.12 11.12 0 0111.13 11.13 11.12 11.12 0 01-11.13 11.13z" fill="url(#b)"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 112.19 117.98"><path d="M109.58 73.94L99.15 66.2c0-.16 0-.32.07-.48v-.19q.15-1 .26-2v-.13q.11-1.06.16-2.11v-.09q.05-1 .05-2.09v-2.24c0-.37 0-.74-.06-1.12v-.45c0-.11 0-.39-.06-.59v-1.27c-.06-.51-.13-1-.22-1.51v-.13L109.6 44a5.18 5.18 0 001.9-7.07L102.86 22a5.18 5.18 0 00-7.07-1.9l-11.94 5.2-.2-.16-.09-.08-.47-.37-.51-.4-.43-.29-.2-.15-.35-.26-.19-.14-.49-.34-.12-.11-.21-.15-.72-.48-.08-.05c-.4-.26-.79-.51-1.2-.75l-.31-.18c-.87-.51-1.75-1-2.66-1.45h-.05Q73.8 19 72 18.33h-.1l-.47-.19-1.54-12.96A5.18 5.18 0 0064.72 0H47.46a5.18 5.18 0 00-5.18 5.18L40.79 18.1l-.21.08-.24.1c-.48.18-.95.38-1.42.58l-.25.11-1.26.57-.13.06-.17.08-.46.23-1 .54-.75.4-.47.27h-.09l-.15.09q-.85.49-1.67 1l-.19.12-.19.12h-.05q-.71.47-1.39 1l-.19.14q-.77.56-1.52 1.15l-.26.21-.33.26-12-5.07A5.18 5.18 0 009.33 22L.7 37a5.18 5.18 0 001.89 7.08L13 51.8c0 .13 0 .25-.06.38l-.06.43c-.09.59-.16 1.19-.23 1.78v.35c-.05.53-.1 1.06-.13 1.59v6.93c0 .39.07.77.12 1.15q.1.85.24 1.7v.1L2.59 73.94A5.18 5.18 0 00.7 81l8.63 15a5.18 5.18 0 007.07 1.9l11.92-5.2.25.19.39.31.62.48.42.32.48.36h.05l.23.16.56.39.22.15c.65.45 1.32.88 2 1.29l.36.21q1.28.76 2.61 1.43h.09a43.8 43.8 0 004.15 1.81l1.49 12.9a5.18 5.18 0 005.21 5.3h17.26a5.18 5.18 0 005.18-5.18l1.49-12.91.22-.08.21-.09q.72-.28 1.43-.58l.28-.12 1.26-.57.12-.06.13-.06.49-.24 1-.53.77-.41.39-.22.13-.08h.07l.11-.07q.88-.51 1.74-1.07l.13-.08.27-.17c.48-.32 1-.65 1.43-1l.14-.1c.53-.39 1.06-.78 1.57-1.19l.23-.19.35-.28 11.92 5.16a5.18 5.18 0 007.07-1.9L111.48 81a5.18 5.18 0 00-1.9-7.06zM56.09 77a18 18 0 1118-18 18 18 0 01-18 18z" fill="#82c5a9"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 260.73 208.58"><path id="folder" fill="#8e95b2" d="M234.68,20.91H130.37c.74,0-25.8-20.91-26.07-20.91H26.07A26,26,0,0,0,.13,26.06h0L0,182.51a26.06,26.06,0,0,0,26.05,26.07H234.66a26.06,26.06,0,0,0,26.07-26.05V47A26.07,26.07,0,0,0,234.68,20.91Z"/><g id="icon" stroke="#fff" fill="none" stroke-miterlimit="10" stroke-width="24px"><polyline points="98.36 178.47 53.53 125.66 98.36 72.85"/><polyline points="188.03 74.72 232.86 127.45 188.03 180.26"/></g><polygon fill="#fff" points="136.07 187.57 113.03 187.57 148.64 63.75 171.69 63.75 136.07 187.57"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" xml:space="preserve"><ellipse fill="none" stroke="#F3B762" stroke-width="20" stroke-miterlimit="10" cx="43.4" cy="213.2" rx="29.3" ry="30.8"/><ellipse fill="none" stroke="#F3B762" stroke-width="20" stroke-miterlimit="10" cx="214.1" cy="51.3" rx="29.3" ry="30.8"/><circle fill="#F3B762" cx="39.8" cy="49.3" r="24.6"/><path fill="none" stroke="#F3B762" stroke-width="20" stroke-miterlimit="10" d="M40.4,49.9h144.5c0,0-141.2,0-141.2,134.6"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg viewBox="0 0 260.73 208.59" xmlns="http://www.w3.org/2000/svg"><g fill="#96ae60"><path d="m213.59 165.93-8.59-17.22h-.08l-5.48-11.07-3.77-7.64-19.83-39.69a5.54 5.54 0 0 1 -.61-2.49v-38.75h-22.15v38.75a5.54 5.54 0 0 1 -.61 2.49l-19.81 39.69-1.37 2.74-2.45 4.91-5.53 11.07-8.58 17.22a11.07 11.07 0 0 0 9.85 16h79.42a11.07 11.07 0 0 0 9.41-5.26h-.22a11.07 11.07 0 0 0 .4-10.75zm-38.17-48.93a8.27 8.27 0 1 1 -8.27 8.27 8.27 8.27 0 0 1 8.27-8.27zm24.83 59.09c-8.63.2-30.56.08-38.6 0-6.66.05-25 .18-33.6 0-10.67-.25-5.46-10.67-5.46-10.67l23.57-47.38h19.36a12.32 12.32 0 1 0 21.68 10.17l18.51 37.21s5.21 10.47-5.46 10.71z"/><path d="m234.66 20.91h-104.29c.74 0-25.8-20.91-26.07-20.91h-78.23a26 26 0 0 0 -25.94 26.07l-.13 156.44a26.06 26.06 0 0 0 26.07 26.07h208.59a26.06 26.06 0 0 0 26.07-26.07v-135.51a26.07 26.07 0 0 0 -26.07-26.09zm-30.92 172.09h-79.16a22.14 22.14 0 0 1 -19.76-32.05l37.18-74.46v-37.42h-5.54v-11.07h55.36v11.07h-5.52v37.42l37.2 74.46a22.14 22.14 0 0 1 -19.76 32.05z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="m22.76 6.83v3.25h-5v15.09h-3.5v-15.09h-5v-3.25z" fill="#7f7f7f"/><g fill="#bfbfbf"><path d="m2 2h6.2v3.09h-2.86v21.8h2.86v3.11h-6.2z"/><path d="m30 30h-6.2v-3.09h2.86v-21.8h-2.86v-3.11h6.2z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m40 0h400v300h-400z"/></clipPath><clipPath id="b"><path d="m40 300h399.996v179.996h-399.996z"/></clipPath><clipPath id="c"><path d="m40 300h399.996v179.996h-399.996z"/></clipPath><clipPath id="d"><path d="m440 50c0-27.6172-22.387-50-50-50h-300c-27.6133 0-50 22.3828-50 50v380c0 27.613 22.3867 50 50 50h239.996l110.004-110z"/></clipPath><g transform="matrix(.13333333 0 0 -.13333333 0 64)"><g clip-path="url(#a)"><path d="m90 5c-24.8164 0-45 20.1875-45 45v380c0 24.813 20.1836 45 45 45h237.926l107.074-107.07v-317.93c0-24.8125-20.187-45-45-45z" fill="#f6f6f6"/><path d="m329.996 480h-239.996c-27.6133 0-50-22.387-50-50v-380c0-27.6172 22.3867-50 50-50h300c27.613 0 50 22.3828 50 50v320zm-4.141-10 104.145-104.141v-315.859c0-22.0625-17.945-40-40-40h-300c-22.0547 0-40 17.9375-40 40v380c0 22.055 17.9453 40 40 40z" fill="#e0e0e0"/></g><g clip-path="url(#b)"><path d="m90 5c-24.8164 0-45 20.1875-45 45v380c0 24.816 20.1836 45 45 45h237.926l107.074-107.07v-317.93c0-24.8125-20.187-45-45-45z" fill="#5e68bd"/><path d="m329.996 480h-239.996c-27.6133 0-50-22.387-50-50v-380c0-27.6172 22.3867-50 50-50h300c27.613 0 50 22.3828 50 50v320zm-4.141-10 104.145-104.141v-315.859c0-22.0625-17.945-40-40-40h-300c-22.0547 0-40 17.9375-40 40v380c0 22.055 17.9453 40 40 40z" fill="#4d5599"/></g><g clip-path="url(#c)"><g clip-path="url(#d)"><path d="m344.352 384.973 96.793-96.793v96.793z" fill="#4d5599"/><path d="m440 370h-60c-27.613 0-50 22.387-50 50v60h110z" fill="#aeb3de"/></g></g><g fill="#fff"><path d="m91.8906 417.699h38.8004v-12.258h-13.226v-45.441h-12.438v45.441h-13.1364z"/><path d="m136.625 417.699h13.219l11.586-17.644 11.992 17.644h12.863l-18.262-27.426 20.063-30.273h-12.848l-13.718 20.508-13.661-20.508h-13.125l20.278 30.234z"/><path d="m192.129 417.699h38.805v-12.258h-13.231v-45.441h-12.433v45.441h-13.141z"/></g><path d="m365 210h-245c-8.285 0-15 6.719-15 15 0 8.285 6.715 15 15 15h245c8.285 0 15-6.715 15-15 0-8.281-6.715-15-15-15" fill="#d8d8d8"/><path d="m365 150h-245c-8.285 0-15 6.719-15 15s6.715 15 15 15h245c8.285 0 15-6.719 15-15s-6.715-15-15-15" fill="#d8d8d8"/><path d="m365 90h-245c-8.285 0-15 6.7188-15 15 0 8.281 6.715 15 15 15h245c8.285 0 15-6.719 15-15 0-8.2812-6.715-15-15-15" fill="#d8d8d8"/><path d="m330 70h-15v200h15z" fill="#ebcfcf"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg viewBox="0 0 260.73 208.59" xmlns="http://www.w3.org/2000/svg"><g fill="#42a5f5"><path d="m190.5 146.08v-63.9l-42.01 32.09zm-7.84-99.83a8.53 8.53 0 0 1 1.38-.69 6 6 0 0 0 -1.38.69z"/><path d="m234.66 20.91h-104.29c.74 0-25.8-20.91-26.07-20.91h-78.23a26 26 0 0 0 -25.94 26.07l-.13 156.44a26.06 26.06 0 0 0 26.07 26.07h208.59a26.06 26.06 0 0 0 26.07-26.07v-135.51a26.07 26.07 0 0 0 -26.07-26.09zm-12.32 147.7-33 16.26a5.82 5.82 0 0 1 -5.44-1.69l-.22-.24-57.36-52.09-24.47 18.56c-3.76 3.11-6.31.38-6.31.38l-10.71-9.79c-2.37-3.15 0-4.92 0-4.92l23.08-21-23.08-21s-3.47-2.5.69-5.84l9.71-8.68s2.78-2.92 5.71-.38l25.4 19.23 56.32-51.26s4.09-4.56 10.34-.69l28.6 13.78s4.4 1.57 4.4 5.84v97.08s.56 3.57-3.66 6.45z"/></g></svg>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
body {
|
|
2
|
+
background: #000000;
|
|
3
|
+
margin: 0;
|
|
4
|
+
padding: 20px;
|
|
5
|
+
font-family: 'Courier New', 'Monaco', monospace;
|
|
6
|
+
scrollbar-width: none;
|
|
7
|
+
-ms-overflow-style: none;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
body::-webkit-scrollbar {
|
|
11
|
+
display: none;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.code-block {
|
|
15
|
+
background: #000000;
|
|
16
|
+
border: 1px solid #00ff00;
|
|
17
|
+
border-radius: 8px;
|
|
18
|
+
padding: 20px;
|
|
19
|
+
color: #00ff00;
|
|
20
|
+
overflow-x: auto;
|
|
21
|
+
max-width: 400px;
|
|
22
|
+
margin: 0 auto;
|
|
23
|
+
scrollbar-width: none;
|
|
24
|
+
-ms-overflow-style: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.code-block::-webkit-scrollbar {
|
|
28
|
+
display: none;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.code-block a {
|
|
32
|
+
filter: brightness(0.9);
|
|
33
|
+
text-decoration: none;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.code-block a:hover {
|
|
37
|
+
filter: brightness(1.8);
|
|
38
|
+
text-decoration: underline;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.code-block a:visited {
|
|
42
|
+
filter: brightness(0.75);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.folder {
|
|
46
|
+
color: #42F917;
|
|
47
|
+
font-weight: bold;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.file {
|
|
51
|
+
color: #15803d;
|
|
52
|
+
font-weight: normal;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.hidden {
|
|
56
|
+
color: #14532d;
|
|
57
|
+
font-style: italic;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.code-block svg {
|
|
61
|
+
width: 16px;
|
|
62
|
+
height: 16px;
|
|
63
|
+
margin-right: 0.25em;
|
|
64
|
+
margin-bottom: 0.2em;
|
|
65
|
+
vertical-align: middle;
|
|
66
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""Load the HTML template for rendering output."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
from jinja2 import Template
|
|
6
|
+
|
|
7
|
+
TEMPLATE_PATH: Path = Path(__file__).parent / "assets" / "template.jinja2"
|
|
8
|
+
HTML_TEMPLATE: Template = Template(TEMPLATE_PATH.read_text(encoding="utf-8"))
|
|
9
|
+
STYLES_CSS: str = Path(TEMPLATE_PATH.parent / "styles.css").read_text(encoding="utf-8")
|