diff --git a/package-lock.json b/package-lock.json index 8f6495b..9441e2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,6 @@ "license": "MIT", "dependencies": { "@heroicons/react": "^2.2.0", - "@radix-ui/react-icons": "^1.0.3", - "@shikijs/core": "^3.5.0", - "@shikijs/engine-javascript": "^3.5.0", - "@shikijs/langs": "^3.5.0", - "@shikijs/themes": "^3.5.0", - "@shikijs/types": "^3.5.0", "clsx": "^2.1.1", "react-icons": "^5.5.0" }, @@ -1965,15 +1959,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@radix-ui/react-icons": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", - "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", - "license": "MIT", - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" - } - }, "node_modules/@rolldown/binding-android-arm-eabi": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz", @@ -2722,63 +2707,6 @@ "win32" ] }, - "node_modules/@shikijs/core": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", - "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.5" - } - }, - "node_modules/@shikijs/engine-javascript": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", - "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.4" - } - }, - "node_modules/@shikijs/langs": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", - "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", - "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0" - } - }, - "node_modules/@shikijs/types": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", - "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "license": "MIT" - }, "node_modules/@storybook/addon-a11y": { "version": "10.2.13", "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-10.2.13.tgz", @@ -3235,24 +3163,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, "node_modules/@types/mdx": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", @@ -3277,18 +3187,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "license": "ISC" - }, "node_modules/@vitest/browser": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.5.tgz", @@ -3820,16 +3718,6 @@ ], "license": "CC-BY-4.0" }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/chai": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", @@ -3847,26 +3735,6 @@ "node": ">=18" } }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/check-error": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", @@ -3936,16 +3804,6 @@ "node": ">=6" } }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -4059,6 +3917,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4074,19 +3933,6 @@ "node": ">=8" } }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4322,52 +4168,6 @@ "node": ">= 0.4" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/immutable": { "version": "5.1.9", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", @@ -4868,116 +4668,6 @@ "source-map-js": "^1.2.1" } }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -5093,23 +4783,6 @@ "node": ">=12.20.0" } }, - "node_modules/oniguruma-parser": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", - "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", - "license": "MIT" - }, - "node_modules/oniguruma-to-es": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", - "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", - "license": "MIT", - "dependencies": { - "oniguruma-parser": "^0.12.1", - "regex": "^6.0.1", - "regex-recursion": "^6.0.2" - } - }, "node_modules/open": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", @@ -5362,16 +5035,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/property-information": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/react": { "version": "19.2.4", "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", @@ -5500,30 +5163,6 @@ "node": ">=8" } }, - "node_modules/regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", - "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "license": "MIT" - }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -5756,16 +5395,6 @@ "node": ">=0.10.0" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/std-env": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz", @@ -5822,20 +5451,6 @@ } } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -5946,16 +5561,6 @@ "node": ">=6" } }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", @@ -6002,74 +5607,6 @@ "node": ">=14.17" } }, - "node_modules/unist-util-is": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unplugin": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", @@ -6127,34 +5664,6 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vite": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", @@ -6417,16 +5926,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } } } } diff --git a/package.json b/package.json index 35667f3..7b90f8f 100644 --- a/package.json +++ b/package.json @@ -54,12 +54,6 @@ }, "dependencies": { "@heroicons/react": "^2.2.0", - "@radix-ui/react-icons": "^1.0.3", - "@shikijs/core": "^3.5.0", - "@shikijs/engine-javascript": "^3.5.0", - "@shikijs/langs": "^3.5.0", - "@shikijs/themes": "^3.5.0", - "@shikijs/types": "^3.5.0", "clsx": "^2.1.1", "react-icons": "^5.5.0" } diff --git a/src/Button/Button.stories.tsx b/src/Button/Button.stories.tsx deleted file mode 100644 index 17793b6..0000000 --- a/src/Button/Button.stories.tsx +++ /dev/null @@ -1,267 +0,0 @@ -import { action } from "storybook/actions"; -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import Button, { buttonColors, buttonSizes } from "./"; -import type { FC, PropsWithChildren } from "react"; - -const meta = { - title: "Atoms/Button", - component: Button, - argTypes: { - id: { - description: "An optional HTML identifier for the button", - control: "text", - }, - color: { - description: "The button's color scheme", - control: "select", - options: [...buttonColors], - }, - size: { - description: "The button's size", - control: "select", - options: [...buttonSizes], - }, - outlined: { - description: "Whether the button is outlined", - control: "boolean", - }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -// Make clicks visible in the inspector -const onClick = action("click"); - -const Wrapper: FC = ({ children }) => ( -
- {children} -
-); - -export const All = () => ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -); - -export const BasePrimary: Story = { - args: { - children: "Base primary", - size: "base", - color: "primary", - onClick, - }, -}; - -export const BaseSecondary: Story = { - args: { - children: "Base secondary", - size: "base", - color: "secondary", - onClick, - }, -}; - -export const Success: Story = { - args: { - children: "Success", - size: "base", - color: "success", - onClick, - }, -}; - -export const Info: Story = { - args: { - children: "Info", - size: "base", - color: "info", - onClick, - }, -}; - -export const Warning: Story = { - args: { - children: "Warning", - size: "base", - color: "warning", - onClick, - }, -}; - -export const Danger: Story = { - args: { - children: "Danger", - size: "base", - color: "danger", - onClick, - }, -}; - -export const PrimaryBaseOutlined: Story = { - args: { - children: "Primary outlined", - size: "base", - color: "primary", - outlined: true, - onClick, - }, -}; - -export const SecondarySmallOutlined: Story = { - args: { - children: "Secondary small outlined", - size: "sm", - color: "secondary", - outlined: true, - onClick, - }, -}; - -export const SmallSecondary: Story = { - args: { - children: "Small secondary", - size: "sm", - color: "secondary", - onClick, - }, -}; - -export const LargePrimary: Story = { - args: { - children: "Large primary", - size: "lg", - color: "primary", - onClick, - }, -}; diff --git a/src/Button/index.scss b/src/Button/index.scss deleted file mode 100644 index 1c49e77..0000000 --- a/src/Button/index.scss +++ /dev/null @@ -1,51 +0,0 @@ -@use "sass:map"; - -@use "../sass/functions"; -@use "../sass/mixins"; -@use "../sass/tokens"; - -.button { - align-self: self-start; // Prevents the button from occupying all available space inside a div - display: inline-flex; - flex-direction: row; - - margin: 0; - border: 0; - border-radius: 0.5rem; - - font-family: map.get(tokens.$fonts, sans); - - @include mixins.transition(background-color, short); - - @each $size in tokens.$sizes { - &.button--#{$size} { - @include mixins.pad($size); - font-size: map.get(tokens.$font-size, $size); - border-radius: map.get(tokens.$border-radius, $size); - } - } - - @each $name, $color in tokens.$colors { - &.button--#{$name} { - &:not(.button--outlined) { - background-color: $color; - color: map.get(tokens.$brand, white); - - &:hover { - background-color: functions.darken($color, 15%); - } - } - - &.button--outlined { - border: 2px solid $color; - background-color: map.get(tokens.$brand, white); - color: $color; - - &:hover { - background-color: $color; - color: map.get(tokens.$brand, white); - } - } - } - } -} diff --git a/src/Button/index.tsx b/src/Button/index.tsx deleted file mode 100644 index 36c0a3e..0000000 --- a/src/Button/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import type { FC, PropsWithChildren } from "react"; - -import "./index.scss"; -import clsx from "clsx"; - -export const buttonSizes = ["sm", "base", "lg"] as const; -export type ButtonSize = (typeof buttonSizes)[number]; - -export const buttonColors = [ - "primary", - "secondary", - "success", - "info", - "warning", - "danger", -] as const; -export type ButtonColor = (typeof buttonColors)[number]; - -export interface ButtonProps { - /** - * An optional HTML identifier for the button. - */ - id?: string; - - /** - * The button's size. - */ - size?: ButtonSize; - - /** - * The button's color scheme. - */ - color?: ButtonColor; - - /** - * Whether the button is outlined. - */ - outlined?: boolean; - - /** - * Handler to fire when the button is clicked. - */ - onClick: (event: React.MouseEvent) => void; -} - -/** - * A ` -); - -export default Button; diff --git a/src/CodeBlock/CodeBlock.stories.tsx b/src/CodeBlock/CodeBlock.stories.tsx deleted file mode 100644 index d7ffe5b..0000000 --- a/src/CodeBlock/CodeBlock.stories.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import CodeBlock from "./"; -import { highlightLanguages } from "../hooks/useHighlight"; - -const meta = { - title: "Molecules/CodeBlock", - component: CodeBlock, - argTypes: { - language: { - control: "select", - options: [...highlightLanguages], - }, - code: { control: "text" }, - allowCopy: { control: "boolean" }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const InstallDeterminate: Story = { - args: { - language: "shell", - code: "curl -fsSL https://install.determinate.systems/nix | sh -s -- install --determinate", - title: "Install Determinate", - allowCopy: true, - }, -}; - -export const UseActions: Story = { - args: { - language: "yaml", - code: `on: - pull_request: - workflow_dispatch: - push: - branches: - - main - -jobs: - nix-ci: - runs-on: ubuntu-latest - # Include this block to log in to FlakeHub and access private flakes - permissions: - id-token: write - contents: read - steps: - - uses: actions/checkout@v4 - - uses: DeterminateSystems/determinate-nix-action@v3 - - uses: DeterminateSystems/flakehub-cache-action@main - - uses: DeterminateSystems/nix-flake-checker-action@main - - run: nix flake check`, - title: "Use in GitHub Actions", - allowCopy: true, - }, -}; diff --git a/src/CodeBlock/index.scss b/src/CodeBlock/index.scss deleted file mode 100644 index 3a49997..0000000 --- a/src/CodeBlock/index.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use "sass:map"; - -@use "../sass/mixins"; -@use "../sass/tokens"; - -.code-block__heading { - @include mixins.pad-bottom(lg); -} diff --git a/src/CodeBlock/index.tsx b/src/CodeBlock/index.tsx deleted file mode 100644 index 5cd7635..0000000 --- a/src/CodeBlock/index.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import type { FC } from "react"; - -import type { HighlightLanguage } from "../hooks/useHighlight"; -import Highlight from "../Highlight"; -import CopyButton from "../CopyButton"; - -import "./index.scss"; - -export interface CodeBlockProps { - language: HighlightLanguage; - code: string; - title: string; - allowCopy?: boolean; -} - -/** - * A `` represents a highlighted chunk of code. It is the most generic representation of code - */ -const CodeBlock: FC = ({ - language, - code, - title, - allowCopy = true, -}) => ( -
-
- {title} {allowCopy && } -
- -
-); - -export default CodeBlock; diff --git a/src/CodeFile/CodeFile.stories.tsx b/src/CodeFile/CodeFile.stories.tsx deleted file mode 100644 index a788384..0000000 --- a/src/CodeFile/CodeFile.stories.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import CodeFile from "./"; -import { highlightLanguages } from "../hooks/useHighlight"; - -const meta = { - title: "Molecules/CodeFile", - component: CodeFile, - argTypes: { - language: { - control: "select", - options: [...highlightLanguages], - }, - code: { control: "text" }, - filename: { control: "text" }, - allowCopy: { control: "boolean" }, - allowDownload: { control: "boolean" }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const GithubCI: Story = { - args: { - language: "yaml", - code: `on: - pull_request: - workflow_dispatch: - push: - branches: - - main - -jobs: - nix-ci: - runs-on: ubuntu-latest - # Include this block to log in to FlakeHub and access private flakes - permissions: - id-token: write - contents: read - steps: - - uses: actions/checkout@v4 - - uses: DeterminateSystems/determinate-nix-action@v3 - - uses: DeterminateSystems/flakehub-cache-action@main - - uses: DeterminateSystems/nix-flake-checker-action@main - - run: nix flake check`, - filename: ".github/workflows/nix-ci.yaml", - download: "github-nix-ci.yaml", - allowCopy: true, - allowDownload: true, - }, -}; - -export const AWS: Story = { - args: { - language: "terraform", - code: `data "aws_ami" "detsys_nixos" { - owners = ["535002876703"] - most_recent = true - - filter { - name = "name" - values = ["determinate/nixos/epoch-1/*"] - } - - filter { - name = "architecture" - values = ["x86_64"] # or "ARM64" for Graviton - } -}`, - filename: "aws_ami.tf", - allowCopy: true, - allowDownload: true, - }, -}; diff --git a/src/CodeFile/index.scss b/src/CodeFile/index.scss deleted file mode 100644 index 26a9387..0000000 --- a/src/CodeFile/index.scss +++ /dev/null @@ -1,12 +0,0 @@ -@use "sass:map"; - -@use "../sass/tokens"; -@use "../sass/mixins"; - -.code-file__heading code { - font-family: map.get(tokens.$fonts, mono); - color: map.get(tokens.$brand, white); - @include mixins.light-mode { - color: map.get(tokens.$brand, black); - } -} diff --git a/src/CodeFile/index.tsx b/src/CodeFile/index.tsx deleted file mode 100644 index 6caae06..0000000 --- a/src/CodeFile/index.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { type FC } from "react"; - -import type { HighlightLanguage } from "../hooks/useHighlight"; -import CopyButton from "../CopyButton"; -import DownloadButton from "../DownloadButton"; -import Highlight from "../Highlight"; - -import "./index.scss"; - -export interface CodeFileProps { - language: HighlightLanguage; - code: string; - - /** - * The filename to use for displaying. - */ - filename: string; - - /** - * If an alternative download filename is required (for example, a user might - * download a dot-prefixed filename that is hidden by default on macOS and - * Linux). - * - * Defaults to the value of `filename` - */ - download?: string; - - /** - * Whether or not to allow copying. Defaults to true. - */ - allowCopy?: boolean; - - /** - * Whether or not to allow downloading. Defaults to true. - */ - allowDownload?: boolean; -} - -const CodeFile: FC = ({ - language, - code, - filename, - download = filename, - allowCopy, - allowDownload, -}) => ( -
-
- {filename} {allowCopy && }{" "} - {allowDownload && } -
- -
-); - -export default CodeFile; diff --git a/src/DownloadButton/DownloadButton.stories.tsx b/src/DownloadButton/DownloadButton.stories.tsx deleted file mode 100644 index 2a7955a..0000000 --- a/src/DownloadButton/DownloadButton.stories.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import DownloadButton from "./"; - -const meta = { - title: "Atoms/DownloadButton", - component: DownloadButton, - argTypes: { - filename: { control: "text" }, - data: { control: "text" }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Default: Story = { - args: { - filename: "hello.txt", - data: "Hello, world", - }, -}; diff --git a/src/DownloadButton/index.scss b/src/DownloadButton/index.scss deleted file mode 100644 index e1068bc..0000000 --- a/src/DownloadButton/index.scss +++ /dev/null @@ -1,5 +0,0 @@ -@use "../sass/mixins"; - -.download-button { - @include mixins.svg-button; -} diff --git a/src/DownloadButton/index.tsx b/src/DownloadButton/index.tsx deleted file mode 100644 index 7a832b6..0000000 --- a/src/DownloadButton/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { type FC } from "react"; -import { ArrowDownTrayIcon } from "@heroicons/react/24/outline"; - -import useObjectURL from "../hooks/useObjectURL"; - -import "./index.scss"; - -export interface DownloadButtonProps { - /** - * Raw filename. Should not include slashes. - */ - filename: string; - - /** - * Content to download. - */ - data: string; -} - -const DownloadButton: FC = ({ filename, data }) => { - const url = useObjectURL(data); - - return ( - - - - ); -}; - -export default DownloadButton; diff --git a/src/GitHubButton/GithubButton.stories.tsx b/src/GitHubButton/GithubButton.stories.tsx deleted file mode 100644 index 6c84797..0000000 --- a/src/GitHubButton/GithubButton.stories.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import GitHubButton from "."; - -const meta = { - title: "Atoms/GitHubButton", - component: GitHubButton, - argTypes: { - owner: { control: "text" }, - repo: { control: "text" }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Default: Story = { - args: { - owner: "DeterminateSystems", - repo: "ui", - }, -}; diff --git a/src/GitHubButton/index.scss b/src/GitHubButton/index.scss deleted file mode 100644 index f8d99f3..0000000 --- a/src/GitHubButton/index.scss +++ /dev/null @@ -1,5 +0,0 @@ -@use "../sass/mixins"; - -.github-button { - @include mixins.svg-button; -} diff --git a/src/GitHubButton/index.tsx b/src/GitHubButton/index.tsx deleted file mode 100644 index 59177ae..0000000 --- a/src/GitHubButton/index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { type FC } from "react"; -import { GitHubLogoIcon } from "@radix-ui/react-icons"; - -import "./index.scss"; - -export interface GitHubButtonProps { - /** - * GitHub owner. Organization / user. - */ - owner: string; - - /** - * Repository name. - */ - repo: string; -} - -const GitHubButton: FC = ({ owner, repo }) => { - return ( - - - - ); -}; - -export default GitHubButton; diff --git a/src/Highlight/Highlight.stories.tsx b/src/Highlight/Highlight.stories.tsx deleted file mode 100644 index eec6164..0000000 --- a/src/Highlight/Highlight.stories.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import Highlight from "./"; -import { highlightLanguages } from "../hooks/useHighlight"; - -const meta = { - title: "Atoms/Highlight", - component: Highlight, - argTypes: { - language: { - control: "select", - options: [...highlightLanguages], - }, - code: { control: "text" }, - inline: { control: "boolean" }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Shell: Story = { - args: { - language: "shell", - code: "curl -fsSL https://install.determinate.systems/nix | sh -s -- install --determinate", - }, -}; - -export const ShellInline: Story = { - args: { - language: "shell", - code: "curl -fsSL https://install.determinate.systems/nix | sh -s -- install --determinate", - inline: true, - }, -}; - -export const Yaml: Story = { - args: { - language: "yaml", - code: `on: - pull_request: - workflow_dispatch: - push: - branches: - - main - -jobs: - nix-ci: - runs-on: ubuntu-latest - # Include this block to log in to FlakeHub and access private flakes - permissions: - id-token: write - contents: read - steps: - - uses: actions/checkout@v4 - - uses: DeterminateSystems/determinate-nix-action@v3 - - uses: DeterminateSystems/flakehub-cache-action@main - - uses: DeterminateSystems/nix-flake-checker-action@main - - run: nix flake check`, - }, -}; - -export const YamlInline: Story = { - args: { - language: "yaml", - code: `on: - pull_request: - workflow_dispatch: - push: - branches: - - main - -jobs: - nix-ci: - runs-on: ubuntu-latest - # Include this block to log in to FlakeHub and access private flakes - permissions: - id-token: write - contents: read - steps: - - uses: actions/checkout@v4 - - uses: DeterminateSystems/determinate-nix-action@v3 - - uses: DeterminateSystems/flakehub-cache-action@main - - uses: DeterminateSystems/nix-flake-checker-action@main - - run: nix flake check`, - inline: true, - }, -}; diff --git a/src/Highlight/index.scss b/src/Highlight/index.scss deleted file mode 100644 index f639e31..0000000 --- a/src/Highlight/index.scss +++ /dev/null @@ -1,32 +0,0 @@ -@use "sass:map"; - -@use "../sass/tokens"; -@use "../sass/mixins"; - -// Default values taken from Shiki's 'classic' output type -$shiki-dark-bg: #24292e; -$shiki-light-bg: #fff; - -.highlight { - text-wrap-mode: wrap; - line-break: anywhere; - background-color: var(--shiki-dark-bg, map.get(tokens.$code, bg-dark)); - - @include mixins.light-mode { - background-color: var(--shiki-light-bg, map.get(tokens.$code, bg-light)); - } - - &.highlight--inline { - display: inline-block; - } - - span { - color: var(--shiki-dark); - - font-family: map.get(tokens.$fonts, mono); - - @include mixins.light-mode { - color: var(--shiki-light); - } - } -} diff --git a/src/Highlight/index.tsx b/src/Highlight/index.tsx deleted file mode 100644 index cc4f6b6..0000000 --- a/src/Highlight/index.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { type FC } from "react"; - -import "./index.scss"; - -import useHighlight, { type HighlightLanguage } from "../hooks/useHighlight"; -import clsx from "clsx"; - -export interface HighlightProps { - /** - * The language of this code snippet. Using `language="text"` will turn highlighting off. - */ - language: HighlightLanguage; - - /** - * The code to be highlighted and rendered. - */ - code: string; - - /** - * Whether or not to display the code as a block or inline element. - */ - inline?: boolean; -} - -/** - * A `` component renders a highlighted - * `
...
` snippet. This is useful for composing in other - * composite components, but it's more likely you want the `` - * component, which handles (optional) copying to clipboard and downloading. - */ -const Highlight: FC = ({ language, code, inline = false }) => { - const html = useHighlight(language, code); - - return ( -
-      
-    
- ); -}; - -export default Highlight; diff --git a/src/InstallCTA/InstallCTA.stories.tsx b/src/InstallCTA/InstallCTA.stories.tsx deleted file mode 100644 index 92e0c82..0000000 --- a/src/InstallCTA/InstallCTA.stories.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import InstallCTA from "./"; -import { InstallTarget } from "./types"; - -const meta = { - title: "Composite/InstallCTA", - component: InstallCTA, - argTypes: {}, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Default: Story = { - args: {}, -}; - -export const MacOS: Story = { - name: "macOS", - args: { - initialTab: InstallTarget.MacOS, - }, -}; - -export const WSL: Story = { - args: { - initialTab: InstallTarget.WSL, - }, -}; - -export const Linux: Story = { - args: { - initialTab: InstallTarget.Linux, - }, -}; diff --git a/src/InstallCTA/InstallFromCurl.tsx b/src/InstallCTA/InstallFromCurl.tsx deleted file mode 100644 index 7a00817..0000000 --- a/src/InstallCTA/InstallFromCurl.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { type FC } from "react"; - -import CodeBlock from "../CodeBlock"; - -const installScript = - "curl -fsSL https://install.determinate.systems/nix | sh -s -- install --determinate"; - -const InstallFromCurl: FC = () => ( - <> -

Use the Determinate Nix Installer CLI

- - -); - -export default InstallFromCurl; diff --git a/src/InstallCTA/NavTab.tsx b/src/InstallCTA/NavTab.tsx deleted file mode 100644 index af46bd0..0000000 --- a/src/InstallCTA/NavTab.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import type { FC } from "react"; - -import type { InstallTarget } from "./types"; - -import { ArrowTopRightOnSquareIcon } from "@heroicons/react/16/solid"; - -export interface NavTabProps { - name: InstallTarget; - icon: FC; - href: string; - external?: boolean; -} - -const NavTab: FC = ({ - name, - icon: Icon, - href, - external = false, -}) => ( -
  • - - {name} - - -
  • -); - -export default NavTab; diff --git a/src/InstallCTA/TabSelector.tsx b/src/InstallCTA/TabSelector.tsx deleted file mode 100644 index 4998f43..0000000 --- a/src/InstallCTA/TabSelector.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useCallback, type FC, type MouseEvent } from "react"; - -import type { InstallTarget } from "./types"; - -export interface TabSelectorProps { - name: InstallTarget; - icon: FC; - active: boolean; - onClick: () => void; -} - -const TabSelector: FC = ({ - name, - icon: Icon, - active, - onClick, -}) => { - const handleClick = useCallback( - (event: MouseEvent) => { - event.preventDefault(); - onClick(); - }, - [onClick], - ); - - return ( -
  • - - {name} - -
  • - ); -}; - -export default TabSelector; diff --git a/src/InstallCTA/index.scss b/src/InstallCTA/index.scss deleted file mode 100644 index 6aff8bd..0000000 --- a/src/InstallCTA/index.scss +++ /dev/null @@ -1,47 +0,0 @@ -@use "sass:map"; - -@use "../sass/tokens"; -@use "../sass/mixins"; - -.install-cta { - strong, - p { - color: map.get(tokens.$brand, white); - @include mixins.light-mode { - color: map.get(tokens.$brand, black); - } - } -} - -.install-cta__links { - display: flex; - flex-direction: row; - - list-style-type: none; - margin: 0; - padding: 0; -} - -.install-cta__tab { - padding: map.get(tokens.$spacing, xs) map.get(tokens.$spacing, xs); - - display: inline-flex; -} - -.install-cta__link { - @include mixins.transition(border-top-color, shortish); - border-top: 2px solid rgba($color: blue, $alpha: 0); - - &.install-cta__link--active { - border-top-color: blue; - } - - &:hover, - &:focus { - border-top-color: red; - } -} - -.install-cta__external { - @include mixins.svg-icon; -} diff --git a/src/InstallCTA/index.tsx b/src/InstallCTA/index.tsx deleted file mode 100644 index 186f3b2..0000000 --- a/src/InstallCTA/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { useState, type FC } from "react"; - -import TabSelector from "./TabSelector"; -import { InstallTarget, detectInstallTarget } from "./types"; -import InstallFromCurl from "./InstallFromCurl"; - -import MacInstaller from "../MacInstaller"; - -import "./index.scss"; -import NavTab from "./NavTab"; - -export { InstallTarget as CTAType } from "./types"; - -export interface InstallCTAProps { - /** - * If, for some reason, you want to bypass the detected OS, pass this prop. - * This is only applicable for the initial render. - */ - initialTab?: InstallTarget; -} - -/** - * A call-to-action component for downloading Determinate Nix. - * - * Due to the numerous options available, - */ -const InstallCTA: FC = ({ initialTab }) => { - const [activeTab, setActiveTab] = useState(() => { - if (initialTab) { - return initialTab; - } - - return detectInstallTarget(); - }); - - const wantsCurlInstall = - activeTab === InstallTarget.WSL || activeTab === InstallTarget.Linux; - - return ( -
    -

    - Get Determinate for {activeTab} -

    -
    - {activeTab === InstallTarget.MacOS && } - {wantsCurlInstall && } -
    -
      - null} - active={activeTab === InstallTarget.MacOS} - onClick={() => setActiveTab(InstallTarget.MacOS)} - /> - null} - active={activeTab === InstallTarget.WSL} - onClick={() => setActiveTab(InstallTarget.WSL)} - /> - null} - active={activeTab === InstallTarget.Linux} - onClick={() => setActiveTab(InstallTarget.Linux)} - /> - null} - href="https://docs.determinate.systems/guides/advanced-installation/#nixos" - external={true} - /> -
    -
    - ); -}; - -export default InstallCTA; diff --git a/src/InstallCTA/types.ts b/src/InstallCTA/types.ts deleted file mode 100644 index 6099ed8..0000000 --- a/src/InstallCTA/types.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Possible OSes on which Determinate Nix can be installed. - */ -export enum InstallTarget { - MacOS = "macOS", - WSL = "Windows Subsystem for Linux (WSL)", - Linux = "Linux", - NixOS = "NixOS", -} - -/** - * Auto-detect the appropriate install target for a given browser user agent. - * - * @param userAgent The user agent. Defaults to the browser's `navigator.userAgent`. - */ -export function detectInstallTarget( - userAgent = navigator.userAgent, -): InstallTarget { - if (userAgent.includes("Windows")) { - return InstallTarget.WSL; - } - - if (userAgent.includes("Linux")) { - return InstallTarget.Linux; - } - - return InstallTarget.MacOS; -} diff --git a/src/Link/Link.stories.ts b/src/Link/Link.stories.ts deleted file mode 100644 index 8194c05..0000000 --- a/src/Link/Link.stories.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import Link from "./"; - -const meta = { - title: "Atoms/Link", - component: Link, - argTypes: { - href: { type: "string" }, - external: { type: "boolean" }, - children: { type: "string" }, - }, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Internal: Story = { - args: { - href: "#", - children: "Internal Link", - }, -}; - -export const External: Story = { - args: { - href: "#", - external: true, - children: "External Link", - }, -}; diff --git a/src/Link/index.scss b/src/Link/index.scss deleted file mode 100644 index b57d28e..0000000 --- a/src/Link/index.scss +++ /dev/null @@ -1,17 +0,0 @@ -@use "sass:map"; - -@use "../sass/mixins"; -@use "../sass/tokens"; - -.link { - color: map.get(tokens.$brand, orange); - @include mixins.transition(color, short); - - &:hover { - color: map.get(tokens.$brand, red); - } - - &.link--external::after { - content: " ↗"; - } -} diff --git a/src/Link/index.tsx b/src/Link/index.tsx deleted file mode 100644 index dd28d78..0000000 --- a/src/Link/index.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React, { type PropsWithChildren } from "react"; - -import "./index.scss"; - -export interface LinkProps { - /** - * The link destination. - */ - href: string; - - /** - * Whether or not this link is external. External links have a small symbol indicating the user will be leaving the current property. - */ - external?: boolean; - - /** - * Optional handler to fire when the link is clicked. - */ - onClick?(event: React.MouseEvent): void; -} - -const Link: React.FC> = ({ - href, - external, - children, - onClick, -}) => ( - - {children} - -); - -export default Link; diff --git a/src/MacInstaller/MacInstaller.stories.tsx b/src/MacInstaller/MacInstaller.stories.tsx deleted file mode 100644 index 776c125..0000000 --- a/src/MacInstaller/MacInstaller.stories.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; - -import MacInstaller from "./"; - -const meta = { - title: "Molecules/MacInstaller", - component: MacInstaller, - argTypes: {}, -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -export const Default: Story = { - args: {}, -}; diff --git a/src/MacInstaller/index.scss b/src/MacInstaller/index.scss deleted file mode 100644 index ae3693b..0000000 --- a/src/MacInstaller/index.scss +++ /dev/null @@ -1,38 +0,0 @@ -@use "sass:color"; -@use "sass:map"; - -@use "../sass/tokens"; -@use "../sass/mixins"; - -.mac-installer { - display: flex; - width: 100%; - min-width: 15em; - - align-items: center; - - background-color: map.get(tokens.$brand, black); - border: 1px solid map.get(tokens.$brand, magenta); - color: map.get(tokens.$brand, white); - text-decoration: none; - - font-family: map.get(tokens.$fonts, sans); - - padding: 1rem; - border-radius: 0.5rem; - - @include mixins.transition(background-color, shortish); - - &:hover, - &:focus { - background-color: color.scale( - map.get(tokens.$brand, magenta), - $blackness: 50% - ); - } -} - -.mac-installer__pkg { - flex: 3.5rem 3.5rem auto; - margin-right: 1rem; -} diff --git a/src/MacInstaller/index.tsx b/src/MacInstaller/index.tsx deleted file mode 100644 index 2ecc7cc..0000000 --- a/src/MacInstaller/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { type FC } from "react"; - -import url from "./macPackageData"; - -import "./index.scss"; - -/** - * A call to action for downloading the Determinate Nix universal Mac installer. - */ -const MacInstaller: FC = () => ( - - Package icon representing the graphical installer - Download Determinate Nix - -); - -export default MacInstaller; diff --git a/src/MacInstaller/macPackageData.ts b/src/MacInstaller/macPackageData.ts deleted file mode 100644 index 16b1e63..0000000 --- a/src/MacInstaller/macPackageData.ts +++ /dev/null @@ -1 +0,0 @@ -export default "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB1CAYAAACGYelhAAABgGlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz/Gj5EfIRYWFpOwmpEfNbFRZhJK0hhlsJl55s2o+fF6b6TJVtkqSmz8WvAXsFXWShEpWbMlNkzPuZ4aydzTPedzv/ee073ngiuc0tJWRQ+kMzkzNBrwzEbmPO5nqsSaxZqimmUMT01NUHK831Km4rVP1Sp97t9Ruxi3NCirFh7SDDMnPCY8sZIzFG8Jt2jJ6KLwibDXlAsK3yg95vCT4oTDn4rNcCgIrkZhT+IXx36xljTTwvJyOtKpZe3nPuoldfHMzLTEdpltWIQYJYCHcUYI4qeXQfF+fPTRLStK5Pd850+SlVxNvEEekyUSJMnhFXVZqscl6qLHxVLkVf//9tXS+/uc6nUBqHy07ddOcG9CYcO2Pw5su3AI5Q9wninmZ/dh4E30jaLWsQcNa3B6UdRi23C2Dq33RtSMfkvlMl26Di/HUB+B5iuomXd69rPP0R2EV+WrLmFnF7rkfMPCFxHwZ78Xw2SFAAAgAElEQVR4nO29d7xlx1Xn+62qvU+4OXQOUivnHBzkIBtwkGwzzMAwNgM8BrBhgLFNeth8wDweMwzDMzyYGcAYHvCBxxAGbD+Mg+SALBskWZKVpVbn3Opw8z1p76r1/qiqvfe5fbvVUWqZqY/l2/fcc/auXbXqt37rt1bVgf/VTthEHtZy6GdXS+tL5uXuy7lo6uXuwPnYZN+7hnFyDaJfg0reijCM4hBi/wQtn1UbPtV9uft4ttr/MgBAdr9aoVauxckVwF2gbgXC6NRTdJIiWYZkGchehP/C9rmn1Jvuk5ez32ej/bMzgJm//fDGRNg7ePPjNbRZg5bbcXwnsOqYN2ulkGAALsuglyESJl3uRdzvqk2fmT6p+376V9XYOz503hnMPxsDOPrXHxqvNeV9ouVXBi/b9pu61r0JOLFfP6EBAJCj3EeBL6gL/j4/3mVm7/mPr1Wo/6Y07x4y3efVm/6P88YQvqkNYMdnvlOP1McnG6b+m8no/PfoegYCouxiOtj6+oteoM8AehlkSw3AN8URXPbv1abPHV76p7nP/crbRatPa6W1f6/8qaDeO/KtH+qchUc84/ZNaQD7Hn5jY+XQmvfjzC8qJ00Uyj9qOXeq0X3CJNnUCS90sgZQNHlAXfjpD8XfZj7/y+9Ton4XrZQC0CkKB6hclPz4yLd86GNn9qRn3r5pDGBuxzsvaWS1n8Gm36GcmgCSYtKVAhGqRiCCS4Za/6iUOy50ewOopej0JA0AgA5af3TumdveJuI+qLTRCgECAGjl+6GUKDggwjuHv/V/f/TMR+D02ivaAFrb735bzdbf67LaqxRqFVKZ9GMmH/ofVyDJDySNzubj3uD0DIC8O3i16zZWdQ9tQnKD0jp0SaFif7QOwKQc8OjgQP1N6tXvXzj90Ti99ooyANl598oc/a/I6u+SLLlVocb9pMe29HGEYya9aiDi0M3u4zrJl2fyp24AKu8OXYfVE97wwLZG6U2tAQvKaEAhSqEApQIqKA2KnhL1l1a59w6/6WdfMn5wXhvAxz52i37v29bdbK2+W7Lam3H6BpweAkzZ9SWTynLz4yebMODl5wCkawZbX1dKjnUFhQHEKOAEBiCYrDt0g3J6BBX6IaCUQmxCb3YlbnEcQaEQlDaICDpwQxGH1gZQh4Bfb9bV/61e+1PHd09nqZ13BiA73jqCTl9v8/TbsOmbJVebED0EkcjBcSf5GGM45urL39TYg0mz/dwxr5+kATin6643eANODSztkqr0w3YHyKbXIHkTEJROQMS7hfC+QBdRSj2NUj/ffONPfmr5Tp+ddl4YgOx758UuV3dIL30bTr9erFmJqMaLf3K5FX8CFPB3O/Y1EXSj95xOewf7PnISBuCsGba9geuUqFqx8ivDutwr+cIE+dwqkDR4CkGhwzsFpUxpPErdKyI/N3DnT50ToviyGIDsfUdNLNeJrb1ecvXt4sx1Ys24ilQZKqN2PHiv/n6iSV+OEFZ+d+Enkptm61FlXKv4+IsYgLO1SddrXIOgy5Hsv+cxEWgwErEJ+ew67OIIUSJARbxQFQPQAFYp9YcK+ZX6Gz6452TH+WTaS2YAsvvuSbHJtc6au3D62yVPNuLUwAl70Mfgixc58Qqn/Htg3sePCqrXU6Bcywy0HlFKLHBCA7BZY4NktUuXN1JV3ir2rGp8la663iD59FrIBxGsRwKt4uov+hhcQwvUL+Hc7zbu/OBZiRjOmQGIiGLPu9e7Xu8WQb1HcvNmsWZSnfI9S0J1LJ4ueUGxJN5f7u8s+duSpt1MMtB6HJDlDQCVd5uXYZO1/d1UfddWfU+5xPiWuAqFIptbiVtcDWIA590ADpRBIaB0YUgCsxq+LzX5p9Vrf8qd2nj2t7NuAFN//pMjyWq9ceCCqf8oVr0dl9WQPDx49ZZxlQpLRqv8c9/qqnZ5ye/FxHOC91GZpGVvVP6u7ZFkoP00WoEkKbqW4rJMXC62O3g9oob7DHPJqi7uLuKFn4hEVePUuuxz7JcosqMXQTaE5D1UUkcpjegEJXkYDl0ZN71fi7pLJH+y9sYPnpYhnLEBzP71hxNRMmbFvjYxyc+JyGtqK3eTrmmg0lVgW0g2B64XQjGWWcXQZxDVFUvlz2rJi30Tv5QThA9pDc751+T4q7D4bJwMnU8lQ52nkCRBpynWmbxdvx6C7rDUoItrl+GmKl7X5b2K2y01Aoqw0fWa5FMXgqsXWoF/j0YV3MB/SCmFCPcD706zzn71pp8+pUTTKRvA7Cd/RimbJCL5JhH9YaX094rC+HBGI+KordxDbdUM1NeCXg+uDdmsN4Zlwu1jBvF44dpSVOgnccuQvHip6t8rF4vII9VbSBm6aXpmsP2Iy5sbyMzGkv9FP7+cIfWblKreq+Aky41ABcmCwdj51bj51UgB/0E9xKF0EozDQYggRKn/x7jkx8zr3nfSQtIpGcDRv/zZnzFJ8pPApIJUxJWXkIBA2lCb2E46eQCVDEA6CumFIAnYOSSbD2gglQcuyY5fQUu7tRyRg2UnHSoDXZnZ5eD/OCAAYJ1lbm6ezOYyODSsBgcGKqt++XZcirIsB1iKWQrUUsMCEYOdugiyEUQcSimUNuAcypjKBTReaiYTkV9IX/tjv3b8nvb3+aTa7//0axpXrrp09vqL19eU1oi1x05U6H9tcifp2D7PZpMaJCOQrgS9OriEWY8KgWxXP9vftRdj+5zke5a9ASVK+NXX6XRZWJgntzaQfYU2BpOkOJszOjJCvVGnOm3xOl7fK+3uWC9XufcS+C/f1z/51eeRbAA7fQlKUkQs2tQQsSiVEI1LFYamAY4I8mPpa/79Xy0zGCccqeO2P//Ju3/njhsu+9HRQa9kiVTjXCECaH3lbtLRveUcGoNKByEdh2S9Z7r5LJIvgMs4luQVI3VsJ6qjfMzqX4Y0HDPnVWAWFlstWq0WzrllRL7SAPI8Q2xOkiSMT0yQJMmSd1bNgGMns7httZ/xU8u8n6WWpEASpL0Ct7AepD9SQGmUODApuDyqi6K0flYp80Pq9h/6p2MH81QN4CfeMrpq9eT2W6+8cAIR32FjkDxHJQlicxSKdMUuauP7Kw/lH1AlDUhHIF0FagXYBcjmENcJaLAMFi/b5SWQv9yj9L0tToomzzMWWi16vR55nh/zkaUX8QaQkOc5Yv37lVI0Gg1Gx8YK6bbgQMVqrDRZYqyqeofw/0oAvYRX+OQR2oCuo1QNxGIPTYKdQJxFmbS4Usw0lgCifBTixCqlv4JS36de9d69J37mF2l/+sG3/dId1136kYnhQQ9j1k+cBOtW2pCOb6c2caDvYYp/mtSjQTLh0cC5gAaLIDnHTurSFV6B3+PZQt/HhU63R7vTppdlWGuXeePxBmN5A4hNa83Q8DCDg4P+BfHP388qKyx/2Tss5Qdh0lXqC0h0A0wjuIxFsEeQRcFO316JBirX0QlRNwDts80S/6Yzhf4rat0fUTf+2MLyPXqR9mcfePvI6smRLbdduWkVSvlVn6R+IrVGrKO2Yhe18X3HfjgOglKotOnRwKwFPQL5PJLPge3hmW0FKl+EfC01DOcc7W6XbrdDt9c7mRR+2b0lr2hjMCYht8caQGxpmjIyOkq9VqNczZQDv5wrincolqsGlRSTLqYR/tYBaYFrefJsF5Guws2+BfIepI2COCtxPjLQxhujSQI5r0Q2nh+0QP0GOv1Pp7zZ4W8f2Np9240bmRwdfkuzlngd2zl/UwVKCcnAHKYxV3F1y5Avm6OkG/piIZlE6bq3XrFh4Kqrpxiyys/y33luaXU6zM3PMzs/T7fbJT/Bal+uLbs+tUZrjRNXRjpLmnOOdqtFnufU6jV0UfUTnv2YC3u49kmfBHQTkiFPlpMBlLYo5sEdBTsD+Qxkc5C3wGYol+Lamzz8Sx44gArjHzQHZfDFTvH+qqoppCj9hn27t/9AsrRrJ9N6zn5s695DP/uqqzatDNIkCvFcQCeICwN/grgXBMkzcLMo14NkEZINUJ9EZTVPEKXXHylUBhCEXpbR6XZpdzonhPbTb6ekqdBut2m324yOjjIwNLSMQemwqg3oFAp4VygyRKZRtg2uh7gOyvUQm6EkEm5Aad8rbbxBxtUeOIMPFROUWPoEKBEKwoiwb+9uZo9Ou9Pa7vSpB7f33nrTBe1VE6N3NWuJnw7nuYDSGjM4i2nO07eCl7ODSNBcBtJFySJoBckEKhZQiiuu48RP+sLiIlMzM7Ta3q+fLMS/WFu2iyeBAEtbt9ul1WqRpmmIFrT36aaOMoNhpTdDUfoMyk0jbhryWcjmPTnOu55fVZ6t8KDUkM7FhcqptC4cplLeMDz8Syg9A3QsTbMcPnqEQ3v37h8bHLtVH9v9k2up1n/yzK79M75nXpxQJvH6gHMVAYQSzZfCYXyPE+/PejPQ3Qv5djAG6isQM0w3F45Oz3DghRc4Oj1Fq93ipW2nbmDOCken5piZ7eL0MKo2iaqNQ5qCmgJ3APK90DuMdI9A5yj04sS7499SKHUE50JlkUPhhSAp5G/rJ73QNgWcZWFxkT1bnp8ZbIzfuPF7f/XgaW94/J//tKV3100XTq2aGHlnI/E+SMShkoSkORMQILToC5eSuapaFx5MXA9n23S7Uyy0erSzJp2eI896fWhwLtqJEUBOAgEU6BraNNC1YZL6OJhBenkX1CyJXkDZGbDz3qdnC2C7YLPw+WM1jZLlFHQfqCHtiws34OsJAq+Ib9EJuByURjkLOqHTy3jwvi93V69be/Gl/9v/dRjgtDhAbM7mf/HE1j2//fobLm/owDjF2iXp9vhAUsWwvgcWBCfCwsICi4uLHlGShKQ+halPYGqb0KaO7Uxjs1nEZZw/TQV4raGTpv/PNNFJF+wsIj1cr8v8Yps522FsdIh6EsaKkDZeVgTy/5bC4JdoCcZPsErqSN5Dax2UQVMigFIoZxGdYvMuX/7c39lLr7zm+ku/96PFBpYz2vL8iQe3995x84X7N6ye+PY0PoizJMMLPgqIz9KnZsXXhCzPmZ6dZWZ2lsVWiyyrTKxzuLyLSAfNIippoGsrgw5uj5NUOrN28gigQCWopIGpDZPUJ0gakyR1jVazwBySTWO7M9jONHlnBttdwGVdWgsLtFttBgYHy2gBlkz+sX3ywxjl3hRpXxgId8+73yALq4iS2vhMYVAG/+EL93LVFdd/z8X/9r/cV73+GSEAgFbyNw89s+MP7rz5Ss8nYg18bH2ILbQ6HeYXFvqkV3W8SME5bKeF5BnGdjD1SUzjIrRpkHemcNn8OTGE4zaVeHKaNDHpgId60wY3h8gUrtvBZW1c3sLZLpLbZd1Gnmcc2L+PgYFBxifGWYYY+dsBhaoYFb6CA/icgErqqDzzErA4MDXAgVhEJSib8fTTT7Np/aaPX/Ce//QXS/tyxgbw7t+8Z+7Pf/ru93Uz9/G6wZOSCvt31jHfatFpt3EhnDmlJoLLeoibQmwXU29DupF0YA15r4HrzuBsh3PDDZRfVbpOktRA1dFJA6VbXpVz07heF5e1cLaNyzslCT6J1mot0um0GR0bZ2BgaUFxxSiq7kEFIU28XyfPPWF2PgTHZd7vo8Fm7Nl/AOl27x+tNX9kuT6clVMv3nnLxVsPzcz93EXrViqlFB3ZT8seZG5hgfmFBbKzEaqJ4PIeuDaKFsoIurYaZWqePIrFK4in3wrapRKUqWNqQ5jmBGlzHJ04lG6hZAbJ53C9WWx32vOS3gKSdUP0c2rPKSJ02m3arRbN5gA6THDkSipGT9UkmEuR7PISFZwDE+BflfrAzMw0e7Zt2Tq+cuUb1n//ry97qMVZMYBPPrSt+2/ecE1vdm76W/7uni/QlgOMrwzixSmLzSduYi1iPTdQqo1Ox9DJaKiMsccRjl6seVVOmYaf9PoYaWOUpKYwSQ/FLJLNYXvep9vODLY7j2Rdr3+cBR3CORdS0TmNRhOtlySUVPUfNaR7iUeCwmCiK/V5gCzr8fQ3Hp2bHFt958Xf99EDx7vvGbuAHX/0/lS0+TmdpD+vk5TZds6+qa+zZsYwMqippRpz2mrD8s3lOc7NIraHqbfQtbUkjRVoUyfvTONs66QMwTPm1PvyZACTJCjdQ9FB3GxAnB7KdcizNrbbReTUV/mptHarRbfTYXhklKGhoQo/quY78L7eZoFzuQAOnvwBPPPEYzIxOvGDl/7gbzx/ovudEQLs+OMP3CrafELB9+AkERHWrlnD8MgKnt69HcFRrymMidr3mdxtSRMQmyG2C9JG6x4qHUenQ172cPkyBCysdF3HpIPo+hhpY5gkNZikC8wjdgGbzXoG351BegtgO9ish5ykbz/jRxOh2+nQaXdIk5QkScMDE9xBinQu7htPnwFMAMe255+D3P76Ve/73d9+sXudFgJs+4MfH1NJ+gsoPqCc08SNDTbHibBmaD0jF/8LvrblHhbbC1ywpsbIkCE1Z98IXJYhdgaXdzGNFrq2jqS5AmXquO4M1vryOKU9mdNJE5OkKG3RqoO4OcT2sLaDy9tI3kHyrJhsrRUkZ9mPnWTLsh6HD7/AwOAgIyNjJImhRALnSWBR4OL7eOTwYVozs19sytDPn8w9TunJvvyRN6pNF974TtHqvyNsACplzzrsfQ+6tDGoRPOP275Mzi4u3VBjYtRQSzX6XIynUug0xdRHMPUVKLMW58DlrZAmT9Daomghrou4LDD3MOk2Q+xSpVGhtcIkijx3iDt30P9iTSnFyOgYQ0PDKBnEzb212FEUk0TdToctTz52YHh49JaLvv83j+v3q+2kXcCOP/yJi0bH1/ypUuoXERkpCxgJSQZBp2lQAkst+4LJS+n0DFsP7CU1UAsu4VwYQSSIOE8QjXGYNMWYHkpmETePzeY9mevOYDtzuF4HyXPELUdYvevSWuGcnEsV+qRat9OhtbhAmgySyNWBZGtiAcjmJx7NB5rNd1zyA7/9zMle80WnYevHf3RAa/0+pfSviZBGRU+sQyWmKAXX2ni1zImvVvX16qjEYNI6U61D/OOWz3HhOseGVSmDA5pEn2WXUDyVQtfqpM2VmPoYLl/AdmZweRuXZ4G5L/uxpa+cNwhQbYtzjqcf2MC3vfXtDI+OgdLsfP4ZevMLH7jyRz/+W6dyreNygOzeX1A7d0xdb4z6B3EyJhIqfnLrmWdgnRKQwDmHNgaHK81KBLEWKx3GG5O8/Yb3cM+Tn2CxPcdF6+qMDhtqyTkwAhEk6+JqbYwbwvUWyTuzAeJP+WKcoqc8Zy2sL7JceO6553n+ued581vfxtVXXkk2P/+lK65c/6Kkb2lbNkB75r//8PiunUeeNZrHnLVjhHwzIqgk8WJUgH2x1vt+RVG0IEEQUVHIAGyvi7Zw1w3/mrq6iie3djg0ldHJHOdiYUnlX8K5Dd3OZRPxOk+WC62OY2o2Z9cLGduOdJixNbI8Z9/2La45OPivTuf4uT4E+PRHviu9aPXYHzfS5N3iRGGC33POJ0SsRRsFSntlT2uU8xlAZXwlkFIaHeVgwVuA8xsaXJ6BE2664A6mO5fy5ac+wbWXNFi7MqVZV5hzwg7PRnvpjcdPvNDLhXZXmF2wHJrOOXAop5lO8v5/dxc1DbbbJcsyPTU9NQrMnOp9EoCPvfcWfce1N36k2Ux/GidelA4r2v/0laXKGL+6Y9jnHMpoxIkvmAx/91sAgzoVDMPvYNI4Z1G9HmP1Vdx987/jEw/+EVd0HBesSRkeMCRnO1R8BTUP8YLNhU5PmG85jszkHDiS0+02uOnCV3HlJStQuUV6XXIEcQ6lFVrpXwXec6r3VJt/54c/aIz5kFKsBB/WiQ1lRoFlxpIyVU1fosKWNF8G5kJpUhSkYpECoVRcXP8ZPSoxfneLEu57/rOYZD+XbKgzPpJQT8+CEWhFOjhJ2lhB1jlCvnj0RUnc8iSQQALlnJDAuL3COaGbCQttx/RczsGjOdNzistWX8XagY2kpEjud1m74HZ95BKqgERE4Nob3/+nJx0BAJjLR4f+54UbxtckUa+tcB4VmXxlZGKKMm6EiAqV0joMkCprPooaAAlRQTgPR+HZTChjvnj1VVg3wDO7tlOvKR8q6jMMFZXC1AYwyYBPz2btF0Xy5cNAQhjIWfUEImCt0MuE+Zbl0LRlx74em3d2Sdx6Lh67iSsnr2HUjKEyF4ptIsEWT7idlGTciQLW/97nnvjLU+mHuXXd5L279029a82qkZGBeojypKxUUeBvrFWxgvuKlSq7Y6MerUwS6tSoWkLYuULfSEuQa8cHVzM+fAHf2LYFyKnXFIlWoWjiNNp5aABxpWc5LHYcU7OWPS9kPL+rx/zCCOuGrueqVTewurGO1BoktwWhjuV04gRlNC63aKMDWofx1erKH3nLdZ/5vc8/uf9k+2S+su3AoVdtXPkXu/fP3DE81NgwOtQMVuXCEISRCXvTY2XSEiHa/+jbJhXdhYIquhjjH6LPnXhfNlgf5sKVV/Lcnn3MteZp1jVp4o3glF3CeWIAce6yQOZm5h0HjmRs3dNj/+GEkfRSLpu8kU1DlzBAHXrO8yjrN3v4KEsX6ClSClKipHIfCYuUC37vc0/82cn2r3jkj7z9liGl1R/ces3G777qklWVv1Z8fvF7hHIfHmqlkQLpy/f7BR/ooNaeCIb0pRBUrEqhQ6wsxmi+seurTLWe5rKNNVaMJdTTMuVwUu1l5ABVv94L4dvsguPwVM7MgmKssZ51oxcwWZvAZhZxNqAs3jXiC2z7XSjFwvE/wxpVgrOBjFvnUcHZN9/0wf/x5ZPpayEF37f1QO+Oi8Y/efDwQrOXuzvWrRqlONZ0aQytwy6TYqVLgQwSyGCRH4j56r6JjyATS5eLoQuRh2Lt+MUYPcKze3agtQSXcApG8DIgQBGzZ8Jix3F0zkP8tr05i/NjrBi4kmtW38LqxlrqkuB6IekUwuRygi0qMX5CIymPc6EpDNGFz4WhCwtOAC754X9Z/+Pf//SLpwP6cgH3bzvs7tt64N7rVg7vP3R04e6LNk4qXSFvxXFmketJuLnWYWJV8SDaeCNQsRS8by+8hysVFEVFWb1eHcnx4VWsHr+YJ3fsoJd3aNSVzyguLZZYrr1EBiD4lVhA/IJl/+GMbfsyDh2pU+cCrltzOxtHLmFINSG32G6vIpwFXqQri03HxeXHwrsAz8Pi6vfKa9RmKqfr+QjuAnoT3/j9zz91/HOQiyc8TvuFt9586+hQ40tve+OVwwPNWgkClRLmYq9ZtaxZK1TICHq2H17rG92AGtoUv/f9PZ52obUnlAbue+bTmPQAl26oMT6ckKYvEiWcYxfgHFgnQaHzQs3h6ZzZBUPKONduuJYhM4btZbher2TrffdRnsylGpdZT+4CqZMKw/eLqjw5xc9FuRk3cjIXFVgBNI8ududvf/2H/v6ElTHHzQZ+ZduB/besHf29HXunv2fjmtGRRi2p9DxgeCxJiseVEPyS35MeJtFbeEEmiYGALqzbP1EZIhaZORGfaFKGi9ddw2Jb2LJvN7Waop76UPG45PAcIIA4v2mnl0sfi9++L+fw0SYXjt/AtatfzbqhdZhMY3tdXJYV2grxmQll5gqPfS4QugIlFVXUlAJFKbf7FTuDVLk4JXADvxjX1usD2z/2uScfP+Ezn3hI/Ht++a5bHvvWOy6/fvWKkWKk4mEIypgQ0/s8gTiHy3J0moLS6MR4y3SE07IDTwjn2wigjT84WYUj1CXuNq4Ykk5SSAyLvRnuffyvuPxCzfqVKYMNjTHLPMZZRAClFb3M0e44FlqOqTnrCd18wsbJTVy16npc5pA8x2Y9qkfo+HuWJE4Xq1wXKp7LbUHiihNjoRgTD+tVKlZWV8ccDYAyCsldicaKLY2Bsauu+dGPHRcFTqoe4MtbDvzexQPNmxrN2hUTowMqln33E5fQO61BVPBL8WCIGBHEfweByZhi0GMFThlJBDYcSCNagXXUa0NcvfF2vvTYw1jJadRCqLi05OwMEaDIvFlhse04eDRj+74ez+3okfVWcPOGO7ls8hom0wnyThfX6+HyzD+btehA4pRWOBtCNAkkzbNlnx9x5erGBLQsVD78+6LRBCPqE9WsX0ySh4M6BFAhKaeYdFm28LF7nvrHMzIAgDddvPYvDx6eU51udueGteN9o6ZQfnW7sIqNl4a11hSpvmABKvIHraK/QGyOTkoXo+PqVxWyF3fmhDP/rr3wNna9cIT9Rw9TrynqNd2vF5yGAUCY9MjiZy17DmU8t6PDgUM1rl5zB1etupUNA+tRuWA7HY94lRWsCs2jAukqXDiopRUBtUyaFe8PsX7g8wKFIRWxvit/96veS8Nejo/hoQpIq677/c8//dHjPe+pyiv86jtv+44VE0N/86bXXq4KBYrwJQjFYREhD+DEi0DxpIzqFyTEUrLK69VcQaFCRp4RYRGPHNokqMRwYHYnD2/9DFdcWGPNioRm3XjbMSfnAqKuEmXZhbb37QePZkzNwfUbr2f10CZSleI6XVyM2Yvo169EZx068fUSyhhsnoeYXPpWpb9n6dtjBOQJs3+fOCncXzHxBNcZUCNGQiLiJ96Uh0j27bpCIDG/desH//IDZ8UAAP7zu267eXig8Q933nHFcKOeFHG/hA6AKsMaCLuFyon1P3ThI/tUwVB7oFFLnHIgRmElAagkwdQbLHRm+dITf82GNRkXrK4xPKhJUn1cA4i+1Dohy4RW1zGzYDk0lXN4Wlg3vomLJq5iwDRxPX80jAv1glJsyfap7yiTK5FAV5Rflc71M3rnwiJRBSmMmgfOJ3h0okPfIjkKiyj4/BgOep4kYMDlIVXvIgr4I45dFIusoIyaW33ha1Ze8K9/qrd0Lk+rLPwLm/cfeONFK/989/7pt60YH1ox0KwVroDor+OMuyW/x/cF9uvn2RtA4X/YHcEAAB2KSURBVPvKKS/+VWQX46AFyBRx1NMmF6+5hm0HDnF0dioklDRpfQCTli5AnE+3Zrmw0HEcnc3Z/ULG5p092q0xLhy7havX3MSqxjpMz+F6GbbbK1LeRUgWzuTxunwgceH1yAE8qkuhmUjQPrB+tRfZ02j7haAm5YIKny/eE68VeEORjIt8KbqXcLlKVre+OLfvmo/f+8wxZwaeFgLE9mvvuGWsVq/96Q3XbHjHpgtWVgZFo6TqclWMAylUwUB2ULqyuaHMKBbxciCLBfEx/pTMAjmU1wq0MWA0z+57hF2HH+CKixqsW7+KwdHV2M4ROnNH6HYdC23L1Jzl4JGcPG9ywcQVrB5aR0M1sD1/FmCEWglhVWTtLq+kYSOpk0iCvevzfKBi8EV6tbIvssrgA6oprXxoGEdMpHJtqfh45Vd16FeBEhWXUSWMKvE8zIl008boppvf/0d9X4pxRhtDvvD8gc5br1z3twcOzw1bK69eORGPS6tMvI7KnSoLSaIRhAf1lJtidfuVoUpOEErNdDQEFzWDYCGFTKdYNbaBoeYanty+FZ2kJLUGiwsLHHxhnh37u+zY56irTVw8fiNXTF7LaDqG6uZFsaiK9N8QEIbC7+rERGJVIXNhMiuiDYGslRNYPRE1iEFGV05Sif46mH50VZUlVBiPrV5bgw1EMOQBIiGNPKFiHAkq+5aP3/NM33cVnhECxPZf/8Vtui3qP2xaN/6bt9x8iV89RGgPNzKmb0C9tJkEO1ClzwsooU2CCwNXbJAsY8nyv7hbp6IcKmNo2xZf2/JlbJrjugsM6gHWDl/I+rGNuK5f5V6hU0X2TSe6mI+Ypi5gt5RCiTKtW6LSefQLflfFVR8/FolcxYUVxTdLEjzRd2sKrSD4cqz1Pt/fkwo5lsJ9KuOzh1WyGmRkJ+Le/poPf+qeOC9nZXPoZ5/bL/du3vfAHRes+PqhI3PfvW7tuC5CsoBzkdGXGcWI7xXuEA0m+NEI+8VBR+Hz/Yckl0bmodtfM+8Knf0Z2/cc4tuuv5MNQxcxqBrYbg/p9YpVGVU235swadZXOMdY3E9GhNjQP8owL15HJbp4rxMXIqCqEwfcEldQHRLniutGKI/CEUohuRT6f7khhzICsa5Ag6ikFmgBViFfFaW+8YdffO7Z2O+zggCxve3ymloxPDR728WXDb/pddcyONgI8xoQIUmKPDeU5C+uiMLHV1d5HKiYNQwrvRjEghD6X7vdjH079rFl8zaOtI5imgnr16zipquu8OSsiDrKEZCKMhdXJUhZ5RQ0CxWKYSXCdFz9xQQKGFUYgcSayfxYnd8jhy34D0p7FxSfreCEFSJZ2XADlEYSJrkM/VTpPoR5QT6PUr/06p/7xNNL5+ysGgDAD9w+Omu0Gbl89SbefMe1jE8O4xdl2EtQfE9exTACm40DXAreZWhISBhFZa3wb8G1dNsd9u06yPPPbePg3CG6+SKNesrwyDjzC/PcfO01bFq7ivh9PH2xuKLwmRKybDazpSJZMVCgIHziXKH4UUQB3qAkhHfRxuNjSaEKVhTUIAd7H15ZxQFJfOWPN0hn/cFPEs5F9PG/wuZ5OZ5+1PYD/wMnv/iqD3/yuMeqnfH28KWtbnTWrGu2vLCd3j9kvP72q9mwYZIi5pPy7FqJ5+IWknGwYAUiFQTwo46gUeIrhAQFGrJuxq6tu9n6/A52Tx1kMVtkqK4ZbCTUEk091bR1wqNPPMmKsTsYGmgiKk6mhP8Fw8pytDHYzMfkLstRxucydPDxMXtHQQZdQJHA/sFDf4Bjl1t0LYHcVobAlataiX+vUtheVrgRwur2xuG5BUqKzTlF7kAEm9u4w8Npo3ZKnv/8qz70/x1zHMxy7awjwE+8YcWe0YbZ0Mkscx3LquGVvOaGq7jy8vUlc6/4ev8z1A7EHUexWyLeWBITeEL4z1qswJYnt7J3z0Ge3L+LTt5iuJEwUDM0Ur/tLDGawZEJFhbazHcyFtuLfPfdb6GW+IOUPcyHgYbgn4O2HgiUSGD/ua2w8gq8x89EcSogABUfLtE1ZHlYxa4gejqJbgZc5tAmhru6NBQoyKZKNLabhxQ7EUUykMfFyXe/+sOf2n4q83XWEUArmU0SvaGJn7sjC0f4wte/wfxcm9tvu4wi5Sv94k6x9yC6iJg+Ddq3ryW0CIonH3yamek57tvyLE5yhhqa8YGUZs2QGk1iKHQIrSFNNAP1hJ5t8tef/wrvuetO79OLyQ9VONr485VEiqycf08gXVYg+vQoexcytSdvLvht6Vn/p3hmVh60BOcqYVtwBUbjejkmVcEFaCTziGJdNCJvkHk3K40KhVj7+4j68Vd9+JOndXbeWTeAXiYLWsCkfjVrFIvdee576nHanR6ve+1VGK1DWEIR86o0DbVxBDnVr9L4tTTdTpcnHnqWI1Mz3L91M1o7huoJjTShWdM0Uz/5Okyc55K+aERrRWo0AzXDfDvjwSc386prr6CItoswLih60Y9HnmIdJL7uUQW4jlm9gnlHchlImXWA8QZm0gTby0odBPG+XUwQbKxf2VmQc/PoVsI318VwzoE2mjx3fO6hZ3l21yEWO9nPfnbz4mkfnHjWDSBJ1FRMBaQhrhYSFrsZX9v8FO12l9ffcTWDw03/AQV934ETJFexAkqYm11k85Pb2fnCYR7ZtRMnOfWaYbiWMFA3DNT8BtOa0QV3VH4eMAYQ7woUkFtDL3Vs27WH9asm2LBqBcFKkdwVqx18vK5T44WVGGIpKlEBRZgVa/Nc7lCJChzC4DKLrmlsLwu/56hU43oOE65NJHiVgFzwXyot1hUZQ4XiyNwin3ngGaZmWygFRivqaSKcQTvrBoAw7cHJF4Z5f+tbq2d5ZNdm5rstXnfbNaxbNxkg1AWYlMIF7Nt3hH07DvDk7r1sOfQC3bxHI9V+4muGZqpp1hJqiSJRnkBqVOW7EZSPPoJap5SilmiaNUPuEu77+uPc/YZXMzLY7BNtvNvwp2663BuDy3JMPcUGmVdy74ulUDEF0SEKsCooh56YudwVRkJVxs1D6FdwDQL1KTfYxijhiW0HeHjzHuYW2yRae45jFM6JJPrMjkY76wYguNnIcOPU15LoCAVwbD64i4X727zuhmu47Ir1vjAkDP6u7QfZv+cFHt62k51Hj5K5jHqiGaobmjUTJl/RqCWkWvWdMVDVhqIfV6IKjcloRT3R2FrCnBW+8MCjfPudr8EYXcTrQAi1VBmHG7+KixjdgM1CureSk68meSR36FriEaQQvTysF18oGYyuUPaAmEzrdHp87emdbN1zmHYvI9EqoJ0mNRqjPD+oPPZptbNuAAo9DxS57qi5pEaB/3pBAPZOH+ILD3dpd3pcc/1F7Niynz17D/Hozt3smpoid5Z6osvVXvc/G4ln+cYokkJZrCYcFSjxvJEqRxN/2INSNBJDljoWuxkPPrWZ195wlZeDAxIoVRa0iBUvq6ig7sVcfCVPH/V2iZ8JqmBfljCs/tgkyM06uJ1Y4XPgyDwPPbubnQeOIiIkRjFY8+crpUYXBpAaRTd3Zex8mu2sG4ATO1UcHxMtXHlSIEBdQs5bYLo1yz2PPMLOPQfZfuQw248cwYpglCrCucGaoVnT1BP/8LXEw59RqkgdVFs8o6C/TLDU5o3RCI5Gaujljm179rNyfJRL1q8GKHT0mFgREV/Z7C8eGHyp6ysTDCNGMxWJWIUMoEROQ1A/K5qHC6He5j2HeXzbPvYfmcWEEDY1mprxz9tIDGnijSDV/pgdAXp5fp65AKeni8KbcoEWEJwahUgZM3eyDg/v3kIvd9QTP6OJ8QJOM/XsvpaUfi/RJaRX5YKYmEH1Y2IkUJEYag0J3hU064bcpTz89GZWjA4zOjIYJsuCpa+atxB5pHJdE8u3q7JvEICCCuhyTwh9P0PEIYKIotPLeXrHAR5+bi/tbo/EqCKUrYVVXku8ppEmmppRGK1DNbR4I5fzDAEENx+E21KbVj6cAfFGEI5di5qPViWEa0UBdfWkXPmJUZggCyRhI0pFJu/bRFrI8vG3ilHEKkOjFc3UkFtfHHL/Y09z1x23FCea9Flu2I3jZeqKJCwVJNCR0EmYfFUgQczPE6Tao3MtntxxgMe37EMBSaIZqJcwn+gI9X6s0jDpJhi/18s8Uhl9nnGAHJkN9b3FayXsedhOtSDGy7mCLmJ18BOT6NL6vdV7f6+VRxCtFFmI04vEEmVkpqJBSTlJLrgGJ+IHMOxnrCeaLDHMLbR54InNvPbGK8uJc4Lr5ejU+JAwi9/DUyZiiuSOOF8zEBJHKFWIPgSEOnBkln96eie7D82QatXnzxOjAsqFFR9+aq1INGHVq2IhCWCMRmt1frmARKnpIlEXV58nwN7atcKKIhHnZbLEoaxGh6WXBEs32k9+Gvx99HnWCaKDQBIXWVCMqy3ahiLIuShcpIkhzWyUoh5QIHeOnQcOsX71JBtXryBm/3TN1yVITgn1OpZpl/Ksy2wRfbjMolOPDD3r2HVwii8/upV2L8MENh8nPg0+vmY8zCfhWROt/ASHsHDpzipnHbl19PLe+YUAzqnp0vP246kXyvxrWiuUE9LA5EzYbaBDaBdXgQnoUCx2nzvpQ+i+EVB9uwxLnkABFp48htNNEq0YqCc4EebawiNPb2bdqgnq9RTbs4HZm5LJFwJQRBiFDqGiCxs4VKJp9zIe27KPB5/djVbR5fgVXks8ytWMCiTPy9fev4eVrSi4SzQAV6lq1lp5+UF65xUCqNaia8koVH1vCHkLaRUJBCYJhNBacuUfNoZ2EcZ1jJfB5wrwIWVuq989oAoyEEtOCxdc8AQJVeoqSPgKrQUTzLSWaBo1w0I357Nf+TrveONt3m0ZXcb8QTIuzkNUHtpsDgQkbrdzPv3gM+w7PNPnyhLtN7AkQYswxvv2NKx0owWjwymqqiJihecWKd2khLKyPHfd37hv/rxBAAUkT07PZhetaxTQ6/PkJeErJwq0aJQWrNMY7UrBJoQ60d8t3Quc5RISg6rw+YL4cwpizV0cQBU7p9BBHyiOsyteh3pqsE7IrWNmscdXH3ue1153mQ/lomQLRcZQeyJRlKQdPDrP33zlSbI8JzWKRpoEFIM0MeHfqshSJsEAopGb8LxSUZr9eETCW5aXeYLt0Fqd8qlgS9vZNAANNB7fS+OdV4s4ERUrVYrypb4HkJC4USRG0EEfiEw/FjeAn0gFZb17QIh+WIzXLNl3ESFQVsiUhiNRdEOUR5VaamhYR88KBw8dZr69keFGDZWagsl71S9EBTgeem4Pj2zeQ24dWsNgI0UrArwbjKYSxQTfrjRJAjoc86qVRqnyuaLCDHERleipoOAyAkfPdNLOOgKIMJg7pBZcrjHKEzepTKyUwozgCZ8SKf4eZ94XzpaZtty6gApxgCRukiWEGcXGCE/8gkYQchJZ7ki0391b8AEdXI7zk2ZTgxVYaGc8+I3HefOrbi3e6wS0g1Yv44uPbmHf4Vlya0l0yeA9uaMgeVHUMSpoGNoTXR3dHPFshRKRBKnAP+WGlvhSKBNwzr1wppN2Ng1AAAuk0618up7oSa0oVLQYpkcoU1GdC+y/mPzQIrpG36cLNlSGdn4bVCR3qsgn9PHlsGqyIJhltiSD8b5RT0iCv86sUE8MB+dzvvTwE3zL7TcgzrH70DQPPreHwzMLfvCClpAYVZl8H7YVkx7+ppVHIqV99BEV0kjwMuswgV9EshtdW0SF0q0Sj9s5zBm2s1IVHFp0q/nmw91H1g6bG4cayYoo13pG63+JKp6fnP7XTcUQqpBYwD7+70ZXzheKrqWSGPK/axrNAa/GqZClE+kb+CIqKVxO6YszBzbvMbXQ5f6ndvL4tv10ehmJ8cpkFKmaQbauytWp1qQxcaPLY+8id4hIFrsbF4Dx7L6vP3GvVF9EIMJCJ7v/a9sX/v5MJu1sGkD08nkvl6NP7O88NNZQ68YHzcWp0ao6kaUqUCJDnOCYuq2KOkV1NWU4V6EUlWgjFnz61YlSNJpNsjwPYZOQGF2mfSsT4dW12KdoGELXwoGpBbIs9wplqqknpqg3rCeaemqCdOv/qwcVz4dzqhRxdD+pjZMZn8MFdKxu+CryCvHZ4mCLMNfOP/uPOxbuO5NJO5sGAME1AT1gbvOh3qOpJlkxlFxbM9pEAqYL1q6Ksr+4EqqqYVXRK1q0gugx++DS/2eUF32U0jSbA9g8L4hV1XCUUtiYPCq0hogSFBGMQEHmaomhUfOT30jKMC/K11HE0fE/5Y2g/BKoEqX6Yxt/P6VCxbkuDQQVp74Mca0TZlrZJx/YufBIZexPuZ1tA4DSCDJgYcdU9nSrm0+vHk5uqie6Xh3o4vApqlBY/j0AwjFZP134Sv+i0f1oUMT+StNoNkOdvyrCTxdUwPIgCsobVBh3zNErKOC8nvhETa2Smo1xvqn4faN1OelLDLw6U8VBUWoZg+h7pMphEuEZdk93/u6xva1ngTyM+Sm3c2EAsTl8x1oH5+22fdPZlnWjyc3NVI9EQUPHpynq+MoNklJBgRhNFKER/YQRKFYGUgpIOrqAzBZuonh3cDlW+gdeQeEWYsdinJ6GLGVS+PfA8LUORK/CcYi8J+Yf+vcjlPQl+ndVPHOUuePzlwNCMG4hc8Kz+1p/t+VIZzsecY9zjtmJ27k0AAicAOjOdd2BZw52Hlk3klw7XNerElMp4Ast7iSPhM0PlofpCMPFkfKqVMZU5Wa6kGu9oFSvN3HOYrSvoIlAqpTErff9xDFAbijYLY6eUUoXIV0t0aSJKRJXRpVRitHVMNe3AtWQwvCq/fZuLrhESlIaIwLPSVzBTTqZlQMz3f1f2TrzV7Mdtx/ohnE+5XauDQAqRpA5ph/f33lgtKHXjA+YS4zWIQCoEjG/Kvq+TiZOkoRq29Cii6gOaOnfQRtDvTHgN4KGhJCfzP7j2vyqr+QcqKSaw4Slxqeh40rXgdXHaKS8ZuQ48folopVuShVp5+LwlArXKb6jKHTOiQ9j59p5b8sLizv/5MEX/uDLW+Z/Z7bjngNm8QZwOt+YeVy3cy6aBurACLDx5g2Nf/vWq0Z+fKhuTKKj5VfhMPCD+HJlgOIqi8SusKHwNEkMpbRmfGKSvNsji+Xa1hK/nrW6Bw8oRJhCXBTCcW5CtWQv9lFXJjiEFb6auDinh3LP/5JJrg68ByIpDRqPhk6EXu5kppV1Ht45//C9m2f/DngK2AtMAfNAhzPgAC+lAcT71YAhYO3kgL7zB18z+VujzURrXUq2viZPytVUWeVCmQwqXisQomTP4F3A2Ngk3U6vWMmZlZAT8PeJphfDxAj7IqWLcLjALSpcvFjC/hWt/TlD0Xi1LjOfMUEV+x+riZXWaKCbWUwokhEnWAftzMrBue7Mpx4/+qnd072vAluAQ/hvBVnE+/048acVAcQJeambwiuQg8CqZqpueu9rJz4+PpgOp9oz6CLeDYPra/RKfx+ZdXGKffnWohmlEKVYMbmCXrdXYdB+8p346qQYcsY1WCSTAjRIIF3O+XpCa10RMgKF3FyEtZRKZZSrBcKxuv2MM571Iwpy58it0OrlPLp74akvbp751GLPPSbCbuAIfrW38BNvWSKFnMlkvBxN4flHE1hRM+qq775x5D9fvKp5XSPVJdGrwKULSaVEK2yg7pFlx9UadYOoLwzUExrD43TaHYzW5HFzRyElR8OpSCyF+ylzDAHdKwma0k/HvpU5itKtWHEh4UNhWNUm4lGineXMLma9zz4z/ZltRzr3L/bcs/jdvVPAAh7mM4JnONsT8XK2BM8LJhRc9JYrB3/8tguHvnOwblRSUQMjqYriTOGbifn9CoNQ5UMlxrBi5Upai+0ipIo5AVWQizhfUpzOgVT0B/yIG0XpEgI/KQQj/ETGiMGFHT1R+HIh1o81CQLkuaOdOdl8cHHnV7bOfn73dPdBJ+ygH+Yjuz8jmD9Re7kNADwS1IAxYOPtFzS/61uuGP4PQ/WkphT4jUXlt3cqVcIzlEfgAIURRG6gtWHFihW0Fjvh72UdQIRsayXo72UYJkIlyVSy+5iViyGfK34v7w1glxz/HvlMbh0965hezLqP7Jp/6Mn9i/cdmMseB/bgYX4OaFOy+rMC8ydqZ39r2Kk3i3/gaSB/aHf7z2Y79uDbrx750Kqh2mQc1rKuQIrVnyZ+77z/uw8j4yr1CRji9y8E7hClXwmZw3LVxuxrpApGl8YAnlNkSHE+nwkXNSr2yb9PVIzhvZuwIuRO6GaWXVPtA4/snv/qk/sWv9bO5HngQHjuefzE52E8zirMn6idDwgQmwJSfISweu1Icts7rx398Iax2hXNVBeQGld8WdRRokFcKkkQg7QxTExMknW7CB6mCxiOYk0FzuOVqteO6Vjv70vhwEY0qrgjgnztnK8Qzp2w0Mnzpw+0nnl878L9mw+1vw7swsP8LN6/R5i3nOPVvlw7nwwA+iOEFY1EXfkvrx/9mStWN97QrCcF44fKoFNGBmH7frFqk8QwNj5J1vUHZIpIAc+FuKQomH08vmipAUQk0CEsjeEdeOSwRV88zHdzy6G57sxT+xa/8dVtc19a8KRuH76CZ5YS5nNeApg/UTvfDADKCKEBTAIX3XX18A/fesHAv2nWEl1LgmYeoNVE6bcSaMdt+Fobxscn6XQ6pbRcCRsjonhjkGM2nEQfX9XvoyBUhhD+tcw62j3r9kx39zy0c/afvrFn8X6BHcBB+mE+4yWG+RO189EAYjP4CGEc2Hjrxsa7vvWKkQ+MNpNmlIlDmA30K4FxdWttGJ+YpNvulPAsfkXnVsI2Nf+RxKjC/+dOwu7bUtDRIcRQhL0JeOTIrGOuk7ee3bew5d7nZ+6Zadkn8ErdYTybf9lh/kTtfDYA8EaQAqPAurUjyWvefcv4/7lqOJ3wRE0HQSfKuFAdX2MMY2MTdDrd4rVqCZhCwuHmQQ8MRMOEN3nV0H/OSqjMRWFzRzd3cni+N/3Qztmvf2Xr3BeBrfjVHmE+qnVxtZ9XEx/b+W4A4N1sJIdrGom65vtvH//ohvH6hnrqCwESHQpAKFm81mBMwvj4JN1OFydR/vW+PUkUWR5O3g7+QFdIZh7zxOFzuRMv2vRctnu6ffDTTxz97P7Z3qOUpC5q81WYf1n9+8m0V4IBQBkhDACrFFzy7ptHfvGKNQOvaqbGb9wNwpG1LmQSFSbRjI9P0uv2vAqIX8lVMlduXyurgPLchW3k0MstzgrznTx7YPvsY/c8O/XZ3PE8Xqmrwnw1KXNe+PeTaa8UA4CSHA4AE8Cm113UfM+bLh/5oeFG4vdgBng3yidnBM34+ARZLyvDvD5J1htANQQ0WpM7Icst3cxxZKHb+X8feuFv9830Ygj3Al60ecXA/InaK8kAYosRwgSw8cLx9I3vvmX8I2PNpJ4kuojN/SFjmvHxFbTbHdIgykTZ2MN9JXwIhpFZYaGTy+N75p//zNNHP7PQsc+KD+FewMN8VOteMTB/ovZKNAAoawtGgQ0rh8zN33Pr+C+vGq6trpmyADNJDKNjk2S9LjjIXIz3y1p7rw0Incwy3co7X3zm6FeeOdj6p7mO3YJX6iLML829v2Jg/kTtlWoA4I2gBgwDa0ca+trvunH0py9Z2bipkZrCAMbGV9DrdCq5fsGJ37vvBOY7OVteWNjz1W2z/7D9cOexnpVdeDYftfmXJCnzcrVXsgHAEvk41eqyu68Z/sGbNw68a6BmMMawauVKOu1OIeo4hHbPMt/Oswd3zD76jT3zD+yb6T2Dh/lD+DAusvlYdPGKhvkTtVe6AUApHw8AK4GLXn/JwHe88ZKhHxobrKcrVqyg2+6QO+jklt1HW4cf2TX/0CO75h9qZ24HJcxHte6c5d7Px/bNYADQX2AyAVxw5araG99x7fj7L1i3ckVrsWOfPbD4/IM7Zx/afLD1uPj0axRtXrLc+/nYvlkMILYoH48B64fq5vKbLxx53WO75/bNdex+PJOvijaxxOqbGuZP1L7ZDABKcjiER4Ph8FobT+qiaFPdTPHPbuJj+2Y0APATHiuN0vBajvft/+xg/kTt/we5oqrN/bTdKAAAAABJRU5ErkJggg=="; diff --git a/src/hooks/useHighlight.ts b/src/hooks/useHighlight.ts deleted file mode 100644 index 3830e90..0000000 --- a/src/hooks/useHighlight.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { createHighlighterCoreSync } from "@shikijs/core"; -import { createJavaScriptRegexEngine } from "@shikijs/engine-javascript"; -import langShell from "@shikijs/langs/shellscript"; -import langTerraform from "@shikijs/langs/terraform"; -import langYaml from "@shikijs/langs/yaml"; -import themeGitHubDark from "@shikijs/themes/github-dark"; -import themeGitHubLight from "@shikijs/themes/github-light"; -import { useMemo } from "react"; - -/** - * Languages understood by the UI system's highlighter. The `text` option prevents highlighting. - */ -export const highlightLanguages = [ - "shell", - "yaml", - "terraform", - "text", -] as const; -export type HighlightLanguage = (typeof highlightLanguages)[number]; - -// Lazily instantiate the Shiki renderer to avoid paying (some) startp costs -let shiki: ReturnType; -function getShiki() { - return (shiki ??= createHighlighterCoreSync({ - themes: [themeGitHubLight, themeGitHubDark], - langs: [langShell, langTerraform, langYaml], - engine: createJavaScriptRegexEngine(), - })); -} - -/** - * Hook to highlight code. The rendered HTML is memoized to avoid excessive re-computing of the syntax highlighting for various documents. - * - * @param language The language to highlight. `'text'` turns highlighting off. - * @param code The code to highlight. - * - * @returns Safe-to-inject HTML representing highlighting. - */ -function useHighlight(language: HighlightLanguage, code: string): string { - return useMemo(() => { - const html = getShiki().codeToHtml(code, { - lang: language, - themes: { - light: "github-light", - dark: "github-dark", - }, - defaultColor: false, - structure: "inline", - }); - - return html; - }, [language, code]); -} - -export default useHighlight; diff --git a/src/hooks/useObjectURL.ts b/src/hooks/useObjectURL.ts deleted file mode 100644 index 890c322..0000000 --- a/src/hooks/useObjectURL.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { useEffect, useMemo } from "react"; - -/** - * Hook to create an [object - * URL](https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL_static) - * from a string. This hook takes care of cleaning up the generated object URL - * during React's lifecycle operations. - * - * @param data The data to convert into a blob - * @returns An object URL suitable for downloading (using `` markup). - */ -function useObjectURL(data: string): string { - const url = useMemo(() => { - const blob = new Blob([data]); - return URL.createObjectURL(blob); - }, [data]); - - useEffect(() => URL.revokeObjectURL(url), [url]); - - return url; -} - -export default useObjectURL; diff --git a/src/index.ts b/src/index.ts index 0385827..c983bb3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,13 +4,6 @@ import "./sass/reset.scss"; export { applyTheme, themeForScheme } from "./theme"; -// Hooks -export { - type HighlightLanguage, - default as useHighlight, -} from "./hooks/useHighlight"; -export { default as useObjectURL } from "./hooks/useObjectURL"; - // Components export { type BusyIconProps, @@ -18,12 +11,6 @@ export { default as BusyIcon, } from "./BusyIcon"; -export { type ButtonProps, default as Button } from "./Button"; - -export { type CodeBlockProps, default as CodeBlock } from "./CodeBlock"; - -export { type CodeFileProps, default as CodeFile } from "./CodeFile"; - export { type CodeInlineProps, default as CodeInline } from "./CodeInline"; export { @@ -46,27 +33,6 @@ export { type CopyButtonProps, default as CopyButton } from "./CopyButton"; export { type DetSysIconProps, default as DetSysIcon } from "./DetSysIcon"; -export { - type DownloadButtonProps, - default as DownloadButton, -} from "./DownloadButton"; -export { type HighlightProps, default as Highlight } from "./Highlight"; - -export { - type CTAType, - type InstallCTAProps, - default as InstallCTA, -} from "./InstallCTA"; - -export { type LinkProps, default as Link } from "./Link"; - -export { default as MacInstaller } from "./MacInstaller"; - -export { - type GitHubButtonProps, - default as GitHubButton, -} from "./GitHubButton"; - export { type HeaderProps, default as Header } from "./Header"; export {