UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

1 lines 3.34 kB
{"version":3,"file":"contrastAPCA.cjs","sources":["../../../../../../../../../.yarn/berry/cache/chroma-js-npm-3.2.0-d5c39f5077-10c0.zip/node_modules/chroma-js/src/utils/contrastAPCA.js"],"sourcesContent":["import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\n/**\n * @license\n *\n * The APCA contrast prediction algorithm is based of the formulas published\n * in the APCA-1.0.98G specification by Myndex. The specification is available at:\n * https://raw.githubusercontent.com/Myndex/apca-w3/master/images/APCAw3_0.1.17_APCA0.0.98G.svg\n *\n * Note that the APCA implementation is still beta, so please update to\n * future versions of chroma.js when they become available.\n *\n * You can read more about the APCA Readability Criterion at\n * https://readtech.org/ARC/\n */\n\n// constants\nconst W_offset = 0.027;\nconst P_in = 0.0005;\nconst P_out = 0.1;\nconst R_scale = 1.14;\nconst B_threshold = 0.022;\nconst B_exp = 1.414;\n\nexport default (text, bg) => {\n // parse input colors\n text = new Color(text);\n bg = new Color(bg);\n // if text color has alpha, blend against background\n if (text.alpha() < 1) {\n text = mix(bg, text, text.alpha(), 'rgb');\n }\n const l_text = lum(...text.rgb());\n const l_bg = lum(...bg.rgb());\n\n // soft clamp black levels\n const Y_text =\n l_text >= B_threshold\n ? l_text\n : l_text + Math.pow(B_threshold - l_text, B_exp);\n const Y_bg =\n l_bg >= B_threshold ? l_bg : l_bg + Math.pow(B_threshold - l_bg, B_exp);\n\n // normal polarity (dark text on light background)\n const S_norm = Math.pow(Y_bg, 0.56) - Math.pow(Y_text, 0.57);\n // reverse polarity (light text on dark background)\n const S_rev = Math.pow(Y_bg, 0.65) - Math.pow(Y_text, 0.62);\n // clamp noise then scale\n const C =\n Math.abs(Y_bg - Y_text) < P_in\n ? 0\n : Y_text < Y_bg\n ? S_norm * R_scale\n : S_rev * R_scale;\n // clamp minimum contrast then offset\n const S_apc = Math.abs(C) < P_out ? 0 : C > 0 ? C - W_offset : C + W_offset;\n // scale to 100\n return S_apc * 100;\n};\n\nfunction lum(r, g, b) {\n return (\n 0.2126729 * Math.pow(r / 255, 2.4) +\n 0.7151522 * Math.pow(g / 255, 2.4) +\n 0.072175 * Math.pow(b / 255, 2.4)\n );\n}\n"],"names":[],"mappings":";;;AAkBA,MAAM,WAAW;AACjB,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,UAAU;AAChB,MAAM,cAAc;AACpB,MAAM,QAAQ;AAEd,MAAA,eAAe,CAAC,MAAM,OAAO;AAEzB,SAAO,IAAI,MAAM,IAAI;AACrB,OAAK,IAAI,MAAM,EAAE;AAEjB,MAAI,KAAK,MAAK,IAAK,GAAG;AAClB,WAAO,IAAI,IAAI,MAAM,KAAK,MAAK,GAAI,KAAK;AAAA,EAC5C;AACA,QAAM,SAAS,IAAI,GAAG,KAAK,IAAG,CAAE;AAChC,QAAM,OAAO,IAAI,GAAG,GAAG,IAAG,CAAE;AAG5B,QAAM,SACF,UAAU,cACJ,SACA,SAAS,KAAK,IAAI,cAAc,QAAQ,KAAK;AACvD,QAAM,OACF,QAAQ,cAAc,OAAO,OAAO,KAAK,IAAI,cAAc,MAAM,KAAK;AAG1E,QAAM,SAAS,KAAK,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,QAAQ,IAAI;AAE3D,QAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,QAAQ,IAAI;AAE1D,QAAM,IACF,KAAK,IAAI,OAAO,MAAM,IAAI,OACpB,IACA,SAAS,OACP,SAAS,UACT,QAAQ;AAEpB,QAAM,QAAQ,KAAK,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,WAAW,IAAI;AAEnE,SAAO,QAAQ;AACnB;AAEA,SAAS,IAAI,GAAG,GAAG,GAAG;AAClB,SACI,YAAY,KAAK,IAAI,IAAI,KAAK,GAAG,IACjC,YAAY,KAAK,IAAI,IAAI,KAAK,GAAG,IACjC,WAAW,KAAK,IAAI,IAAI,KAAK,GAAG;AAExC;;","x_google_ignoreList":[0]}