jekyll-icon-flow 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +20 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +166 -0
  5. data/assets/icons/lucide/arrow-down.svg +16 -0
  6. data/assets/icons/lucide/arrow-left.svg +16 -0
  7. data/assets/icons/lucide/arrow-right.svg +16 -0
  8. data/assets/icons/lucide/arrow-up.svg +16 -0
  9. data/assets/icons/lucide/calendar.svg +18 -0
  10. data/assets/icons/lucide/check.svg +15 -0
  11. data/assets/icons/lucide/chevron-down.svg +15 -0
  12. data/assets/icons/lucide/chevron-left.svg +15 -0
  13. data/assets/icons/lucide/chevron-right.svg +15 -0
  14. data/assets/icons/lucide/chevron-up.svg +15 -0
  15. data/assets/icons/lucide/copy.svg +16 -0
  16. data/assets/icons/lucide/download.svg +17 -0
  17. data/assets/icons/lucide/external-link.svg +17 -0
  18. data/assets/icons/lucide/file-text.svg +19 -0
  19. data/assets/icons/lucide/folder.svg +15 -0
  20. data/assets/icons/lucide/home.svg +16 -0
  21. data/assets/icons/lucide/info.svg +17 -0
  22. data/assets/icons/lucide/link.svg +16 -0
  23. data/assets/icons/lucide/mail.svg +16 -0
  24. data/assets/icons/lucide/map-pin.svg +16 -0
  25. data/assets/icons/lucide/map.svg +17 -0
  26. data/assets/icons/lucide/menu.svg +17 -0
  27. data/assets/icons/lucide/moon.svg +15 -0
  28. data/assets/icons/lucide/printer.svg +17 -0
  29. data/assets/icons/lucide/rss.svg +17 -0
  30. data/assets/icons/lucide/search.svg +16 -0
  31. data/assets/icons/lucide/sun.svg +23 -0
  32. data/assets/icons/lucide/tag.svg +16 -0
  33. data/assets/icons/lucide/triangle-alert.svg +17 -0
  34. data/assets/icons/lucide/x.svg +16 -0
  35. data/assets/icons/simple/bluesky.svg +1 -0
  36. data/assets/icons/simple/discord.svg +1 -0
  37. data/assets/icons/simple/facebook.svg +1 -0
  38. data/assets/icons/simple/github.svg +1 -0
  39. data/assets/icons/simple/instagram.svg +1 -0
  40. data/assets/icons/simple/mastodon.svg +1 -0
  41. data/assets/icons/simple/medium.svg +1 -0
  42. data/assets/icons/simple/rss.svg +1 -0
  43. data/assets/icons/simple/spotify.svg +1 -0
  44. data/assets/icons/simple/telegram.svg +1 -0
  45. data/assets/icons/simple/tiktok.svg +1 -0
  46. data/assets/icons/simple/x.svg +1 -0
  47. data/assets/icons/simple/youtube.svg +1 -0
  48. data/lib/jekyll/icon_flow/adapter.rb +144 -0
  49. data/lib/jekyll/icon_flow/adapters/custom.rb +38 -0
  50. data/lib/jekyll/icon_flow/adapters/lucide.rb +28 -0
  51. data/lib/jekyll/icon_flow/adapters/simple.rb +28 -0
  52. data/lib/jekyll/icon_flow/error.rb +7 -0
  53. data/lib/jekyll/icon_flow/icon_ref_tag.rb +46 -0
  54. data/lib/jekyll/icon_flow/icon_tag.rb +156 -0
  55. data/lib/jekyll/icon_flow/svg_reader.rb +29 -0
  56. data/lib/jekyll/icon_flow/version.rb +7 -0
  57. data/lib/jekyll/icon_flow.rb +36 -0
  58. data/lib/jekyll-icon-flow.rb +3 -0
  59. metadata +124 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 50bc9f6ba8e7a4c5f5fec2258b1406d84bcf29c78260f0ff121721fdb394e0f7
