readability_js 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1607) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/CHANGELOG.md +2 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +21 -0
  8. data/README.md +119 -0
  9. data/Rakefile +30 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/cli/pry.rb +5 -0
  13. data/lib/custom_errors/error.rb +4 -0
  14. data/lib/readability_js/node/node_modules/.bin/tldts +1 -0
  15. data/lib/readability_js/node/node_modules/.yarn-integrity +67 -0
  16. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/LICENSE +21 -0
  17. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/README.md +316 -0
  18. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js +220 -0
  19. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js.map +1 -0
  20. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs +5666 -0
  21. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs.map +1 -0
  22. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/cjs/index.d.cts +109 -0
  23. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/index.d.ts +17 -0
  24. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/index.js +27 -0
  25. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/index.js.map +1 -0
  26. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.d.ts +44 -0
  27. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js +82 -0
  28. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js.map +1 -0
  29. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/color.d.ts +537 -0
  30. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js +2833 -0
  31. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js.map +1 -0
  32. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/common.d.ts +21 -0
  33. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js +7 -0
  34. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js.map +1 -0
  35. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.d.ts +43 -0
  36. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js +101 -0
  37. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js.map +1 -0
  38. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.d.ts +99 -0
  39. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js +361 -0
  40. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js.map +1 -0
  41. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.d.ts +89 -0
  42. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js +860 -0
  43. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js.map +1 -0
  44. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.d.ts +79 -0
  45. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js +261 -0
  46. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js.map +1 -0
  47. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.d.ts +31 -0
  48. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js +195 -0
  49. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js.map +1 -0
  50. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.d.ts +29 -0
  51. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js +507 -0
  52. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js.map +1 -0
  53. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.d.ts +52 -0
  54. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js +350 -0
  55. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js.map +1 -0
  56. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/typedef.d.ts +80 -0
  57. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/util.d.ts +45 -0
  58. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js +279 -0
  59. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js.map +1 -0
  60. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/package.json +82 -0
  61. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/index.ts +24 -0
  62. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/cache.ts +114 -0
  63. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/color.ts +3511 -0
  64. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/common.ts +31 -0
  65. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/constant.ts +68 -0
  66. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/convert.ts +469 -0
  67. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/css-calc.ts +965 -0
  68. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/css-gradient.ts +384 -0
  69. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/css-var.ts +250 -0
  70. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/relative-color.ts +603 -0
  71. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/resolve.ts +443 -0
  72. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/typedef.ts +88 -0
  73. data/lib/readability_js/node/node_modules/@asamuzakjp/css-color/src/js/util.ts +336 -0
  74. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/LICENSE +21 -0
  75. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/README.md +324 -0
  76. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.cjs +4613 -0
  77. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.cjs.map +1 -0
  78. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.d.cts +16 -0
  79. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/package.json +83 -0
  80. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/src/index.js +353 -0
  81. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/src/js/constant.js +129 -0
  82. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/src/js/finder.js +3108 -0
  83. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/src/js/matcher.js +587 -0
  84. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/src/js/parser.js +431 -0
  85. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/src/js/utility.js +1107 -0
  86. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/types/index.d.ts +14 -0
  87. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/types/js/constant.d.ts +79 -0
  88. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/types/js/finder.d.ts +64 -0
  89. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/types/js/matcher.d.ts +16 -0
  90. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/types/js/parser.d.ts +14 -0
  91. data/lib/readability_js/node/node_modules/@asamuzakjp/dom-selector/types/js/utility.d.ts +30 -0
  92. data/lib/readability_js/node/node_modules/@asamuzakjp/nwsapi/LICENSE +22 -0
  93. data/lib/readability_js/node/node_modules/@asamuzakjp/nwsapi/README.md +132 -0
  94. data/lib/readability_js/node/node_modules/@asamuzakjp/nwsapi/package.json +43 -0
  95. data/lib/readability_js/node/node_modules/@asamuzakjp/nwsapi/src/nwsapi.js +1855 -0
  96. data/lib/readability_js/node/node_modules/@csstools/color-helpers/CHANGELOG.md +10 -0
  97. data/lib/readability_js/node/node_modules/@csstools/color-helpers/LICENSE.md +18 -0
  98. data/lib/readability_js/node/node_modules/@csstools/color-helpers/README.md +32 -0
  99. data/lib/readability_js/node/node_modules/@csstools/color-helpers/dist/index.cjs +263 -0
  100. data/lib/readability_js/node/node_modules/@csstools/color-helpers/dist/index.d.ts +429 -0
  101. data/lib/readability_js/node/node_modules/@csstools/color-helpers/dist/index.mjs +263 -0
  102. data/lib/readability_js/node/node_modules/@csstools/color-helpers/package.json +62 -0
  103. data/lib/readability_js/node/node_modules/@csstools/css-calc/CHANGELOG.md +10 -0
  104. data/lib/readability_js/node/node_modules/@csstools/css-calc/LICENSE.md +20 -0
  105. data/lib/readability_js/node/node_modules/@csstools/css-calc/README.md +132 -0
  106. data/lib/readability_js/node/node_modules/@csstools/css-calc/dist/index.cjs +1 -0
  107. data/lib/readability_js/node/node_modules/@csstools/css-calc/dist/index.d.ts +71 -0
  108. data/lib/readability_js/node/node_modules/@csstools/css-calc/dist/index.mjs +1 -0
  109. data/lib/readability_js/node/node_modules/@csstools/css-calc/package.json +66 -0
  110. data/lib/readability_js/node/node_modules/@csstools/css-color-parser/CHANGELOG.md +13 -0
  111. data/lib/readability_js/node/node_modules/@csstools/css-color-parser/LICENSE.md +20 -0
  112. data/lib/readability_js/node/node_modules/@csstools/css-color-parser/README.md +37 -0
  113. data/lib/readability_js/node/node_modules/@csstools/css-color-parser/dist/index.cjs +1 -0
  114. data/lib/readability_js/node/node_modules/@csstools/css-color-parser/dist/index.d.ts +168 -0
  115. data/lib/readability_js/node/node_modules/@csstools/css-color-parser/dist/index.mjs +1 -0
  116. data/lib/readability_js/node/node_modules/@csstools/css-color-parser/package.json +71 -0
  117. data/lib/readability_js/node/node_modules/@csstools/css-parser-algorithms/CHANGELOG.md +9 -0
  118. data/lib/readability_js/node/node_modules/@csstools/css-parser-algorithms/LICENSE.md +20 -0
  119. data/lib/readability_js/node/node_modules/@csstools/css-parser-algorithms/README.md +119 -0
  120. data/lib/readability_js/node/node_modules/@csstools/css-parser-algorithms/dist/index.cjs +1 -0
  121. data/lib/readability_js/node/node_modules/@csstools/css-parser-algorithms/dist/index.d.ts +604 -0
  122. data/lib/readability_js/node/node_modules/@csstools/css-parser-algorithms/dist/index.mjs +1 -0
  123. data/lib/readability_js/node/node_modules/@csstools/css-parser-algorithms/package.json +65 -0
  124. data/lib/readability_js/node/node_modules/@csstools/css-syntax-patches-for-csstree/CHANGELOG.md +9 -0
  125. data/lib/readability_js/node/node_modules/@csstools/css-syntax-patches-for-csstree/LICENSE.md +18 -0
  126. data/lib/readability_js/node/node_modules/@csstools/css-syntax-patches-for-csstree/README.md +43 -0
  127. data/lib/readability_js/node/node_modules/@csstools/css-syntax-patches-for-csstree/dist/index.d.ts +5 -0
  128. data/lib/readability_js/node/node_modules/@csstools/css-syntax-patches-for-csstree/dist/index.json +765 -0
  129. data/lib/readability_js/node/node_modules/@csstools/css-syntax-patches-for-csstree/package.json +54 -0
  130. data/lib/readability_js/node/node_modules/@csstools/css-tokenizer/CHANGELOG.md +9 -0
  131. data/lib/readability_js/node/node_modules/@csstools/css-tokenizer/LICENSE.md +20 -0
  132. data/lib/readability_js/node/node_modules/@csstools/css-tokenizer/README.md +111 -0
  133. data/lib/readability_js/node/node_modules/@csstools/css-tokenizer/dist/index.cjs +1 -0
  134. data/lib/readability_js/node/node_modules/@csstools/css-tokenizer/dist/index.d.ts +593 -0
  135. data/lib/readability_js/node/node_modules/@csstools/css-tokenizer/dist/index.mjs +1 -0
  136. data/lib/readability_js/node/node_modules/@csstools/css-tokenizer/package.json +62 -0
  137. data/lib/readability_js/node/node_modules/@mozilla/readability/.prettierrc.js +13 -0
  138. data/lib/readability_js/node/node_modules/@mozilla/readability/CHANGELOG.md +104 -0
  139. data/lib/readability_js/node/node_modules/@mozilla/readability/CODE_OF_CONDUCT.md +15 -0
  140. data/lib/readability_js/node/node_modules/@mozilla/readability/CONTRIBUTING.md +78 -0
  141. data/lib/readability_js/node/node_modules/@mozilla/readability/JSDOMParser.js +1278 -0
  142. data/lib/readability_js/node/node_modules/@mozilla/readability/LICENSE.md +13 -0
  143. data/lib/readability_js/node/node_modules/@mozilla/readability/README.md +129 -0
  144. data/lib/readability_js/node/node_modules/@mozilla/readability/Readability-readerable.js +122 -0
  145. data/lib/readability_js/node/node_modules/@mozilla/readability/Readability.js +2786 -0
  146. data/lib/readability_js/node/node_modules/@mozilla/readability/SECURITY.md +8 -0
  147. data/lib/readability_js/node/node_modules/@mozilla/readability/eslint.config.mjs +55 -0
  148. data/lib/readability_js/node/node_modules/@mozilla/readability/index.d.ts +64 -0
  149. data/lib/readability_js/node/node_modules/@mozilla/readability/index.js +8 -0
  150. data/lib/readability_js/node/node_modules/@mozilla/readability/package.json +41 -0
  151. data/lib/readability_js/node/node_modules/agent-base/LICENSE +22 -0
  152. data/lib/readability_js/node/node_modules/agent-base/README.md +69 -0
  153. data/lib/readability_js/node/node_modules/agent-base/dist/helpers.d.ts +15 -0
  154. data/lib/readability_js/node/node_modules/agent-base/dist/helpers.d.ts.map +1 -0
  155. data/lib/readability_js/node/node_modules/agent-base/dist/helpers.js +66 -0
  156. data/lib/readability_js/node/node_modules/agent-base/dist/helpers.js.map +1 -0
  157. data/lib/readability_js/node/node_modules/agent-base/dist/index.d.ts +41 -0
  158. data/lib/readability_js/node/node_modules/agent-base/dist/index.d.ts.map +1 -0
  159. data/lib/readability_js/node/node_modules/agent-base/dist/index.js +178 -0
  160. data/lib/readability_js/node/node_modules/agent-base/dist/index.js.map +1 -0
  161. data/lib/readability_js/node/node_modules/agent-base/package.json +46 -0
  162. data/lib/readability_js/node/node_modules/bidi-js/LICENSE.txt +22 -0
  163. data/lib/readability_js/node/node_modules/bidi-js/README.md +133 -0
  164. data/lib/readability_js/node/node_modules/bidi-js/dist/bidi.js +1010 -0
  165. data/lib/readability_js/node/node_modules/bidi-js/dist/bidi.min.js +1 -0
  166. data/lib/readability_js/node/node_modules/bidi-js/dist/bidi.min.mjs +1 -0
  167. data/lib/readability_js/node/node_modules/bidi-js/dist/bidi.mjs +1002 -0
  168. data/lib/readability_js/node/node_modules/bidi-js/package.json +39 -0
  169. data/lib/readability_js/node/node_modules/bidi-js/src/brackets.js +30 -0
  170. data/lib/readability_js/node/node_modules/bidi-js/src/charTypes.js +66 -0
  171. data/lib/readability_js/node/node_modules/bidi-js/src/data/bidiBrackets.data.js +5 -0
  172. data/lib/readability_js/node/node_modules/bidi-js/src/data/bidiCharTypes.data.js +25 -0
  173. data/lib/readability_js/node/node_modules/bidi-js/src/data/bidiMirroring.data.js +2 -0
  174. data/lib/readability_js/node/node_modules/bidi-js/src/embeddingLevels.js +690 -0
  175. data/lib/readability_js/node/node_modules/bidi-js/src/index.js +5 -0
  176. data/lib/readability_js/node/node_modules/bidi-js/src/mirroring.js +48 -0
  177. data/lib/readability_js/node/node_modules/bidi-js/src/reordering.js +99 -0
  178. data/lib/readability_js/node/node_modules/bidi-js/src/util/parseCharacterMap.js +30 -0
  179. data/lib/readability_js/node/node_modules/css-tree/LICENSE +19 -0
  180. data/lib/readability_js/node/node_modules/css-tree/README.md +192 -0
  181. data/lib/readability_js/node/node_modules/css-tree/cjs/convertor/create.cjs +32 -0
  182. data/lib/readability_js/node/node_modules/css-tree/cjs/convertor/index.cjs +8 -0
  183. data/lib/readability_js/node/node_modules/css-tree/cjs/data-patch.cjs +7 -0
  184. data/lib/readability_js/node/node_modules/css-tree/cjs/data.cjs +120 -0
  185. data/lib/readability_js/node/node_modules/css-tree/cjs/definition-syntax/SyntaxError.cjs +16 -0
  186. data/lib/readability_js/node/node_modules/css-tree/cjs/definition-syntax/generate.cjs +139 -0
  187. data/lib/readability_js/node/node_modules/css-tree/cjs/definition-syntax/index.cjs +13 -0
  188. data/lib/readability_js/node/node_modules/css-tree/cjs/definition-syntax/parse.cjs +556 -0
  189. data/lib/readability_js/node/node_modules/css-tree/cjs/definition-syntax/scanner.cjs +113 -0
  190. data/lib/readability_js/node/node_modules/css-tree/cjs/definition-syntax/tokenizer.cjs +59 -0
  191. data/lib/readability_js/node/node_modules/css-tree/cjs/definition-syntax/walk.cjs +57 -0
  192. data/lib/readability_js/node/node_modules/css-tree/cjs/generator/create.cjs +102 -0
  193. data/lib/readability_js/node/node_modules/css-tree/cjs/generator/index.cjs +8 -0
  194. data/lib/readability_js/node/node_modules/css-tree/cjs/generator/sourceMap.cjs +96 -0
  195. data/lib/readability_js/node/node_modules/css-tree/cjs/generator/token-before.cjs +170 -0
  196. data/lib/readability_js/node/node_modules/css-tree/cjs/index.cjs +65 -0
  197. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/Lexer.cjs +517 -0
  198. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/error.cjs +128 -0
  199. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/generic-an-plus-b.cjs +235 -0
  200. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/generic-const.cjs +12 -0
  201. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/generic-urange.cjs +149 -0
  202. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/generic.cjs +589 -0
  203. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/index.cjs +7 -0
  204. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/match-graph.cjs +530 -0
  205. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/match.cjs +632 -0
  206. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/prepare-tokens.cjs +54 -0
  207. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/search.cjs +65 -0
  208. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/structure.cjs +173 -0
  209. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/trace.cjs +73 -0
  210. data/lib/readability_js/node/node_modules/css-tree/cjs/lexer/units.cjs +38 -0
  211. data/lib/readability_js/node/node_modules/css-tree/cjs/parser/SyntaxError.cjs +74 -0
  212. data/lib/readability_js/node/node_modules/css-tree/cjs/parser/create.cjs +340 -0
  213. data/lib/readability_js/node/node_modules/css-tree/cjs/parser/index.cjs +8 -0
  214. data/lib/readability_js/node/node_modules/css-tree/cjs/parser/parse-selector.cjs +8 -0
  215. data/lib/readability_js/node/node_modules/css-tree/cjs/parser/sequence.cjs +47 -0
  216. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/container.cjs +32 -0
  217. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/font-face.cjs +12 -0
  218. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/import.cjs +101 -0
  219. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/index.cjs +27 -0
  220. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/layer.cjs +16 -0
  221. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/media.cjs +16 -0
  222. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/nest.cjs +16 -0
  223. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/page.cjs +16 -0
  224. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/scope.cjs +16 -0
  225. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/starting-style.cjs +12 -0
  226. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/atrule/supports.cjs +16 -0
  227. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/config/generator.cjs +9 -0
  228. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/config/lexer.cjs +14 -0
  229. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/config/mix.cjs +127 -0
  230. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/config/parser-selector.cjs +19 -0
  231. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/config/parser.cjs +49 -0
  232. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/config/walker.cjs +9 -0
  233. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/create.cjs +58 -0
  234. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/function/expression.cjs +11 -0
  235. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/function/var.cjs +43 -0
  236. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/index.cjs +14 -0
  237. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/AnPlusB.cjs +293 -0
  238. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Atrule.cjs +103 -0
  239. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/AtrulePrelude.cjs +52 -0
  240. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/AttributeSelector.cjs +148 -0
  241. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Block.cjs +96 -0
  242. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Brackets.cjs +38 -0
  243. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/CDC.cjs +26 -0
  244. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/CDO.cjs +26 -0
  245. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/ClassSelector.cjs +31 -0
  246. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Combinator.cjs +61 -0
  247. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Comment.cjs +40 -0
  248. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Condition.cjs +120 -0
  249. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Declaration.cjs +166 -0
  250. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/DeclarationList.cjs +62 -0
  251. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Dimension.cjs +30 -0
  252. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Feature.cjs +101 -0
  253. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/FeatureFunction.cjs +67 -0
  254. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/FeatureRange.cjs +133 -0
  255. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Function.cjs +45 -0
  256. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/GeneralEnclosed.cjs +68 -0
  257. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Hash.cjs +30 -0
  258. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/IdSelector.cjs +33 -0
  259. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Identifier.cjs +25 -0
  260. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Layer.cjs +35 -0
  261. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/LayerList.cjs +43 -0
  262. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/LayerName.cjs +34 -0
  263. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/LayerNameList.cjs +42 -0
  264. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/MediaCondition.cjs +70 -0
  265. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/MediaFeature.cjs +76 -0
  266. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/MediaFeatureRange.cjs +11 -0
  267. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs +100 -0
  268. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/MediaQueryList.cjs +41 -0
  269. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/NestingSelector.cjs +29 -0
  270. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Nth.cjs +54 -0
  271. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Number.cjs +25 -0
  272. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Operator.cjs +28 -0
  273. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Parentheses.cjs +38 -0
  274. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Percentage.cjs +25 -0
  275. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/PseudoClassSelector.cjs +67 -0
  276. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/PseudoElementSelector.cjs +69 -0
  277. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Ratio.cjs +71 -0
  278. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Raw.cjs +48 -0
  279. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Rule.cjs +58 -0
  280. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Scope.cjs +69 -0
  281. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Selector.cjs +38 -0
  282. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/SelectorList.cjs +43 -0
  283. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/String.cjs +26 -0
  284. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/StyleSheet.cjs +83 -0
  285. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/SupportsDeclaration.cjs +38 -0
  286. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/SupportsFeature.cjs +69 -0
  287. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/TypeSelector.cjs +59 -0
  288. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/UnicodeRange.cjs +158 -0
  289. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Url.cjs +54 -0
  290. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/Value.cjs +26 -0
  291. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/WhiteSpace.cjs +34 -0
  292. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/common/feature-range.cjs +112 -0
  293. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/common/feature.cjs +76 -0
  294. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/index-generate.cjs +103 -0
  295. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/index-parse-selector.cjs +39 -0
  296. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/index-parse.cjs +103 -0
  297. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/node/index.cjs +103 -0
  298. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/pseudo/index.cjs +60 -0
  299. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/pseudo/lang.cjs +37 -0
  300. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/scope/atrulePrelude.cjs +9 -0
  301. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/scope/default.cjs +76 -0
  302. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/scope/index.cjs +11 -0
  303. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/scope/selector.cjs +88 -0
  304. data/lib/readability_js/node/node_modules/css-tree/cjs/syntax/scope/value.cjs +29 -0
  305. data/lib/readability_js/node/node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs +91 -0
  306. data/lib/readability_js/node/node_modules/css-tree/cjs/tokenizer/TokenStream.cjs +308 -0
  307. data/lib/readability_js/node/node_modules/css-tree/cjs/tokenizer/adopt-buffer.cjs +13 -0
  308. data/lib/readability_js/node/node_modules/css-tree/cjs/tokenizer/char-code-definitions.cjs +236 -0
  309. data/lib/readability_js/node/node_modules/css-tree/cjs/tokenizer/index.cjs +554 -0
  310. data/lib/readability_js/node/node_modules/css-tree/cjs/tokenizer/names.cjs +32 -0
  311. data/lib/readability_js/node/node_modules/css-tree/cjs/tokenizer/types.cjs +57 -0
  312. data/lib/readability_js/node/node_modules/css-tree/cjs/tokenizer/utils.cjs +261 -0
  313. data/lib/readability_js/node/node_modules/css-tree/cjs/utils/List.cjs +473 -0
  314. data/lib/readability_js/node/node_modules/css-tree/cjs/utils/clone.cjs +25 -0
  315. data/lib/readability_js/node/node_modules/css-tree/cjs/utils/create-custom-error.cjs +18 -0
  316. data/lib/readability_js/node/node_modules/css-tree/cjs/utils/ident.cjs +102 -0
  317. data/lib/readability_js/node/node_modules/css-tree/cjs/utils/index.cjs +20 -0
  318. data/lib/readability_js/node/node_modules/css-tree/cjs/utils/names.cjs +113 -0
  319. data/lib/readability_js/node/node_modules/css-tree/cjs/utils/string.cjs +99 -0
  320. data/lib/readability_js/node/node_modules/css-tree/cjs/utils/url.cjs +108 -0
  321. data/lib/readability_js/node/node_modules/css-tree/cjs/version.cjs +5 -0
  322. data/lib/readability_js/node/node_modules/css-tree/cjs/walker/create.cjs +291 -0
  323. data/lib/readability_js/node/node_modules/css-tree/cjs/walker/index.cjs +8 -0
  324. data/lib/readability_js/node/node_modules/css-tree/data/patch.json +982 -0
  325. data/lib/readability_js/node/node_modules/css-tree/dist/csstree.esm.js +12 -0
  326. data/lib/readability_js/node/node_modules/css-tree/dist/csstree.js +12 -0
  327. data/lib/readability_js/node/node_modules/css-tree/dist/data.cjs +1308 -0
  328. data/lib/readability_js/node/node_modules/css-tree/dist/data.js +1308 -0
  329. data/lib/readability_js/node/node_modules/css-tree/dist/version.cjs +1 -0
  330. data/lib/readability_js/node/node_modules/css-tree/dist/version.js +1 -0
  331. data/lib/readability_js/node/node_modules/css-tree/lib/convertor/create.js +28 -0
  332. data/lib/readability_js/node/node_modules/css-tree/lib/convertor/index.js +4 -0
  333. data/lib/readability_js/node/node_modules/css-tree/lib/data-patch.js +6 -0
  334. data/lib/readability_js/node/node_modules/css-tree/lib/data.js +118 -0
  335. data/lib/readability_js/node/node_modules/css-tree/lib/definition-syntax/SyntaxError.js +12 -0
  336. data/lib/readability_js/node/node_modules/css-tree/lib/definition-syntax/generate.js +135 -0
  337. data/lib/readability_js/node/node_modules/css-tree/lib/definition-syntax/index.js +4 -0
  338. data/lib/readability_js/node/node_modules/css-tree/lib/definition-syntax/parse.js +552 -0
  339. data/lib/readability_js/node/node_modules/css-tree/lib/definition-syntax/scanner.js +109 -0
  340. data/lib/readability_js/node/node_modules/css-tree/lib/definition-syntax/walk.js +53 -0
  341. data/lib/readability_js/node/node_modules/css-tree/lib/generator/create.js +97 -0
  342. data/lib/readability_js/node/node_modules/css-tree/lib/generator/index.js +4 -0
  343. data/lib/readability_js/node/node_modules/css-tree/lib/generator/sourceMap.js +92 -0
  344. data/lib/readability_js/node/node_modules/css-tree/lib/generator/token-before.js +182 -0
  345. data/lib/readability_js/node/node_modules/css-tree/lib/index.js +30 -0
  346. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/Lexer.js +511 -0
  347. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/error.js +123 -0
  348. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/generic-an-plus-b.js +238 -0
  349. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/generic-const.js +8 -0
  350. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/generic-urange.js +151 -0
  351. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/generic.js +622 -0
  352. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/index.js +1 -0
  353. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/match-graph.js +527 -0
  354. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/match.js +630 -0
  355. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/prepare-tokens.js +50 -0
  356. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/search.js +61 -0
  357. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/structure.js +169 -0
  358. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/trace.js +66 -0
  359. data/lib/readability_js/node/node_modules/css-tree/lib/lexer/units.js +27 -0
  360. data/lib/readability_js/node/node_modules/css-tree/lib/parser/SyntaxError.js +70 -0
  361. data/lib/readability_js/node/node_modules/css-tree/lib/parser/create.js +350 -0
  362. data/lib/readability_js/node/node_modules/css-tree/lib/parser/index.js +4 -0
  363. data/lib/readability_js/node/node_modules/css-tree/lib/parser/parse-selector.js +4 -0
  364. data/lib/readability_js/node/node_modules/css-tree/lib/parser/sequence.js +43 -0
  365. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/container.js +28 -0
  366. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/font-face.js +8 -0
  367. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/import.js +104 -0
  368. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/index.js +23 -0
  369. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/layer.js +12 -0
  370. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/media.js +12 -0
  371. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/nest.js +12 -0
  372. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/page.js +12 -0
  373. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/scope.js +12 -0
  374. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/starting-style.js +8 -0
  375. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/atrule/supports.js +12 -0
  376. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/config/generator.js +5 -0
  377. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/config/lexer.js +10 -0
  378. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/config/mix.js +123 -0
  379. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/config/parser-selector.js +15 -0
  380. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/config/parser.js +45 -0
  381. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/config/walker.js +5 -0
  382. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/create.js +55 -0
  383. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/function/expression.js +7 -0
  384. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/function/var.js +39 -0
  385. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/index.js +10 -0
  386. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/AnPlusB.js +292 -0
  387. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Atrule.js +100 -0
  388. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/AtrulePrelude.js +47 -0
  389. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/AttributeSelector.js +147 -0
  390. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Block.js +95 -0
  391. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Brackets.js +35 -0
  392. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/CDC.js +19 -0
  393. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/CDO.js +19 -0
  394. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/ClassSelector.js +24 -0
  395. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Combinator.js +54 -0
  396. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Comment.js +33 -0
  397. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Condition.js +123 -0
  398. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Declaration.js +165 -0
  399. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/DeclarationList.js +62 -0
  400. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Dimension.js +23 -0
  401. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Feature.js +103 -0
  402. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/FeatureFunction.js +63 -0
  403. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/FeatureRange.js +133 -0
  404. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Function.js +41 -0
  405. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/GeneralEnclosed.js +66 -0
  406. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Hash.js +23 -0
  407. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/IdSelector.js +26 -0
  408. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Identifier.js +18 -0
  409. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Layer.js +28 -0
  410. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/LayerList.js +36 -0
  411. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/MediaQuery.js +102 -0
  412. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/MediaQueryList.js +34 -0
  413. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/NestingSelector.js +22 -0
  414. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Nth.js +47 -0
  415. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Number.js +18 -0
  416. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Operator.js +21 -0
  417. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Parentheses.js +34 -0
  418. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Percentage.js +18 -0
  419. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js +65 -0
  420. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js +66 -0
  421. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Ratio.js +68 -0
  422. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Raw.js +41 -0
  423. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Rule.js +51 -0
  424. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Scope.js +66 -0
  425. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Selector.js +31 -0
  426. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/SelectorList.js +35 -0
  427. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/String.js +19 -0
  428. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/StyleSheet.js +82 -0
  429. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/SupportsDeclaration.js +34 -0
  430. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/TypeSelector.js +52 -0
  431. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/UnicodeRange.js +156 -0
  432. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Url.js +52 -0
  433. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/Value.js +19 -0
  434. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/WhiteSpace.js +27 -0
  435. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/index-generate.js +49 -0
  436. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/index-parse-selector.js +17 -0
  437. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/index-parse.js +49 -0
  438. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/node/index.js +49 -0
  439. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/pseudo/index.js +56 -0
  440. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/pseudo/lang.js +33 -0
  441. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js +5 -0
  442. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/scope/default.js +85 -0
  443. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/scope/index.js +3 -0
  444. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/scope/selector.js +94 -0
  445. data/lib/readability_js/node/node_modules/css-tree/lib/syntax/scope/value.js +25 -0
  446. data/lib/readability_js/node/node_modules/css-tree/lib/tokenizer/OffsetToLocation.js +87 -0
  447. data/lib/readability_js/node/node_modules/css-tree/lib/tokenizer/TokenStream.js +316 -0
  448. data/lib/readability_js/node/node_modules/css-tree/lib/tokenizer/adopt-buffer.js +9 -0
  449. data/lib/readability_js/node/node_modules/css-tree/lib/tokenizer/char-code-definitions.js +212 -0
  450. data/lib/readability_js/node/node_modules/css-tree/lib/tokenizer/index.js +513 -0
  451. data/lib/readability_js/node/node_modules/css-tree/lib/tokenizer/names.js +28 -0
  452. data/lib/readability_js/node/node_modules/css-tree/lib/tokenizer/types.js +28 -0
  453. data/lib/readability_js/node/node_modules/css-tree/lib/tokenizer/utils.js +254 -0
  454. data/lib/readability_js/node/node_modules/css-tree/lib/utils/List.js +469 -0
  455. data/lib/readability_js/node/node_modules/css-tree/lib/utils/clone.js +21 -0
  456. data/lib/readability_js/node/node_modules/css-tree/lib/utils/create-custom-error.js +14 -0
  457. data/lib/readability_js/node/node_modules/css-tree/lib/utils/ident.js +101 -0
  458. data/lib/readability_js/node/node_modules/css-tree/lib/utils/index.js +6 -0
  459. data/lib/readability_js/node/node_modules/css-tree/lib/utils/names.js +106 -0
  460. data/lib/readability_js/node/node_modules/css-tree/lib/utils/string.js +99 -0
  461. data/lib/readability_js/node/node_modules/css-tree/lib/utils/url.js +108 -0
  462. data/lib/readability_js/node/node_modules/css-tree/lib/version.js +5 -0
  463. data/lib/readability_js/node/node_modules/css-tree/lib/walker/create.js +287 -0
  464. data/lib/readability_js/node/node_modules/css-tree/lib/walker/index.js +4 -0
  465. data/lib/readability_js/node/node_modules/css-tree/package.json +125 -0
  466. data/lib/readability_js/node/node_modules/cssstyle/LICENSE +20 -0
  467. data/lib/readability_js/node/node_modules/cssstyle/README.md +11 -0
  468. data/lib/readability_js/node/node_modules/cssstyle/lib/CSSStyleDeclaration.js +636 -0
  469. data/lib/readability_js/node/node_modules/cssstyle/lib/generated/allProperties.js +653 -0
  470. data/lib/readability_js/node/node_modules/cssstyle/lib/generated/implementedProperties.js +2222 -0
  471. data/lib/readability_js/node/node_modules/cssstyle/lib/generated/properties.js +6951 -0
  472. data/lib/readability_js/node/node_modules/cssstyle/lib/normalize.js +1417 -0
  473. data/lib/readability_js/node/node_modules/cssstyle/lib/parsers.js +535 -0
  474. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/background.js +396 -0
  475. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/backgroundAttachment.js +64 -0
  476. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/backgroundClip.js +64 -0
  477. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/backgroundColor.js +55 -0
  478. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/backgroundImage.js +78 -0
  479. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/backgroundOrigin.js +64 -0
  480. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/backgroundPosition.js +193 -0
  481. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/backgroundRepeat.js +89 -0
  482. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/backgroundSize.js +120 -0
  483. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/border.js +164 -0
  484. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderBottom.js +156 -0
  485. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderBottomColor.js +60 -0
  486. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderBottomStyle.js +59 -0
  487. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderBottomWidth.js +69 -0
  488. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderCollapse.js +50 -0
  489. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderColor.js +116 -0
  490. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderLeft.js +156 -0
  491. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderLeftColor.js +60 -0
  492. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderLeftStyle.js +59 -0
  493. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderLeftWidth.js +69 -0
  494. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderRight.js +156 -0
  495. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderRightColor.js +60 -0
  496. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderRightStyle.js +59 -0
  497. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderRightWidth.js +69 -0
  498. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderSpacing.js +62 -0
  499. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderStyle.js +116 -0
  500. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderTop.js +156 -0
  501. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderTopColor.js +60 -0
  502. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderTopStyle.js +59 -0
  503. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderTopWidth.js +69 -0
  504. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/borderWidth.js +129 -0
  505. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/bottom.js +58 -0
  506. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/clear.js +50 -0
  507. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/clip.js +68 -0
  508. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/color.js +51 -0
  509. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/display.js +207 -0
  510. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/flex.js +176 -0
  511. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/flexBasis.js +62 -0
  512. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/flexGrow.js +61 -0
  513. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/flexShrink.js +61 -0
  514. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/float.js +50 -0
  515. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/floodColor.js +51 -0
  516. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/font.js +289 -0
  517. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/fontFamily.js +94 -0
  518. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/fontSize.js +64 -0
  519. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/fontStyle.js +63 -0
  520. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/fontVariant.js +73 -0
  521. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/fontWeight.js +68 -0
  522. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/height.js +58 -0
  523. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/left.js +58 -0
  524. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/lightingColor.js +51 -0
  525. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/lineHeight.js +66 -0
  526. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/margin.js +95 -0
  527. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/marginBottom.js +64 -0
  528. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/marginLeft.js +64 -0
  529. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/marginRight.js +64 -0
  530. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/marginTop.js +64 -0
  531. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/opacity.js +59 -0
  532. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/outlineColor.js +51 -0
  533. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/padding.js +93 -0
  534. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/paddingBottom.js +65 -0
  535. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/paddingLeft.js +65 -0
  536. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/paddingRight.js +65 -0
  537. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/paddingTop.js +65 -0
  538. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/right.js +58 -0
  539. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/stopColor.js +51 -0
  540. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/top.js +58 -0
  541. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitBorderAfterColor.js +51 -0
  542. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitBorderBeforeColor.js +51 -0
  543. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitBorderEndColor.js +51 -0
  544. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitBorderStartColor.js +51 -0
  545. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitColumnRuleColor.js +51 -0
  546. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitTapHighlightColor.js +51 -0
  547. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitTextEmphasisColor.js +51 -0
  548. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitTextFillColor.js +51 -0
  549. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/webkitTextStrokeColor.js +51 -0
  550. data/lib/readability_js/node/node_modules/cssstyle/lib/properties/width.js +58 -0
  551. data/lib/readability_js/node/node_modules/cssstyle/lib/utils/allExtraProperties.js +155 -0
  552. data/lib/readability_js/node/node_modules/cssstyle/lib/utils/camelize.js +37 -0
  553. data/lib/readability_js/node/node_modules/cssstyle/lib/utils/propertyDescriptors.js +19 -0
  554. data/lib/readability_js/node/node_modules/cssstyle/lib/utils/strings.js +167 -0
  555. data/lib/readability_js/node/node_modules/cssstyle/package.json +74 -0
  556. data/lib/readability_js/node/node_modules/data-urls/LICENSE.txt +7 -0
  557. data/lib/readability_js/node/node_modules/data-urls/README.md +62 -0
  558. data/lib/readability_js/node/node_modules/data-urls/lib/parser.js +69 -0
  559. data/lib/readability_js/node/node_modules/data-urls/lib/utils.js +20 -0
  560. data/lib/readability_js/node/node_modules/data-urls/package.json +52 -0
  561. data/lib/readability_js/node/node_modules/debug/LICENSE +20 -0
  562. data/lib/readability_js/node/node_modules/debug/README.md +481 -0
  563. data/lib/readability_js/node/node_modules/debug/package.json +64 -0
  564. data/lib/readability_js/node/node_modules/debug/src/browser.js +272 -0
  565. data/lib/readability_js/node/node_modules/debug/src/common.js +292 -0
  566. data/lib/readability_js/node/node_modules/debug/src/index.js +10 -0
  567. data/lib/readability_js/node/node_modules/debug/src/node.js +263 -0
  568. data/lib/readability_js/node/node_modules/decimal.js/LICENCE.md +23 -0
  569. data/lib/readability_js/node/node_modules/decimal.js/README.md +246 -0
  570. data/lib/readability_js/node/node_modules/decimal.js/decimal.d.ts +301 -0
  571. data/lib/readability_js/node/node_modules/decimal.js/decimal.js +4951 -0
  572. data/lib/readability_js/node/node_modules/decimal.js/decimal.mjs +4914 -0
  573. data/lib/readability_js/node/node_modules/decimal.js/package.json +55 -0
  574. data/lib/readability_js/node/node_modules/entities/LICENSE +11 -0
  575. data/lib/readability_js/node/node_modules/entities/decode.d.ts +1 -0
  576. data/lib/readability_js/node/node_modules/entities/decode.js +3 -0
  577. data/lib/readability_js/node/node_modules/entities/dist/commonjs/decode-codepoint.d.ts +19 -0
  578. data/lib/readability_js/node/node_modules/entities/dist/commonjs/decode-codepoint.d.ts.map +1 -0
  579. data/lib/readability_js/node/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
  580. data/lib/readability_js/node/node_modules/entities/dist/commonjs/decode-codepoint.js.map +1 -0
  581. data/lib/readability_js/node/node_modules/entities/dist/commonjs/decode.d.ts +209 -0
  582. data/lib/readability_js/node/node_modules/entities/dist/commonjs/decode.d.ts.map +1 -0
  583. data/lib/readability_js/node/node_modules/entities/dist/commonjs/decode.js +511 -0
  584. data/lib/readability_js/node/node_modules/entities/dist/commonjs/decode.js.map +1 -0
  585. data/lib/readability_js/node/node_modules/entities/dist/commonjs/encode.d.ts +22 -0
  586. data/lib/readability_js/node/node_modules/entities/dist/commonjs/encode.d.ts.map +1 -0
  587. data/lib/readability_js/node/node_modules/entities/dist/commonjs/encode.js +73 -0
  588. data/lib/readability_js/node/node_modules/entities/dist/commonjs/encode.js.map +1 -0
  589. data/lib/readability_js/node/node_modules/entities/dist/commonjs/escape.d.ts +43 -0
  590. data/lib/readability_js/node/node_modules/entities/dist/commonjs/escape.d.ts.map +1 -0
  591. data/lib/readability_js/node/node_modules/entities/dist/commonjs/escape.js +121 -0
  592. data/lib/readability_js/node/node_modules/entities/dist/commonjs/escape.js.map +1 -0
  593. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts +2 -0
  594. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts.map +1 -0
  595. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/decode-data-html.js +10 -0
  596. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/decode-data-html.js.map +1 -0
  597. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts +2 -0
  598. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts.map +1 -0
  599. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +10 -0
  600. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map +1 -0
  601. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/encode-html.d.ts +8 -0
  602. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/encode-html.d.ts.map +1 -0
  603. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/encode-html.js +13 -0
  604. data/lib/readability_js/node/node_modules/entities/dist/commonjs/generated/encode-html.js.map +1 -0
  605. data/lib/readability_js/node/node_modules/entities/dist/commonjs/index.d.ts +96 -0
  606. data/lib/readability_js/node/node_modules/entities/dist/commonjs/index.d.ts.map +1 -0
  607. data/lib/readability_js/node/node_modules/entities/dist/commonjs/index.js +131 -0
  608. data/lib/readability_js/node/node_modules/entities/dist/commonjs/index.js.map +1 -0
  609. data/lib/readability_js/node/node_modules/entities/dist/commonjs/package.json +3 -0
  610. data/lib/readability_js/node/node_modules/entities/dist/esm/decode-codepoint.d.ts +19 -0
  611. data/lib/readability_js/node/node_modules/entities/dist/esm/decode-codepoint.d.ts.map +1 -0
  612. data/lib/readability_js/node/node_modules/entities/dist/esm/decode-codepoint.js +72 -0
  613. data/lib/readability_js/node/node_modules/entities/dist/esm/decode-codepoint.js.map +1 -0
  614. data/lib/readability_js/node/node_modules/entities/dist/esm/decode.d.ts +209 -0
  615. data/lib/readability_js/node/node_modules/entities/dist/esm/decode.d.ts.map +1 -0
  616. data/lib/readability_js/node/node_modules/entities/dist/esm/decode.js +497 -0
  617. data/lib/readability_js/node/node_modules/entities/dist/esm/decode.js.map +1 -0
  618. data/lib/readability_js/node/node_modules/entities/dist/esm/encode.d.ts +22 -0
  619. data/lib/readability_js/node/node_modules/entities/dist/esm/encode.d.ts.map +1 -0
  620. data/lib/readability_js/node/node_modules/entities/dist/esm/encode.js +69 -0
  621. data/lib/readability_js/node/node_modules/entities/dist/esm/encode.js.map +1 -0
  622. data/lib/readability_js/node/node_modules/entities/dist/esm/escape.d.ts +43 -0
  623. data/lib/readability_js/node/node_modules/entities/dist/esm/escape.d.ts.map +1 -0
  624. data/lib/readability_js/node/node_modules/entities/dist/esm/escape.js +117 -0
  625. data/lib/readability_js/node/node_modules/entities/dist/esm/escape.js.map +1 -0
  626. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/decode-data-html.d.ts +2 -0
  627. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/decode-data-html.d.ts.map +1 -0
  628. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/decode-data-html.js +7 -0
  629. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/decode-data-html.js.map +1 -0
  630. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts +2 -0
  631. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts.map +1 -0
  632. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/decode-data-xml.js +7 -0
  633. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/decode-data-xml.js.map +1 -0
  634. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/encode-html.d.ts +8 -0
  635. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/encode-html.d.ts.map +1 -0
  636. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/encode-html.js +10 -0
  637. data/lib/readability_js/node/node_modules/entities/dist/esm/generated/encode-html.js.map +1 -0
  638. data/lib/readability_js/node/node_modules/entities/dist/esm/index.d.ts +96 -0
  639. data/lib/readability_js/node/node_modules/entities/dist/esm/index.d.ts.map +1 -0
  640. data/lib/readability_js/node/node_modules/entities/dist/esm/index.js +107 -0
  641. data/lib/readability_js/node/node_modules/entities/dist/esm/index.js.map +1 -0
  642. data/lib/readability_js/node/node_modules/entities/dist/esm/package.json +3 -0
  643. data/lib/readability_js/node/node_modules/entities/escape.d.ts +1 -0
  644. data/lib/readability_js/node/node_modules/entities/escape.js +3 -0
  645. data/lib/readability_js/node/node_modules/entities/package.json +118 -0
  646. data/lib/readability_js/node/node_modules/entities/readme.md +122 -0
  647. data/lib/readability_js/node/node_modules/entities/src/decode-codepoint.ts +81 -0
  648. data/lib/readability_js/node/node_modules/entities/src/decode.spec.ts +320 -0
  649. data/lib/readability_js/node/node_modules/entities/src/decode.ts +620 -0
  650. data/lib/readability_js/node/node_modules/entities/src/encode.spec.ts +78 -0
  651. data/lib/readability_js/node/node_modules/entities/src/encode.ts +77 -0
  652. data/lib/readability_js/node/node_modules/entities/src/escape.spec.ts +14 -0
  653. data/lib/readability_js/node/node_modules/entities/src/escape.ts +148 -0
  654. data/lib/readability_js/node/node_modules/entities/src/generated/.eslintrc.json +10 -0
  655. data/lib/readability_js/node/node_modules/entities/src/generated/decode-data-html.ts +8 -0
  656. data/lib/readability_js/node/node_modules/entities/src/generated/decode-data-xml.ts +8 -0
  657. data/lib/readability_js/node/node_modules/entities/src/generated/encode-html.ts +17 -0
  658. data/lib/readability_js/node/node_modules/entities/src/index.spec.ts +125 -0
  659. data/lib/readability_js/node/node_modules/entities/src/index.ts +188 -0
  660. data/lib/readability_js/node/node_modules/html-encoding-sniffer/LICENSE.txt +7 -0
  661. data/lib/readability_js/node/node_modules/html-encoding-sniffer/README.md +40 -0
  662. data/lib/readability_js/node/node_modules/html-encoding-sniffer/lib/html-encoding-sniffer.js +295 -0
  663. data/lib/readability_js/node/node_modules/html-encoding-sniffer/package.json +30 -0
  664. data/lib/readability_js/node/node_modules/http-proxy-agent/LICENSE +22 -0
  665. data/lib/readability_js/node/node_modules/http-proxy-agent/README.md +44 -0
  666. data/lib/readability_js/node/node_modules/http-proxy-agent/dist/index.d.ts +44 -0
  667. data/lib/readability_js/node/node_modules/http-proxy-agent/dist/index.d.ts.map +1 -0
  668. data/lib/readability_js/node/node_modules/http-proxy-agent/dist/index.js +148 -0
  669. data/lib/readability_js/node/node_modules/http-proxy-agent/dist/index.js.map +1 -0
  670. data/lib/readability_js/node/node_modules/http-proxy-agent/package.json +47 -0
  671. data/lib/readability_js/node/node_modules/https-proxy-agent/LICENSE +22 -0
  672. data/lib/readability_js/node/node_modules/https-proxy-agent/README.md +70 -0
  673. data/lib/readability_js/node/node_modules/https-proxy-agent/dist/index.d.ts +47 -0
  674. data/lib/readability_js/node/node_modules/https-proxy-agent/dist/index.d.ts.map +1 -0
  675. data/lib/readability_js/node/node_modules/https-proxy-agent/dist/index.js +180 -0
  676. data/lib/readability_js/node/node_modules/https-proxy-agent/dist/index.js.map +1 -0
  677. data/lib/readability_js/node/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +15 -0
  678. data/lib/readability_js/node/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts.map +1 -0
  679. data/lib/readability_js/node/node_modules/https-proxy-agent/dist/parse-proxy-response.js +101 -0
  680. data/lib/readability_js/node/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +1 -0
  681. data/lib/readability_js/node/node_modules/https-proxy-agent/package.json +50 -0
  682. data/lib/readability_js/node/node_modules/iconv-lite/.github/dependabot.yml +11 -0
  683. data/lib/readability_js/node/node_modules/iconv-lite/.idea/codeStyles/Project.xml +47 -0
  684. data/lib/readability_js/node/node_modules/iconv-lite/.idea/codeStyles/codeStyleConfig.xml +5 -0
  685. data/lib/readability_js/node/node_modules/iconv-lite/.idea/iconv-lite.iml +12 -0
  686. data/lib/readability_js/node/node_modules/iconv-lite/.idea/inspectionProfiles/Project_Default.xml +6 -0
  687. data/lib/readability_js/node/node_modules/iconv-lite/.idea/modules.xml +8 -0
  688. data/lib/readability_js/node/node_modules/iconv-lite/.idea/vcs.xml +6 -0
  689. data/lib/readability_js/node/node_modules/iconv-lite/Changelog.md +212 -0
  690. data/lib/readability_js/node/node_modules/iconv-lite/LICENSE +21 -0
  691. data/lib/readability_js/node/node_modules/iconv-lite/README.md +130 -0
  692. data/lib/readability_js/node/node_modules/iconv-lite/encodings/dbcs-codec.js +597 -0
  693. data/lib/readability_js/node/node_modules/iconv-lite/encodings/dbcs-data.js +188 -0
  694. data/lib/readability_js/node/node_modules/iconv-lite/encodings/index.js +23 -0
  695. data/lib/readability_js/node/node_modules/iconv-lite/encodings/internal.js +198 -0
  696. data/lib/readability_js/node/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
  697. data/lib/readability_js/node/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
  698. data/lib/readability_js/node/node_modules/iconv-lite/encodings/sbcs-data.js +179 -0
  699. data/lib/readability_js/node/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
  700. data/lib/readability_js/node/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
  701. data/lib/readability_js/node/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
  702. data/lib/readability_js/node/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
  703. data/lib/readability_js/node/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
  704. data/lib/readability_js/node/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
  705. data/lib/readability_js/node/node_modules/iconv-lite/encodings/tables/gbk-added.json +56 -0
  706. data/lib/readability_js/node/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
  707. data/lib/readability_js/node/node_modules/iconv-lite/encodings/utf16.js +197 -0
  708. data/lib/readability_js/node/node_modules/iconv-lite/encodings/utf32.js +319 -0
  709. data/lib/readability_js/node/node_modules/iconv-lite/encodings/utf7.js +290 -0
  710. data/lib/readability_js/node/node_modules/iconv-lite/lib/bom-handling.js +52 -0
  711. data/lib/readability_js/node/node_modules/iconv-lite/lib/index.d.ts +41 -0
  712. data/lib/readability_js/node/node_modules/iconv-lite/lib/index.js +180 -0
  713. data/lib/readability_js/node/node_modules/iconv-lite/lib/streams.js +109 -0
  714. data/lib/readability_js/node/node_modules/iconv-lite/package.json +44 -0
  715. data/lib/readability_js/node/node_modules/is-potential-custom-element-name/LICENSE-MIT.txt +20 -0
  716. data/lib/readability_js/node/node_modules/is-potential-custom-element-name/README.md +40 -0
  717. data/lib/readability_js/node/node_modules/is-potential-custom-element-name/index.js +9 -0
  718. data/lib/readability_js/node/node_modules/is-potential-custom-element-name/package.json +35 -0
  719. data/lib/readability_js/node/node_modules/jsdom/LICENSE.txt +22 -0
  720. data/lib/readability_js/node/node_modules/jsdom/README.md +551 -0
  721. data/lib/readability_js/node/node_modules/jsdom/lib/api.js +335 -0
  722. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/Window.js +1022 -0
  723. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/default-stylesheet.css +415 -0
  724. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/js-globals.json +312 -0
  725. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/not-implemented.js +20 -0
  726. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/parser/html.js +208 -0
  727. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/parser/index.js +37 -0
  728. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/parser/xml.js +202 -0
  729. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/resources/async-resource-queue.js +114 -0
  730. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/resources/no-op-resource-loader.js +8 -0
  731. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/resources/per-document-resource-loader.js +98 -0
  732. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/resources/request-manager.js +33 -0
  733. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/resources/resource-loader.js +142 -0
  734. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/browser/resources/resource-queue.js +142 -0
  735. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/level2/style.js +57 -0
  736. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/level3/xpath.js +1875 -0
  737. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/aborting/AbortController-impl.js +17 -0
  738. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/aborting/AbortSignal-impl.js +131 -0
  739. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/attributes/Attr-impl.js +60 -0
  740. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/attributes/NamedNodeMap-impl.js +78 -0
  741. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/attributes.js +312 -0
  742. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/constraint-validation/DefaultConstraintValidation-impl.js +75 -0
  743. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/constraint-validation/ValidityState-impl.js +66 -0
  744. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/crypto/Crypto-impl.js +68 -0
  745. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/cssom/StyleSheetList-impl.js +38 -0
  746. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/custom-elements/CustomElementRegistry-impl.js +279 -0
  747. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/custom-elements/ElementInternals-impl.js +56 -0
  748. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/deviceorientation/DeviceMotionEventAcceleration-impl.js +7 -0
  749. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/deviceorientation/DeviceMotionEventRotationRate-impl.js +7 -0
  750. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/documents.js +15 -0
  751. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/domparsing/DOMParser-impl.js +59 -0
  752. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/domparsing/InnerHTML-impl.js +30 -0
  753. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/domparsing/XMLSerializer-impl.js +18 -0
  754. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/domparsing/parse5-adapter-serialization.js +63 -0
  755. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/domparsing/serialization.js +36 -0
  756. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/BeforeUnloadEvent-impl.js +12 -0
  757. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/BlobEvent-impl.js +14 -0
  758. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/CloseEvent-impl.js +10 -0
  759. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/CompositionEvent-impl.js +20 -0
  760. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/CustomEvent-impl.js +21 -0
  761. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/DeviceMotionEvent-impl.js +49 -0
  762. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/DeviceOrientationEvent-impl.js +10 -0
  763. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/ErrorEvent-impl.js +14 -0
  764. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/Event-impl.js +195 -0
  765. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/EventModifierMixin-impl.js +24 -0
  766. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js +438 -0
  767. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/FocusEvent-impl.js +9 -0
  768. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/HashChangeEvent-impl.js +14 -0
  769. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/InputEvent-impl.js +11 -0
  770. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/KeyboardEvent-impl.js +29 -0
  771. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/MessageEvent-impl.js +25 -0
  772. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/MouseEvent-impl.js +72 -0
  773. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/PageTransitionEvent-impl.js +20 -0
  774. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/PointerEvent-impl.js +21 -0
  775. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/PopStateEvent-impl.js +9 -0
  776. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/ProgressEvent-impl.js +14 -0
  777. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/PromiseRejectionEvent-impl.js +14 -0
  778. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/StorageEvent-impl.js +26 -0
  779. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/SubmitEvent-impl.js +13 -0
  780. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/TouchEvent-impl.js +14 -0
  781. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/TransitionEvent-impl.js +10 -0
  782. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/UIEvent-impl.js +43 -0
  783. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/events/WheelEvent-impl.js +12 -0
  784. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/fetch/Headers-impl.js +172 -0
  785. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/fetch/header-list.js +65 -0
  786. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/fetch/header-types.js +103 -0
  787. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/file-api/Blob-impl.js +93 -0
  788. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/file-api/File-impl.js +12 -0
  789. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/file-api/FileList-impl.js +15 -0
  790. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/file-api/FileReader-impl.js +130 -0
  791. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/AbortController.js +143 -0
  792. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/AbortSignal.js +249 -0
  793. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/AbstractRange.js +171 -0
  794. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/AddEventListenerOptions.js +53 -0
  795. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/AssignedNodesOptions.js +28 -0
  796. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Attr.js +217 -0
  797. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/BarProp.js +117 -0
  798. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/BeforeUnloadEvent.js +139 -0
  799. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/BinaryType.js +12 -0
  800. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Blob.js +211 -0
  801. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/BlobCallback.js +30 -0
  802. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/BlobEvent.js +157 -0
  803. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/BlobEventInit.js +43 -0
  804. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/BlobPropertyBag.js +42 -0
  805. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CDATASection.js +109 -0
  806. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CanPlayTypeResult.js +12 -0
  807. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js +453 -0
  808. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CloseEvent.js +168 -0
  809. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CloseEventInit.js +65 -0
  810. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Comment.js +120 -0
  811. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CompositionEvent.js +219 -0
  812. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CompositionEventInit.js +32 -0
  813. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Crypto.js +148 -0
  814. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CustomElementConstructor.js +34 -0
  815. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CustomElementRegistry.js +267 -0
  816. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CustomEvent.js +206 -0
  817. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/CustomEventInit.js +32 -0
  818. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DOMException.js +222 -0
  819. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DOMImplementation.js +237 -0
  820. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DOMParser.js +140 -0
  821. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DOMRect.js +276 -0
  822. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DOMRectInit.js +76 -0
  823. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DOMRectReadOnly.js +285 -0
  824. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DOMStringMap.js +297 -0
  825. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DOMTokenList.js +537 -0
  826. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEvent.js +183 -0
  827. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventAcceleration.js +145 -0
  828. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventAccelerationInit.js +61 -0
  829. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventInit.js +70 -0
  830. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventRotationRate.js +145 -0
  831. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DeviceMotionEventRotationRateInit.js +61 -0
  832. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DeviceOrientationEvent.js +183 -0
  833. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DeviceOrientationEventInit.js +80 -0
  834. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Document.js +4509 -0
  835. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DocumentFragment.js +334 -0
  836. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DocumentReadyState.js +12 -0
  837. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/DocumentType.js +252 -0
  838. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Element.js +3718 -0
  839. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ElementCreationOptions.js +26 -0
  840. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ElementDefinitionOptions.js +29 -0
  841. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ElementInternals.js +2150 -0
  842. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/EndingType.js +12 -0
  843. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ErrorEvent.js +192 -0
  844. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ErrorEventInit.js +92 -0
  845. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Event.js +430 -0
  846. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/EventHandlerNonNull.js +36 -0
  847. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/EventInit.js +58 -0
  848. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/EventListener.js +35 -0
  849. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/EventListenerOptions.js +28 -0
  850. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/EventModifierInit.js +221 -0
  851. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js +259 -0
  852. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/External.js +130 -0
  853. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/File.js +185 -0
  854. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/FileList.js +298 -0
  855. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/FilePropertyBag.js +33 -0
  856. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/FileReader.js +468 -0
  857. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/FocusEvent.js +144 -0
  858. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/FocusEventInit.js +36 -0
  859. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/FormData.js +468 -0
  860. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Function.js +42 -0
  861. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/GetRootNodeOptions.js +31 -0
  862. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLAnchorElement.js +1023 -0
  863. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLAreaElement.js +822 -0
  864. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLAudioElement.js +110 -0
  865. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLBRElement.js +153 -0
  866. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLBaseElement.js +193 -0
  867. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLBodyElement.js +877 -0
  868. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLButtonElement.js +522 -0
  869. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js +304 -0
  870. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLCollection.js +352 -0
  871. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLDListElement.js +156 -0
  872. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLDataElement.js +153 -0
  873. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLDataListElement.js +125 -0
  874. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLDetailsElement.js +156 -0
  875. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLDialogElement.js +156 -0
  876. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLDirectoryElement.js +156 -0
  877. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLDivElement.js +153 -0
  878. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLElement.js +3489 -0
  879. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLEmbedElement.js +378 -0
  880. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLFieldSetElement.js +329 -0
  881. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLFontElement.js +236 -0
  882. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLFormControlsCollection.js +318 -0
  883. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLFormElement.js +658 -0
  884. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLFrameElement.js +510 -0
  885. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLFrameSetElement.js +708 -0
  886. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLHRElement.js +320 -0
  887. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLHeadElement.js +110 -0
  888. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLHeadingElement.js +153 -0
  889. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLHtmlElement.js +153 -0
  890. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLIFrameElement.js +686 -0
  891. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLImageElement.js +902 -0
  892. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLInputElement.js +1927 -0
  893. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLLIElement.js +201 -0
  894. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLLabelElement.js +179 -0
  895. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLLegendElement.js +166 -0
  896. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLLinkElement.js +552 -0
  897. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLMapElement.js +168 -0
  898. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLMarqueeElement.js +554 -0
  899. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLMediaElement.js +898 -0
  900. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLMenuElement.js +156 -0
  901. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLMetaElement.js +276 -0
  902. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLMeterElement.js +365 -0
  903. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLModElement.js +214 -0
  904. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLOListElement.js +281 -0
  905. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLObjectElement.js +941 -0
  906. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLOptGroupElement.js +197 -0
  907. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLOptionElement.js +376 -0
  908. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLOptionsCollection.js +511 -0
  909. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLOutputElement.js +392 -0
  910. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLParagraphElement.js +153 -0
  911. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLParamElement.js +276 -0
  912. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLPictureElement.js +110 -0
  913. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLPreElement.js +160 -0
  914. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLProgressElement.js +228 -0
  915. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLQuoteElement.js +173 -0
  916. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLScriptElement.js +469 -0
  917. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLSelectElement.js +989 -0
  918. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLSlotElement.js +192 -0
  919. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLSourceElement.js +337 -0
  920. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLSpanElement.js +110 -0
  921. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLStyleElement.js +207 -0
  922. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableCaptionElement.js +153 -0
  923. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableCellElement.js +729 -0
  924. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableColElement.js +372 -0
  925. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableElement.js +799 -0
  926. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableRowElement.js +414 -0
  927. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableSectionElement.js +346 -0
  928. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTemplateElement.js +123 -0
  929. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTextAreaElement.js +1206 -0
  930. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTimeElement.js +153 -0
  931. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTitleElement.js +152 -0
  932. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLTrackElement.js +363 -0
  933. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLUListElement.js +197 -0
  934. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLUnknownElement.js +109 -0
  935. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HTMLVideoElement.js +340 -0
  936. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HashChangeEvent.js +157 -0
  937. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/HashChangeEventInit.js +50 -0
  938. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Headers.js +418 -0
  939. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/History.js +266 -0
  940. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/InputEvent.js +168 -0
  941. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/InputEventInit.js +68 -0
  942. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/KeyboardEvent.js +445 -0
  943. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/KeyboardEventInit.js +116 -0
  944. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Location.js +404 -0
  945. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MessageEvent.js +317 -0
  946. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MessageEventInit.js +100 -0
  947. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MimeType.js +156 -0
  948. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MimeTypeArray.js +326 -0
  949. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MouseEvent.js +595 -0
  950. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MouseEventInit.js +189 -0
  951. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MutationCallback.js +34 -0
  952. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MutationObserver.js +178 -0
  953. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MutationObserverInit.js +121 -0
  954. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/MutationRecord.js +229 -0
  955. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/NamedNodeMap.js +527 -0
  956. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Navigator.js +326 -0
  957. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Node.js +763 -0
  958. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/NodeFilter.js +75 -0
  959. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/NodeIterator.js +207 -0
  960. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/NodeList.js +302 -0
  961. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/OnBeforeUnloadEventHandlerNonNull.js +42 -0
  962. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/OnErrorEventHandlerNonNull.js +56 -0
  963. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PageTransitionEvent.js +144 -0
  964. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PageTransitionEventInit.js +35 -0
  965. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Performance.js +142 -0
  966. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Plugin.js +359 -0
  967. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PluginArray.js +336 -0
  968. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PointerEvent.js +324 -0
  969. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PointerEventInit.js +241 -0
  970. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PopStateEvent.js +144 -0
  971. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PopStateEventInit.js +32 -0
  972. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ProcessingInstruction.js +122 -0
  973. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ProgressEvent.js +170 -0
  974. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ProgressEventInit.js +65 -0
  975. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PromiseRejectionEvent.js +157 -0
  976. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/PromiseRejectionEventInit.js +42 -0
  977. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/RadioNodeList.js +296 -0
  978. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Range.js +641 -0
  979. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGAnimatedPreserveAspectRatio.js +136 -0
  980. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGAnimatedRect.js +136 -0
  981. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGAnimatedString.js +149 -0
  982. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGBoundingBoxOptions.js +64 -0
  983. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGDefsElement.js +109 -0
  984. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGDescElement.js +109 -0
  985. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGElement.js +3155 -0
  986. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGGElement.js +109 -0
  987. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGGraphicsElement.js +139 -0
  988. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGMetadataElement.js +109 -0
  989. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGNumber.js +132 -0
  990. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGPreserveAspectRatio.js +196 -0
  991. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGRect.js +210 -0
  992. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGSVGElement.js +786 -0
  993. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGStringList.js +511 -0
  994. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGSwitchElement.js +109 -0
  995. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGSymbolElement.js +146 -0
  996. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SVGTitleElement.js +109 -0
  997. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Screen.js +180 -0
  998. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ScrollBehavior.js +12 -0
  999. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ScrollIntoViewOptions.js +45 -0
  1000. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ScrollLogicalPosition.js +14 -0
  1001. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ScrollOptions.js +30 -0
  1002. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ScrollRestoration.js +12 -0
  1003. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Selection.js +569 -0
  1004. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SelectionMode.js +12 -0
  1005. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ShadowRoot.js +187 -0
  1006. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ShadowRootInit.js +30 -0
  1007. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ShadowRootMode.js +12 -0
  1008. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/StaticRange.js +123 -0
  1009. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/StaticRangeInit.js +72 -0
  1010. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Storage.js +397 -0
  1011. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/StorageEvent.js +318 -0
  1012. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/StorageEventInit.js +99 -0
  1013. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/StyleSheetList.js +300 -0
  1014. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SubmitEvent.js +144 -0
  1015. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SubmitEventInit.js +36 -0
  1016. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/SupportedType.js +18 -0
  1017. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/Text.js +170 -0
  1018. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/TextTrackKind.js +12 -0
  1019. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/TouchEvent.js +222 -0
  1020. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/TouchEventInit.js +89 -0
  1021. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/TransitionEvent.js +170 -0
  1022. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/TransitionEventInit.js +65 -0
  1023. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/TreeWalker.js +255 -0
  1024. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/UIEvent.js +235 -0
  1025. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/UIEventInit.js +62 -0
  1026. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/ValidityState.js +249 -0
  1027. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/VisibilityState.js +12 -0
  1028. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/VoidFunction.js +26 -0
  1029. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/WebSocket.js +480 -0
  1030. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/WheelEvent.js +191 -0
  1031. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/WheelEventInit.js +71 -0
  1032. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/XMLDocument.js +109 -0
  1033. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/XMLHttpRequest.js +663 -0
  1034. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/XMLHttpRequestEventTarget.js +334 -0
  1035. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/XMLHttpRequestResponseType.js +14 -0
  1036. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/XMLHttpRequestUpload.js +109 -0
  1037. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/XMLSerializer.js +132 -0
  1038. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/generated/utils.js +252 -0
  1039. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/geometry/DOMRect-impl.js +39 -0
  1040. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/geometry/DOMRectReadOnly-impl.js +72 -0
  1041. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/agent-factory.js +13 -0
  1042. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/binary-data.js +9 -0
  1043. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/colors.js +245 -0
  1044. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/create-element.js +329 -0
  1045. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/create-event-accessor.js +188 -0
  1046. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/custom-elements.js +272 -0
  1047. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/dates-and-times.js +270 -0
  1048. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/details.js +15 -0
  1049. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/events.js +24 -0
  1050. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/focusing.js +104 -0
  1051. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/form-controls.js +309 -0
  1052. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/html-constructor.js +78 -0
  1053. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/http-request.js +266 -0
  1054. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/internal-constants.js +12 -0
  1055. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/is-window.js +18 -0
  1056. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/iterable-weak-set.js +48 -0
  1057. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/json.js +12 -0
  1058. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/mutation-observers.js +198 -0
  1059. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/namespaces.js +16 -0
  1060. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/node.js +68 -0
  1061. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/number-and-date-inputs.js +195 -0
  1062. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/ordered-set.js +104 -0
  1063. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/page-transition-event.js +9 -0
  1064. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js +75 -0
  1065. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/shadow-dom.js +285 -0
  1066. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/strings.js +162 -0
  1067. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/style-rules.js +319 -0
  1068. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js +129 -0
  1069. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/svg/basic-types.js +41 -0
  1070. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/svg/render.js +46 -0
  1071. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/system-colors.js +147 -0
  1072. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/text.js +19 -0
  1073. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/traversal.js +72 -0
  1074. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js +65 -0
  1075. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/hr-time/Performance-impl.js +22 -0
  1076. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/interfaces.js +249 -0
  1077. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/mutation-observer/MutationObserver-impl.js +95 -0
  1078. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/mutation-observer/MutationRecord-impl.js +37 -0
  1079. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/MimeType-impl.js +3 -0
  1080. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/MimeTypeArray-impl.js +21 -0
  1081. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/Navigator-impl.js +29 -0
  1082. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorConcurrentHardware-impl.js +8 -0
  1083. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorCookies-impl.js +7 -0
  1084. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorID-impl.js +37 -0
  1085. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorLanguage-impl.js +9 -0
  1086. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorOnLine-impl.js +7 -0
  1087. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorPlugins-impl.js +8 -0
  1088. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/Plugin-impl.js +3 -0
  1089. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/navigator/PluginArray-impl.js +23 -0
  1090. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/node-document-position.js +10 -0
  1091. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/node-type.js +16 -0
  1092. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/node.js +331 -0
  1093. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/CDATASection-impl.js +16 -0
  1094. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js +118 -0
  1095. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/ChildNode-impl.js +80 -0
  1096. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/Comment-impl.js +20 -0
  1097. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/DOMImplementation-impl.js +120 -0
  1098. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/DOMStringMap-impl.js +64 -0
  1099. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/DOMTokenList-impl.js +171 -0
  1100. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/Document-impl.js +1014 -0
  1101. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/DocumentFragment-impl.js +44 -0
  1102. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/DocumentOrShadowRoot-impl.js +28 -0
  1103. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/DocumentType-impl.js +24 -0
  1104. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js +608 -0
  1105. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/ElementCSSInlineStyle-impl.js +22 -0
  1106. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/ElementContentEditable-impl.js +7 -0
  1107. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/GlobalEventHandlers-impl.js +157 -0
  1108. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAnchorElement-impl.js +50 -0
  1109. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAreaElement-impl.js +43 -0
  1110. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAudioElement-impl.js +9 -0
  1111. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBRElement-impl.js +9 -0
  1112. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBaseElement-impl.js +44 -0
  1113. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBodyElement-impl.js +17 -0
  1114. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLButtonElement-impl.js +79 -0
  1115. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js +136 -0
  1116. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCollection-impl.js +96 -0
  1117. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDListElement-impl.js +9 -0
  1118. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDataElement-impl.js +9 -0
  1119. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDataListElement-impl.js +20 -0
  1120. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDetailsElement-impl.js +35 -0
  1121. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDialogElement-impl.js +9 -0
  1122. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDirectoryElement-impl.js +9 -0
  1123. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDivElement-impl.js +9 -0
  1124. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js +211 -0
  1125. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLEmbedElement-impl.js +8 -0
  1126. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFieldSetElement-impl.js +43 -0
  1127. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFontElement-impl.js +9 -0
  1128. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFormControlsCollection-impl.js +33 -0
  1129. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFormElement-impl.js +248 -0
  1130. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFrameElement-impl.js +266 -0
  1131. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFrameSetElement-impl.js +17 -0
  1132. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHRElement-impl.js +9 -0
  1133. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHeadElement-impl.js +9 -0
  1134. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHeadingElement-impl.js +9 -0
  1135. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHtmlElement-impl.js +9 -0
  1136. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHyperlinkElementUtils-impl.js +366 -0
  1137. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLIFrameElement-impl.js +9 -0
  1138. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLImageElement-impl.js +131 -0
  1139. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLInputElement-impl.js +1097 -0
  1140. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLIElement-impl.js +9 -0
  1141. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLabelElement-impl.js +94 -0
  1142. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLegendElement-impl.js +18 -0
  1143. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLinkElement-impl.js +107 -0
  1144. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMapElement-impl.js +13 -0
  1145. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMarqueeElement-impl.js +9 -0
  1146. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMediaElement-impl.js +138 -0
  1147. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMenuElement-impl.js +9 -0
  1148. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMetaElement-impl.js +9 -0
  1149. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMeterElement-impl.js +180 -0
  1150. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLModElement-impl.js +9 -0
  1151. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOListElement-impl.js +22 -0
  1152. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLObjectElement-impl.js +26 -0
  1153. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOptGroupElement-impl.js +9 -0
  1154. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOptionElement-impl.js +146 -0
  1155. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOptionsCollection-impl.js +110 -0
  1156. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOrSVGElement-impl.js +88 -0
  1157. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOutputElement-impl.js +88 -0
  1158. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLParagraphElement-impl.js +9 -0
  1159. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLParamElement-impl.js +9 -0
  1160. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLPictureElement-impl.js +9 -0
  1161. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLPreElement-impl.js +9 -0
  1162. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLProgressElement-impl.js +72 -0
  1163. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLQuoteElement-impl.js +9 -0
  1164. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLScriptElement-impl.js +261 -0
  1165. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSelectElement-impl.js +283 -0
  1166. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSlotElement-impl.js +59 -0
  1167. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSourceElement-impl.js +8 -0
  1168. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSpanElement-impl.js +9 -0
  1169. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js +73 -0
  1170. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableCaptionElement-impl.js +9 -0
  1171. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableCellElement-impl.js +73 -0
  1172. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableColElement-impl.js +9 -0
  1173. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableElement-impl.js +236 -0
  1174. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableRowElement-impl.js +88 -0
  1175. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableSectionElement-impl.js +61 -0
  1176. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTemplateElement-impl.js +67 -0
  1177. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTextAreaElement-impl.js +244 -0
  1178. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTimeElement-impl.js +9 -0
  1179. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTitleElement-impl.js +18 -0
  1180. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTrackElement-impl.js +13 -0
  1181. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLUListElement-impl.js +9 -0
  1182. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLUnknownElement-impl.js +9 -0
  1183. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/HTMLVideoElement-impl.js +17 -0
  1184. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/LinkStyle-impl.js +2 -0
  1185. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js +1160 -0
  1186. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/NodeList-impl.js +43 -0
  1187. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/NonDocumentTypeChildNode-impl.js +28 -0
  1188. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/NonElementParentNode-impl.js +11 -0
  1189. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/ParentNode-impl.js +90 -0
  1190. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/ProcessingInstruction-impl.js +22 -0
  1191. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/RadioNodeList-impl.js +49 -0
  1192. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGDefsElement-impl.js +9 -0
  1193. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGDescElement-impl.js +9 -0
  1194. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGElement-impl.js +64 -0
  1195. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGGElement-impl.js +9 -0
  1196. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGGraphicsElement-impl.js +16 -0
  1197. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGMetadataElement-impl.js +9 -0
  1198. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGSVGElement-impl.js +47 -0
  1199. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGSwitchElement-impl.js +9 -0
  1200. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGSymbolElement-impl.js +9 -0
  1201. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGTests-impl.js +42 -0
  1202. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/SVGTitleElement-impl.js +9 -0
  1203. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/ShadowRoot-impl.js +41 -0
  1204. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/Slotable-impl.js +48 -0
  1205. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/Text-impl.js +96 -0
  1206. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/WindowEventHandlers-impl.js +52 -0
  1207. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/nodes/XMLDocument-impl.js +4 -0
  1208. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/range/AbstractRange-impl.js +43 -0
  1209. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/range/Range-impl.js +897 -0
  1210. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/range/StaticRange-impl.js +39 -0
  1211. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/range/boundary-point.js +47 -0
  1212. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/selection/Selection-impl.js +358 -0
  1213. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/svg/SVGAnimatedPreserveAspectRatio-impl.js +24 -0
  1214. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/svg/SVGAnimatedRect-impl.js +122 -0
  1215. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/svg/SVGAnimatedString-impl.js +42 -0
  1216. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/svg/SVGListBase.js +195 -0
  1217. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/svg/SVGNumber-impl.js +48 -0
  1218. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/svg/SVGPreserveAspectRatio-impl.js +100 -0
  1219. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/svg/SVGRect-impl.js +143 -0
  1220. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/svg/SVGStringList-impl.js +16 -0
  1221. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/traversal/NodeIterator-impl.js +107 -0
  1222. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/traversal/TreeWalker-impl.js +217 -0
  1223. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/traversal/helpers.js +44 -0
  1224. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/webidl/DOMException-impl.js +46 -0
  1225. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/websockets/WebSocket-impl.js +328 -0
  1226. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/webstorage/Storage-impl.js +102 -0
  1227. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/window/BarProp-impl.js +10 -0
  1228. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/window/External-impl.js +9 -0
  1229. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/window/History-impl.js +148 -0
  1230. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/window/Location-impl.js +227 -0
  1231. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/window/Screen-impl.js +13 -0
  1232. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/window/SessionHistory.js +163 -0
  1233. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/window/navigation.js +85 -0
  1234. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/window-properties.js +241 -0
  1235. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/xhr/FormData-impl.js +191 -0
  1236. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/xhr/XMLHttpRequest-impl.js +1005 -0
  1237. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/xhr/XMLHttpRequestEventTarget-impl.js +17 -0
  1238. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/xhr/XMLHttpRequestUpload-impl.js +4 -0
  1239. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/xhr/multipart-form-data.js +105 -0
  1240. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js +59 -0
  1241. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/living/xhr/xhr-utils.js +410 -0
  1242. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/utils.js +105 -0
  1243. data/lib/readability_js/node/node_modules/jsdom/lib/jsdom/virtual-console.js +46 -0
  1244. data/lib/readability_js/node/node_modules/jsdom/package.json +93 -0
  1245. data/lib/readability_js/node/node_modules/lru-cache/LICENSE +15 -0
  1246. data/lib/readability_js/node/node_modules/lru-cache/README.md +338 -0
  1247. data/lib/readability_js/node/node_modules/lru-cache/dist/commonjs/index.d.ts +1322 -0
  1248. data/lib/readability_js/node/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -0
  1249. data/lib/readability_js/node/node_modules/lru-cache/dist/commonjs/index.js +1568 -0
  1250. data/lib/readability_js/node/node_modules/lru-cache/dist/commonjs/index.js.map +1 -0
  1251. data/lib/readability_js/node/node_modules/lru-cache/dist/commonjs/index.min.js +2 -0
  1252. data/lib/readability_js/node/node_modules/lru-cache/dist/commonjs/index.min.js.map +7 -0
  1253. data/lib/readability_js/node/node_modules/lru-cache/dist/commonjs/package.json +3 -0
  1254. data/lib/readability_js/node/node_modules/lru-cache/dist/esm/index.d.ts +1322 -0
  1255. data/lib/readability_js/node/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -0
  1256. data/lib/readability_js/node/node_modules/lru-cache/dist/esm/index.js +1564 -0
  1257. data/lib/readability_js/node/node_modules/lru-cache/dist/esm/index.js.map +1 -0
  1258. data/lib/readability_js/node/node_modules/lru-cache/dist/esm/index.min.js +2 -0
  1259. data/lib/readability_js/node/node_modules/lru-cache/dist/esm/index.min.js.map +7 -0
  1260. data/lib/readability_js/node/node_modules/lru-cache/dist/esm/package.json +3 -0
  1261. data/lib/readability_js/node/node_modules/lru-cache/package.json +113 -0
  1262. data/lib/readability_js/node/node_modules/mdn-data/LICENSE +116 -0
  1263. data/lib/readability_js/node/node_modules/mdn-data/README.md +59 -0
  1264. data/lib/readability_js/node/node_modules/mdn-data/api/index.js +3 -0
  1265. data/lib/readability_js/node/node_modules/mdn-data/api/inheritance.json +2681 -0
  1266. data/lib/readability_js/node/node_modules/mdn-data/api/inheritance.schema.json +31 -0
  1267. data/lib/readability_js/node/node_modules/mdn-data/css/at-rules.json +504 -0
  1268. data/lib/readability_js/node/node_modules/mdn-data/css/at-rules.schema.json +131 -0
  1269. data/lib/readability_js/node/node_modules/mdn-data/css/definitions.json +80 -0
  1270. data/lib/readability_js/node/node_modules/mdn-data/css/functions.json +593 -0
  1271. data/lib/readability_js/node/node_modules/mdn-data/css/functions.schema.json +45 -0
  1272. data/lib/readability_js/node/node_modules/mdn-data/css/index.js +9 -0
  1273. data/lib/readability_js/node/node_modules/mdn-data/css/properties.json +10806 -0
  1274. data/lib/readability_js/node/node_modules/mdn-data/css/properties.schema.json +449 -0
  1275. data/lib/readability_js/node/node_modules/mdn-data/css/selectors.json +1071 -0
  1276. data/lib/readability_js/node/node_modules/mdn-data/css/selectors.schema.json +36 -0
  1277. data/lib/readability_js/node/node_modules/mdn-data/css/syntaxes.json +899 -0
  1278. data/lib/readability_js/node/node_modules/mdn-data/css/syntaxes.schema.json +15 -0
  1279. data/lib/readability_js/node/node_modules/mdn-data/css/types.json +287 -0
  1280. data/lib/readability_js/node/node_modules/mdn-data/css/types.schema.json +32 -0
  1281. data/lib/readability_js/node/node_modules/mdn-data/css/units.json +213 -0
  1282. data/lib/readability_js/node/node_modules/mdn-data/css/units.schema.json +28 -0
  1283. data/lib/readability_js/node/node_modules/mdn-data/index.js +5 -0
  1284. data/lib/readability_js/node/node_modules/mdn-data/l10n/css.json +1876 -0
  1285. data/lib/readability_js/node/node_modules/mdn-data/l10n/index.js +3 -0
  1286. data/lib/readability_js/node/node_modules/mdn-data/package.json +38 -0
  1287. data/lib/readability_js/node/node_modules/ms/index.js +162 -0
  1288. data/lib/readability_js/node/node_modules/ms/license.md +21 -0
  1289. data/lib/readability_js/node/node_modules/ms/package.json +38 -0
  1290. data/lib/readability_js/node/node_modules/ms/readme.md +59 -0
  1291. data/lib/readability_js/node/node_modules/parse5/LICENSE +19 -0
  1292. data/lib/readability_js/node/node_modules/parse5/README.md +38 -0
  1293. data/lib/readability_js/node/node_modules/parse5/dist/common/doctype.d.ts +4 -0
  1294. data/lib/readability_js/node/node_modules/parse5/dist/common/doctype.js +114 -0
  1295. data/lib/readability_js/node/node_modules/parse5/dist/common/error-codes.d.ts +67 -0
  1296. data/lib/readability_js/node/node_modules/parse5/dist/common/error-codes.js +63 -0
  1297. data/lib/readability_js/node/node_modules/parse5/dist/common/foreign-content.d.ts +9 -0
  1298. data/lib/readability_js/node/node_modules/parse5/dist/common/foreign-content.js +228 -0
  1299. data/lib/readability_js/node/node_modules/parse5/dist/common/html.d.ts +289 -0
  1300. data/lib/readability_js/node/node_modules/parse5/dist/common/html.js +523 -0
  1301. data/lib/readability_js/node/node_modules/parse5/dist/common/token.d.ts +84 -0
  1302. data/lib/readability_js/node/node_modules/parse5/dist/common/token.js +20 -0
  1303. data/lib/readability_js/node/node_modules/parse5/dist/common/unicode.d.ts +42 -0
  1304. data/lib/readability_js/node/node_modules/parse5/dist/common/unicode.js +62 -0
  1305. data/lib/readability_js/node/node_modules/parse5/dist/index.d.ts +71 -0
  1306. data/lib/readability_js/node/node_modules/parse5/dist/index.js +42 -0
  1307. data/lib/readability_js/node/node_modules/parse5/dist/parser/formatting-element-list.d.ts +36 -0
  1308. data/lib/readability_js/node/node_modules/parse5/dist/parser/formatting-element-list.js +110 -0
  1309. data/lib/readability_js/node/node_modules/parse5/dist/parser/index.d.ts +221 -0
  1310. data/lib/readability_js/node/node_modules/parse5/dist/parser/index.js +3245 -0
  1311. data/lib/readability_js/node/node_modules/parse5/dist/parser/open-element-stack.d.ts +53 -0
  1312. data/lib/readability_js/node/node_modules/parse5/dist/parser/open-element-stack.js +324 -0
  1313. data/lib/readability_js/node/node_modules/parse5/dist/serializer/index.d.ts +60 -0
  1314. data/lib/readability_js/node/node_modules/parse5/dist/serializer/index.js +168 -0
  1315. data/lib/readability_js/node/node_modules/parse5/dist/tokenizer/index.d.ts +247 -0
  1316. data/lib/readability_js/node/node_modules/parse5/dist/tokenizer/index.js +2710 -0
  1317. data/lib/readability_js/node/node_modules/parse5/dist/tokenizer/preprocessor.d.ts +36 -0
  1318. data/lib/readability_js/node/node_modules/parse5/dist/tokenizer/preprocessor.js +196 -0
  1319. data/lib/readability_js/node/node_modules/parse5/dist/tree-adapters/default.d.ts +84 -0
  1320. data/lib/readability_js/node/node_modules/parse5/dist/tree-adapters/default.js +173 -0
  1321. data/lib/readability_js/node/node_modules/parse5/dist/tree-adapters/interface.d.ts +255 -0
  1322. data/lib/readability_js/node/node_modules/parse5/dist/tree-adapters/interface.js +1 -0
  1323. data/lib/readability_js/node/node_modules/parse5/package.json +48 -0
  1324. data/lib/readability_js/node/node_modules/punycode/LICENSE-MIT.txt +20 -0
  1325. data/lib/readability_js/node/node_modules/punycode/README.md +148 -0
  1326. data/lib/readability_js/node/node_modules/punycode/package.json +58 -0
  1327. data/lib/readability_js/node/node_modules/punycode/punycode.es6.js +444 -0
  1328. data/lib/readability_js/node/node_modules/punycode/punycode.js +443 -0
  1329. data/lib/readability_js/node/node_modules/require-from-string/index.js +34 -0
  1330. data/lib/readability_js/node/node_modules/require-from-string/license +21 -0
  1331. data/lib/readability_js/node/node_modules/require-from-string/package.json +28 -0
  1332. data/lib/readability_js/node/node_modules/require-from-string/readme.md +56 -0
  1333. data/lib/readability_js/node/node_modules/rrweb-cssom/LICENSE.txt +20 -0
  1334. data/lib/readability_js/node/node_modules/rrweb-cssom/README.mdown +74 -0
  1335. data/lib/readability_js/node/node_modules/rrweb-cssom/build/CSSOM.js +1995 -0
  1336. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSConditionRule.js +25 -0
  1337. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSContainerRule.js +50 -0
  1338. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSDocumentRule.js +39 -0
  1339. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSFontFaceRule.js +36 -0
  1340. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSGroupingRule.js +69 -0
  1341. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSHostRule.js +37 -0
  1342. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSImportRule.js +132 -0
  1343. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSKeyframeRule.js +37 -0
  1344. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSKeyframesRule.js +39 -0
  1345. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSLayerBlockRule.js +48 -0
  1346. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSMediaRule.js +53 -0
  1347. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSOM.js +3 -0
  1348. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSRule.js +42 -0
  1349. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSStartingStyleRule.js +37 -0
  1350. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSStyleDeclaration.js +148 -0
  1351. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSStyleRule.js +190 -0
  1352. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSStyleSheet.js +88 -0
  1353. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSSupportsRule.js +36 -0
  1354. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSValue.js +43 -0
  1355. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/CSSValueExpression.js +344 -0
  1356. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/MatcherList.js +62 -0
  1357. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/MediaList.js +61 -0
  1358. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/StyleSheet.js +17 -0
  1359. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/clone.js +80 -0
  1360. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/index.js +26 -0
  1361. data/lib/readability_js/node/node_modules/rrweb-cssom/lib/parse.js +525 -0
  1362. data/lib/readability_js/node/node_modules/rrweb-cssom/package.json +27 -0
  1363. data/lib/readability_js/node/node_modules/safer-buffer/LICENSE +21 -0
  1364. data/lib/readability_js/node/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  1365. data/lib/readability_js/node/node_modules/safer-buffer/Readme.md +156 -0
  1366. data/lib/readability_js/node/node_modules/safer-buffer/dangerous.js +58 -0
  1367. data/lib/readability_js/node/node_modules/safer-buffer/package.json +34 -0
  1368. data/lib/readability_js/node/node_modules/safer-buffer/safer.js +77 -0
  1369. data/lib/readability_js/node/node_modules/safer-buffer/tests.js +406 -0
  1370. data/lib/readability_js/node/node_modules/saxes/README.md +323 -0
  1371. data/lib/readability_js/node/node_modules/saxes/package.json +71 -0
  1372. data/lib/readability_js/node/node_modules/saxes/saxes.d.ts +635 -0
  1373. data/lib/readability_js/node/node_modules/saxes/saxes.js +2053 -0
  1374. data/lib/readability_js/node/node_modules/saxes/saxes.js.map +1 -0
  1375. data/lib/readability_js/node/node_modules/source-map-js/LICENSE +28 -0
  1376. data/lib/readability_js/node/node_modules/source-map-js/README.md +765 -0
  1377. data/lib/readability_js/node/node_modules/source-map-js/lib/array-set.js +121 -0
  1378. data/lib/readability_js/node/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  1379. data/lib/readability_js/node/node_modules/source-map-js/lib/base64.js +67 -0
  1380. data/lib/readability_js/node/node_modules/source-map-js/lib/binary-search.js +111 -0
  1381. data/lib/readability_js/node/node_modules/source-map-js/lib/mapping-list.js +79 -0
  1382. data/lib/readability_js/node/node_modules/source-map-js/lib/quick-sort.js +132 -0
  1383. data/lib/readability_js/node/node_modules/source-map-js/lib/source-map-consumer.d.ts +1 -0
  1384. data/lib/readability_js/node/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
  1385. data/lib/readability_js/node/node_modules/source-map-js/lib/source-map-generator.d.ts +1 -0
  1386. data/lib/readability_js/node/node_modules/source-map-js/lib/source-map-generator.js +444 -0
  1387. data/lib/readability_js/node/node_modules/source-map-js/lib/source-node.d.ts +1 -0
  1388. data/lib/readability_js/node/node_modules/source-map-js/lib/source-node.js +413 -0
  1389. data/lib/readability_js/node/node_modules/source-map-js/lib/util.js +594 -0
  1390. data/lib/readability_js/node/node_modules/source-map-js/package.json +71 -0
  1391. data/lib/readability_js/node/node_modules/source-map-js/source-map.d.ts +104 -0
  1392. data/lib/readability_js/node/node_modules/source-map-js/source-map.js +8 -0
  1393. data/lib/readability_js/node/node_modules/symbol-tree/LICENSE +21 -0
  1394. data/lib/readability_js/node/node_modules/symbol-tree/README.md +545 -0
  1395. data/lib/readability_js/node/node_modules/symbol-tree/lib/SymbolTree.js +838 -0
  1396. data/lib/readability_js/node/node_modules/symbol-tree/lib/SymbolTreeNode.js +54 -0
  1397. data/lib/readability_js/node/node_modules/symbol-tree/lib/TreeIterator.js +69 -0
  1398. data/lib/readability_js/node/node_modules/symbol-tree/lib/TreePosition.js +11 -0
  1399. data/lib/readability_js/node/node_modules/symbol-tree/package.json +47 -0
  1400. data/lib/readability_js/node/node_modules/tldts/LICENSE +13 -0
  1401. data/lib/readability_js/node/node_modules/tldts/README.md +327 -0
  1402. data/lib/readability_js/node/node_modules/tldts/bin/cli.js +21 -0
  1403. data/lib/readability_js/node/node_modules/tldts/dist/cjs/index.js +669 -0
  1404. data/lib/readability_js/node/node_modules/tldts/dist/cjs/index.js.map +1 -0
  1405. data/lib/readability_js/node/node_modules/tldts/dist/cjs/src/data/trie.js +14 -0
  1406. data/lib/readability_js/node/node_modules/tldts/dist/cjs/src/data/trie.js.map +1 -0
  1407. data/lib/readability_js/node/node_modules/tldts/dist/cjs/src/suffix-trie.js +67 -0
  1408. data/lib/readability_js/node/node_modules/tldts/dist/cjs/src/suffix-trie.js.map +1 -0
  1409. data/lib/readability_js/node/node_modules/tldts/dist/cjs/tsconfig.tsbuildinfo +1 -0
  1410. data/lib/readability_js/node/node_modules/tldts/dist/es6/index.js +33 -0
  1411. data/lib/readability_js/node/node_modules/tldts/dist/es6/index.js.map +1 -0
  1412. data/lib/readability_js/node/node_modules/tldts/dist/es6/src/data/trie.js +11 -0
  1413. data/lib/readability_js/node/node_modules/tldts/dist/es6/src/data/trie.js.map +1 -0
  1414. data/lib/readability_js/node/node_modules/tldts/dist/es6/src/suffix-trie.js +64 -0
  1415. data/lib/readability_js/node/node_modules/tldts/dist/es6/src/suffix-trie.js.map +1 -0
  1416. data/lib/readability_js/node/node_modules/tldts/dist/es6/tsconfig.bundle.tsbuildinfo +1 -0
  1417. data/lib/readability_js/node/node_modules/tldts/dist/index.cjs.min.js +2 -0
  1418. data/lib/readability_js/node/node_modules/tldts/dist/index.cjs.min.js.map +1 -0
  1419. data/lib/readability_js/node/node_modules/tldts/dist/index.esm.min.js +2 -0
  1420. data/lib/readability_js/node/node_modules/tldts/dist/index.esm.min.js.map +1 -0
  1421. data/lib/readability_js/node/node_modules/tldts/dist/index.umd.min.js +2 -0
  1422. data/lib/readability_js/node/node_modules/tldts/dist/index.umd.min.js.map +1 -0
  1423. data/lib/readability_js/node/node_modules/tldts/dist/types/index.d.ts +7 -0
  1424. data/lib/readability_js/node/node_modules/tldts/dist/types/src/data/trie.d.ts +5 -0
  1425. data/lib/readability_js/node/node_modules/tldts/dist/types/src/suffix-trie.d.ts +5 -0
  1426. data/lib/readability_js/node/node_modules/tldts/index.ts +62 -0
  1427. data/lib/readability_js/node/node_modules/tldts/package.json +91 -0
  1428. data/lib/readability_js/node/node_modules/tldts/src/data/trie.ts +14 -0
  1429. data/lib/readability_js/node/node_modules/tldts/src/suffix-trie.ts +110 -0
  1430. data/lib/readability_js/node/node_modules/tldts-core/LICENSE +13 -0
  1431. data/lib/readability_js/node/node_modules/tldts-core/README.md +3 -0
  1432. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/index.js +564 -0
  1433. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/index.js.map +1 -0
  1434. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/domain-without-suffix.js +15 -0
  1435. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/domain-without-suffix.js.map +1 -0
  1436. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/domain.js +83 -0
  1437. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/domain.js.map +1 -0
  1438. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/extract-hostname.js +149 -0
  1439. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/extract-hostname.js.map +1 -0
  1440. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/factory.js +107 -0
  1441. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/factory.js.map +1 -0
  1442. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/is-ip.js +72 -0
  1443. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/is-ip.js.map +1 -0
  1444. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/is-valid.js +69 -0
  1445. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/is-valid.js.map +1 -0
  1446. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/lookup/fast-path.js +69 -0
  1447. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/lookup/fast-path.js.map +1 -0
  1448. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/lookup/interface.js +3 -0
  1449. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/lookup/interface.js.map +1 -0
  1450. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/options.js +22 -0
  1451. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/options.js.map +1 -0
  1452. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/subdomain.js +14 -0
  1453. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/src/subdomain.js.map +1 -0
  1454. data/lib/readability_js/node/node_modules/tldts-core/dist/cjs/tsconfig.tsbuildinfo +1 -0
  1455. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/index.js +4 -0
  1456. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/index.js.map +1 -0
  1457. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/domain-without-suffix.js +12 -0
  1458. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/domain-without-suffix.js.map +1 -0
  1459. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/domain.js +80 -0
  1460. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/domain.js.map +1 -0
  1461. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/extract-hostname.js +146 -0
  1462. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/extract-hostname.js.map +1 -0
  1463. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/factory.js +102 -0
  1464. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/factory.js.map +1 -0
  1465. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/is-ip.js +69 -0
  1466. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/is-ip.js.map +1 -0
  1467. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/is-valid.js +66 -0
  1468. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/is-valid.js.map +1 -0
  1469. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/lookup/fast-path.js +66 -0
  1470. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/lookup/fast-path.js.map +1 -0
  1471. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/lookup/interface.js +2 -0
  1472. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/lookup/interface.js.map +1 -0
  1473. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/options.js +19 -0
  1474. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/options.js.map +1 -0
  1475. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/subdomain.js +11 -0
  1476. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/src/subdomain.js.map +1 -0
  1477. data/lib/readability_js/node/node_modules/tldts-core/dist/es6/tsconfig.bundle.tsbuildinfo +1 -0
  1478. data/lib/readability_js/node/node_modules/tldts-core/dist/types/index.d.ts +4 -0
  1479. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/domain-without-suffix.d.ts +6 -0
  1480. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/domain.d.ts +5 -0
  1481. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/extract-hostname.d.ts +5 -0
  1482. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/factory.d.ts +28 -0
  1483. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/is-ip.d.ts +6 -0
  1484. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/is-valid.d.ts +15 -0
  1485. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/lookup/fast-path.d.ts +2 -0
  1486. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/lookup/interface.d.ts +9 -0
  1487. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/options.d.ts +10 -0
  1488. data/lib/readability_js/node/node_modules/tldts-core/dist/types/src/subdomain.d.ts +4 -0
  1489. data/lib/readability_js/node/node_modules/tldts-core/index.ts +10 -0
  1490. data/lib/readability_js/node/node_modules/tldts-core/package.json +68 -0
  1491. data/lib/readability_js/node/node_modules/tldts-core/src/domain-without-suffix.ts +14 -0
  1492. data/lib/readability_js/node/node_modules/tldts-core/src/domain.ts +100 -0
  1493. data/lib/readability_js/node/node_modules/tldts-core/src/extract-hostname.ts +170 -0
  1494. data/lib/readability_js/node/node_modules/tldts-core/src/factory.ts +163 -0
  1495. data/lib/readability_js/node/node_modules/tldts-core/src/is-ip.ts +87 -0
  1496. data/lib/readability_js/node/node_modules/tldts-core/src/is-valid.ts +79 -0
  1497. data/lib/readability_js/node/node_modules/tldts-core/src/lookup/fast-path.ts +80 -0
  1498. data/lib/readability_js/node/node_modules/tldts-core/src/lookup/interface.ts +10 -0
  1499. data/lib/readability_js/node/node_modules/tldts-core/src/options.ts +39 -0
  1500. data/lib/readability_js/node/node_modules/tldts-core/src/subdomain.ts +11 -0
  1501. data/lib/readability_js/node/node_modules/tough-cookie/LICENSE +12 -0
  1502. data/lib/readability_js/node/node_modules/tough-cookie/README.md +195 -0
  1503. data/lib/readability_js/node/node_modules/tough-cookie/dist/index.cjs +2313 -0
  1504. data/lib/readability_js/node/node_modules/tough-cookie/dist/index.cjs.map +1 -0
  1505. data/lib/readability_js/node/node_modules/tough-cookie/dist/index.d.cts +1879 -0
  1506. data/lib/readability_js/node/node_modules/tough-cookie/dist/index.d.ts +1879 -0
  1507. data/lib/readability_js/node/node_modules/tough-cookie/dist/index.js +2268 -0
  1508. data/lib/readability_js/node/node_modules/tough-cookie/dist/index.js.map +1 -0
  1509. data/lib/readability_js/node/node_modules/tough-cookie/node_modules/.bin/tldts +1 -0
  1510. data/lib/readability_js/node/node_modules/tough-cookie/package.json +149 -0
  1511. data/lib/readability_js/node/node_modules/tr46/LICENSE.md +21 -0
  1512. data/lib/readability_js/node/node_modules/tr46/README.md +76 -0
  1513. data/lib/readability_js/node/node_modules/tr46/index.js +344 -0
  1514. data/lib/readability_js/node/node_modules/tr46/lib/mappingTable.json +1 -0
  1515. data/lib/readability_js/node/node_modules/tr46/lib/regexes.js +29 -0
  1516. data/lib/readability_js/node/node_modules/tr46/lib/statusMapping.js +9 -0
  1517. data/lib/readability_js/node/node_modules/tr46/package.json +47 -0
  1518. data/lib/readability_js/node/node_modules/w3c-xmlserializer/LICENSE.md +25 -0
  1519. data/lib/readability_js/node/node_modules/w3c-xmlserializer/README.md +41 -0
  1520. data/lib/readability_js/node/node_modules/w3c-xmlserializer/lib/attributes.js +125 -0
  1521. data/lib/readability_js/node/node_modules/w3c-xmlserializer/lib/constants.js +44 -0
  1522. data/lib/readability_js/node/node_modules/w3c-xmlserializer/lib/serialize.js +365 -0
  1523. data/lib/readability_js/node/node_modules/w3c-xmlserializer/package.json +32 -0
  1524. data/lib/readability_js/node/node_modules/webidl-conversions/LICENSE.md +12 -0
  1525. data/lib/readability_js/node/node_modules/webidl-conversions/README.md +99 -0
  1526. data/lib/readability_js/node/node_modules/webidl-conversions/lib/index.js +462 -0
  1527. data/lib/readability_js/node/node_modules/webidl-conversions/package.json +34 -0
  1528. data/lib/readability_js/node/node_modules/whatwg-encoding/LICENSE.txt +7 -0
  1529. data/lib/readability_js/node/node_modules/whatwg-encoding/README.md +50 -0
  1530. data/lib/readability_js/node/node_modules/whatwg-encoding/lib/labels-to-names.json +217 -0
  1531. data/lib/readability_js/node/node_modules/whatwg-encoding/lib/supported-names.json +38 -0
  1532. data/lib/readability_js/node/node_modules/whatwg-encoding/lib/whatwg-encoding.js +60 -0
  1533. data/lib/readability_js/node/node_modules/whatwg-encoding/package.json +32 -0
  1534. data/lib/readability_js/node/node_modules/whatwg-mimetype/LICENSE.txt +7 -0
  1535. data/lib/readability_js/node/node_modules/whatwg-mimetype/README.md +101 -0
  1536. data/lib/readability_js/node/node_modules/whatwg-mimetype/lib/mime-type-parameters.js +70 -0
  1537. data/lib/readability_js/node/node_modules/whatwg-mimetype/lib/mime-type.js +127 -0
  1538. data/lib/readability_js/node/node_modules/whatwg-mimetype/lib/parser.js +105 -0
  1539. data/lib/readability_js/node/node_modules/whatwg-mimetype/lib/serializer.js +25 -0
  1540. data/lib/readability_js/node/node_modules/whatwg-mimetype/lib/utils.js +60 -0
  1541. data/lib/readability_js/node/node_modules/whatwg-mimetype/package.json +45 -0
  1542. data/lib/readability_js/node/node_modules/whatwg-url/LICENSE.txt +21 -0
  1543. data/lib/readability_js/node/node_modules/whatwg-url/README.md +106 -0
  1544. data/lib/readability_js/node/node_modules/whatwg-url/index.js +27 -0
  1545. data/lib/readability_js/node/node_modules/whatwg-url/lib/Function.js +42 -0
  1546. data/lib/readability_js/node/node_modules/whatwg-url/lib/URL-impl.js +233 -0
  1547. data/lib/readability_js/node/node_modules/whatwg-url/lib/URL.js +499 -0
  1548. data/lib/readability_js/node/node_modules/whatwg-url/lib/URLSearchParams-impl.js +135 -0
  1549. data/lib/readability_js/node/node_modules/whatwg-url/lib/URLSearchParams.js +505 -0
  1550. data/lib/readability_js/node/node_modules/whatwg-url/lib/VoidFunction.js +26 -0
  1551. data/lib/readability_js/node/node_modules/whatwg-url/lib/encoding.js +16 -0
  1552. data/lib/readability_js/node/node_modules/whatwg-url/lib/infra.js +26 -0
  1553. data/lib/readability_js/node/node_modules/whatwg-url/lib/percent-encoding.js +142 -0
  1554. data/lib/readability_js/node/node_modules/whatwg-url/lib/url-state-machine.js +1277 -0
  1555. data/lib/readability_js/node/node_modules/whatwg-url/lib/urlencoded.js +89 -0
  1556. data/lib/readability_js/node/node_modules/whatwg-url/lib/utils.js +240 -0
  1557. data/lib/readability_js/node/node_modules/whatwg-url/package.json +56 -0
  1558. data/lib/readability_js/node/node_modules/whatwg-url/webidl2js-wrapper.js +7 -0
  1559. data/lib/readability_js/node/node_modules/ws/LICENSE +20 -0
  1560. data/lib/readability_js/node/node_modules/ws/README.md +548 -0
  1561. data/lib/readability_js/node/node_modules/ws/browser.js +8 -0
  1562. data/lib/readability_js/node/node_modules/ws/index.js +13 -0
  1563. data/lib/readability_js/node/node_modules/ws/lib/buffer-util.js +131 -0
  1564. data/lib/readability_js/node/node_modules/ws/lib/constants.js +18 -0
  1565. data/lib/readability_js/node/node_modules/ws/lib/event-target.js +292 -0
  1566. data/lib/readability_js/node/node_modules/ws/lib/extension.js +203 -0
  1567. data/lib/readability_js/node/node_modules/ws/lib/limiter.js +55 -0
  1568. data/lib/readability_js/node/node_modules/ws/lib/permessage-deflate.js +528 -0
  1569. data/lib/readability_js/node/node_modules/ws/lib/receiver.js +706 -0
  1570. data/lib/readability_js/node/node_modules/ws/lib/sender.js +602 -0
  1571. data/lib/readability_js/node/node_modules/ws/lib/stream.js +161 -0
  1572. data/lib/readability_js/node/node_modules/ws/lib/subprotocol.js +62 -0
  1573. data/lib/readability_js/node/node_modules/ws/lib/validation.js +152 -0
  1574. data/lib/readability_js/node/node_modules/ws/lib/websocket-server.js +550 -0
  1575. data/lib/readability_js/node/node_modules/ws/lib/websocket.js +1388 -0
  1576. data/lib/readability_js/node/node_modules/ws/package.json +69 -0
  1577. data/lib/readability_js/node/node_modules/ws/wrapper.mjs +8 -0
  1578. data/lib/readability_js/node/node_modules/xml-name-validator/LICENSE.txt +176 -0
  1579. data/lib/readability_js/node/node_modules/xml-name-validator/README.md +35 -0
  1580. data/lib/readability_js/node/node_modules/xml-name-validator/lib/xml-name-validator.js +9 -0
  1581. data/lib/readability_js/node/node_modules/xml-name-validator/package.json +30 -0
  1582. data/lib/readability_js/node/node_modules/xmlchars/LICENSE +18 -0
  1583. data/lib/readability_js/node/node_modules/xmlchars/README.md +33 -0
  1584. data/lib/readability_js/node/node_modules/xmlchars/package.json +51 -0
  1585. data/lib/readability_js/node/node_modules/xmlchars/xml/1.0/ed4.d.ts +31 -0
  1586. data/lib/readability_js/node/node_modules/xmlchars/xml/1.0/ed4.js +44 -0
  1587. data/lib/readability_js/node/node_modules/xmlchars/xml/1.0/ed4.js.map +1 -0
  1588. data/lib/readability_js/node/node_modules/xmlchars/xml/1.0/ed5.d.ts +51 -0
  1589. data/lib/readability_js/node/node_modules/xmlchars/xml/1.0/ed5.js +105 -0
  1590. data/lib/readability_js/node/node_modules/xmlchars/xml/1.0/ed5.js.map +1 -0
  1591. data/lib/readability_js/node/node_modules/xmlchars/xml/1.1/ed2.d.ts +73 -0
  1592. data/lib/readability_js/node/node_modules/xmlchars/xml/1.1/ed2.js +145 -0
  1593. data/lib/readability_js/node/node_modules/xmlchars/xml/1.1/ed2.js.map +1 -0
  1594. data/lib/readability_js/node/node_modules/xmlchars/xmlchars.d.ts +170 -0
  1595. data/lib/readability_js/node/node_modules/xmlchars/xmlchars.js +191 -0
  1596. data/lib/readability_js/node/node_modules/xmlchars/xmlchars.js.map +1 -0
  1597. data/lib/readability_js/node/node_modules/xmlchars/xmlns/1.0/ed3.d.ts +28 -0
  1598. data/lib/readability_js/node/node_modules/xmlchars/xmlns/1.0/ed3.js +65 -0
  1599. data/lib/readability_js/node/node_modules/xmlchars/xmlns/1.0/ed3.js.map +1 -0
  1600. data/lib/readability_js/node/package.json +9 -0
  1601. data/lib/readability_js/node/readability-example.js +10 -0
  1602. data/lib/readability_js/node/yarn.lock +315 -0
  1603. data/lib/readability_js/nodo.rb +67 -0
  1604. data/lib/readability_js/version.rb +3 -0
  1605. data/lib/readability_js.rb +207 -0
  1606. data/readability_js.gemspec +47 -0
  1607. metadata +1775 -0
