zensical 0.0.9__cp310-abi3-musllinux_1_2_i686.whl → 0.0.17__cp310-abi3-musllinux_1_2_i686.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of zensical might be problematic. Click here for more details.

Files changed (310) hide show
  1. zensical/__init__.py +6 -6
  2. zensical/__main__.py +2 -2
  3. zensical/bootstrap/.github/workflows/docs.yml +1 -0
  4. zensical/bootstrap/zensical.toml +6 -6
  5. zensical/config.py +223 -201
  6. zensical/extensions/__init__.py +2 -2
  7. zensical/extensions/emoji.py +22 -27
  8. zensical/extensions/links.py +21 -25
  9. zensical/extensions/preview.py +29 -41
  10. zensical/extensions/search.py +83 -83
  11. zensical/extensions/utilities/__init__.py +2 -2
  12. zensical/extensions/utilities/filter.py +5 -10
  13. zensical/main.py +35 -48
  14. zensical/markdown.py +82 -21
  15. zensical/templates/.icons/lucide/LICENSE +39 -0
  16. zensical/templates/.icons/lucide/ampersand.svg +1 -1
  17. zensical/templates/.icons/lucide/anchor.svg +1 -1
  18. zensical/templates/.icons/lucide/balloon.svg +1 -0
  19. zensical/templates/.icons/lucide/birdhouse.svg +1 -0
  20. zensical/templates/.icons/lucide/book-search.svg +1 -0
  21. zensical/templates/.icons/lucide/brush-cleaning.svg +1 -1
  22. zensical/templates/.icons/lucide/bubbles.svg +1 -1
  23. zensical/templates/.icons/lucide/calendar-fold.svg +1 -1
  24. zensical/templates/.icons/lucide/calendars.svg +1 -0
  25. zensical/templates/.icons/lucide/cannabis-off.svg +1 -0
  26. zensical/templates/.icons/lucide/chess-bishop.svg +1 -0
  27. zensical/templates/.icons/lucide/chess-king.svg +1 -0
  28. zensical/templates/.icons/lucide/chess-knight.svg +1 -0
  29. zensical/templates/.icons/lucide/chess-pawn.svg +1 -0
  30. zensical/templates/.icons/lucide/chess-queen.svg +1 -0
  31. zensical/templates/.icons/lucide/chess-rook.svg +1 -0
  32. zensical/templates/.icons/lucide/circle-pile.svg +1 -0
  33. zensical/templates/.icons/lucide/clock-check.svg +1 -0
  34. zensical/templates/.icons/lucide/cloud-backup.svg +1 -0
  35. zensical/templates/.icons/lucide/cloud-sync.svg +1 -0
  36. zensical/templates/.icons/lucide/file-archive.svg +1 -1
  37. zensical/templates/.icons/lucide/file-audio-2.svg +1 -1
  38. zensical/templates/.icons/lucide/file-audio.svg +1 -1
  39. zensical/templates/.icons/lucide/file-axis-3-d.svg +1 -1
  40. zensical/templates/.icons/lucide/file-axis-3d.svg +1 -1
  41. zensical/templates/.icons/lucide/file-badge-2.svg +1 -1
  42. zensical/templates/.icons/lucide/file-badge.svg +1 -1
  43. zensical/templates/.icons/lucide/file-bar-chart-2.svg +1 -1
  44. zensical/templates/.icons/lucide/file-bar-chart.svg +1 -1
  45. zensical/templates/.icons/lucide/file-box.svg +1 -1
  46. zensical/templates/.icons/lucide/file-braces-corner.svg +1 -0
  47. zensical/templates/.icons/lucide/file-braces.svg +1 -0
  48. zensical/templates/.icons/lucide/file-chart-column-increasing.svg +1 -1
  49. zensical/templates/.icons/lucide/file-chart-column.svg +1 -1
  50. zensical/templates/.icons/lucide/file-chart-line.svg +1 -1
  51. zensical/templates/.icons/lucide/file-chart-pie.svg +1 -1
  52. zensical/templates/.icons/lucide/file-check-2.svg +1 -1
  53. zensical/templates/.icons/lucide/file-check-corner.svg +1 -0
  54. zensical/templates/.icons/lucide/file-check.svg +1 -1
  55. zensical/templates/.icons/lucide/file-clock.svg +1 -1
  56. zensical/templates/.icons/lucide/file-code-2.svg +1 -1
  57. zensical/templates/.icons/lucide/file-code-corner.svg +1 -0
  58. zensical/templates/.icons/lucide/file-code.svg +1 -1
  59. zensical/templates/.icons/lucide/file-cog-2.svg +1 -1
  60. zensical/templates/.icons/lucide/file-cog.svg +1 -1
  61. zensical/templates/.icons/lucide/file-diff.svg +1 -1
  62. zensical/templates/.icons/lucide/file-digit.svg +1 -1
  63. zensical/templates/.icons/lucide/file-down.svg +1 -1
  64. zensical/templates/.icons/lucide/file-edit.svg +1 -1
  65. zensical/templates/.icons/lucide/file-exclamation-point.svg +1 -0
  66. zensical/templates/.icons/lucide/file-headphone.svg +1 -0
  67. zensical/templates/.icons/lucide/file-heart.svg +1 -1
  68. zensical/templates/.icons/lucide/file-image.svg +1 -1
  69. zensical/templates/.icons/lucide/file-input.svg +1 -1
  70. zensical/templates/.icons/lucide/file-json-2.svg +1 -1
  71. zensical/templates/.icons/lucide/file-json.svg +1 -1
  72. zensical/templates/.icons/lucide/file-key-2.svg +1 -1
  73. zensical/templates/.icons/lucide/file-key.svg +1 -1
  74. zensical/templates/.icons/lucide/file-line-chart.svg +1 -1
  75. zensical/templates/.icons/lucide/file-lock-2.svg +1 -1
  76. zensical/templates/.icons/lucide/file-lock.svg +1 -1
  77. zensical/templates/.icons/lucide/file-minus-2.svg +1 -1
  78. zensical/templates/.icons/lucide/file-minus-corner.svg +1 -0
  79. zensical/templates/.icons/lucide/file-minus.svg +1 -1
  80. zensical/templates/.icons/lucide/file-music.svg +1 -1
  81. zensical/templates/.icons/lucide/file-output.svg +1 -1
  82. zensical/templates/.icons/lucide/file-pen-line.svg +1 -1
  83. zensical/templates/.icons/lucide/file-pen.svg +1 -1
  84. zensical/templates/.icons/lucide/file-pie-chart.svg +1 -1
  85. zensical/templates/.icons/lucide/file-play.svg +1 -1
  86. zensical/templates/.icons/lucide/file-plus-2.svg +1 -1
  87. zensical/templates/.icons/lucide/file-plus-corner.svg +1 -0
  88. zensical/templates/.icons/lucide/file-plus.svg +1 -1
  89. zensical/templates/.icons/lucide/file-question-mark.svg +1 -1
  90. zensical/templates/.icons/lucide/file-question.svg +1 -1
  91. zensical/templates/.icons/lucide/file-scan.svg +1 -1
  92. zensical/templates/.icons/lucide/file-search-2.svg +1 -1
  93. zensical/templates/.icons/lucide/file-search-corner.svg +1 -0
  94. zensical/templates/.icons/lucide/file-search.svg +1 -1
  95. zensical/templates/.icons/lucide/file-signal.svg +1 -0
  96. zensical/templates/.icons/lucide/file-signature.svg +1 -1
  97. zensical/templates/.icons/lucide/file-sliders.svg +1 -1
  98. zensical/templates/.icons/lucide/file-spreadsheet.svg +1 -1
  99. zensical/templates/.icons/lucide/file-symlink.svg +1 -1
  100. zensical/templates/.icons/lucide/file-terminal.svg +1 -1
  101. zensical/templates/.icons/lucide/file-text.svg +1 -1
  102. zensical/templates/.icons/lucide/file-type-2.svg +1 -1
  103. zensical/templates/.icons/lucide/file-type-corner.svg +1 -0
  104. zensical/templates/.icons/lucide/file-type.svg +1 -1
  105. zensical/templates/.icons/lucide/file-up.svg +1 -1
  106. zensical/templates/.icons/lucide/file-user.svg +1 -1
  107. zensical/templates/.icons/lucide/file-video-2.svg +1 -1
  108. zensical/templates/.icons/lucide/file-video-camera.svg +1 -1
  109. zensical/templates/.icons/lucide/file-video.svg +1 -1
  110. zensical/templates/.icons/lucide/file-volume-2.svg +1 -1
  111. zensical/templates/.icons/lucide/file-volume.svg +1 -1
  112. zensical/templates/.icons/lucide/file-warning.svg +1 -1
  113. zensical/templates/.icons/lucide/file-x-2.svg +1 -1
  114. zensical/templates/.icons/lucide/file-x-corner.svg +1 -0
  115. zensical/templates/.icons/lucide/file-x.svg +1 -1
  116. zensical/templates/.icons/lucide/file.svg +1 -1
  117. zensical/templates/.icons/lucide/files.svg +1 -1
  118. zensical/templates/.icons/lucide/fingerprint-pattern.svg +1 -0
  119. zensical/templates/.icons/lucide/fishing-hook.svg +1 -0
  120. zensical/templates/.icons/lucide/flashlight-off.svg +1 -1
  121. zensical/templates/.icons/lucide/flashlight.svg +1 -1
  122. zensical/templates/.icons/lucide/folder-git-2.svg +1 -1
  123. zensical/templates/.icons/lucide/form.svg +1 -0
  124. zensical/templates/.icons/lucide/gamepad-directional.svg +1 -0
  125. zensical/templates/.icons/lucide/git-branch-minus.svg +1 -0
  126. zensical/templates/.icons/lucide/hd.svg +1 -0
  127. zensical/templates/.icons/lucide/helicopter.svg +1 -0
  128. zensical/templates/.icons/lucide/layers-plus.svg +1 -0
  129. zensical/templates/.icons/lucide/memory-stick.svg +1 -1
  130. zensical/templates/.icons/lucide/microchip.svg +1 -1
  131. zensical/templates/.icons/lucide/mouse-pointer-2-off.svg +1 -0
  132. zensical/templates/.icons/lucide/paint-bucket.svg +1 -1
  133. zensical/templates/.icons/lucide/plug.svg +1 -1
  134. zensical/templates/.icons/lucide/ruler-dimension-line.svg +1 -1
  135. zensical/templates/.icons/lucide/scale.svg +1 -1
  136. zensical/templates/.icons/lucide/scissors-square-dashed-bottom.svg +1 -1
  137. zensical/templates/.icons/lucide/scissors-square.svg +1 -1
  138. zensical/templates/.icons/lucide/scooter.svg +1 -0
  139. zensical/templates/.icons/lucide/search-alert.svg +1 -0
  140. zensical/templates/.icons/lucide/shredder.svg +1 -1
  141. zensical/templates/.icons/lucide/solar-panel.svg +1 -0
  142. zensical/templates/.icons/lucide/square-bottom-dashed-scissors.svg +1 -1
  143. zensical/templates/.icons/lucide/square-scissors.svg +1 -1
  144. zensical/templates/.icons/lucide/sticker.svg +1 -1
  145. zensical/templates/.icons/lucide/sticky-note.svg +1 -1
  146. zensical/templates/.icons/lucide/stone.svg +1 -0
  147. zensical/templates/.icons/lucide/thermometer-sun.svg +1 -1
  148. zensical/templates/.icons/lucide/thumbs-down.svg +1 -1
  149. zensical/templates/.icons/lucide/thumbs-up.svg +1 -1
  150. zensical/templates/.icons/lucide/tickets-plane.svg +1 -1
  151. zensical/templates/.icons/lucide/tickets.svg +1 -1
  152. zensical/templates/.icons/lucide/toolbox.svg +1 -0
  153. zensical/templates/.icons/lucide/van.svg +1 -0
  154. zensical/templates/.icons/lucide/waves-arrow-down.svg +1 -0
  155. zensical/templates/.icons/lucide/waves-arrow-up.svg +1 -0
  156. zensical/templates/.icons/lucide/weight-tilde.svg +1 -0
  157. zensical/templates/.icons/octicons/boolean-off-16.svg +1 -0
  158. zensical/templates/.icons/octicons/boolean-off-24.svg +1 -0
  159. zensical/templates/.icons/octicons/boolean-on-16.svg +1 -0
  160. zensical/templates/.icons/octicons/boolean-on-24.svg +1 -0
  161. zensical/templates/.icons/octicons/compose-16.svg +1 -0
  162. zensical/templates/.icons/octicons/compose-24.svg +1 -0
  163. zensical/templates/.icons/octicons/crosshairs-16.svg +1 -0
  164. zensical/templates/.icons/octicons/crosshairs-24.svg +1 -0
  165. zensical/templates/.icons/octicons/dice-16.svg +1 -0
  166. zensical/templates/.icons/octicons/dice-24.svg +1 -0
  167. zensical/templates/.icons/octicons/exclamation-16.svg +1 -0
  168. zensical/templates/.icons/octicons/exclamation-24.svg +1 -0
  169. zensical/templates/.icons/octicons/file-check-16.svg +1 -0
  170. zensical/templates/.icons/octicons/file-check-24.svg +1 -0
  171. zensical/templates/.icons/octicons/flowchart-16.svg +1 -0
  172. zensical/templates/.icons/octicons/flowchart-24.svg +1 -0
  173. zensical/templates/.icons/octicons/focus-center-16.svg +1 -0
  174. zensical/templates/.icons/octicons/focus-center-24.svg +1 -0
  175. zensical/templates/.icons/octicons/git-branch-check-16.svg +1 -0
  176. zensical/templates/.icons/octicons/git-branch-check-24.svg +1 -0
  177. zensical/templates/.icons/octicons/graph-bar-horizontal-16.svg +1 -0
  178. zensical/templates/.icons/octicons/graph-bar-horizontal-24.svg +1 -0
  179. zensical/templates/.icons/octicons/graph-bar-vertical-16.svg +1 -0
  180. zensical/templates/.icons/octicons/graph-bar-vertical-24.svg +1 -0
  181. zensical/templates/.icons/octicons/inbox-fill-16.svg +1 -0
  182. zensical/templates/.icons/octicons/inbox-fill-24.svg +1 -0
  183. zensical/templates/.icons/octicons/node-16.svg +1 -0
  184. zensical/templates/.icons/octicons/node-24.svg +1 -0
  185. zensical/templates/.icons/octicons/pencil-ai-16.svg +1 -0
  186. zensical/templates/.icons/octicons/pencil-ai-24.svg +1 -0
  187. zensical/templates/.icons/octicons/smiley-frown-16.svg +1 -0
  188. zensical/templates/.icons/octicons/smiley-frown-24.svg +1 -0
  189. zensical/templates/.icons/octicons/smiley-frustrated-16.svg +1 -0
  190. zensical/templates/.icons/octicons/smiley-frustrated-24.svg +1 -0
  191. zensical/templates/.icons/octicons/smiley-grin-16.svg +1 -0
  192. zensical/templates/.icons/octicons/smiley-grin-24.svg +1 -0
  193. zensical/templates/.icons/octicons/smiley-neutral-16.svg +1 -0
  194. zensical/templates/.icons/octicons/smiley-neutral-24.svg +1 -0
  195. zensical/templates/.icons/octicons/spacing-large-16.svg +1 -0
  196. zensical/templates/.icons/octicons/spacing-large-24.svg +1 -0
  197. zensical/templates/.icons/octicons/spacing-medium-16.svg +1 -0
  198. zensical/templates/.icons/octicons/spacing-medium-24.svg +1 -0
  199. zensical/templates/.icons/octicons/spacing-small-16.svg +1 -0
  200. zensical/templates/.icons/octicons/spacing-small-24.svg +1 -0
  201. zensical/templates/.icons/octicons/split-view-16.svg +1 -0
  202. zensical/templates/.icons/octicons/split-view-24.svg +1 -0
  203. zensical/templates/.icons/octicons/unwrap-16.svg +1 -0
  204. zensical/templates/.icons/octicons/unwrap-24.svg +1 -0
  205. zensical/templates/.icons/octicons/vscode-16.svg +1 -1
  206. zensical/templates/.icons/octicons/vscode-32.svg +1 -1
  207. zensical/templates/.icons/octicons/vscode-48.svg +1 -1
  208. zensical/templates/.icons/octicons/wrap-16.svg +1 -0
  209. zensical/templates/.icons/octicons/wrap-24.svg +1 -0
  210. zensical/templates/.icons/simple/acode.svg +1 -0
  211. zensical/templates/.icons/simple/apacheavro.svg +1 -0
  212. zensical/templates/.icons/simple/appimage.svg +1 -0
  213. zensical/templates/.icons/simple/appmanager.svg +1 -0
  214. zensical/templates/.icons/simple/autentique.svg +1 -0
  215. zensical/templates/.icons/simple/b4x.svg +1 -0
  216. zensical/templates/.icons/simple/bioconductor.svg +1 -0
  217. zensical/templates/.icons/simple/coolify.svg +1 -0
  218. zensical/templates/.icons/simple/cursor.svg +1 -0
  219. zensical/templates/.icons/simple/dash0.svg +1 -0
  220. zensical/templates/.icons/simple/dodopayments.svg +1 -0
  221. zensical/templates/.icons/simple/elk.svg +1 -0
  222. zensical/templates/.icons/simple/fishaudio.svg +1 -0
  223. zensical/templates/.icons/simple/ghostty.svg +1 -0
  224. zensical/templates/.icons/simple/glance.svg +1 -0
  225. zensical/templates/.icons/simple/hashcat.svg +1 -0
  226. zensical/templates/.icons/simple/kando.svg +1 -0
  227. zensical/templates/.icons/simple/labex.svg +1 -0
  228. zensical/templates/.icons/simple/listenhub.svg +1 -0
  229. zensical/templates/.icons/simple/luanti.svg +1 -0
  230. zensical/templates/.icons/simple/maas.svg +1 -1
  231. zensical/templates/.icons/simple/mailbox.svg +1 -0
  232. zensical/templates/.icons/simple/mangacollec.svg +1 -0
  233. zensical/templates/.icons/simple/mdblist.svg +1 -0
  234. zensical/templates/.icons/simple/minimax.svg +1 -0
  235. zensical/templates/.icons/simple/newgrounds.svg +1 -0
  236. zensical/templates/.icons/simple/nodegui.svg +1 -0
  237. zensical/templates/.icons/simple/openrouter.svg +1 -0
  238. zensical/templates/.icons/simple/passbolt.svg +1 -0
  239. zensical/templates/.icons/simple/plane.svg +1 -0
  240. zensical/templates/.icons/simple/postiz.svg +1 -0
  241. zensical/templates/.icons/simple/qlty.svg +1 -0
  242. zensical/templates/.icons/simple/rekaui.svg +1 -0
  243. zensical/templates/.icons/simple/retroachievements.svg +1 -0
  244. zensical/templates/.icons/simple/root.svg +1 -0
  245. zensical/templates/.icons/simple/setuptools.svg +1 -0
  246. zensical/templates/.icons/simple/tanstack.svg +1 -0
  247. zensical/templates/.icons/simple/textual.svg +1 -0
  248. zensical/templates/assets/javascripts/LICENSE +29 -0
  249. zensical/templates/assets/javascripts/bundle.8ffeb9c9.min.js +3 -0
  250. zensical/templates/assets/javascripts/workers/search.e2d2d235.min.js +1 -0
  251. zensical/templates/assets/stylesheets/classic/main.9a39631f.min.css +1 -0
  252. zensical/templates/assets/stylesheets/modern/main.d4922b3c.min.css +1 -0
  253. zensical/templates/base.html +4 -4
  254. zensical/zensical.abi3.so +0 -0
  255. zensical/zensical.pyi +7 -13
  256. {zensical-0.0.9.dist-info → zensical-0.0.17.dist-info}/METADATA +9 -5
  257. {zensical-0.0.9.dist-info → zensical-0.0.17.dist-info}/RECORD +262 -172
  258. {zensical-0.0.9.dist-info → zensical-0.0.17.dist-info}/WHEEL +1 -1
  259. {zensical-0.0.9.dist-info → zensical-0.0.17.dist-info}/licenses/LICENSE.md +1 -1
  260. zensical.libs/libgcc_s-f5fcfe20.so.1 +0 -0
  261. zensical/templates/.icons/simple/aerlingus.svg +0 -1
  262. zensical/templates/.icons/simple/aerospike.svg +0 -1
  263. zensical/templates/.icons/simple/aew.svg +0 -1
  264. zensical/templates/.icons/simple/affinity.svg +0 -1
  265. zensical/templates/.icons/simple/affinitydesigner.svg +0 -1
  266. zensical/templates/.icons/simple/affinityphoto.svg +0 -1
  267. zensical/templates/.icons/simple/affinitypublisher.svg +0 -1
  268. zensical/templates/.icons/simple/alfaromeo.svg +0 -1
  269. zensical/templates/.icons/simple/allocine.svg +0 -1
  270. zensical/templates/.icons/simple/alteryx.svg +0 -1
  271. zensical/templates/.icons/simple/altiumdesigner.svg +0 -1
  272. zensical/templates/.icons/simple/alx.svg +0 -1
  273. zensical/templates/.icons/simple/authy.svg +0 -1
  274. zensical/templates/.icons/simple/canva.svg +0 -1
  275. zensical/templates/.icons/simple/codepen.svg +0 -1
  276. zensical/templates/.icons/simple/cognizant.svg +0 -1
  277. zensical/templates/.icons/simple/dbt.svg +0 -1
  278. zensical/templates/.icons/simple/flipkart.svg +0 -1
  279. zensical/templates/.icons/simple/googlefit.svg +0 -1
  280. zensical/templates/.icons/simple/heroku.svg +0 -1
  281. zensical/templates/.icons/simple/informatica.svg +0 -1
  282. zensical/templates/.icons/simple/invision.svg +0 -1
  283. zensical/templates/.icons/simple/jaguar.svg +0 -1
  284. zensical/templates/.icons/simple/landrover.svg +0 -1
  285. zensical/templates/.icons/simple/logitech.svg +0 -1
  286. zensical/templates/.icons/simple/logitechg.svg +0 -1
  287. zensical/templates/.icons/simple/mailboxdotorg.svg +0 -1
  288. zensical/templates/.icons/simple/minetest.svg +0 -1
  289. zensical/templates/.icons/simple/mulesoft.svg +0 -1
  290. zensical/templates/.icons/simple/musescore.svg +0 -1
  291. zensical/templates/.icons/simple/nexusmods.svg +0 -1
  292. zensical/templates/.icons/simple/openai.svg +0 -1
  293. zensical/templates/.icons/simple/pocket.svg +0 -1
  294. zensical/templates/.icons/simple/quip.svg +0 -1
  295. zensical/templates/.icons/simple/salesforce.svg +0 -1
  296. zensical/templates/.icons/simple/scribd.svg +0 -1
  297. zensical/templates/.icons/simple/sendgrid.svg +0 -1
  298. zensical/templates/.icons/simple/shutterstock.svg +0 -1
  299. zensical/templates/.icons/simple/slack.svg +0 -1
  300. zensical/templates/.icons/simple/tunein.svg +0 -1
  301. zensical/templates/.icons/simple/twilio.svg +0 -1
  302. zensical/templates/.icons/simple/walmart.svg +0 -1
  303. zensical/templates/.icons/simple/warnerbros.svg +0 -1
  304. zensical/templates/.icons/simple/westerndigital.svg +0 -1
  305. zensical/templates/assets/javascripts/bundle.21aa498e.min.js +0 -3
  306. zensical/templates/assets/javascripts/workers/search.5e1f2129.min.js +0 -1
  307. zensical/templates/assets/stylesheets/classic/main.6eec86b3.min.css +0 -1
  308. zensical/templates/assets/stylesheets/modern/main.2644c6b7.min.css +0 -1
  309. zensical.libs/libgcc_s-27e5a392.so.1 +0 -0
  310. {zensical-0.0.9.dist-info → zensical-0.0.17.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
1
- # Copyright (c) 2025 Zensical and contributors
1
+ # Copyright (c) 2025-2026 Zensical and contributors
2
2
 
3
3
  # SPDX-License-Identifier: MIT
4
- # Third-party contributions licensed under DCO
4
+ # All contributions are certified under the DCO
5
5
 
6
6
  # Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  # of this software and associated documentation files (the "Software"), to
@@ -1,7 +1,7 @@
1
- # Copyright (c) 2025 Zensical and contributors
1
+ # Copyright (c) 2025-2026 Zensical and contributors
2
2
 
3
3
  # SPDX-License-Identifier: MIT
4
- # Third-party contributions licensed under DCO
4
+ # All contributions are certified under the DCO
5
5
 
6
6
  # Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  # of this software and associated documentation files (the "Software"), to
@@ -31,13 +31,10 @@ from fnmatch import fnmatch
31
31
 
32
32
 
33
33
  class Filter:
34
- """
35
- A filter.
36
- """
34
+ """A filter."""
37
35
 
38
36
  def __init__(self, config: dict):
39
- """
40
- Initialize the filter.
37
+ """Initialize the filter.
41
38
 
42
39
  Arguments:
43
40
  config: The filter configuration.
@@ -45,8 +42,7 @@ class Filter:
45
42
  self.config = config
46
43
 
47
44
  def __call__(self, value: str) -> bool:
48
- """
49
- Filter a value.
45
+ """Filter a value.
50
46
 
51
47
  First, the inclusion patterns are checked. Regardless of whether they
52
48
  are present, the exclusion patterns are checked afterwards. This allows
@@ -59,7 +55,6 @@ class Filter:
59
55
  Returns:
60
56
  Whether the value should be included.
61
57
  """
62
-
63
58
  # Check if value matches one of the inclusion patterns
64
59
  if "include" in self.config:
65
60
  for pattern in self.config["include"]:
zensical/main.py CHANGED
@@ -1,7 +1,7 @@
1
- # Copyright (c) 2025 Zensical and contributors
1
+ # Copyright (c) 2025-2026 Zensical and contributors
2
2
 
3
3
  # SPDX-License-Identifier: MIT
4
- # Third-party contributions licensed under DCO
4
+ # All contributions are certified under the DCO
5
5
 
6
6
  # Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  # of this software and associated documentation files (the "Software"), to
@@ -23,13 +23,15 @@
23
23
 
24
24
  from __future__ import annotations
25
25
 
26
- import click
27
26
  import os
28
27
  import shutil
28
+ from pathlib import Path
29
+ from typing import Any
29
30
 
31
+ import click
30
32
  from click import ClickException
31
- from zensical import build, serve, version
32
33
 
34
+ from zensical import build, serve, version
33
35
 
34
36
  # ----------------------------------------------------------------------------
35
37
  # Commands
@@ -38,8 +40,8 @@ from zensical import build, serve, version
38
40
 
39
41
  @click.version_option(version=version(), message="%(version)s")
40
42
  @click.group()
41
- def cli():
42
- """Zensical - A modern static site generator"""
43
+ def cli() -> None:
44
+ """Zensical - A modern static site generator."""
43
45
 
44
46
 
45
47
  @cli.command(name="build")
@@ -64,10 +66,8 @@ def cli():
64
66
  is_flag=True,
65
67
  help="Strict mode (currently unsupported).",
66
68
  )
67
- def execute_build(config_file: str | None, **kwargs):
68
- """
69
- Build a project.
70
- """
69
+ def execute_build(config_file: str | None, **kwargs: Any) -> None:
70
+ """Build a project."""
71
71
  if config_file is None:
72
72
  for file in ["zensical.toml", "mkdocs.yml", "mkdocs.yaml"]:
73
73
  if os.path.exists(file):
@@ -80,7 +80,7 @@ def execute_build(config_file: str | None, **kwargs):
80
80
 
81
81
  # Build project in Rust runtime, calling back into Python when necessary,
82
82
  # e.g., to parse MkDocs configuration format or render Markdown
83
- build(os.path.abspath(config_file), kwargs.get("clean"))
83
+ build(os.path.abspath(config_file), kwargs.get("clean", False))
84
84
 
85
85
 
86
86
  @cli.command(name="serve")
@@ -111,10 +111,8 @@ def execute_build(config_file: str | None, **kwargs):
111
111
  is_flag=True,
112
112
  help="Strict mode (currently unsupported).",
113
113
  )
114
- def execute_serve(config_file: str | None, **kwargs):
115
- """
116
- Build and serve a project.
117
- """
114
+ def execute_serve(config_file: str | None, **kwargs: Any) -> None:
115
+ """Build and serve a project."""
118
116
  if config_file is None:
119
117
  for file in ["zensical.toml", "mkdocs.yml", "mkdocs.yaml"]:
120
118
  if os.path.exists(file):
@@ -136,45 +134,34 @@ def execute_serve(config_file: str | None, **kwargs):
136
134
  type=click.Path(file_okay=False, dir_okay=True, writable=True),
137
135
  required=False,
138
136
  )
139
- def new_project(directory: str | None, **kwargs):
140
- """
141
- Create a new template project in the current directory or in the given
142
- directory.
137
+ def new_project(directory: str | None, **kwargs: Any) -> None: # noqa: ARG001
138
+ """Create a new template project in the current or given directory.
143
139
 
144
140
  Raises:
145
141
  ClickException: if the directory already contains a zensical.toml or a
146
142
  docs directory that is not empty, as well as when the path provided
147
143
  points to something that is not a directory.
148
144
  """
149
-
150
- if directory is None:
151
- directory = "."
152
- docs_dir = os.path.join(directory, "docs")
153
- config_file = os.path.join(directory, "zensical.toml")
154
- github_dir = os.path.join(directory, ".github")
155
-
156
- if os.path.exists(directory):
157
- if not os.path.isdir(directory):
158
- raise (ClickException("Path provided is not a directory."))
159
- if os.path.exists(config_file):
160
- raise (ClickException(f"{config_file} already exists."))
161
- if os.path.exists(docs_dir):
162
- raise (ClickException(f"{docs_dir} already exists."))
163
- if os.path.exists(github_dir):
164
- raise (ClickException(f"{github_dir} already exists."))
165
- else:
166
- os.makedirs(directory)
167
-
168
- package_dir = os.path.dirname(os.path.abspath(__file__))
169
- shutil.copy(os.path.join(package_dir, "bootstrap/zensical.toml"), directory)
170
- shutil.copytree(
171
- os.path.join(package_dir, "bootstrap/docs"),
172
- os.path.join(directory, "docs"),
173
- )
174
- shutil.copytree(
175
- os.path.join(package_dir, "bootstrap/.github"),
176
- os.path.join(directory, ".github"),
177
- )
145
+ working_dir = Path.cwd() if directory is None else Path(directory).resolve()
146
+ if working_dir.is_file():
147
+ raise ClickException(f"{working_dir} must be a directory, not a file.")
148
+
149
+ config_file = working_dir / "zensical.toml"
150
+ if config_file.exists():
151
+ raise ClickException(f"{config_file} already exists.")
152
+
153
+ working_dir.mkdir(parents=True, exist_ok=True)
154
+
155
+ package_dir = Path(__file__).resolve().parent
156
+ bootstrap = package_dir / "bootstrap"
157
+
158
+ for src_file in bootstrap.rglob("*"):
159
+ if src_file.is_file():
160
+ rel_path = src_file.relative_to(bootstrap)
161
+ dest_file = working_dir / rel_path
162
+ if not dest_file.exists():
163
+ dest_file.parent.mkdir(parents=True, exist_ok=True)
164
+ shutil.copyfile(src_file, dest_file)
178
165
 
179
166
 
180
167
  # ----------------------------------------------------------------------------
zensical/markdown.py CHANGED
@@ -1,7 +1,7 @@
1
- # Copyright (c) 2025 Zensical and contributors
1
+ # Copyright (c) 2025-2026 Zensical and contributors
2
2
 
3
3
  # SPDX-License-Identifier: MIT
4
- # Third-party contributions licensed under DCO
4
+ # All contributions are certified under the DCO
5
5
 
6
6
  # Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  # of this software and associated documentation files (the "Software"), to
@@ -24,15 +24,21 @@
24
24
  from __future__ import annotations
25
25
 
26
26
  import re
27
- import yaml
28
-
29
27
  from datetime import date, datetime
28
+ from typing import TYPE_CHECKING, Any
29
+
30
+ import yaml
31
+ from markdown import Extension as MarkdownExtension
30
32
  from markdown import Markdown
33
+ from markdown.preprocessors import Preprocessor
31
34
  from yaml import SafeLoader
32
35
 
33
- from .config import get_config
34
- from .extensions.links import LinksExtension
35
- from .extensions.search import SearchExtension
36
+ from zensical.config import get_config
37
+ from zensical.extensions.links import LinksExtension
38
+ from zensical.extensions.search import SearchExtension
39
+
40
+ if TYPE_CHECKING:
41
+ from zensical.extensions.search import SearchProcessor
36
42
 
37
43
  # ----------------------------------------------------------------------------
38
44
  # Constants
@@ -47,14 +53,47 @@ FRONT_MATTER_RE = re.compile(
47
53
  Regex pattern to extract front matter.
48
54
  """
49
55
 
56
+
57
+ # ----------------------------------------------------------------------------
58
+ # Classes
59
+ # ----------------------------------------------------------------------------
60
+
61
+
62
+ class CurrentPageData(Preprocessor):
63
+ """Preprocessor to store current page URL and path."""
64
+
65
+ def __init__(self, md: Markdown, url: str, path: str):
66
+ super().__init__(md)
67
+ self.url = url
68
+ self.path = path
69
+
70
+ def run(self, lines: list[str]) -> list[str]:
71
+ return lines
72
+
73
+
74
+ class CurrentPageExtension(MarkdownExtension):
75
+ """Markdown extension to store current page URL and path."""
76
+
77
+ def __init__(self, url: str, path: str):
78
+ super().__init__()
79
+ self.url = url
80
+ self.path = path
81
+
82
+ def extendMarkdown(self, md: Markdown) -> None: # noqa: N802
83
+ md.preprocessors.register(
84
+ CurrentPageData(md, self.url, self.path),
85
+ "zensical_current_page",
86
+ 0,
87
+ )
88
+
89
+
50
90
  # ----------------------------------------------------------------------------
51
91
  # Functions
52
92
  # ----------------------------------------------------------------------------
53
93
 
54
94
 
55
- def render(content: str, path: str) -> dict:
56
- """
57
- Render Markdown and return HTML.
95
+ def render(content: str, path: str, url: str) -> dict:
96
+ """Render Markdown and return HTML.
58
97
 
59
98
  This function returns rendered HTML as well as the table of contents and
60
99
  metadata. Now, this is the part where Zensical needs to call into Python,
@@ -63,9 +102,14 @@ def render(content: str, path: str) -> dict:
63
102
  """
64
103
  config = get_config()
65
104
 
105
+ # Insert current page extension at the beginning
106
+ extensions = [CurrentPageExtension(url, path)] + config[
107
+ "markdown_extensions"
108
+ ]
109
+
66
110
  # Initialize Markdown parser
67
111
  md = Markdown(
68
- extensions=config["markdown_extensions"],
112
+ extensions=extensions,
69
113
  extension_configs=config["mdx_configs"],
70
114
  )
71
115
 
@@ -77,8 +121,8 @@ def render(content: str, path: str) -> dict:
77
121
  links.extendMarkdown(md)
78
122
 
79
123
  # Register search extension, which extracts text for search indexing
80
- search = SearchExtension()
81
- search.extendMarkdown(md)
124
+ search_extension = SearchExtension()
125
+ search_extension.extendMarkdown(md)
82
126
 
83
127
  # First, extract metadata - the Python Markdown parser brings a metadata
84
128
  # extension, but the implementation is broken, as it does not support full
@@ -91,7 +135,7 @@ def render(content: str, path: str) -> dict:
91
135
  content = content[match.end() :].lstrip("\n")
92
136
  else:
93
137
  meta = {}
94
- except Exception:
138
+ except Exception: # noqa: BLE001
95
139
  pass
96
140
 
97
141
  # Convert Markdown and set nullish metadata to empty string, since we
@@ -106,24 +150,41 @@ def render(content: str, path: str) -> dict:
106
150
  meta[key] = value.isoformat()
107
151
 
108
152
  # Obtain search index data, unless page is excluded
109
- search = md.postprocessors["search"]
153
+ search_processor: SearchProcessor = md.postprocessors["search"] # type: ignore[assignment]
110
154
  if meta.get("search", {}).get("exclude", False):
111
- search.data = []
155
+ search_processor.data = []
156
+
157
+ # Extract URL map from extension if available
158
+ for extension in md.registeredExtensions:
159
+ if type(extension).__qualname__ == "MkdocstringsExtension":
160
+ autorefs = {
161
+ "primary": extension._autorefs._primary_url_map, # type: ignore[attr-defined]
162
+ "secondary": extension._autorefs._secondary_url_map, # type: ignore[attr-defined]
163
+ "inventory": extension._autorefs._abs_url_map, # type: ignore[attr-defined]
164
+ "titles": extension._autorefs._title_map, # type: ignore[attr-defined]
165
+ }
166
+ break
167
+ else:
168
+ autorefs = {
169
+ "primary": {},
170
+ "secondary": {},
171
+ "inventory": {},
172
+ "titles": {},
173
+ }
112
174
 
113
175
  # Return Markdown with metadata
114
176
  return {
115
177
  "meta": meta,
116
178
  "content": content,
117
- "search": search.data,
179
+ "search": search_processor.data,
118
180
  "title": "",
119
181
  "toc": [_convert_toc(item) for item in getattr(md, "toc_tokens", [])],
182
+ "autorefs": autorefs,
120
183
  }
121
184
 
122
185
 
123
- def _convert_toc(item: any):
124
- """
125
- Convert a table of contents item to navigation item format.
126
- """
186
+ def _convert_toc(item: Any) -> dict:
187
+ """Convert a table of contents item to navigation item format."""
127
188
  toc_item = {
128
189
  "title": item["data-toc-label"] or item["name"],
129
190
  "id": item["id"],
@@ -0,0 +1,39 @@
1
+ ISC License
2
+
3
+ Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2023 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2025.
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+
17
+ ---
18
+
19
+ The MIT License (MIT) (for portions derived from Feather)
20
+
21
+ Copyright (c) 2013-2023 Cole Bemis
22
+
23
+ Permission is hereby granted, free of charge, to any person obtaining a copy
24
+ of this software and associated documentation files (the "Software"), to deal
25
+ in the Software without restriction, including without limitation the rights
26
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
27
+ copies of the Software, and to permit persons to whom the Software is
28
+ furnished to do so, subject to the following conditions:
29
+
30
+ The above copyright notice and this permission notice shall be included in all
31
+ copies or substantial portions of the Software.
32
+
33
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39
+ SOFTWARE.
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-ampersand" viewBox="0 0 24 24"><path d="M17.5 12c0 4.4-3.6 8-8 8A4.5 4.5 0 0 1 5 15.5c0-6 8-4 8-8.5a3 3 0 1 0-6 0c0 3 2.5 8.5 12 13M16 12h3"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-ampersand" viewBox="0 0 24 24"><path d="M16 12h3M17.5 12a8 8 0 0 1-8 8A4.5 4.5 0 0 1 5 15.5c0-6 8-4 8-8.5a3 3 0 1 0-6 0c0 3 2.5 8.5 12 13"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-anchor" viewBox="0 0 24 24"><path d="M12 22V8M5 12H2a10 10 0 0 0 20 0h-3"/><circle cx="12" cy="5" r="3"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-anchor" viewBox="0 0 24 24"><path d="M12 6v16M19 13l2-1a9 9 0 0 1-18 0l2 1M9 11h6"/><circle cx="12" cy="4" r="2"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-balloon" viewBox="0 0 24 24"><path d="M12 16v1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v1M12 6a2 2 0 0 1 2 2"/><path d="M18 8c0 4-3.5 8-6 8s-6-4-6-8a6 6 0 0 1 12 0"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-birdhouse" viewBox="0 0 24 24"><path d="M12 18v4M17 18l1.956-11.468M3 8l7.82-5.615a2 2 0 0 1 2.36 0L21 8M4 18h16M7 18 5.044 6.532"/><circle cx="12" cy="10" r="2"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-search" viewBox="0 0 24 24"><path d="M11 22H5.5a1 1 0 0 1 0-5h4.501M21 22l-1.879-1.878"/><path d="M3 19.5v-15A2.5 2.5 0 0 1 5.5 2H18a1 1 0 0 1 1 1v8"/><circle cx="17" cy="18" r="3"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-brush-cleaning" viewBox="0 0 24 24"><path d="m16 22-1-4M19 13.99a1 1 0 0 0 1-1V12a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v.99a1 1 0 0 0 1 1M5 14h14l1.973 6.767A1 1 0 0 1 20 22H4a1 1 0 0 1-.973-1.233zM8 22l1-4"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-brush-cleaning" viewBox="0 0 24 24"><path d="m16 22-1-4M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1"/><path d="M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233zM8 22l1-4"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-bubbles" viewBox="0 0 24 24"><path d="M7.2 14.8a2 2 0 0 1 2 2"/><circle cx="18.5" cy="8.5" r="3.5"/><circle cx="7.5" cy="16.5" r="5.5"/><circle cx="7.5" cy="4.5" r="2.5"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-bubbles" viewBox="0 0 24 24"><path d="M7.001 15.085A1.5 1.5 0 0 1 9 16.5"/><circle cx="18.5" cy="8.5" r="3.5"/><circle cx="7.5" cy="16.5" r="5.5"/><circle cx="7.5" cy="4.5" r="2.5"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-calendar-fold" viewBox="0 0 24 24"><path d="M8 2v4M16 2v4M21 17V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11ZM3 10h18"/><path d="M15 22v-4a2 2 0 0 1 2-2h4"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-calendar-fold" viewBox="0 0 24 24"><path d="M3 20a2 2 0 0 0 2 2h10a2.4 2.4 0 0 0 1.706-.706l3.588-3.588A2.4 2.4 0 0 0 21 16V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2z"/><path d="M15 22v-5a1 1 0 0 1 1-1h5M8 2v4M16 2v4M3 10h18"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-calendars" viewBox="0 0 24 24"><path d="M12 2v2M15.726 21.01A2 2 0 0 1 14 22H4a2 2 0 0 1-2-2V10a2 2 0 0 1 2-2M18 2v2M2 13h2M8 8h14"/><rect width="14" height="14" x="8" y="3" rx="2"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-cannabis-off" viewBox="0 0 24 24"><path d="M12 22v-4c1.5 1.5 3.5 3 6 3 0-1.5-.5-3.5-2-5M13.988 8.327C13.902 6.054 13.365 3.82 12 2a9.3 9.3 0 0 0-1.445 2.9M17.375 11.725C18.882 10.53 21 7.841 21 6c-2.324 0-5.08 1.296-6.662 2.684M2 2l20 20M21.024 15.378A15 15 0 0 0 22 15c-.426-1.279-2.67-2.557-4.25-2.907M6.995 6.992C5.714 6.4 4.29 6 3 6c0 2 2.5 5 4 6-1.5 0-4.5 1.5-5 3 3.5 1.5 6 1 6 1-1.5 1.5-2 3.5-2 5 2.5 0 4.5-1.5 6-3"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chess-bishop" viewBox="0 0 24 24"><path d="M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1zM15 18c1.5-.615 3-2.461 3-4.923C18 8.769 14.5 4.462 12 2 9.5 4.462 6 8.77 6 13.077 6 15.539 7.5 17.385 9 18M16 7l-2.5 2.5M9 2h6"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chess-king" viewBox="0 0 24 24"><path d="M4 20a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1zM6.7 18l-1-1C4.35 15.682 3 14.09 3 12a5 5 0 0 1 4.95-5c1.584 0 2.7.455 4.05 1.818C13.35 7.455 14.466 7 16.05 7A5 5 0 0 1 21 12c0 2.082-1.359 3.673-2.7 5l-1 1M10 4h4M12 2v6.818"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chess-knight" viewBox="0 0 24 24"><path d="M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1zM16.5 18c1-2 2.5-5 2.5-9a7 7 0 0 0-7-7H6.635a1 1 0 0 0-.768 1.64L7 5l-2.32 5.802a2 2 0 0 0 .95 2.526l2.87 1.456M15 5l1.425-1.425M17 8l1.53-1.53M9.713 12.185 7 18"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chess-pawn" viewBox="0 0 24 24"><path d="M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1zM14.5 10l1.5 8M7 10h10M8 18l1.5-8"/><circle cx="12" cy="6" r="4"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chess-queen" viewBox="0 0 24 24"><path d="M4 20a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1zM12.474 5.943l1.567 5.34a1 1 0 0 0 1.75.328l2.616-3.402M20 9l-3 9M5.594 8.209l2.615 3.403a1 1 0 0 0 1.75-.329l1.567-5.34M7 18 4 9"/><circle cx="12" cy="4" r="2"/><circle cx="20" cy="7" r="2"/><circle cx="4" cy="7" r="2"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-chess-rook" viewBox="0 0 24 24"><path d="M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1zM10 2v2M14 2v2M17 18l-1-9M6 2v5a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2M6 4h12M7 18l1-9"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-pile" viewBox="0 0 24 24"><circle cx="12" cy="19" r="2"/><circle cx="12" cy="5" r="2"/><circle cx="16" cy="12" r="2"/><circle cx="20" cy="19" r="2"/><circle cx="4" cy="19" r="2"/><circle cx="8" cy="12" r="2"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-clock-check" viewBox="0 0 24 24"><path d="M12 6v6l4 2"/><path d="M22 12a10 10 0 1 0-11 9.95"/><path d="m22 16-5.5 5.5L14 19"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-cloud-backup" viewBox="0 0 24 24"><path d="M21 15.251A4.5 4.5 0 0 0 17.5 8h-1.79A7 7 0 1 0 3 13.607"/><path d="M7 11v4h4"/><path d="M8 19a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5 4.82 4.82 0 0 0-3.41 1.41L7 15"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-cloud-sync" viewBox="0 0 24 24"><path d="m17 18-1.535 1.605a5 5 0 0 1-8-1.5"/><path d="M17 22v-4h-4M20.996 15.251A4.5 4.5 0 0 0 17.495 8h-1.79a7 7 0 1 0-12.709 5.607"/><path d="M7 10v4h4"/><path d="m7 14 1.535-1.605a5 5 0 0 1 8 1.5"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-archive" viewBox="0 0 24 24"><path d="M10 12v-1M10 18v-2M10 7V6M14 2v4a2 2 0 0 0 2 2h4"/><path d="M15.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v16a2 2 0 0 0 .274 1.01"/><circle cx="10" cy="20" r="2"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-archive" viewBox="0 0 24 24"><path d="M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5"/><path d="M14 2v5a1 1 0 0 0 1 1h5M8 12v-1M8 18v-2M8 7V6"/><circle cx="8" cy="20" r="2"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-audio-2" viewBox="0 0 24 24"><path d="M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v2"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><circle cx="3" cy="17" r="1"/><path d="M2 17v-3a4 4 0 0 1 8 0v3"/><circle cx="9" cy="17" r="1"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-audio-2" viewBox="0 0 24 24"><path d="M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343"/><path d="M14 2v5a1 1 0 0 0 1 1h5M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-audio" viewBox="0 0 24 24"><path d="M17.5 22h.5a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3"/><path d="M14 2v4a2 2 0 0 0 2 2h4M2 19a2 2 0 1 1 4 0v1a2 2 0 1 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 1 1-4 0v-1a2 2 0 1 1 4 0"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-audio" viewBox="0 0 24 24"><path d="M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343"/><path d="M14 2v5a1 1 0 0 0 1 1h5M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-axis-3-d" viewBox="0 0 24 24"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4M8 18l4-4M8 10v8h8"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-axis-3-d" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M8 18l4-4M8 10v8h8"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-axis-3d" viewBox="0 0 24 24"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4M8 18l4-4M8 10v8h8"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-axis-3d" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M8 18l4-4M8 10v8h8"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-badge-2" viewBox="0 0 24 24"><path d="m13.69 12.479 1.29 4.88a.5.5 0 0 1-.697.591l-1.844-.849a1 1 0 0 0-.88.001l-1.846.85a.5.5 0 0 1-.693-.593l1.29-4.88"/><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z"/><circle cx="12" cy="10" r="3"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-badge-2" viewBox="0 0 24 24"><path d="M13 22h5a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v3.3"/><path d="M14 2v5a1 1 0 0 0 1 1h5M7.69 16.479l1.29 4.88a.5.5 0 0 1-.698.591l-1.843-.849a1 1 0 0 0-.879.001l-1.846.85a.5.5 0 0 1-.692-.593l1.29-4.88"/><circle cx="6" cy="14" r="3"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-badge" viewBox="0 0 24 24"><path d="M12 22h6a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3.072"/><path d="M14 2v4a2 2 0 0 0 2 2h4M6.69 16.479l1.29 4.88a.5.5 0 0 1-.698.591l-1.843-.849a1 1 0 0 0-.88.001l-1.846.85a.5.5 0 0 1-.693-.593l1.29-4.88"/><circle cx="5" cy="14" r="3"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-badge" viewBox="0 0 24 24"><path d="M13 22h5a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v3.3"/><path d="M14 2v5a1 1 0 0 0 1 1h5M7.69 16.479l1.29 4.88a.5.5 0 0 1-.698.591l-1.843-.849a1 1 0 0 0-.879.001l-1.846.85a.5.5 0 0 1-.692-.593l1.29-4.88"/><circle cx="6" cy="14" r="3"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-bar-chart-2" viewBox="0 0 24 24"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4M8 18v-1M12 18v-6M16 18v-3"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-bar-chart-2" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M8 18v-1M12 18v-6M16 18v-3"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-bar-chart" viewBox="0 0 24 24"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4M8 18v-2M12 18v-4M16 18v-6"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-bar-chart" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M8 18v-2M12 18v-4M16 18v-6"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-box" viewBox="0 0 24 24"><path d="M14.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4"/><path d="M14 2v4a2 2 0 0 0 2 2h4M3 13.1a2 2 0 0 0-1 1.76v3.24a2 2 0 0 0 .97 1.78L6 21.7a2 2 0 0 0 2.03.01L11 19.9a2 2 0 0 0 1-1.76V14.9a2 2 0 0 0-.97-1.78L8 11.3a2 2 0 0 0-2.03-.01ZM7 17v5"/><path d="M11.7 14.2 7 17l-4.7-2.8"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-box" viewBox="0 0 24 24"><path d="M14.5 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v3.8"/><path d="M14 2v5a1 1 0 0 0 1 1h5M11.7 14.2 7 17l-4.7-2.8"/><path d="M3 13.1a2 2 0 0 0-.999 1.76v3.24a2 2 0 0 0 .969 1.78L6 21.7a2 2 0 0 0 2.03.01L11 19.9a2 2 0 0 0 1-1.76V14.9a2 2 0 0 0-.97-1.78L8 11.3a2 2 0 0 0-2.03-.01zM7 17v5"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-braces-corner" viewBox="0 0 24 24"><path d="M14 22h4a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v6"/><path d="M14 2v5a1 1 0 0 0 1 1h5M5 14a1 1 0 0 0-1 1v2a1 1 0 0 1-1 1 1 1 0 0 1 1 1v2a1 1 0 0 0 1 1M9 22a1 1 0 0 0 1-1v-2a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-2a1 1 0 0 0-1-1"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-braces" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-chart-column-increasing" viewBox="0 0 24 24"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4M8 18v-2M12 18v-4M16 18v-6"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-chart-column-increasing" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M8 18v-2M12 18v-4M16 18v-6"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-chart-column" viewBox="0 0 24 24"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4M8 18v-1M12 18v-6M16 18v-3"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-chart-column" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M8 18v-1M12 18v-6M16 18v-3"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-chart-line" viewBox="0 0 24 24"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4M16 13l-3.5 3.5-2-2L8 17"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-chart-line" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M16 13l-3.5 3.5-2-2L8 17"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-chart-pie" viewBox="0 0 24 24"><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M16 22h2a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3.5M4.017 11.512a6 6 0 1 0 8.466 8.475"/><path d="M9 16a1 1 0 0 1-1-1v-4c0-.552.45-1.008.995-.917a6 6 0 0 1 4.922 4.922c.091.544-.365.995-.917.995z"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-chart-pie" viewBox="0 0 24 24"><path d="M15.941 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.704l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v3.512"/><path d="M14 2v5a1 1 0 0 0 1 1h5M4.017 11.512a6 6 0 1 0 8.466 8.475"/><path d="M9 16a1 1 0 0 1-1-1v-4c0-.552.45-1.008.995-.917a6 6 0 0 1 4.922 4.922c.091.544-.365.995-.917.995z"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-check-2" viewBox="0 0 24 24"><path d="M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4"/><path d="M14 2v4a2 2 0 0 0 2 2h4M3 15l2 2 4-4"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-check-2" viewBox="0 0 24 24"><path d="M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6"/><path d="M14 2v5a1 1 0 0 0 1 1h5M14 20l2 2 4-4"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-check-corner" viewBox="0 0 24 24"><path d="M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6"/><path d="M14 2v5a1 1 0 0 0 1 1h5M14 20l2 2 4-4"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-check" viewBox="0 0 24 24"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4M9 15l2 2 4-4"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-file-check" viewBox="0 0 24 24"><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"/><path d="M14 2v5a1 1 0 0 0 1 1h5M9 15l2 2 4-4"/></svg>