4
+ data.tar.gz: 7e39f30d73f7a9086b82885505e32b15ab2808b679b680f346556783200aee95
5
+ SHA512:
6
+ metadata.gz: dae8008fcc131500e9c8011226d09b4009e3f887e4eabf1ef552a5a5812fcbdeb5892519b0560c79d53eab28cd8e4ac83937f4454d1c377c7341ce7eaa60f522
7
+ data.tar.gz: 5e120215a75ccc1b1b384d845630ed4e7160cd8f83f6341444af89f1d98fb3b1ff5b8d1571277e76abfd5eeae9d3be9978b0178daa98756a5f6d45a62baf5080
data/CHANGELOG.md ADDED
@@ -0,0 +1,20 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0] - 2026-10-04
4
+
5
+ - `{% icon %}` + per-pack `{% icon_<pack> %}` Liquid tags (lucide,
6
+ simple-icons, custom dir) with fleet-convention aliases
7
+ (`{% lucide_icon %}` etc.)
8
+ - `{% icon_ref <key> %}` — semantic names resolved through
9
+ `icon_flow.registry` (`pack:name[:class]` entries)
10
+ - Normalized output contract: `icon icon-<name>` classes, `currentColor`,
11
+ `data-icon-pack` hook, inline em-based sizing with a named scale
12
+ (`xxs`–`xxl`, default `m` = 1em line-height) or a literal CSS size
13
+ - `{% icon %}` searches packs in order (default custom → simple → lucide)
14
+ instead of a single default pack; `pack:`/`icon_flow.pack` pin to one pack
15
+ - `icon_flow.packs` — named extra packs from site directories of `.svg`
16
+ files (fontawesome, tabler, …), usable via `pack:`, the search chain,
17
+ and `icon_ref` registry targets
18
+ - `icon_flow.on_missing: warn|strict` — warn + empty render by default
19
+ - Escape Liquid-supplied SVG attributes, validate icon sizes, and normalize child SVG colors.
20
+ - RSpec integration/adapter contracts, coverage reporting, Semgrep and gem-artifact checks.
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ GNU AFFERO GENERAL PUBLIC LICENSE
2
+ Version 3, 19 November 2007
3
+
4
+ Copyright (C) 2026 Svend Gundestrup
5
+
6
+ This project is free software: you can redistribute it and/or modify it under
7
+ the terms of the GNU Affero General Public License as published by the Free
8
+ Software Foundation, either version 3 of the License, or (at your option) any
9
+ later version.
10
+
11
+ This project is distributed in the hope that it will be useful, but WITHOUT
12
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
14
+ details.
15
+
16
+ You should have received a copy of the GNU Affero General Public License along
17
+ with this project. If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.
18
+
19
+ The complete license text is available from the Free Software Foundation at:
20
+ https://www.gnu.org/licenses/agpl-3.0.txt
21
+
22
+ SPDX-License-Identifier: AGPL-3.0-or-later
data/README.md ADDED
@@ -0,0 +1,166 @@
1
+ # jekyll-icon-flow
2
+
3
+ [![CI](https://github.com/gundestrup/jekyll-icon-flow/actions/workflows/ci.yml/badge.svg)](https://github.com/gundestrup/jekyll-icon-flow/actions/workflows/ci.yml)
4
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/gundestrup/jekyll-icon-flow)
5
+ [![Codecov](https://codecov.io/gh/gundestrup/jekyll-icon-flow/graph/badge.svg)](https://codecov.io/gh/gundestrup/jekyll-icon-flow)
6
+ [![SonarCloud: setup pending](https://img.shields.io/badge/SonarCloud-setup%20pending-orange)](https://sonarcloud.io/dashboard?id=gundestrup_jekyll-icon-flow)
7
+
8
+ Pack-agnostic inline SVG icons for Jekyll via Liquid tags. Each icon pack
9
+ is an adapter that resolves names to SVG sources and normalizes the output —
10
+ so switching packs changes the icon, not your styling.
11
+
12
+ ## Install
13
+
14
+ ```ruby
15
+ # Gemfile
16
+ group :jekyll_plugins do
17
+ gem "jekyll-icon-flow"
18
+ end
19
+ ```
20
+
21
+ ```yaml
22
+ # _config.yml
23
+ plugins:
24
+ - jekyll-icon-flow
25
+ ```
26
+
27
+ ## Usage
28
+
29
+ ```liquid
30
+ {% icon search %} → default pack (icon_flow.pack)
31
+ {% icon_lucide "file-text" size:1.5em class:"has-text-link" %}
32
+ {% icon_simple github %}
33
+ {% icon_custom logo %}
34
+ ```
35
+
36
+ Fleet-convention aliases also work (`{% lucide_icon %}`, `{% simple_icon %}`,
37
+ `{% custom_icon %}`) — templates written for `jekyll-lucide` drop in
38
+ unchanged.
39
+
40
+ Same-name collisions across packs are disambiguated by the tag name —
41
+ `{% icon_lucide arrow-right %}` and `{% icon_custom arrow-right %}` can
42
+ coexist. Swap `icon_lucide` for `icon_simple` and the icon changes while
43
+ `size:`/`class:`/`title:` styling stays identical.
44
+
45
+ ### Parameters
46
+
47
+ | Param | Default | Effect |
48
+ |---|---|---|
49
+ | `size:` | `m` (`1em`) | Named size `xxs`/`xs`/`s`/`m`/`l`/`xl`/`xxl` (0.5/0.75/0.875/1/1.25/1.5/2 em — relative, so icons scale with surrounding text; default `m` = 1em fits the line height) or a nonnegative CSS length (`px`, `em`, `rem`, `%`, `vw`, `vh`, `vmin`, `vmax`, `ch`, `ex`) or `0`, applied to `width`/`height` |
50
+ | `class:` | — | merged onto the `<svg>` alongside `icon icon-<name>` |
51
+ | `title:` | — | accessible label, rendered as `<title>` in the SVG |
52
+ | `pack:` | config | only on `{% icon %}` — pick a pack explicitly |
53
+
54
+ ## Semantic icon names — `{% icon_ref %}`
55
+
56
+ The central-registry pattern: call sites name *intent*, one map picks the
57
+ library icon. Swap a pack and every usage follows — no template grep.
58
+
59
+ ```yaml
60
+ icon_flow:
61
+ registry:
62
+ download: lucide:arrow-down
63
+ github: simple:github
64
+ danger: lucide:triangle-alert:has-text-danger # 3rd field merges into class
65
+ ```
66
+
67
+ ```liquid
68
+ {% icon_ref download %}
69
+ {% icon_ref danger size:1.5em %}
70
+ ```
71
+
72
+ ## Packs
73
+
74
+ | Tag | Pack | License | Notes |
75
+ |---|---|---|---|
76
+ | `icon_lucide` / `lucide_icon` | [Lucide](https://lucide.dev) | ISC | UI icons, stroke style |
77
+ | `icon_simple` / `simple_icon` | [simple-icons](https://simpleicons.org) | CC0 | brand logos, fill style |
78
+ | `icon_custom` / `custom_icon` | your files | — | `icon_flow.custom_dir`, e.g. [svgrepo](https://www.svgrepo.com/) downloads (keep `-svgrepo-com.svg` attribution in filenames, per the fleet convention) |
79
+
80
+ The gem vendors a curated subset of lucide and simple-icons. Add icons
81
+ beyond the subset — or shadow any vendored icon — by dropping SVGs into
82
+ your custom dir and reaching them via `{% icon_custom %}`.
83
+
84
+ Extra packs you download wholesale (Font Awesome, Tabler, Heroicons…) get
85
+ a named pack via `icon_flow.packs` instead of mixing into the custom dir:
86
+
87
+ ```yaml
88
+ icon_flow:
89
+ packs:
90
+ fontawesome: assets/icons/fontawesome # dir of *.svg
91
+ tabler: vendor/tabler/icons
92
+ ```
93
+
94
+ Named packs work through `pack:` (`{% icon bars pack:fontawesome %}`), the
95
+ `{% icon %}` search chain, and `icon_flow.registry` targets
96
+ (`menu: tabler:menu`). Liquid registers tag names statically, so named
97
+ packs have no `{% icon_fontawesome %}` tag — use `{% icon %}` or
98
+ `{% icon_ref %}`.
99
+
100
+ ## `{% icon %}` resolution order
101
+
102
+ The generic tag searches packs in order and renders the first hit —
103
+ default chain **custom → simple → lucide**, so `{% icon github %}` finds
104
+ the brand icon and `{% icon search %}` finds the lucide one without any
105
+ `pack:`. On collisions the earlier pack wins (`x` and `rss` exist in both
106
+ bundled packs → simple wins by default; bound tags like
107
+ `{% icon_lucide x %}` are unaffected). Pins override the chain:
108
+ `{% icon name pack:simple %}` or a configured `icon_flow.pack` restrict
109
+ the lookup to that one pack.
110
+
111
+ ## Config
112
+
113
+ ```yaml
114
+ icon_flow:
115
+ enabled: true # false = all icon tags render nothing
116
+ pack: null # pin {% icon %} to one pack; null = search chain
117
+ search: [custom, simple, lucide] # {% icon %} resolution order (default shown)
118
+ custom_dir: assets/icons/custom # site-relative dir for icon_custom
119
+ packs: {} # name → site-relative dir of *.svg
120
+ on_missing: warn # warn (log + render "") | strict (raise)
121
+ registry: {} # semantic_name → "pack:icon[:class]"
122
+ ```
123
+
124
+ ## Output contract
125
+
126
+ Every icon renders normalized SVG:
127
+
128
+ ```html
129
+ <svg class="icon icon-search" data-icon-pack="lucide" role="img"
130
+ style="width:1em;height:1em" …>
131
+ ```
132
+
133
+ - `width`/`height` attributes are stripped; size comes from inline style
134
+ - `stroke`/`fill` normalized to `currentColor` per the pack's color model
135
+ (`:stroke`, `:fill`, or `:auto`); custom SVG attributes on child elements
136
+ are recolored except `none` and `url(...)` references. Inline CSS styles
137
+ and embedded stylesheets in custom SVGs are site-owned and are not rewritten
138
+ - `icon icon-<name>` classes + `data-icon-pack` give stable CSS hooks
139
+ that survive a pack switch
140
+ - missing/invalid icons warn via `Jekyll.logger` and render `""`
141
+ (`on_missing: strict` fails the build instead)
142
+
143
+ ## Adding a pack
144
+
145
+ 1. Create `lib/jekyll/icon_flow/adapters/<pack>.rb` subclassing `Adapter`
146
+ (`pack_name`, `path_for`, `icons_dir`, `COLOR_MODEL`).
147
+ 2. Register it in `IconFlow::ADAPTERS` in `lib/jekyll/icon_flow.rb`.
148
+ 3. `{% icon_<pack> %}` and `{% <pack>_icon %}` are registered automatically.
149
+
150
+ ## Development and release checks
151
+
152
+ Run `bundle exec rake ci` for RuboCop, dependency audit, local Semgrep rules,
153
+ RSpec with SimpleCov and packaged-gem contents. Coverage is written to
154
+ `coverage/index.html` locally and `coverage/coverage.xml` in CI for Codecov.
155
+ `COVERAGE=false bundle exec rspec` skips instrumentation during focused work.
156
+ Run `bundle exec rake "version:bump[patch]"` to update the gem version and
157
+ lockfile, then add a dated changelog entry before
158
+ `bundle exec rake version:pre_release`. Publishing requires configuring the
159
+ GitHub `release` environment and RubyGems trusted publishing first.
160
+ The SonarCloud badge remains pending until the repository is onboarded; its
161
+ vendored icons are excluded in `.sonarcloud.properties`.
162
+
163
+ ## License
164
+
165
+ AGPL-3.0-or-later. Vendored icons keep their own licenses
166
+ (lucide: ISC; simple-icons: CC0-1.0).
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-arrow-down"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M12 5v14" />
15
+ <path d="m19 12-7 7-7-7" />
16
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-arrow-left"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="m12 19-7-7 7-7" />
15
+ <path d="M19 12H5" />
16
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-arrow-right"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M5 12h14" />
15
+ <path d="m12 5 7 7-7 7" />
16
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-arrow-up"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="m5 12 7-7 7 7" />
15
+ <path d="M12 19V5" />
16
+ </svg>
@@ -0,0 +1,18 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-calendar"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M8 2v3" />
15
+ <path d="M16 2v3" />
16
+ <rect x="3" y="3" width="18" height="18" rx="2" />
17
+ <path d="M3 9h18" />
18
+ </svg>
@@ -0,0 +1,15 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-check"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M20 6 9 17l-5-5" />
15
+ </svg>
@@ -0,0 +1,15 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-chevron-down"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="m6 9 6 6 6-6" />
15
+ </svg>
@@ -0,0 +1,15 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-chevron-left"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="m15 18-6-6 6-6" />
15
+ </svg>
@@ -0,0 +1,15 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-chevron-right"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="m9 18 6-6-6-6" />
15
+ </svg>
@@ -0,0 +1,15 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-chevron-up"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="m18 15-6-6-6 6" />
15
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-copy"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
15
+ <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
16
+ </svg>
@@ -0,0 +1,17 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-download"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M12 15V3" />
15
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
16
+ <path d="m7 10 5 5 5-5" />
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-external-link"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M15 3h6v6" />
15
+ <path d="M10 14 21 3" />
16
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
17
+ </svg>
@@ -0,0 +1,19 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-file-text"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" />
15
+ <path d="M14 2v5a1 1 0 0 0 1 1h5" />
16
+ <path d="M10 9H8" />
17
+ <path d="M16 13H8" />
18
+ <path d="M16 17H8" />
19
+ </svg>
@@ -0,0 +1,15 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-folder"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" />
15
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-home"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" />
15
+ <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
16
+ </svg>
@@ -0,0 +1,17 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-info"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <circle cx="12" cy="12" r="10" />
15
+ <path d="M12 16v-4" />
16
+ <path d="M12 8h.01" />
17
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-link"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" />
15
+ <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />
16
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-mail"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" />
15
+ <rect x="2" y="4" width="20" height="16" rx="2" />
16
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-map-pin"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0" />
15
+ <circle cx="12" cy="10" r="3" />
16
+ </svg>
@@ -0,0 +1,17 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-map"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z" />
15
+ <path d="M15 5.764v15" />
16
+ <path d="M9 3.236v15" />
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-menu"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M4 5h16" />
15
+ <path d="M4 12h16" />
16
+ <path d="M4 19h16" />
17
+ </svg>
@@ -0,0 +1,15 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-moon"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" />
15
+ </svg>
@@ -0,0 +1,17 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-printer"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2" />
15
+ <path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6" />
16
+ <rect x="6" y="14" width="12" height="8" rx="1" />
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <!-- @license lucide-static v1.48.0 - ISC -->
2
+ <svg
3
+ class="lucide lucide-rss"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M4 11a9 9 0 0 1 9 9" />
15
+ <path d="M4 4a16 16 0 0 1 16 16" />
16
+ <circle cx="5" cy="19" r="1" />
17
+ </svg>