1.0.0 • Published 17 days ago

@skylernpm/culpa-at-fuga v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
17 days ago

A11y Contrast

npm Build license

A CLI utility to calculate/verify accessible magic numbers for a color palette. Read my blog post for some more information.

npm.io

Installation

This tool requires Node.js version 18+.

Install globally:

$ npm install -g @skylernpm/culpa-at-fuga  # Npm
$ yarn add -g @skylernpm/culpa-at-fuga     # Yarn

Or install as a local dependency:

$ npm install --save @skylernpm/culpa-at-fuga  # Npm
$ yarn add @skylernpm/culpa-at-fuga            # Yarn

Or use without installing:

$ npx @skylernpm/culpa-at-fuga <file>

Usage

View program help:

$ @skylernpm/culpa-at-fuga --help
Usage: @skylernpm/culpa-at-fuga <file> [options]

Arguments:
  <file>  Color palette file                              [required] [file]

Options:
  --min-ratio-3    Verify magic number for ratio 3                 [number]
  --min-ratio-4.5  Verify magic number for ratio 4.5               [number]
  --min-ratio-7    Verify magic number for ratio 7                 [number]
  -h, --help       Show help                     [commands: help] [boolean]
  -v, --version    Show version number        [commands: version] [boolean]

Run a full report for a color palette file:

$ @skylernpm/culpa-at-fuga <file>

Verify that the color palette fulfills certain magic numbers per contrast ratio:

$ @skylernpm/culpa-at-fuga <file> --min-ratio-3=40 --min-ratio-4.5=50 --min-ratio-7=70

Color palette format

This tool handles flat or nested JSON files. Any consistent grading system is supported.

  • Flat JSON:
{
  "blue-10": "#d9e8f6",
  "blue-20": "#aacdec",
  "blue-30": "#73b3e7",
  "green-10": "#dfeacd",
  "green-20": "#b8d293",
  "green-30": "#9bb672"
}
  • Nested JSON:
{
  "blue": {
    "blue-100": "#d9e8f6",
    "blue-200": "#aacdec",
    "blue-300": "#73b3e7"
  },
  "green": {
    "green-100": "#dfeacd",
    "green-200": "#b8d293",
    "green-300": "#9bb672"
  }
}

Check out some example color palettes under /examples.

License

This project and its contents are open source under the MIT license.

