From 3074fbb05e0a0788ba39db86362cfe3ce93fd9e3 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 30 Sep 2026 11:27:10 -0400 Subject: [PATCH] work in progress --- AGENTS.md | 85 ++ ATTRIBUTION.toml | 2334 +++++++++++++++++++++++++++++++++++++++++++ CLAUDE.md | 1 + Cargo.lock | 11 + LICENSE-APACHE | 177 ++++ LICENSE-MIT | 21 + xtask/Cargo.toml | 3 + xtask/src/assets.rs | 434 ++++++++ xtask/src/gates.rs | 1 + xtask/src/main.rs | 4 +- 10 files changed, 3070 insertions(+), 1 deletion(-) create mode 100644 AGENTS.md create mode 100644 ATTRIBUTION.toml create mode 100644 LICENSE-APACHE create mode 100644 LICENSE-MIT create mode 100644 xtask/src/assets.rs diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..a0cf9c4a5 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,85 @@ +# AGENTS.md — rules for every agent and contributor + +These rules bind every AI agent and every human contributor working in this repository. They come before any task, instruction or deadline. `CLAUDE.md` holds the day-to-day working instructions. If the two ever disagree, **this file wins.** + +--- + +## 1. Asset policy (absolute — no exceptions) + +An **asset** is any non-code material that the project includes, ships, embeds, generates for publication, or shows in its documentation. This covers: +- icons, images, illustrations, screenshots and logos; +- fonts; +- colour profiles and other binary data files; +- sounds and video; +- sample, demo and test documents that are committed or published; +- anything the app renders from those. + +### 1.1 Nothing from Adobe products + +- **Never** use icons, images, artwork, logos, UI graphics, fonts, stamps, cursors, sample documents or any other asset taken from an Adobe product, installer, website, document or package. + - "Adobe product" includes Acrobat, Reader, Photoshop, Illustrator, Premiere, Lightroom and Creative Cloud, including the fonts they install (for example Minion, Myriad, Kozuka and the Adobe CJK families). + - This holds even when Adobe publishes the material under an open licence, if it is **visual design**. For example, **do not** use Source Han, Source Serif or Source Sans, or Noto CJK, which is Source Han rebranded. +- **Never** recreate, trace, redraw or closely imitate an Adobe icon or graphic. Our icons come from Lucide, and our visual design is our own. +- Screenshots of Adobe software exist only as private, local observation notes under `plan/acrobat/`, which is gitignored. They must **never** be committed, published, linked, shown in docs, used as a design source to trace, or placed anywhere else in the repository or its outputs. +- The only Adobe-authored material allowed is **non-visual technical data** that is openly licensed and required for PDF compatibility. Each item needs its own entry in `ATTRIBUTION.toml` with `adobe_data = true`, and the list below is closed: + - The CMap resources (BSD-3-Clause), bundled inside the `hayro-cmap` dependency. + - The standard-14 font metrics and encoding tables in the PDF specification. They are data, not typefaces, and are embedded as code in hayro. + + Adding anything to this list needs the user's explicit approval. + +### 1.2 Only open, provable licences + +Every asset must be one of: +- **Open source:** ISC, MIT, BSD-2-Clause, BSD-3-Clause, Apache-2.0, OFL-1.1, Ubuntu-Font-1.0 or Bitstream-Vera. +- **Creative Commons:** CC0-1.0, CC-BY-4.0 or CC-BY-SA-4.0. +- **Public domain.** +- **Contributor-original:** created, photographed or generated by a contributor who owns it and licenses it under the project licence (`MIT OR Apache-2.0`). + +Anything else is forbidden, including assets whose licence you cannot prove from the source. Examples: +- system fonts (Apple, Microsoft, Google Android system UI fonts that are not openly licensed); +- emoji artwork from Apple, Microsoft or Samsung; +- stock photos; +- "free for personal use" material; +- screenshots of other people's software. + +**Screenshots of PrintCraft** are contributor-original. Everything visible in them must itself be allowed: our UI, Lucide icons, OFL fonts, and demo documents built only from allowed assets. Never screenshot a document that uses proprietary fonts or images. + +### 1.3 Every asset is attributed + +- **`ATTRIBUTION.toml`** (repo root) is the single source of truth. It has **one entry per asset file**, whether committed, vendored, fetched at build time or bundled through a Cargo dependency. Each entry records: + - path or URL, title, author; + - source (URL, with version or commit); + - SPDX licence, and the licence file in the repo; + - SHA-256; + - how it is used. +- **`ATTRIBUTION.md`** is generated from it (`cargo xtask assets --write`). Never edit it by hand. +- **`NOTICE`** keeps the licence notices that the licences require. +- **`cargo xtask assets`** runs in `cargo xtask ci`. It fails if: + - an asset file in the repository has no entry; + - an entry's hash does not match; + - a licence is not on the allowlist; + - a licence file is missing; + - an image, icon or font names Adobe as author or source. +- **`cargo xtask demo-pdf`** downloads its fonts only from `ATTRIBUTION.toml` entries, pinned by SHA-256. Afterwards it **fails if the PDF embeds any font not in its allowlist**, which catches the browser silently falling back to a system font. + +### 1.4 Procedure for adding or changing an asset + +1. Find an asset under an allowed licence from its **original source**: the author's repository or a release, not a random mirror. Record the exact version or commit. +2. Confirm the authorship. It must not be Adobe (§1.1). Keep the licence text. +3. Add the file together with its licence file, plus an `ATTRIBUTION.toml` entry. Run `cargo xtask assets --write`, then `cargo xtask assets`. +4. If an asset's origin or licence is unclear, **do not add it.** Ask the user. + +If you find an asset that breaks these rules, stop and remove it from the repository and every output, including docs, screenshots and generated PDFs. Then tell the user at once. + +--- + +## 2. Clean-room rules (summary; details in `CLAUDE.md` and `plan/adr/0001`) + +- Never read, disassemble or copy anything inside the Acrobat bundle. Only names and listings are allowed, and **never** open `Contents/Resources/JavaScripts/`. +- Behaviour comes only from public specifications (ISO 32000-2, the Arlington model), public documentation and black-box observation. +- Never copy GPL/AGPL code. Copyleft tools run only as external oracle processes. +- Observe Acrobat only with synthetic fixtures. Never capture personal data, account information or recent files. + +## 3. Everything else + +Follow `CLAUDE.md`. It covers quality gates, layering, commit rules and how to run and look at the app. diff --git a/ATTRIBUTION.toml b/ATTRIBUTION.toml new file mode 100644 index 000000000..06c2b68af --- /dev/null +++ b/ATTRIBUTION.toml @@ -0,0 +1,2334 @@ +# ATTRIBUTION.toml: one entry per asset (AGENTS.md §1). The source of truth for provenance and licences. +# ATTRIBUTION.md is generated from this file: `cargo xtask assets --write`. Checked by `cargo xtask assets` (part of `xtask ci`). +# +# [[asset]] a file in this repository (committed or vendored); `sha256` must match the file. +# [[bundled]] a file compiled into PrintCraft by a Cargo dependency (its crate version must match Cargo.lock). +# [[fetched]] downloaded at build time by xtask (never committed), pinned by `sha256`. +# +# licence: SPDX expression from the allowlist in AGENTS.md §1.2. adobe_data = true marks the closed list of +# Adobe-authored non-visual technical data allowed by AGENTS.md §1.1. + +[[asset]] +path = "assets/icons/accessibility.svg" +title = "Lucide icon \"accessibility\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/accessibility.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "14a8513e41d0b1fea22a24a48ef5658ae8bead15f376bf60f9db7d516d09c1db" + +[[asset]] +path = "assets/icons/align-left.svg" +title = "Lucide icon \"align-left\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/align-left.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "30d5abcbed2176ee33b2844c8cdde6fc379c3e9ec28a6a22a1fa916a356c1dcb" + +[[asset]] +path = "assets/icons/app-window.svg" +title = "Lucide icon \"app-window\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/app-window.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "78635d0da597104f526ea01dede8ab4d04ccabc7a2229c4baf17f921b15985de" + +[[asset]] +path = "assets/icons/arrow-left-right.svg" +title = "Lucide icon \"arrow-left-right\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/arrow-left-right.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "2d64da427cbb3f14e522658459903829575b09ec15162c1a69ea6ad341a4359a" + +[[asset]] +path = "assets/icons/arrow-up-down.svg" +title = "Lucide icon \"arrow-up-down\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/arrow-up-down.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "8380bdad937e85cc9c63701ce92ebe27c9e8ea2c710de28fac46f463c1a25f09" + +[[asset]] +path = "assets/icons/arrow-up-right.svg" +title = "Lucide icon \"arrow-up-right\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/arrow-up-right.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "59fb769ed094d290ac57d4154e5e86c27e33b4c250a59fd04d2f9b0ea842bf65" + +[[asset]] +path = "assets/icons/badge-check.svg" +title = "Lucide icon \"badge-check\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/badge-check.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "bf9f82b0ecadeaef6b366e3178402a602b4a470451a13a3bd4c98fdc278161c7" + +[[asset]] +path = "assets/icons/bandage.svg" +title = "Lucide icon \"bandage\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/bandage.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a0e56764e3701ea180950c79975ac3aa14d90924c9fc9b427f7c476ec01eb609" + +[[asset]] +path = "assets/icons/bell.svg" +title = "Lucide icon \"bell\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/bell.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "5227140d3559a4794233779b5008c75e2475db4f761aaa4fdbec14c914721f8a" + +[[asset]] +path = "assets/icons/blend.svg" +title = "Lucide icon \"blend\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/blend.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "cff13925b80ff33a4f9c58114105c7077e2a24bbf1c5b9eb361d7bc706f92240" + +[[asset]] +path = "assets/icons/bold.svg" +title = "Lucide icon \"bold\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/bold.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "373485597d54503eb5da76a7aabbce2231509b89dea9f144361d9ede1aacf934" + +[[asset]] +path = "assets/icons/book-open.svg" +title = "Lucide icon \"book-open\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/book-open.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "2ec21196b84989fe072c282b94060cf244eaba4cf21f63c08aa587ee326fec71" + +[[asset]] +path = "assets/icons/bookmark.svg" +title = "Lucide icon \"bookmark\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/bookmark.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "864613d93fddfb9b22368882c00b7895fa2681ceb3ed45c85a1cf2c3d01a3aad" + +[[asset]] +path = "assets/icons/braces.svg" +title = "Lucide icon \"braces\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/braces.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "c793670f91c7aab05bc58779e5956935a5307c12c62ec91364439d063d4d74c6" + +[[asset]] +path = "assets/icons/brush-cleaning.svg" +title = "Lucide icon \"brush-cleaning\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/brush-cleaning.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "16501b23a40f7d446d4047deaaa92b99236ae4caebe5b2e9eb47169a12a6a4a1" + +[[asset]] +path = "assets/icons/brush.svg" +title = "Lucide icon \"brush\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/brush.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "70a2174ebd2601367ba0e8ce6ddb3d6a844d5d17e24235197f04481a1bed27e9" + +[[asset]] +path = "assets/icons/camera.svg" +title = "Lucide icon \"camera\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/camera.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "5702e28d75e57ec05aa0ec98ae74e928c3604f5ea4634c4584e33363fd886c3a" + +[[asset]] +path = "assets/icons/check-circle-2.svg" +title = "Lucide icon \"check-circle-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/check-circle-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "765ebd1031367e2fd2a940b62f4402fac8976dea0210b0e3b1e59a2c75897928" + +[[asset]] +path = "assets/icons/check.svg" +title = "Lucide icon \"check\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/check.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "7f33acc9a77a61659531044525fc008edebe215bf4dcf1c789c8674ad3277db0" + +[[asset]] +path = "assets/icons/chevron-down.svg" +title = "Lucide icon \"chevron-down\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/chevron-down.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "66ea878e72ed3488bb3b464c39dfdccee8d1f78e560dccea40e5e12da0e87e87" + +[[asset]] +path = "assets/icons/chevron-left.svg" +title = "Lucide icon \"chevron-left\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/chevron-left.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "9d4c68b2301b07a424056d43a7cda715678be2b10d5344183261a3b48a752d36" + +[[asset]] +path = "assets/icons/chevron-right.svg" +title = "Lucide icon \"chevron-right\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/chevron-right.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "2758143d7b2434e4aa7307dfd34405c87909ff4052f21b5f3f40d45224b4f19b" + +[[asset]] +path = "assets/icons/chevron-up.svg" +title = "Lucide icon \"chevron-up\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/chevron-up.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "e7c0f5229a9b40bfc598f38e4c76099780bdd0747927c98322e816772d929b63" + +[[asset]] +path = "assets/icons/chevrons-left.svg" +title = "Lucide icon \"chevrons-left\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/chevrons-left.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "ec966bce841337a305fc7fbc0dab04c650dc9fb7f313d78645ea33378bef06e7" + +[[asset]] +path = "assets/icons/chevrons-right.svg" +title = "Lucide icon \"chevrons-right\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/chevrons-right.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "3491f9fe180bf75a058d480f32a0d26ff6a97c6c9a70315c77df7c6b75329d91" + +[[asset]] +path = "assets/icons/circle-check.svg" +title = "Lucide icon \"circle-check\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/circle-check.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "201e790f3a05c65b2c4b0f952c9b9e1f35cd1c5b21698b3f4be131883fe90bc8" + +[[asset]] +path = "assets/icons/circle-dashed.svg" +title = "Lucide icon \"circle-dashed\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/circle-dashed.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "9b964be491a821be8ffd714baf3b94ca2d70af789bddcfc1bda6bde250d89187" + +[[asset]] +path = "assets/icons/circle-dot.svg" +title = "Lucide icon \"circle-dot\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/circle-dot.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "c263f6a08a089c06ad40f408ad5da9100359ab52d379e6c571cd7c5bd74eaa87" + +[[asset]] +path = "assets/icons/circle-help.svg" +title = "Lucide icon \"circle-help\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/circle-help.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4c98aa38a1b10d938d6a51b89f29f484277662df09c816ccfabbcbf5c28c3de4" + +[[asset]] +path = "assets/icons/circle.svg" +title = "Lucide icon \"circle\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/circle.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "40e0367d4353eb24f6faa37332cbe9a7b2a0548ab7eed1f2c589e546c58656a5" + +[[asset]] +path = "assets/icons/clock-3.svg" +title = "Lucide icon \"clock-3\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/clock-3.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "e3f6615d593ff5a5d6409efe8db462a4af71e22379ea1d8d8323241e06b3da57" + +[[asset]] +path = "assets/icons/clock.svg" +title = "Lucide icon \"clock\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/clock.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "e9d3e3acf4d1c280fcf8092293439dc0a4756a908ceb859de144b12451cd1cb9" + +[[asset]] +path = "assets/icons/cloud-upload.svg" +title = "Lucide icon \"cloud-upload\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/cloud-upload.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "e45a217268e550c3f9e08a4cbd4b30c24e3994f6f58b481930a3ec43b52f8ef3" + +[[asset]] +path = "assets/icons/cloud.svg" +title = "Lucide icon \"cloud\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/cloud.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "8f19866847075907fdc862e13354d5c81da2f7ba23c9df354514789f6db4c855" + +[[asset]] +path = "assets/icons/columns-2.svg" +title = "Lucide icon \"columns-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/columns-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "6198d8a47ed17aeff727ba07da1ec0ae35fc33d4509a7b2b486e4934f2ba8e56" + +[[asset]] +path = "assets/icons/compass.svg" +title = "Lucide icon \"compass\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/compass.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "c5a4d147bf48424f48b514712dd61c1b07cb689612a7baef87c88870092c1659" + +[[asset]] +path = "assets/icons/contrast.svg" +title = "Lucide icon \"contrast\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/contrast.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a9f1a6166c479cd3e546625b09686a7e97322c850a9b146f270f912e886c395c" + +[[asset]] +path = "assets/icons/copy-plus.svg" +title = "Lucide icon \"copy-plus\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/copy-plus.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "37142d5673196e4e32fbf3e17e5010fa6cd39d225b084215d58e8601129d2458" + +[[asset]] +path = "assets/icons/copy.svg" +title = "Lucide icon \"copy\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/copy.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "ea80e566c7a12628a447cb53179b19aea4f60b9143e2becd0d0f20bf260e5718" + +[[asset]] +path = "assets/icons/crop.svg" +title = "Lucide icon \"crop\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/crop.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "9229f7832445ee0caa15eecd6323397a3ebb5c9a124f923212605ad3529d64b8" + +[[asset]] +path = "assets/icons/droplet.svg" +title = "Lucide icon \"droplet\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/droplet.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "abca4df60f91c605d945c6fe5ee0e6c919b53116d81e268f4581f8841bf24751" + +[[asset]] +path = "assets/icons/ellipsis-vertical.svg" +title = "Lucide icon \"ellipsis-vertical\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/ellipsis-vertical.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "e2f2969f90b09eba9196fdcb46c7b5c6a37da2852c8dd7dbfa320a2fffac0e96" + +[[asset]] +path = "assets/icons/ellipsis.svg" +title = "Lucide icon \"ellipsis\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/ellipsis.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4f495cc72013ffdfec677f03b33a150f7b4dd741979283fd6853a09024bca112" + +[[asset]] +path = "assets/icons/eraser.svg" +title = "Lucide icon \"eraser\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/eraser.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "838d4355dd49340523c38a22a2d23f1aca72ef42f8eba79f6a0c84bf6e27b929" + +[[asset]] +path = "assets/icons/eye-off.svg" +title = "Lucide icon \"eye-off\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/eye-off.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "774bcd975c5de781a4ee778c76e5591bcdeb409955f7054847e7e6003da0a520" + +[[asset]] +path = "assets/icons/eye.svg" +title = "Lucide icon \"eye\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/eye.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "5bf90197dd7629cad64a2e48d1186a71559deb6121207d10e3dc5b19ebaffdcf" + +[[asset]] +path = "assets/icons/file-check.svg" +title = "Lucide icon \"file-check\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-check.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "b49990be253930f060a292e317fb3d179c02b890fbdcf3425d383936cd58c7eb" + +[[asset]] +path = "assets/icons/file-down.svg" +title = "Lucide icon \"file-down\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-down.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "d82f725376e5e79100a90a7bb51e22c744e80b93dccd890f5fbdb846435d697b" + +[[asset]] +path = "assets/icons/file-input.svg" +title = "Lucide icon \"file-input\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-input.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "2a47f8ccd404b40e4be1192ef9d64f52da351843806af233e803c67e5957078e" + +[[asset]] +path = "assets/icons/file-lock-2.svg" +title = "Lucide icon \"file-lock-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-lock-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "d375ea90750602c62651ca8a83f969b2fd892bab62c35204202cbdb8b69867f9" + +[[asset]] +path = "assets/icons/file-minus.svg" +title = "Lucide icon \"file-minus\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-minus.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a732f26975a788eb729ed5b0dbc229e73cd628020265feb44d733ef56c14c23d" + +[[asset]] +path = "assets/icons/file-output.svg" +title = "Lucide icon \"file-output\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-output.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "f17e82a531938fe09b82c7a8ea712c71f756a07f0274dd95fa51ca50167dfc3c" + +[[asset]] +path = "assets/icons/file-pen-line.svg" +title = "Lucide icon \"file-pen-line\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-pen-line.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a9d6d27a64ab0cd8fab8e618ab2da8b0037ded02290f4dd67675567353af8d2f" + +[[asset]] +path = "assets/icons/file-plus-2.svg" +title = "Lucide icon \"file-plus-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-plus-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "08538fb09dbf314c36941949b4c3c41d250a127283d487d8557115768a996ee1" + +[[asset]] +path = "assets/icons/file-plus.svg" +title = "Lucide icon \"file-plus\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-plus.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "bbcf862a2a4425baa8a5bda39c7f16ec1d283816a3db77baf84f2e8766dd223e" + +[[asset]] +path = "assets/icons/file-scan.svg" +title = "Lucide icon \"file-scan\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-scan.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "af56d89c39dce00d85d90ac67b85a42818b445e63a9b467edeaa6998e529d216" + +[[asset]] +path = "assets/icons/file-search.svg" +title = "Lucide icon \"file-search\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-search.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4be1b0d68f4a40236ad69dc724e7f18715c63347ed183688c546efa5fc46ef77" + +[[asset]] +path = "assets/icons/file-symlink.svg" +title = "Lucide icon \"file-symlink\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-symlink.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "cc3831d50f9c3a526f8e15f0d9ead60cf00d3dd15d157c0f2920fea713404c60" + +[[asset]] +path = "assets/icons/file-text.svg" +title = "Lucide icon \"file-text\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-text.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "56582e205bca1dc510113d529ea45e5ff83fc19761cafd23b94f72f3b3b83844" + +[[asset]] +path = "assets/icons/file-x.svg" +title = "Lucide icon \"file-x\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-x.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "be612116328caa8b47a4013d8de36a59082ef75c687504e9489b0afca0e3736b" + +[[asset]] +path = "assets/icons/files.svg" +title = "Lucide icon \"files\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/files.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "8d8fa5955c5e9c86a1104936b1288958f77c6c9b68288d4404299e7817e47b66" + +[[asset]] +path = "assets/icons/film.svg" +title = "Lucide icon \"film\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/film.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "3271f1e5b684d2d60f0370f074fb87d611a138162d27959cb3ec5260eb912771" + +[[asset]] +path = "assets/icons/filter.svg" +title = "Lucide icon \"filter\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/filter.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "694054f56e5476f88eb262258f6a865558f1c89c9106d29b5c08f1ce865c2190" + +[[asset]] +path = "assets/icons/folder-open.svg" +title = "Lucide icon \"folder-open\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/folder-open.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "ee57452b40e71df310214091dd9da1941a397c83197b8ff8d7ae66dd4242578b" + +[[asset]] +path = "assets/icons/folder-plus.svg" +title = "Lucide icon \"folder-plus\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/folder-plus.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "76d62eb7796ce6c7e303c437464923de2d1ae19a5c8d010f8b36dfc1d6180890" + +[[asset]] +path = "assets/icons/folder.svg" +title = "Lucide icon \"folder\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/folder.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "f0d92b94b797a8ab7d4c4ae33c3236c47f64068351b4e14bdb5014ee42898a39" + +[[asset]] +path = "assets/icons/gauge.svg" +title = "Lucide icon \"gauge\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/gauge.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "d7710543a5085c5a61d0bbac1da8b89ef28e541b38ed739357991dff33d475b5" + +[[asset]] +path = "assets/icons/git-compare.svg" +title = "Lucide icon \"git-compare\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/git-compare.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "2cafe78609903c93e1d7c3f9ebfcbcf855b86e9c8b223ef15b4d56d8b52c3809" + +[[asset]] +path = "assets/icons/grid-3x3.svg" +title = "Lucide icon \"grid-3x3\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/grid-3x3.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "6c24155397cf0e751c05931bae68e67e4fe0fd58baeb7b29e9f80c90ed1d5194" + +[[asset]] +path = "assets/icons/hand.svg" +title = "Lucide icon \"hand\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/hand.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "fe3771fa2f0a9a3c7736164c9a855beefacc02548084ac1d6fc8da8a8a9180b0" + +[[asset]] +path = "assets/icons/hash.svg" +title = "Lucide icon \"hash\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/hash.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "077da53f7eca1e2b218fb01cd64355ab152451178017b810371cd4237e147b89" + +[[asset]] +path = "assets/icons/heading.svg" +title = "Lucide icon \"heading\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/heading.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "cba292c255357a7fc4bfcff46789f00fb70a934b9d524cee22b434ff61ff7b37" + +[[asset]] +path = "assets/icons/highlighter.svg" +title = "Lucide icon \"highlighter\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/highlighter.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "c7468ec5c64330662b57e71c10a4c8538a501038f4c44ed0469dfb1e04ed7d3a" + +[[asset]] +path = "assets/icons/house.svg" +title = "Lucide icon \"house\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/house.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "12247b4183e3041c0925003d6dc42c838a2190276f0ece72b2b393212530a64d" + +[[asset]] +path = "assets/icons/image-plus.svg" +title = "Lucide icon \"image-plus\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/image-plus.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "ed4944f92b6f84af9e32acabe238a659330847fcd75ad81b20865ac27e108732" + +[[asset]] +path = "assets/icons/image.svg" +title = "Lucide icon \"image\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/image.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "619c9db58c879dce6250376ba67d9c9102ca6dbb3b1efb9294c9f180e22273a5" + +[[asset]] +path = "assets/icons/info.svg" +title = "Lucide icon \"info\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/info.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "bc977a64eb96f3e9c1041ffd09a3fceb70e3e65c02b571f76064062ed31f3cb9" + +[[asset]] +path = "assets/icons/italic.svg" +title = "Lucide icon \"italic\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/italic.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "189b65467080a06a6cd99b431be3c54752915eb2efaa2dda9a6dc4b0b037ff43" + +[[asset]] +path = "assets/icons/languages.svg" +title = "Lucide icon \"languages\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/languages.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "7e86095a7a5937a8388c9a8a8753399062c9f59fe5ddea162d7a6fbdc2e4ddfa" + +[[asset]] +path = "assets/icons/lasso.svg" +title = "Lucide icon \"lasso\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/lasso.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "6b063dbff366eb4768c9d5cbdf4f03f218b9a807c5c730e87c004690696952fa" + +[[asset]] +path = "assets/icons/layers.svg" +title = "Lucide icon \"layers\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/layers.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "ce16d0a955e3581cda17f6b2fd5c5bc2034b405f9cecc31c8ebb8495b4afc1bb" + +[[asset]] +path = "assets/icons/layout-grid.svg" +title = "Lucide icon \"layout-grid\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/layout-grid.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "c4dee78bfdc06e9abf18e7655f75489c891aa028188b6260116f491558e187ea" + +[[asset]] +path = "assets/icons/link-2.svg" +title = "Lucide icon \"link-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/link-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4361be66d28b313a2856a520677dc754eb8195094b8c6be9759e021850a28313" + +[[asset]] +path = "assets/icons/link.svg" +title = "Lucide icon \"link\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/link.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4f3237183dcaabfac92f4e94c776a9a9e45c3c5e77a921061a6b34b61eb5413f" + +[[asset]] +path = "assets/icons/list-checks.svg" +title = "Lucide icon \"list-checks\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/list-checks.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4a1cf4c9c25b4c80462573775fd58a62f8db71d917c1d3288c56089ab0005191" + +[[asset]] +path = "assets/icons/list-ordered.svg" +title = "Lucide icon \"list-ordered\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/list-ordered.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "179b2d82ab358e7785eee08e1e60c84b7fa70530904838a3106e8255dc0b015b" + +[[asset]] +path = "assets/icons/list.svg" +title = "Lucide icon \"list\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/list.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4866bb4c3a207f3f924f0034de0bb4f57774e059d53b2cb90488128b334f5e90" + +[[asset]] +path = "assets/icons/lock-open.svg" +title = "Lucide icon \"lock-open\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/lock-open.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "f167153e8fec4008d6946f28035607636ed0b04dcfecdf58d7204db0b3d030f2" + +[[asset]] +path = "assets/icons/lock.svg" +title = "Lucide icon \"lock\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/lock.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "d2cfe60cac8deaef36442b5c8218c1e61abe18222784b2a370ea090d13fca840" + +[[asset]] +path = "assets/icons/maximize-2.svg" +title = "Lucide icon \"maximize-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/maximize-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "9b8413ad44a3d4f5a80049713743daddcdc3c5465a71c218cac156a99f582b5b" + +[[asset]] +path = "assets/icons/maximize.svg" +title = "Lucide icon \"maximize\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/maximize.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "f55ca094be0970b29367eb285ec640360402ae73a19894f0d59ebd4873df75e4" + +[[asset]] +path = "assets/icons/message-circle-reply.svg" +title = "Lucide icon \"message-circle-reply\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/message-circle-reply.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "9c073ecf0d27857130a28c7526658156e7ef5b7b2ead46d9738556d68074d14b" + +[[asset]] +path = "assets/icons/message-square-text.svg" +title = "Lucide icon \"message-square-text\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/message-square-text.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "7df41ce0c2b74654d44eee6a639433af6172c9ea82d8ade3eb68f636ec2a9933" + +[[asset]] +path = "assets/icons/message-square.svg" +title = "Lucide icon \"message-square\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/message-square.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "5812a3be783fdcd73efd2b6026e03131e4b8c6649e7d52aa2dc7bf2e2023a59d" + +[[asset]] +path = "assets/icons/mic.svg" +title = "Lucide icon \"mic\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/mic.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "b1be29238f563ba7e3623ad8e0e0bc51285f17c8bd5d4c37aa5c6b6263e2dbf8" + +[[asset]] +path = "assets/icons/minimize.svg" +title = "Lucide icon \"minimize\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/minimize.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "fe917d6144a9aed9a5297cb28addb9e582ac591a8f1c498a55aecea9b5c1783e" + +[[asset]] +path = "assets/icons/minus.svg" +title = "Lucide icon \"minus\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/minus.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a0c743ab6dbf545d8a6e19ef3874f48ede686ce68d25e231bd81f540d97b1f19" + +[[asset]] +path = "assets/icons/moon.svg" +title = "Lucide icon \"moon\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/moon.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "205b959e940d5841f0ce1d09c933153da9d9c94130a54d5cc0c68c2af1d403da" + +[[asset]] +path = "assets/icons/mouse-pointer-2.svg" +title = "Lucide icon \"mouse-pointer-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/mouse-pointer-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a87128b1d33024c22ab598d1ce313081ce8942efd1a70274215bcc53421b7c7e" + +[[asset]] +path = "assets/icons/move.svg" +title = "Lucide icon \"move\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/move.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "915074a1292f72d59165339b8b93f8d440c8d55b7116b52fca240b9ded5af74d" + +[[asset]] +path = "assets/icons/navigation.svg" +title = "Lucide icon \"navigation\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/navigation.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "3c1adf655f06c733013ddf00848c3efe905ed70d7b3eba7a6be5e60e65880503" + +[[asset]] +path = "assets/icons/paint-bucket.svg" +title = "Lucide icon \"paint-bucket\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/paint-bucket.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "456e35597fb306f3e0e97d6e1b091df371cfe546854f2444da8063c89cca7a9c" + +[[asset]] +path = "assets/icons/palette.svg" +title = "Lucide icon \"palette\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/palette.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "8e7d3fde990cffd10469ba351f27c50202b057a9bb9af5626322e53fd3abc78c" + +[[asset]] +path = "assets/icons/panel-left.svg" +title = "Lucide icon \"panel-left\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/panel-left.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "bafd841b89deadd12a571ba9e7d15473751dc51f46e857f7c2ab09a32bd01a79" + +[[asset]] +path = "assets/icons/panel-right.svg" +title = "Lucide icon \"panel-right\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/panel-right.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "327d197328f9feb1f88c36c9db04e9b00fe717d877459f92fcd892f5e4c349fa" + +[[asset]] +path = "assets/icons/panels-top-left.svg" +title = "Lucide icon \"panels-top-left\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/panels-top-left.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "321a2a5500f2b814a2e62eb73c4b01dc65c7334fe2e6f7d77517239383e26bb1" + +[[asset]] +path = "assets/icons/paperclip.svg" +title = "Lucide icon \"paperclip\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/paperclip.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "d1ee1380a653f5a560b9be83efde570fc6fddd0a13437cc17cbab675fe070782" + +[[asset]] +path = "assets/icons/pen-line.svg" +title = "Lucide icon \"pen-line\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/pen-line.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "195939cbf88689334dc3a9d64bd0b3f459ce1de7d71e53620f6b0448b958f9c8" + +[[asset]] +path = "assets/icons/pen-tool.svg" +title = "Lucide icon \"pen-tool\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/pen-tool.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a31b434a7b7e379bd37b05fe7ae4b632c0cf38baf7463a726961ce65dd0cb089" + +[[asset]] +path = "assets/icons/pencil.svg" +title = "Lucide icon \"pencil\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/pencil.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a73f639dbe723e9aea20a08ecd48b0e1aa50d7a176c71ac615bdfa720c3b6e86" + +[[asset]] +path = "assets/icons/pipette.svg" +title = "Lucide icon \"pipette\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/pipette.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "dad18ee11312000529dbfaa6c60fa8da00773eebe91e23633d8f4baca8421cdc" + +[[asset]] +path = "assets/icons/plus.svg" +title = "Lucide icon \"plus\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/plus.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "7f6af73bf1ff6c4bca3f18351c8d1bdec6749c0c2530c4de5da85d520c21df17" + +[[asset]] +path = "assets/icons/presentation.svg" +title = "Lucide icon \"presentation\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/presentation.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "0a97d7e69391dd12bfa33e9295bcb891085c045a1bd8dcef84461b3eab784729" + +[[asset]] +path = "assets/icons/printer.svg" +title = "Lucide icon \"printer\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/printer.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "f8f15151f722f614d5e1e4b7b6af7f3ce87e63a637f6a8291bb4fb9b8f5dfd61" + +[[asset]] +path = "assets/icons/rectangle-horizontal.svg" +title = "Lucide icon \"rectangle-horizontal\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/rectangle-horizontal.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "7c76ec54521e399c3216ff0864e30e35b457205b110ee153e787316eb550be59" + +[[asset]] +path = "assets/icons/redo-2.svg" +title = "Lucide icon \"redo-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/redo-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4cbd2cdebc70b6b7979c681ed3f313d9cbb102465dcf7d0d2d6a72c937b344bc" + +[[asset]] +path = "assets/icons/replace.svg" +title = "Lucide icon \"replace\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/replace.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "1ab8cdcc42f7e5e20d4fe19988a78790146edfb749cb6e9269cfda58aeb1dddb" + +[[asset]] +path = "assets/icons/rotate-ccw.svg" +title = "Lucide icon \"rotate-ccw\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/rotate-ccw.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "02f2a0344ebca39676cc64a9b78472744cc18904123affb99e05aae5c06e34b6" + +[[asset]] +path = "assets/icons/rotate-cw.svg" +title = "Lucide icon \"rotate-cw\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/rotate-cw.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "cdb42aaf99e23b9775d6b8df4dd75338220e64f48d581ca7f40356940d40bd0e" + +[[asset]] +path = "assets/icons/ruler.svg" +title = "Lucide icon \"ruler\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/ruler.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "40a639ed7d0f80527f7482639e9c6f3970497a43680c9cd406eb5165d7b9ab4d" + +[[asset]] +path = "assets/icons/save.svg" +title = "Lucide icon \"save\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/save.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "ec6b42742c642d7f140c9a59fc45ce6b0e3a9ae8632911415dec9126d7557bcc" + +[[asset]] +path = "assets/icons/scan-text.svg" +title = "Lucide icon \"scan-text\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/scan-text.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "6a995962733ed8b126c606221692a2a88f5f7c105f5202f03cc804958534a457" + +[[asset]] +path = "assets/icons/scan.svg" +title = "Lucide icon \"scan\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/scan.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "c77f0e634b2451a14a262a59b61d75bbcea3994b16eeba1f5753e86b33282a4d" + +[[asset]] +path = "assets/icons/scissors.svg" +title = "Lucide icon \"scissors\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/scissors.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4c831fc2c903825f68565c28ffab945c34b2c60b6c564e2ae54250e1099fa550" + +[[asset]] +path = "assets/icons/search.svg" +title = "Lucide icon \"search\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/search.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "283d371c2e433817bb9c0c8310caa6c77fa4177c0f4f1168d9c83b97af7389dc" + +[[asset]] +path = "assets/icons/send.svg" +title = "Lucide icon \"send\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/send.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "058ad0cd31ab7c30e6c306236f2528b4f556dc80b7199399a9a800aeff77f4db" + +[[asset]] +path = "assets/icons/settings-2.svg" +title = "Lucide icon \"settings-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/settings-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "0deae2e31f13e1550b39dedd1fa8e3e6b7dd68fdd8f5680c06c761416eb46196" + +[[asset]] +path = "assets/icons/settings.svg" +title = "Lucide icon \"settings\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/settings.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "0ae27fd0f81999229e3127ac96c5b32edfea448e291d509e76212b917551d66b" + +[[asset]] +path = "assets/icons/share-2.svg" +title = "Lucide icon \"share-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/share-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "dafcc50305ff3f26016016d6ba8eedae5ae2861c03e4f534423a8220a5eb4056" + +[[asset]] +path = "assets/icons/shield-check.svg" +title = "Lucide icon \"shield-check\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/shield-check.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "1b98a38ef1bf5fe95d0ec8795d83fde64a211759fabf3a00eb0a1d26f147843a" + +[[asset]] +path = "assets/icons/signature.svg" +title = "Lucide icon \"signature\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/signature.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "6a3827f903c29f75eb010aa18d4c46e84541e04e5ab7d6041ec95b3a0b0fdb27" + +[[asset]] +path = "assets/icons/sliders-horizontal.svg" +title = "Lucide icon \"sliders-horizontal\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/sliders-horizontal.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "e43a00e5eb684e6cbb61083bed2528d7a3fa5f265693eb2b5f314cd432aa65f4" + +[[asset]] +path = "assets/icons/sparkles.svg" +title = "Lucide icon \"sparkles\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/sparkles.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "f5499f33f09d7158151e9bd2ec0faf79ff8fb57292f84fdd7286d96d0f0424d8" + +[[asset]] +path = "assets/icons/spline.svg" +title = "Lucide icon \"spline\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/spline.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "12ab21825926c786bda749f3faa1fb905cfeec0fa1d4848525033f72199ad529" + +[[asset]] +path = "assets/icons/square-dashed-mouse-pointer.svg" +title = "Lucide icon \"square-dashed-mouse-pointer\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/square-dashed-mouse-pointer.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "01f48e7e8757bdcc015741a543530bf97a7815647c5dc20450a2d26501bb94ff" + +[[asset]] +path = "assets/icons/square-dashed.svg" +title = "Lucide icon \"square-dashed\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/square-dashed.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "bb7958e30d2658e90c3eaaa01d4808fa7a7427bc1ae1744a0fe016ddda258b2a" + +[[asset]] +path = "assets/icons/square.svg" +title = "Lucide icon \"square\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/square.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "bd979354f0ab184b95cecf03eedefe40c2dc65830ac6d7e60017b2b25a354acb" + +[[asset]] +path = "assets/icons/squares-subtract.svg" +title = "Lucide icon \"squares-subtract\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/squares-subtract.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "662139de4397f334617c9fbfbd733e3f0581d4eb375b02ec496de3d45b1e95d8" + +[[asset]] +path = "assets/icons/stamp.svg" +title = "Lucide icon \"stamp\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/stamp.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "35a73f33fb942f17fa36669fda5a60b9dad59dacfa1d9207ffbc003f1bf4ba33" + +[[asset]] +path = "assets/icons/star.svg" +title = "Lucide icon \"star\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/star.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "6456b4232f3b690c4ac9d3b9a158986fb33880be6b9f966e891b2ff5c474c9ff" + +[[asset]] +path = "assets/icons/sticky-note.svg" +title = "Lucide icon \"sticky-note\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/sticky-note.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "3ed53dd62051499d8429d3d003a6107c6412090f4a3bec1cba63fa6e12990840" + +[[asset]] +path = "assets/icons/strikethrough.svg" +title = "Lucide icon \"strikethrough\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/strikethrough.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "32828fca3c3dd010931fa903268ca108dc84d6d8343eb41eeea27fd6f18a4261" + +[[asset]] +path = "assets/icons/sun.svg" +title = "Lucide icon \"sun\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/sun.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "a3955c8b0425fcc5c9ba12d2bdd77fe53b2cd5dd05e7742a56f342e996fb2ef8" + +[[asset]] +path = "assets/icons/swatch-book.svg" +title = "Lucide icon \"swatch-book\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/swatch-book.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "08e8ae6cead6b01282961d90a891a1d4332495b8fe8df616a17b2b2e249d37cc" + +[[asset]] +path = "assets/icons/tag.svg" +title = "Lucide icon \"tag\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/tag.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "d90bf7dbca84f33b4256d7da9365998719d4734ca7e2b36d1ffef1b62ebd9259" + +[[asset]] +path = "assets/icons/text-cursor-input.svg" +title = "Lucide icon \"text-cursor-input\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/text-cursor-input.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "40c83d2e570512e61ea71547a0176a50d20691296dc1e07b59570838d898e6aa" + +[[asset]] +path = "assets/icons/text-select.svg" +title = "Lucide icon \"text-select\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/text-select.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "185cee1a1c40a816ff26844bf248311a4e84676b346d0094d4d546db6db943a8" + +[[asset]] +path = "assets/icons/trash-2.svg" +title = "Lucide icon \"trash-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/trash-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "6758190a97e7cd6b857e0cf244130726265643a5adfffe3df1ace2792e1ecd16" + +[[asset]] +path = "assets/icons/trash.svg" +title = "Lucide icon \"trash\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/trash.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "27299f69ad7c6272be64b1b8e2d48cbd6dcf0ef0d4f92827a1affa945c91700e" + +[[asset]] +path = "assets/icons/triangle-alert.svg" +title = "Lucide icon \"triangle-alert\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/triangle-alert.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "55aa37e0b73e7f8cd906952dbdeb96283c6595ca64aba240a17f3455cb989114" + +[[asset]] +path = "assets/icons/type.svg" +title = "Lucide icon \"type\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/type.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "82c514732330f9c36c0f1f7fd1034634fa6ad21ba2016ffa76cf5d9608c3d6b1" + +[[asset]] +path = "assets/icons/underline.svg" +title = "Lucide icon \"underline\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/underline.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "ed6037142dbf22b4d4f30d7ac57441898df91d4cba3e1fb685deb82cb227f86c" + +[[asset]] +path = "assets/icons/undo-2.svg" +title = "Lucide icon \"undo-2\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/undo-2.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "efad2edbbd2be6038cc23fd64df2d012fad5cc6460dfbf227cfa3d990e9e897f" + +[[asset]] +path = "assets/icons/user-round.svg" +title = "Lucide icon \"user-round\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/user-round.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "15811db4bba24c2f413a252a78e5ba885e8fe9234ca0f182d0b6039685dee6b0" + +[[asset]] +path = "assets/icons/wand-sparkles.svg" +title = "Lucide icon \"wand-sparkles\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/wand-sparkles.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "d73067ff2463118d4f11f9c532e7162be45f96835b966b4fc89977ca47a7317d" + +[[asset]] +path = "assets/icons/wrench.svg" +title = "Lucide icon \"wrench\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/wrench.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "5566c462ba64bc343dd7dd0ba3a45c6b916fdd6f20ff8ffc2099551a3443dd21" + +[[asset]] +path = "assets/icons/x.svg" +title = "Lucide icon \"x\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/x.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "4a9cdab38fbb96162e7dace28e33f4ca0e49d8963a6162abc3d4691b7d675117" + +[[asset]] +path = "assets/icons/zoom-in.svg" +title = "Lucide icon \"zoom-in\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/zoom-in.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "91206ae20013e2c84f2f5d09db5a7200f11698a84fc4e857b06fab2ce7c933f1" + +[[asset]] +path = "assets/icons/zoom-out.svg" +title = "Lucide icon \"zoom-out\"" +author = "Lucide Contributors (portions Cole Bemis, Feather)" +source = "https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/zoom-out.svg)" +licence = "ISC" +licence_file = "assets/icons/LICENSE-lucide.txt" +kind = "icon" +usage = "UI icon, embedded via crates/ui-egui/src/icon_data.rs" +sha256 = "486119c5803718fce74a1e2fe9b93bca4864fd9178139ca355339011e989bcb8" + +[[asset]] +path = "assets/fonts/Inter-Regular.ttf" +title = "Inter Regular" +author = "The Inter Project Authors (Rasmus Andersson)" +source = "https://github.com/rsms/inter" +licence = "OFL-1.1" +licence_file = "assets/fonts/OFL-Inter.txt" +kind = "font" +usage = "UI font, embedded in the app; demo PDF labels" +sha256 = "40d692fce188e4471e2b3cba937be967878f631ad3ebbbdcd587687c7ebe0c82" + +[[asset]] +path = "assets/fonts/Inter-Medium.ttf" +title = "Inter Medium" +author = "The Inter Project Authors (Rasmus Andersson)" +source = "https://github.com/rsms/inter" +licence = "OFL-1.1" +licence_file = "assets/fonts/OFL-Inter.txt" +kind = "font" +usage = "UI font, embedded in the app; demo PDF labels" +sha256 = "97ad806f526e41546d46365bb3a393145f75b7b1568913db74549ad8b8dba872" + +[[asset]] +path = "assets/fonts/Inter-SemiBold.ttf" +title = "Inter SemiBold" +author = "The Inter Project Authors (Rasmus Andersson)" +source = "https://github.com/rsms/inter" +licence = "OFL-1.1" +licence_file = "assets/fonts/OFL-Inter.txt" +kind = "font" +usage = "UI font, embedded in the app; demo PDF labels" +sha256 = "78a843fade9d4612a5567302fb595b56976eb5fcebf4fea5a5912d638bafcde3" + +[[asset]] +path = "assets/fonts/JetBrainsMono-Regular.ttf" +title = "JetBrains Mono Regular" +author = "The JetBrains Mono Project Authors" +source = "https://github.com/JetBrains/JetBrainsMono" +licence = "OFL-1.1" +licence_file = "assets/fonts/OFL-JetBrainsMono.txt" +kind = "font" +usage = "UI monospace font; demo PDF code" +sha256 = "e6fd0d7e91550b3ed2b735d4312474362c4716edc4fc0577a0f61ed782d5aed1" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitDingbats.pfb" +title = "FoxitDingbats (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "845c752392b6c914fb989c75a08b7792b88f542d2499042ef2889f8c814a16ed" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitFixed.pfb" +title = "FoxitFixed (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "b6c8fe53f134b8b6d4578cd2d544df4cee9624c4efa8d51a560fb40ea296101b" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitFixedBold.pfb" +title = "FoxitFixedBold (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "f1b7159702973f54fc86254ea38bcf3712b2a736eb3a0995751e9f4bb45ad603" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitFixedBoldItalic.pfb" +title = "FoxitFixedBoldItalic (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "8a000945843bd31add06aee63bf9fd41b7578b4f3242a4b7cd46349ad9d24d4d" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitFixedItalic.pfb" +title = "FoxitFixedItalic (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "5007faf8320fa1fcc08b8894b356ad976f60b992ba29ee5272578bbdebaf3876" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSans.pfb" +title = "FoxitSans (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "a02339e95d20db14cbdfc1c6baf359cd36a091d5434925c3a4040f60e1a1af9e" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSansBold.pfb" +title = "FoxitSansBold (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "7bdfa36de1d5757dcfaf8b8a4be95c6e41c40fa70dbed9d78bf979a7b9959054" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSansBoldItalic.pfb" +title = "FoxitSansBoldItalic (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "555ce45924338e2e4b32821910221ce85da691fd59a9723c4c971a7c5627fc8b" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSansItalic.pfb" +title = "FoxitSansItalic (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "7751cbefeda351708dae8c4a88db043411bc39ab2ae2097685da845d4d16f307" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSerif.pfb" +title = "FoxitSerif (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "4f57d2b9d884af8f907bf22df6019b52d86cbf6214fdbd02b1ae05472a543f35" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSerifBold.pfb" +title = "FoxitSerifBold (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "0bdf4b04e964139818d51eda03d566ba999fc3ba2421b1c6c51f9dc969022e80" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSerifBoldItalic.pfb" +title = "FoxitSerifBoldItalic (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "a406cac82583bf98175cb62c87ed5e95c45fbb34eece63a10b0a13e793cb2e10" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSerifItalic.pfb" +title = "FoxitSerifItalic (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "610ae0687198045c4db5d1a6650fd5e92536631706382eb8b72e38df578d0ae9" + +[[asset]] +path = "vendor/hayro-interpret/assets/FoxitSymbol.pfb" +title = "FoxitSymbol (standard-14 substitute font)" +author = "Foxit Software Inc. / PDFium Authors" +source = "https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/)" +licence = "BSD-3-Clause" +licence_file = "vendor/hayro-interpret/assets/LICENSE_FOXIT" +kind = "font" +usage = "Renders non-embedded standard-14 fonts (vendored hayro-interpret)" +sha256 = "47967d055530e7357088a08403115425643ec2cdfd6201ba8af0fbd7116c1539" + +[[asset]] +path = "vendor/hayro-interpret/assets/CGATS001Compat-v2-micro.icc" +title = "CGATS001Compat v2 micro ICC profile" +author = "Clinton Ingram (saucecontrol/Compact-ICC-Profiles)" +source = "https://github.com/saucecontrol/Compact-ICC-Profiles" +licence = "CC0-1.0" +licence_file = "vendor/hayro-interpret/assets/CGATS_LICENSE.txt" +kind = "data" +usage = "Default CMYK colour conversion (vendored hayro-interpret)" +sha256 = "73e1ba37d2bad5bab2a964f40a9eed96209666efc067c3322626214bbef234a0" + +[[asset]] +path = "vendor/hayro-interpret/assets/LAB.icc" +title = "Lab abstract ICC profile" +author = "The Hayro Authors (generated with LittleCMS 2)" +source = "https://github.com/LaurenzV/hayro (hayro-interpret 0.7.0 assets/)" +licence = "MIT OR Apache-2.0" +licence_file = "vendor/hayro-interpret/LICENSE-MIT" +kind = "data" +usage = "Lab colour space conversion (vendored hayro-interpret)" +sha256 = "a6efc5c30ece826eba2a83ddf5aa7026289b0c5ffa90acb129bc59ab8d7f5c59" + +[[asset]] +path = "docs/images/printcraft-viewer.png" +title = "PrintCraft viewer screenshot" +author = "PrintCraft contributors (generated by `cargo run -p printcraft-ui-egui --example shot`)" +source = "this repository" +licence = "MIT OR Apache-2.0" +licence_file = "LICENSE-MIT" +kind = "image" +usage = "README hero image. Shows only PrintCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts" +sha256 = "cfc92a3caba0d2ce2438c4634be44c84db3fc83f74e3cf8f1afd6a52395a65a7" + +[[asset]] +path = "docs/images/printcraft-organize.png" +title = "PrintCraft organize screenshot" +author = "PrintCraft contributors (generated by `cargo run -p printcraft-ui-egui --example shot`)" +source = "this repository" +licence = "MIT OR Apache-2.0" +licence_file = "LICENSE-MIT" +kind = "image" +usage = "README image. Shows only PrintCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts" +sha256 = "bc1d578bffa0fee09d17e3b649032a8b58251f1ae897c6b2a75765e415ab0078" + +[[bundled]] +crate = "epaint_default_fonts" +version = "0.36.2" +path = "fonts/Ubuntu-Light.ttf" +title = "Ubuntu Light" +author = "Canonical Ltd. / Dalton Maag" +source = "https://design.ubuntu.com/font" +licence = "Ubuntu-font-1.0" +kind = "font" +usage = "egui fallback fonts (eframe feature default_fonts)" +sha256 = "80307b8da7649aa4ee4d484b232140e3ce1ec0ca093073d3c53c8f5a5ced7a70" + +[[bundled]] +crate = "epaint_default_fonts" +version = "0.36.2" +path = "fonts/Hack-Regular.ttf" +title = "Hack Regular" +author = "Source Foundry Authors (derived from Bitstream Vera / DejaVu)" +source = "https://github.com/source-foundry/Hack" +licence = "MIT AND Bitstream-Vera" +kind = "font" +usage = "egui fallback fonts (eframe feature default_fonts)" +sha256 = "15f55cc0c85a2988d2b4b3a8cdb5d77fdfbaf319e1bb5309d725db9818fb7125" + +[[bundled]] +crate = "epaint_default_fonts" +version = "0.36.2" +path = "fonts/NotoEmoji-Regular.ttf" +title = "Noto Emoji (monochrome)" +author = "Google Inc." +source = "https://github.com/googlefonts/noto-emoji" +licence = "OFL-1.1" +kind = "font" +usage = "egui fallback fonts (eframe feature default_fonts)" +sha256 = "415dc6290378574135b64c808dc640c1df7531973290c4970c51fdeb849cb0c5" + +[[bundled]] +crate = "epaint_default_fonts" +version = "0.36.2" +path = "fonts/emoji-icon-font.ttf" +title = "emoji-icon-font" +author = "John Slegers" +source = "https://github.com/jslegers/emoji-icon-font" +licence = "MIT" +kind = "font" +usage = "egui fallback fonts (eframe feature default_fonts)" +sha256 = "f426bec371f484646d002717e2c555a95cd5145e635d83a48bbef83f3abf18ca" + +[[bundled]] +crate = "hayro-cmap" +version = "0.1.0" +path = "assets/cmaps.brotli" +title = "Adobe CMap resources (predefined CJK CMaps)" +author = "Adobe" +source = "https://github.com/adobe-type-tools/cmap-resources (via hayro-cmap)" +licence = "BSD-3-Clause" +kind = "data" +adobe_data = true +usage = "Character-code mapping tables required to read CJK PDFs. Non-visual data, allowed by AGENTS.md §1.1" +sha256 = "ddf37af521d904d5646c2fc37b2b7e912dc1b56f0d210190b61f598154758e46" + +[[bundled]] +crate = "hayro-interpret" +version = "0.7.0" +path = "src/font/generated/metrics.rs" +title = "Standard-14 font metrics and encodings (as Rust tables)" +author = "Adobe (Core 14 AFM metrics, PDF specification encodings); tables by The Hayro Authors" +source = "ISO 32000-2 Annex D; Adobe Core14 AFM files (via vendored hayro-interpret)" +licence = "MIT OR Apache-2.0" +kind = "data" +adobe_data = true +usage = "Glyph widths and encodings for non-embedded standard fonts. Non-visual data, allowed by AGENTS.md §1.1" +sha256 = "2ec9e608573eda459de1e1d9bda3bb494315e36bee885acc88912a11fe0caa41" + +[[fetched]] +file = "PlayfairDisplay[wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/playfairdisplay/PlayfairDisplay%5Bwght%5D.ttf" +title = "Playfair Display" +author = "The Playfair Display Project Authors (Claus Eggers Sørensen)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/playfairdisplay" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/playfairdisplay/OFL.txt" +licence_sha256 = "566be814f8e96e93dfa16101331557eb6b5467e9e03f627c0910fe93ca12300e" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "c40f2293766a503bc70cce9e512ef844a4ccb7cbcde792fe2ea31d191917d8d6" + +[[fetched]] +file = "PlayfairDisplay-Italic[wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/playfairdisplay/PlayfairDisplay-Italic%5Bwght%5D.ttf" +title = "Playfair Display Italic" +author = "The Playfair Display Project Authors (Claus Eggers Sørensen)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/playfairdisplay" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/playfairdisplay/OFL.txt" +licence_sha256 = "566be814f8e96e93dfa16101331557eb6b5467e9e03f627c0910fe93ca12300e" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "a5e26dc5e2e77fb2803a0bf02fd4f81ee136ec8dea863ccdb0c59a263b21378b" + +[[fetched]] +file = "EBGaramond[wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/ebgaramond/EBGaramond%5Bwght%5D.ttf" +title = "EB Garamond" +author = "The EB Garamond Project Authors (Georg Duffner, Octavio Pardo)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/ebgaramond" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/ebgaramond/OFL.txt" +licence_sha256 = "0985066662eb755ed3683ae5482a81a9195b49ce3f7e165cc2388b3dbece7dd7" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "ef9512f92f6d579e5dc75af59a5a4b1b8b47d2eda89e00b954d44520e5369027" + +[[fetched]] +file = "EBGaramond-Italic[wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/ebgaramond/EBGaramond-Italic%5Bwght%5D.ttf" +title = "EB Garamond Italic" +author = "The EB Garamond Project Authors (Georg Duffner, Octavio Pardo)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/ebgaramond" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/ebgaramond/OFL.txt" +licence_sha256 = "0985066662eb755ed3683ae5482a81a9195b49ce3f7e165cc2388b3dbece7dd7" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "bba2c4499c93c9612b90b9825d32b07da52fce2fe57562a1eb6b833553f93c4e" + +[[fetched]] +file = "GreatVibes-Regular.ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/greatvibes/GreatVibes-Regular.ttf" +title = "Great Vibes" +author = "The Great Vibes Pro Project Authors (TypeSETit)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/greatvibes" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/greatvibes/OFL.txt" +licence_sha256 = "61093a21f5e63dedf54222b3c09997e54c0fe43e3851d21386e02ddcbc246d49" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "8d509802186f1b51572531ecf313e8098f9a5bfdfaca93f0c9b34467f9982d15" + +[[fetched]] +file = "STIXTwoMath-Regular.ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/stixtwomath/STIXTwoMath-Regular.ttf" +title = "STIX Two Math" +author = "The STIX Fonts Project Authors" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/stixtwomath" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/stixtwomath/OFL.txt" +licence_sha256 = "0c8825913b60d858aacdb33c4ca6660a7d64b0d6464702efbb19313f5765861a" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "562551b15b836e6e01d1b7350909baf3c8c8d83260c1190fbf4544333e6936de" + +[[fetched]] +file = "Amiri-Regular.ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/amiri/Amiri-Regular.ttf" +title = "Amiri" +author = "The Amiri Project Authors (Khaled Hosny)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/amiri" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/amiri/OFL.txt" +licence_sha256 = "72de68e5954f4fdd24702292ef5a32f003ca960ec9330dc86e5eefb5dffb9b22" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "ab391c4147d054c48976e98322ad0eefe1427aa0e0502a12a4c75d80a70cfcd7" + +[[fetched]] +file = "NotoSansHebrew[wdth,wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosanshebrew/NotoSansHebrew%5Bwdth%2Cwght%5D.ttf" +title = "Noto Sans Hebrew" +author = "The Noto Project Authors" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosanshebrew" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosanshebrew/OFL.txt" +licence_sha256 = "9b9fe028b5ba74d231659a1bbaf0ed09b11e759d1ca6a070999e16d151616b47" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "7ef36a2c3593758cdb622e1bdef4f84523e92fbc3ccc667438dd80ff54c2de88" + +[[fetched]] +file = "NotoSansDevanagari[wdth,wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansdevanagari/NotoSansDevanagari%5Bwdth%2Cwght%5D.ttf" +title = "Noto Sans Devanagari" +author = "The Noto Project Authors" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansdevanagari" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansdevanagari/OFL.txt" +licence_sha256 = "a216f6f8d85c7228093e0ee5e258d9d377e6671f68acb4db1930b29583d0f331" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "14ec4af41f27482216d1c2229f417ff9b1425e1babb014e57d1d40d03229853e" + +[[fetched]] +file = "NotoSansThai[wdth,wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansthai/NotoSansThai%5Bwdth%2Cwght%5D.ttf" +title = "Noto Sans Thai" +author = "The Noto Project Authors" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansthai" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansthai/OFL.txt" +licence_sha256 = "2e98fd23a52d253db8612cd5942c8f2ff4111b21d2367050fdca91d8ccc374a0" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "5a1c559bb539583c8a1fd99d1c5b9491e5e14478c9cd2bd0970d5c3096cc9ef8" + +[[fetched]] +file = "NotoSansArmenian[wdth,wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansarmenian/NotoSansArmenian%5Bwdth%2Cwght%5D.ttf" +title = "Noto Sans Armenian" +author = "The Noto Project Authors" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansarmenian" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansarmenian/OFL.txt" +licence_sha256 = "0468358b316f69f405b55cadf8a8314e16e3610b8feaad96772bd5d968112d02" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "0870908d8318435a5daf1cd280ae15063f990cd9ad60f3e94c734ce9e1ffef71" + +[[fetched]] +file = "NotoSansGeorgian[wdth,wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansgeorgian/NotoSansGeorgian%5Bwdth%2Cwght%5D.ttf" +title = "Noto Sans Georgian" +author = "The Noto Project Authors" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansgeorgian" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosansgeorgian/OFL.txt" +licence_sha256 = "8c02263c5d73d40544f9ed91e30c4e947407057a3cc430d7b786189aeceff6df" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "dc591156f36842d38996c4a7a17fee9bb58e45da3e2cac7a31b7d33de700adb9" + +[[fetched]] +file = "NotoSansTamil[wdth,wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosanstamil/NotoSansTamil%5Bwdth%2Cwght%5D.ttf" +title = "Noto Sans Tamil" +author = "The Noto Project Authors" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosanstamil" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notosanstamil/OFL.txt" +licence_sha256 = "f8ff8ce7d0a81bf8d5e121c635ef027250c531f2fd37d5988b8dd6e45f19d7f1" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "aa3a9b321f4b0bb2c40203ffbde9af89713227866e0e13f76e5b9eeea727cf88" + +[[fetched]] +file = "CharisSIL-Regular.ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/charissil/CharisSIL-Regular.ttf" +title = "Charis SIL" +author = "SIL International" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/charissil" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/charissil/OFL.txt" +licence_sha256 = "0acda775b4dedaf980821f590206a692779ee495170018ee2b9caf1c50fc136a" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "346337374aa347d64ee015b26d441f1970d8631914e2f3941b00e1c4761e28c5" + +[[fetched]] +file = "ZCOOLXiaoWei-Regular.ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/zcoolxiaowei/ZCOOLXiaoWei-Regular.ttf" +title = "ZCOOL XiaoWei" +author = "The ZCOOL XiaoWei Project Authors" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/zcoolxiaowei" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/zcoolxiaowei/OFL.txt" +licence_sha256 = "a094514ca57cf8f9c5e8d8d1adab5d8cd3a377297ff016f9df2c05b3ecd77f0a" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "a42b620140f493db42f741351dfbf343c0936d58588ee8004b8b2a218d997ff1" + +[[fetched]] +file = "ShipporiMincho-Regular.ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/shipporimincho/ShipporiMincho-Regular.ttf" +title = "Shippori Mincho" +author = "The Shippori Mincho Project Authors (FONTDASU)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/shipporimincho" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/shipporimincho/OFL.txt" +licence_sha256 = "41fba056279be5f45ff9a99e44b7b53897b42732f5806d8e666e0ab49ac6bd38" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "769b5269f0f9bc6534b352c0e6bd856a566e03ff788f107191c2d835863570b2" + +[[fetched]] +file = "GowunBatang-Regular.ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/gowunbatang/GowunBatang-Regular.ttf" +title = "Gowun Batang" +author = "The Gowun Batang Project Authors (Yanghee Ryu)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/gowunbatang" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/gowunbatang/OFL.txt" +licence_sha256 = "49a57cc769fa9affd6eefb9070a61e3d3f6b757c97cafb15848bc6d1c81acc78" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "466c593e7147412e748af4856d5ad14709b5a860bdf62b9c2546f2c5874e9849" + +[[fetched]] +file = "NotoColorEmoji-Regular.ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notocoloremoji/NotoColorEmoji-Regular.ttf" +title = "Noto Color Emoji" +author = "Google Inc." +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notocoloremoji" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/notocoloremoji/OFL.txt" +licence_sha256 = "ac564676d10054a8445923dfc2dfb13c042d97888bd27c1b6ec6dfe89a9d8d62" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "4d82a18d8d95f60ba883ce242bbadbf84a576e987745dd7ba38d71c67cff2d73" + +[[fetched]] +file = "Inter[opsz,wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/inter/Inter%5Bopsz%2Cwght%5D.ttf" +title = "Inter (variable)" +author = "The Inter Project Authors (Rasmus Andersson)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/inter" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/inter/OFL.txt" +licence_sha256 = "5b9321a4298cfeb6b34354164a1c3afc3db114569984c502b9b35d988fd58c57" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "29160a80ff49ddcab2c97711247e08b1fab27a484a329ce8b813d820dc559031" + +[[fetched]] +file = "Inter-Italic[opsz,wght].ttf" +url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/inter/Inter-Italic%5Bopsz%2Cwght%5D.ttf" +title = "Inter Italic (variable)" +author = "The Inter Project Authors (Rasmus Andersson)" +source = "https://github.com/google/fonts/tree/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/inter" +licence = "OFL-1.1" +licence_url = "https://raw.githubusercontent.com/google/fonts/9710da1eacb3be272583c3224dcb70f9da6eadbb/ofl/inter/OFL.txt" +licence_sha256 = "5b9321a4298cfeb6b34354164a1c3afc3db114569984c502b9b35d988fd58c57" +kind = "font" +usage = "Showcase PDF (cargo xtask demo-pdf)" +sha256 = "acd98e64795781b2058f07b18475e0ecee2a0fe2b42a49e2f9e37d0d6bf66ce6" diff --git a/CLAUDE.md b/CLAUDE.md index 59e773985..32e7ba5c2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,6 +10,7 @@ PrintCraft is a clean-room, open-source, Rust-native PDF application targeting A `plan/` is gitignored (local-only, like PhotoCraft). The machine-readable parity checklist lives in `parity/` (committed). ## Non-negotiables +- **Assets: read `AGENTS.md` §1 before adding or showing any icon, image, font or document.** No assets from Adobe products, ever. Only openly licensed or contributor-original assets are allowed, each with an entry in `ATTRIBUTION.toml`. `cargo xtask assets` enforces this. `AGENTS.md` overrides this file. - **Clean-room.** - Never read, disassemble or copy anything inside the Acrobat bundle (names and listings only). **Never open `Contents/Resources/JavaScripts/`.** - Behaviour comes from public docs, specs (ISO 32000-2, the Arlington model) and black-box observation (`plan/acrobat/`). diff --git a/Cargo.lock b/Cargo.lock index be12b15bf..dc08a588a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3859,10 +3859,12 @@ version = "1.1.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" dependencies = [ + "indexmap", "serde_core", "serde_spanned", "toml_datetime", "toml_parser", + "toml_writer", "winnow", ] @@ -3896,6 +3898,12 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + [[package]] name = "tracing" version = "0.1.44" @@ -4984,7 +4992,10 @@ dependencies = [ "anyhow", "lopdf", "png 0.18.1", + "serde", "serde_json", + "sha2", + "toml", ] [[package]] diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 000000000..4947287f7 --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 000000000..7b09fda34 --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 The PrintCraft Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index 59e0318a4..b379e5157 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -10,3 +10,6 @@ anyhow = "1" lopdf = "0.45" png = "0.18" serde_json = "1" +serde = { version = "1", features = ["derive"] } +sha2 = "0.11" +toml = "1" diff --git a/xtask/src/assets.rs b/xtask/src/assets.rs new file mode 100644 index 000000000..b2f596d7c --- /dev/null +++ b/xtask/src/assets.rs @@ -0,0 +1,434 @@ +//! `cargo xtask assets`: enforce the asset policy (AGENTS.md §1). +//! +//! `ATTRIBUTION.toml` lists every asset: committed or vendored files (`[[asset]]`), files that +//! Cargo dependencies compile into PrintCraft (`[[bundled]]`), and files xtask downloads at build +//! time (`[[fetched]]`). This gate fails when: +//! - an asset-like file in the repository has no entry, or its SHA-256 differs; +//! - a licence is not on the allowlist, or a declared licence file is missing; +//! - an icon, image or font names Adobe as author or source, or an `adobe_data` entry is not on +//! the closed list approved in AGENTS.md §1.1; +//! - a `[[bundled]]` crate version is not the one in Cargo.lock; +//! - `ATTRIBUTION.md` is out of date (`--write` regenerates it). + +use std::collections::BTreeSet; +use std::fmt::Write as _; +use std::path::{Path, PathBuf}; +use std::process::Command; + +use anyhow::{Context, Result, bail}; +use serde::Deserialize; +use sha2::{Digest, Sha256}; + +/// Licences allowed by AGENTS.md §1.2 (SPDX identifiers). +pub const ALLOWED_LICENCES: &[&str] = &[ + "ISC", + "MIT", + "BSD-2-Clause", + "BSD-3-Clause", + "Apache-2.0", + "OFL-1.1", + "Ubuntu-font-1.0", + "Bitstream-Vera", + "CC0-1.0", + "CC-BY-4.0", + "CC-BY-SA-4.0", + "LicenseRef-Public-Domain", +]; + +/// The closed list of Adobe-authored, non-visual technical data (AGENTS.md §1.1): (crate, path). +pub const ADOBE_DATA_ALLOWED: &[(&str, &str)] = &[("hayro-cmap", "assets/cmaps.brotli"), ("hayro-interpret", "src/font/generated/metrics.rs")]; + +/// File extensions that count as assets wherever they appear in the repository. +const ASSET_EXTENSIONS: &[&str] = &[ + "png", "jpg", "jpeg", "gif", "svg", "ico", "icns", "webp", "bmp", "tif", "tiff", "avif", "heic", "ttf", "otf", "ttc", "woff", "woff2", "pfb", "pfa", "afm", + "icc", "icm", "pdf", "eps", "ps", "ai", "psd", "mp3", "wav", "ogg", "flac", "mp4", "mov", "webm", "cur", "ani", "brotli", +]; + +#[derive(Deserialize, Default)] +#[serde(deny_unknown_fields)] +pub struct Manifest { + #[serde(default)] + pub asset: Vec, + #[serde(default)] + pub bundled: Vec, + #[serde(default)] + pub fetched: Vec, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Asset { + pub path: String, + pub title: String, + pub author: String, + pub source: String, + pub licence: String, + pub licence_file: String, + pub kind: String, + pub usage: String, + pub sha256: String, + #[serde(default)] + pub adobe_data: bool, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Bundled { + #[serde(rename = "crate")] + pub krate: String, + pub version: String, + pub path: String, + pub title: String, + pub author: String, + pub source: String, + pub licence: String, + pub kind: String, + pub usage: String, + pub sha256: String, + #[serde(default)] + pub adobe_data: bool, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Fetched { + pub file: String, + pub url: String, + pub title: String, + pub author: String, + pub source: String, + pub licence: String, + pub licence_url: String, + pub licence_sha256: String, + pub kind: String, + pub usage: String, + pub sha256: String, +} + +pub fn root() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).parent().expect("xtask lives in the workspace").to_path_buf() +} + +pub fn load(root: &Path) -> Result { + let path = root.join("ATTRIBUTION.toml"); + let text = std::fs::read_to_string(&path).with_context(|| format!("reading {}", path.display()))?; + toml::from_str(&text).with_context(|| format!("parsing {}", path.display())) +} + +pub fn sha256_hex(bytes: &[u8]) -> String { + Sha256::digest(bytes).iter().fold(String::with_capacity(64), |mut s, b| { + let _ = write!(s, "{b:02x}"); + s + }) +} + +/// `cargo xtask assets [--write]`. +pub fn run(args: &[String]) -> Result<()> { + let root = root(); + let manifest = load(&root)?; + let markdown = render_markdown(&manifest); + if args.iter().any(|a| a == "--write") { + std::fs::write(root.join("ATTRIBUTION.md"), &markdown)?; + println!("assets: wrote ATTRIBUTION.md"); + } + let mut problems = check(&root, &manifest, &repo_files(&root)?, &cargo_lock_versions(&root)?); + match std::fs::read_to_string(root.join("ATTRIBUTION.md")) { + Ok(existing) if existing == markdown => {} + _ => problems.push("ATTRIBUTION.md is out of date: run `cargo xtask assets --write`".into()), + } + if problems.is_empty() { + println!( + "assets: ok ({} repository assets, {} bundled by dependencies, {} fetched at build time)", + manifest.asset.len(), + manifest.bundled.len(), + manifest.fetched.len() + ); + Ok(()) + } else { + for p in &problems { + eprintln!(" ✗ {p}"); + } + bail!("{} asset policy violation(s); see AGENTS.md §1", problems.len()) + } +} + +/// Files in the working tree that git tracks or would track (respects .gitignore). +fn repo_files(root: &Path) -> Result> { + let out = Command::new("git").args(["ls-files", "--cached", "--others", "--exclude-standard", "-z"]).current_dir(root).output().context("running git ls-files")?; + if !out.status.success() { + bail!("git ls-files failed"); + } + Ok(out.stdout.split(|b| *b == 0).filter(|s| !s.is_empty()).map(|s| String::from_utf8_lossy(s).into_owned()).collect()) +} + +fn cargo_lock_versions(root: &Path) -> Result> { + let text = std::fs::read_to_string(root.join("Cargo.lock")).context("reading Cargo.lock")?; + let mut out = BTreeSet::new(); + let mut name = None; + for line in text.lines() { + if let Some(n) = line.strip_prefix("name = \"") { + name = Some(n.trim_end_matches('"').to_string()); + } else if let (Some(v), Some(n)) = (line.strip_prefix("version = \""), name.take()) { + out.insert((n, v.trim_end_matches('"').to_string())); + } + } + Ok(out) +} + +pub fn is_asset_path(path: &str) -> bool { + Path::new(path).extension().and_then(|e| e.to_str()).is_some_and(|e| ASSET_EXTENSIONS.contains(&e.to_ascii_lowercase().as_str())) +} + +/// Every licence id in an SPDX expression (`MIT OR Apache-2.0`, `MIT AND Bitstream-Vera`). +fn licence_ids(expr: &str) -> impl Iterator { + expr.split(|c: char| c.is_whitespace() || c == '(' || c == ')').filter(|t| !t.is_empty() && *t != "OR" && *t != "AND" && *t != "WITH") +} + +fn mentions_adobe(s: &str) -> bool { + s.to_ascii_lowercase().contains("adobe") +} + +/// All policy checks that don't depend on the filesystem layout beyond `root` (unit-testable). +pub fn check(root: &Path, m: &Manifest, repo_files: &[String], lock: &BTreeSet<(String, String)>) -> Vec { + let mut problems = Vec::new(); + let mut seen = BTreeSet::new(); + let visual = |kind: &str| matches!(kind, "icon" | "image" | "font" | "logo" | "cursor" | "video"); + let mut licence_ok = |what: &str, licence: &str, problems: &mut Vec| { + for id in licence_ids(licence) { + if !ALLOWED_LICENCES.contains(&id) { + problems.push(format!("{what}: licence `{id}` is not on the allowlist (AGENTS.md §1.2)")); + } + } + }; + for a in &m.asset { + if !seen.insert(a.path.clone()) { + problems.push(format!("{}: listed twice", a.path)); + } + licence_ok(&a.path, &a.licence, &mut problems); + if !root.join(&a.licence_file).is_file() { + problems.push(format!("{}: licence file {} is missing", a.path, a.licence_file)); + } + if visual(&a.kind) && (mentions_adobe(&a.author) || mentions_adobe(&a.source) || mentions_adobe(&a.title)) { + problems.push(format!("{}: {} from Adobe is forbidden (AGENTS.md §1.1)", a.path, a.kind)); + } + if a.adobe_data { + problems.push(format!("{}: adobe_data is only allowed for the closed list in AGENTS.md §1.1", a.path)); + } + match std::fs::read(root.join(&a.path)) { + Ok(bytes) if sha256_hex(&bytes) == a.sha256 => {} + Ok(_) => problems.push(format!("{}: SHA-256 does not match ATTRIBUTION.toml (re-verify provenance, then update the entry)", a.path)), + Err(_) => problems.push(format!("{}: listed but missing", a.path)), + } + } + for f in repo_files { + if is_asset_path(f) && !seen.contains(f) && root.join(f).is_file() { + problems.push(format!("{f}: asset has no ATTRIBUTION.toml entry")); + } + } + for b in &m.bundled { + let what = format!("{}@{} {}", b.krate, b.version, b.path); + licence_ok(&what, &b.licence, &mut problems); + if !lock.contains(&(b.krate.clone(), b.version.clone())) { + problems.push(format!("{what}: crate version not in Cargo.lock (dependency changed: re-audit its bundled assets)")); + } + if visual(&b.kind) && (mentions_adobe(&b.author) || mentions_adobe(&b.source)) { + problems.push(format!("{what}: {} from Adobe is forbidden (AGENTS.md §1.1)", b.kind)); + } + let adobe = mentions_adobe(&b.author); + let approved = ADOBE_DATA_ALLOWED.contains(&(b.krate.as_str(), b.path.as_str())) && b.kind == "data"; + if (adobe || b.adobe_data) && !(approved && b.adobe_data) { + problems.push(format!("{what}: Adobe-authored material outside the closed list in AGENTS.md §1.1")); + } + if b.sha256.len() != 64 { + problems.push(format!("{what}: sha256 must be 64 hex digits")); + } + } + for f in &m.fetched { + licence_ok(&f.file, &f.licence, &mut problems); + if visual(&f.kind) && (mentions_adobe(&f.author) || mentions_adobe(&f.source) || mentions_adobe(&f.title)) { + problems.push(format!("{}: {} from Adobe is forbidden (AGENTS.md §1.1)", f.file, f.kind)); + } + if f.sha256.len() != 64 || f.licence_sha256.len() != 64 { + problems.push(format!("{}: sha256 and licence_sha256 must be 64 hex digits", f.file)); + } + if !f.url.starts_with("https://") || !f.licence_url.starts_with("https://") { + problems.push(format!("{}: URLs must be https", f.file)); + } + } + problems +} + +/// Download (if needed) and verify every `[[fetched]]` entry into `dir`, with its licence text. +/// Returns the paths of the fetched files. Uses `curl`, present on macOS, Windows 10+ and Linux. +pub fn fetch_all(m: &Manifest, dir: &Path) -> Result> { + std::fs::create_dir_all(dir)?; + let mut out = Vec::new(); + for f in &m.fetched { + let path = dir.join(&f.file); + fetch_verified(&f.url, &path, &f.sha256)?; + let licence = dir.join(format!("{}.LICENCE.txt", f.file)); + fetch_verified(&f.licence_url, &licence, &f.licence_sha256)?; + out.push(path); + } + Ok(out) +} + +fn fetch_verified(url: &str, path: &Path, sha256: &str) -> Result<()> { + if std::fs::read(path).is_ok_and(|b| sha256_hex(&b) == sha256) { + return Ok(()); + } + println!("assets: fetching {url}"); + let tmp = path.with_extension("part"); + let status = Command::new("curl").args(["-sSfL", "--retry", "3", "-o"]).arg(&tmp).arg(url).status().context("running curl")?; + if !status.success() { + bail!("download failed: {url}"); + } + let bytes = std::fs::read(&tmp)?; + if sha256_hex(&bytes) != sha256 { + let _ = std::fs::remove_file(&tmp); + bail!("{url}: SHA-256 mismatch (expected {sha256}); refusing to use it"); + } + std::fs::rename(&tmp, path)?; + Ok(()) +} + +/// ATTRIBUTION.md, generated from the manifest. +pub fn render_markdown(m: &Manifest) -> String { + let mut s = String::new(); + s.push_str("# Attribution\n\n"); + s.push_str("\n\n"); + s.push_str("Every asset PrintCraft includes, bundles or uses to build its published material, with its author, source and licence. "); + s.push_str("The policy is in [AGENTS.md](AGENTS.md) §1. The machine-readable list, with SHA-256 hashes, is [ATTRIBUTION.toml](ATTRIBUTION.toml). "); + s.push_str("Licence texts are kept beside the assets and summarised in [NOTICE](NOTICE).\n\n"); + let esc = |t: &str| t.replace('|', "\\|"); + s.push_str(&format!("## In this repository ({})\n\n| Asset | Title | Author | Licence | Source | Used for |\n|---|---|---|---|---|---|\n", m.asset.len())); + for a in &m.asset { + let _ = writeln!(s, "| `{}` | {} | {} | {} | {} | {} |", a.path, esc(&a.title), esc(&a.author), a.licence, esc(&a.source), esc(&a.usage)); + } + s.push_str(&format!( + "\n## Compiled in through dependencies ({})\n\n| Crate | File | Title | Author | Licence | Source | Used for |\n|---|---|---|---|---|---|---|\n", + m.bundled.len() + )); + for b in &m.bundled { + let note = if b.adobe_data { " (non-visual data, AGENTS.md §1.1)" } else { "" }; + let _ = writeln!( + s, + "| `{}` {} | `{}` | {}{} | {} | {} | {} | {} |", + b.krate, + b.version, + b.path, + esc(&b.title), + note, + esc(&b.author), + b.licence, + esc(&b.source), + esc(&b.usage) + ); + } + s.push_str(&format!( + "\n## Downloaded at build time ({})\n\nFetched by `cargo xtask demo-pdf` into `target/demo-fonts/`, verified by SHA-256 and never committed.\n\n| File | Title | Author | Licence | Source |\n|---|---|---|---|---|\n", + m.fetched.len() + )); + for f in &m.fetched { + let _ = writeln!(s, "| `{}` | {} | {} | {} | {} |", f.file, esc(&f.title), esc(&f.author), f.licence, esc(&f.source)); + } + s +} + +#[cfg(test)] +mod tests { + use super::*; + + fn asset(path: &str, author: &str, kind: &str, licence: &str) -> Asset { + Asset { + path: path.into(), + title: "t".into(), + author: author.into(), + source: "s".into(), + licence: licence.into(), + licence_file: "Cargo.toml".into(), + kind: kind.into(), + usage: "u".into(), + sha256: sha256_hex(&std::fs::read(root().join(path)).unwrap_or_default()), + adobe_data: false, + } + } + + fn bundled(krate: &str, path: &str, author: &str, kind: &str, adobe_data: bool) -> Bundled { + Bundled { + krate: krate.into(), + version: "1.0.0".into(), + path: path.into(), + title: "t".into(), + author: author.into(), + source: "s".into(), + licence: "BSD-3-Clause".into(), + kind: kind.into(), + usage: "u".into(), + sha256: "0".repeat(64), + adobe_data, + } + } + + fn lock(entries: &[(&str, &str)]) -> BTreeSet<(String, String)> { + entries.iter().map(|(a, b)| (a.to_string(), b.to_string())).collect() + } + + #[test] + fn the_real_manifest_passes() { + let root = root(); + let m = load(&root).unwrap(); + let problems = check(&root, &m, &repo_files(&root).unwrap(), &cargo_lock_versions(&root).unwrap()); + assert!(problems.is_empty(), "{problems:#?}"); + } + + #[test] + fn unlisted_asset_is_rejected() { + let p = check(&root(), &Manifest::default(), &["assets/icons/x.svg".into()], &lock(&[])); + assert!(p.iter().any(|p| p.contains("no ATTRIBUTION.toml entry")), "{p:?}"); + } + + #[test] + fn adobe_icons_are_rejected() { + let m = Manifest { asset: vec![asset("assets/icons/x.svg", "Adobe Inc.", "icon", "MIT")], ..Default::default() }; + let p = check(&root(), &m, &[], &lock(&[])); + assert!(p.iter().any(|p| p.contains("from Adobe is forbidden")), "{p:?}"); + } + + #[test] + fn disallowed_licences_are_rejected() { + let m = Manifest { asset: vec![asset("assets/icons/x.svg", "Someone", "icon", "LicenseRef-Proprietary OR MIT")], ..Default::default() }; + let p = check(&root(), &m, &[], &lock(&[])); + assert!(p.iter().any(|p| p.contains("not on the allowlist")), "{p:?}"); + } + + #[test] + fn changed_file_fails_hash_check() { + let mut a = asset("assets/icons/x.svg", "Lucide", "icon", "ISC"); + a.sha256 = "0".repeat(64); + let p = check(&root(), &Manifest { asset: vec![a], ..Default::default() }, &[], &lock(&[])); + assert!(p.iter().any(|p| p.contains("SHA-256 does not match")), "{p:?}"); + } + + #[test] + fn adobe_data_only_on_the_closed_list() { + let l = lock(&[("hayro-cmap", "1.0.0"), ("other", "1.0.0")]); + let ok = Manifest { bundled: vec![bundled("hayro-cmap", "assets/cmaps.brotli", "Adobe", "data", true)], ..Default::default() }; + assert!(check(&root(), &ok, &[], &l).is_empty()); + let sneaky = Manifest { bundled: vec![bundled("other", "fonts/Myriad.otf", "Adobe", "data", true)], ..Default::default() }; + assert!(check(&root(), &sneaky, &[], &l).iter().any(|p| p.contains("closed list"))); + let font = Manifest { bundled: vec![bundled("hayro-cmap", "assets/cmaps.brotli", "Adobe", "font", true)], ..Default::default() }; + assert!(check(&root(), &font, &[], &l).iter().any(|p| p.contains("forbidden"))); + } + + #[test] + fn dependency_upgrade_forces_reaudit() { + let m = Manifest { bundled: vec![bundled("other", "a.ttf", "Someone", "font", false)], ..Default::default() }; + assert!(check(&root(), &m, &[], &lock(&[("other", "2.0.0")])).iter().any(|p| p.contains("not in Cargo.lock"))); + } + + #[test] + fn spdx_expressions_split() { + assert_eq!(licence_ids("(MIT OR Apache-2.0) AND OFL-1.1").collect::>(), ["MIT", "Apache-2.0", "OFL-1.1"]); + } +} diff --git a/xtask/src/gates.rs b/xtask/src/gates.rs index 33222abde..a0aba86c6 100644 --- a/xtask/src/gates.rs +++ b/xtask/src/gates.rs @@ -91,6 +91,7 @@ pub fn ci(_: &[String]) -> anyhow::Result<()> { ("test", Box::new(|| run_args(&["test", "--workspace"]))), ("layers", Box::new(|| layers(&[]))), ("wasm", Box::new(|| wasm(&[]))), + ("assets", Box::new(|| crate::assets::run(&[]))), ]; for (i, (name, f)) in steps.iter().enumerate() { eprintln!("\n=== ci: {name} ==="); diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 3edfedcae..90b33094a 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -2,6 +2,7 @@ use std::process::ExitCode; +mod assets; mod demo_pdf; mod gates; mod layers; @@ -12,7 +13,8 @@ type Command = fn(&[String]) -> anyhow::Result<()>; const COMMANDS: &[(&str, &str, Command)] = &[ ("layers", "Enforce the crate dependency layering (plan/architecture.md §3)", gates::layers), ("wasm", "cargo check --target wasm32-unknown-unknown for every crate below L8", gates::wasm), - ("ci", "fmt --check, clippy -D warnings, test, layers, wasm (stops at first failure)", gates::ci), + ("ci", "fmt --check, clippy -D warnings, test, layers, wasm, assets (stops at first failure)", gates::ci), + ("assets", "Enforce the asset policy (AGENTS.md §1) against ATTRIBUTION.toml; --write regenerates ATTRIBUTION.md", assets::run), ("corpus", "Fetch test corpora into corpus/ (git-ignored): pdf.js test PDFs", gates::corpus), ("check", "Robustness sweep over corpus/ with printcraft-cli; fails on crashes or regressions vs xtask/baselines", gates::check), ("text-oracle", "Compare text extraction with pdftotext over corpus/ (word F1; target median ≥ 0.97)", gates::text_oracle),