Merge branch 'master' into feature/scrollable-content-tabs
BIN
.github/assets/sponsors/hummingbot.png
vendored
Normal file
After Width: | Height: | Size: 22 KiB |
2
.github/workflows/build.yml
vendored
@ -52,7 +52,7 @@ jobs:
|
|||||||
run: npm install
|
run: npm install
|
||||||
|
|
||||||
- name: Check project
|
- name: Check project
|
||||||
run: npm run lint
|
run: npm run check
|
||||||
|
|
||||||
- name: Build project
|
- name: Build project
|
||||||
run: |
|
run: |
|
||||||
|
3
.github/workflows/documentation.yml
vendored
@ -46,7 +46,8 @@ jobs:
|
|||||||
pip install .
|
pip install .
|
||||||
pip install \
|
pip install \
|
||||||
mkdocs-minify-plugin>=0.3 \
|
mkdocs-minify-plugin>=0.3 \
|
||||||
mkdocs-redirects>=1.0
|
mkdocs-redirects>=1.0 \
|
||||||
|
mkdocs-rss-plugin>=0.17
|
||||||
|
|
||||||
- name: Install Insiders build
|
- name: Install Insiders build
|
||||||
if: github.event.repository.fork == false
|
if: github.event.repository.fork == false
|
||||||
|
64
CHANGELOG
@ -1,3 +1,67 @@
|
|||||||
|
mkdocs-material-7.3.0 (2021-09-23)
|
||||||
|
|
||||||
|
* Added support for sticky navigation tabs
|
||||||
|
* Added support for section index pages
|
||||||
|
* Added support for removing generator notice
|
||||||
|
|
||||||
|
mkdocs-material-7.2.8 (2021-09-20)
|
||||||
|
|
||||||
|
* Fixed #3039: Search modal overlays menu on mobile (7.2.7 regression)
|
||||||
|
|
||||||
|
mkdocs-material-7.2.7+insiders-3.0.1 (2021-09-19)
|
||||||
|
|
||||||
|
* Added support for using literal h1-6 tags for search plugin
|
||||||
|
* Fixed search plugin breaking on void elements without slashes
|
||||||
|
* Fixed search plugin filtering link contents from headlines
|
||||||
|
* Fixed search plugin handling of multiple h1 headlines
|
||||||
|
* Fixed search plugin handling of missing h1 headlines
|
||||||
|
|
||||||
|
mkdocs-material-7.2.7 (2021-09-19)
|
||||||
|
|
||||||
|
* Updated Serbian and Serbo-Croatian translations
|
||||||
|
* Improved appearance of outline on details
|
||||||
|
* Fixed #2934: Scrollbar when header is hidden on some mobile browsers
|
||||||
|
* Fixed #3032: Anchor in details doesn't open on load (7.0.0 regression)
|
||||||
|
* Fixed back-to-top button being focusable when invisible
|
||||||
|
* Fixed broken admonition icons (removed in upstream)
|
||||||
|
|
||||||
|
mkdocs-material-7.2.6+insiders-3.0.0 (2021-09-13)
|
||||||
|
|
||||||
|
* Rewrite of MkDocs' search plugin
|
||||||
|
* Added support for rich search previews
|
||||||
|
* Added support for tokenizer with lookahead
|
||||||
|
* Improved search indexing performance (twice as fast)
|
||||||
|
* Improved search highlighting
|
||||||
|
|
||||||
|
mkdocs-material-7.2.6+insiders-2.13.3 (2021-09-01)
|
||||||
|
|
||||||
|
* Added support for disabling social card generation
|
||||||
|
|
||||||
|
mkdocs-material-7.2.6 (2021-09-01)
|
||||||
|
|
||||||
|
* Fixed rendering of blockquote elements (7.0.0 regression)
|
||||||
|
* Fixed #2973: Custom search worker setting ignored
|
||||||
|
|
||||||
|
mkdocs-material-7.2.5+insiders-2.13.2 (2021-08-25)
|
||||||
|
|
||||||
|
* Fixed #2965: Social plugin error when primary color is not defined
|
||||||
|
|
||||||
|
mkdocs-material-7.2.5 (2021-08-25)
|
||||||
|
|
||||||
|
* Updated Portuguese translations
|
||||||
|
* Fixed execution of RxJS teardown logic (7.2.3 regression)
|
||||||
|
* Fixed #2970: Search results show escaped characters (7.2.2 regression)
|
||||||
|
|
||||||
|
mkdocs-material-7.2.4+insiders-2.13.1 (2021-08-22)
|
||||||
|
|
||||||
|
* Fixed #2948: Social cards are not cached
|
||||||
|
* Fixed #2953: Mermaid.js diagrams can't be centered anymore
|
||||||
|
|
||||||
|
mkdocs-material-7.2.4 (2021-08-11)
|
||||||
|
|
||||||
|
* Fixed #2926: Version selector not working (7.2.3 regression)
|
||||||
|
* Fixed #2929: Missing CSS class for banner (consistency with Insiders)
|
||||||
|
|
||||||
mkdocs-material-7.2.3 (2021-08-09)
|
mkdocs-material-7.2.3 (2021-08-09)
|
||||||
|
|
||||||
* Slight facelift of data tables, now closer to Material Design
|
* Slight facelift of data tables, now closer to Material Design
|
||||||
|
53
Dockerfile
@ -40,33 +40,40 @@ COPY setup.py setup.py
|
|||||||
|
|
||||||
# Perform build and cleanup artifacts and caches
|
# Perform build and cleanup artifacts and caches
|
||||||
RUN \
|
RUN \
|
||||||
apk upgrade --update-cache -a && \
|
apk upgrade --update-cache -a \
|
||||||
|
&& \
|
||||||
apk add --no-cache \
|
apk add --no-cache \
|
||||||
git \
|
git \
|
||||||
git-fast-import \
|
git-fast-import \
|
||||||
openssh \
|
openssh \
|
||||||
&& apk add --no-cache --virtual .build gcc musl-dev \
|
&& \
|
||||||
&& pip install --no-cache-dir . \
|
apk add --no-cache --virtual .build \
|
||||||
&& \
|
gcc \
|
||||||
if [ "${WITH_PLUGINS}" = "true" ]; then \
|
musl-dev \
|
||||||
pip install --no-cache-dir \
|
&& \
|
||||||
"mkdocs-minify-plugin>=0.3" \
|
pip install --no-cache-dir . \
|
||||||
"mkdocs-redirects>=1.0"; \
|
&& \
|
||||||
fi \
|
if [ "${WITH_PLUGINS}" = "true" ]; then \
|
||||||
&& apk del .build gcc musl-dev \
|
pip install --no-cache-dir \
|
||||||
&& \
|
"mkdocs-minify-plugin>=0.3" \
|
||||||
for theme in mkdocs readthedocs; do \
|
"mkdocs-redirects>=1.0"; \
|
||||||
rm -rf ${PACKAGES}/mkdocs/themes/$theme; \
|
fi \
|
||||||
ln -s \
|
&& \
|
||||||
${PACKAGES}/material \
|
apk del .build \
|
||||||
${PACKAGES}/mkdocs/themes/$theme; \
|
&& \
|
||||||
done \
|
for theme in mkdocs readthedocs; do \
|
||||||
&& rm -rf /tmp/* /root/.cache \
|
rm -rf ${PACKAGES}/mkdocs/themes/$theme; \
|
||||||
&& \
|
ln -s \
|
||||||
find ${PACKAGES} \
|
${PACKAGES}/material \
|
||||||
-type f \
|
${PACKAGES}/mkdocs/themes/$theme; \
|
||||||
-path "*/__pycache__/*" \
|
done \
|
||||||
-exec rm -f {} \;
|
&& \
|
||||||
|
rm -rf /tmp/* /root/.cache \
|
||||||
|
&& \
|
||||||
|
find ${PACKAGES} \
|
||||||
|
-type f \
|
||||||
|
-path "*/__pycache__/*" \
|
||||||
|
-exec rm -f {} \;
|
||||||
|
|
||||||
# Set working directory
|
# Set working directory
|
||||||
WORKDIR /docs
|
WORKDIR /docs
|
||||||
|
40
README.md
@ -34,9 +34,6 @@
|
|||||||
src="https://img.shields.io/docker/pulls/squidfunk/mkdocs-material"
|
src="https://img.shields.io/docker/pulls/squidfunk/mkdocs-material"
|
||||||
alt="Docker Pulls"
|
alt="Docker Pulls"
|
||||||
/></a>
|
/></a>
|
||||||
<a href="https://squidfunk.github.io/mkdocs-material/insiders/"><img
|
|
||||||
src="https://img.shields.io/static/v1?label=%E2%86%92&message=insiders&color=e91e63"
|
|
||||||
/></a>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@ -53,13 +50,30 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<em>
|
<em>
|
||||||
A demo is worth a thousand words — check it out at
|
Check out the demo –
|
||||||
<a
|
<a
|
||||||
href="https://squidfunk.github.io/mkdocs-material/"
|
href="https://squidfunk.github.io/mkdocs-material/"
|
||||||
>squidfunk.github.io/mkdocs-material</a>.
|
>squidfunk.github.io/mkdocs-material</a>.
|
||||||
</em>
|
</em>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<h2></h2>
|
||||||
|
<p> </p>
|
||||||
|
<p id="premium-sponsors" align="center"><strong>Special thanks</strong> to our <strong>premium sponsors</strong>:</p>
|
||||||
|
<p> </p>
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://hummingbot.io/" target=_blank><img
|
||||||
|
src="https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/hummingbot.png" height="40"
|
||||||
|
/></a>
|
||||||
|
<a href="https://docs.baslerweb.com/" target=_blank><img
|
||||||
|
src="https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/basler.png" height="40"
|
||||||
|
/></a>
|
||||||
|
<a href="https://cirrus-ci.org/" target=_blank><img
|
||||||
|
src="https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/cirrus-ci.svg" height="40"
|
||||||
|
/></a>
|
||||||
|
</p>
|
||||||
|
<p> </p>
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
* **It's just Markdown ...** — write your technical documentation in Markdown –
|
* **It's just Markdown ...** — write your technical documentation in Markdown –
|
||||||
@ -124,24 +138,15 @@ For other installation methods, configuration options, and a demo, visit
|
|||||||
|
|
||||||
[1]: https://squidfunk.github.io/mkdocs-material/
|
[1]: https://squidfunk.github.io/mkdocs-material/
|
||||||
|
|
||||||
## Premium Sponsors
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a href="https://docs.baslerweb.com/" target=_blank><img
|
|
||||||
src="https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/basler.png" width="155"
|
|
||||||
/></a>
|
|
||||||
<a href="https://cirrus-ci.org/" target=_blank><img
|
|
||||||
src="https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/cirrus-ci.svg" width="155"
|
|
||||||
/></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
## Trusted by ...
|
## Trusted by ...
|
||||||
|
|
||||||
### ... leading companies
|
### ... leading organizations
|
||||||
|
|
||||||
[Atlassian](https://atlassian-labs.github.io/data-center-helm-charts/),
|
[Atlassian](https://atlassian.github.io/data-center-helm-charts/),
|
||||||
[AWS](https://aws.github.io/copilot-cli/),
|
[AWS](https://aws.github.io/copilot-cli/),
|
||||||
[Binance](https://docs.binance.org/),
|
[Binance](https://docs.binance.org/),
|
||||||
|
[Bloomberg](https://bloomberg.github.io/selekt/),
|
||||||
|
[CERN](http://abpcomputing.web.cern.ch/),
|
||||||
[Datadog](https://datadoghq.dev/integrations-core/),
|
[Datadog](https://datadoghq.dev/integrations-core/),
|
||||||
[Google](https://google.github.io/accompanist/),
|
[Google](https://google.github.io/accompanist/),
|
||||||
[ING](https://ing-bank.github.io/baker/),
|
[ING](https://ing-bank.github.io/baker/),
|
||||||
@ -157,6 +162,7 @@ For other installation methods, configuration options, and a demo, visit
|
|||||||
|
|
||||||
### ... and successful Open Source projects
|
### ... and successful Open Source projects
|
||||||
|
|
||||||
|
[Arduino](https://arduino.github.io/arduino-cli/),
|
||||||
[AutoKeras](https://autokeras.com/),
|
[AutoKeras](https://autokeras.com/),
|
||||||
[BFE](https://www.bfe-networks.net/),
|
[BFE](https://www.bfe-networks.net/),
|
||||||
[Crystal](https://crystal-lang.org/reference/),
|
[Crystal](https://crystal-lang.org/reference/),
|
||||||
|
649
docs/blog/2021/search-better-faster-smaller.md
Normal file
@ -0,0 +1,649 @@
|
|||||||
|
---
|
||||||
|
template: overrides/main.html
|
||||||
|
description: >
|
||||||
|
How we rebuilt client-side search, delivering a better user experience while
|
||||||
|
making it faster and smaller at the same time
|
||||||
|
disqus: mkdocs-material
|
||||||
|
search:
|
||||||
|
exclude: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Search: better, faster, smaller
|
||||||
|
|
||||||
|
__This is the story of how we managed to completely rebuild client-side search,
|
||||||
|
delivering a significantly better user experience while making it faster and
|
||||||
|
smaller at the same time.__
|
||||||
|
|
||||||
|
<aside class="mdx-author" markdown="1">
|
||||||
|
![@squidfunk][1]
|
||||||
|
|
||||||
|
<span>__Martin Donath__ · @squidfunk</span>
|
||||||
|
<span>
|
||||||
|
:octicons-calendar-24: September 13, 2021 ·
|
||||||
|
:octicons-clock-24: 15 min read
|
||||||
|
</span>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
[1]: https://avatars.githubusercontent.com/u/932156
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
The [search][2] of Material for MkDocs is by far one of its best and most-loved
|
||||||
|
assets: [multilingual][3], [offline-capable][4], and most importantly: _all
|
||||||
|
client-side_. It provides a solution to empower the users of your documentation
|
||||||
|
to find what they're searching for instantly without the headache of managing
|
||||||
|
additional servers. However, even though several iterations have been made,
|
||||||
|
there's still some room for improvement, which is why we rebuilt the search
|
||||||
|
plugin and integration from the ground up. This article shines some light on the
|
||||||
|
internals of the new search, why it's much more powerful than the previous
|
||||||
|
version, and what's about to come.
|
||||||
|
|
||||||
|
_The next section discusses the architecture and issues of the current search
|
||||||
|
implementation. If you immediately want to learn what's new, skip to the
|
||||||
|
[section just after that][5]._
|
||||||
|
|
||||||
|
[2]: ../../setup/setting-up-site-search.md
|
||||||
|
[3]: ../../setup/setting-up-site-search.md#lang
|
||||||
|
[4]: ../../setup/setting-up-site-search.md#offline-search
|
||||||
|
[5]: #whats-new
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
Material for MkDocs uses [lunr][6] together with [lunr-languages][7] to
|
||||||
|
implement its client-side search capabilities. When a documentation page is
|
||||||
|
loaded and JavaScript is available, the search index as generated by the
|
||||||
|
[built-in search plugin][8] during the build process is requested from the
|
||||||
|
server:
|
||||||
|
|
||||||
|
``` ts
|
||||||
|
const index$ = document.forms.namedItem("search")
|
||||||
|
? __search?.index || requestJSON<SearchIndex>(
|
||||||
|
new URL("search/search_index.json", config.base)
|
||||||
|
)
|
||||||
|
: NEVER
|
||||||
|
```
|
||||||
|
|
||||||
|
[6]: https://lunrjs.com
|
||||||
|
[7]: https://github.com/MihaiValentin/lunr-languages
|
||||||
|
[8]: ../../setup/setting-up-site-search.md#built-in-search
|
||||||
|
|
||||||
|
### Search index
|
||||||
|
|
||||||
|
The search index includes a stripped-down version of all pages. Let's take a
|
||||||
|
look at an example to understand precisely what the search index contains from
|
||||||
|
the original Markdown file:
|
||||||
|
|
||||||
|
??? example "Expand to inspect example"
|
||||||
|
|
||||||
|
=== "`docs/page.md`"
|
||||||
|
|
||||||
|
```` markdown
|
||||||
|
# Example
|
||||||
|
|
||||||
|
## Text
|
||||||
|
|
||||||
|
It's very easy to make some words **bold** and other words *italic*
|
||||||
|
with Markdown. You can even add [links](#), or even `code`:
|
||||||
|
|
||||||
|
```
|
||||||
|
if (isAwesome) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Lists
|
||||||
|
|
||||||
|
Sometimes you want numbered lists:
|
||||||
|
|
||||||
|
1. One
|
||||||
|
2. Two
|
||||||
|
3. Three
|
||||||
|
|
||||||
|
Sometimes you want bullet points:
|
||||||
|
|
||||||
|
* Start a line with a star
|
||||||
|
* Profit!
|
||||||
|
````
|
||||||
|
|
||||||
|
=== "`search_index.json`"
|
||||||
|
|
||||||
|
``` json
|
||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"indexing": "full",
|
||||||
|
"lang": [
|
||||||
|
"en"
|
||||||
|
],
|
||||||
|
"min_search_length": 3,
|
||||||
|
"prebuild_index": false,
|
||||||
|
"separator": "[\\s\\-]+"
|
||||||
|
},
|
||||||
|
"docs": [
|
||||||
|
{
|
||||||
|
"location": "page/",
|
||||||
|
"title": "Example",
|
||||||
|
"text": "Example Text It's very easy to make some words bold and other words italic with Markdown. You can even add links , or even code : if (isAwesome) { return true } Lists Sometimes you want numbered lists: One Two Three Sometimes you want bullet points: Start a line with a star Profit!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"location": "page/#example",
|
||||||
|
"title": "Example",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"location": "page/#text",
|
||||||
|
"title": "Text",
|
||||||
|
"text": "It's very easy to make some words bold and other words italic with Markdown. You can even add links , or even code : if (isAwesome) { return true }"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"location": "page/#lists",
|
||||||
|
"title": "Lists",
|
||||||
|
"text": "Sometimes you want numbered lists: One Two Three Sometimes you want bullet points: Start a line with a star Profit!"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If we inspect the search index, we immediately see several problems:
|
||||||
|
|
||||||
|
1. __All content is included twice__: the search index contains one entry
|
||||||
|
with the entire contents of the page, and one entry for each section of
|
||||||
|
the page, i.e., each block preceded by a headline or subheadline. This
|
||||||
|
significantly contributes to the size of the search index.
|
||||||
|
|
||||||
|
2. __All structure is lost__: when the search index is built, all structural
|
||||||
|
information like HTML tags and attributes are stripped from the content.
|
||||||
|
While this approach works well for paragraphs and inline formatting, it
|
||||||
|
might be problematic for lists and code blocks. An excerpt:
|
||||||
|
|
||||||
|
```
|
||||||
|
… links , or even code : if (isAwesome) { … } Lists Sometimes you want …
|
||||||
|
```
|
||||||
|
|
||||||
|
- __Context__: for an untrained eye, the result can look like gibberish, as
|
||||||
|
it's not immediately apparent what classifies as text and what as code.
|
||||||
|
Furthermore, it's not clear that `Lists` is a headline as it's merged
|
||||||
|
with the code block before and the paragraph after it.
|
||||||
|
|
||||||
|
- __Punctuation__: inline elements like links that are immediately followed
|
||||||
|
by punctuation are separated by whitespace (see `,` and `:` in the
|
||||||
|
excerpt). This is because all extracted text is joined with a whitespace
|
||||||
|
character during the construction of the search index.
|
||||||
|
|
||||||
|
It's not difficult to see that it can be quite challenging to implement a good
|
||||||
|
search experience for theme authors, which is why Material for MkDocs (up to
|
||||||
|
now) did some [monkey patching][9] to be able to render slightly more
|
||||||
|
meaningful search previews.
|
||||||
|
|
||||||
|
### Search worker
|
||||||
|
|
||||||
|
The actual search functionality is implemented as part of a web worker[^1],
|
||||||
|
which creates and manages the [lunr][6] search index. When search is
|
||||||
|
initialized, the following steps are taken:
|
||||||
|
|
||||||
|
[^1]:
|
||||||
|
Prior to [version 5.0][10], search was carried out in the main thread which
|
||||||
|
locked up the browser, rendering it unusable. This problem was first
|
||||||
|
reported in #904 and, after some back and forth, fixed and released in
|
||||||
|
version 5.0.
|
||||||
|
|
||||||
|
1. __Linking sections with pages__: The search index is parsed, and each section
|
||||||
|
is linked to its parent page. The parent page itself is _not indexed_, as it
|
||||||
|
would lead to duplicate results, so only the sections remain. Linking is
|
||||||
|
necessary, as search results are grouped by page.
|
||||||
|
|
||||||
|
2. __Tokenization__: The `title` and `text` values of each section are split
|
||||||
|
into tokens by using the [separator][11] as configured in `mkdocs.yml`.
|
||||||
|
Tokenization itself is carried out by [lunr's default tokenizer][12], which
|
||||||
|
doesn't allow for lookahead or separators spanning multiple characters.
|
||||||
|
|
||||||
|
> Why is this important and a big deal? We will see later how much more we
|
||||||
|
> can achieve with a tokenizer that is capable of separating strings with
|
||||||
|
> lookahead.
|
||||||
|
|
||||||
|
3. __Indexing__: As a final step, each section is indexed. When querying the
|
||||||
|
index, if a search query includes one of the tokens as returned by step 2.,
|
||||||
|
the section is considered to be part of the search result and passed to the
|
||||||
|
main thread.
|
||||||
|
|
||||||
|
Now, that's basically how the search worker operates. Sure, there's a little
|
||||||
|
more magic involved, e.g., search results are [post-processed][13] and
|
||||||
|
[rescored][14] to account for some shortcomings of [lunr][6], but in general,
|
||||||
|
this is how data gets into and out of the index.
|
||||||
|
|
||||||
|
[9]: https://github.com/squidfunk/mkdocs-material/blob/ec7ccd2b2d15dd033740f388912f7be7738feec2/src/assets/javascripts/integrations/search/document/index.ts#L68-L71
|
||||||
|
[10]: https://squidfunk.github.io/mkdocs-material/upgrading/#upgrading-from-4x-to-5x
|
||||||
|
[11]: ../../setup/setting-up-site-search.md#separator
|
||||||
|
[12]: https://github.com/olivernn/lunr.js/blob/aa5a878f62a6bba1e8e5b95714899e17e8150b38/lunr.js#L413-L456
|
||||||
|
[13]: https://github.com/squidfunk/mkdocs-material/blob/ec7ccd2b2d15dd033740f388912f7be7738feec2/src/assets/javascripts/integrations/search/_/index.ts#L249-L272
|
||||||
|
[14]: https://github.com/squidfunk/mkdocs-material/blob/ec7ccd2b2d15dd033740f388912f7be7738feec2/src/assets/javascripts/integrations/search/_/index.ts#L274-L275
|
||||||
|
|
||||||
|
### Search previews
|
||||||
|
|
||||||
|
Users should be able to quickly scan and evaluate the relevance of a search
|
||||||
|
result in the given context, which is why a concise summary with highlighted
|
||||||
|
occurrences of the search terms found is an essential part of a great search
|
||||||
|
experience.
|
||||||
|
|
||||||
|
This is where the current search preview generation falls short, as some of the
|
||||||
|
search previews appear not to include any occurrence of any of the search
|
||||||
|
terms. This was due to the fact that search previews were [truncated after a
|
||||||
|
maximum of 320 characters][15], as can be seen here:
|
||||||
|
|
||||||
|
<figure markdown="1">
|
||||||
|
|
||||||
|
![Search previews][16]
|
||||||
|
|
||||||
|
<figcaption markdown="1">
|
||||||
|
|
||||||
|
The first two results look like they're not relevant, as they don't seem to
|
||||||
|
include the query string the user just searched for. Yet, they are.
|
||||||
|
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
A better solution to this problem has been on the roadmap for a very, very long
|
||||||
|
time, but in order to solve this once and for all, several factors need to be
|
||||||
|
carefully considered:
|
||||||
|
|
||||||
|
1. __Word boundaries__: some themes[^2] for static site generators generate
|
||||||
|
search previews by expanding the text left and right next to an occurrence,
|
||||||
|
stopping at a whitespace character when enough words have been consumed. A
|
||||||
|
preview might look like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
… channels, e.g., or which can be configured via mkdocs.yml …
|
||||||
|
```
|
||||||
|
|
||||||
|
While this may work for languages that use whitespace as a separator
|
||||||
|
between words, it breaks down for languages like Japanese or Chinese[^3],
|
||||||
|
as they have non-whitespace word boundaries and use dedicated segmenters to
|
||||||
|
split strings into tokens.
|
||||||
|
|
||||||
|
[^2]:
|
||||||
|
At the time of writing, [Just the Docs][17] and [Docusaurus][18] use this
|
||||||
|
method for generating search previews. Note that the latter also integrates
|
||||||
|
with Algolia, which is a fully managed server-based solution.
|
||||||
|
|
||||||
|
[^3]:
|
||||||
|
China and Japan are both within the top 5 countries of origin of users of
|
||||||
|
Material for MkDocs.
|
||||||
|
|
||||||
|
[15]: https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/javascripts/templates/search/index.tsx#L90
|
||||||
|
[16]: search-better-faster-smaller/search-preview.png
|
||||||
|
[17]: https://pmarsceill.github.io/just-the-docs/
|
||||||
|
[18]: https://github.com/lelouch77/docusaurus-lunr-search
|
||||||
|
|
||||||
|
2. __Context-awareness__: Although whitespace doesn't work for all languages,
|
||||||
|
one could argue that it could be a good enough solution. Unfortunately, this
|
||||||
|
is not necessarily true for code blocks, as the removal of whitespace might
|
||||||
|
change meaning in some languages.
|
||||||
|
|
||||||
|
3. __Structure__: Preserving structural information is not a must, but
|
||||||
|
apparently beneficial to build more meaningful search previews which allow
|
||||||
|
for a quick evaluation of relevance. If a word occurrence is part of a code
|
||||||
|
block, it should be rendered as a code block.
|
||||||
|
|
||||||
|
## What's new?
|
||||||
|
|
||||||
|
After we built a solid understanding of the problem space and before we dive
|
||||||
|
into the internals of our new search implementation to see which of the
|
||||||
|
problems it already solves, a quick overview of what features and improvements
|
||||||
|
it brings:
|
||||||
|
|
||||||
|
- __Better__: support for [rich search previews][19], preserving the structural
|
||||||
|
information of code blocks, inline code, and lists, so they are rendered
|
||||||
|
as-is, as well as [lookahead tokenization][20],
|
||||||
|
[more accurate highlighting][21], and improved stability of typeahead. Also,
|
||||||
|
a [slightly better UX][22].
|
||||||
|
- __Faster__ and __smaller__: significant decrease in search index size of up
|
||||||
|
to 48% due to improved extraction and construction techniques, resulting in a
|
||||||
|
search experience that is up to 95% faster, which is particularly helpful for
|
||||||
|
large documentation projects.
|
||||||
|
|
||||||
|
_Note that our new search implementation is currently 'Insiders only', which
|
||||||
|
means that it is reserved for sponsors because it's those sponsors that make
|
||||||
|
features like this possible._
|
||||||
|
|
||||||
|
[:octicons-heart-fill-24:{ .mdx-heart } I want to become a sponsor](../../insiders/index.md){ .md-button .md-button--primary }
|
||||||
|
|
||||||
|
[19]: #rich-search-previews
|
||||||
|
[20]: #tokenizer-lookahead
|
||||||
|
[21]: #accurate-highlighting
|
||||||
|
[22]: #user-interface
|
||||||
|
|
||||||
|
### Rich search previews
|
||||||
|
|
||||||
|
As we rebuilt the search plugin from scratch, we reworked the construction of
|
||||||
|
the search index to preserve the structural information of code blocks, inline
|
||||||
|
code, as well as unordered and ordered lists. Using the example from the
|
||||||
|
[search index][23] section, here's how it looks:
|
||||||
|
|
||||||
|
=== "Now"
|
||||||
|
|
||||||
|
![Search preview now][24]
|
||||||
|
|
||||||
|
=== "Before"
|
||||||
|
|
||||||
|
![Search preview before][25]
|
||||||
|
|
||||||
|
Now, __code blocks are first-class citizens of search previews__, and even
|
||||||
|
inline code formatting is preserved. Let's take a look at the new structure of
|
||||||
|
the search index to understand why:
|
||||||
|
|
||||||
|
??? example "Expand to inspect search index"
|
||||||
|
|
||||||
|
=== "Now"
|
||||||
|
|
||||||
|
``` json
|
||||||
|
{
|
||||||
|
...
|
||||||
|
"docs": [
|
||||||
|
{
|
||||||
|
"location": "page/",
|
||||||
|
"title": "Example",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"location": "page/#text",
|
||||||
|
"title": "Text",
|
||||||
|
"text": "<p>It's very easy to make some words bold and other words italic with Markdown. You can even add links, or even <code>code</code>:</p> <pre><code>if (isAwesome){\n return true\n}\n</code></pre>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"location": "page/#lists",
|
||||||
|
"title": "Lists",
|
||||||
|
"text": "<p>Sometimes you want numbered lists:</p> <ol> <li>One</li> <li>Two</li> <li>Three</li> </ol> <p>Sometimes you want bullet points:</p> <ul> <li>Start a line with a star</li> <li>Profit!</li> </ul>"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Before"
|
||||||
|
|
||||||
|
``` json
|
||||||
|
{
|
||||||
|
...
|
||||||
|
"docs": [
|
||||||
|
{
|
||||||
|
"location": "page/",
|
||||||
|
"title": "Example",
|
||||||
|
"text": "Example Text It's very easy to make some words bold and other words italic with Markdown. You can even add links , or even code : if (isAwesome) { return true } Lists Sometimes you want numbered lists: One Two Three Sometimes you want bullet points: Start a line with a star Profit!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"location": "page/#example",
|
||||||
|
"title": "Example",
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"location": "page/#text",
|
||||||
|
"title": "Text",
|
||||||
|
"text": "It's very easy to make some words bold and other words italic with Markdown. You can even add links , or even code : if (isAwesome) { return true }"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"location": "page/#lists",
|
||||||
|
"title": "Lists",
|
||||||
|
"text": "Sometimes you want numbered lists: One Two Three Sometimes you want bullet points: Start a line with a star Profit!"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If we inspect the search index again, we can see how the situation improved:
|
||||||
|
|
||||||
|
1. __Content is included only once__: the search index does not include the
|
||||||
|
content of the page twice, as only the sections of a page are part of the
|
||||||
|
search index. This leads to a significant reduction in size, fewer bytes to
|
||||||
|
transfer, and a smaller search index.
|
||||||
|
|
||||||
|
2. __Some structure is preserved__: each section of the search index includes a
|
||||||
|
small subset of HTML to provide the necessary structure to allow for more
|
||||||
|
sophisticated search previews. Revisiting our example from before, let's
|
||||||
|
look at an excerpt:
|
||||||
|
|
||||||
|
=== "Now"
|
||||||
|
|
||||||
|
``` html
|
||||||
|
… links, or even <code>code</code>:</p> <pre><code>if (isAwesome){ … }\n</code></pre>
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Before"
|
||||||
|
|
||||||
|
```
|
||||||
|
… links , or even code : if (isAwesome) { … }
|
||||||
|
```
|
||||||
|
|
||||||
|
The punctuation issue is gone, as no additional whitespace is inserted, and
|
||||||
|
the preserved markup yields additional context to make scanning search
|
||||||
|
results more effective.
|
||||||
|
|
||||||
|
On to the next step in the process: __tokenization__.
|
||||||
|
|
||||||
|
[23]: #search-index
|
||||||
|
[24]: search-better-faster-smaller/search-preview-now.png
|
||||||
|
[25]: search-better-faster-smaller/search-preview-before.png
|
||||||
|
|
||||||
|
### Tokenizer lookahead
|
||||||
|
|
||||||
|
The [default tokenizer][12] of [lunr][6] uses a regular expression to split a
|
||||||
|
given string by matching each character against the [separator][11] as defined
|
||||||
|
in `mkdocs.yml`. This doesn't allow for more complex separators based on
|
||||||
|
lookahead or multiple characters.
|
||||||
|
|
||||||
|
Fortunately, __our new search implementation provides an advanced tokenizer__
|
||||||
|
that doesn't have these shortcomings and supports more complex regular
|
||||||
|
expressions. As a result, Material for MkDocs just changed its own separator
|
||||||
|
configuration to the following value:
|
||||||
|
|
||||||
|
```
|
||||||
|
[\s\-,:!=\[\]()"/]+|(?!\b)(?=[A-Z][a-z])|\.(?!\d)|&[lg]t;
|
||||||
|
```
|
||||||
|
|
||||||
|
While the first part up to the first `|` contains a list of single control
|
||||||
|
characters at which the string should be split, the following three sections
|
||||||
|
explain the remainder of the regular expression.[^4]
|
||||||
|
|
||||||
|
[^4]:
|
||||||
|
As a fun fact: the [separator default value][26] of the search plugin being
|
||||||
|
`[\s\-]+` always has been kind of irritating, as it suggests that multiple
|
||||||
|
characters can be considered being a separator. However, the `+` is
|
||||||
|
completely irrelevant, as regular expression groups involving multiple
|
||||||
|
characters were never supported by [lunr's default tokenizer][12].
|
||||||
|
|
||||||
|
[26]: https://www.mkdocs.org/user-guide/configuration/#separator
|
||||||
|
|
||||||
|
#### Case changes
|
||||||
|
|
||||||
|
Many programming languages use `PascalCase` or `camelCase` naming conventions.
|
||||||
|
When a user searches for the term `case`, it's quite natural to expect for
|
||||||
|
`PascalCase` and `camelCase` to show up. By adding the following match group to
|
||||||
|
the separator, this can now be achieved with ease:
|
||||||
|
|
||||||
|
```
|
||||||
|
(?!\b)(?=[A-Z][a-z])
|
||||||
|
```
|
||||||
|
|
||||||
|
This regular expression is a combination of a negative lookahead (`\b`, i.e.,
|
||||||
|
not a word boundary) and a positive lookahead (`[A-Z][a-z]`, i.e., an uppercase
|
||||||
|
character followed by a lowercase character), and has the following behavior:
|
||||||
|
|
||||||
|
- `PascalCase` :octicons-arrow-right-24: `Pascal`, `Case`
|
||||||
|
- `camelCase` :octicons-arrow-right-24: `camel`, `Case`
|
||||||
|
- `UPPERCASE` :octicons-arrow-right-24: `UPPERCASE`
|
||||||
|
|
||||||
|
Searching for [:octicons-search-24: searchHighlight][27] now brings up the
|
||||||
|
section discussing the `search.highlight` feature flag, which also demonstrates
|
||||||
|
that this even works for search queries now![^5]
|
||||||
|
|
||||||
|
[^5]:
|
||||||
|
Previously, the search query was not correctly tokenized due to the way
|
||||||
|
[lunr][6] treats wildcards, as it disables the pipeline for search terms
|
||||||
|
that contain wildcards. In order to provide a good typeahead experience,
|
||||||
|
Material for MkDocs adds wildcards to the end of each search term not
|
||||||
|
explicitly preceded with `+` or `-`, effectively disabling tokenization.
|
||||||
|
|
||||||
|
[27]: ?q=searchHighlight
|
||||||
|
|
||||||
|
#### Version numbers
|
||||||
|
|
||||||
|
Indexing version numbers is another problem that can be solved with a small
|
||||||
|
lookahead. Usually, `.` should be considered a separator to split words like
|
||||||
|
`search.highlight`. However, splitting version numbers at `.` will make them
|
||||||
|
undiscoverable. Thus, the following expression:
|
||||||
|
|
||||||
|
```
|
||||||
|
\.(?!\d)
|
||||||
|
```
|
||||||
|
|
||||||
|
This regular expression matches a `.` only if not immediately followed by a
|
||||||
|
digit `\d`, which leaves version numbers discoverable. Searching for
|
||||||
|
[:octicons-search-24: 7.2.6][28] brings up the [7.2.6][29] release notes.
|
||||||
|
|
||||||
|
[28]: ?q=7.2.6
|
||||||
|
[29]: ../../changelog.md#726-_-september-1-2021
|
||||||
|
|
||||||
|
#### HTML/XML tags
|
||||||
|
|
||||||
|
If your documentation includes HTML/XML code examples, you may want to allow
|
||||||
|
users to find specific tag names. Unfortunately, the `<` and `>` control
|
||||||
|
characters are encoded in code blocks as `<` and `>`. Now, adding the
|
||||||
|
following expression to the separator allows for just that:
|
||||||
|
|
||||||
|
```
|
||||||
|
&[lg]t;
|
||||||
|
```
|
||||||
|
|
||||||
|
Searching for [:octicons-search-24: custom search worker script][30] brings up
|
||||||
|
the section on [custom search][31] and matches the `script` tag among the other
|
||||||
|
search terms discovered.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_We've only just begun to scratch the surface of the new possibilities
|
||||||
|
tokenizer lookahead brings. If you found other useful expressions, you're
|
||||||
|
invited to share them in the comment section._
|
||||||
|
|
||||||
|
[30]: ?q=custom+search+worker+script
|
||||||
|
[31]: ../../setup/setting-up-site-search.md#custom-search
|
||||||
|
|
||||||
|
### Accurate highlighting
|
||||||
|
|
||||||
|
Highlighting is the last step in the process of search and involves the
|
||||||
|
highlighting of all search term occurrences in a given search result. For a
|
||||||
|
long time, highlighting was implemented through dynamically generated
|
||||||
|
[regular expressions][32].[^6]
|
||||||
|
|
||||||
|
This approach has some problems with non-whitespace languages like Japanese or
|
||||||
|
Chinese[^3] since it only works if the highlighted term is at a word boundary.
|
||||||
|
However, Asian languages are tokenized using a [dedicated segmenter][33], which
|
||||||
|
cannot be modeled with regular expressions.
|
||||||
|
|
||||||
|
[^6]:
|
||||||
|
Using the separator as defined in `mkdocs.yml`, a regular expression was
|
||||||
|
constructed that was trying to mimic the tokenizer. As an example, the
|
||||||
|
search query `search highlight` was transformed into the rather cumbersome
|
||||||
|
regular expression `(^|<separator>)(search|highlight)`, which only matches
|
||||||
|
at word boundaries.
|
||||||
|
|
||||||
|
Now, as a direct result of the [new tokenization approach][34], __our new
|
||||||
|
search implementation uses token positions for highlighting__, making it
|
||||||
|
exactly as powerful as tokenization:
|
||||||
|
|
||||||
|
1. __Word boundaries__: as the new highlighter uses token positions, word
|
||||||
|
boundaries are equal to token boundaries. This means that more complex cases
|
||||||
|
of tokenization (e.g., [case changes][35], [version numbers][36], [HTML/XML
|
||||||
|
tags][37]), are now all highlighted accurately.
|
||||||
|
|
||||||
|
2. __Context-awareness__: as the new search index preserves some of the
|
||||||
|
structural information of the original document, the content of a section is
|
||||||
|
now divided into separate content blocks – paragraphs, code blocks, and
|
||||||
|
lists.
|
||||||
|
|
||||||
|
Now, only the content blocks that actually contain occurrences of one of
|
||||||
|
the search terms are considered for inclusion into the search preview. If a
|
||||||
|
term only occurs in a code block, it's the code block that gets rendered,
|
||||||
|
see, for example, the results of [:octicons-search-24: twitter][38].
|
||||||
|
|
||||||
|
[32]: https://github.com/squidfunk/mkdocs-material/blob/ec7ccd2b2d15dd033740f388912f7be7738feec2/src/assets/javascripts/integrations/search/highlighter/index.ts#L61-L91
|
||||||
|
[33]: http://chasen.org/~taku/software/TinySegmenter/
|
||||||
|
[34]: #tokenizer-lookahead
|
||||||
|
[35]: #case-changes
|
||||||
|
[36]: #version-numbers
|
||||||
|
[37]: #htmlxml-tags
|
||||||
|
[38]: ?q=twitter
|
||||||
|
|
||||||
|
### Benchmarks
|
||||||
|
|
||||||
|
We conducted two benchmarks – one with the documentation of Material for MkDocs
|
||||||
|
itself, and one with a very massive corpus of Markdown files with more than
|
||||||
|
800,000 words – a size most documentation projects will likely never
|
||||||
|
reach:
|
||||||
|
|
||||||
|
<figure markdown="1">
|
||||||
|
|
||||||
|
| | Before | Now | Relative |
|
||||||
|
| ----------------------- | -------: | -------------: | -----------: |
|
||||||
|
| __Material for MkDocs__ | | | |
|
||||||
|
| Index size | 573 kB | __335 kB__ | __–42%__ |
|
||||||
|
| Index size (`gzip`) | 105 kB | __78 kB__ | __–27%__ |
|
||||||
|
| Indexing time[^7] | 265 ms | __177 ms__ | __–34%__ |
|
||||||
|
| __KJV Markdown[^8]__ | | | |
|
||||||
|
| Index size | 8.2 MB | __4.4 MB__ | __–47%__ |
|
||||||
|
| Index size (`gzip`) | 2.3 MB | __1.2 MB__ | __–48%__ |
|
||||||
|
| Indexing time | 2,700 ms | __1,390 ms__ | __–48%__ |
|
||||||
|
|
||||||
|
<figcaption>
|
||||||
|
<p>Benchmark results</p>
|
||||||
|
</figcaption>
|
||||||
|
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
[^7]:
|
||||||
|
Smallest value of ten distinct runs.
|
||||||
|
|
||||||
|
[^8]:
|
||||||
|
We agnostically use [KJV Markdown][39] as a tool for testing to learn how
|
||||||
|
Material for MkDocs behaves on large corpora, as it's a very large set of
|
||||||
|
Markdown files with over 800k words.
|
||||||
|
|
||||||
|
The results show that indexing time, which is the time that it takes to set up
|
||||||
|
the search when the page is loaded, has dropped by up to 48%, which means __the
|
||||||
|
new search is up to 95% faster__. This is a significant improvement,
|
||||||
|
particularly relevant for large documentation projects.
|
||||||
|
|
||||||
|
While 1,3s still may sound like a long time, using the new client-side search
|
||||||
|
together with [instant loading][40] only creates the search index on the initial
|
||||||
|
page load. When navigating, the search index is preserved across pages, so the
|
||||||
|
cost does only have to be paid once.
|
||||||
|
|
||||||
|
[39]: https://github.com/arleym/kjv-markdown
|
||||||
|
[40]: ../../setup/setting-up-navigation.md#instant-loading
|
||||||
|
|
||||||
|
### User interface
|
||||||
|
|
||||||
|
Additionally, some small improvements have been made, most prominently the
|
||||||
|
__more results on this page__ button, which now sticks to the top of the search
|
||||||
|
result list when open. This enables the user to jump out of the list more
|
||||||
|
quickly.
|
||||||
|
|
||||||
|
## What's next?
|
||||||
|
|
||||||
|
Our new search implementation is a big improvement to Material for MkDocs. It
|
||||||
|
solves some long-standing issues which needed to be tackled for years. Yet,
|
||||||
|
it's only the start of a search experience that is going to get better and
|
||||||
|
better. Next up:
|
||||||
|
|
||||||
|
- __Context-aware search summarization__: currently, the first two matching
|
||||||
|
content blocks are rendered as a search preview. With the new tokenization
|
||||||
|
technique, we laid the groundwork for more sophisticated shortening and
|
||||||
|
summarization methods, which we're tackling next.
|
||||||
|
|
||||||
|
- __User interface improvements__: as we now gained full control over the
|
||||||
|
search plugin, we can now add meaningful metadata to provide more context and
|
||||||
|
a better experience. We'll explore some of those paths in the future.
|
||||||
|
|
||||||
|
If you've made it this far, thank you for your time and interest in Material
|
||||||
|
for MkDocs! This is the first blog article that I decided to write after a
|
||||||
|
short [Twitter survey][41] made me to. You're invited to [leave a comment][42]
|
||||||
|
to share your experiences with the new search implementation.
|
||||||
|
|
||||||
|
[41]: https://twitter.com/squidfunk/status/1434477478823743488
|
||||||
|
[42]: #__comments
|
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 174 KiB |
BIN
docs/blog/2021/search-better-faster-smaller/search-preview.png
Normal file
After Width: | Height: | Size: 55 KiB |
27
docs/blog/index.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
template: overrides/main.html
|
||||||
|
search:
|
||||||
|
exclude: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Blog
|
||||||
|
|
||||||
|
<h2>Search: better, faster, smaller</h2>
|
||||||
|
|
||||||
|
__This is the story of how we managed to completely rebuild client-side search,
|
||||||
|
delivering a significantly better user experience while making it faster and
|
||||||
|
smaller at the same time.__
|
||||||
|
|
||||||
|
The search of Material for MkDocs is by far one of its best and most-loved
|
||||||
|
assets: multilingual, offline-capable, and most importantly: _all client-side_.
|
||||||
|
It provides a solution to empower the users of your documentation to find what
|
||||||
|
they're searching for instantly without the headache of managing additional
|
||||||
|
servers. However, even though several iterations have been made, there's still
|
||||||
|
some room for improvement, which is why we rebuilt the search plugin and
|
||||||
|
integration from the ground up. This article shines some light on the internals
|
||||||
|
of the new search, why it's much more powerful than the previous version, and
|
||||||
|
what's about to come.
|
||||||
|
|
||||||
|
[Continue reading :octicons-arrow-right-24:][1]{ .md-button }
|
||||||
|
|
||||||
|
[1]: 2021/search-better-faster-smaller.md
|
@ -6,6 +6,41 @@ template: overrides/main.html
|
|||||||
|
|
||||||
## Material for MkDocs
|
## Material for MkDocs
|
||||||
|
|
||||||
|
### 7.3.0 <small>_ September 23, 2021</small>
|
||||||
|
|
||||||
|
- Added support for sticky navigation tabs
|
||||||
|
- Added support for section index pages
|
||||||
|
- Added support for removing generator notice
|
||||||
|
|
||||||
|
### 7.2.8 <small>_ September 20, 2021</small>
|
||||||
|
|
||||||
|
- Fixed #3039: Search modal overlays menu on mobile (7.2.7 regression)
|
||||||
|
|
||||||
|
### 7.2.7 <small>_ September 19, 2021</small>
|
||||||
|
|
||||||
|
- Updated Serbian and Serbo-Croatian translations
|
||||||
|
- Improved appearance of outline on details
|
||||||
|
- Fixed #2934: Scrollbar when header is hidden on some mobile browsers
|
||||||
|
- Fixed #3032: Anchor in details doesn't open on load (7.0.0 regression)
|
||||||
|
- Fixed back-to-top button being focusable when invisible
|
||||||
|
- Fixed broken admonition icons (removed in upstream)
|
||||||
|
|
||||||
|
### 7.2.6 <small>_ September 1, 2021</small>
|
||||||
|
|
||||||
|
- Fixed rendering of `blockquote` elements (7.0.0 regression)
|
||||||
|
- Fixed #2973: Custom search worker setting ignored
|
||||||
|
|
||||||
|
### 7.2.5 <small>_ August 25, 2021</small>
|
||||||
|
|
||||||
|
- Updated Portuguese translations
|
||||||
|
- Fixed execution of RxJS teardown logic (7.2.3 regression)
|
||||||
|
- Fixed #2970: Search results show escaped characters (7.2.2 regression)
|
||||||
|
|
||||||
|
### 7.2.4 <small>_ August 11, 2021</small>
|
||||||
|
|
||||||
|
- Fixed #2926: Version selector not working (7.2.3 regression)
|
||||||
|
- Fixed #2929: Missing CSS class for banner (consistency with Insiders)
|
||||||
|
|
||||||
### 7.2.3 <small>_ August 9, 2021</small>
|
### 7.2.3 <small>_ August 9, 2021</small>
|
||||||
|
|
||||||
- Slight facelift of data tables, now closer to Material Design
|
- Slight facelift of data tables, now closer to Material Design
|
||||||
|
@ -79,9 +79,22 @@ The following plugins are bundled with the Docker image:
|
|||||||
|
|
||||||
The new image can be used exactly like the official image.
|
The new image can be used exactly like the official image.
|
||||||
|
|
||||||
|
!!! info ":material-apple: Apple Silicon (M1) and :fontawesome-brands-raspberry-pi: Raspberry Pi"
|
||||||
|
|
||||||
|
The official Docker image is only available for `linux/amd64`. We recommend
|
||||||
|
the [third-party image][11] by @afritzler if you want to run Material for
|
||||||
|
MkDocs via Docker on `arm64` or `armv7`, as it is automatically built on
|
||||||
|
every release:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker pull ghcr.io/afritzler/mkdocs-material
|
||||||
|
```
|
||||||
|
|
||||||
|
[11]: https://github.com/afritzler/mkdocs-material
|
||||||
|
|
||||||
### with git
|
### with git
|
||||||
|
|
||||||
Material for MkDocs can be directly used from [GitHub][11] by cloning the
|
Material for MkDocs can be directly used from [GitHub][12] by cloning the
|
||||||
repository into a subfolder of your project root which might be useful if you
|
repository into a subfolder of your project root which might be useful if you
|
||||||
want to use the very latest version:
|
want to use the very latest version:
|
||||||
|
|
||||||
@ -96,4 +109,4 @@ from `git`, you must install all required dependencies yourself:
|
|||||||
pip install -r mkdocs-material/requirements.txt
|
pip install -r mkdocs-material/requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
[11]: https://github.com/squidfunk/mkdocs-material
|
[12]: https://github.com/squidfunk/mkdocs-material
|
||||||
|
@ -6,6 +6,35 @@ template: overrides/main.html
|
|||||||
|
|
||||||
## Material for MkDocs Insiders
|
## Material for MkDocs Insiders
|
||||||
|
|
||||||
|
### 3.0.1 <small>_ September 19, 2021</small>
|
||||||
|
|
||||||
|
- Added support for using literal `h1-6` tags for search plugin
|
||||||
|
- Fixed search plugin breaking on void elements without slashes
|
||||||
|
- Fixed search plugin filtering link contents from headlines
|
||||||
|
- Fixed search plugin handling of multiple `h1` headlines
|
||||||
|
- Fixed search plugin handling of missing `h1` headlines
|
||||||
|
|
||||||
|
### 3.0.0 <small>_ September 13, 2021</small>
|
||||||
|
|
||||||
|
- Rewrite of MkDocs' search plugin
|
||||||
|
- Added support for rich search previews
|
||||||
|
- Added support for tokenizer with lookahead
|
||||||
|
- Improved search indexing performance (twice as fast)
|
||||||
|
- Improved search highlighting
|
||||||
|
|
||||||
|
### 2.13.3 <small>_ September 1, 2021</small>
|
||||||
|
|
||||||
|
- Added support for disabling social card generation
|
||||||
|
|
||||||
|
### 2.13.2 <small>_ August 25, 2021</small>
|
||||||
|
|
||||||
|
- Fixed #2965: Social plugin error when primary color is not defined
|
||||||
|
|
||||||
|
### 2.13.1 <small>_ August 21, 2021</small>
|
||||||
|
|
||||||
|
- Fixed #2948: Social cards are not cached
|
||||||
|
- Fixed #2953: Mermaid.js diagrams can't be centered anymore
|
||||||
|
|
||||||
### 2.13.0 <small>_ August 7, 2021</small>
|
### 2.13.0 <small>_ August 7, 2021</small>
|
||||||
|
|
||||||
- Added support for custom colors in social cards
|
- Added support for custom colors in social cards
|
||||||
|
@ -98,6 +98,26 @@ You can cancel your sponsorship anytime.[^4]
|
|||||||
|
|
||||||
[:octicons-heart-fill-24:{ .mdx-heart } Join our <span class="mdx-sponsorship-count" data-mdx-component="sponsorship-count"></span> awesome sponsors][5]{ .md-button .md-button--primary .mdx-sponsorship-button }
|
[:octicons-heart-fill-24:{ .mdx-heart } Join our <span class="mdx-sponsorship-count" data-mdx-component="sponsorship-count"></span> awesome sponsors][5]{ .md-button .md-button--primary .mdx-sponsorship-button }
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div class="mdx-premium" markdown="1">
|
||||||
|
|
||||||
|
**Special thanks** to our **premium sponsors**:
|
||||||
|
|
||||||
|
[![Hummingbot]](https://hummingbot.io/){ target=_blank }
|
||||||
|
|
||||||
|
[![Basler]](https://docs.baslerweb.com/){ target=_blank }
|
||||||
|
|
||||||
|
[![Cirrus CI]](https://cirrus-ci.org/){ target=_blank }
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
[Hummingbot]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/hummingbot.png
|
||||||
|
[Basler]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/basler.png
|
||||||
|
[Cirrus CI]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/cirrus-ci.svg
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
<div class="mdx-sponsorship" data-mdx-component="sponsorship" hidden>
|
<div class="mdx-sponsorship" data-mdx-component="sponsorship" hidden>
|
||||||
<div class="mdx-sponsorship__list"></div>
|
<div class="mdx-sponsorship__list"></div>
|
||||||
<small>
|
<small>
|
||||||
@ -117,9 +137,13 @@ The following features are currently exclusively available to sponsors:
|
|||||||
|
|
||||||
<div class="mdx-columns" markdown="1">
|
<div class="mdx-columns" markdown="1">
|
||||||
|
|
||||||
- [x] [Social cards :material-new-box:][34]
|
- [x] [Brand new search plugin :material-new-box:][35]
|
||||||
- [x] [Cookie consent :material-new-box:][33]
|
- [x] [Rich search previews :material-new-box:][36]
|
||||||
- [x] [Linking content tabs :material-new-box:][32]
|
- [x] [Tokenizer with lookahead :material-new-box:][37]
|
||||||
|
- [x] [Advanced search highlighting :material-new-box:][38]
|
||||||
|
- [x] [Social cards][34]
|
||||||
|
- [x] [Cookie consent][33]
|
||||||
|
- [x] [Linking content tabs][32]
|
||||||
- [x] [Boosting pages in search][30]
|
- [x] [Boosting pages in search][30]
|
||||||
- [x] [Tags (with search integration)][29]
|
- [x] [Tags (with search integration)][29]
|
||||||
- [x] [Stay on page when switching versions][28]
|
- [x] [Stay on page when switching versions][28]
|
||||||
@ -127,10 +151,7 @@ The following features are currently exclusively available to sponsors:
|
|||||||
- [x] [Custom admonition icons][31]
|
- [x] [Custom admonition icons][31]
|
||||||
- [x] [Code block annotations][25]
|
- [x] [Code block annotations][25]
|
||||||
- [x] [Anchor tracking ][24]
|
- [x] [Anchor tracking ][24]
|
||||||
- [x] [Section index pages][22]
|
|
||||||
- [x] [Sticky navigation tabs][21]
|
|
||||||
- [x] [Mermaid.js integration][27]
|
- [x] [Mermaid.js integration][27]
|
||||||
- [x] [Remove generator notice][23]
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -148,16 +169,6 @@ Following is a list of funding goals. When a funding goal is hit, the features
|
|||||||
that are tied to it are merged back into Material for MkDocs and released to
|
that are tied to it are merged back into Material for MkDocs and released to
|
||||||
the public for general availability.
|
the public for general availability.
|
||||||
|
|
||||||
#### $ 3,000 – Caribbean Red
|
|
||||||
|
|
||||||
- [x] [Sticky navigation tabs][21]
|
|
||||||
- [x] [Section index pages][22]
|
|
||||||
- [x] [Remove generator notice][23]
|
|
||||||
|
|
||||||
[21]: ../setup/setting-up-navigation.md#sticky-navigation-tabs
|
|
||||||
[22]: ../setup/setting-up-navigation.md#section-index-pages
|
|
||||||
[23]: ../setup/setting-up-the-footer.md#remove-generator
|
|
||||||
|
|
||||||
#### $ 4,000 – Ghost Pepper
|
#### $ 4,000 – Ghost Pepper
|
||||||
|
|
||||||
- [x] [Anchor tracking][24]
|
- [x] [Anchor tracking][24]
|
||||||
@ -191,8 +202,8 @@ the public for general availability.
|
|||||||
#### $ 7,000 – Royal Gold
|
#### $ 7,000 – Royal Gold
|
||||||
|
|
||||||
- [x] [Cookie consent][33]
|
- [x] [Cookie consent][33]
|
||||||
- [ ] Improved search result summaries
|
- [ ] Exclude pages from search
|
||||||
- [ ] List of last searches
|
- [ ] Link cards
|
||||||
|
|
||||||
[33]: ../setup/setting-up-site-analytics.md#cookie-consent
|
[33]: ../setup/setting-up-site-analytics.md#cookie-consent
|
||||||
|
|
||||||
@ -204,18 +215,30 @@ the public for general availability.
|
|||||||
|
|
||||||
[34]: ../setup/setting-up-social-cards.md
|
[34]: ../setup/setting-up-social-cards.md
|
||||||
|
|
||||||
#### Future
|
#### $ 10,000 – Carolina Reaper
|
||||||
|
|
||||||
- [ ] [Material for MkDocs Live Edit][35]
|
- [x] [Brand new search plugin][35]
|
||||||
- [ ] New layouts and styles
|
- [x] [Rich search previews][36]
|
||||||
- [ ] Code block palette toggle
|
- [x] [Tokenizer with lookahead][37]
|
||||||
- [ ] Native lightbox integration
|
- [x] [Advanced search highlighting][38]
|
||||||
- [ ] Table of contents auto-collapse
|
|
||||||
|
|
||||||
[35]: https://twitter.com/squidfunk/status/1338252230265360391
|
[35]: ../blog/2021/search-better-faster-smaller.md
|
||||||
|
[36]: ../blog/2021/search-better-faster-smaller.md#rich-search-previews
|
||||||
|
[37]: ../blog/2021/search-better-faster-smaller.md#tokenizer-lookahead
|
||||||
|
[38]: ../blog/2021/search-better-faster-smaller.md#accurate-highlighting
|
||||||
|
|
||||||
### Goals completed
|
### Goals completed
|
||||||
|
|
||||||
|
#### $ 3,000 – Caribbean Red
|
||||||
|
|
||||||
|
- [x] [Sticky navigation tabs][21]
|
||||||
|
- [x] [Section index pages][22]
|
||||||
|
- [x] [Remove generator notice][23]
|
||||||
|
|
||||||
|
[21]: ../setup/setting-up-navigation.md#sticky-navigation-tabs
|
||||||
|
[22]: ../setup/setting-up-navigation.md#section-index-pages
|
||||||
|
[23]: ../setup/setting-up-the-footer.md#remove-generator
|
||||||
|
|
||||||
#### $ 2,500 – Biquinho Vermelho
|
#### $ 2,500 – Biquinho Vermelho
|
||||||
|
|
||||||
- [x] [Search suggestions][18]
|
- [x] [Search suggestions][18]
|
||||||
@ -277,17 +300,17 @@ implemented behind feature flags; all configuration changes are
|
|||||||
backward-compatible. This means that your users will be able to build the
|
backward-compatible. This means that your users will be able to build the
|
||||||
documentation locally with Material for MkDocs and when they push their changes,
|
documentation locally with Material for MkDocs and when they push their changes,
|
||||||
it can be built with Insiders (e.g. as part of GitHub Actions). Thus, it's
|
it can be built with Insiders (e.g. as part of GitHub Actions). Thus, it's
|
||||||
recommended to [install Insiders][36] only in CI, as you don't want to expose
|
recommended to [install Insiders][39] only in CI, as you don't want to expose
|
||||||
your `GH_TOKEN` to users.
|
your `GH_TOKEN` to users.
|
||||||
|
|
||||||
[36]: ../publishing-your-site.md#github-pages
|
[39]: ../publishing-your-site.md#github-pages
|
||||||
|
|
||||||
### Payment
|
### Payment
|
||||||
|
|
||||||
_We don't want to pay for sponsorship every month. Are there any other options?_
|
_We don't want to pay for sponsorship every month. Are there any other options?_
|
||||||
|
|
||||||
Yes. You can sponsor on a yearly basis by [switching your GitHub account to a
|
Yes. You can sponsor on a yearly basis by [switching your GitHub account to a
|
||||||
yearly billing cycle][37]. If for some reason you cannot do that, you could
|
yearly billing cycle][40]. If for some reason you cannot do that, you could
|
||||||
also create a dedicated GitHub account with a yearly billing cycle, which you
|
also create a dedicated GitHub account with a yearly billing cycle, which you
|
||||||
only use for sponsoring (some sponsors already do that).
|
only use for sponsoring (some sponsors already do that).
|
||||||
|
|
||||||
@ -295,7 +318,7 @@ If you have any problems or further questions, don't hesitate to contact me at
|
|||||||
sponsors@squidfunk.com. Note that one-time payments are not eligible for
|
sponsors@squidfunk.com. Note that one-time payments are not eligible for
|
||||||
Insiders, but of course, very appreciated.
|
Insiders, but of course, very appreciated.
|
||||||
|
|
||||||
[37]: https://docs.github.com/en/github/setting-up-and-managing-billing-and-payments-on-github/changing-the-duration-of-your-billing-cycle
|
[40]: https://docs.github.com/en/github/setting-up-and-managing-billing-and-payments-on-github/changing-the-duration-of-your-billing-cycle
|
||||||
|
|
||||||
### Terms
|
### Terms
|
||||||
|
|
||||||
@ -304,7 +327,7 @@ commercial project. Can we use Insiders under the same terms and conditions?_
|
|||||||
|
|
||||||
Yes. Whether you're an individual or a company, you may use _Material for MkDocs
|
Yes. Whether you're an individual or a company, you may use _Material for MkDocs
|
||||||
Insiders_ precisely under the same terms as Material for MkDocs, which are given
|
Insiders_ precisely under the same terms as Material for MkDocs, which are given
|
||||||
by the [MIT license][38]. However, we kindly ask you to respect the following
|
by the [MIT license][41]. However, we kindly ask you to respect the following
|
||||||
guidelines:
|
guidelines:
|
||||||
|
|
||||||
- Please __don't distribute the source code__ of Insiders. You may freely use
|
- Please __don't distribute the source code__ of Insiders. You may freely use
|
||||||
@ -315,7 +338,7 @@ guidelines:
|
|||||||
- If you cancel your subscription, you're removed as a collaborator and will
|
- If you cancel your subscription, you're removed as a collaborator and will
|
||||||
miss out on future updates of Insiders. However, you may __use the latest
|
miss out on future updates of Insiders. However, you may __use the latest
|
||||||
version__ that's available to you __as long as you like__. Just remember that
|
version__ that's available to you __as long as you like__. Just remember that
|
||||||
[GitHub deletes private forks][39].
|
[GitHub deletes private forks][42].
|
||||||
|
|
||||||
[38]: ../license.md
|
[41]: ../license.md
|
||||||
[39]: https://docs.github.com/en/github/setting-up-and-managing-your-github-user-account/removing-a-collaborator-from-a-personal-repository
|
[42]: https://docs.github.com/en/github/setting-up-and-managing-your-github-user-account/removing-a-collaborator-from-a-personal-repository
|
||||||
|
@ -76,7 +76,7 @@ and embed them into any other file.
|
|||||||
|
|
||||||
_Example_:
|
_Example_:
|
||||||
|
|
||||||
=== "docs/page.md"
|
=== "`docs/page.md`"
|
||||||
|
|
||||||
```` markdown
|
```` markdown
|
||||||
The HTML specification is maintained by the W3C.
|
The HTML specification is maintained by the W3C.
|
||||||
@ -84,7 +84,7 @@ _Example_:
|
|||||||
--8<-- "includes/abbreviations.md"
|
--8<-- "includes/abbreviations.md"
|
||||||
````
|
````
|
||||||
|
|
||||||
=== "includes/abbreviations.md"
|
=== "`includes/abbreviations.md`"
|
||||||
|
|
||||||
```` markdown
|
```` markdown
|
||||||
*[HTML]: Hyper Text Markup Language
|
*[HTML]: Hyper Text Markup Language
|
||||||
|
@ -53,7 +53,7 @@ configuring syntax highlighting of code blocks:
|
|||||||
respective stylesheet and JavaScript from a [CDN][9] serving
|
respective stylesheet and JavaScript from a [CDN][9] serving
|
||||||
Highlight.js in `mkdocs.yml`:
|
Highlight.js in `mkdocs.yml`:
|
||||||
|
|
||||||
=== "docs/javascripts/config.js"
|
=== "`docs/javascripts/config.js`"
|
||||||
|
|
||||||
``` js
|
``` js
|
||||||
document$.subscribe(() => {
|
document$.subscribe(() => {
|
||||||
@ -61,7 +61,7 @@ configuring syntax highlighting of code blocks:
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "mkdocs.yml"
|
=== "`mkdocs.yml`"
|
||||||
|
|
||||||
``` yaml
|
``` yaml
|
||||||
extra_javascript:
|
extra_javascript:
|
||||||
|
@ -120,7 +120,7 @@ If you want to make data tables sortable, you can add [tablesort][5], which is
|
|||||||
natively integrated with Material for MkDocs and will also work with [instant
|
natively integrated with Material for MkDocs and will also work with [instant
|
||||||
loading][6] via [additional JavaScript][2]:
|
loading][6] via [additional JavaScript][2]:
|
||||||
|
|
||||||
=== "docs/javascripts/tables.js"
|
=== "`docs/javascripts/tables.js`"
|
||||||
|
|
||||||
``` js
|
``` js
|
||||||
document$.subscribe(function() {
|
document$.subscribe(function() {
|
||||||
@ -131,7 +131,7 @@ loading][6] via [additional JavaScript][2]:
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "mkdocs.yml"
|
=== "`mkdocs.yml`"
|
||||||
|
|
||||||
``` yaml
|
``` yaml
|
||||||
extra_javascript:
|
extra_javascript:
|
||||||
|
@ -110,19 +110,19 @@ _Example_:
|
|||||||
```
|
```
|
||||||
- :material-account-circle: – `.icons/material/account-circle.svg`
|
- :material-account-circle: – `.icons/material/account-circle.svg`
|
||||||
- :fontawesome-regular-laugh-wink: – `.icons/fontawesome/regular/laugh-wink.svg`
|
- :fontawesome-regular-laugh-wink: – `.icons/fontawesome/regular/laugh-wink.svg`
|
||||||
- :octicons-repo-push-24: – `.icons/octicons/repo-push-24.svg`
|
- :octicons-repo-push-16: – `.icons/octicons/repo-push-16.svg`
|
||||||
```
|
```
|
||||||
|
|
||||||
_Result_:
|
_Result_:
|
||||||
|
|
||||||
- :material-account-circle: – [`.icons/material/account-circle.svg`][14]
|
- :material-account-circle: – [`.icons/material/account-circle.svg`][14]
|
||||||
- :fontawesome-regular-laugh-wink: – [`.icons/fontawesome/regular/laugh-wink.svg`][15]
|
- :fontawesome-regular-laugh-wink: – [`.icons/fontawesome/regular/laugh-wink.svg`][15]
|
||||||
- :octicons-repo-push-24: – [`.icons/octicons/repo-push-24.svg`][16]
|
- :octicons-repo-push-16: – [`.icons/octicons/repo-push-16.svg`][16]
|
||||||
|
|
||||||
[13]: #emoji
|
[13]: #emoji
|
||||||
[14]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/material/.icons/material/account-circle.svg
|
[14]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/material/.icons/material/account-circle.svg
|
||||||
[15]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/material/.icons/fontawesome/regular/laugh-wink.svg
|
[15]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/material/.icons/fontawesome/regular/laugh-wink.svg
|
||||||
[16]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/material/.icons/octicons/repo-push-24.svg
|
[16]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/material/.icons/octicons/repo-push-16.svg
|
||||||
|
|
||||||
#### with colors
|
#### with colors
|
||||||
|
|
||||||
|
@ -85,6 +85,25 @@ extra:
|
|||||||
|
|
||||||
## Customization
|
## Customization
|
||||||
|
|
||||||
|
### Displaying the metadata
|
||||||
|
|
||||||
|
Sometimes it's useful to be able to display the medatada in the page body, e.g.
|
||||||
|
print the name of the page author at the bottom of the page. To achieve that,
|
||||||
|
you can [extend the theme][7] by adding the following contents to `main.html`:
|
||||||
|
|
||||||
|
``` html
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{{ super() }}
|
||||||
|
{% if page and page.meta and page.meta.author %}
|
||||||
|
<p><small>Author: {{ page.meta.author }}</small></p>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
```
|
||||||
|
|
||||||
|
[7]: ../customization.md#extending-the-theme
|
||||||
|
|
||||||
### Custom meta tags
|
### Custom meta tags
|
||||||
|
|
||||||
#### on all pages
|
#### on all pages
|
||||||
@ -94,12 +113,13 @@ In order to add custom `meta` tags to your document, you can [extend the theme
|
|||||||
policies for search engines:
|
policies for search engines:
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block extrahead %}
|
{% block extrahead %}
|
||||||
<meta property="robots" content="noindex, nofollow" />
|
<meta property="robots" content="noindex, nofollow" />
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
```
|
```
|
||||||
|
|
||||||
[7]: ../customization.md#extending-the-theme
|
|
||||||
[8]: ../customization.md#overriding-blocks-recommended
|
[8]: ../customization.md#overriding-blocks-recommended
|
||||||
|
|
||||||
#### on a single page
|
#### on a single page
|
||||||
@ -109,6 +129,8 @@ values for different pages, you can use the `page.meta` object inside your
|
|||||||
template override, e.g.:
|
template override, e.g.:
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block extrahead %}
|
{% block extrahead %}
|
||||||
{% if page and page.meta and page.meta.robots %}
|
{% if page and page.meta and page.meta.robots %}
|
||||||
<meta property="robots" content="{{ page.meta.robots }}" />
|
<meta property="robots" content="{{ page.meta.robots }}" />
|
||||||
|
@ -70,13 +70,13 @@ storage and management.
|
|||||||
|
|
||||||
_Example_:
|
_Example_:
|
||||||
|
|
||||||
=== "docs/page.md"
|
=== "`docs/page.md`"
|
||||||
|
|
||||||
```` markdown
|
```` markdown
|
||||||
The unit price is {{ unit.price }}
|
The unit price is {{ unit.price }}
|
||||||
````
|
````
|
||||||
|
|
||||||
=== "mkdocs.yml"
|
=== "`mkdocs.yml`"
|
||||||
|
|
||||||
``` yaml
|
``` yaml
|
||||||
extra:
|
extra:
|
||||||
@ -109,13 +109,13 @@ In your Markdown file, include snippets with Jinja's [`include`][4] function:
|
|||||||
|
|
||||||
_Example_:
|
_Example_:
|
||||||
|
|
||||||
=== "snippets/definitions.md"
|
=== "`snippets/definitions.md`"
|
||||||
|
|
||||||
``` markdown
|
``` markdown
|
||||||
The unit price is {{ page.meta.unit.price }}
|
The unit price is {{ page.meta.unit.price }}
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "docs/page-1.md"
|
=== "`docs/page-1.md`"
|
||||||
|
|
||||||
``` markdown
|
``` markdown
|
||||||
---
|
---
|
||||||
@ -126,7 +126,7 @@ _Example_:
|
|||||||
{% include "definitions.md" %}
|
{% include "definitions.md" %}
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "docs/page-2.md"
|
=== "`docs/page-2.md`"
|
||||||
|
|
||||||
``` markdown
|
``` markdown
|
||||||
---
|
---
|
||||||
|
@ -77,6 +77,8 @@ In order to integrate another JavaScript-based comment system provider, you can
|
|||||||
[extend the theme][7] and [override the `disqus` block][8]:
|
[extend the theme][7] and [override the `disqus` block][8]:
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block disqus %}
|
{% block disqus %}
|
||||||
<!-- Add custom comment system integration here -->
|
<!-- Add custom comment system integration here -->
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -178,7 +178,7 @@ Click on a tile to change the directionality:
|
|||||||
[:octicons-file-code-24: Source][1] ·
|
[:octicons-file-code-24: Source][1] ·
|
||||||
:octicons-mortar-board-24: Difficulty: _easy_
|
:octicons-mortar-board-24: Difficulty: _easy_
|
||||||
|
|
||||||
If you want to customize some of the translations for your language, just follow
|
If you want to customize some of the translations for a language, just follow
|
||||||
the guide on [theme extension][9] and create a new partial in
|
the guide on [theme extension][9] and create a new partial in
|
||||||
`partials/languages`, e.g. `en-custom.html`. Next, look up the translation you
|
`partials/languages`, e.g. `en-custom.html`. Next, look up the translation you
|
||||||
want to change in the [base translation][1] and add it to the partial.
|
want to change in the [base translation][1] and add it to the partial.
|
||||||
@ -186,9 +186,14 @@ want to change in the [base translation][1] and add it to the partial.
|
|||||||
Let's say you want to change "__Table of contents__" to "__On this page__":
|
Let's say you want to change "__Table of contents__" to "__On this page__":
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
{% macro t(key) %}{{ {
|
<!-- Use en language as fallback -->
|
||||||
|
{% import "partials/languages/en.html" as fallback %}
|
||||||
|
{% macro override(key) %}{{ {
|
||||||
"toc.title": "On this page"
|
"toc.title": "On this page"
|
||||||
}[key] }}{% endmacro %}
|
}[key] }}{% endmacro %}
|
||||||
|
|
||||||
|
<!-- Re-export the translation macro for mkbuild-material to use -->
|
||||||
|
{% macro t(key) %}{{ override(key) or fallback.t(key) }}{% endmacro %}
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, add the following lines to `mkdocs.yml`:
|
Then, add the following lines to `mkdocs.yml`:
|
||||||
|
@ -43,9 +43,9 @@ _Material for MkDocs is the only MkDocs theme offering this feature._
|
|||||||
|
|
||||||
### Anchor tracking
|
### Anchor tracking
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][9] ·
|
[:octicons-file-code-24: Source][6] ·
|
||||||
:octicons-unlock-24: Feature flag ·
|
:octicons-unlock-24: Feature flag ·
|
||||||
[:octicons-heart-fill-24:{ .mdx-heart } Insiders only][9]{ .mdx-insiders }
|
[:octicons-heart-fill-24:{ .mdx-heart } Insiders only][6]{ .mdx-insiders }
|
||||||
|
|
||||||
When _anchor tracking_ is enabled, the URL in the address bar is automatically
|
When _anchor tracking_ is enabled, the URL in the address bar is automatically
|
||||||
updated with the active anchor as highlighted in the table of contents. Add the
|
updated with the active anchor as highlighted in the table of contents. Add the
|
||||||
@ -57,9 +57,11 @@ theme:
|
|||||||
- navigation.tracking
|
- navigation.tracking
|
||||||
```
|
```
|
||||||
|
|
||||||
|
[6]: ../insiders/index.md
|
||||||
|
|
||||||
### Navigation tabs
|
### Navigation tabs
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][6] · :octicons-unlock-24: Feature flag
|
[:octicons-file-code-24: Source][7] · :octicons-unlock-24: Feature flag
|
||||||
|
|
||||||
When _tabs_ are enabled, top-level sections are rendered in a menu layer below
|
When _tabs_ are enabled, top-level sections are rendered in a menu layer below
|
||||||
the header for viewports above `1220px`, but remain as-is on mobile.[^1] Add
|
the header for viewports above `1220px`, but remain as-is on mobile.[^1] Add
|
||||||
@ -82,22 +84,21 @@ theme:
|
|||||||
|
|
||||||
=== "With tabs"
|
=== "With tabs"
|
||||||
|
|
||||||
[![With tabs][7]][7]
|
[![With tabs][8]][8]
|
||||||
|
|
||||||
=== "Without tabs"
|
=== "Without tabs"
|
||||||
|
|
||||||
[![Without tabs][8]][8]
|
[![Without tabs][9]][9]
|
||||||
|
|
||||||
[6]: https://github.com/squidfunk/mkdocs-material/blob/master/src/partials/tabs.html
|
[7]: https://github.com/squidfunk/mkdocs-material/blob/master/src/partials/tabs.html
|
||||||
[7]: ../assets/screenshots/navigation-tabs.png
|
[8]: ../assets/screenshots/navigation-tabs.png
|
||||||
[8]: ../assets/screenshots/navigation.png
|
[9]: ../assets/screenshots/navigation.png
|
||||||
|
|
||||||
#### Sticky navigation tabs
|
#### Sticky navigation tabs
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][9] ·
|
[:octicons-file-code-24: Source][10] ·
|
||||||
:octicons-unlock-24: Feature flag ·
|
:octicons-unlock-24: Feature flag ·
|
||||||
:octicons-beaker-24: Experimental ·
|
:octicons-beaker-24: Experimental
|
||||||
[:octicons-heart-fill-24:{ .mdx-heart } Insiders only][9]{ .mdx-insiders }
|
|
||||||
|
|
||||||
When _sticky tabs_ are enabled, navigation tabs will lock below the header and
|
When _sticky tabs_ are enabled, navigation tabs will lock below the header and
|
||||||
always remain visible when scrolling down. Just add the following two feature
|
always remain visible when scrolling down. Just add the following two feature
|
||||||
@ -112,19 +113,19 @@ theme:
|
|||||||
|
|
||||||
=== "With sticky tabs"
|
=== "With sticky tabs"
|
||||||
|
|
||||||
[![With sticky tabs][10]][10]
|
[![With sticky tabs][11]][11]
|
||||||
|
|
||||||
=== "Without sticky tabs"
|
=== "Without sticky tabs"
|
||||||
|
|
||||||
[![Without sticky tabs][11]][11]
|
[![Without sticky tabs][12]][12]
|
||||||
|
|
||||||
[9]: ../insiders/index.md
|
[10]: https://github.com/squidfunk/mkdocs-material/blob/master/src/partials/header.html
|
||||||
[10]: ../assets/screenshots/navigation-tabs-sticky.png
|
[11]: ../assets/screenshots/navigation-tabs-sticky.png
|
||||||
[11]: ../assets/screenshots/navigation-tabs-collapsed.png
|
[12]: ../assets/screenshots/navigation-tabs-collapsed.png
|
||||||
|
|
||||||
### Navigation sections
|
### Navigation sections
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][12] ·
|
[:octicons-file-code-24: Source][13] ·
|
||||||
:octicons-unlock-24: Feature flag
|
:octicons-unlock-24: Feature flag
|
||||||
|
|
||||||
When _sections_ are enabled, top-level sections are rendered as groups in the
|
When _sections_ are enabled, top-level sections are rendered as groups in the
|
||||||
@ -139,14 +140,14 @@ theme:
|
|||||||
|
|
||||||
=== "With sections"
|
=== "With sections"
|
||||||
|
|
||||||
[![With sections][13]][13]
|
[![With sections][14]][14]
|
||||||
|
|
||||||
=== "Without sections"
|
=== "Without sections"
|
||||||
|
|
||||||
[![Without sections][8]][8]
|
[![Without sections][9]][9]
|
||||||
|
|
||||||
[12]: https://github.com/squidfunk/mkdocs-material/blob/master/src/partials/nav-item.html
|
[13]: https://github.com/squidfunk/mkdocs-material/blob/master/src/partials/nav-item.html
|
||||||
[13]: ../assets/screenshots/navigation-sections.png
|
[14]: ../assets/screenshots/navigation-sections.png
|
||||||
|
|
||||||
Both feature flags, _tabs_ and _sections_, can be combined with each other. If
|
Both feature flags, _tabs_ and _sections_, can be combined with each other. If
|
||||||
both feature flags are enabled, sections are rendered for level 2 navigation
|
both feature flags are enabled, sections are rendered for level 2 navigation
|
||||||
@ -154,7 +155,7 @@ items.
|
|||||||
|
|
||||||
### Navigation expansion
|
### Navigation expansion
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][12] ·
|
[:octicons-file-code-24: Source][13] ·
|
||||||
:octicons-unlock-24: Feature flag
|
:octicons-unlock-24: Feature flag
|
||||||
|
|
||||||
When _expansion_ is enabled, the left sidebar will expand all collapsible
|
When _expansion_ is enabled, the left sidebar will expand all collapsible
|
||||||
@ -169,20 +170,19 @@ theme:
|
|||||||
|
|
||||||
=== "With expansion"
|
=== "With expansion"
|
||||||
|
|
||||||
[![With expansion][14]][14]
|
[![With expansion][15]][15]
|
||||||
|
|
||||||
=== "Without expansion"
|
=== "Without expansion"
|
||||||
|
|
||||||
[![Without expansion][8]][8]
|
[![Without expansion][9]][9]
|
||||||
|
|
||||||
[14]: ../assets/screenshots/navigation-expand.png
|
[15]: ../assets/screenshots/navigation-expand.png
|
||||||
|
|
||||||
### Section index pages
|
### Section index pages
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][9] ·
|
[:octicons-file-code-24: Source][16] ·
|
||||||
:octicons-unlock-24: Feature flag ·
|
:octicons-unlock-24: Feature flag ·
|
||||||
:octicons-beaker-24: Experimental ·
|
:octicons-beaker-24: Experimental
|
||||||
[:octicons-heart-fill-24:{ .mdx-heart } Insiders only][9]{ .mdx-insiders }
|
|
||||||
|
|
||||||
When _section index pages_ are enabled, documents can be directly attached to
|
When _section index pages_ are enabled, documents can be directly attached to
|
||||||
sections, which is particularly useful for providing overview pages. Add the
|
sections, which is particularly useful for providing overview pages. Add the
|
||||||
@ -196,11 +196,11 @@ theme:
|
|||||||
|
|
||||||
=== "With section index pages"
|
=== "With section index pages"
|
||||||
|
|
||||||
[![With expansion][15]][15]
|
[![With expansion][17]][17]
|
||||||
|
|
||||||
=== "Without section index pages"
|
=== "Without section index pages"
|
||||||
|
|
||||||
[![Without expansion][16]][16]
|
[![Without expansion][18]][18]
|
||||||
|
|
||||||
In order to link a page to a section, create a new document with the name
|
In order to link a page to a section, create a new document with the name
|
||||||
`index.md` in the respective folder, and add it to the beginning of your
|
`index.md` in the respective folder, and add it to the beginning of your
|
||||||
@ -216,23 +216,16 @@ nav:
|
|||||||
```
|
```
|
||||||
|
|
||||||
_This feature flag can be combined with all other feature flags, e.g. [tabs][1]
|
_This feature flag can be combined with all other feature flags, e.g. [tabs][1]
|
||||||
and [sections][2], except for table of contents [navigation integration][17].
|
and [sections][2], except for table of contents [navigation integration][19]._
|
||||||
Note that it doesn't rely on third-party plugins[^2]._
|
|
||||||
|
|
||||||
[^2]:
|
[16]: https://github.com/squidfunk/mkdocs-material/blob/master/src/partials/nav-item.html
|
||||||
If you don't want to use the native integration, the
|
[17]: ../assets/screenshots/navigation-index-on.png
|
||||||
[mkdocs-section-index][18] plugin might be an alternative. However, note
|
[18]: ../assets/screenshots/navigation-index-off.png
|
||||||
that this plugin may not be compatible with all navigation-related features
|
[19]: #navigation-integration
|
||||||
offered by Material for MkDocs.
|
|
||||||
|
|
||||||
[15]: ../assets/screenshots/navigation-index-on.png
|
|
||||||
[16]: ../assets/screenshots/navigation-index-off.png
|
|
||||||
[17]: #navitation-intergation
|
|
||||||
[18]: https://github.com/oprypin/mkdocs-section-index
|
|
||||||
|
|
||||||
### Back-to-top button
|
### Back-to-top button
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][19] ·
|
[:octicons-file-code-24: Source][20] ·
|
||||||
:octicons-unlock-24: Feature flag
|
:octicons-unlock-24: Feature flag
|
||||||
|
|
||||||
A _back-to-top button_ can be shown when the user, after scrolling down, starts
|
A _back-to-top button_ can be shown when the user, after scrolling down, starts
|
||||||
@ -245,11 +238,10 @@ theme:
|
|||||||
- navigation.top
|
- navigation.top
|
||||||
```
|
```
|
||||||
|
|
||||||
[![back-to-top button][20]][20]
|
[![back-to-top button][21]][21]
|
||||||
|
|
||||||
[19]: https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/stylesheets/main/layout/_top.scss
|
[20]: https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/stylesheets/main/layout/_top.scss
|
||||||
[20]: ../assets/screenshots/back-to-top.png
|
[21]: ../assets/screenshots/back-to-top.png
|
||||||
[21]: https://squidfunk.github.io/mkdocs-material-insiders/setup/setting-up-navigation/#back-to-top-button
|
|
||||||
|
|
||||||
### Table of contents
|
### Table of contents
|
||||||
|
|
||||||
@ -287,7 +279,7 @@ customize its appearance:
|
|||||||
: :octicons-milestone-24: Default: `headerid.slugify` – This option allows for
|
: :octicons-milestone-24: Default: `headerid.slugify` – This option allows for
|
||||||
customization of the slug function. For some languages, the default may not
|
customization of the slug function. For some languages, the default may not
|
||||||
produce good and readable identifiers – consider using another slug function
|
produce good and readable identifiers – consider using another slug function
|
||||||
like for example those from [Python Markdown Extensions][24]:
|
like for example those from [Python Markdown Extensions][25]:
|
||||||
|
|
||||||
=== "Unicode"
|
=== "Unicode"
|
||||||
|
|
||||||
@ -358,7 +350,7 @@ theme:
|
|||||||
|
|
||||||
=== "Separate table of contents"
|
=== "Separate table of contents"
|
||||||
|
|
||||||
[![Separate table of contents][7]][7]
|
[![Separate table of contents][8]][8]
|
||||||
|
|
||||||
[26]: https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/stylesheets/main/layout/_nav.scss
|
[26]: https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/stylesheets/main/layout/_nav.scss
|
||||||
[27]: ../assets/screenshots/toc-integrate.png
|
[27]: ../assets/screenshots/toc-integrate.png
|
||||||
|
@ -17,8 +17,13 @@ with some effort, search can be made available [offline][1].
|
|||||||
|
|
||||||
### Built-in search
|
### Built-in search
|
||||||
|
|
||||||
|
!!! danger "[Search: better, faster, smaller](../blog/2021/search-better-faster-smaller.md)"
|
||||||
|
|
||||||
|
We rebuilt the search plugin and integration from the ground up, introducing [rich search previews](../blog/2021/search-better-faster-smaller.md#rich-search-previews), much better [tokenizer support](../blog/2021/search-better-faster-smaller.md#tokenizer-lookahead), [more accurate highlighting](../blog/2021/search-better-faster-smaller.md#accurate-highlighting) and much more. Read the [blog article](../blog/2021/search-better-faster-smaller.md) to learn more about our new search implementation. Start using it immediately by [becoming a sponsor][20]!
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][2] ·
|
[:octicons-file-code-24: Source][2] ·
|
||||||
[:octicons-cpu-24: Plugin][3]
|
[:octicons-cpu-24: Plugin][3] ·
|
||||||
|
[:octicons-heart-fill-24:{ .mdx-heart } Better in Insiders][20]{ .mdx-insiders }
|
||||||
|
|
||||||
The [built-in search plugin][3] integrates seamlessly with Material for MkDocs,
|
The [built-in search plugin][3] integrates seamlessly with Material for MkDocs,
|
||||||
adding multilingual client-side search with [lunr][4] and [lunr-languages][5].
|
adding multilingual client-side search with [lunr][4] and [lunr-languages][5].
|
||||||
@ -152,7 +157,7 @@ theme:
|
|||||||
- search.suggest
|
- search.suggest
|
||||||
```
|
```
|
||||||
|
|
||||||
Searching for [:octicons-search-24: ^^search su^^][9] yields ^^search suggestions^^ as a suggestion:
|
Searching for [:octicons-search-24: search su][9] yields ^^search suggestions^^ as a suggestion:
|
||||||
|
|
||||||
[![Search suggestions][10]][10]
|
[![Search suggestions][10]][10]
|
||||||
|
|
||||||
@ -176,13 +181,10 @@ theme:
|
|||||||
- search.highlight
|
- search.highlight
|
||||||
```
|
```
|
||||||
|
|
||||||
Searching for [:octicons-search-24: ^^code blocks^^][12] yields:
|
Searching for [:octicons-search-24: code blocks][12] yields:
|
||||||
|
|
||||||
[![Search highlighting][13]][13]
|
[![Search highlighting][13]][13]
|
||||||
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
[11]: https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/javascripts/components/search/highlight/index.ts
|
[11]: https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/javascripts/components/search/highlight/index.ts
|
||||||
[12]: ../reference/code-blocks.md?h=code+blocks
|
[12]: ../reference/code-blocks.md?h=code+blocks
|
||||||
[13]: ../assets/screenshots/search-highlighting.png
|
[13]: ../assets/screenshots/search-highlighting.png
|
||||||
@ -312,6 +314,8 @@ customize the `transform` function, you can do this by [overriding the
|
|||||||
`config` block][24]:
|
`config` block][24]:
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block config %}
|
{% block config %}
|
||||||
{{ super() }}
|
{{ super() }}
|
||||||
<script>
|
<script>
|
||||||
|
@ -105,8 +105,7 @@ copyright: Copyright © 2016 - 2020 Martin Donath
|
|||||||
|
|
||||||
### Remove generator
|
### Remove generator
|
||||||
|
|
||||||
[:octicons-file-code-24: Source][4] ·
|
[:octicons-file-code-24: Source][3]
|
||||||
[:octicons-heart-fill-24:{ .mdx-heart } Insiders only][4]{ .mdx-insiders }
|
|
||||||
|
|
||||||
The footer displays a _Made with Material for MkDocs_ notice to denote how
|
The footer displays a _Made with Material for MkDocs_ notice to denote how
|
||||||
the site was generated. The notice can be removed with the following setting
|
the site was generated. The notice can be removed with the following setting
|
||||||
@ -117,6 +116,18 @@ extra:
|
|||||||
generator: false
|
generator: false
|
||||||
```
|
```
|
||||||
|
|
||||||
|
!!! info "Please read this before removing the generator notice"
|
||||||
|
|
||||||
|
The subtle __Made with Material for MkDocs__ hint in the footer is one of
|
||||||
|
the reasons why this project is so popular, as it tells the user how the
|
||||||
|
site is generated, helping new users to discover this project. Before
|
||||||
|
removing it, please consider that you're enjoying the benefits of
|
||||||
|
@squidfunk's work for free, as this project is Open Source and has a
|
||||||
|
permissive license. Thousands of hours went into this project, most of them
|
||||||
|
without any financial return. Thus, if you remove this notice, please
|
||||||
|
consider [sponsoring][4] the project. __Thank you__
|
||||||
|
:octicons-heart-fill-24:{ .mdx-heart .mdx-insiders }
|
||||||
|
|
||||||
[4]: ../insiders/index.md
|
[4]: ../insiders/index.md
|
||||||
|
|
||||||
## Customization
|
## Customization
|
||||||
|
@ -42,6 +42,8 @@ an announcement bar, [extend the theme][4] and [override the `announce`
|
|||||||
block][5], which is empty by default:
|
block][5], which is empty by default:
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block announce %}
|
{% block announce %}
|
||||||
<!-- Add your announcement here, including arbitrary HTML -->
|
<!-- Add your announcement here, including arbitrary HTML -->
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -76,6 +76,8 @@ visits any other version than the latest version. Using [theme extension][8],
|
|||||||
you can [define the `outdated` block][9]:
|
you can [define the `outdated` block][9]:
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block outdated %}
|
{% block outdated %}
|
||||||
You're not viewing the latest version.
|
You're not viewing the latest version.
|
||||||
<a href="{{ '../' ~ base_url }}"> <!-- (1) -->
|
<a href="{{ '../' ~ base_url }}"> <!-- (1) -->
|
||||||
|
1
material/.icons/material/account-cowboy-hat-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 4c-.6 0-1 .4-1 1v1h-1.5l-1.4-3c-.1-.2-.2-.4-.4-.5-.5-.5-1.3-.6-2-.3l-.7.2-.7-.3c-.7-.3-1.5-.2-2 .3-.2.2-.3.4-.4.6L7.5 6H6V5c0-.6-.4-1-1-1s-1 .4-1 1v1c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V5c0-.5-.4-1-1-1M4 22v-3c0-2.67 5.33-4 8-4s8 1.33 8 4v3H4m14.1-1.9V19c0-.64-3.13-2.1-6.1-2.1S5.9 18.36 5.9 19v1.1h12.2M16 9v1c0 2.21-1.79 4-4 4s-4-1.79-4-4V9h2v1a2 2 0 1 0 4 0V9h2z"/></svg>
|
After Width: | Height: | Size: 443 B |
1
material/.icons/material/account-eye-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0-6a2 2 0 1 1 0 4c-1.11 0-2-.89-2-2s.9-2 2-2m-.73 14H2v-3c0-2.67 5.33-4 8-4 1.04 0 2.5.21 3.86.61-.86.34-1.66.81-2.36 1.39-.5-.06-1-.1-1.5-.1-2.97 0-6.1 1.46-6.1 2.1v1.1h5.32c-.02.05-.05.1-.08.15l-.29.75.29.75c.04.08.09.16.13.25M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
|
After Width: | Height: | Size: 542 B |
1
material/.icons/material/account-eye.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6 8c0-2.21 1.79-4 4-4s4 1.79 4 4-1.79 4-4 4-4-1.79-4-4m3.14 11.75L8.85 19l.29-.75c.7-1.75 1.94-3.11 3.47-4.03-.82-.14-1.69-.22-2.61-.22-4.42 0-8 1.79-8 4v2h7.27c-.04-.09-.09-.17-.13-.25M17 18c-.56 0-1 .44-1 1s.44 1 1 1 1-.44 1-1-.44-1-1-1m6 1c-.94 2.34-3.27 4-6 4s-5.06-1.66-6-4c.94-2.34 3.27-4 6-4s5.06 1.66 6 4m-3.5 0a2.5 2.5 0 0 0-5 0 2.5 2.5 0 0 0 5 0z"/></svg>
|
After Width: | Height: | Size: 435 B |
1
material/.icons/material/account-filter-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17 21 1.8 1.8c.5.5 1.2.1 1.2-.5V18l2.8-3.4A1 1 0 0 0 22 13h-7c-.8 0-1.3 1-.8 1.6L17 18v3m-2-1H2v-3c0-2.7 5.3-4 8-4 .6 0 1.3.1 2.1.2-.2.6-.1 1.3.1 1.9-.7-.1-1.5-.2-2.2-.2-3 0-6.1 1.5-6.1 2.1v1.1h10.6l.5.6V20m-5-8c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4m0-6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2z"/></svg>
|
After Width: | Height: | Size: 385 B |
1
material/.icons/material/account-filter.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 4c2.2 0 4 1.8 4 4s-1.8 4-4 4-4-1.8-4-4 1.8-4 4-4m7 17 1.8 1.8c.5.5 1.2.1 1.2-.5V18l2.8-3.4A1 1 0 0 0 22 13h-7c-.8 0-1.3 1-.8 1.6L17 18v3m-2-2.3-2.3-2.8c-.4-.5-.6-1.1-.6-1.7-.7-.2-1.4-.2-2.1-.2-4.4 0-8 1.8-8 4v2h13v-1.3z"/></svg>
|
After Width: | Height: | Size: 301 B |
1
material/.icons/material/account-injury-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 10c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0-6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m6.39 8.56C16.71 11.7 14.53 11 12 11s-4.71.7-6.39 1.56A2.97 2.97 0 0 0 4 15.22V22h2v-6.78c0-.38.2-.72.5-.88C7.71 13.73 9.63 13 12 13c.76 0 1.47.07 2.13.2l-1.55 3.3H9.75C8.23 16.5 7 17.73 7 19.25S8.23 22 9.75 22H18c1.1 0 2-.9 2-2v-4.78c0-1.12-.61-2.15-1.61-2.66M10.94 20H9.75c-.41 0-.75-.34-.75-.75s.34-.75.75-.75h1.89l-.7 1.5M18 20h-4.85l2.94-6.27c.54.2 1.01.41 1.41.61.3.16.5.5.5.88V20z"/></svg>
|
After Width: | Height: | Size: 570 B |
1
material/.icons/material/account-injury.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8 6c0-2.21 1.79-4 4-4s4 1.79 4 4-1.79 4-4 4-4-1.79-4-4m9 16h1c1.1 0 2-.9 2-2v-4.78c0-1.12-.61-2.15-1.61-2.66-.43-.22-.89-.43-1.39-.62V22m-4.66-5L15 11.33c-.93-.21-1.93-.33-3-.33-2.53 0-4.71.7-6.39 1.56A2.97 2.97 0 0 0 4 15.22V22h2.34c-.22-.45-.34-.96-.34-1.5C6 18.57 7.57 17 9.5 17h2.84M10 22l1.41-3H9.5c-.83 0-1.5.67-1.5 1.5S8.67 22 9.5 22h.5z"/></svg>
|
After Width: | Height: | Size: 423 B |
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 450 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21.8 14.5c-.5-.8-1.7-1.1-3.7-1.1-.7 0-1.4 0-2.1.1-.5-.3-1-.6-1.4-.9-1-.8-1.9-2.3-2.6-4.1 0 0 0-.1.1-.2.5-2.1 1-4.7 0-5.8-.3-.3-.6-.4-1-.4h-.4c-.6 0-1.1.6-1.3 1.2-.6 2.1-.2 3.3.4 5.2-.4 1.5-.9 3.1-1.8 4.8-.5 1.1-1.1 2.1-1.5 2.9-.6.3-1.1.6-1.4.8-1.9 1.2-2.9 2.6-3 3.4-.1.3-.1.6 0 .8v.1l.8.5c.2.1.5.2.7.2 1.3 0 2.8-1.5 4.8-5 .1 0 .2-.1.3-.1 1.7-.5 3.7-.9 6.5-1.2 1.6.8 3.6 1.2 4.8 1.2.7 0 1.2-.2 1.5-.5.3-.3.4-.7.5-1.1 0-.3 0-.6-.2-.8M3.4 20.9c.1-.6.8-1.7 2-2.7.2-.1.4-.3.8-.5-1.2 1.9-2.1 2.9-2.8 3.2m7.4-17.7c.1-.1.1-.2.2-.2l.2.1c.3.4.3.9.1 1.8v.3c-.1.4-.1.8-.3 1.3-.4-1.5-.4-2.6-.2-3.3m-2 12.6-.2.1c.1-.5.5-1.1.8-1.7.7-1.4 1.3-2.7 1.6-3.9.7 1.5 1.5 2.6 2.5 3.5.2.2.4.4.7.5-1.4.2-3.3.7-5.4 1.5m12.1-.1h-.4c-.7 0-1.9-.3-3.1-.8.1-.2.3-.2.4-.2 2.3 0 2.9.4 3.1.6.1.1.1.1.1.2s0 .1-.1.2z"/></svg>
|
|
Before Width: | Height: | Size: 858 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.58 3H22v16.67L14.58 3M9.42 3H2v16.67L9.42 3M12 9.17l4.67 10.5H13.5l-1.33-3.34H8.75L12 9.17z"/></svg>
|
|
Before Width: | Height: | Size: 173 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m-1.57 19.87v-1.96c0-.69-.43-1.34-1.08-1.61-2.44-1.04-4.18-3.47-4.18-6.3 0-3.74 3.05-6.83 6.83-6.83 3.78 0 6.83 3.09 6.83 6.83 0 4.43-3.44 8.61-8.4 9.87z"/></svg>
|
|
Before Width: | Height: | Size: 306 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.93 17.09c-.18.16-.43.17-.63.06-.89-.74-1.05-1.08-1.54-1.79-1.47 1.5-2.51 1.95-4.42 1.95-2.25 0-4.01-1.39-4.01-4.17 0-2.18 1.17-3.64 2.86-4.38 1.46-.64 3.49-.76 5.04-.93V7.5c0-.66.05-1.41-.33-1.96-.32-.49-.95-.7-1.5-.7-1.02 0-1.93.53-2.15 1.61-.05.24-.25.48-.47.49l-2.6-.28c-.22-.05-.46-.22-.4-.56.6-3.15 3.45-4.1 6-4.1 1.3 0 3 .35 4.03 1.33C17.11 4.55 17 6.18 17 7.95v4.17c0 1.25.5 1.81 1 2.48.17.25.21.54 0 .71l-2.06 1.78h-.01m-2.7-6.53V10c-1.94 0-3.99.39-3.99 2.67 0 1.16.61 1.95 1.63 1.95.76 0 1.43-.47 1.86-1.22.52-.93.5-1.8.5-2.84m6.93 8.98C18 21.14 14.82 22 12.1 22c-3.81 0-7.25-1.41-9.85-3.76-.2-.18-.02-.43.25-.29 2.78 1.63 6.25 2.61 9.83 2.61 2.41 0 5.07-.5 7.51-1.53.37-.16.66.24.32.51m.91-1.04c-.28-.36-1.85-.17-2.57-.08-.19.02-.22-.16-.03-.3 1.24-.88 3.29-.62 3.53-.33.24.3-.07 2.35-1.24 3.32-.18.16-.35.07-.26-.11.26-.67.85-2.14.57-2.5z"/></svg>
|
|
Before Width: | Height: | Size: 931 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22.78 17.91c.16.25.22.51.22.79 0 .38-.13.69-.43.94s-.63.36-1.01.36h-2.48L12.42 8h-.84L4.92 20H2.39c-.47 0-.86-.2-1.17-.62-.31-.42-.33-.88-.05-1.38l9.61-16.31C11.09 1.22 11.5 1 12 1c.53 0 .92.22 1.17.69l9.61 16.22m-18 4.4L12 9.38l7.22 12.93-.72.69-6.5-2.66L5.44 23l-.66-.69z"/></svg>
|
|
Before Width: | Height: | Size: 352 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15 9a1 1 0 0 1-1-1 1 1 0 0 1 1-1 1 1 0 0 1 1 1 1 1 0 0 1-1 1M9 9a1 1 0 0 1-1-1 1 1 0 0 1 1-1 1 1 0 0 1 1 1 1 1 0 0 1-1 1m7.12-4.63 2.1-2.1-.82-.83-2.31 2.31C14.16 3.28 13.11 3 12 3c-1.12 0-2.16.28-3.09.75L6.6 1.44l-.82.83 2.1 2.1C6.14 5.64 5 7.68 5 10v1h14v-1c0-2.32-1.14-4.36-2.88-5.63M5 16c0 3.86 3.13 7 7 7a7 7 0 0 0 7-7v-4H5v4z"/></svg>
|
|
Before Width: | Height: | Size: 410 B |
Before Width: | Height: | Size: 214 B After Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 215 B After Width: | Height: | Size: 215 B |
Before Width: | Height: | Size: 378 B After Width: | Height: | Size: 378 B |
Before Width: | Height: | Size: 419 B After Width: | Height: | Size: 419 B |
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 257 B |
1
material/.icons/material/application-cog-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21.7 18.6v-1l1.1-.8c.1-.1.2-.2.1-.3l-1-1.7c0-.1-.2-.1-.3-.1l-1.2.5c-.3-.2-.6-.4-.9-.5l-.2-1.3c0-.1-.1-.2-.2-.2h-2c-.2 0-.3.1-.3.2l-.2 1.3c-.3.2-.5.3-.8.5l-1.2-.5c-.1 0-.2 0-.3.1l-1 1.7c0 .1 0 .2.1.3l1.1.8v1l-1.1.8c-.1.1-.2.2-.1.3l1 1.7c.1.1.2.1.3.1l1.2-.5c.2.2.5.4.8.5l.2 1.3c.1.1.2.2.3.2h2c.1 0 .2-.1.2-.2l.2-1.3c.3-.2.5-.3.8-.5l1.2.4c.1 0 .2 0 .3-.1l1-1.7c.1-.1.1-.2 0-.2l-1.1-.8m-3.7.9c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5M12.3 22H3c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h18c1.1 0 2 .9 2 2v9.1c-.6-.6-1.3-1.1-2-1.4V6H3v14h8.3c.2.7.5 1.4 1 2z"/></svg>
|
After Width: | Height: | Size: 644 B |
@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21.7 18.6v-1l1.1-.8c.1-.1.2-.2.1-.3l-1-1.7c0-.1-.2-.1-.3-.1l-1.2.5c-.3-.2-.6-.4-.9-.5l-.2-1.3c0-.1-.1-.2-.2-.2h-2c-.2 0-.3.1-.3.2l-.2 1.3c-.3.2-.5.3-.8.5l-1.2-.5c-.1 0-.2 0-.3.1l-1 1.7c0 .1 0 .2.1.3l1.1.8v1l-1.1.8c-.1.1-.2.2-.1.3l1 1.7c.1.1.2.1.3.1l1.2-.5c.2.2.5.4.8.5l.2 1.3c.1.1.2.2.3.2h2c.1 0 .2-.1.2-.2l.2-1.3c.3-.2.5-.3.8-.5l1.2.4c.1 0 .2 0 .3-.1l1-1.7c.1-.1.1-.2 0-.2l-1.1-.8m-3.7.9c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5m-6.71.5H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v5.68a7.03 7.03 0 0 0-2-.6V8H5v10h6c0 .7.11 1.37.29 2z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21.7 18.6v-1l1.1-.8c.1-.1.2-.2.1-.3l-1-1.7c0-.1-.2-.1-.3-.1l-1.2.5c-.3-.2-.6-.4-.9-.5l-.2-1.3c0-.1-.1-.2-.2-.2h-2c-.2 0-.3.1-.3.2l-.2 1.3c-.3.2-.5.3-.8.5l-1.2-.5c-.1 0-.2 0-.3.1l-1 1.7c0 .1 0 .2.1.3l1.1.8v1l-1.1.8c-.1.1-.2.2-.1.3l1 1.7c.1.1.2.1.3.1l1.2-.5c.2.2.5.4.8.5l.2 1.3c.1.1.2.2.3.2h2c.1 0 .2-.1.2-.2l.2-1.3c.3-.2.5-.3.8-.5l1.2.4c.1 0 .2 0 .3-.1l1-1.7c.1-.1.1-.2 0-.2l-1.1-.8m-3.7.9c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5M11 18c0-3.9 3.1-7 7-7 2 0 3.7.8 5 2.1V4c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h9.3c-.8-1.1-1.3-2.5-1.3-4M3 4h18v3H3V4z"/></svg>
|
Before Width: | Height: | Size: 643 B After Width: | Height: | Size: 662 B |
1
material/.icons/material/application-edit-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 20v2H3c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h18c1.1 0 2 .9 2 2v8.1l-.2-.2c-.5-.5-1.1-.8-1.8-.8V6H3v14h8m10.4-6.7 1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2s.3.1.4.2m-.3 3.6-6 6.1H13v-2.1l6.1-6.1 2 2.1z"/></svg>
|
After Width: | Height: | Size: 289 B |
1
material/.icons/material/application-edit.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m11 20.1 8.2-8.2c.5-.5 1.1-.8 1.8-.8s1.3.3 1.8.8l.2.2V4c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h8v-1.9M3 4h18v3H3V4m18 9.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2z"/></svg>
|
After Width: | Height: | Size: 324 B |
@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8 12h9.76l-2.5-2.5 1.41-1.42L21.59 13l-4.92 4.92-1.41-1.42 2.5-2.5H8v-2m11-9a2 2 0 0 1 2 2v4.67l-2-2V7H5v12h14v-.67l2-2V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 12h9.8l-2.5-2.5 1.4-1.4 4.9 4.9-4.9 4.9-1.4-1.4 2.5-2.5H9v-2m12 5.4V20H3V6h18v2.6l2 2V4c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-4.6l-2 2z"/></svg>
|
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 247 B |
@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1 12h9.76l-2.5-2.5 1.41-1.42L14.59 13l-4.92 4.92-1.41-1.42 2.5-2.5H1v-2m18-9a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3h2v3h14V7H5v3H3V5a2 2 0 0 1 2-2h14z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1 12h9.8L8.3 9.5l1.4-1.4 4.9 4.9-4.9 4.9-1.4-1.4 2.5-2.5H1v-2M21 2H3c-1.1 0-2 .9-2 2v6.1h2V6h18v14H3v-4H1v4c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2"/></svg>
|
Before Width: | Height: | Size: 240 B After Width: | Height: | Size: 235 B |
1
material/.icons/material/application-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 2H3c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 18H3V6h18v14z"/></svg>
|
After Width: | Height: | Size: 169 B |
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 344 B |
Before Width: | Height: | Size: 351 B After Width: | Height: | Size: 351 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 0H3C1.9 0 1 .9 1 2v16c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V2c0-1.1-.9-2-2-2m0 18H3V4h18v14M7 22h2v2H7v-2m4 0h2v2h-2v-2m4 0h2v2h-2v-2"/></svg>
|
After Width: | Height: | Size: 209 B |
@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 22h2v2H7v-2m4 0h2v2h-2v-2m4 0h2v2h-2v-2M5 4h14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2m0 4v10h14V8H5"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 0H3C1.9 0 1 .9 1 2v16c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V2c0-1.1-.9-2-2-2m0 5H3V2h18v3M7 22h2v2H7v-2m4 0h2v2h-2v-2m4 0h2v2h-2v-2"/></svg>
|
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 207 B |
Before Width: | Height: | Size: 414 B After Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 419 B After Width: | Height: | Size: 419 B |
@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h14m0 14V8H5v10h14z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 2H3c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 5H3V4h18v3z"/></svg>
|
Before Width: | Height: | Size: 165 B After Width: | Height: | Size: 167 B |
1
material/.icons/material/archive-cancel-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.5 11c.28 0 .5.22.5.5V13H9v-1.5c0-.28.22-.5.5-.5h5m4 1c.5 0 1 .07 1.5.18V10h-2v2.03c.17-.03.33-.03.5-.03M6 19v-9H4v11h8.5c-.26-.62-.41-1.3-.47-2H6M21 9H3V3h18v6m-2-4H5v2h14V5m4 13.5c0 2.5-2 4.5-4.5 4.5S14 21 14 18.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5m-3 2.58L15.92 17c-.27.42-.42.94-.42 1.5 0 1.66 1.34 3 3 3 .56 0 1.08-.15 1.5-.42m1.5-2.58c0-1.66-1.34-3-3-3-.56 0-1.08.15-1.5.42L21.08 20c.27-.42.42-.94.42-1.5z"/></svg>
|
After Width: | Height: | Size: 485 B |
1
material/.icons/material/archive-cancel.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.5 12c.5 0 1 .07 1.5.18V8H4v13h8.5a6.5 6.5 0 0 1 6-9M9 13v-1.5c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5V13H9m12-6H3V3h18v4m-2.5 7C16 14 14 16 14 18.5s2 4.5 4.5 4.5 4.5-2 4.5-4.5-2-4.5-4.5-4.5m0 7.5c-1.66 0-3-1.34-3-3 0-.56.15-1.08.42-1.5L20 21.08c-.42.27-.94.42-1.5.42m2.58-1.5L17 15.92c.42-.27.94-.42 1.5-.42 1.66 0 3 1.34 3 3 0 .56-.15 1.08-.42 1.5z"/></svg>
|
After Width: | Height: | Size: 426 B |
1
material/.icons/material/archive-check-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 3H3v6h18V3m-2 4H5V5h14v2m-4.5 4c.28 0 .5.22.5.5V13H9v-1.5c0-.28.22-.5.5-.5h5m3.5 2.09V10h2v3.09c-.33-.05-.66-.09-1-.09-.34 0-.67.04-1 .09M13 19c0 .7.13 1.37.35 2H4V10h2v9h7m9.5-1.75L17.75 22 15 19l1.16-1.16 1.59 1.59 3.59-3.59 1.16 1.41z"/></svg>
|
After Width: | Height: | Size: 319 B |
1
material/.icons/material/archive-check.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 13c.34 0 .67.04 1 .09V8H4v13h9.35c-.22-.63-.35-1.3-.35-2 0-3.31 2.69-6 6-6M9 13v-1.5c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5V13H9m12-6H3V3h18v4m1.5 10.25L17.75 22 15 19l1.16-1.16 1.59 1.59 3.59-3.59 1.16 1.41z"/></svg>
|
After Width: | Height: | Size: 286 B |
1
material/.icons/material/archive-clock-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 2H2v6h18V2m-2 4H4V4h14v2m-2 3c-1.31 0-2.54.37-3.59 1H8.5c-.28 0-.5.22-.5.5V12h2.26A6.94 6.94 0 0 0 9 16c0 .7.11 1.37.29 2H5V9H3v11h7.26c1.27 1.81 3.36 3 5.74 3 3.87 0 7-3.13 7-7s-3.13-7-7-7m0 12c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m.5-4.75 2.86 1.69-.75 1.22L15 17v-5h1.5v4.25z"/></svg>
|
After Width: | Height: | Size: 374 B |
1
material/.icons/material/archive-clock.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 6H2V2h18v4m-3.5 6H15v5l3.61 2.16.75-1.22-2.86-1.69V12m6.5 4c0 3.87-3.13 7-7 7-2.38 0-4.47-1.19-5.74-3H3V7h16v2.68c2.36 1.13 4 3.53 4 6.32M8 12h2.26c.57-.81 1.3-1.5 2.15-2H8.5c-.28 0-.5.22-.5.5V12m13 4c0-2.76-2.24-5-5-5s-5 2.24-5 5 2.24 5 5 5 5-2.24 5-5z"/></svg>
|
After Width: | Height: | Size: 335 B |
1
material/.icons/material/archive-cog-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 12.08V10h2v2.08c-.33-.05-.66-.08-1-.08-.34 0-.67.03-1 .08M9.5 11c-.28 0-.5.22-.5.5V13h6v-1.5c0-.28-.22-.5-.5-.5h-5M6 19v-9H4v11h8.3c-.19-.63-.3-1.3-.3-2H6M21 9H3V3h18v6m-2-4H5v2h14V5m4.8 15.4c.1 0 .1.1 0 .2l-1 1.7c-.1.1-.2.1-.3.1l-1.2-.4c-.3.2-.5.3-.8.5l-.2 1.3c0 .1-.1.2-.2.2h-2c-.1 0-.2-.1-.3-.2l-.2-1.3c-.3-.1-.6-.3-.8-.5l-1.2.5c-.1 0-.2 0-.3-.1l-1-1.7c-.1-.1 0-.2.1-.3l1.1-.8v-1l-1.1-.8c-.1-.1-.1-.2-.1-.3l1-1.7c.1-.1.2-.1.3-.1l1.2.5c.3-.2.5-.3.8-.5l.2-1.3c0-.1.1-.2.3-.2h2c.1 0 .2.1.2.2l.2 1.3c.3.1.6.3.9.5l1.2-.5c.1 0 .3 0 .3.1l1 1.7c.1.1 0 .2-.1.3l-1.1.8v1l1.1.8M20.5 19c0-.8-.7-1.5-1.5-1.5s-1.5.7-1.5 1.5.7 1.5 1.5 1.5 1.5-.7 1.5-1.5z"/></svg>
|
After Width: | Height: | Size: 724 B |
1
material/.icons/material/archive-cog.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4m-9 12c0 .7.11 1.37.3 2H4V8h16v4.08c-.33-.05-.66-.08-1-.08-3.87 0-7 3.13-7 7m3-6v-1.5c0-.28-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5V13h6m8.8 7.4c.1 0 .1.1 0 .2l-1 1.7c-.1.1-.2.1-.3.1l-1.2-.4c-.3.2-.5.3-.8.5l-.2 1.3c0 .1-.1.2-.2.2h-2c-.1 0-.2-.1-.3-.2l-.2-1.3c-.3-.1-.6-.3-.8-.5l-1.2.5c-.1 0-.2 0-.3-.1l-1-1.7c-.1-.1 0-.2.1-.3l1.1-.8v-1l-1.1-.8c-.1-.1-.1-.2-.1-.3l1-1.7c.1-.1.2-.1.3-.1l1.2.5c.3-.2.5-.3.8-.5l.2-1.3c0-.1.1-.2.3-.2h2c.1 0 .2.1.2.2l.2 1.3c.3.1.6.3.9.5l1.2-.5c.1 0 .3 0 .3.1l1 1.7c.1.1 0 .2-.1.3l-1.1.8v1l1.1.8M20.5 19c0-.8-.7-1.5-1.5-1.5s-1.5.7-1.5 1.5.7 1.5 1.5 1.5 1.5-.7 1.5-1.5z"/></svg>
|
After Width: | Height: | Size: 681 B |
1
material/.icons/material/archive-edit-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 12.13V10h2v.3c-.22.12-.43.26-.61.44L18 12.13M9.5 11c-.28 0-.5.22-.5.5V13h6v-1.5c0-.28-.22-.5-.5-.5h-5M6 10H4v11h7v-1.87l.13-.13H6v-9m15-1H3V3h18v6m-2-4H5v2h14V5m-6 14.96V22h2.04l6.13-6.12-2.04-2.05L13 19.96m9.85-6.49-1.32-1.32c-.2-.2-.53-.2-.72 0l-.98.98 2.04 2.04.98-.98c.2-.19.2-.52 0-.72z"/></svg>
|
After Width: | Height: | Size: 373 B |
1
material/.icons/material/archive-edit.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 10.3V8H4v13h7v-1.87l8.39-8.39c.18-.18.39-.32.61-.44M15 13H9v-1.5c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5V13m6-6H3V3h18v4m1.85 7.19-.98.98-2.04-2.04.98-.98c.19-.2.52-.2.72 0l1.32 1.32c.2.2.2.53 0 .72m-3.72-.36 2.04 2.04L15.04 22H13v-2.04l6.13-6.13z"/></svg>
|
After Width: | Height: | Size: 324 B |
1
material/.icons/material/archive-eye-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.5 11c.28 0 .5.22.5.5V13H9v-1.5c0-.28.22-.5.5-.5h5m5.5 2.55V10h-2v3.06c.69.08 1.36.25 2 .49M21 9H3V3h18v6m-2-4H5v2h14V5M8.85 19H6v-9H4v11h5.78c-.24-.39-.46-.81-.64-1.25L8.85 19M17 18c-.56 0-1 .44-1 1s.44 1 1 1 1-.44 1-1-.44-1-1-1m6 1c-.94 2.34-3.27 4-6 4s-5.06-1.66-6-4c.94-2.34 3.27-4 6-4s5.06 1.66 6 4m-3.5 0a2.5 2.5 0 0 0-5 0 2.5 2.5 0 0 0 5 0z"/></svg>
|
After Width: | Height: | Size: 428 B |
1
material/.icons/material/archive-eye.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4M9.14 19.75c.18.44.4.86.64 1.25H4V8h16v5.55c-.94-.36-1.95-.55-3-.55-3.5 0-6.57 2.06-7.86 5.25l-.29.75.29.75M9 13h6v-1.5c0-.28-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5V13m8 5c-.56 0-1 .44-1 1s.44 1 1 1 1-.44 1-1-.44-1-1-1m6 1c-.94 2.34-3.27 4-6 4s-5.06-1.66-6-4c.94-2.34 3.27-4 6-4s5.06 1.66 6 4m-3.5 0a2.5 2.5 0 0 0-5 0 2.5 2.5 0 0 0 5 0z"/></svg>
|
After Width: | Height: | Size: 423 B |
1
material/.icons/material/archive-lock-open-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.5 11c.17 0 .32.09.41.22-.35.54-.57 1.14-.65 1.78H9v-1.5c0-.28.22-.5.5-.5h5M13 19H6v-9H4v11h9.03c-.03-.1-.03-.2-.03-.3V19m8-10H3V3h18v6m-2-4H5v2h14V5m2.8 11h-4.3v-2.5c0-.8.7-1.3 1.5-1.3s1.5.5 1.5 1.3v.5h1.3v-.5c0-1.4-1.4-2.5-2.8-2.5s-2.8 1.1-2.8 2.5V16c-.6 0-1.2.6-1.2 1.2v3.5c0 .7.6 1.3 1.2 1.3h5.5c.7 0 1.3-.6 1.3-1.2v-3.5c0-.7-.6-1.3-1.2-1.3z"/></svg>
|
After Width: | Height: | Size: 426 B |
1
material/.icons/material/archive-lock-open.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4m-2 2c.34 0 .68.04 1 .11V8H4v13h9.03c-.03-.1-.03-.2-.03-.3v-3.5c0-.96.5-1.86 1.2-2.46V13.5c0-.17.04-.33.06-.5H9v-1.5c0-.28.22-.5.5-.5h5c.17 0 .32.09.41.22A4.887 4.887 0 0 1 19 9m2.8 7h-4.3v-2.5c0-.8.7-1.3 1.5-1.3s1.5.5 1.5 1.3v.5h1.3v-.5c0-1.4-1.4-2.5-2.8-2.5s-2.8 1.1-2.8 2.5V16c-.6 0-1.2.6-1.2 1.2v3.5c0 .7.6 1.3 1.2 1.3h5.5c.7 0 1.3-.6 1.3-1.2v-3.5c0-.7-.6-1.3-1.2-1.3z"/></svg>
|
After Width: | Height: | Size: 464 B |
1
material/.icons/material/archive-lock-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15 12.06c-.21.29-.36.61-.5.94H9v-1.5c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5v.56M21 9H3V3h18v6m-2-4H5v2h14V5m-6 14H6v-9H4v11h9.03c-.03-.1-.03-.2-.03-.3V19m10-1.7v3.5c0 .6-.6 1.2-1.3 1.2h-5.5c-.6 0-1.2-.6-1.2-1.3v-3.5c0-.6.6-1.2 1.2-1.2v-1.5c0-1.4 1.4-2.5 2.8-2.5s2.8 1.1 2.8 2.5V16c.6 0 1.2.6 1.2 1.3m-2.5-2.8c0-.8-.7-1.3-1.5-1.3s-1.5.5-1.5 1.3V16h3v-1.5z"/></svg>
|
After Width: | Height: | Size: 429 B |
1
material/.icons/material/archive-lock.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4M9.5 11h5c.28 0 .5.22.5.5v.56A4.922 4.922 0 0 1 19 10c.34 0 .68.04 1 .11V8H4v13h9.03c-.03-.1-.03-.2-.03-.3v-3.5c0-.96.5-1.86 1.2-2.46v-.24c0-.5.12-1.03.3-1.5H9v-1.5c0-.28.22-.5.5-.5M23 17.3v3.5c0 .6-.6 1.2-1.3 1.2h-5.5c-.6 0-1.2-.6-1.2-1.3v-3.5c0-.6.6-1.2 1.2-1.2v-1.5c0-1.4 1.4-2.5 2.8-2.5s2.8 1.1 2.8 2.5V16c.6 0 1.2.6 1.2 1.3m-2.5-2.8c0-.8-.7-1.3-1.5-1.3s-1.5.5-1.5 1.3V16h3v-1.5z"/></svg>
|
After Width: | Height: | Size: 475 B |
1
material/.icons/material/archive-marker-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.5 11c.22 0 .4.14.47.33A5.43 5.43 0 0 0 13.63 13H9v-1.5c0-.28.22-.5.5-.5h5M21 9H3V3h18v6m-2-4H5v2h14V5M6 19v-9H4v11h11.19c-.41-.6-.83-1.28-1.19-2H6m16-3.5c0 2.6-3.5 6.5-3.5 6.5S15 18.1 15 15.5c0-1.9 1.6-3.5 3.5-3.5s3.5 1.6 3.5 3.5m-2.3.1c0-.6-.6-1.2-1.2-1.2s-1.2.5-1.2 1.2c0 .6.5 1.2 1.2 1.2s1.3-.6 1.2-1.2z"/></svg>
|
After Width: | Height: | Size: 388 B |
1
material/.icons/material/archive-marker.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4m-7.37 6H9v-1.5c0-.28.22-.5.5-.5h5c.22 0 .4.14.47.33.96-.83 2.2-1.33 3.53-1.33.5 0 1 .08 1.5.22V8H4v13h11.19C14.12 19.43 13 17.35 13 15.5c0-.89.23-1.74.63-2.5M22 15.5c0 2.6-3.5 6.5-3.5 6.5S15 18.1 15 15.5c0-1.9 1.6-3.5 3.5-3.5s3.5 1.6 3.5 3.5m-2.3.1c0-.6-.6-1.2-1.2-1.2s-1.2.5-1.2 1.2c0 .6.5 1.2 1.2 1.2s1.3-.6 1.2-1.2z"/></svg>
|
After Width: | Height: | Size: 411 B |
1
material/.icons/material/archive-minus-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 19c0 .7.13 1.37.35 2H4V10h2v9h7m6-6c.34 0 .67.04 1 .09V10h-2v3.09c.33-.05.66-.09 1-.09m-9.5-2c-.28 0-.5.22-.5.5V13h6v-1.5c0-.28-.22-.5-.5-.5h-5M21 9H3V3h18v6m-2-4H5v2h14V5m-4 13v2h8v-2h-8z"/></svg>
|
After Width: | Height: | Size: 270 B |
1
material/.icons/material/archive-minus.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 13c.34 0 .67.04 1 .09V8H4v13h9.35c-.22-.63-.35-1.3-.35-2 0-3.31 2.69-6 6-6M9 13v-1.5c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5V13H9m12-6H3V3h18v4m2 11v2h-8v-2h8z"/></svg>
|
After Width: | Height: | Size: 236 B |
1
material/.icons/material/archive-music-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 3H3v6h18V3m-2 4H5V5h14v2m-1 4v-1h2v1h-2m-3.5 0c.28 0 .5.22.5.5V13H9v-1.5c0-.28.22-.5.5-.5h5m-1.24 8c-.17.47-.26.97-.26 1.5 0 .17 0 .34.03.5H4V10h2v9h7.26M22 13v2h-2v5.5a2.5 2.5 0 0 1-5 0 2.5 2.5 0 0 1 3.5-2.29V13H22z"/></svg>
|
After Width: | Height: | Size: 298 B |
1
material/.icons/material/archive-music.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.5 16.11V11H20V8H4v13h9.03c-.03-.16-.03-.33-.03-.5 0-2.14 1.5-3.93 3.5-4.39M9 13v-1.5c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5V13H9m12-6H3V3h18v4m1 6v2h-2v5.5a2.5 2.5 0 0 1-5 0 2.5 2.5 0 0 1 3.5-2.29V13H22z"/></svg>
|
After Width: | Height: | Size: 281 B |
1
material/.icons/material/archive-off-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m8.2 5-2-2H21v6h-8.8l-2-2H19V5H8.2M20 16.8V10h-2v4.8l2 2m0 2.55v-.01l-2-2v.01L9.66 9l-2-2-1.53-1.53-3.74-3.74L1.11 3 3 4.89V9h4.11l10 10H6v-9H4v11h15.11l1.73 1.73 1.27-1.27L20 19.35z"/></svg>
|
After Width: | Height: | Size: 260 B |
1
material/.icons/material/archive-off.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m10.2 7-4-4H21v4H10.2M20 8h-8.8l8.8 8.8V8m0 11.35v-.01L8.66 8l-1-1-5.27-5.27L1.11 3 3 4.89V7h2.11l1 1H4v13h15.11l1.73 1.73 1.27-1.27L20 19.35z"/></svg>
|
After Width: | Height: | Size: 220 B |
1
material/.icons/material/archive-plus-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 13.09V10h2v3.09c-.33-.05-.66-.09-1-.09-.34 0-.67.04-1 .09M9.5 11c-.28 0-.5.22-.5.5V13h6v-1.5c0-.28-.22-.5-.5-.5h-5M21 9H3V3h18v6m-2-4H5v2h14V5M6 19v-9H4v11h9.35c-.22-.63-.35-1.3-.35-2H6m14-1v-3h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/></svg>
|
After Width: | Height: | Size: 303 B |
1
material/.icons/material/archive-plus.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4m-8 12c0 .7.13 1.37.35 2H4V8h16v5.09c-.33-.05-.66-.09-1-.09-3.31 0-6 2.69-6 6m2-6v-1.5c0-.28-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5V13h6m5 5v-3h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/></svg>
|
After Width: | Height: | Size: 258 B |
1
material/.icons/material/archive-refresh-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 12.03V10h2v2.18c-.5-.11-1-.18-1.5-.18-.17 0-.33 0-.5.03M9.5 11c-.28 0-.5.22-.5.5V13h6v-1.5c0-.28-.22-.5-.5-.5h-5M6 19v-9H4v11h8.5c-.26-.62-.41-1.3-.47-2H6M21 9H3V3h18v6m-2-4H5v2h14V5m3 13.5v-4l-1.17 1.17A3.99 3.99 0 0 0 18 14.5c-2.21 0-4 1.79-4 4s1.79 4 4 4c1.68 0 3.12-1.03 3.71-2.5H20a2.5 2.5 0 1 1-.23-3.27L18 18.5h4z"/></svg>
|
After Width: | Height: | Size: 402 B |
1
material/.icons/material/archive-refresh.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.5 12c.5 0 1 .07 1.5.18V8H4v13h8.5a6.5 6.5 0 0 1 6-9M9 13v-1.5c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5V13H9m12-6H3V3h18v4m-3 11.5 1.77-1.77A2.5 2.5 0 1 0 20 20h1.71A3.991 3.991 0 0 1 18 22.5c-2.21 0-4-1.79-4-4s1.79-4 4-4c1.11 0 2.11.45 2.83 1.17L22 14.5v4h-4z"/></svg>
|
After Width: | Height: | Size: 335 B |
1
material/.icons/material/archive-remove-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 13.09V10h2v3.09c-.33-.05-.66-.09-1-.09-.34 0-.67.04-1 .09M14.5 11h-5c-.28 0-.5.22-.5.5V13h6v-1.5c0-.28-.22-.5-.5-.5M6 19v-9H4v11h9.35c-.22-.63-.35-1.3-.35-2H6M21 9H3V3h18v6m-2-4H5v2h14V5m3.54 11.88-1.42-1.41L19 17.59l-2.12-2.12-1.41 1.41L17.59 19l-2.12 2.12 1.41 1.42L19 20.41l2.12 2.13 1.42-1.42L20.41 19l2.13-2.12z"/></svg>
|
After Width: | Height: | Size: 398 B |
1
material/.icons/material/archive-remove.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4m-8 12c0 .7.13 1.37.35 2H4V8h16v5.09c-.33-.05-.66-.09-1-.09-3.31 0-6 2.69-6 6m2-6v-1.5c0-.28-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5V13h6m7.54 3.88-1.42-1.41L19 17.59l-2.12-2.12-1.41 1.41L17.59 19l-2.12 2.12 1.41 1.42L19 20.41l2.12 2.13 1.42-1.42L20.41 19l2.13-2.12z"/></svg>
|
After Width: | Height: | Size: 352 B |
1
material/.icons/material/archive-search-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.04 10c-.4.25-.78.55-1.14.9-.33.34-.63.71-.87 1.1H8v-1.5c0-.28.22-.5.5-.5h4.54M20 8H2V2h18v6m-2-4H4v2h14V4M5 18V9H3v11h8.82a6.44 6.44 0 0 1-1.32-2H5m18.39 3L22 22.39l-3.12-3.07c-.69.43-1.51.68-2.38.68-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5c0 .88-.25 1.71-.69 2.4l3.08 3.1M19 15.5a2.5 2.5 0 0 0-5 0 2.5 2.5 0 0 0 5 0z"/></svg>
|
After Width: | Height: | Size: 406 B |
1
material/.icons/material/archive-search.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 6H2V2h18v4m-8.97 6H8v-1.5c0-.28.22-.5.5-.5h4.54c1.8-1.13 4.03-1.3 5.96-.5V7H3v13h8.82c-2.12-2.2-2.38-5.5-.79-8m12.36 9L22 22.39l-3.12-3.07c-.69.43-1.51.68-2.38.68-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5c0 .88-.25 1.71-.69 2.4l3.08 3.1M19 15.5a2.5 2.5 0 0 0-5 0 2.5 2.5 0 0 0 5 0z"/></svg>
|
After Width: | Height: | Size: 369 B |
1
material/.icons/material/archive-settings-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 2v6h18V2H3m16 4H5V4h14v2m-1 3h2v11H4V9h2v9h12V9m-3 1.5V12H9v-1.5c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5M7 22h2v2H7v-2m4 0h2v2h-2v-2m4 0h2v2h-2v-2z"/></svg>
|
After Width: | Height: | Size: 223 B |
1
material/.icons/material/archive-settings.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 2v4H3V2h18M4 7h16v13H4V7m5 5h6v-1.5c0-.28-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5V12M7 24h2v-2H7v2m4 0h2v-2h-2v2m4 0h2v-2h-2v2z"/></svg>
|
After Width: | Height: | Size: 203 B |
1
material/.icons/material/archive-star-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 13.09V10h2v3.09c-.33-.05-.66-.09-1-.09-.34 0-.67.04-1 .09M9.5 11c-.28 0-.5.22-.5.5V13h6v-1.5c0-.28-.22-.5-.5-.5h-5M6 19v-9H4v11h9.35c-.22-.63-.35-1.3-.35-2H6M21 9H3V3h18v6m-2-4H5v2h14V5m4 12.89-2.89-.25L19 15l-1.13 2.64-2.87.25 2.18 1.88-.68 2.81 2.5-1.49 2.45 1.49-.65-2.81 2.2-1.88z"/></svg>
|
After Width: | Height: | Size: 366 B |
1
material/.icons/material/archive-star.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4m-8 12c0 .7.13 1.37.35 2H4V8h16v5.09c-.33-.05-.66-.09-1-.09-3.31 0-6 2.69-6 6m2-6v-1.5c0-.28-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5V13h6m8 4.89-2.89-.25L19 15l-1.13 2.64-2.87.25 2.18 1.88-.68 2.81 2.5-1.49 2.45 1.49-.65-2.81 2.2-1.88z"/></svg>
|
After Width: | Height: | Size: 321 B |
1
material/.icons/material/archive-sync-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 11.18V10h2v1.03c-.16-.03-.33-.03-.5-.03-.5 0-1 .07-1.5.18m-3 .32c0-.28-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5V13h5.82l.18-.18V11.5M6 19v-9H4v11h10.03c-.39-.61-.68-1.28-.85-2H6M21 9H3V3h18v6m-2-4H5v2h14V5m0 8.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20z"/></svg>
|
After Width: | Height: | Size: 534 B |
1
material/.icons/material/archive-sync.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7H3V3h18v4M9.5 11h5c.28 0 .5.22.5.5v1.32A6.444 6.444 0 0 1 19.5 11c.17 0 .34 0 .5.03V8H4v13h10.03A6.42 6.42 0 0 1 13 17.5c0-1.75.69-3.33 1.82-4.5H9v-1.5c0-.28.22-.5.5-.5m9.5 2.5V12l-2.25 2.25L19 16.5V15a2.5 2.5 0 0 1 2.5 2.5c0 .4-.09.78-.26 1.12l1.09 1.09c.42-.63.67-1.39.67-2.21 0-2.21-1.79-4-4-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5c0-.4.09-.78.26-1.12l-1.09-1.09c-.42.63-.67 1.39-.67 2.21 0 2.21 1.79 4 4 4V23l2.25-2.25L19 18.5V20z"/></svg>
|
After Width: | Height: | Size: 507 B |