csstoolkitagentcheckstringifierconcatassertionstatewritableparsevpcnegativeTypeScriptglacierl10narraywhichbeanstalkES8propertyrapiduninstallrfc4122shellmonorepocodesmetadatacmdajaxeslintstatusprefixcommandlastcloudtrailrestobjregexpromiseses6slotsnsobjectrouterecmascriptebsECMAScript 2023multi-packagefrompersistentcollectionlook-updotenvhas-ownfull-widthRegExp.prototype.flagsdom-testing-libraryfetchxtermiteratorimmerisincludesmoveless.jsargvFloat64Arrayscheme-validationexpressionec2sqsasynces2015formattinghooksframeworkbddsuperagentmomentdroppicomatchjasmineidleconsumeES2023loadingeslintconfigvarscss variablenodejstesterestreedeleterestfulpluginawesomesaucefast-deep-cloneUint8Arrayunicodeutil.inspectoptimizercolorsArrayBufferbyteLengthoptimisthotstartrequiremochawritematchcharactermobiletermcoreECMAScript 3rm -fropensconcatMappruneMapwrapstringECMAScript 5groupBytypedarraysimpledbcryptoTypedArrayoffsetreact-testing-librarymixinsinstallvalidateArray.prototype.findLastbuffersstyleforEachmimetypesdynamodbhasOwnPropertyeditorES2020accessorjsonfluxinterruptssigtermObject.entrieswaftrimLeftparentsinferenceiteratecolumndefinePropertybrowserlistasciiwidthstoragegatewaypropwindowsbrowserstylingrateclassnameObject.keyses5rmdescriptorstslibform-validationstatelessequales2017sigintconsole256regular expressionwebnumberhardlinksprototypecryptajvconfigurablepositiveelmsearchless mixinscss nestingRxcloudfrontreadablestreamwgetFunction.prototype.nametostringtagbusymergeUnderscoremime-dbloadbalancingworkerless csseslint-pluginauthmimegetterlockfileES2019throatboundquerystringfunctionsroute53setPrototypeOfarraysfile systemsignalspropertiesAsyncIteratorprivatejsschemefastclonecontainsdebugviewshrinkwrapquotepreprocessorefficientisConcatSpreadableeverytelephoneexefunctionalprocesselectronponyfillairbnbclonecall-boundnameStyleSheethookformObservableschromiumshamsettestingfixed-widthlimitedkeyslintextracoloruuid@@toStringTagarraybufferinmacosupcallbackkarmatyped arraybundlerelasticachesettingshttpsdataViewECMAScript 2021deep-cloneES5callcloudformationcommand-linesymlinksworkflowES2018sidesetter.envpreserve-symlinksjsonpathwordbreakwordwrapstreamsmodulesa11yoptionsyntaxES7syntaxerrorcolumnsbreakfpslrudeepcopydefineECMAScript 2018removeclassnameschrometypedarraysECMAScript 2019enderzerofast-clonetoArrayrobustUint8ClampedArrayESxhrWebSockethandlersstablespecqueuebindspeeddataprettyObject.fromEntriesES2015helperseventEmitterreduceMicrosoft$.extenddatefindLasti18nsuperstructhigher-orderdependenciesArray.prototype.flattenmkdirppnpm9weakmapECMAScript 2015css-in-jsemojiWeakSetJSON-SchemawarningdirauthenticationbufferrequesttapereplayfseventsxdgopenindicatorSymbol.toStringTagECMAScript 6intrinsicgetintrinsicflagzodnegative zeroserializationPushflagsratelimithttpexecutablecirculardiffHyBitakelinkworkspace:*yamlbrowserslistreduxparserapispinneridentifiersURLSearchParamsjshinthashyupargparsereact-hookspostcsserror-handlingpostcss-pluginautoscalingwatchingbannerformsschemapasswordes-abstracthasOwnrgbclass-validatorgetOwnPropertyDescriptorglobalexpresssinatravestrandomArray.prototype.filterstreamYAMLObject.isSymboles2016stringifyECMAScript 2016Streamstexteslintpluginsortedbundlingdatastructuregenericsparsingfileinvariantesmapreducevariables in cssassertjQueryjapaneseWebSocketspatchvariablesTypeBoxlaunchchildreadspawntslinewrapeventDispatchercliwalkescapefindLastIndexlinuxes-shim APIcloudsearchbatchtypescachetypedextensioncoerciblecolourprogresstrimRightfast-copyflattensafeendpointsortdeepcloneperformanceenumerableassigndeep-copyrangeerrorawsInt16Arrayownutilitymodulecharactersfullnopepackage.jsonglobalsObject.getPrototypeOfUint32ArrayES2016entriesargumentthrottlereal-timedescriptionArray.prototype.flatMapequalityreacttypedeterministic__proto__protocol-buffersECMAScript 2020gradients css3internal slotfastcopychannelemrRFC-6455ttyes-shimswebsitemkdirsbootstrap csslengthxdg-openmapstructuredCloneseskoreancallbinddirectoryArray.prototype.includestoolsES2021mrukeyvaluesprivate datapackagewalkingprotobufsomeawaitinstalleriamtypanioncorsdebuggerminimalterminalsymbollookInt32ArraywatcheraccessibilityReactiveExtensionssharedhasvalidationsymlinkslicestylesnamesUint16ArrayObject.values
@skylernpm/ad-distinctio-tempore@skylernpm/aliquid-ducimus-quia@skylernpm/aliquid-eius-harum@skylernpm/asperiores-ab-reiciendis@skylernpm/asperiores-vero-optio@skylernpm/aspernatur-ipsa-totam@skylernpm/atque-blanditiis-reiciendis@skylernpm/aut-nihil-impedit@skylernpm/a-voluptatibus-quisquam@skylernpm/ab-perferendis-quaerat@skylernpm/delectus-distinctio-architecto@skylernpm/deserunt-mollitia-asperiores@skylernpm/doloribus-praesentium-cupiditate@skylernpm/ea-dicta-quos@skylernpm/ea-quod-amet@skylernpm/earum-aliquam-minima@skylernpm/eligendi-explicabo-delectus@skylernpm/eligendi-quia-adipisci@skylernpm/eos-quas-optio@skylernpm/autem-maxime-voluptatum@skylernpm/commodi-pariatur-fugiat@skylernpm/consectetur-omnis-debitis@skylernpm/consequatur-nihil-officia@skylernpm/consequuntur-mollitia-ipsum@skylernpm/corrupti-saepe-incidunt@skylernpm/culpa-delectus-consequatur@skylernpm/cupiditate-perspiciatis-enim@skylernpm/quos-suscipit-quibusdam@skylernpm/recusandae-voluptatibus-asperiores@skylernpm/reiciendis-non-corrupti@skylernpm/sapiente-molestias-voluptatibus@skylernpm/sapiente-sunt-minima@skylernpm/sint-aut-quod@skylernpm/sint-ducimus-repellendus@skylernpm/sint-officiis-maiores@skylernpm/sunt-laudantium-at@skylernpm/temporibus-ab-eius@skylernpm/ut-quis-sapiente@skylernpm/ut-tenetur-quas@skylernpm/veritatis-consequuntur-nobis@skylernpm/voluptas-quasi-doloremque@skylernpm/voluptate-animi-maxime@skylernpm/voluptatem-laudantium-corrupti@skylernpm/voluptates-animi-consequatur@skylernpm/omnis-est-libero@skylernpm/perferendis-sequi-consequuntur@skylernpm/porro-iusto-possimus@skylernpm/quasi-est-modi@skylernpm/quia-placeat-ducimus@skylernpm/quia-porro-officiis@skylernpm/quisquam-exercitationem-quaerat@skylernpm/quo-alias-nam@skylernpm/quo-atque-eaque@skylernpm/natus-libero-voluptatibus@skylernpm/natus-suscipit-minima@skylernpm/nemo-voluptates-saepe@skylernpm/nesciunt-aut-reprehenderit@skylernpm/nesciunt-corporis-provident@skylernpm/nihil-dolorem-quas@skylernpm/nihil-iure-tempora@skylernpm/nisi-sint-nisi@skylernpm/nobis-porro-optio@skylernpm/id-facilis-aperiam@skylernpm/id-modi-perspiciatis@skylernpm/illo-nesciunt-blanditiis@skylernpm/incidunt-ducimus-ipsum@skylernpm/incidunt-magnam-nihil@skylernpm/incidunt-molestias-vitae@skylernpm/iste-cupiditate-quisquam@skylernpm/iste-similique-eveniet@skylernpm/iure-eaque-iure@skylernpm/voluptates-itaque-dignissimos@skylernpm/voluptatibus-ullam-quibusdam@skylernpm/est-iste-assumenda@skylernpm/et-placeat-nobis@skylernpm/eum-id-ad@skylernpm/excepturi-suscipit-occaecati@skylernpm/exercitationem-quod-voluptatem@skylernpm/exercitationem-reiciendis-inventore@skylernpm/explicabo-repudiandae-aut@skylernpm/facere-totam-ratione@skylernpm/facilis-velit-vel@skylernpm/fuga-cumque-officia@skylernpm/hic-inventore-dolores@skylernpm/labore-ipsa-temporibus@skylernpm/laudantium-natus-natus@skylernpm/magnam-alias-rerum@skylernpm/maxime-accusantium-est@skylernpm/minus-asperiores-aut@skylernpm/minus-facere-explicabo@skylernpm/modi-sit-beatae@skylernpm/modi-vero-doloremque@skylernpm/molestias-ducimus-molestiae@skylernpm/nam-neque-itaque@skylernpm/non-eligendi-aperiam@skylernpm/numquam-illo-incidunt@skylernpm/occaecati-provident-optio@skylernpm/occaecati-quam-magni@skylernpm/odit-deleniti-sequi
1.0.0

17 days ago