@@ -0,0 +1,3511 @@
1
+ /**
2
+ * color
3
+ *
4
+ * Ref: CSS Color Module Level 4
5
+ * Sample code for Color Conversions
6
+ * https://w3c.github.io/csswg-drafts/css-color-4/#color-conversion-code
7
+ */
8
+
9
+ import {
10
+ CacheItem,
11
+ NullObject,
12
+ createCacheKey,
13
+ getCache,
14
+ setCache
15
+ } from './cache';
16
+ import { isString } from './common';
17
+ import { resolveColor } from './resolve';
18
+ import { interpolateHue, roundToPrecision, splitValue } from './util';
19
+ import {
20
+ ColorChannels,
21
+ ComputedColorChannels,
22
+ Options,
23
+ MatchedRegExp,
24
+ SpecifiedColorChannels,
25
+ StringColorChannels,
26
+ StringColorSpacedChannels
27
+ } from './typedef';
28
+
29
+ /* constants */
30
+ import {
31
+ ANGLE,
32
+ CS_HUE_CAPT,
33
+ CS_MIX,
34
+ CS_RGB,
35
+ CS_XYZ,
36
+ FN_COLOR,
37
+ FN_LIGHT_DARK,
38
+ FN_MIX,
39
+ NONE,
40
+ NUM,
41
+ PCT,
42
+ SYN_COLOR_TYPE,
43
+ SYN_FN_COLOR,
44
+ SYN_HSL,
45
+ SYN_HSL_LV3,
46
+ SYN_LCH,
47
+ SYN_MIX,
48
+ SYN_MIX_CAPT,
49
+ SYN_MIX_PART,
50
+ SYN_MOD,
51
+ SYN_RGB_LV3,
52
+ VAL_COMP,
53
+ VAL_MIX,
54
+ VAL_SPEC
55
+ } from './constant';
56
+ const NAMESPACE = 'color';
57
+
58
+ /* numeric constants */
59
+ const PPTH = 0.001;
60
+ const HALF = 0.5;
61
+ const DUO = 2;
62
+ const TRIA = 3;
63
+ const QUAD = 4;
64
+ const OCT = 8;
65
+ const DEC = 10;
66
+ const DOZ = 12;
67
+ const HEX = 16;
68
+ const SEXA = 60;
69
+ const DEG_HALF = 180;
70
+ const DEG = 360;
71
+ const MAX_PCT = 100;
72
+ const MAX_RGB = 255;
73
+ const POW_SQR = 2;
74
+ const POW_CUBE = 3;
75
+ const POW_LINEAR = 2.4;
76
+ const LINEAR_COEF = 12.92;
77
+ const LINEAR_OFFSET = 0.055;
78
+ const LAB_L = 116;
79
+ const LAB_A = 500;
80
+ const LAB_B = 200;
81
+ const LAB_EPSILON = 216 / 24389;
82
+ const LAB_KAPPA = 24389 / 27;
83
+
84
+ /* type definitions */
85
+ /**
86
+ * @type NumStrColorChannels - string or numeric color channels
87
+ */
88
+ type NumStrColorChannels = [
89
+ x: number | string,
90
+ y: number | string,
91
+ z: number | string,
92
+ alpha: number | string
93
+ ];
94
+
95
+ /**
96
+ * @type TriColorChannels - color channels without alpha
97
+ */
98
+ type TriColorChannels = [x: number, y: number, z: number];
99
+
100
+ /**
101
+ * @type ColorMatrix - color matrix
102
+ */
103
+ type ColorMatrix = [
104
+ r1: TriColorChannels,
105
+ r2: TriColorChannels,
106
+ r3: TriColorChannels
107
+ ];
108
+
109
+ /* white point */
110
+ const D50: TriColorChannels = [
111
+ 0.3457 / 0.3585,
112
+ 1.0,
113
+ (1.0 - 0.3457 - 0.3585) / 0.3585
114
+ ];
115
+ const MATRIX_D50_TO_D65: ColorMatrix = [
116
+ [0.955473421488075, -0.02309845494876471, 0.06325924320057072],
117
+ [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323],
118
+ [0.012314014864481998, -0.020507649298898964, 1.330365926242124]
119
+ ];
120
+ const MATRIX_D65_TO_D50: ColorMatrix = [
121
+ [1.0479297925449969, 0.022946870601609652, -0.05019226628920524],
122
+ [0.02962780877005599, 0.9904344267538799, -0.017073799063418826],
123
+ [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371]
124
+ ];
125
+
126
+ /* color space */
127
+ const MATRIX_L_RGB_TO_XYZ: ColorMatrix = [
128
+ [506752 / 1228815, 87881 / 245763, 12673 / 70218],
129
+ [87098 / 409605, 175762 / 245763, 12673 / 175545],
130
+ [7918 / 409605, 87881 / 737289, 1001167 / 1053270]
131
+ ];
132
+ const MATRIX_XYZ_TO_L_RGB: ColorMatrix = [
133
+ [12831 / 3959, -329 / 214, -1974 / 3959],
134
+ [-851781 / 878810, 1648619 / 878810, 36519 / 878810],
135
+ [705 / 12673, -2585 / 12673, 705 / 667]
136
+ ];
137
+ const MATRIX_XYZ_TO_LMS: ColorMatrix = [
138
+ [0.819022437996703, 0.3619062600528904, -0.1288737815209879],
139
+ [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],
140
+ [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]
141
+ ];
142
+ const MATRIX_LMS_TO_XYZ: ColorMatrix = [
143
+ [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],
144
+ [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],
145
+ [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]
146
+ ];
147
+ const MATRIX_OKLAB_TO_LMS: ColorMatrix = [
148
+ [1.0, 0.3963377773761749, 0.2158037573099136],
149
+ [1.0, -0.1055613458156586, -0.0638541728258133],
150
+ [1.0, -0.0894841775298119, -1.2914855480194092]
151
+ ];
152
+ const MATRIX_LMS_TO_OKLAB: ColorMatrix = [
153
+ [0.210454268309314, 0.7936177747023054, -0.0040720430116193],
154
+ [1.9779985324311684, -2.4285922420485799, 0.450593709617411],
155
+ [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]
156
+ ];
157
+ const MATRIX_P3_TO_XYZ: ColorMatrix = [
158
+ [608311 / 1250200, 189793 / 714400, 198249 / 1000160],
159
+ [35783 / 156275, 247089 / 357200, 198249 / 2500400],
160
+ [0 / 1, 32229 / 714400, 5220557 / 5000800]
161
+ ];
162
+ const MATRIX_REC2020_TO_XYZ: ColorMatrix = [
163
+ [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314],
164
+ [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157],
165
+ [0 / 1, 19567812 / 697040785, 295819943 / 278816314]
166
+ ];
167
+ const MATRIX_A98_TO_XYZ: ColorMatrix = [
168
+ [573536 / 994567, 263643 / 1420810, 187206 / 994567],
169
+ [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835],
170
+ [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835]
171
+ ];
172
+ const MATRIX_PROPHOTO_TO_XYZ_D50: ColorMatrix = [
173
+ [0.7977666449006423, 0.13518129740053308, 0.0313477341283922],
174
+ [0.2880748288194013, 0.711835234241873, 0.00008993693872564],
175
+ [0.0, 0.0, 0.8251046025104602]
176
+ ];
177
+
178
+ /* regexp */
179
+ const REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);
180
+ const REG_CS_HUE = new RegExp(`^${CS_HUE_CAPT}$`);
181
+ const REG_CS_XYZ = /^xyz(?:-d(?:50|65))?$/;
182
+ const REG_CURRENT = /^currentColor$/i;
183
+ const REG_FN_COLOR = new RegExp(`^color\\(\\s*(${SYN_FN_COLOR})\\s*\\)$`);
184
+ const REG_HSL = new RegExp(`^hsla?\\(\\s*(${SYN_HSL}|${SYN_HSL_LV3})\\s*\\)$`);
185
+ const REG_HWB = new RegExp(`^hwb\\(\\s*(${SYN_HSL})\\s*\\)$`);
186
+ const REG_LAB = new RegExp(`^lab\\(\\s*(${SYN_MOD})\\s*\\)$`);
187
+ const REG_LCH = new RegExp(`^lch\\(\\s*(${SYN_LCH})\\s*\\)$`);
188
+ const REG_MIX = new RegExp(`^${SYN_MIX}$`);
189
+ const REG_MIX_CAPT = new RegExp(`^${SYN_MIX_CAPT}$`);
190
+ const REG_MIX_NEST = new RegExp(`${SYN_MIX}`, 'g');
191
+ const REG_OKLAB = new RegExp(`^oklab\\(\\s*(${SYN_MOD})\\s*\\)$`);
192
+ const REG_OKLCH = new RegExp(`^oklch\\(\\s*(${SYN_LCH})\\s*\\)$`);
193
+ const REG_SPEC = /^(?:specifi|comput)edValue$/;
194
+
195
+ /**
196
+ * named colors
197
+ */
198
+ export const NAMED_COLORS = {
199
+ aliceblue: [0xf0, 0xf8, 0xff],
200
+ antiquewhite: [0xfa, 0xeb, 0xd7],
201
+ aqua: [0x00, 0xff, 0xff],
202
+ aquamarine: [0x7f, 0xff, 0xd4],
203
+ azure: [0xf0, 0xff, 0xff],
204
+ beige: [0xf5, 0xf5, 0xdc],
205
+ bisque: [0xff, 0xe4, 0xc4],
206
+ black: [0x00, 0x00, 0x00],
207
+ blanchedalmond: [0xff, 0xeb, 0xcd],
208
+ blue: [0x00, 0x00, 0xff],
209
+ blueviolet: [0x8a, 0x2b, 0xe2],
210
+ brown: [0xa5, 0x2a, 0x2a],
211
+ burlywood: [0xde, 0xb8, 0x87],
212
+ cadetblue: [0x5f, 0x9e, 0xa0],
213
+ chartreuse: [0x7f, 0xff, 0x00],
214
+ chocolate: [0xd2, 0x69, 0x1e],
215
+ coral: [0xff, 0x7f, 0x50],
216
+ cornflowerblue: [0x64, 0x95, 0xed],
217
+ cornsilk: [0xff, 0xf8, 0xdc],
218
+ crimson: [0xdc, 0x14, 0x3c],
219
+ cyan: [0x00, 0xff, 0xff],
220
+ darkblue: [0x00, 0x00, 0x8b],
221
+ darkcyan: [0x00, 0x8b, 0x8b],
222
+ darkgoldenrod: [0xb8, 0x86, 0x0b],
223
+ darkgray: [0xa9, 0xa9, 0xa9],
224
+ darkgreen: [0x00, 0x64, 0x00],
225
+ darkgrey: [0xa9, 0xa9, 0xa9],
226
+ darkkhaki: [0xbd, 0xb7, 0x6b],
227
+ darkmagenta: [0x8b, 0x00, 0x8b],
228
+ darkolivegreen: [0x55, 0x6b, 0x2f],
229
+ darkorange: [0xff, 0x8c, 0x00],
230
+ darkorchid: [0x99, 0x32, 0xcc],
231
+ darkred: [0x8b, 0x00, 0x00],
232
+ darksalmon: [0xe9, 0x96, 0x7a],
233
+ darkseagreen: [0x8f, 0xbc, 0x8f],
234
+ darkslateblue: [0x48, 0x3d, 0x8b],
235
+ darkslategray: [0x2f, 0x4f, 0x4f],
236
+ darkslategrey: [0x2f, 0x4f, 0x4f],
237
+ darkturquoise: [0x00, 0xce, 0xd1],
238
+ darkviolet: [0x94, 0x00, 0xd3],
239
+ deeppink: [0xff, 0x14, 0x93],
240
+ deepskyblue: [0x00, 0xbf, 0xff],
241
+ dimgray: [0x69, 0x69, 0x69],
242
+ dimgrey: [0x69, 0x69, 0x69],
243
+ dodgerblue: [0x1e, 0x90, 0xff],
244
+ firebrick: [0xb2, 0x22, 0x22],
245
+ floralwhite: [0xff, 0xfa, 0xf0],
246
+ forestgreen: [0x22, 0x8b, 0x22],
247
+ fuchsia: [0xff, 0x00, 0xff],
248
+ gainsboro: [0xdc, 0xdc, 0xdc],
249
+ ghostwhite: [0xf8, 0xf8, 0xff],
250
+ gold: [0xff, 0xd7, 0x00],
251
+ goldenrod: [0xda, 0xa5, 0x20],
252
+ gray: [0x80, 0x80, 0x80],
253
+ green: [0x00, 0x80, 0x00],
254
+ greenyellow: [0xad, 0xff, 0x2f],
255
+ grey: [0x80, 0x80, 0x80],
256
+ honeydew: [0xf0, 0xff, 0xf0],
257
+ hotpink: [0xff, 0x69, 0xb4],
258
+ indianred: [0xcd, 0x5c, 0x5c],
259
+ indigo: [0x4b, 0x00, 0x82],
260
+ ivory: [0xff, 0xff, 0xf0],
261
+ khaki: [0xf0, 0xe6, 0x8c],
262
+ lavender: [0xe6, 0xe6, 0xfa],
263
+ lavenderblush: [0xff, 0xf0, 0xf5],
264
+ lawngreen: [0x7c, 0xfc, 0x00],
265
+ lemonchiffon: [0xff, 0xfa, 0xcd],
266
+ lightblue: [0xad, 0xd8, 0xe6],
267
+ lightcoral: [0xf0, 0x80, 0x80],
268
+ lightcyan: [0xe0, 0xff, 0xff],
269
+ lightgoldenrodyellow: [0xfa, 0xfa, 0xd2],
270
+ lightgray: [0xd3, 0xd3, 0xd3],
271
+ lightgreen: [0x90, 0xee, 0x90],
272
+ lightgrey: [0xd3, 0xd3, 0xd3],
273
+ lightpink: [0xff, 0xb6, 0xc1],
274
+ lightsalmon: [0xff, 0xa0, 0x7a],
275
+ lightseagreen: [0x20, 0xb2, 0xaa],
276
+ lightskyblue: [0x87, 0xce, 0xfa],
277
+ lightslategray: [0x77, 0x88, 0x99],
278
+ lightslategrey: [0x77, 0x88, 0x99],
279
+ lightsteelblue: [0xb0, 0xc4, 0xde],
280
+ lightyellow: [0xff, 0xff, 0xe0],
281
+ lime: [0x00, 0xff, 0x00],
282
+ limegreen: [0x32, 0xcd, 0x32],
283
+ linen: [0xfa, 0xf0, 0xe6],
284
+ magenta: [0xff, 0x00, 0xff],
285
+ maroon: [0x80, 0x00, 0x00],
286
+ mediumaquamarine: [0x66, 0xcd, 0xaa],
287
+ mediumblue: [0x00, 0x00, 0xcd],
288
+ mediumorchid: [0xba, 0x55, 0xd3],
289
+ mediumpurple: [0x93, 0x70, 0xdb],
290
+ mediumseagreen: [0x3c, 0xb3, 0x71],
291
+ mediumslateblue: [0x7b, 0x68, 0xee],
292
+ mediumspringgreen: [0x00, 0xfa, 0x9a],
293
+ mediumturquoise: [0x48, 0xd1, 0xcc],
294
+ mediumvioletred: [0xc7, 0x15, 0x85],
295
+ midnightblue: [0x19, 0x19, 0x70],
296
+ mintcream: [0xf5, 0xff, 0xfa],
297
+ mistyrose: [0xff, 0xe4, 0xe1],
298
+ moccasin: [0xff, 0xe4, 0xb5],
299
+ navajowhite: [0xff, 0xde, 0xad],
300
+ navy: [0x00, 0x00, 0x80],
301
+ oldlace: [0xfd, 0xf5, 0xe6],
302
+ olive: [0x80, 0x80, 0x00],
303
+ olivedrab: [0x6b, 0x8e, 0x23],
304
+ orange: [0xff, 0xa5, 0x00],
305
+ orangered: [0xff, 0x45, 0x00],
306
+ orchid: [0xda, 0x70, 0xd6],
307
+ palegoldenrod: [0xee, 0xe8, 0xaa],
308
+ palegreen: [0x98, 0xfb, 0x98],
309
+ paleturquoise: [0xaf, 0xee, 0xee],
310
+ palevioletred: [0xdb, 0x70, 0x93],
311
+ papayawhip: [0xff, 0xef, 0xd5],
312
+ peachpuff: [0xff, 0xda, 0xb9],
313
+ peru: [0xcd, 0x85, 0x3f],
314
+ pink: [0xff, 0xc0, 0xcb],
315
+ plum: [0xdd, 0xa0, 0xdd],
316
+ powderblue: [0xb0, 0xe0, 0xe6],
317
+ purple: [0x80, 0x00, 0x80],
318
+ rebeccapurple: [0x66, 0x33, 0x99],
319
+ red: [0xff, 0x00, 0x00],
320
+ rosybrown: [0xbc, 0x8f, 0x8f],
321
+ royalblue: [0x41, 0x69, 0xe1],
322
+ saddlebrown: [0x8b, 0x45, 0x13],
323
+ salmon: [0xfa, 0x80, 0x72],
324
+ sandybrown: [0xf4, 0xa4, 0x60],
325
+ seagreen: [0x2e, 0x8b, 0x57],
326
+ seashell: [0xff, 0xf5, 0xee],
327
+ sienna: [0xa0, 0x52, 0x2d],
328
+ silver: [0xc0, 0xc0, 0xc0],
329
+ skyblue: [0x87, 0xce, 0xeb],
330
+ slateblue: [0x6a, 0x5a, 0xcd],
331
+ slategray: [0x70, 0x80, 0x90],
332
+ slategrey: [0x70, 0x80, 0x90],
333
+ snow: [0xff, 0xfa, 0xfa],
334
+ springgreen: [0x00, 0xff, 0x7f],
335
+ steelblue: [0x46, 0x82, 0xb4],
336
+ tan: [0xd2, 0xb4, 0x8c],
337
+ teal: [0x00, 0x80, 0x80],
338
+ thistle: [0xd8, 0xbf, 0xd8],
339
+ tomato: [0xff, 0x63, 0x47],
340
+ turquoise: [0x40, 0xe0, 0xd0],
341
+ violet: [0xee, 0x82, 0xee],
342
+ wheat: [0xf5, 0xde, 0xb3],
343
+ white: [0xff, 0xff, 0xff],
344
+ whitesmoke: [0xf5, 0xf5, 0xf5],
345
+ yellow: [0xff, 0xff, 0x00],
346
+ yellowgreen: [0x9a, 0xcd, 0x32]
347
+ } as const satisfies {
348
+ [key: string]: TriColorChannels;
349
+ };
350
+
351
+ /**
352
+ * cache invalid color value
353
+ * @param key - cache key
354
+ * @param nullable - is nullable
355
+ * @returns cached value
356
+ */
357
+ export const cacheInvalidColorValue = (
358
+ cacheKey: string,
359
+ format: string,
360
+ nullable: boolean = false
361
+ ): SpecifiedColorChannels | string | NullObject => {
362
+ if (format === VAL_SPEC) {
363
+ const res = '';
364
+ setCache(cacheKey, res);
365
+ return res;
366
+ }
367
+ if (nullable) {
368
+ setCache(cacheKey, null);
369
+ return new NullObject();
370
+ }
371
+ const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];
372
+ setCache(cacheKey, res);
373
+ return res;
374
+ };
375
+
376
+ /**
377
+ * resolve invalid color value
378
+ * @param format - output format
379
+ * @param nullable - is nullable
380
+ * @returns resolved value
381
+ */
382
+ export const resolveInvalidColorValue = (
383
+ format: string,
384
+ nullable: boolean = false
385
+ ): SpecifiedColorChannels | string | NullObject => {
386
+ switch (format) {
387
+ case 'hsl':
388
+ case 'hwb':
389
+ case VAL_MIX: {
390
+ return new NullObject();
391
+ }
392
+ case VAL_SPEC: {
393
+ return '';
394
+ }
395
+ default: {
396
+ if (nullable) {
397
+ return new NullObject();
398
+ }
399
+ return ['rgb', 0, 0, 0, 0] as SpecifiedColorChannels;
400
+ }
401
+ }
402
+ };
403
+
404
+ /**
405
+ * validate color components
406
+ * @param arr - color components
407
+ * @param [opt] - options
408
+ * @param [opt.alpha] - alpha channel
409
+ * @param [opt.minLength] - min length
410
+ * @param [opt.maxLength] - max length
411
+ * @param [opt.minRange] - min range
412
+ * @param [opt.maxRange] - max range
413
+ * @param [opt.validateRange] - validate range
414
+ * @returns result - validated color components
415
+ */
416
+ export const validateColorComponents = (
417
+ arr: ColorChannels | TriColorChannels,
418
+ opt: {
419
+ alpha?: boolean;
420
+ minLength?: number;
421
+ maxLength?: number;
422
+ minRange?: number;
423
+ maxRange?: number;
424
+ validateRange?: boolean;
425
+ } = {}
426
+ ): ColorChannels | TriColorChannels => {
427
+ if (!Array.isArray(arr)) {
428
+ throw new TypeError(`${arr} is not an array.`);
429
+ }
430
+ const {
431
+ alpha = false,
432
+ minLength = TRIA,
433
+ maxLength = QUAD,
434
+ minRange = 0,
435
+ maxRange = 1,
436
+ validateRange = true
437
+ } = opt;
438
+ if (!Number.isFinite(minLength)) {
439
+ throw new TypeError(`${minLength} is not a number.`);
440
+ }
441
+ if (!Number.isFinite(maxLength)) {
442
+ throw new TypeError(`${maxLength} is not a number.`);
443
+ }
444
+ if (!Number.isFinite(minRange)) {
445
+ throw new TypeError(`${minRange} is not a number.`);
446
+ }
447
+ if (!Number.isFinite(maxRange)) {
448
+ throw new TypeError(`${maxRange} is not a number.`);
449
+ }
450
+ const l = arr.length;
451
+ if (l < minLength || l > maxLength) {
452
+ throw new Error(`Unexpected array length ${l}.`);
453
+ }
454
+ let i = 0;
455
+ while (i < l) {
456
+ const v = arr[i] as number;
457
+ if (!Number.isFinite(v)) {
458
+ throw new TypeError(`${v} is not a number.`);
459
+ } else if (i < TRIA && validateRange && (v < minRange || v > maxRange)) {
460
+ throw new RangeError(`${v} is not between ${minRange} and ${maxRange}.`);
461
+ } else if (i === TRIA && (v < 0 || v > 1)) {
462
+ throw new RangeError(`${v} is not between 0 and 1.`);
463
+ }
464
+ i++;
465
+ }
466
+ if (alpha && l === TRIA) {
467
+ arr.push(1);
468
+ }
469
+ return arr;
470
+ };
471
+
472
+ /**
473
+ * transform matrix
474
+ * @param mtx - 3 * 3 matrix
475
+ * @param vct - vector
476
+ * @param [skip] - skip validate
477
+ * @returns TriColorChannels - [p1, p2, p3]
478
+ */
479
+ export const transformMatrix = (
480
+ mtx: ColorMatrix,
481
+ vct: TriColorChannels,
482
+ skip: boolean = false
483
+ ): TriColorChannels => {
484
+ if (!Array.isArray(mtx)) {
485
+ throw new TypeError(`${mtx} is not an array.`);
486
+ } else if (mtx.length !== TRIA) {
487
+ throw new Error(`Unexpected array length ${mtx.length}.`);
488
+ } else if (!skip) {
489
+ for (let i of mtx) {
490
+ i = validateColorComponents(i as TriColorChannels, {
491
+ maxLength: TRIA,
492
+ validateRange: false
493
+ }) as TriColorChannels;
494
+ }
495
+ }
496
+ const [[r1c1, r1c2, r1c3], [r2c1, r2c2, r2c3], [r3c1, r3c2, r3c3]] = mtx;
497
+ let v1, v2, v3;
498
+ if (skip) {
499
+ [v1, v2, v3] = vct;
500
+ } else {
501
+ [v1, v2, v3] = validateColorComponents(vct, {
502
+ maxLength: TRIA,
503
+ validateRange: false
504
+ });
505
+ }
506
+ const p1 = r1c1 * v1 + r1c2 * v2 + r1c3 * v3;
507
+ const p2 = r2c1 * v1 + r2c2 * v2 + r2c3 * v3;
508
+ const p3 = r3c1 * v1 + r3c2 * v2 + r3c3 * v3;
509
+ return [p1, p2, p3];
510
+ };
511
+
512
+ /**
513
+ * normalize color components
514
+ * @param colorA - color components [v1, v2, v3, v4]
515
+ * @param colorB - color components [v1, v2, v3, v4]
516
+ * @param [skip] - skip validate
517
+ * @returns result - [colorA, colorB]
518
+ */
519
+ export const normalizeColorComponents = (
520
+ colorA: [number | string, number | string, number | string, number | string],
521
+ colorB: [number | string, number | string, number | string, number | string],
522
+ skip: boolean = false
523
+ ): [ColorChannels, ColorChannels] => {
524
+ if (!Array.isArray(colorA)) {
525
+ throw new TypeError(`${colorA} is not an array.`);
526
+ } else if (colorA.length !== QUAD) {
527
+ throw new Error(`Unexpected array length ${colorA.length}.`);
528
+ }
529
+ if (!Array.isArray(colorB)) {
530
+ throw new TypeError(`${colorB} is not an array.`);
531
+ } else if (colorB.length !== QUAD) {
532
+ throw new Error(`Unexpected array length ${colorB.length}.`);
533
+ }
534
+ let i = 0;
535
+ while (i < QUAD) {
536
+ if (colorA[i] === NONE && colorB[i] === NONE) {
537
+ colorA[i] = 0;
538
+ colorB[i] = 0;
539
+ } else if (colorA[i] === NONE) {
540
+ colorA[i] = colorB[i] as number;
541
+ } else if (colorB[i] === NONE) {
542
+ colorB[i] = colorA[i] as number;
543
+ }
544
+ i++;
545
+ }
546
+ if (skip) {
547
+ return [colorA as ColorChannels, colorB as ColorChannels];
548
+ }
549
+ const validatedColorA = validateColorComponents(colorA as ColorChannels, {
550
+ minLength: QUAD,
551
+ validateRange: false
552
+ });
553
+ const validatedColorB = validateColorComponents(colorB as ColorChannels, {
554
+ minLength: QUAD,
555
+ validateRange: false
556
+ });
557
+ return [validatedColorA as ColorChannels, validatedColorB as ColorChannels];
558
+ };
559
+
560
+ /**
561
+ * number to hex string
562
+ * @param value - numeric value
563
+ * @returns hex string
564
+ */
565
+ export const numberToHexString = (value: number): string => {
566
+ if (!Number.isFinite(value)) {
567
+ throw new TypeError(`${value} is not a number.`);
568
+ } else {
569
+ value = Math.round(value);
570
+ if (value < 0 || value > MAX_RGB) {
571
+ throw new RangeError(`${value} is not between 0 and ${MAX_RGB}.`);
572
+ }
573
+ }
574
+ let hex = value.toString(HEX);
575
+ if (hex.length === 1) {
576
+ hex = `0${hex}`;
577
+ }
578
+ return hex;
579
+ };
580
+
581
+ /**
582
+ * angle to deg
583
+ * @param angle
584
+ * @returns deg: 0..360
585
+ */
586
+ export const angleToDeg = (angle: string): number => {
587
+ if (isString(angle)) {
588
+ angle = angle.trim();
589
+ } else {
590
+ throw new TypeError(`${angle} is not a string.`);
591
+ }
592
+ const GRAD = DEG / 400;
593
+ const RAD = DEG / (Math.PI * DUO);
594
+ const reg = new RegExp(`^(${NUM})(${ANGLE})?$`);
595
+ if (!reg.test(angle)) {
596
+ throw new SyntaxError(`Invalid property value: ${angle}`);
597
+ }
598
+ const [, value, unit] = angle.match(reg) as MatchedRegExp;
599
+ let deg;
600
+ switch (unit) {
601
+ case 'grad':
602
+ deg = parseFloat(value) * GRAD;
603
+ break;
604
+ case 'rad':
605
+ deg = parseFloat(value) * RAD;
606
+ break;
607
+ case 'turn':
608
+ deg = parseFloat(value) * DEG;
609
+ break;
610
+ default:
611
+ deg = parseFloat(value);
612
+ }
613
+ deg %= DEG;
614
+ if (deg < 0) {
615
+ deg += DEG;
616
+ } else if (Object.is(deg, -0)) {
617
+ deg = 0;
618
+ }
619
+ return deg;
620
+ };
621
+
622
+ /**
623
+ * parse alpha
624
+ * @param [alpha] - alpha value
625
+ * @returns alpha: 0..1
626
+ */
627
+ export const parseAlpha = (alpha: string = ''): number => {
628
+ if (isString(alpha)) {
629
+ alpha = alpha.trim();
630
+ if (!alpha) {
631
+ alpha = '1';
632
+ } else if (alpha === NONE) {
633
+ alpha = '0';
634
+ } else {
635
+ let a;
636
+ if (alpha.endsWith('%')) {
637
+ a = parseFloat(alpha) / MAX_PCT;
638
+ } else {
639
+ a = parseFloat(alpha);
640
+ }
641
+ if (!Number.isFinite(a)) {
642
+ throw new TypeError(`${a} is not a finite number.`);
643
+ }
644
+ if (a < PPTH) {
645
+ alpha = '0';
646
+ } else if (a > 1) {
647
+ alpha = '1';
648
+ } else {
649
+ alpha = a.toFixed(TRIA);
650
+ }
651
+ }
652
+ } else {
653
+ alpha = '1';
654
+ }
655
+ return parseFloat(alpha);
656
+ };
657
+
658
+ /**
659
+ * parse hex alpha
660
+ * @param value - alpha value in hex string
661
+ * @returns alpha: 0..1
662
+ */
663
+ export const parseHexAlpha = (value: string): number => {
664
+ if (isString(value)) {
665
+ if (value === '') {
666
+ throw new SyntaxError('Invalid property value: (empty string)');
667
+ }
668
+ value = value.trim();
669
+ } else {
670
+ throw new TypeError(`${value} is not a string.`);
671
+ }
672
+ let alpha = parseInt(value, HEX);
673
+ if (alpha <= 0) {
674
+ return 0;
675
+ }
676
+ if (alpha >= MAX_RGB) {
677
+ return 1;
678
+ }
679
+ const alphaMap = new Map();
680
+ for (let i = 1; i < MAX_PCT; i++) {
681
+ alphaMap.set(Math.round((i * MAX_RGB) / MAX_PCT), i);
682
+ }
683
+ if (alphaMap.has(alpha)) {
684
+ alpha = alphaMap.get(alpha) / MAX_PCT;
685
+ } else {
686
+ alpha = Math.round(alpha / MAX_RGB / PPTH) * PPTH;
687
+ }
688
+ return parseFloat(alpha.toFixed(TRIA));
689
+ };
690
+
691
+ /**
692
+ * transform rgb to linear rgb
693
+ * @param rgb - [r, g, b] r|g|b: 0..255
694
+ * @param [skip] - skip validate
695
+ * @returns TriColorChannels - [r, g, b] r|g|b: 0..1
696
+ */
697
+ export const transformRgbToLinearRgb = (
698
+ rgb: TriColorChannels,
699
+ skip: boolean = false
700
+ ): TriColorChannels => {
701
+ let rr, gg, bb;
702
+ if (skip) {
703
+ [rr, gg, bb] = rgb;
704
+ } else {
705
+ [rr, gg, bb] = validateColorComponents(rgb, {
706
+ maxLength: TRIA,
707
+ maxRange: MAX_RGB
708
+ });
709
+ }
710
+ let r = rr / MAX_RGB;
711
+ let g = gg / MAX_RGB;
712
+ let b = bb / MAX_RGB;
713
+ const COND_POW = 0.04045;
714
+ if (r > COND_POW) {
715
+ r = Math.pow((r + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);
716
+ } else {
717
+ r /= LINEAR_COEF;
718
+ }
719
+ if (g > COND_POW) {
720
+ g = Math.pow((g + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);
721
+ } else {
722
+ g /= LINEAR_COEF;
723
+ }
724
+ if (b > COND_POW) {
725
+ b = Math.pow((b + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);
726
+ } else {
727
+ b /= LINEAR_COEF;
728
+ }
729
+ return [r, g, b];
730
+ };
731
+
732
+ /**
733
+ * transform rgb to xyz
734
+ * @param rgb - [r, g, b] r|g|b: 0..255
735
+ * @param [skip] - skip validate
736
+ * @returns TriColorChannels - [x, y, z]
737
+ */
738
+ export const transformRgbToXyz = (
739
+ rgb: TriColorChannels,
740
+ skip: boolean = false
741
+ ): TriColorChannels => {
742
+ if (!skip) {
743
+ rgb = validateColorComponents(rgb, {
744
+ maxLength: TRIA,
745
+ maxRange: MAX_RGB
746
+ }) as TriColorChannels;
747
+ }
748
+ rgb = transformRgbToLinearRgb(rgb, true);
749
+ const xyz = transformMatrix(MATRIX_L_RGB_TO_XYZ, rgb, true);
750
+ return xyz;
751
+ };
752
+
753
+ /**
754
+ * transform rgb to xyz-d50
755
+ * @param rgb - [r, g, b] r|g|b: 0..255 alpha: 0..1
756
+ * @returns TriColorChannels - [x, y, z]
757
+ */
758
+ export const transformRgbToXyzD50 = (
759
+ rgb: TriColorChannels
760
+ ): TriColorChannels => {
761
+ let xyz = transformRgbToXyz(rgb);
762
+ xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);
763
+ return xyz;
764
+ };
765
+
766
+ /**
767
+ * transform linear rgb to rgb
768
+ * @param rgb - [r, g, b] r|g|b: 0..1
769
+ * @param [round] - round result
770
+ * @returns TriColorChannels - [r, g, b] r|g|b: 0..255
771
+ */
772
+ export const transformLinearRgbToRgb = (
773
+ rgb: TriColorChannels,
774
+ round: boolean = false
775
+ ): TriColorChannels => {
776
+ let [r, g, b] = validateColorComponents(rgb, {
777
+ maxLength: TRIA
778
+ });
779
+ const COND_POW = 809 / 258400;
780
+ if (r > COND_POW) {
781
+ r = Math.pow(r, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;
782
+ } else {
783
+ r *= LINEAR_COEF;
784
+ }
785
+ r *= MAX_RGB;
786
+ if (g > COND_POW) {
787
+ g = Math.pow(g, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;
788
+ } else {
789
+ g *= LINEAR_COEF;
790
+ }
791
+ g *= MAX_RGB;
792
+ if (b > COND_POW) {
793
+ b = Math.pow(b, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;
794
+ } else {
795
+ b *= LINEAR_COEF;
796
+ }
797
+ b *= MAX_RGB;
798
+ return [
799
+ round ? Math.round(r) : r,
800
+ round ? Math.round(g) : g,
801
+ round ? Math.round(b) : b
802
+ ];
803
+ };
804
+
805
+ /**
806
+ * transform xyz to rgb
807
+ * @param xyz - [x, y, z]
808
+ * @param [skip] - skip validate
809
+ * @returns TriColorChannels - [r, g, b] r|g|b: 0..255
810
+ */
811
+ export const transformXyzToRgb = (
812
+ xyz: TriColorChannels,
813
+ skip: boolean = false
814
+ ): TriColorChannels => {
815
+ if (!skip) {
816
+ xyz = validateColorComponents(xyz, {
817
+ maxLength: TRIA,
818
+ validateRange: false
819
+ }) as TriColorChannels;
820
+ }
821
+ let [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyz, true);
822
+ [r, g, b] = transformLinearRgbToRgb(
823
+ [
824
+ Math.min(Math.max(r, 0), 1),
825
+ Math.min(Math.max(g, 0), 1),
826
+ Math.min(Math.max(b, 0), 1)
827
+ ],
828
+ true
829
+ );
830
+ return [r, g, b];
831
+ };
832
+
833
+ /**
834
+ * transform xyz to xyz-d50
835
+ * @param xyz - [x, y, z]
836
+ * @returns TriColorChannels - [x, y, z]
837
+ */
838
+ export const transformXyzToXyzD50 = (
839
+ xyz: TriColorChannels
840
+ ): TriColorChannels => {
841
+ xyz = validateColorComponents(xyz, {
842
+ maxLength: TRIA,
843
+ validateRange: false
844
+ }) as TriColorChannels;
845
+ xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);
846
+ return xyz;
847
+ };
848
+
849
+ /**
850
+ * transform xyz to hsl
851
+ * @param xyz - [x, y, z]
852
+ * @param [skip] - skip validate
853
+ * @returns TriColorChannels - [h, s, l]
854
+ */
855
+ export const transformXyzToHsl = (
856
+ xyz: TriColorChannels,
857
+ skip: boolean = false
858
+ ): TriColorChannels => {
859
+ const [rr, gg, bb] = transformXyzToRgb(xyz, skip);
860
+ const r = rr / MAX_RGB;
861
+ const g = gg / MAX_RGB;
862
+ const b = bb / MAX_RGB;
863
+ const max = Math.max(r, g, b);
864
+ const min = Math.min(r, g, b);
865
+ const d = max - min;
866
+ const l = (max + min) * HALF * MAX_PCT;
867
+ let h, s;
868
+ if (Math.round(l) === 0 || Math.round(l) === MAX_PCT) {
869
+ h = 0;
870
+ s = 0;
871
+ } else {
872
+ s = (d / (1 - Math.abs(max + min - 1))) * MAX_PCT;
873
+ if (s === 0) {
874
+ h = 0;
875
+ } else {
876
+ switch (max) {
877
+ case r:
878
+ h = (g - b) / d;
879
+ break;
880
+ case g:
881
+ h = (b - r) / d + DUO;
882
+ break;
883
+ case b:
884
+ default:
885
+ h = (r - g) / d + QUAD;
886
+ break;
887
+ }
888
+ h = (h * SEXA) % DEG;
889
+ if (h < 0) {
890
+ h += DEG;
891
+ }
892
+ }
893
+ }
894
+ return [h, s, l];
895
+ };
896
+
897
+ /**
898
+ * transform xyz to hwb
899
+ * @param xyz - [x, y, z]
900
+ * @param [skip] - skip validate
901
+ * @returns TriColorChannels - [h, w, b]
902
+ */
903
+ export const transformXyzToHwb = (
904
+ xyz: TriColorChannels,
905
+ skip: boolean = false
906
+ ): TriColorChannels => {
907
+ const [r, g, b] = transformXyzToRgb(xyz, skip);
908
+ const wh = Math.min(r, g, b) / MAX_RGB;
909
+ const bk = 1 - Math.max(r, g, b) / MAX_RGB;
910
+ let h;
911
+ if (wh + bk === 1) {
912
+ h = 0;
913
+ } else {
914
+ [h] = transformXyzToHsl(xyz);
915
+ }
916
+ return [h, wh * MAX_PCT, bk * MAX_PCT];
917
+ };
918
+
919
+ /**
920
+ * transform xyz to oklab
921
+ * @param xyz - [x, y, z]
922
+ * @param [skip] - skip validate
923
+ * @returns TriColorChannels - [l, a, b]
924
+ */
925
+ export const transformXyzToOklab = (
926
+ xyz: TriColorChannels,
927
+ skip: boolean = false
928
+ ): TriColorChannels => {
929
+ if (!skip) {
930
+ xyz = validateColorComponents(xyz, {
931
+ maxLength: TRIA,
932
+ validateRange: false
933
+ }) as TriColorChannels;
934
+ }
935
+ const lms = transformMatrix(MATRIX_XYZ_TO_LMS, xyz, true);
936
+ const xyzLms = lms.map(c => Math.cbrt(c)) as TriColorChannels;
937
+ let [l, a, b] = transformMatrix(MATRIX_LMS_TO_OKLAB, xyzLms, true);
938
+ l = Math.min(Math.max(l, 0), 1);
939
+ const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);
940
+ if (lPct === 0 || lPct === MAX_PCT) {
941
+ a = 0;
942
+ b = 0;
943
+ }
944
+ return [l, a, b];
945
+ };
946
+
947
+ /**
948
+ * transform xyz to oklch
949
+ * @param xyz - [x, y, z]
950
+ * @param [skip] - skip validate
951
+ * @returns TriColorChannels - [l, c, h]
952
+ */
953
+ export const transformXyzToOklch = (
954
+ xyz: TriColorChannels,
955
+ skip: boolean = false
956
+ ): TriColorChannels => {
957
+ const [l, a, b] = transformXyzToOklab(xyz, skip);
958
+ let c, h;
959
+ const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);
960
+ if (lPct === 0 || lPct === MAX_PCT) {
961
+ c = 0;
962
+ h = 0;
963
+ } else {
964
+ c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);
965
+ if (parseFloat(c.toFixed(QUAD)) === 0) {
966
+ h = 0;
967
+ } else {
968
+ h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;
969
+ if (h < 0) {
970
+ h += DEG;
971
+ }
972
+ }
973
+ }
974
+ return [l, c, h];
975
+ };
976
+
977
+ /**
978
+ * transform xyz D50 to rgb
979
+ * @param xyz - [x, y, z]
980
+ * @param [skip] - skip validate
981
+ * @returns TriColorChannels - [r, g, b] r|g|b: 0..255
982
+ */
983
+ export const transformXyzD50ToRgb = (
984
+ xyz: TriColorChannels,
985
+ skip: boolean = false
986
+ ): TriColorChannels => {
987
+ if (!skip) {
988
+ xyz = validateColorComponents(xyz, {
989
+ maxLength: TRIA,
990
+ validateRange: false
991
+ }) as TriColorChannels;
992
+ }
993
+ const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, xyz, true);
994
+ const rgb = transformXyzToRgb(xyzD65, true);
995
+ return rgb;
996
+ };
997
+
998
+ /**
999
+ * transform xyz-d50 to lab
1000
+ * @param xyz - [x, y, z]
1001
+ * @param [skip] - skip validate
1002
+ * @returns TriColorChannels - [l, a, b]
1003
+ */
1004
+ export const transformXyzD50ToLab = (
1005
+ xyz: TriColorChannels,
1006
+ skip: boolean = false
1007
+ ): TriColorChannels => {
1008
+ if (!skip) {
1009
+ xyz = validateColorComponents(xyz, {
1010
+ maxLength: TRIA,
1011
+ validateRange: false
1012
+ }) as TriColorChannels;
1013
+ }
1014
+ const xyzD50 = xyz.map((val, i) => val / (D50[i] as number));
1015
+ const [f0, f1, f2] = xyzD50.map(val =>
1016
+ val > LAB_EPSILON ? Math.cbrt(val) : (val * LAB_KAPPA + HEX) / LAB_L
1017
+ ) as TriColorChannels;
1018
+ const l = Math.min(Math.max(LAB_L * f1 - HEX, 0), MAX_PCT);
1019
+ let a, b;
1020
+ if (l === 0 || l === MAX_PCT) {
1021
+ a = 0;
1022
+ b = 0;
1023
+ } else {
1024
+ a = (f0 - f1) * LAB_A;
1025
+ b = (f1 - f2) * LAB_B;
1026
+ }
1027
+ return [l, a, b];
1028
+ };
1029
+
1030
+ /**
1031
+ * transform xyz-d50 to lch
1032
+ * @param xyz - [x, y, z]
1033
+ * @param [skip] - skip validate
1034
+ * @returns TriColorChannels - [l, c, h]
1035
+ */
1036
+ export const transformXyzD50ToLch = (
1037
+ xyz: TriColorChannels,
1038
+ skip: boolean = false
1039
+ ): TriColorChannels => {
1040
+ const [l, a, b] = transformXyzD50ToLab(xyz, skip);
1041
+ let c, h;
1042
+ if (l === 0 || l === MAX_PCT) {
1043
+ c = 0;
1044
+ h = 0;
1045
+ } else {
1046
+ c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);
1047
+ h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;
1048
+ if (h < 0) {
1049
+ h += DEG;
1050
+ }
1051
+ }
1052
+ return [l, c, h];
1053
+ };
1054
+
1055
+ /**
1056
+ * convert rgb to hex color
1057
+ * @param rgb - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1
1058
+ * @returns hex color
1059
+ */
1060
+ export const convertRgbToHex = (rgb: ColorChannels): string => {
1061
+ const [r, g, b, alpha] = validateColorComponents(rgb, {
1062
+ alpha: true,
1063
+ maxRange: MAX_RGB
1064
+ }) as ColorChannels;
1065
+ const rr = numberToHexString(r);
1066
+ const gg = numberToHexString(g);
1067
+ const bb = numberToHexString(b);
1068
+ const aa = numberToHexString(alpha * MAX_RGB);
1069
+ let hex;
1070
+ if (aa === 'ff') {
1071
+ hex = `#${rr}${gg}${bb}`;
1072
+ } else {
1073
+ hex = `#${rr}${gg}${bb}${aa}`;
1074
+ }
1075
+ return hex;
1076
+ };
1077
+
1078
+ /**
1079
+ * convert linear rgb to hex color
1080
+ * @param rgb - [r, g, b, alpha] r|g|b|alpha: 0..1
1081
+ * @param [skip] - skip validate
1082
+ * @returns hex color
1083
+ */
1084
+ export const convertLinearRgbToHex = (
1085
+ rgb: ColorChannels,
1086
+ skip: boolean = false
1087
+ ): string => {
1088
+ let r, g, b, alpha;
1089
+ if (skip) {
1090
+ [r, g, b, alpha] = rgb;
1091
+ } else {
1092
+ [r, g, b, alpha] = validateColorComponents(rgb, {
1093
+ minLength: QUAD
1094
+ }) as ColorChannels;
1095
+ }
1096
+ [r, g, b] = transformLinearRgbToRgb([r, g, b], true);
1097
+ const rr = numberToHexString(r);
1098
+ const gg = numberToHexString(g);
1099
+ const bb = numberToHexString(b);
1100
+ const aa = numberToHexString(alpha * MAX_RGB);
1101
+ let hex;
1102
+ if (aa === 'ff') {
1103
+ hex = `#${rr}${gg}${bb}`;
1104
+ } else {
1105
+ hex = `#${rr}${gg}${bb}${aa}`;
1106
+ }
1107
+ return hex;
1108
+ };
1109
+
1110
+ /**
1111
+ * convert xyz to hex color
1112
+ * @param xyz - [x, y, z, alpha]
1113
+ * @returns hex color
1114
+ */
1115
+ export const convertXyzToHex = (xyz: ColorChannels): string => {
1116
+ const [x, y, z, alpha] = validateColorComponents(xyz, {
1117
+ minLength: QUAD,
1118
+ validateRange: false
1119
+ }) as ColorChannels;
1120
+ const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);
1121
+ const hex = convertLinearRgbToHex(
1122
+ [
1123
+ Math.min(Math.max(r, 0), 1),
1124
+ Math.min(Math.max(g, 0), 1),
1125
+ Math.min(Math.max(b, 0), 1),
1126
+ alpha
1127
+ ],
1128
+ true
1129
+ );
1130
+ return hex;
1131
+ };
1132
+
1133
+ /**
1134
+ * convert xyz D50 to hex color
1135
+ * @param xyz - [x, y, z, alpha]
1136
+ * @returns hex color
1137
+ */
1138
+ export const convertXyzD50ToHex = (xyz: ColorChannels): string => {
1139
+ const [x, y, z, alpha] = validateColorComponents(xyz, {
1140
+ minLength: QUAD,
1141
+ validateRange: false
1142
+ }) as ColorChannels;
1143
+ const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);
1144
+ const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyzD65, true);
1145
+ const hex = convertLinearRgbToHex([
1146
+ Math.min(Math.max(r, 0), 1),
1147
+ Math.min(Math.max(g, 0), 1),
1148
+ Math.min(Math.max(b, 0), 1),
1149
+ alpha
1150
+ ]);
1151
+ return hex;
1152
+ };
1153
+
1154
+ /**
1155
+ * convert hex color to rgb
1156
+ * @param value - hex color value
1157
+ * @returns ColorChannels - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1
1158
+ */
1159
+ export const convertHexToRgb = (value: string): ColorChannels => {
1160
+ if (isString(value)) {
1161
+ value = value.toLowerCase().trim();
1162
+ } else {
1163
+ throw new TypeError(`${value} is not a string.`);
1164
+ }
1165
+ if (
1166
+ !(
1167
+ /^#[\da-f]{6}$/.test(value) ||
1168
+ /^#[\da-f]{3}$/.test(value) ||
1169
+ /^#[\da-f]{8}$/.test(value) ||
1170
+ /^#[\da-f]{4}$/.test(value)
1171
+ )
1172
+ ) {
1173
+ throw new SyntaxError(`Invalid property value: ${value}`);
1174
+ }
1175
+ const arr: number[] = [];
1176
+ if (/^#[\da-f]{3}$/.test(value)) {
1177
+ const [, r, g, b] = value.match(
1178
+ /^#([\da-f])([\da-f])([\da-f])$/
1179
+ ) as MatchedRegExp;
1180
+ arr.push(
1181
+ parseInt(`${r}${r}`, HEX),
1182
+ parseInt(`${g}${g}`, HEX),
1183
+ parseInt(`${b}${b}`, HEX),
1184
+ 1
1185
+ );
1186
+ } else if (/^#[\da-f]{4}$/.test(value)) {
1187
+ const [, r, g, b, alpha] = value.match(
1188
+ /^#([\da-f])([\da-f])([\da-f])([\da-f])$/
1189
+ ) as MatchedRegExp;
1190
+ arr.push(
1191
+ parseInt(`${r}${r}`, HEX),
1192
+ parseInt(`${g}${g}`, HEX),
1193
+ parseInt(`${b}${b}`, HEX),
1194
+ parseHexAlpha(`${alpha}${alpha}`)
1195
+ );
1196
+ } else if (/^#[\da-f]{8}$/.test(value)) {
1197
+ const [, r, g, b, alpha] = value.match(
1198
+ /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})$/
1199
+ ) as MatchedRegExp;
1200
+ arr.push(
1201
+ parseInt(r, HEX),
1202
+ parseInt(g, HEX),
1203
+ parseInt(b, HEX),
1204
+ parseHexAlpha(alpha)
1205
+ );
1206
+ } else {
1207
+ const [, r, g, b] = value.match(
1208
+ /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/
1209
+ ) as MatchedRegExp;
1210
+ arr.push(parseInt(r, HEX), parseInt(g, HEX), parseInt(b, HEX), 1);
1211
+ }
1212
+ return arr as ColorChannels;
1213
+ };
1214
+
1215
+ /**
1216
+ * convert hex color to linear rgb
1217
+ * @param value - hex color value
1218
+ * @returns ColorChannels - [r, g, b, alpha] r|g|b|alpha: 0..1
1219
+ */
1220
+ export const convertHexToLinearRgb = (value: string): ColorChannels => {
1221
+ const [rr, gg, bb, alpha] = convertHexToRgb(value);
1222
+ const [r, g, b] = transformRgbToLinearRgb([rr, gg, bb], true);
1223
+ return [r, g, b, alpha];
1224
+ };
1225
+
1226
+ /**
1227
+ * convert hex color to xyz
1228
+ * @param value - hex color value
1229
+ * @returns ColorChannels - [x, y, z, alpha]
1230
+ */
1231
+ export const convertHexToXyz = (value: string): ColorChannels => {
1232
+ const [r, g, b, alpha] = convertHexToLinearRgb(value);
1233
+ const [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b], true);
1234
+ return [x, y, z, alpha];
1235
+ };
1236
+
1237
+ /**
1238
+ * parse rgb()
1239
+ * @param value - rgb color value
1240
+ * @param [opt] - options
1241
+ * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject
1242
+ */
1243
+ export const parseRgb = (
1244
+ value: string,
1245
+ opt: Options = {}
1246
+ ): SpecifiedColorChannels | string | NullObject => {
1247
+ if (isString(value)) {
1248
+ value = value.toLowerCase().trim();
1249
+ } else {
1250
+ throw new TypeError(`${value} is not a string.`);
1251
+ }
1252
+ const { format = '', nullable = false } = opt;
1253
+ const reg = new RegExp(`^rgba?\\(\\s*(${SYN_MOD}|${SYN_RGB_LV3})\\s*\\)$`);
1254
+ if (!reg.test(value)) {
1255
+ const res = resolveInvalidColorValue(format, nullable);
1256
+ if (res instanceof NullObject) {
1257
+ return res;
1258
+ }
1259
+ if (isString(res)) {
1260
+ return res as string;
1261
+ }
1262
+ return res as SpecifiedColorChannels;
1263
+ }
1264
+ const [, val] = value.match(reg) as MatchedRegExp;
1265
+ const [v1, v2, v3, v4 = ''] = val
1266
+ .replace(/[,/]/g, ' ')
1267
+ .split(/\s+/) as StringColorChannels;
1268
+ let r, g, b;
1269
+ if (v1 === NONE) {
1270
+ r = 0;
1271
+ } else {
1272
+ if (v1.endsWith('%')) {
1273
+ r = (parseFloat(v1) * MAX_RGB) / MAX_PCT;
1274
+ } else {
1275
+ r = parseFloat(v1);
1276
+ }
1277
+ r = Math.min(Math.max(roundToPrecision(r, OCT), 0), MAX_RGB);
1278
+ }
1279
+ if (v2 === NONE) {
1280
+ g = 0;
1281
+ } else {
1282
+ if (v2.endsWith('%')) {
1283
+ g = (parseFloat(v2) * MAX_RGB) / MAX_PCT;
1284
+ } else {
1285
+ g = parseFloat(v2);
1286
+ }
1287
+ g = Math.min(Math.max(roundToPrecision(g, OCT), 0), MAX_RGB);
1288
+ }
1289
+ if (v3 === NONE) {
1290
+ b = 0;
1291
+ } else {
1292
+ if (v3.endsWith('%')) {
1293
+ b = (parseFloat(v3) * MAX_RGB) / MAX_PCT;
1294
+ } else {
1295
+ b = parseFloat(v3);
1296
+ }
1297
+ b = Math.min(Math.max(roundToPrecision(b, OCT), 0), MAX_RGB);
1298
+ }
1299
+ const alpha = parseAlpha(v4);
1300
+ return ['rgb', r, g, b, format === VAL_MIX && v4 === NONE ? NONE : alpha];
1301
+ };
1302
+
1303
+ /**
1304
+ * parse hsl()
1305
+ * @param value - hsl color value
1306
+ * @param [opt] - options
1307
+ * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject
1308
+ */
1309
+ export const parseHsl = (
1310
+ value: string,
1311
+ opt: Options = {}
1312
+ ): SpecifiedColorChannels | string | NullObject => {
1313
+ if (isString(value)) {
1314
+ value = value.trim();
1315
+ } else {
1316
+ throw new TypeError(`${value} is not a string.`);
1317
+ }
1318
+ const { format = '', nullable = false } = opt;
1319
+ if (!REG_HSL.test(value)) {
1320
+ const res = resolveInvalidColorValue(format, nullable);
1321
+ if (res instanceof NullObject) {
1322
+ return res;
1323
+ }
1324
+ if (isString(res)) {
1325
+ return res as string;
1326
+ }
1327
+ return res as SpecifiedColorChannels;
1328
+ }
1329
+ const [, val] = value.match(REG_HSL) as MatchedRegExp;
1330
+ const [v1, v2, v3, v4 = ''] = val
1331
+ .replace(/[,/]/g, ' ')
1332
+ .split(/\s+/) as StringColorChannels;
1333
+ let h, s, l;
1334
+ if (v1 === NONE) {
1335
+ h = 0;
1336
+ } else {
1337
+ h = angleToDeg(v1);
1338
+ }
1339
+ if (v2 === NONE) {
1340
+ s = 0;
1341
+ } else {
1342
+ s = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT);
1343
+ }
1344
+ if (v3 === NONE) {
1345
+ l = 0;
1346
+ } else {
1347
+ l = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT);
1348
+ }
1349
+ const alpha = parseAlpha(v4);
1350
+ if (format === 'hsl') {
1351
+ return [
1352
+ format,
1353
+ v1 === NONE ? v1 : h,
1354
+ v2 === NONE ? v2 : s,
1355
+ v3 === NONE ? v3 : l,
1356
+ v4 === NONE ? v4 : alpha
1357
+ ];
1358
+ }
1359
+ h = (h / DEG) * DOZ;
1360
+ l /= MAX_PCT;
1361
+ const sa = (s / MAX_PCT) * Math.min(l, 1 - l);
1362
+ const rk = h % DOZ;
1363
+ const gk = (8 + h) % DOZ;
1364
+ const bk = (4 + h) % DOZ;
1365
+ const r = l - sa * Math.max(-1, Math.min(rk - TRIA, TRIA ** POW_SQR - rk, 1));
1366
+ const g = l - sa * Math.max(-1, Math.min(gk - TRIA, TRIA ** POW_SQR - gk, 1));
1367
+ const b = l - sa * Math.max(-1, Math.min(bk - TRIA, TRIA ** POW_SQR - bk, 1));
1368
+ return [
1369
+ 'rgb',
1370
+ Math.min(Math.max(roundToPrecision(r * MAX_RGB, OCT), 0), MAX_RGB),
1371
+ Math.min(Math.max(roundToPrecision(g * MAX_RGB, OCT), 0), MAX_RGB),
1372
+ Math.min(Math.max(roundToPrecision(b * MAX_RGB, OCT), 0), MAX_RGB),
1373
+ alpha
1374
+ ];
1375
+ };
1376
+
1377
+ /**
1378
+ * parse hwb()
1379
+ * @param value - hwb color value
1380
+ * @param [opt] - options
1381
+ * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject
1382
+ */
1383
+ export const parseHwb = (
1384
+ value: string,
1385
+ opt: Options = {}
1386
+ ): SpecifiedColorChannels | string | NullObject => {
1387
+ if (isString(value)) {
1388
+ value = value.trim();
1389
+ } else {
1390
+ throw new TypeError(`${value} is not a string.`);
1391
+ }
1392
+ const { format = '', nullable = false } = opt;
1393
+ if (!REG_HWB.test(value)) {
1394
+ const res = resolveInvalidColorValue(format, nullable);
1395
+ if (res instanceof NullObject) {
1396
+ return res;
1397
+ }
1398
+ if (isString(res)) {
1399
+ return res as string;
1400
+ }
1401
+ return res as SpecifiedColorChannels;
1402
+ }
1403
+ const [, val] = value.match(REG_HWB) as MatchedRegExp;
1404
+ const [v1, v2, v3, v4 = ''] = val
1405
+ .replace('/', ' ')
1406
+ .split(/\s+/) as StringColorChannels;
1407
+ let h, wh, bk;
1408
+ if (v1 === NONE) {
1409
+ h = 0;
1410
+ } else {
1411
+ h = angleToDeg(v1);
1412
+ }
1413
+ if (v2 === NONE) {
1414
+ wh = 0;
1415
+ } else {
1416
+ wh = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT) / MAX_PCT;
1417
+ }
1418
+ if (v3 === NONE) {
1419
+ bk = 0;
1420
+ } else {
1421
+ bk = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT) / MAX_PCT;
1422
+ }
1423
+ const alpha = parseAlpha(v4);
1424
+ if (format === 'hwb') {
1425
+ return [
1426
+ format,
1427
+ v1 === NONE ? v1 : h,
1428
+ v2 === NONE ? v2 : wh * MAX_PCT,
1429
+ v3 === NONE ? v3 : bk * MAX_PCT,
1430
+ v4 === NONE ? v4 : alpha
1431
+ ];
1432
+ }
1433
+ if (wh + bk >= 1) {
1434
+ const v = roundToPrecision((wh / (wh + bk)) * MAX_RGB, OCT);
1435
+ return ['rgb', v, v, v, alpha];
1436
+ }
1437
+ const factor = (1 - wh - bk) / MAX_RGB;
1438
+ let [, r, g, b] = parseHsl(`hsl(${h} 100 50)`) as ComputedColorChannels;
1439
+ r = roundToPrecision((r * factor + wh) * MAX_RGB, OCT);
1440
+ g = roundToPrecision((g * factor + wh) * MAX_RGB, OCT);
1441
+ b = roundToPrecision((b * factor + wh) * MAX_RGB, OCT);
1442
+ return [
1443
+ 'rgb',
1444
+ Math.min(Math.max(r, 0), MAX_RGB),
1445
+ Math.min(Math.max(g, 0), MAX_RGB),
1446
+ Math.min(Math.max(b, 0), MAX_RGB),
1447
+ alpha
1448
+ ];
1449
+ };
1450
+
1451
+ /**
1452
+ * parse lab()
1453
+ * @param value - lab color value
1454
+ * @param [opt] - options
1455
+ * @returns parsed color
1456
+ * - [xyz-d50, x, y, z, alpha], ['lab', l, a, b, alpha], '(empty)', NullObject
1457
+ */
1458
+ export const parseLab = (
1459
+ value: string,
1460
+ opt: Options = {}
1461
+ ): SpecifiedColorChannels | string | NullObject => {
1462
+ if (isString(value)) {
1463
+ value = value.trim();
1464
+ } else {
1465
+ throw new TypeError(`${value} is not a string.`);
1466
+ }
1467
+ const { format = '', nullable = false } = opt;
1468
+ if (!REG_LAB.test(value)) {
1469
+ const res = resolveInvalidColorValue(format, nullable);
1470
+ if (res instanceof NullObject) {
1471
+ return res;
1472
+ }
1473
+ if (isString(res)) {
1474
+ return res as string;
1475
+ }
1476
+ return res as SpecifiedColorChannels;
1477
+ }
1478
+ const COEF_PCT = 1.25;
1479
+ const COND_POW = 8;
1480
+ const [, val] = value.match(REG_LAB) as MatchedRegExp;
1481
+ const [v1, v2, v3, v4 = ''] = val
1482
+ .replace('/', ' ')
1483
+ .split(/\s+/) as StringColorChannels;
1484
+ let l, a, b;
1485
+ if (v1 === NONE) {
1486
+ l = 0;
1487
+ } else {
1488
+ if (v1.endsWith('%')) {
1489
+ l = parseFloat(v1);
1490
+ if (l > MAX_PCT) {
1491
+ l = MAX_PCT;
1492
+ }
1493
+ } else {
1494
+ l = parseFloat(v1);
1495
+ }
1496
+ if (l < 0) {
1497
+ l = 0;
1498
+ }
1499
+ }
1500
+ if (v2 === NONE) {
1501
+ a = 0;
1502
+ } else {
1503
+ a = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);
1504
+ }
1505
+ if (v3 === NONE) {
1506
+ b = 0;
1507
+ } else {
1508
+ b = v3.endsWith('%') ? parseFloat(v3) * COEF_PCT : parseFloat(v3);
1509
+ }
1510
+ const alpha = parseAlpha(v4);
1511
+ if (REG_SPEC.test(format)) {
1512
+ return [
1513
+ 'lab',
1514
+ v1 === NONE ? v1 : roundToPrecision(l, HEX),
1515
+ v2 === NONE ? v2 : roundToPrecision(a, HEX),
1516
+ v3 === NONE ? v3 : roundToPrecision(b, HEX),
1517
+ v4 === NONE ? v4 : alpha
1518
+ ];
1519
+ }
1520
+ const fl = (l + HEX) / LAB_L;
1521
+ const fa = a / LAB_A + fl;
1522
+ const fb = fl - b / LAB_B;
1523
+ const powFl = Math.pow(fl, POW_CUBE);
1524
+ const powFa = Math.pow(fa, POW_CUBE);
1525
+ const powFb = Math.pow(fb, POW_CUBE);
1526
+ const xyz = [
1527
+ powFa > LAB_EPSILON ? powFa : (fa * LAB_L - HEX) / LAB_KAPPA,
1528
+ l > COND_POW ? powFl : l / LAB_KAPPA,
1529
+ powFb > LAB_EPSILON ? powFb : (fb * LAB_L - HEX) / LAB_KAPPA
1530
+ ];
1531
+ const [x, y, z] = xyz.map(
1532
+ (val, i) => val * (D50[i] as number)
1533
+ ) as TriColorChannels;
1534
+ return [
1535
+ 'xyz-d50',
1536
+ roundToPrecision(x, HEX),
1537
+ roundToPrecision(y, HEX),
1538
+ roundToPrecision(z, HEX),
1539
+ alpha
1540
+ ];
1541
+ };
1542
+
1543
+ /**
1544
+ * parse lch()
1545
+ * @param value - lch color value
1546
+ * @param [opt] - options
1547
+ * @returns parsed color
1548
+ * - ['xyz-d50', x, y, z, alpha], ['lch', l, c, h, alpha]
1549
+ * - '(empty)', NullObject
1550
+ */
1551
+ export const parseLch = (
1552
+ value: string,
1553
+ opt: Options = {}
1554
+ ): SpecifiedColorChannels | string | NullObject => {
1555
+ if (isString(value)) {
1556
+ value = value.trim();
1557
+ } else {
1558
+ throw new TypeError(`${value} is not a string.`);
1559
+ }
1560
+ const { format = '', nullable = false } = opt;
1561
+ if (!REG_LCH.test(value)) {
1562
+ const res = resolveInvalidColorValue(format, nullable);
1563
+ if (res instanceof NullObject) {
1564
+ return res;
1565
+ }
1566
+ if (isString(res)) {
1567
+ return res as string;
1568
+ }
1569
+ return res as SpecifiedColorChannels;
1570
+ }
1571
+ const COEF_PCT = 1.5;
1572
+ const [, val] = value.match(REG_LCH) as MatchedRegExp;
1573
+ const [v1, v2, v3, v4 = ''] = val
1574
+ .replace('/', ' ')
1575
+ .split(/\s+/) as StringColorChannels;
1576
+ let l, c, h;
1577
+ if (v1 === NONE) {
1578
+ l = 0;
1579
+ } else {
1580
+ l = parseFloat(v1);
1581
+ if (l < 0) {
1582
+ l = 0;
1583
+ }
1584
+ }
1585
+ if (v2 === NONE) {
1586
+ c = 0;
1587
+ } else {
1588
+ c = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);
1589
+ }
1590
+ if (v3 === NONE) {
1591
+ h = 0;
1592
+ } else {
1593
+ h = angleToDeg(v3);
1594
+ }
1595
+ const alpha = parseAlpha(v4);
1596
+ if (REG_SPEC.test(format)) {
1597
+ return [
1598
+ 'lch',
1599
+ v1 === NONE ? v1 : roundToPrecision(l, HEX),
1600
+ v2 === NONE ? v2 : roundToPrecision(c, HEX),
1601
+ v3 === NONE ? v3 : roundToPrecision(h, HEX),
1602
+ v4 === NONE ? v4 : alpha
1603
+ ];
1604
+ }
1605
+ const a = c * Math.cos((h * Math.PI) / DEG_HALF);
1606
+ const b = c * Math.sin((h * Math.PI) / DEG_HALF);
1607
+ const [, x, y, z] = parseLab(`lab(${l} ${a} ${b})`) as ComputedColorChannels;
1608
+ return [
1609
+ 'xyz-d50',
1610
+ roundToPrecision(x, HEX),
1611
+ roundToPrecision(y, HEX),
1612
+ roundToPrecision(z, HEX),
1613
+ alpha as number
1614
+ ];
1615
+ };
1616
+
1617
+ /**
1618
+ * parse oklab()
1619
+ * @param value - oklab color value
1620
+ * @param [opt] - options
1621
+ * @returns parsed color
1622
+ * - ['xyz-d65', x, y, z, alpha], ['oklab', l, a, b, alpha]
1623
+ * - '(empty)', NullObject
1624
+ */
1625
+ export const parseOklab = (
1626
+ value: string,
1627
+ opt: Options = {}
1628
+ ): SpecifiedColorChannels | string | NullObject => {
1629
+ if (isString(value)) {
1630
+ value = value.trim();
1631
+ } else {
1632
+ throw new TypeError(`${value} is not a string.`);
1633
+ }
1634
+ const { format = '', nullable = false } = opt;
1635
+ if (!REG_OKLAB.test(value)) {
1636
+ const res = resolveInvalidColorValue(format, nullable);
1637
+ if (res instanceof NullObject) {
1638
+ return res;
1639
+ }
1640
+ if (isString(res)) {
1641
+ return res as string;
1642
+ }
1643
+ return res as SpecifiedColorChannels;
1644
+ }
1645
+ const COEF_PCT = 0.4;
1646
+ const [, val] = value.match(REG_OKLAB) as MatchedRegExp;
1647
+ const [v1, v2, v3, v4 = ''] = val
1648
+ .replace('/', ' ')
1649
+ .split(/\s+/) as StringColorChannels;
1650
+ let l, a, b;
1651
+ if (v1 === NONE) {
1652
+ l = 0;
1653
+ } else {
1654
+ l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);
1655
+ if (l < 0) {
1656
+ l = 0;
1657
+ }
1658
+ }
1659
+ if (v2 === NONE) {
1660
+ a = 0;
1661
+ } else if (v2.endsWith('%')) {
1662
+ a = (parseFloat(v2) * COEF_PCT) / MAX_PCT;
1663
+ } else {
1664
+ a = parseFloat(v2);
1665
+ }
1666
+ if (v3 === NONE) {
1667
+ b = 0;
1668
+ } else if (v3.endsWith('%')) {
1669
+ b = (parseFloat(v3) * COEF_PCT) / MAX_PCT;
1670
+ } else {
1671
+ b = parseFloat(v3);
1672
+ }
1673
+ const alpha = parseAlpha(v4);
1674
+ if (REG_SPEC.test(format)) {
1675
+ return [
1676
+ 'oklab',
1677
+ v1 === NONE ? v1 : roundToPrecision(l, HEX),
1678
+ v2 === NONE ? v2 : roundToPrecision(a, HEX),
1679
+ v3 === NONE ? v3 : roundToPrecision(b, HEX),
1680
+ v4 === NONE ? v4 : alpha
1681
+ ];
1682
+ }
1683
+ const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);
1684
+ const xyzLms = lms.map(c => Math.pow(c, POW_CUBE)) as TriColorChannels;
1685
+ const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);
1686
+ return [
1687
+ 'xyz-d65',
1688
+ roundToPrecision(x, HEX),
1689
+ roundToPrecision(y, HEX),
1690
+ roundToPrecision(z, HEX),
1691
+ alpha as number
1692
+ ];
1693
+ };
1694
+
1695
+ /**
1696
+ * parse oklch()
1697
+ * @param value - oklch color value
1698
+ * @param [opt] - options
1699
+ * @returns parsed color
1700
+ * - ['xyz-d65', x, y, z, alpha], ['oklch', l, c, h, alpha]
1701
+ * - '(empty)', NullObject
1702
+ */
1703
+ export const parseOklch = (
1704
+ value: string,
1705
+ opt: Options = {}
1706
+ ): SpecifiedColorChannels | string | NullObject => {
1707
+ if (isString(value)) {
1708
+ value = value.trim();
1709
+ } else {
1710
+ throw new TypeError(`${value} is not a string.`);
1711
+ }
1712
+ const { format = '', nullable = false } = opt;
1713
+ if (!REG_OKLCH.test(value)) {
1714
+ const res = resolveInvalidColorValue(format, nullable);
1715
+ if (res instanceof NullObject) {
1716
+ return res;
1717
+ }
1718
+ if (isString(res)) {
1719
+ return res as string;
1720
+ }
1721
+ return res as SpecifiedColorChannels;
1722
+ }
1723
+ const COEF_PCT = 0.4;
1724
+ const [, val] = value.match(REG_OKLCH) as MatchedRegExp;
1725
+ const [v1, v2, v3, v4 = ''] = val
1726
+ .replace('/', ' ')
1727
+ .split(/\s+/) as StringColorChannels;
1728
+ let l, c, h;
1729
+ if (v1 === NONE) {
1730
+ l = 0;
1731
+ } else {
1732
+ l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);
1733
+ if (l < 0) {
1734
+ l = 0;
1735
+ }
1736
+ }
1737
+ if (v2 === NONE) {
1738
+ c = 0;
1739
+ } else {
1740
+ if (v2.endsWith('%')) {
1741
+ c = (parseFloat(v2) * COEF_PCT) / MAX_PCT;
1742
+ } else {
1743
+ c = parseFloat(v2);
1744
+ }
1745
+ if (c < 0) {
1746
+ c = 0;
1747
+ }
1748
+ }
1749
+ if (v3 === NONE) {
1750
+ h = 0;
1751
+ } else {
1752
+ h = angleToDeg(v3);
1753
+ }
1754
+ const alpha = parseAlpha(v4);
1755
+ if (REG_SPEC.test(format)) {
1756
+ return [
1757
+ 'oklch',
1758
+ v1 === NONE ? v1 : roundToPrecision(l, HEX),
1759
+ v2 === NONE ? v2 : roundToPrecision(c, HEX),
1760
+ v3 === NONE ? v3 : roundToPrecision(h, HEX),
1761
+ v4 === NONE ? v4 : alpha
1762
+ ];
1763
+ }
1764
+ const a = c * Math.cos((h * Math.PI) / DEG_HALF);
1765
+ const b = c * Math.sin((h * Math.PI) / DEG_HALF);
1766
+ const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);
1767
+ const xyzLms = lms.map(cc => Math.pow(cc, POW_CUBE)) as TriColorChannels;
1768
+ const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);
1769
+ return [
1770
+ 'xyz-d65',
1771
+ roundToPrecision(x, HEX),
1772
+ roundToPrecision(y, HEX),
1773
+ roundToPrecision(z, HEX),
1774
+ alpha
1775
+ ];
1776
+ };
1777
+
1778
+ /**
1779
+ * parse color()
1780
+ * @param value - color function value
1781
+ * @param [opt] - options
1782
+ * @returns parsed color
1783
+ * - ['xyz-(d50|d65)', x, y, z, alpha], [cs, r, g, b, alpha]
1784
+ * - '(empty)', NullObject
1785
+ */
1786
+ export const parseColorFunc = (
1787
+ value: string,
1788
+ opt: Options = {}
1789
+ ): SpecifiedColorChannels | string | NullObject => {
1790
+ if (isString(value)) {
1791
+ value = value.trim();
1792
+ } else {
1793
+ throw new TypeError(`${value} is not a string.`);
1794
+ }
1795
+ const { colorSpace = '', d50 = false, format = '', nullable = false } = opt;
1796
+ if (!REG_FN_COLOR.test(value)) {
1797
+ const res = resolveInvalidColorValue(format, nullable);
1798
+ if (res instanceof NullObject) {
1799
+ return res;
1800
+ }
1801
+ if (isString(res)) {
1802
+ return res as string;
1803
+ }
1804
+ return res as SpecifiedColorChannels;
1805
+ }
1806
+ const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;
1807
+ let [cs, v1, v2, v3, v4 = ''] = val
1808
+ .replace('/', ' ')
1809
+ .split(/\s+/) as StringColorSpacedChannels;
1810
+ let r, g, b;
1811
+ if (cs === 'xyz') {
1812
+ cs = 'xyz-d65';
1813
+ }
1814
+ if (v1 === NONE) {
1815
+ r = 0;
1816
+ } else {
1817
+ r = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);
1818
+ }
1819
+ if (v2 === NONE) {
1820
+ g = 0;
1821
+ } else {
1822
+ g = v2.endsWith('%') ? parseFloat(v2) / MAX_PCT : parseFloat(v2);
1823
+ }
1824
+ if (v3 === NONE) {
1825
+ b = 0;
1826
+ } else {
1827
+ b = v3.endsWith('%') ? parseFloat(v3) / MAX_PCT : parseFloat(v3);
1828
+ }
1829
+ const alpha = parseAlpha(v4);
1830
+ if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {
1831
+ return [
1832
+ cs,
1833
+ v1 === NONE ? v1 : roundToPrecision(r, DEC),
1834
+ v2 === NONE ? v2 : roundToPrecision(g, DEC),
1835
+ v3 === NONE ? v3 : roundToPrecision(b, DEC),
1836
+ v4 === NONE ? v4 : alpha
1837
+ ];
1838
+ }
1839
+ let x = 0;
1840
+ let y = 0;
1841
+ let z = 0;
1842
+ // srgb-linear
1843
+ if (cs === 'srgb-linear') {
1844
+ [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b]);
1845
+ if (d50) {
1846
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
1847
+ }
1848
+ // display-p3
1849
+ } else if (cs === 'display-p3') {
1850
+ const linearRgb = transformRgbToLinearRgb([
1851
+ r * MAX_RGB,
1852
+ g * MAX_RGB,
1853
+ b * MAX_RGB
1854
+ ]);
1855
+ [x, y, z] = transformMatrix(MATRIX_P3_TO_XYZ, linearRgb);
1856
+ if (d50) {
1857
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
1858
+ }
1859
+ // rec2020
1860
+ } else if (cs === 'rec2020') {
1861
+ const ALPHA = 1.09929682680944;
1862
+ const BETA = 0.018053968510807;
1863
+ const REC_COEF = 0.45;
1864
+ const rgb = [r, g, b].map(c => {
1865
+ let cl;
1866
+ if (c < BETA * REC_COEF * DEC) {
1867
+ cl = c / (REC_COEF * DEC);
1868
+ } else {
1869
+ cl = Math.pow((c + ALPHA - 1) / ALPHA, 1 / REC_COEF);
1870
+ }
1871
+ return cl;
1872
+ }) as TriColorChannels;
1873
+ [x, y, z] = transformMatrix(MATRIX_REC2020_TO_XYZ, rgb);
1874
+ if (d50) {
1875
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
1876
+ }
1877
+ // a98-rgb
1878
+ } else if (cs === 'a98-rgb') {
1879
+ const POW_A98 = 563 / 256;
1880
+ const rgb = [r, g, b].map(c => {
1881
+ const cl = Math.pow(c, POW_A98);
1882
+ return cl;
1883
+ }) as TriColorChannels;
1884
+ [x, y, z] = transformMatrix(MATRIX_A98_TO_XYZ, rgb);
1885
+ if (d50) {
1886
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
1887
+ }
1888
+ // prophoto-rgb
1889
+ } else if (cs === 'prophoto-rgb') {
1890
+ const POW_PROPHOTO = 1.8;
1891
+ const rgb = [r, g, b].map(c => {
1892
+ let cl;
1893
+ if (c > 1 / (HEX * DUO)) {
1894
+ cl = Math.pow(c, POW_PROPHOTO);
1895
+ } else {
1896
+ cl = c / HEX;
1897
+ }
1898
+ return cl;
1899
+ }) as TriColorChannels;
1900
+ [x, y, z] = transformMatrix(MATRIX_PROPHOTO_TO_XYZ_D50, rgb);
1901
+ if (!d50) {
1902
+ [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);
1903
+ }
1904
+ // xyz, xyz-d50, xyz-d65
1905
+ } else if (/^xyz(?:-d(?:50|65))?$/.test(cs)) {
1906
+ [x, y, z] = [r, g, b];
1907
+ if (cs === 'xyz-d50') {
1908
+ if (!d50) {
1909
+ [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z]);
1910
+ }
1911
+ } else if (d50) {
1912
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
1913
+ }
1914
+ // srgb
1915
+ } else {
1916
+ [x, y, z] = transformRgbToXyz([r * MAX_RGB, g * MAX_RGB, b * MAX_RGB]);
1917
+ if (d50) {
1918
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
1919
+ }
1920
+ }
1921
+ return [
1922
+ d50 ? 'xyz-d50' : 'xyz-d65',
1923
+ roundToPrecision(x, HEX),
1924
+ roundToPrecision(y, HEX),
1925
+ roundToPrecision(z, HEX),
1926
+ format === VAL_MIX && v4 === NONE ? v4 : alpha
1927
+ ];
1928
+ };
1929
+
1930
+ /**
1931
+ * parse color value
1932
+ * @param value - CSS color value
1933
+ * @param [opt] - options
1934
+ * @returns parsed color
1935
+ * - ['xyz-(d50|d65)', x, y, z, alpha], ['rgb', r, g, b, alpha]
1936
+ * - value, '(empty)', NullObject
1937
+ */
1938
+ export const parseColorValue = (
1939
+ value: string,
1940
+ opt: Options = {}
1941
+ ): SpecifiedColorChannels | string | NullObject => {
1942
+ if (isString(value)) {
1943
+ value = value.toLowerCase().trim();
1944
+ } else {
1945
+ throw new TypeError(`${value} is not a string.`);
1946
+ }
1947
+ const { d50 = false, format = '', nullable = false } = opt;
1948
+ if (!REG_COLOR.test(value)) {
1949
+ const res = resolveInvalidColorValue(format, nullable);
1950
+ if (res instanceof NullObject) {
1951
+ return res;
1952
+ }
1953
+ if (isString(res)) {
1954
+ return res as string;
1955
+ }
1956
+ return res as SpecifiedColorChannels;
1957
+ }
1958
+ let x = 0;
1959
+ let y = 0;
1960
+ let z = 0;
1961
+ let alpha = 0;
1962
+ // complement currentcolor as a missing color
1963
+ if (REG_CURRENT.test(value)) {
1964
+ if (format === VAL_COMP) {
1965
+ return ['rgb', 0, 0, 0, 0];
1966
+ }
1967
+ if (format === VAL_SPEC) {
1968
+ return value;
1969
+ }
1970
+ // named-color
1971
+ } else if (/^[a-z]+$/.test(value)) {
1972
+ if (Object.hasOwn(NAMED_COLORS, value)) {
1973
+ if (format === VAL_SPEC) {
1974
+ return value;
1975
+ }
1976
+ const [r, g, b] = NAMED_COLORS[
1977
+ value as keyof typeof NAMED_COLORS
1978
+ ] as TriColorChannels;
1979
+ alpha = 1;
1980
+ if (format === VAL_COMP) {
1981
+ return ['rgb', r, g, b, alpha];
1982
+ }
1983
+ [x, y, z] = transformRgbToXyz([r, g, b], true);
1984
+ if (d50) {
1985
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
1986
+ }
1987
+ } else {
1988
+ switch (format) {
1989
+ case VAL_COMP: {
1990
+ if (nullable && value !== 'transparent') {
1991
+ return new NullObject();
1992
+ }
1993
+ return ['rgb', 0, 0, 0, 0];
1994
+ }
1995
+ case VAL_SPEC: {
1996
+ if (value === 'transparent') {
1997
+ return value;
1998
+ }
1999
+ return '';
2000
+ }
2001
+ case VAL_MIX: {
2002
+ if (value === 'transparent') {
2003
+ return ['rgb', 0, 0, 0, 0];
2004
+ }
2005
+ return new NullObject();
2006
+ }
2007
+ default:
2008
+ }
2009
+ }
2010
+ // hex-color
2011
+ } else if (value[0] === '#') {
2012
+ if (REG_SPEC.test(format)) {
2013
+ const rgb = convertHexToRgb(value);
2014
+ return ['rgb', ...rgb];
2015
+ }
2016
+ [x, y, z, alpha] = convertHexToXyz(value);
2017
+ if (d50) {
2018
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
2019
+ }
2020
+ // lab()
2021
+ } else if (value.startsWith('lab')) {
2022
+ if (REG_SPEC.test(format)) {
2023
+ return parseLab(value, opt);
2024
+ }
2025
+ [, x, y, z, alpha] = parseLab(value) as ComputedColorChannels;
2026
+ if (!d50) {
2027
+ [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);
2028
+ }
2029
+ // lch()
2030
+ } else if (value.startsWith('lch')) {
2031
+ if (REG_SPEC.test(format)) {
2032
+ return parseLch(value, opt);
2033
+ }
2034
+ [, x, y, z, alpha] = parseLch(value) as ComputedColorChannels;
2035
+ if (!d50) {
2036
+ [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);
2037
+ }
2038
+ // oklab()
2039
+ } else if (value.startsWith('oklab')) {
2040
+ if (REG_SPEC.test(format)) {
2041
+ return parseOklab(value, opt);
2042
+ }
2043
+ [, x, y, z, alpha] = parseOklab(value) as ComputedColorChannels;
2044
+ if (d50) {
2045
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
2046
+ }
2047
+ // oklch()
2048
+ } else if (value.startsWith('oklch')) {
2049
+ if (REG_SPEC.test(format)) {
2050
+ return parseOklch(value, opt);
2051
+ }
2052
+ [, x, y, z, alpha] = parseOklch(value) as ComputedColorChannels;
2053
+ if (d50) {
2054
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
2055
+ }
2056
+ } else {
2057
+ let r, g, b;
2058
+ // hsl()
2059
+ if (value.startsWith('hsl')) {
2060
+ [, r, g, b, alpha] = parseHsl(value) as ComputedColorChannels;
2061
+ // hwb()
2062
+ } else if (value.startsWith('hwb')) {
2063
+ [, r, g, b, alpha] = parseHwb(value) as ComputedColorChannels;
2064
+ // rgb()
2065
+ } else {
2066
+ [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;
2067
+ }
2068
+ if (REG_SPEC.test(format)) {
2069
+ return ['rgb', Math.round(r), Math.round(g), Math.round(b), alpha];
2070
+ }
2071
+ [x, y, z] = transformRgbToXyz([r, g, b]);
2072
+ if (d50) {
2073
+ [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);
2074
+ }
2075
+ }
2076
+ return [
2077
+ d50 ? 'xyz-d50' : 'xyz-d65',
2078
+ roundToPrecision(x, HEX),
2079
+ roundToPrecision(y, HEX),
2080
+ roundToPrecision(z, HEX),
2081
+ alpha
2082
+ ];
2083
+ };
2084
+
2085
+ /**
2086
+ * resolve color value
2087
+ * @param value - CSS color value
2088
+ * @param [opt] - options
2089
+ * @returns resolved color
2090
+ * - [cs, v1, v2, v3, alpha], value, '(empty)', NullObject
2091
+ */
2092
+ export const resolveColorValue = (
2093
+ value: string,
2094
+ opt: Options = {}
2095
+ ): SpecifiedColorChannels | string | NullObject => {
2096
+ if (isString(value)) {
2097
+ value = value.toLowerCase().trim();
2098
+ } else {
2099
+ throw new TypeError(`${value} is not a string.`);
2100
+ }
2101
+ const { colorSpace = '', format = '', nullable = false } = opt;
2102
+ const cacheKey: string = createCacheKey(
2103
+ {
2104
+ namespace: NAMESPACE,
2105
+ name: 'resolveColorValue',
2106
+ value
2107
+ },
2108
+ opt
2109
+ );
2110
+ const cachedResult = getCache(cacheKey);
2111
+ if (cachedResult instanceof CacheItem) {
2112
+ if (cachedResult.isNull) {
2113
+ return cachedResult as NullObject;
2114
+ }
2115
+ const cachedItem = cachedResult.item;
2116
+ if (isString(cachedItem)) {
2117
+ return cachedItem as string;
2118
+ }
2119
+ return cachedItem as SpecifiedColorChannels;
2120
+ }
2121
+ if (!REG_COLOR.test(value)) {
2122
+ const res = resolveInvalidColorValue(format, nullable);
2123
+ if (res instanceof NullObject) {
2124
+ setCache(cacheKey, null);
2125
+ return res;
2126
+ }
2127
+ setCache(cacheKey, res);
2128
+ if (isString(res)) {
2129
+ return res as string;
2130
+ }
2131
+ return res as SpecifiedColorChannels;
2132
+ }
2133
+ let cs = '';
2134
+ let r = 0;
2135
+ let g = 0;
2136
+ let b = 0;
2137
+ let alpha = 0;
2138
+ // complement currentcolor as a missing color
2139
+ if (REG_CURRENT.test(value)) {
2140
+ if (format === VAL_SPEC) {
2141
+ setCache(cacheKey, value);
2142
+ return value;
2143
+ }
2144
+ // named-color
2145
+ } else if (/^[a-z]+$/.test(value)) {
2146
+ if (Object.hasOwn(NAMED_COLORS, value)) {
2147
+ if (format === VAL_SPEC) {
2148
+ setCache(cacheKey, value);
2149
+ return value;
2150
+ }
2151
+ [r, g, b] = NAMED_COLORS[
2152
+ value as keyof typeof NAMED_COLORS
2153
+ ] as TriColorChannels;
2154
+ alpha = 1;
2155
+ } else {
2156
+ switch (format) {
2157
+ case VAL_SPEC: {
2158
+ if (value === 'transparent') {
2159
+ setCache(cacheKey, value);
2160
+ return value;
2161
+ }
2162
+ const res = '';
2163
+ setCache(cacheKey, res);
2164
+ return res;
2165
+ }
2166
+ case VAL_MIX: {
2167
+ if (value === 'transparent') {
2168
+ const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];
2169
+ setCache(cacheKey, res);
2170
+ return res;
2171
+ }
2172
+ setCache(cacheKey, null);
2173
+ return new NullObject();
2174
+ }
2175
+ case VAL_COMP:
2176
+ default: {
2177
+ if (nullable && value !== 'transparent') {
2178
+ setCache(cacheKey, null);
2179
+ return new NullObject();
2180
+ }
2181
+ const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];
2182
+ setCache(cacheKey, res);
2183
+ return res;
2184
+ }
2185
+ }
2186
+ }
2187
+ // hex-color
2188
+ } else if (value[0] === '#') {
2189
+ [r, g, b, alpha] = convertHexToRgb(value);
2190
+ // hsl()
2191
+ } else if (value.startsWith('hsl')) {
2192
+ [, r, g, b, alpha] = parseHsl(value, opt) as ComputedColorChannels;
2193
+ // hwb()
2194
+ } else if (value.startsWith('hwb')) {
2195
+ [, r, g, b, alpha] = parseHwb(value, opt) as ComputedColorChannels;
2196
+ // lab(), lch()
2197
+ } else if (/^l(?:ab|ch)/.test(value)) {
2198
+ let x, y, z;
2199
+ if (value.startsWith('lab')) {
2200
+ [cs, x, y, z, alpha] = parseLab(value, opt) as ComputedColorChannels;
2201
+ } else {
2202
+ [cs, x, y, z, alpha] = parseLch(value, opt) as ComputedColorChannels;
2203
+ }
2204
+ if (REG_SPEC.test(format)) {
2205
+ const res: SpecifiedColorChannels = [cs, x, y, z, alpha];
2206
+ setCache(cacheKey, res);
2207
+ return res;
2208
+ }
2209
+ [r, g, b] = transformXyzD50ToRgb([x, y, z]);
2210
+ // oklab(), oklch()
2211
+ } else if (/^okl(?:ab|ch)/.test(value)) {
2212
+ let x, y, z;
2213
+ if (value.startsWith('oklab')) {
2214
+ [cs, x, y, z, alpha] = parseOklab(value, opt) as ComputedColorChannels;
2215
+ } else {
2216
+ [cs, x, y, z, alpha] = parseOklch(value, opt) as ComputedColorChannels;
2217
+ }
2218
+ if (REG_SPEC.test(format)) {
2219
+ const res: SpecifiedColorChannels = [cs, x, y, z, alpha];
2220
+ setCache(cacheKey, res);
2221
+ return res;
2222
+ }
2223
+ [r, g, b] = transformXyzToRgb([x, y, z]);
2224
+ // rgb()
2225
+ } else {
2226
+ [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;
2227
+ }
2228
+ if (format === VAL_MIX && colorSpace === 'srgb') {
2229
+ const res: SpecifiedColorChannels = [
2230
+ 'srgb',
2231
+ r / MAX_RGB,
2232
+ g / MAX_RGB,
2233
+ b / MAX_RGB,
2234
+ alpha
2235
+ ];
2236
+ setCache(cacheKey, res);
2237
+ return res;
2238
+ }
2239
+ const res: SpecifiedColorChannels = [
2240
+ 'rgb',
2241
+ Math.round(r),
2242
+ Math.round(g),
2243
+ Math.round(b),
2244
+ alpha
2245
+ ];
2246
+ setCache(cacheKey, res);
2247
+ return res;
2248
+ };
2249
+
2250
+ /**
2251
+ * resolve color()
2252
+ * @param value - color function value
2253
+ * @param [opt] - options
2254
+ * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)', NullObject
2255
+ */
2256
+ export const resolveColorFunc = (
2257
+ value: string,
2258
+ opt: Options = {}
2259
+ ): SpecifiedColorChannels | string | NullObject => {
2260
+ if (isString(value)) {
2261
+ value = value.toLowerCase().trim();
2262
+ } else {
2263
+ throw new TypeError(`${value} is not a string.`);
2264
+ }
2265
+ const { colorSpace = '', format = '', nullable = false } = opt;
2266
+ const cacheKey: string = createCacheKey(
2267
+ {
2268
+ namespace: NAMESPACE,
2269
+ name: 'resolveColorFunc',
2270
+ value
2271
+ },
2272
+ opt
2273
+ );
2274
+ const cachedResult = getCache(cacheKey);
2275
+ if (cachedResult instanceof CacheItem) {
2276
+ if (cachedResult.isNull) {
2277
+ return cachedResult as NullObject;
2278
+ }
2279
+ const cachedItem = cachedResult.item;
2280
+ if (isString(cachedItem)) {
2281
+ return cachedItem as string;
2282
+ }
2283
+ return cachedItem as SpecifiedColorChannels;
2284
+ }
2285
+ if (!REG_FN_COLOR.test(value)) {
2286
+ const res = resolveInvalidColorValue(format, nullable);
2287
+ if (res instanceof NullObject) {
2288
+ setCache(cacheKey, null);
2289
+ return res;
2290
+ }
2291
+ setCache(cacheKey, res);
2292
+ if (isString(res)) {
2293
+ return res as string;
2294
+ }
2295
+ return res as SpecifiedColorChannels;
2296
+ }
2297
+ const [cs, v1, v2, v3, v4] = parseColorFunc(
2298
+ value,
2299
+ opt
2300
+ ) as SpecifiedColorChannels;
2301
+ if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {
2302
+ const res: SpecifiedColorChannels = [cs, v1, v2, v3, v4];
2303
+ setCache(cacheKey, res);
2304
+ return res;
2305
+ }
2306
+ const x = parseFloat(`${v1}`);
2307
+ const y = parseFloat(`${v2}`);
2308
+ const z = parseFloat(`${v3}`);
2309
+ const alpha = parseAlpha(`${v4}`);
2310
+ const [r, g, b] = transformXyzToRgb([x, y, z], true);
2311
+ const res: SpecifiedColorChannels = ['rgb', r, g, b, alpha];
2312
+ setCache(cacheKey, res);
2313
+ return res;
2314
+ };
2315
+
2316
+ /**
2317
+ * convert color value to linear rgb
2318
+ * @param value - CSS color value
2319
+ * @param [opt] - options
2320
+ * @returns ColorChannels | NullObject - [r, g, b, alpha] r|g|b|alpha: 0..1
2321
+ */
2322
+ export const convertColorToLinearRgb = (
2323
+ value: string,
2324
+ opt: {
2325
+ colorSpace?: string;
2326
+ format?: string;
2327
+ } = {}
2328
+ ): ColorChannels | NullObject => {
2329
+ if (isString(value)) {
2330
+ value = value.trim();
2331
+ } else {
2332
+ throw new TypeError(`${value} is not a string.`);
2333
+ }
2334
+ const { colorSpace = '', format = '' } = opt;
2335
+ let cs = '';
2336
+ let r, g, b, alpha, x, y, z;
2337
+ if (format === VAL_MIX) {
2338
+ let xyz;
2339
+ if (value.startsWith(FN_COLOR)) {
2340
+ xyz = parseColorFunc(value, opt);
2341
+ } else {
2342
+ xyz = parseColorValue(value, opt);
2343
+ }
2344
+ if (xyz instanceof NullObject) {
2345
+ return xyz;
2346
+ }
2347
+ [cs, x, y, z, alpha] = xyz as ComputedColorChannels;
2348
+ if (cs === colorSpace) {
2349
+ return [x, y, z, alpha];
2350
+ }
2351
+ [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);
2352
+ } else if (value.startsWith(FN_COLOR)) {
2353
+ const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;
2354
+ const [cs] = val
2355
+ .replace('/', ' ')
2356
+ .split(/\s+/) as StringColorSpacedChannels;
2357
+ if (cs === 'srgb-linear') {
2358
+ [, r, g, b, alpha] = resolveColorFunc(value, {
2359
+ format: VAL_COMP
2360
+ }) as ComputedColorChannels;
2361
+ } else {
2362
+ [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;
2363
+ [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);
2364
+ }
2365
+ } else {
2366
+ [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;
2367
+ [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);
2368
+ }
2369
+ return [
2370
+ Math.min(Math.max(r, 0), 1),
2371
+ Math.min(Math.max(g, 0), 1),
2372
+ Math.min(Math.max(b, 0), 1),
2373
+ alpha
2374
+ ];
2375
+ };
2376
+
2377
+ /**
2378
+ * convert color value to rgb
2379
+ * @param value - CSS color value
2380
+ * @param [opt] - options
2381
+ * @returns ColorChannels | NullObject
2382
+ * - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1
2383
+ */
2384
+ export const convertColorToRgb = (
2385
+ value: string,
2386
+ opt: Options = {}
2387
+ ): ColorChannels | NullObject => {
2388
+ if (isString(value)) {
2389
+ value = value.trim();
2390
+ } else {
2391
+ throw new TypeError(`${value} is not a string.`);
2392
+ }
2393
+ const { format = '' } = opt;
2394
+ let r, g, b, alpha;
2395
+ if (format === VAL_MIX) {
2396
+ let rgb;
2397
+ if (value.startsWith(FN_COLOR)) {
2398
+ rgb = resolveColorFunc(value, opt);
2399
+ } else {
2400
+ rgb = resolveColorValue(value, opt);
2401
+ }
2402
+ if (rgb instanceof NullObject) {
2403
+ return rgb;
2404
+ }
2405
+ [, r, g, b, alpha] = rgb as ComputedColorChannels;
2406
+ } else if (value.startsWith(FN_COLOR)) {
2407
+ const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;
2408
+ const [cs] = val
2409
+ .replace('/', ' ')
2410
+ .split(/\s+/) as StringColorSpacedChannels;
2411
+ if (cs === 'srgb') {
2412
+ [, r, g, b, alpha] = resolveColorFunc(value, {
2413
+ format: VAL_COMP
2414
+ }) as ComputedColorChannels;
2415
+ r *= MAX_RGB;
2416
+ g *= MAX_RGB;
2417
+ b *= MAX_RGB;
2418
+ } else {
2419
+ [, r, g, b, alpha] = resolveColorFunc(value) as ComputedColorChannels;
2420
+ }
2421
+ } else if (/^(?:ok)?l(?:ab|ch)/.test(value)) {
2422
+ [r, g, b, alpha] = convertColorToLinearRgb(value) as ColorChannels;
2423
+ [r, g, b] = transformLinearRgbToRgb([r, g, b]);
2424
+ } else {
2425
+ [, r, g, b, alpha] = resolveColorValue(value, {
2426
+ format: VAL_COMP
2427
+ }) as ComputedColorChannels;
2428
+ }
2429
+ return [r, g, b, alpha];
2430
+ };
2431
+
2432
+ /**
2433
+ * convert color value to xyz
2434
+ * @param value - CSS color value
2435
+ * @param [opt] - options
2436
+ * @returns ColorChannels | NullObject - [x, y, z, alpha]
2437
+ */
2438
+ export const convertColorToXyz = (
2439
+ value: string,
2440
+ opt: Options = {}
2441
+ ): ColorChannels | NullObject => {
2442
+ if (isString(value)) {
2443
+ value = value.trim();
2444
+ } else {
2445
+ throw new TypeError(`${value} is not a string.`);
2446
+ }
2447
+ const { d50 = false, format = '' } = opt;
2448
+ let x, y, z, alpha;
2449
+ if (format === VAL_MIX) {
2450
+ let xyz;
2451
+ if (value.startsWith(FN_COLOR)) {
2452
+ xyz = parseColorFunc(value, opt);
2453
+ } else {
2454
+ xyz = parseColorValue(value, opt);
2455
+ }
2456
+ if (xyz instanceof NullObject) {
2457
+ return xyz;
2458
+ }
2459
+ [, x, y, z, alpha] = xyz as ComputedColorChannels;
2460
+ } else if (value.startsWith(FN_COLOR)) {
2461
+ const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;
2462
+ const [cs] = val
2463
+ .replace('/', ' ')
2464
+ .split(/\s+/) as StringColorSpacedChannels;
2465
+ if (d50) {
2466
+ if (cs === 'xyz-d50') {
2467
+ [, x, y, z, alpha] = resolveColorFunc(value, {
2468
+ format: VAL_COMP
2469
+ }) as ComputedColorChannels;
2470
+ } else {
2471
+ [, x, y, z, alpha] = parseColorFunc(
2472
+ value,
2473
+ opt
2474
+ ) as ComputedColorChannels;
2475
+ }
2476
+ } else if (/^xyz(?:-d65)?$/.test(cs)) {
2477
+ [, x, y, z, alpha] = resolveColorFunc(value, {
2478
+ format: VAL_COMP
2479
+ }) as ComputedColorChannels;
2480
+ } else {
2481
+ [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;
2482
+ }
2483
+ } else {
2484
+ [, x, y, z, alpha] = parseColorValue(value, opt) as ComputedColorChannels;
2485
+ }
2486
+ return [x, y, z, alpha];
2487
+ };
2488
+
2489
+ /**
2490
+ * convert color value to hsl
2491
+ * @param value - CSS color value
2492
+ * @param [opt] - options
2493
+ * @returns ColorChannels | NullObject - [h, s, l, alpha], hue may be powerless
2494
+ */
2495
+ export const convertColorToHsl = (
2496
+ value: string,
2497
+ opt: Options = {}
2498
+ ): ColorChannels | [number | string, number, number, number] | NullObject => {
2499
+ if (isString(value)) {
2500
+ value = value.trim();
2501
+ } else {
2502
+ throw new TypeError(`${value} is not a string.`);
2503
+ }
2504
+ const { format = '' } = opt;
2505
+ let h, s, l, alpha;
2506
+ if (REG_HSL.test(value)) {
2507
+ [, h, s, l, alpha] = parseHsl(value, {
2508
+ format: 'hsl'
2509
+ }) as ComputedColorChannels;
2510
+ if (format === 'hsl') {
2511
+ return [Math.round(h), Math.round(s), Math.round(l), alpha];
2512
+ }
2513
+ return [h, s, l, alpha];
2514
+ }
2515
+ let x, y, z;
2516
+ if (format === VAL_MIX) {
2517
+ let xyz;
2518
+ if (value.startsWith(FN_COLOR)) {
2519
+ xyz = parseColorFunc(value, opt);
2520
+ } else {
2521
+ xyz = parseColorValue(value, opt);
2522
+ }
2523
+ if (xyz instanceof NullObject) {
2524
+ return xyz;
2525
+ }
2526
+ [, x, y, z, alpha] = xyz as ComputedColorChannels;
2527
+ } else if (value.startsWith(FN_COLOR)) {
2528
+ [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;
2529
+ } else {
2530
+ [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;
2531
+ }
2532
+ [h, s, l] = transformXyzToHsl([x, y, z], true) as TriColorChannels;
2533
+ if (format === 'hsl') {
2534
+ return [Math.round(h), Math.round(s), Math.round(l), alpha];
2535
+ }
2536
+ return [format === VAL_MIX && s === 0 ? NONE : h, s, l, alpha];
2537
+ };
2538
+
2539
+ /**
2540
+ * convert color value to hwb
2541
+ * @param value - CSS color value
2542
+ * @param [opt] - options
2543
+ * @returns ColorChannels | NullObject - [h, w, b, alpha], hue may be powerless
2544
+ */
2545
+ export const convertColorToHwb = (
2546
+ value: string,
2547
+ opt: Options = {}
2548
+ ): ColorChannels | [number | string, number, number, number] | NullObject => {
2549
+ if (isString(value)) {
2550
+ value = value.trim();
2551
+ } else {
2552
+ throw new TypeError(`${value} is not a string.`);
2553
+ }
2554
+ const { format = '' } = opt;
2555
+ let h, w, b, alpha;
2556
+ if (REG_HWB.test(value)) {
2557
+ [, h, w, b, alpha] = parseHwb(value, {
2558
+ format: 'hwb'
2559
+ }) as ComputedColorChannels;
2560
+ if (format === 'hwb') {
2561
+ return [Math.round(h), Math.round(w), Math.round(b), alpha];
2562
+ }
2563
+ return [h, w, b, alpha];
2564
+ }
2565
+ let x, y, z;
2566
+ if (format === VAL_MIX) {
2567
+ let xyz;
2568
+ if (value.startsWith(FN_COLOR)) {
2569
+ xyz = parseColorFunc(value, opt);
2570
+ } else {
2571
+ xyz = parseColorValue(value, opt);
2572
+ }
2573
+ if (xyz instanceof NullObject) {
2574
+ return xyz;
2575
+ }
2576
+ [, x, y, z, alpha] = xyz as ComputedColorChannels;
2577
+ } else if (value.startsWith(FN_COLOR)) {
2578
+ [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;
2579
+ } else {
2580
+ [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;
2581
+ }
2582
+ [h, w, b] = transformXyzToHwb([x, y, z], true) as TriColorChannels;
2583
+ if (format === 'hwb') {
2584
+ return [Math.round(h), Math.round(w), Math.round(b), alpha];
2585
+ }
2586
+ return [format === VAL_MIX && w + b >= 100 ? NONE : h, w, b, alpha];
2587
+ };
2588
+
2589
+ /**
2590
+ * convert color value to lab
2591
+ * @param value - CSS color value
2592
+ * @param [opt] - options
2593
+ * @returns ColorChannels | NullObject - [l, a, b, alpha]
2594
+ */
2595
+ export const convertColorToLab = (
2596
+ value: string,
2597
+ opt: Options = {}
2598
+ ): ColorChannels | NullObject => {
2599
+ if (isString(value)) {
2600
+ value = value.trim();
2601
+ } else {
2602
+ throw new TypeError(`${value} is not a string.`);
2603
+ }
2604
+ const { format = '' } = opt;
2605
+ let l, a, b, alpha;
2606
+ if (REG_LAB.test(value)) {
2607
+ [, l, a, b, alpha] = parseLab(value, {
2608
+ format: VAL_COMP
2609
+ }) as ComputedColorChannels;
2610
+ return [l, a, b, alpha];
2611
+ }
2612
+ let x, y, z;
2613
+ if (format === VAL_MIX) {
2614
+ let xyz;
2615
+ opt.d50 = true;
2616
+ if (value.startsWith(FN_COLOR)) {
2617
+ xyz = parseColorFunc(value, opt);
2618
+ } else {
2619
+ xyz = parseColorValue(value, opt);
2620
+ }
2621
+ if (xyz instanceof NullObject) {
2622
+ return xyz;
2623
+ }
2624
+ [, x, y, z, alpha] = xyz as ComputedColorChannels;
2625
+ } else if (value.startsWith(FN_COLOR)) {
2626
+ [, x, y, z, alpha] = parseColorFunc(value, {
2627
+ d50: true
2628
+ }) as ComputedColorChannels;
2629
+ } else {
2630
+ [, x, y, z, alpha] = parseColorValue(value, {
2631
+ d50: true
2632
+ }) as ComputedColorChannels;
2633
+ }
2634
+ [l, a, b] = transformXyzD50ToLab([x, y, z], true);
2635
+ return [l, a, b, alpha];
2636
+ };
2637
+
2638
+ /**
2639
+ * convert color value to lch
2640
+ * @param value - CSS color value
2641
+ * @param [opt] - options
2642
+ * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless
2643
+ */
2644
+ export const convertColorToLch = (
2645
+ value: string,
2646
+ opt: Options = {}
2647
+ ): ColorChannels | [number, number, number | string, number] | NullObject => {
2648
+ if (isString(value)) {
2649
+ value = value.trim();
2650
+ } else {
2651
+ throw new TypeError(`${value} is not a string.`);
2652
+ }
2653
+ const { format = '' } = opt;
2654
+ let l, c, h, alpha;
2655
+ if (REG_LCH.test(value)) {
2656
+ [, l, c, h, alpha] = parseLch(value, {
2657
+ format: VAL_COMP
2658
+ }) as ComputedColorChannels;
2659
+ return [l, c, h, alpha];
2660
+ }
2661
+ let x, y, z;
2662
+ if (format === VAL_MIX) {
2663
+ let xyz;
2664
+ opt.d50 = true;
2665
+ if (value.startsWith(FN_COLOR)) {
2666
+ xyz = parseColorFunc(value, opt);
2667
+ } else {
2668
+ xyz = parseColorValue(value, opt);
2669
+ }
2670
+ if (xyz instanceof NullObject) {
2671
+ return xyz;
2672
+ }
2673
+ [, x, y, z, alpha] = xyz as ComputedColorChannels;
2674
+ } else if (value.startsWith(FN_COLOR)) {
2675
+ [, x, y, z, alpha] = parseColorFunc(value, {
2676
+ d50: true
2677
+ }) as ComputedColorChannels;
2678
+ } else {
2679
+ [, x, y, z, alpha] = parseColorValue(value, {
2680
+ d50: true
2681
+ }) as ComputedColorChannels;
2682
+ }
2683
+ [l, c, h] = transformXyzD50ToLch([x, y, z], true);
2684
+ return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];
2685
+ };
2686
+
2687
+ /**
2688
+ * convert color value to oklab
2689
+ * @param value - CSS color value
2690
+ * @param [opt] - options
2691
+ * @returns ColorChannels | NullObject - [l, a, b, alpha]
2692
+ */
2693
+ export const convertColorToOklab = (
2694
+ value: string,
2695
+ opt: Options = {}
2696
+ ): ColorChannels | NullObject => {
2697
+ if (isString(value)) {
2698
+ value = value.trim();
2699
+ } else {
2700
+ throw new TypeError(`${value} is not a string.`);
2701
+ }
2702
+ const { format = '' } = opt;
2703
+ let l, a, b, alpha;
2704
+ if (REG_OKLAB.test(value)) {
2705
+ [, l, a, b, alpha] = parseOklab(value, {
2706
+ format: VAL_COMP
2707
+ }) as ComputedColorChannels;
2708
+ return [l, a, b, alpha];
2709
+ }
2710
+ let x, y, z;
2711
+ if (format === VAL_MIX) {
2712
+ let xyz;
2713
+ if (value.startsWith(FN_COLOR)) {
2714
+ xyz = parseColorFunc(value, opt);
2715
+ } else {
2716
+ xyz = parseColorValue(value, opt);
2717
+ }
2718
+ if (xyz instanceof NullObject) {
2719
+ return xyz;
2720
+ }
2721
+ [, x, y, z, alpha] = xyz as ComputedColorChannels;
2722
+ } else if (value.startsWith(FN_COLOR)) {
2723
+ [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;
2724
+ } else {
2725
+ [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;
2726
+ }
2727
+ [l, a, b] = transformXyzToOklab([x, y, z], true);
2728
+ return [l, a, b, alpha];
2729
+ };
2730
+
2731
+ /**
2732
+ * convert color value to oklch
2733
+ * @param value - CSS color value
2734
+ * @param [opt] - options
2735
+ * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless
2736
+ */
2737
+ export const convertColorToOklch = (
2738
+ value: string,
2739
+ opt: Options = {}
2740
+ ): ColorChannels | [number, number, number | string, number] | NullObject => {
2741
+ if (isString(value)) {
2742
+ value = value.trim();
2743
+ } else {
2744
+ throw new TypeError(`${value} is not a string.`);
2745
+ }
2746
+ const { format = '' } = opt;
2747
+ let l, c, h, alpha;
2748
+ if (REG_OKLCH.test(value)) {
2749
+ [, l, c, h, alpha] = parseOklch(value, {
2750
+ format: VAL_COMP
2751
+ }) as ComputedColorChannels;
2752
+ return [l, c, h, alpha];
2753
+ }
2754
+ let x, y, z;
2755
+ if (format === VAL_MIX) {
2756
+ let xyz;
2757
+ if (value.startsWith(FN_COLOR)) {
2758
+ xyz = parseColorFunc(value, opt);
2759
+ } else {
2760
+ xyz = parseColorValue(value, opt);
2761
+ }
2762
+ if (xyz instanceof NullObject) {
2763
+ return xyz;
2764
+ }
2765
+ [, x, y, z, alpha] = xyz as ComputedColorChannels;
2766
+ } else if (value.startsWith(FN_COLOR)) {
2767
+ [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;
2768
+ } else {
2769
+ [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;
2770
+ }
2771
+ [l, c, h] = transformXyzToOklch([x, y, z], true) as TriColorChannels;
2772
+ return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];
2773
+ };
2774
+
2775
+ /**
2776
+ * resolve color-mix()
2777
+ * @param value - color-mix color value
2778
+ * @param [opt] - options
2779
+ * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)'
2780
+ */
2781
+ export const resolveColorMix = (
2782
+ value: string,
2783
+ opt: Options = {}
2784
+ ): SpecifiedColorChannels | string | NullObject => {
2785
+ if (isString(value)) {
2786
+ value = value.toLowerCase().trim();
2787
+ } else {
2788
+ throw new TypeError(`${value} is not a string.`);
2789
+ }
2790
+ const { format = '', nullable = false } = opt;
2791
+ const cacheKey: string = createCacheKey(
2792
+ {
2793
+ namespace: NAMESPACE,
2794
+ name: 'resolveColorMix',
2795
+ value
2796
+ },
2797
+ opt
2798
+ );
2799
+ const cachedResult = getCache(cacheKey);
2800
+ if (cachedResult instanceof CacheItem) {
2801
+ if (cachedResult.isNull) {
2802
+ return cachedResult as NullObject;
2803
+ }
2804
+ const cachedItem = cachedResult.item;
2805
+ if (isString(cachedItem)) {
2806
+ return cachedItem as string;
2807
+ }
2808
+ return cachedItem as SpecifiedColorChannels;
2809
+ }
2810
+ const nestedItems = [];
2811
+ let colorSpace = '';
2812
+ let hueArc = '';
2813
+ let colorA = '';
2814
+ let pctA = '';
2815
+ let colorB = '';
2816
+ let pctB = '';
2817
+ let parsed = false;
2818
+ if (!REG_MIX.test(value)) {
2819
+ // nested color-mix()
2820
+ if (value.startsWith(FN_MIX) && REG_MIX_NEST.test(value)) {
2821
+ const regColorSpace = new RegExp(`^(?:${CS_RGB}|${CS_XYZ})$`);
2822
+ const items = value.match(REG_MIX_NEST) as RegExpMatchArray;
2823
+ for (const item of items) {
2824
+ if (item) {
2825
+ let val = resolveColorMix(item, {
2826
+ format: format === VAL_SPEC ? format : VAL_COMP
2827
+ }) as ComputedColorChannels | string;
2828
+ // computed value
2829
+ if (Array.isArray(val)) {
2830
+ const [cs, v1, v2, v3, v4] = val as ComputedColorChannels;
2831
+ if (v1 === 0 && v2 === 0 && v3 === 0 && v4 === 0) {
2832
+ value = '';
2833
+ break;
2834
+ }
2835
+ if (regColorSpace.test(cs)) {
2836
+ if (v4 === 1) {
2837
+ val = `color(${cs} ${v1} ${v2} ${v3})`;
2838
+ } else {
2839
+ val = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;
2840
+ }
2841
+ } else if (v4 === 1) {
2842
+ val = `${cs}(${v1} ${v2} ${v3})`;
2843
+ } else {
2844
+ val = `${cs}(${v1} ${v2} ${v3} / ${v4})`;
2845
+ }
2846
+ } else if (!REG_MIX.test(val)) {
2847
+ value = '';
2848
+ break;
2849
+ }
2850
+ nestedItems.push(val);
2851
+ value = value.replace(item, val);
2852
+ }
2853
+ }
2854
+ if (!value) {
2855
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
2856
+ return res;
2857
+ }
2858
+ // contains light-dark()
2859
+ } else if (
2860
+ value.startsWith(FN_MIX) &&
2861
+ value.endsWith(')') &&
2862
+ value.includes(FN_LIGHT_DARK)
2863
+ ) {
2864
+ const regColorSpace = new RegExp(`in\\s+(${CS_MIX})`);
2865
+ const colorParts = value.replace(FN_MIX, '').replace(/\)$/, '');
2866
+ const [csPart = '', partA = '', partB = ''] = splitValue(colorParts, {
2867
+ delimiter: ','
2868
+ });
2869
+ const [colorPartA = '', pctPartA = ''] = splitValue(partA);
2870
+ const [colorPartB = '', pctPartB = ''] = splitValue(partB);
2871
+ const specifiedColorA = resolveColor(colorPartA, {
2872
+ format: VAL_SPEC
2873
+ }) as string;
2874
+ const specifiedColorB = resolveColor(colorPartB, {
2875
+ format: VAL_SPEC
2876
+ }) as string;
2877
+ if (regColorSpace.test(csPart) && specifiedColorA && specifiedColorB) {
2878
+ if (format === VAL_SPEC) {
2879
+ const [, cs] = csPart.match(regColorSpace) as MatchedRegExp;
2880
+ if (REG_CS_HUE.test(cs)) {
2881
+ [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;
2882
+ } else {
2883
+ colorSpace = cs;
2884
+ }
2885
+ colorA = specifiedColorA;
2886
+ if (pctPartA) {
2887
+ pctA = pctPartA;
2888
+ }
2889
+ colorB = specifiedColorB;
2890
+ if (pctPartB) {
2891
+ pctB = pctPartB;
2892
+ }
2893
+ value = value
2894
+ .replace(colorPartA, specifiedColorA)
2895
+ .replace(colorPartB, specifiedColorB);
2896
+ parsed = true;
2897
+ } else {
2898
+ const resolvedColorA = resolveColor(colorPartA, opt);
2899
+ const resolvedColorB = resolveColor(colorPartB, opt);
2900
+ if (isString(resolvedColorA) && isString(resolvedColorB)) {
2901
+ value = value
2902
+ .replace(colorPartA, resolvedColorA)
2903
+ .replace(colorPartB, resolvedColorB);
2904
+ }
2905
+ }
2906
+ } else {
2907
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
2908
+ return res;
2909
+ }
2910
+ } else {
2911
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
2912
+ return res;
2913
+ }
2914
+ }
2915
+ if (nestedItems.length && format === VAL_SPEC) {
2916
+ const regColorSpace = new RegExp(`^color-mix\\(\\s*in\\s+(${CS_MIX})\\s*,`);
2917
+ const [, cs] = value.match(regColorSpace) as MatchedRegExp;
2918
+ if (REG_CS_HUE.test(cs)) {
2919
+ [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;
2920
+ } else {
2921
+ colorSpace = cs;
2922
+ }
2923
+ if (nestedItems.length === 2) {
2924
+ let [itemA, itemB] = nestedItems as [string, string];
2925
+ itemA = itemA.replace(/(?=[()])/g, '\\');
2926
+ itemB = itemB.replace(/(?=[()])/g, '\\');
2927
+ const regA = new RegExp(`(${itemA})(?:\\s+(${PCT}))?`);
2928
+ const regB = new RegExp(`(${itemB})(?:\\s+(${PCT}))?`);
2929
+ [, colorA, pctA] = value.match(regA) as MatchedRegExp;
2930
+ [, colorB, pctB] = value.match(regB) as MatchedRegExp;
2931
+ } else {
2932
+ let [item] = nestedItems as [string];
2933
+ item = item.replace(/(?=[()])/g, '\\');
2934
+ const itemPart = `${item}(?:\\s+${PCT})?`;
2935
+ const itemPartCapt = `(${item})(?:\\s+(${PCT}))?`;
2936
+ const regItemPart = new RegExp(`^${itemPartCapt}$`);
2937
+ const regLastItem = new RegExp(`${itemPartCapt}\\s*\\)$`);
2938
+ const regColorPart = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\s+(${PCT}))?$`);
2939
+ // item is at the end
2940
+ if (regLastItem.test(value)) {
2941
+ const reg = new RegExp(
2942
+ `(${SYN_MIX_PART})\\s*,\\s*(${itemPart})\\s*\\)$`
2943
+ );
2944
+ const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;
2945
+ [, colorA, pctA] = colorPartA.match(regColorPart) as MatchedRegExp;
2946
+ [, colorB, pctB] = colorPartB.match(regItemPart) as MatchedRegExp;
2947
+ } else {
2948
+ const reg = new RegExp(
2949
+ `(${itemPart})\\s*,\\s*(${SYN_MIX_PART})\\s*\\)$`
2950
+ );
2951
+ const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;
2952
+ [, colorA, pctA] = colorPartA.match(regItemPart) as MatchedRegExp;
2953
+ [, colorB, pctB] = colorPartB.match(regColorPart) as MatchedRegExp;
2954
+ }
2955
+ }
2956
+ } else if (!parsed) {
2957
+ const [, cs, colorPartA, colorPartB] = value.match(
2958
+ REG_MIX_CAPT
2959
+ ) as MatchedRegExp;
2960
+ const reg = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\s+(${PCT}))?$`);
2961
+ [, colorA, pctA] = colorPartA.match(reg) as MatchedRegExp;
2962
+ [, colorB, pctB] = colorPartB.match(reg) as MatchedRegExp;
2963
+ if (REG_CS_HUE.test(cs)) {
2964
+ [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;
2965
+ } else {
2966
+ colorSpace = cs;
2967
+ }
2968
+ }
2969
+ // normalize percentages and set multipler
2970
+ let pA, pB, m;
2971
+ if (pctA && pctB) {
2972
+ const p1 = parseFloat(pctA) / MAX_PCT;
2973
+ const p2 = parseFloat(pctB) / MAX_PCT;
2974
+ if (p1 < 0 || p1 > 1 || p2 < 0 || p2 > 1 || (p1 === 0 && p2 === 0)) {
2975
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
2976
+ return res;
2977
+ }
2978
+ const factor = p1 + p2;
2979
+ pA = p1 / factor;
2980
+ pB = p2 / factor;
2981
+ m = factor < 1 ? factor : 1;
2982
+ } else {
2983
+ if (pctA) {
2984
+ pA = parseFloat(pctA) / MAX_PCT;
2985
+ if (pA < 0 || pA > 1) {
2986
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
2987
+ return res;
2988
+ }
2989
+ pB = 1 - pA;
2990
+ } else if (pctB) {
2991
+ pB = parseFloat(pctB) / MAX_PCT;
2992
+ if (pB < 0 || pB > 1) {
2993
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
2994
+ return res;
2995
+ }
2996
+ pA = 1 - pB;
2997
+ } else {
2998
+ pA = HALF;
2999
+ pB = HALF;
3000
+ }
3001
+ m = 1;
3002
+ }
3003
+ if (colorSpace === 'xyz') {
3004
+ colorSpace = 'xyz-d65';
3005
+ }
3006
+ // specified value
3007
+ if (format === VAL_SPEC) {
3008
+ let valueA = '';
3009
+ let valueB = '';
3010
+ if (colorA.startsWith(FN_MIX) || colorA.startsWith(FN_LIGHT_DARK)) {
3011
+ valueA = colorA;
3012
+ } else if (colorA.startsWith(FN_COLOR)) {
3013
+ const [cs, v1, v2, v3, v4] = parseColorFunc(
3014
+ colorA,
3015
+ opt
3016
+ ) as SpecifiedColorChannels;
3017
+ if (v4 === 1) {
3018
+ valueA = `color(${cs} ${v1} ${v2} ${v3})`;
3019
+ } else {
3020
+ valueA = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;
3021
+ }
3022
+ } else {
3023
+ const val = parseColorValue(colorA, opt);
3024
+ if (Array.isArray(val)) {
3025
+ const [cs, v1, v2, v3, v4] = val;
3026
+ if (v4 === 1) {
3027
+ if (cs === 'rgb') {
3028
+ valueA = `${cs}(${v1}, ${v2}, ${v3})`;
3029
+ } else {
3030
+ valueA = `${cs}(${v1} ${v2} ${v3})`;
3031
+ }
3032
+ } else if (cs === 'rgb') {
3033
+ valueA = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;
3034
+ } else {
3035
+ valueA = `${cs}(${v1} ${v2} ${v3} / ${v4})`;
3036
+ }
3037
+ } else {
3038
+ if (!isString(val) || !val) {
3039
+ setCache(cacheKey, '');
3040
+ return '';
3041
+ }
3042
+ valueA = val;
3043
+ }
3044
+ }
3045
+ if (colorB.startsWith(FN_MIX) || colorB.startsWith(FN_LIGHT_DARK)) {
3046
+ valueB = colorB;
3047
+ } else if (colorB.startsWith(FN_COLOR)) {
3048
+ const [cs, v1, v2, v3, v4] = parseColorFunc(
3049
+ colorB,
3050
+ opt
3051
+ ) as SpecifiedColorChannels;
3052
+ if (v4 === 1) {
3053
+ valueB = `color(${cs} ${v1} ${v2} ${v3})`;
3054
+ } else {
3055
+ valueB = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;
3056
+ }
3057
+ } else {
3058
+ const val = parseColorValue(colorB, opt);
3059
+ if (Array.isArray(val)) {
3060
+ const [cs, v1, v2, v3, v4] = val;
3061
+ if (v4 === 1) {
3062
+ if (cs === 'rgb') {
3063
+ valueB = `${cs}(${v1}, ${v2}, ${v3})`;
3064
+ } else {
3065
+ valueB = `${cs}(${v1} ${v2} ${v3})`;
3066
+ }
3067
+ } else if (cs === 'rgb') {
3068
+ valueB = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;
3069
+ } else {
3070
+ valueB = `${cs}(${v1} ${v2} ${v3} / ${v4})`;
3071
+ }
3072
+ } else {
3073
+ if (!isString(val) || !val) {
3074
+ setCache(cacheKey, '');
3075
+ return '';
3076
+ }
3077
+ valueB = val;
3078
+ }
3079
+ }
3080
+ if (pctA && pctB) {
3081
+ valueA += ` ${parseFloat(pctA)}%`;
3082
+ valueB += ` ${parseFloat(pctB)}%`;
3083
+ } else if (pctA) {
3084
+ const pA = parseFloat(pctA);
3085
+ if (pA !== MAX_PCT * HALF) {
3086
+ valueA += ` ${pA}%`;
3087
+ }
3088
+ } else if (pctB) {
3089
+ const pA = MAX_PCT - parseFloat(pctB);
3090
+ if (pA !== MAX_PCT * HALF) {
3091
+ valueA += ` ${pA}%`;
3092
+ }
3093
+ }
3094
+ if (hueArc) {
3095
+ const res = `color-mix(in ${colorSpace} ${hueArc} hue, ${valueA}, ${valueB})`;
3096
+ setCache(cacheKey, res);
3097
+ return res;
3098
+ } else {
3099
+ const res = `color-mix(in ${colorSpace}, ${valueA}, ${valueB})`;
3100
+ setCache(cacheKey, res);
3101
+ return res;
3102
+ }
3103
+ }
3104
+ let r = 0;
3105
+ let g = 0;
3106
+ let b = 0;
3107
+ let alpha = 0;
3108
+ // in srgb, srgb-linear
3109
+ if (/^srgb(?:-linear)?$/.test(colorSpace)) {
3110
+ let rgbA, rgbB;
3111
+ if (colorSpace === 'srgb') {
3112
+ if (REG_CURRENT.test(colorA)) {
3113
+ rgbA = [NONE, NONE, NONE, NONE];
3114
+ } else {
3115
+ rgbA = convertColorToRgb(colorA, {
3116
+ colorSpace,
3117
+ format: VAL_MIX
3118
+ });
3119
+ }
3120
+ if (REG_CURRENT.test(colorB)) {
3121
+ rgbB = [NONE, NONE, NONE, NONE];
3122
+ } else {
3123
+ rgbB = convertColorToRgb(colorB, {
3124
+ colorSpace,
3125
+ format: VAL_MIX
3126
+ });
3127
+ }
3128
+ } else {
3129
+ if (REG_CURRENT.test(colorA)) {
3130
+ rgbA = [NONE, NONE, NONE, NONE];
3131
+ } else {
3132
+ rgbA = convertColorToLinearRgb(colorA, {
3133
+ colorSpace,
3134
+ format: VAL_MIX
3135
+ });
3136
+ }
3137
+ if (REG_CURRENT.test(colorB)) {
3138
+ rgbB = [NONE, NONE, NONE, NONE];
3139
+ } else {
3140
+ rgbB = convertColorToLinearRgb(colorB, {
3141
+ colorSpace,
3142
+ format: VAL_MIX
3143
+ });
3144
+ }
3145
+ }
3146
+ if (rgbA instanceof NullObject || rgbB instanceof NullObject) {
3147
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
3148
+ return res;
3149
+ }
3150
+ const [rrA, ggA, bbA, aaA] = rgbA as NumStrColorChannels;
3151
+ const [rrB, ggB, bbB, aaB] = rgbB as NumStrColorChannels;
3152
+ const rNone = rrA === NONE && rrB === NONE;
3153
+ const gNone = ggA === NONE && ggB === NONE;
3154
+ const bNone = bbA === NONE && bbB === NONE;
3155
+ const alphaNone = aaA === NONE && aaB === NONE;
3156
+ const [[rA, gA, bA, alphaA], [rB, gB, bB, alphaB]] =
3157
+ normalizeColorComponents(
3158
+ [rrA, ggA, bbA, aaA],
3159
+ [rrB, ggB, bbB, aaB],
3160
+ true
3161
+ );
3162
+ const factorA = alphaA * pA;
3163
+ const factorB = alphaB * pB;
3164
+ alpha = factorA + factorB;
3165
+ if (alpha === 0) {
3166
+ r = rA * pA + rB * pB;
3167
+ g = gA * pA + gB * pB;
3168
+ b = bA * pA + bB * pB;
3169
+ } else {
3170
+ r = (rA * factorA + rB * factorB) / alpha;
3171
+ g = (gA * factorA + gB * factorB) / alpha;
3172
+ b = (bA * factorA + bB * factorB) / alpha;
3173
+ alpha = parseFloat(alpha.toFixed(3));
3174
+ }
3175
+ if (format === VAL_COMP) {
3176
+ const res: SpecifiedColorChannels = [
3177
+ colorSpace,
3178
+ rNone ? NONE : roundToPrecision(r, HEX),
3179
+ gNone ? NONE : roundToPrecision(g, HEX),
3180
+ bNone ? NONE : roundToPrecision(b, HEX),
3181
+ alphaNone ? NONE : alpha * m
3182
+ ];
3183
+ setCache(cacheKey, res);
3184
+ return res;
3185
+ }
3186
+ r *= MAX_RGB;
3187
+ g *= MAX_RGB;
3188
+ b *= MAX_RGB;
3189
+ // in xyz, xyz-d65, xyz-d50
3190
+ } else if (REG_CS_XYZ.test(colorSpace)) {
3191
+ let xyzA, xyzB;
3192
+ if (REG_CURRENT.test(colorA)) {
3193
+ xyzA = [NONE, NONE, NONE, NONE];
3194
+ } else {
3195
+ xyzA = convertColorToXyz(colorA, {
3196
+ colorSpace,
3197
+ d50: colorSpace === 'xyz-d50',
3198
+ format: VAL_MIX
3199
+ });
3200
+ }
3201
+ if (REG_CURRENT.test(colorB)) {
3202
+ xyzB = [NONE, NONE, NONE, NONE];
3203
+ } else {
3204
+ xyzB = convertColorToXyz(colorB, {
3205
+ colorSpace,
3206
+ d50: colorSpace === 'xyz-d50',
3207
+ format: VAL_MIX
3208
+ });
3209
+ }
3210
+ if (xyzA instanceof NullObject || xyzB instanceof NullObject) {
3211
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
3212
+ return res;
3213
+ }
3214
+ const [xxA, yyA, zzA, aaA] = xyzA;
3215
+ const [xxB, yyB, zzB, aaB] = xyzB;
3216
+ const xNone = xxA === NONE && xxB === NONE;
3217
+ const yNone = yyA === NONE && yyB === NONE;
3218
+ const zNone = zzA === NONE && zzB === NONE;
3219
+ const alphaNone = aaA === NONE && aaB === NONE;
3220
+ const [[xA, yA, zA, alphaA], [xB, yB, zB, alphaB]] =
3221
+ normalizeColorComponents(
3222
+ [xxA, yyA, zzA, aaA],
3223
+ [xxB, yyB, zzB, aaB],
3224
+ true
3225
+ );
3226
+ const factorA = alphaA * pA;
3227
+ const factorB = alphaB * pB;
3228
+ alpha = factorA + factorB;
3229
+ let x, y, z;
3230
+ if (alpha === 0) {
3231
+ x = xA * pA + xB * pB;
3232
+ y = yA * pA + yB * pB;
3233
+ z = zA * pA + zB * pB;
3234
+ } else {
3235
+ x = (xA * factorA + xB * factorB) / alpha;
3236
+ y = (yA * factorA + yB * factorB) / alpha;
3237
+ z = (zA * factorA + zB * factorB) / alpha;
3238
+ alpha = parseFloat(alpha.toFixed(3));
3239
+ }
3240
+ if (format === VAL_COMP) {
3241
+ const res: SpecifiedColorChannels = [
3242
+ colorSpace,
3243
+ xNone ? NONE : roundToPrecision(x, HEX),
3244
+ yNone ? NONE : roundToPrecision(y, HEX),
3245
+ zNone ? NONE : roundToPrecision(z, HEX),
3246
+ alphaNone ? NONE : alpha * m
3247
+ ];
3248
+ setCache(cacheKey, res);
3249
+ return res;
3250
+ }
3251
+ if (colorSpace === 'xyz-d50') {
3252
+ [r, g, b] = transformXyzD50ToRgb([x, y, z], true);
3253
+ } else {
3254
+ [r, g, b] = transformXyzToRgb([x, y, z], true);
3255
+ }
3256
+ // in hsl, hwb
3257
+ } else if (/^h(?:sl|wb)$/.test(colorSpace)) {
3258
+ let hslA, hslB;
3259
+ if (colorSpace === 'hsl') {
3260
+ if (REG_CURRENT.test(colorA)) {
3261
+ hslA = [NONE, NONE, NONE, NONE];
3262
+ } else {
3263
+ hslA = convertColorToHsl(colorA, {
3264
+ colorSpace,
3265
+ format: VAL_MIX
3266
+ });
3267
+ }
3268
+ if (REG_CURRENT.test(colorB)) {
3269
+ hslB = [NONE, NONE, NONE, NONE];
3270
+ } else {
3271
+ hslB = convertColorToHsl(colorB, {
3272
+ colorSpace,
3273
+ format: VAL_MIX
3274
+ });
3275
+ }
3276
+ } else {
3277
+ if (REG_CURRENT.test(colorA)) {
3278
+ hslA = [NONE, NONE, NONE, NONE];
3279
+ } else {
3280
+ hslA = convertColorToHwb(colorA, {
3281
+ colorSpace,
3282
+ format: VAL_MIX
3283
+ });
3284
+ }
3285
+ if (REG_CURRENT.test(colorB)) {
3286
+ hslB = [NONE, NONE, NONE, NONE];
3287
+ } else {
3288
+ hslB = convertColorToHwb(colorB, {
3289
+ colorSpace,
3290
+ format: VAL_MIX
3291
+ });
3292
+ }
3293
+ }
3294
+ if (hslA instanceof NullObject || hslB instanceof NullObject) {
3295
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
3296
+ return res;
3297
+ }
3298
+ const [hhA, ssA, llA, aaA] = hslA;
3299
+ const [hhB, ssB, llB, aaB] = hslB;
3300
+ const alphaNone = aaA === NONE && aaB === NONE;
3301
+ let [[hA, sA, lA, alphaA], [hB, sB, lB, alphaB]] = normalizeColorComponents(
3302
+ [hhA, ssA, llA, aaA],
3303
+ [hhB, ssB, llB, aaB],
3304
+ true
3305
+ );
3306
+ if (hueArc) {
3307
+ [hA, hB] = interpolateHue(hA, hB, hueArc);
3308
+ }
3309
+ const factorA = alphaA * pA;
3310
+ const factorB = alphaB * pB;
3311
+ alpha = factorA + factorB;
3312
+ const h = (hA * pA + hB * pB) % DEG;
3313
+ let s, l;
3314
+ if (alpha === 0) {
3315
+ s = sA * pA + sB * pB;
3316
+ l = lA * pA + lB * pB;
3317
+ } else {
3318
+ s = (sA * factorA + sB * factorB) / alpha;
3319
+ l = (lA * factorA + lB * factorB) / alpha;
3320
+ alpha = parseFloat(alpha.toFixed(3));
3321
+ }
3322
+ [r, g, b] = convertColorToRgb(
3323
+ `${colorSpace}(${h} ${s} ${l})`
3324
+ ) as ColorChannels;
3325
+ if (format === VAL_COMP) {
3326
+ const res: SpecifiedColorChannels = [
3327
+ 'srgb',
3328
+ roundToPrecision(r / MAX_RGB, HEX),
3329
+ roundToPrecision(g / MAX_RGB, HEX),
3330
+ roundToPrecision(b / MAX_RGB, HEX),
3331
+ alphaNone ? NONE : alpha * m
3332
+ ];
3333
+ setCache(cacheKey, res);
3334
+ return res;
3335
+ }
3336
+ // in lch, oklch
3337
+ } else if (/^(?:ok)?lch$/.test(colorSpace)) {
3338
+ let lchA, lchB;
3339
+ if (colorSpace === 'lch') {
3340
+ if (REG_CURRENT.test(colorA)) {
3341
+ lchA = [NONE, NONE, NONE, NONE];
3342
+ } else {
3343
+ lchA = convertColorToLch(colorA, {
3344
+ colorSpace,
3345
+ format: VAL_MIX
3346
+ });
3347
+ }
3348
+ if (REG_CURRENT.test(colorB)) {
3349
+ lchB = [NONE, NONE, NONE, NONE];
3350
+ } else {
3351
+ lchB = convertColorToLch(colorB, {
3352
+ colorSpace,
3353
+ format: VAL_MIX
3354
+ });
3355
+ }
3356
+ } else {
3357
+ if (REG_CURRENT.test(colorA)) {
3358
+ lchA = [NONE, NONE, NONE, NONE];
3359
+ } else {
3360
+ lchA = convertColorToOklch(colorA, {
3361
+ colorSpace,
3362
+ format: VAL_MIX
3363
+ });
3364
+ }
3365
+ if (REG_CURRENT.test(colorB)) {
3366
+ lchB = [NONE, NONE, NONE, NONE];
3367
+ } else {
3368
+ lchB = convertColorToOklch(colorB, {
3369
+ colorSpace,
3370
+ format: VAL_MIX
3371
+ });
3372
+ }
3373
+ }
3374
+ if (lchA instanceof NullObject || lchB instanceof NullObject) {
3375
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
3376
+ return res;
3377
+ }
3378
+ const [llA, ccA, hhA, aaA] = lchA;
3379
+ const [llB, ccB, hhB, aaB] = lchB;
3380
+ const lNone = llA === NONE && llB === NONE;
3381
+ const cNone = ccA === NONE && ccB === NONE;
3382
+ const hNone = hhA === NONE && hhB === NONE;
3383
+ const alphaNone = aaA === NONE && aaB === NONE;
3384
+ let [[lA, cA, hA, alphaA], [lB, cB, hB, alphaB]] = normalizeColorComponents(
3385
+ [llA, ccA, hhA, aaA],
3386
+ [llB, ccB, hhB, aaB],
3387
+ true
3388
+ );
3389
+ if (hueArc) {
3390
+ [hA, hB] = interpolateHue(hA, hB, hueArc);
3391
+ }
3392
+ const factorA = alphaA * pA;
3393
+ const factorB = alphaB * pB;
3394
+ alpha = factorA + factorB;
3395
+ const h = (hA * pA + hB * pB) % DEG;
3396
+ let l, c;
3397
+ if (alpha === 0) {
3398
+ l = lA * pA + lB * pB;
3399
+ c = cA * pA + cB * pB;
3400
+ } else {
3401
+ l = (lA * factorA + lB * factorB) / alpha;
3402
+ c = (cA * factorA + cB * factorB) / alpha;
3403
+ alpha = parseFloat(alpha.toFixed(3));
3404
+ }
3405
+ if (format === VAL_COMP) {
3406
+ const res: SpecifiedColorChannels = [
3407
+ colorSpace,
3408
+ lNone ? NONE : roundToPrecision(l, HEX),
3409
+ cNone ? NONE : roundToPrecision(c, HEX),
3410
+ hNone ? NONE : roundToPrecision(h, HEX),
3411
+ alphaNone ? NONE : alpha * m
3412
+ ];
3413
+ setCache(cacheKey, res);
3414
+ return res;
3415
+ }
3416
+ [, r, g, b] = resolveColorValue(
3417
+ `${colorSpace}(${l} ${c} ${h})`
3418
+ ) as ComputedColorChannels;
3419
+ // in lab, oklab
3420
+ } else {
3421
+ let labA, labB;
3422
+ if (colorSpace === 'lab') {
3423
+ if (REG_CURRENT.test(colorA)) {
3424
+ labA = [NONE, NONE, NONE, NONE];
3425
+ } else {
3426
+ labA = convertColorToLab(colorA, {
3427
+ colorSpace,
3428
+ format: VAL_MIX
3429
+ });
3430
+ }
3431
+ if (REG_CURRENT.test(colorB)) {
3432
+ labB = [NONE, NONE, NONE, NONE];
3433
+ } else {
3434
+ labB = convertColorToLab(colorB, {
3435
+ colorSpace,
3436
+ format: VAL_MIX
3437
+ });
3438
+ }
3439
+ } else {
3440
+ if (REG_CURRENT.test(colorA)) {
3441
+ labA = [NONE, NONE, NONE, NONE];
3442
+ } else {
3443
+ labA = convertColorToOklab(colorA, {
3444
+ colorSpace,
3445
+ format: VAL_MIX
3446
+ });
3447
+ }
3448
+ if (REG_CURRENT.test(colorB)) {
3449
+ labB = [NONE, NONE, NONE, NONE];
3450
+ } else {
3451
+ labB = convertColorToOklab(colorB, {
3452
+ colorSpace,
3453
+ format: VAL_MIX
3454
+ });
3455
+ }
3456
+ }
3457
+ if (labA instanceof NullObject || labB instanceof NullObject) {
3458
+ const res = cacheInvalidColorValue(cacheKey, format, nullable);
3459
+ return res;
3460
+ }
3461
+ const [llA, aaA, bbA, alA] = labA;
3462
+ const [llB, aaB, bbB, alB] = labB;
3463
+ const lNone = llA === NONE && llB === NONE;
3464
+ const aNone = aaA === NONE && aaB === NONE;
3465
+ const bNone = bbA === NONE && bbB === NONE;
3466
+ const alphaNone = alA === NONE && alB === NONE;
3467
+ const [[lA, aA, bA, alphaA], [lB, aB, bB, alphaB]] =
3468
+ normalizeColorComponents(
3469
+ [llA, aaA, bbA, alA],
3470
+ [llB, aaB, bbB, alB],
3471
+ true
3472
+ );
3473
+ const factorA = alphaA * pA;
3474
+ const factorB = alphaB * pB;
3475
+ alpha = factorA + factorB;
3476
+ let l, aO, bO;
3477
+ if (alpha === 0) {
3478
+ l = lA * pA + lB * pB;
3479
+ aO = aA * pA + aB * pB;
3480
+ bO = bA * pA + bB * pB;
3481
+ } else {
3482
+ l = (lA * factorA + lB * factorB) / alpha;
3483
+ aO = (aA * factorA + aB * factorB) / alpha;
3484
+ bO = (bA * factorA + bB * factorB) / alpha;
3485
+ alpha = parseFloat(alpha.toFixed(3));
3486
+ }
3487
+ if (format === VAL_COMP) {
3488
+ const res: SpecifiedColorChannels = [
3489
+ colorSpace,
3490
+ lNone ? NONE : roundToPrecision(l, HEX),
3491
+ aNone ? NONE : roundToPrecision(aO, HEX),
3492
+ bNone ? NONE : roundToPrecision(bO, HEX),
3493
+ alphaNone ? NONE : alpha * m
3494
+ ];
3495
+ setCache(cacheKey, res);
3496
+ return res;
3497
+ }
3498
+ [, r, g, b] = resolveColorValue(
3499
+ `${colorSpace}(${l} ${aO} ${bO})`
3500
+ ) as ComputedColorChannels;
3501
+ }
3502
+ const res: SpecifiedColorChannels = [
3503
+ 'rgb',
3504
+ Math.round(r),
3505
+ Math.round(g),
3506
+ Math.round(b),
3507
+ parseFloat((alpha * m).toFixed(3))
3508
+ ];
3509
+ setCache(cacheKey, res);
3510
+ return res;
3511
+ };