From 76d8d2a15b0be7c7d554e0c5e52964513f653a89 Mon Sep 17 00:00:00 2001 From: Imani Manyara Date: Fri, 13 Nov 2026 16:43:05 -0500 Subject: [PATCH] Name icon-browser where docs and comments named react-icon-browser react-icon-browser is retired; the browser that shares core's SVG caps and monochrome rule, and its svg-baseline spec, live in icon-browser since react consolidation 3d. The config comment, constants, docs, the architecture diagram and two test notes now say so. Comments only: no value or behaviour changes, and CHANGELOG history is unchanged. --- CHANGELOG.md | 4 ++++ config/ichava-core.php | 4 ++-- docs/architecture.md | 4 ++-- docs/configuration.md | 4 ++-- src/Constants/IchavaConstants.php | 4 ++-- src/Services/Traits/ConvertsMonochromeToCurrentColor.php | 3 ++- tests/Unit/SvgArchetypeRegressionTest.php | 4 ++-- tests/Unit/SvgPresentationParityTest.php | 2 +- 8 files changed, 17 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdfbb5b8..23c73352 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to `ichava/core` follow [Keep a Changelog](https://keepachan ## [Unreleased] +### Changed + +- Docs, config comments and test notes name icon-browser where they named react-icon-browser, which is retired: the browser that shares the SVG caps and monochrome rule, and its svg-baseline spec, live in icon-browser since 2026-11-12. CHANGELOG history is unchanged. + ## [0.1.0] - 2026-11-13 First release of `ichava/core`. The repository is published as a single commit; the 0.1.x tags cut between 2026-10-23 and 2026-10-27 (v0.1.0 to v0.1.3) are folded into this release, and their notes are kept below under *Archived history*. diff --git a/config/ichava-core.php b/config/ichava-core.php index 6fd56a74..8a08a067 100644 --- a/config/ichava-core.php +++ b/config/ichava-core.php @@ -496,8 +496,8 @@ | is served as an empty string, never raw. | | `max_elements` counts elements, not nodes: text and whitespace nodes - | are bounded by `max_bytes`. Both values match react-icon-browser and - | icon-sets-sync, so the three runtimes refuse the same files. Both are + | are bounded by `max_bytes`. Both values match icon-browser's browser + | and icon-sets-sync, so the three runtimes refuse the same files. Both are | at least 4x the largest measured across all 135,112 SVGs in the | icon-sets-* packs on 2026-11-04 (1,053,328 bytes; 6,741 elements). | The per-kind serving budget (`max_file_size`, diff --git a/docs/architecture.md b/docs/architecture.md index 7956b26f..64572983 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -35,7 +35,7 @@ flowchart TB meta["ichava/ichava
pre-split monolith, superseded by core
ARCHIVED 2026-09-22, read-only"] toolkit["ichava/icon-sets-sync
Docker-first sync tool
refreshes vendored SVGs via PR
(not installed by users)"] motion["ichava/js-motion
SVG animation engine
~205 presets, no runtime deps
(outside the Composer graph)"] - react["@ichava/react-icon-browser
React 19 rebuild of the front end
PRIVATE, not on npm"] + react["ichava/react-icon-browser
React 19 rebuild of the front end
RETIRED 2026-11-13, source now in icon-browser"] browser -- depends on --> core tabler -- depends on --> core @@ -45,7 +45,7 @@ flowchart TB toolkit -. CI refreshes .-> tabler toolkit -. CI refreshes .-> flag toolkit -. CI refreshes .-> twemoji - react -. replaces the SPA in .-> browser + react -. folded into .-> browser classDef engine fill:#1f6feb,stroke:#1f6feb,color:#fff classDef http fill:#8957e5,stroke:#8957e5,color:#fff diff --git a/docs/configuration.md b/docs/configuration.md index 6fdafccd..1c2804ff 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -163,8 +163,8 @@ string, never raw. | `svg.max_bytes` (`ICHAVA_SVG_MAX_BYTES`) | 4,500,000 | before the SVG is parsed | | `svg.max_elements` (`ICHAVA_SVG_MAX_ELEMENTS`) | 30,000 | while the tree is walked; counts elements only, since `max_bytes` bounds text and whitespace | -Both values match `react-icon-browser` and `icon-sets-sync`, so all three runtimes refuse the same -files. On 2026-11-04, across all 135,112 SVGs in the `icon-sets-*` packs, the largest file was +Both values match icon-browser's browser (`limits.svgMaxChars` and `svgMaxNodes`, formerly in +react-icon-browser) and `icon-sets-sync`, so all three runtimes refuse the same files. On 2026-11-04, across all 135,112 SVGs in the `icon-sets-*` packs, the largest file was 1,053,328 bytes and the most elements in one file was 6,741, so both caps are at least 4x the largest real file. The serve path also checks the kind's `max_file_size` before it reads the file. diff --git a/src/Constants/IchavaConstants.php b/src/Constants/IchavaConstants.php index 7221142b..35cd17f1 100644 --- a/src/Constants/IchavaConstants.php +++ b/src/Constants/IchavaConstants.php @@ -106,7 +106,7 @@ final class IchavaConstants * which stays the tighter limit on the serve path. Measured 2026-11-04 over * all 135,112 SVGs under the icon-sets-* packs: the largest is 1,053,328 * bytes (a parked metronic brand logo), so 4,500,000 is at least 4x that. - * The value matches react-icon-browser and icon-sets-sync, so the three + * The value matches icon-browser's browser and icon-sets-sync, so the three * runtimes refuse the same files. * * Because it bounds the whole input, it also bounds the text and @@ -119,7 +119,7 @@ final class IchavaConstants /** * Most ELEMENTS the SVG sanitiser will walk before refusing the document. * - * Elements, not nodes: the same count react-icon-browser and icon-sets-sync + * Elements, not nodes: the same count icon-browser's browser and icon-sets-sync * use, and the same value, so the three runtimes agree. Text and whitespace * nodes are bounded by the byte cap above instead. Measured 2026-11-04 over * the same 135,112 SVGs: the most elements in one file is 6,741 (bundled diff --git a/src/Services/Traits/ConvertsMonochromeToCurrentColor.php b/src/Services/Traits/ConvertsMonochromeToCurrentColor.php index d5ea7beb..e0530d2c 100644 --- a/src/Services/Traits/ConvertsMonochromeToCurrentColor.php +++ b/src/Services/Traits/ConvertsMonochromeToCurrentColor.php @@ -128,7 +128,8 @@ private function paintValues(DOMElement $element): array * channel at most 0x40 and within 0x18 of the others. Twemoji's heavy dollar sign * is #292F33, which pure-black matching missed, so it stayed near-black on a dark * page. A dark colour with a hue (navy, maroon) is still a colour. Mirrors - * react-icon-browser's monochrome.ts, so both catalogs paint an icon the same way. + * icon-browser's resources/js/modules/svg/infrastructure/monochrome.ts (formerly react-icon-browser's), so both + * catalogs paint an icon the same way. */ private function isBlackPaint(string $value): bool { diff --git a/tests/Unit/SvgArchetypeRegressionTest.php b/tests/Unit/SvgArchetypeRegressionTest.php index 5bc07df1..873b8a42 100644 --- a/tests/Unit/SvgArchetypeRegressionTest.php +++ b/tests/Unit/SvgArchetypeRegressionTest.php @@ -27,8 +27,8 @@ * This is construct-level rather than pixel-level, and that is a deliberate * limit worth stating. It cannot see that a gradient renders the wrong colour; * it can see that the gradient lost its stops, which is the failure mode that - * actually occurred. Pixel comparison for the SPA lives in - * `react-icon-browser/e2e/svg-baseline.spec.ts`. + * actually occurred. Pixel comparison for the browser lives in + * `icon-browser/e2e/browser/svg-baseline.spec.ts` (public packs only). * * Fixtures and their provenance: `tests/fixtures/archetypes/manifest.json`. */ diff --git a/tests/Unit/SvgPresentationParityTest.php b/tests/Unit/SvgPresentationParityTest.php index fe6f4fa4..be5e3415 100644 --- a/tests/Unit/SvgPresentationParityTest.php +++ b/tests/Unit/SvgPresentationParityTest.php @@ -16,7 +16,7 @@ * stripped. * * tests/fixtures/svg/presentation-vectors.json is byte-identical in core, - * react-icon-browser and js-icon-components, and copies its rows from the Go + * icon-browser and js-icon-components, and copies its rows from the Go * table in icon-sets-sync, so all four sanitisers make the same decisions. */ function presentationSanitise(string $svg): string