@fluixi/utils 1.0.0-alpha.100

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 (364) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +68 -0
  3. package/dist/index.cjs +2858 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +1 -0
  7. package/dist/index.mjs +2838 -0
  8. package/dist/lib/array/advanced.cjs +2227 -0
  9. package/dist/lib/array/advanced.d.ts +1116 -0
  10. package/dist/lib/array/advanced.d.ts.map +1 -0
  11. package/dist/lib/array/advanced.js +2429 -0
  12. package/dist/lib/array/advanced.mjs +2204 -0
  13. package/dist/lib/array/array.cjs +57 -0
  14. package/dist/lib/array/array.d.ts +6 -0
  15. package/dist/lib/array/array.d.ts.map +1 -0
  16. package/dist/lib/array/array.js +31 -0
  17. package/dist/lib/array/array.mjs +36 -0
  18. package/dist/lib/array/index.cjs +2344 -0
  19. package/dist/lib/array/index.d.ts +4 -0
  20. package/dist/lib/array/index.d.ts.map +1 -0
  21. package/dist/lib/array/index.js +3 -0
  22. package/dist/lib/array/index.mjs +2322 -0
  23. package/dist/lib/array/utils.cjs +103 -0
  24. package/dist/lib/array/utils.d.ts +100 -0
  25. package/dist/lib/array/utils.d.ts.map +1 -0
  26. package/dist/lib/array/utils.js +165 -0
  27. package/dist/lib/array/utils.mjs +82 -0
  28. package/dist/lib/color/color.cjs +2190 -0
  29. package/dist/lib/color/color.d.ts +366 -0
  30. package/dist/lib/color/color.d.ts.map +1 -0
  31. package/dist/lib/color/color.js +722 -0
  32. package/dist/lib/color/color.mjs +2167 -0
  33. package/dist/lib/color/constants.cjs +380 -0
  34. package/dist/lib/color/constants.d.ts +361 -0
  35. package/dist/lib/color/constants.d.ts.map +1 -0
  36. package/dist/lib/color/constants.js +358 -0
  37. package/dist/lib/color/constants.mjs +359 -0
  38. package/dist/lib/color/conversions.cjs +629 -0
  39. package/dist/lib/color/conversions.d.ts +166 -0
  40. package/dist/lib/color/conversions.d.ts.map +1 -0
  41. package/dist/lib/color/conversions.js +766 -0
  42. package/dist/lib/color/conversions.mjs +608 -0
  43. package/dist/lib/color/helpers.cjs +2534 -0
  44. package/dist/lib/color/helpers.d.ts +75 -0
  45. package/dist/lib/color/helpers.d.ts.map +1 -0
  46. package/dist/lib/color/helpers.js +419 -0
  47. package/dist/lib/color/helpers.mjs +2511 -0
  48. package/dist/lib/color/index.cjs +2641 -0
  49. package/dist/lib/color/index.d.ts +12 -0
  50. package/dist/lib/color/index.d.ts.map +1 -0
  51. package/dist/lib/color/index.js +15 -0
  52. package/dist/lib/color/index.mjs +2619 -0
  53. package/dist/lib/color/types.cjs +18 -0
  54. package/dist/lib/color/types.d.ts +179 -0
  55. package/dist/lib/color/types.d.ts.map +1 -0
  56. package/dist/lib/color/types.js +1 -0
  57. package/dist/lib/color/types.mjs +0 -0
  58. package/dist/lib/color/utils.cjs +962 -0
  59. package/dist/lib/color/utils.d.ts +199 -0
  60. package/dist/lib/color/utils.d.ts.map +1 -0
  61. package/dist/lib/color/utils.js +858 -0
  62. package/dist/lib/color/utils.mjs +939 -0
  63. package/dist/lib/compare/comparators.cjs +171 -0
  64. package/dist/lib/compare/comparators.d.ts +65 -0
  65. package/dist/lib/compare/comparators.d.ts.map +1 -0
  66. package/dist/lib/compare/comparators.js +210 -0
  67. package/dist/lib/compare/comparators.mjs +150 -0
  68. package/dist/lib/compare/index.cjs +172 -0
  69. package/dist/lib/compare/index.d.ts +2 -0
  70. package/dist/lib/compare/index.d.ts.map +1 -0
  71. package/dist/lib/compare/index.js +1 -0
  72. package/dist/lib/compare/index.mjs +152 -0
  73. package/dist/lib/cookie/codec.cjs +72 -0
  74. package/dist/lib/cookie/codec.d.ts +22 -0
  75. package/dist/lib/cookie/codec.d.ts.map +1 -0
  76. package/dist/lib/cookie/codec.js +67 -0
  77. package/dist/lib/cookie/codec.mjs +51 -0
  78. package/dist/lib/cookie/index.cjs +75 -0
  79. package/dist/lib/cookie/index.d.ts +2 -0
  80. package/dist/lib/cookie/index.d.ts.map +1 -0
  81. package/dist/lib/cookie/index.js +1 -0
  82. package/dist/lib/cookie/index.mjs +53 -0
  83. package/dist/lib/crypto/hash.cjs +83 -0
  84. package/dist/lib/crypto/hash.d.ts +6 -0
  85. package/dist/lib/crypto/hash.d.ts.map +1 -0
  86. package/dist/lib/crypto/hash.js +53 -0
  87. package/dist/lib/crypto/hash.mjs +62 -0
  88. package/dist/lib/crypto/index.cjs +85 -0
  89. package/dist/lib/crypto/index.d.ts +2 -0
  90. package/dist/lib/crypto/index.d.ts.map +1 -0
  91. package/dist/lib/crypto/index.js +1 -0
  92. package/dist/lib/crypto/index.mjs +62 -0
  93. package/dist/lib/dom/events.cjs +40 -0
  94. package/dist/lib/dom/events.d.ts +159 -0
  95. package/dist/lib/dom/events.d.ts.map +1 -0
  96. package/dist/lib/dom/events.js +50 -0
  97. package/dist/lib/dom/events.mjs +19 -0
  98. package/dist/lib/dom/index.cjs +78 -0
  99. package/dist/lib/dom/index.d.ts +3 -0
  100. package/dist/lib/dom/index.d.ts.map +1 -0
  101. package/dist/lib/dom/index.js +2 -0
  102. package/dist/lib/dom/index.mjs +56 -0
  103. package/dist/lib/dom/utils.cjs +57 -0
  104. package/dist/lib/dom/utils.d.ts +6 -0
  105. package/dist/lib/dom/utils.d.ts.map +1 -0
  106. package/dist/lib/dom/utils.js +37 -0
  107. package/dist/lib/dom/utils.mjs +36 -0
  108. package/dist/lib/functions/functions.cjs +366 -0
  109. package/dist/lib/functions/functions.d.ts +329 -0
  110. package/dist/lib/functions/functions.d.ts.map +1 -0
  111. package/dist/lib/functions/functions.js +585 -0
  112. package/dist/lib/functions/functions.mjs +345 -0
  113. package/dist/lib/functions/index.cjs +369 -0
  114. package/dist/lib/functions/index.d.ts +3 -0
  115. package/dist/lib/functions/index.d.ts.map +1 -0
  116. package/dist/lib/functions/index.js +1 -0
  117. package/dist/lib/functions/index.mjs +347 -0
  118. package/dist/lib/functions/types.cjs +18 -0
  119. package/dist/lib/functions/types.d.ts +2 -0
  120. package/dist/lib/functions/types.d.ts.map +1 -0
  121. package/dist/lib/functions/types.js +1 -0
  122. package/dist/lib/functions/types.mjs +0 -0
  123. package/dist/lib/helpers.cjs +78 -0
  124. package/dist/lib/helpers.d.ts +13 -0
  125. package/dist/lib/helpers.d.ts.map +1 -0
  126. package/dist/lib/helpers.js +66 -0
  127. package/dist/lib/helpers.mjs +59 -0
  128. package/dist/lib/index.cjs +2857 -0
  129. package/dist/lib/index.d.ts +6 -0
  130. package/dist/lib/index.d.ts.map +1 -0
  131. package/dist/lib/index.js +8 -0
  132. package/dist/lib/index.mjs +2836 -0
  133. package/dist/lib/maths/constants.cjs +70 -0
  134. package/dist/lib/maths/constants.d.ts +84 -0
  135. package/dist/lib/maths/constants.d.ts.map +1 -0
  136. package/dist/lib/maths/constants.js +79 -0
  137. package/dist/lib/maths/constants.mjs +50 -0
  138. package/dist/lib/maths/fn/advanced.cjs +231 -0
  139. package/dist/lib/maths/fn/advanced.d.ts +149 -0
  140. package/dist/lib/maths/fn/advanced.d.ts.map +1 -0
  141. package/dist/lib/maths/fn/advanced.js +264 -0
  142. package/dist/lib/maths/fn/advanced.mjs +208 -0
  143. package/dist/lib/maths/fn/basic.cjs +212 -0
  144. package/dist/lib/maths/fn/basic.d.ts +182 -0
  145. package/dist/lib/maths/fn/basic.d.ts.map +1 -0
  146. package/dist/lib/maths/fn/basic.js +343 -0
  147. package/dist/lib/maths/fn/basic.mjs +191 -0
  148. package/dist/lib/maths/fn/complex.cjs +268 -0
  149. package/dist/lib/maths/fn/complex.d.ts +153 -0
  150. package/dist/lib/maths/fn/complex.d.ts.map +1 -0
  151. package/dist/lib/maths/fn/complex.js +383 -0
  152. package/dist/lib/maths/fn/complex.mjs +247 -0
  153. package/dist/lib/maths/fn/index.cjs +877 -0
  154. package/dist/lib/maths/fn/index.d.ts +10 -0
  155. package/dist/lib/maths/fn/index.d.ts.map +1 -0
  156. package/dist/lib/maths/fn/index.js +9 -0
  157. package/dist/lib/maths/fn/index.mjs +855 -0
  158. package/dist/lib/maths/fn/trigo.cjs +179 -0
  159. package/dist/lib/maths/fn/trigo.d.ts +147 -0
  160. package/dist/lib/maths/fn/trigo.d.ts.map +1 -0
  161. package/dist/lib/maths/fn/trigo.js +227 -0
  162. package/dist/lib/maths/fn/trigo.mjs +156 -0
  163. package/dist/lib/maths/fn/vector.cjs +728 -0
  164. package/dist/lib/maths/fn/vector.d.ts +512 -0
  165. package/dist/lib/maths/fn/vector.d.ts.map +1 -0
  166. package/dist/lib/maths/fn/vector.js +1136 -0
  167. package/dist/lib/maths/fn/vector.mjs +707 -0
  168. package/dist/lib/maths/formatter.cjs +61 -0
  169. package/dist/lib/maths/formatter.d.ts +35 -0
  170. package/dist/lib/maths/formatter.d.ts.map +1 -0
  171. package/dist/lib/maths/formatter.js +56 -0
  172. package/dist/lib/maths/formatter.mjs +40 -0
  173. package/dist/lib/maths/guards.cjs +164 -0
  174. package/dist/lib/maths/guards.d.ts +166 -0
  175. package/dist/lib/maths/guards.d.ts.map +1 -0
  176. package/dist/lib/maths/guards.js +315 -0
  177. package/dist/lib/maths/guards.mjs +144 -0
  178. package/dist/lib/maths/index.cjs +1152 -0
  179. package/dist/lib/maths/index.d.ts +24 -0
  180. package/dist/lib/maths/index.d.ts.map +1 -0
  181. package/dist/lib/maths/index.js +29 -0
  182. package/dist/lib/maths/index.mjs +1130 -0
  183. package/dist/lib/maths/parser.cjs +75 -0
  184. package/dist/lib/maths/parser.d.ts +20 -0
  185. package/dist/lib/maths/parser.d.ts.map +1 -0
  186. package/dist/lib/maths/parser.js +78 -0
  187. package/dist/lib/maths/parser.mjs +54 -0
  188. package/dist/lib/maths/random.cjs +49 -0
  189. package/dist/lib/maths/random.d.ts +27 -0
  190. package/dist/lib/maths/random.d.ts.map +1 -0
  191. package/dist/lib/maths/random.js +49 -0
  192. package/dist/lib/maths/random.mjs +28 -0
  193. package/dist/lib/maths/types/advanced.cjs +18 -0
  194. package/dist/lib/maths/types/advanced.d.ts +357 -0
  195. package/dist/lib/maths/types/advanced.d.ts.map +1 -0
  196. package/dist/lib/maths/types/advanced.js +5 -0
  197. package/dist/lib/maths/types/advanced.mjs +0 -0
  198. package/dist/lib/maths/types/basic.cjs +18 -0
  199. package/dist/lib/maths/types/basic.d.ts +95 -0
  200. package/dist/lib/maths/types/basic.d.ts.map +1 -0
  201. package/dist/lib/maths/types/basic.js +5 -0
  202. package/dist/lib/maths/types/basic.mjs +0 -0
  203. package/dist/lib/maths/types/index.cjs +19 -0
  204. package/dist/lib/maths/types/index.d.ts +4 -0
  205. package/dist/lib/maths/types/index.d.ts.map +1 -0
  206. package/dist/lib/maths/types/index.js +3 -0
  207. package/dist/lib/maths/types/index.mjs +1 -0
  208. package/dist/lib/maths/types/negative.cjs +18 -0
  209. package/dist/lib/maths/types/negative.d.ts +51 -0
  210. package/dist/lib/maths/types/negative.d.ts.map +1 -0
  211. package/dist/lib/maths/types/negative.js +5 -0
  212. package/dist/lib/maths/types/negative.mjs +0 -0
  213. package/dist/lib/maths/types/operations.cjs +18 -0
  214. package/dist/lib/maths/types/operations.d.ts +188 -0
  215. package/dist/lib/maths/types/operations.d.ts.map +1 -0
  216. package/dist/lib/maths/types/operations.js +6 -0
  217. package/dist/lib/maths/types/operations.mjs +0 -0
  218. package/dist/lib/object/clone.cjs +88 -0
  219. package/dist/lib/object/clone.d.ts +46 -0
  220. package/dist/lib/object/clone.d.ts.map +1 -0
  221. package/dist/lib/object/clone.js +104 -0
  222. package/dist/lib/object/clone.mjs +65 -0
  223. package/dist/lib/object/diff.cjs +573 -0
  224. package/dist/lib/object/diff.d.ts +203 -0
  225. package/dist/lib/object/diff.d.ts.map +1 -0
  226. package/dist/lib/object/diff.js +805 -0
  227. package/dist/lib/object/diff.mjs +550 -0
  228. package/dist/lib/object/getter-setter.cjs +2351 -0
  229. package/dist/lib/object/getter-setter.d.ts +361 -0
  230. package/dist/lib/object/getter-setter.d.ts.map +1 -0
  231. package/dist/lib/object/getter-setter.js +1771 -0
  232. package/dist/lib/object/getter-setter.mjs +2330 -0
  233. package/dist/lib/object/index.cjs +3956 -0
  234. package/dist/lib/object/index.d.ts +13 -0
  235. package/dist/lib/object/index.d.ts.map +1 -0
  236. package/dist/lib/object/index.js +12 -0
  237. package/dist/lib/object/index.mjs +3936 -0
  238. package/dist/lib/object/merge.cjs +1029 -0
  239. package/dist/lib/object/merge.d.ts +93 -0
  240. package/dist/lib/object/merge.d.ts.map +1 -0
  241. package/dist/lib/object/merge.js +474 -0
  242. package/dist/lib/object/merge.mjs +1006 -0
  243. package/dist/lib/object/object.cjs +280 -0
  244. package/dist/lib/object/object.d.ts +128 -0
  245. package/dist/lib/object/object.d.ts.map +1 -0
  246. package/dist/lib/object/object.js +432 -0
  247. package/dist/lib/object/object.mjs +257 -0
  248. package/dist/lib/object/omit.cjs +2022 -0
  249. package/dist/lib/object/omit.d.ts +351 -0
  250. package/dist/lib/object/omit.d.ts.map +1 -0
  251. package/dist/lib/object/omit.js +656 -0
  252. package/dist/lib/object/omit.mjs +1999 -0
  253. package/dist/lib/object/reconcile.cjs +126 -0
  254. package/dist/lib/object/reconcile.d.ts +7 -0
  255. package/dist/lib/object/reconcile.d.ts.map +1 -0
  256. package/dist/lib/object/reconcile.js +122 -0
  257. package/dist/lib/object/reconcile.mjs +105 -0
  258. package/dist/lib/object/selector.cjs +303 -0
  259. package/dist/lib/object/selector.d.ts +50 -0
  260. package/dist/lib/object/selector.d.ts.map +1 -0
  261. package/dist/lib/object/selector.js +371 -0
  262. package/dist/lib/object/selector.mjs +282 -0
  263. package/dist/lib/object/sort.cjs +209 -0
  264. package/dist/lib/object/sort.d.ts +149 -0
  265. package/dist/lib/object/sort.d.ts.map +1 -0
  266. package/dist/lib/object/sort.js +298 -0
  267. package/dist/lib/object/sort.mjs +186 -0
  268. package/dist/lib/object/transform.cjs +2211 -0
  269. package/dist/lib/object/transform.d.ts +620 -0
  270. package/dist/lib/object/transform.d.ts.map +1 -0
  271. package/dist/lib/object/transform.js +1058 -0
  272. package/dist/lib/object/transform.mjs +2190 -0
  273. package/dist/lib/object/types.cjs +18 -0
  274. package/dist/lib/object/types.d.ts +250 -0
  275. package/dist/lib/object/types.d.ts.map +1 -0
  276. package/dist/lib/object/types.js +1 -0
  277. package/dist/lib/object/types.mjs +0 -0
  278. package/dist/lib/object/utils.cjs +326 -0
  279. package/dist/lib/object/utils.d.ts +165 -0
  280. package/dist/lib/object/utils.d.ts.map +1 -0
  281. package/dist/lib/object/utils.js +444 -0
  282. package/dist/lib/object/utils.mjs +305 -0
  283. package/dist/lib/primitive/boolean/boolean.cjs +407 -0
  284. package/dist/lib/primitive/boolean/boolean.d.ts +276 -0
  285. package/dist/lib/primitive/boolean/boolean.d.ts.map +1 -0
  286. package/dist/lib/primitive/boolean/boolean.js +615 -0
  287. package/dist/lib/primitive/boolean/boolean.mjs +386 -0
  288. package/dist/lib/primitive/boolean/index.cjs +382 -0
  289. package/dist/lib/primitive/boolean/index.d.ts +3 -0
  290. package/dist/lib/primitive/boolean/index.d.ts.map +1 -0
  291. package/dist/lib/primitive/boolean/index.js +2 -0
  292. package/dist/lib/primitive/boolean/index.mjs +359 -0
  293. package/dist/lib/primitive/boolean/types.cjs +18 -0
  294. package/dist/lib/primitive/boolean/types.d.ts +14 -0
  295. package/dist/lib/primitive/boolean/types.d.ts.map +1 -0
  296. package/dist/lib/primitive/boolean/types.js +1 -0
  297. package/dist/lib/primitive/boolean/types.mjs +0 -0
  298. package/dist/lib/primitive/date/date.cjs +1126 -0
  299. package/dist/lib/primitive/date/date.d.ts +641 -0
  300. package/dist/lib/primitive/date/date.d.ts.map +1 -0
  301. package/dist/lib/primitive/date/date.js +1998 -0
  302. package/dist/lib/primitive/date/date.mjs +1105 -0
  303. package/dist/lib/primitive/date/index.cjs +1128 -0
  304. package/dist/lib/primitive/date/index.d.ts +3 -0
  305. package/dist/lib/primitive/date/index.d.ts.map +1 -0
  306. package/dist/lib/primitive/date/index.js +2 -0
  307. package/dist/lib/primitive/date/index.mjs +1105 -0
  308. package/dist/lib/primitive/date/types.cjs +18 -0
  309. package/dist/lib/primitive/date/types.d.ts +205 -0
  310. package/dist/lib/primitive/date/types.d.ts.map +1 -0
  311. package/dist/lib/primitive/date/types.js +7 -0
  312. package/dist/lib/primitive/date/types.mjs +0 -0
  313. package/dist/lib/primitive/index.cjs +2338 -0
  314. package/dist/lib/primitive/index.d.ts +5 -0
  315. package/dist/lib/primitive/index.d.ts.map +1 -0
  316. package/dist/lib/primitive/index.js +4 -0
  317. package/dist/lib/primitive/index.mjs +2316 -0
  318. package/dist/lib/primitive/string/index.cjs +875 -0
  319. package/dist/lib/primitive/string/index.d.ts +3 -0
  320. package/dist/lib/primitive/string/index.d.ts.map +1 -0
  321. package/dist/lib/primitive/string/index.js +2 -0
  322. package/dist/lib/primitive/string/index.mjs +852 -0
  323. package/dist/lib/primitive/string/parser-2.cjs +543 -0
  324. package/dist/lib/primitive/string/parser-2.d.ts +17 -0
  325. package/dist/lib/primitive/string/parser-2.d.ts.map +1 -0
  326. package/dist/lib/primitive/string/parser-2.js +656 -0
  327. package/dist/lib/primitive/string/parser-2.mjs +522 -0
  328. package/dist/lib/primitive/string/parser.cjs +236 -0
  329. package/dist/lib/primitive/string/parser.d.ts +9 -0
  330. package/dist/lib/primitive/string/parser.d.ts.map +1 -0
  331. package/dist/lib/primitive/string/parser.js +775 -0
  332. package/dist/lib/primitive/string/parser.mjs +215 -0
  333. package/dist/lib/primitive/string/string.cjs +926 -0
  334. package/dist/lib/primitive/string/string.d.ts +535 -0
  335. package/dist/lib/primitive/string/string.d.ts.map +1 -0
  336. package/dist/lib/primitive/string/string.js +1301 -0
  337. package/dist/lib/primitive/string/string.mjs +903 -0
  338. package/dist/lib/primitive/string/types.cjs +18 -0
  339. package/dist/lib/primitive/string/types.d.ts +318 -0
  340. package/dist/lib/primitive/string/types.d.ts.map +1 -0
  341. package/dist/lib/primitive/string/types.js +5 -0
  342. package/dist/lib/primitive/string/types.mjs +0 -0
  343. package/dist/lib/primitive/types.cjs +18 -0
  344. package/dist/lib/primitive/types.d.ts +27 -0
  345. package/dist/lib/primitive/types.d.ts.map +1 -0
  346. package/dist/lib/primitive/types.js +1 -0
  347. package/dist/lib/primitive/types.mjs +0 -0
  348. package/dist/lib/url/index.cjs +327 -0
  349. package/dist/lib/url/index.d.ts +3 -0
  350. package/dist/lib/url/index.d.ts.map +1 -0
  351. package/dist/lib/url/index.js +2 -0
  352. package/dist/lib/url/index.mjs +304 -0
  353. package/dist/lib/url/parser.cjs +325 -0
  354. package/dist/lib/url/parser.d.ts +216 -0
  355. package/dist/lib/url/parser.d.ts.map +1 -0
  356. package/dist/lib/url/parser.js +488 -0
  357. package/dist/lib/url/parser.mjs +304 -0
  358. package/dist/lib/url/types.cjs +18 -0
  359. package/dist/lib/url/types.d.ts +18 -0
  360. package/dist/lib/url/types.d.ts.map +1 -0
  361. package/dist/lib/url/types.js +1 -0
  362. package/dist/lib/url/types.mjs +0 -0
  363. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  364. package/package.json +127 -0
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @fileoverview Advanced color helper utilities
3
+ * Provides temperature adjustments, color blindness simulation, and other advanced operations
4
+ */
5
+ import type { ColorTemperatureOptions } from './types.js';
6
+ import { Color } from './color.js';
7
+ /**
8
+ * Color temperature adjustment
9
+ * Adjusts color temperature (warm/cool)
10
+ */
11
+ export declare function adjustTemperature(color: string | Color, options?: ColorTemperatureOptions): Color;
12
+ /**
13
+ * Simulate color blindness
14
+ * Types: protanopia, deuteranopia, tritanopia, achromatopsia
15
+ */
16
+ export declare function simulateColorBlindness(color: string | Color, type?: 'protanopia' | 'deuteranopia' | 'tritanopia' | 'achromatopsia'): Color;
17
+ /**
18
+ * Invert color
19
+ */
20
+ export declare function invertColor(color: string | Color, bw?: boolean): Color;
21
+ /**
22
+ * Grayscale conversion
23
+ */
24
+ export declare function toGrayscale(color: string | Color, method?: 'average' | 'luminosity' | 'lightness'): Color;
25
+ /**
26
+ * Sepia tone effect
27
+ */
28
+ export declare function toSepia(color: string | Color, intensity?: number): Color;
29
+ /**
30
+ * Calculate color distance using Delta E (CIE2000)
31
+ * Returns a value where 0 = identical, >100 = very different
32
+ */
33
+ export declare function colorDistance(color1: string | Color, color2: string | Color): number;
34
+ /**
35
+ * Find closest color from a palette
36
+ */
37
+ export declare function findClosestColor(color: string | Color, palette: (string | Color)[]): Color;
38
+ /**
39
+ * Generate gradient colors
40
+ */
41
+ export declare function generateGradient(startColor: string | Color, endColor: string | Color, steps?: number, colorSpace?: 'rgb' | 'hsl' | 'lab' | 'oklab' | 'oklch'): Color[];
42
+ /**
43
+ * Calculate perceptual brightness (0-1)
44
+ */
45
+ export declare function getPerceivedBrightness(color: string | Color): number;
46
+ /**
47
+ * Check if color is light (brightness > 0.5)
48
+ */
49
+ export declare function isLight(color: string | Color): boolean;
50
+ /**
51
+ * Check if color is dark (brightness <= 0.5)
52
+ */
53
+ export declare function isDark(color: string | Color): boolean;
54
+ /**
55
+ * Blend two colors using various blend modes
56
+ */
57
+ export declare function blendColors(base: string | Color, blend: string | Color, mode?: 'multiply' | 'screen' | 'overlay' | 'normal', opacity?: number): Color;
58
+ /**
59
+ * Get dominant color component
60
+ */
61
+ export declare function getDominantComponent(color: string | Color): 'red' | 'green' | 'blue' | 'gray';
62
+ /**
63
+ * Get color name (basic approximation)
64
+ */
65
+ export declare function getColorName(color: string | Color): string;
66
+ /**
67
+ * Random color generator with constraints
68
+ */
69
+ export declare function randomColor(options?: {
70
+ hue?: [number, number];
71
+ saturation?: [number, number];
72
+ lightness?: [number, number];
73
+ alpha?: number;
74
+ }): Color;
75
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/lib/color/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAY,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAYnC;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,OAAO,GAAE,uBAA4B,GACpC,KAAK,CA2BP;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,IAAI,GACA,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,eAA8B,GACjC,KAAK,CAgEP;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,GAAE,OAAe,GAAG,KAAK,CAY7E;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,MAAM,GAAE,SAAS,GAAG,YAAY,GAAG,WAA0B,GAC5D,KAAK,CA0BP;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,GAAE,MAAU,GAAG,KAAK,CAwB3E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,KAAK,EACtB,MAAM,EAAE,MAAM,GAAG,KAAK,GACrB,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,OAAO,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,GAC1B,KAAK,CAeP;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,GAAG,KAAK,EAC1B,QAAQ,EAAE,MAAM,GAAG,KAAK,EACxB,KAAK,GAAE,MAAU,EACjB,UAAU,GAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAe,GAC5D,KAAK,EAAE,CAoHT;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAMpE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,GAAG,KAAK,EACpB,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,IAAI,GAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAmB,EAC7D,OAAO,GAAE,MAAU,GAClB,KAAK,CAyCP;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,GAAG,KAAK,GACpB,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAenC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAmC1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CACX,GACL,KAAK,CAcP"}
@@ -0,0 +1,419 @@
1
+ /**
2
+ * @fileoverview Advanced color helper utilities
3
+ * Provides temperature adjustments, color blindness simulation, and other advanced operations
4
+ */
5
+ import { Color } from './color.js';
6
+ import { rgbToHsl, hslToRgb, rgbToLab, labToRgb, rgbToOklab, oklabToRgb, rgbToOklch, oklchToRgb, } from './conversions.js';
7
+ /**
8
+ * Color temperature adjustment
9
+ * Adjusts color temperature (warm/cool)
10
+ */
11
+ export function adjustTemperature(color, options = {}) {
12
+ const { temperature = 0, intensity = 0.5 } = options;
13
+ const colorObj = color instanceof Color ? color : new Color(color);
14
+ const rgb = colorObj.getRgbObject();
15
+ // Normalized temperature (-1 to 1)
16
+ const normalizedTemp = Math.max(-1, Math.min(1, temperature / 10000));
17
+ // Adjust RGB channels based on temperature
18
+ let r = rgb.r;
19
+ let g = rgb.g;
20
+ let b = rgb.b;
21
+ if (normalizedTemp > 0) {
22
+ // Warmer (add red/yellow)
23
+ r = Math.min(255, r + normalizedTemp * 255 * intensity);
24
+ g = Math.min(255, g + normalizedTemp * 200 * intensity);
25
+ b = Math.max(0, b - normalizedTemp * 100 * intensity);
26
+ }
27
+ else {
28
+ // Cooler (add blue)
29
+ const coolness = Math.abs(normalizedTemp);
30
+ r = Math.max(0, r - coolness * 100 * intensity);
31
+ g = Math.max(0, g - coolness * 50 * intensity);
32
+ b = Math.min(255, b + coolness * 255 * intensity);
33
+ }
34
+ return new Color([Math.round(r), Math.round(g), Math.round(b), rgb.a || 1]);
35
+ }
36
+ /**
37
+ * Simulate color blindness
38
+ * Types: protanopia, deuteranopia, tritanopia, achromatopsia
39
+ */
40
+ export function simulateColorBlindness(color, type = 'protanopia') {
41
+ const colorObj = color instanceof Color ? color : new Color(color);
42
+ const rgb = colorObj.getRgbObject();
43
+ let r = rgb.r / 255;
44
+ let g = rgb.g / 255;
45
+ let b = rgb.b / 255;
46
+ // Transformation matrices for different types of color blindness
47
+ let matrix;
48
+ switch (type) {
49
+ case 'protanopia': // Red-blind
50
+ matrix = [
51
+ [0.56667, 0.43333, 0.0],
52
+ [0.55833, 0.44167, 0.0],
53
+ [0.0, 0.24167, 0.75833],
54
+ ];
55
+ break;
56
+ case 'deuteranopia': // Green-blind
57
+ matrix = [
58
+ [0.625, 0.375, 0.0],
59
+ [0.7, 0.3, 0.0],
60
+ [0.0, 0.3, 0.7],
61
+ ];
62
+ break;
63
+ case 'tritanopia': // Blue-blind
64
+ matrix = [
65
+ [0.95, 0.05, 0.0],
66
+ [0.0, 0.43333, 0.56667],
67
+ [0.0, 0.475, 0.525],
68
+ ];
69
+ break;
70
+ case 'achromatopsia': // Complete color blindness (grayscale)
71
+ const gray = 0.299 * r + 0.587 * g + 0.114 * b;
72
+ return new Color([
73
+ Math.round(gray * 255),
74
+ Math.round(gray * 255),
75
+ Math.round(gray * 255),
76
+ rgb.a || 1,
77
+ ]);
78
+ default:
79
+ matrix = [
80
+ [1, 0, 0],
81
+ [0, 1, 0],
82
+ [0, 0, 1],
83
+ ];
84
+ }
85
+ // Apply transformation
86
+ const newR = matrix[0][0] * r + matrix[0][1] * g + matrix[0][2] * b;
87
+ const newG = matrix[1][0] * r + matrix[1][1] * g + matrix[1][2] * b;
88
+ const newB = matrix[2][0] * r + matrix[2][1] * g + matrix[2][2] * b;
89
+ return new Color([
90
+ Math.round(Math.max(0, Math.min(255, newR * 255))),
91
+ Math.round(Math.max(0, Math.min(255, newG * 255))),
92
+ Math.round(Math.max(0, Math.min(255, newB * 255))),
93
+ rgb.a || 1,
94
+ ]);
95
+ }
96
+ /**
97
+ * Invert color
98
+ */
99
+ export function invertColor(color, bw = false) {
100
+ const colorObj = color instanceof Color ? color : new Color(color);
101
+ const rgb = colorObj.getRgbObject();
102
+ if (bw) {
103
+ // Black or white inversion based on luminance
104
+ const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;
105
+ return luminance > 0.5 ? Color.black : Color.white;
106
+ }
107
+ // RGB inversion
108
+ return new Color([255 - rgb.r, 255 - rgb.g, 255 - rgb.b, rgb.a || 1]);
109
+ }
110
+ /**
111
+ * Grayscale conversion
112
+ */
113
+ export function toGrayscale(color, method = 'luminosity') {
114
+ const colorObj = color instanceof Color ? color : new Color(color);
115
+ const rgb = colorObj.getRgbObject();
116
+ let gray;
117
+ switch (method) {
118
+ case 'average':
119
+ gray = (rgb.r + rgb.g + rgb.b) / 3;
120
+ break;
121
+ case 'luminosity':
122
+ gray = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;
123
+ break;
124
+ case 'lightness':
125
+ gray =
126
+ (Math.max(rgb.r, rgb.g, rgb.b) + Math.min(rgb.r, rgb.g, rgb.b)) / 2;
127
+ break;
128
+ default:
129
+ gray = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;
130
+ }
131
+ const value = Math.round(gray);
132
+ return new Color([value, value, value, rgb.a || 1]);
133
+ }
134
+ /**
135
+ * Sepia tone effect
136
+ */
137
+ export function toSepia(color, intensity = 1) {
138
+ const colorObj = color instanceof Color ? color : new Color(color);
139
+ const rgb = colorObj.getRgbObject();
140
+ const r = rgb.r / 255;
141
+ const g = rgb.g / 255;
142
+ const b = rgb.b / 255;
143
+ // Sepia transformation matrix
144
+ let newR = 0.393 * r + 0.769 * g + 0.189 * b;
145
+ let newG = 0.349 * r + 0.686 * g + 0.168 * b;
146
+ let newB = 0.272 * r + 0.534 * g + 0.131 * b;
147
+ // Apply intensity
148
+ newR = r + (newR - r) * intensity;
149
+ newG = g + (newG - g) * intensity;
150
+ newB = b + (newB - b) * intensity;
151
+ return new Color([
152
+ Math.round(Math.max(0, Math.min(255, newR * 255))),
153
+ Math.round(Math.max(0, Math.min(255, newG * 255))),
154
+ Math.round(Math.max(0, Math.min(255, newB * 255))),
155
+ rgb.a || 1,
156
+ ]);
157
+ }
158
+ /**
159
+ * Calculate color distance using Delta E (CIE2000)
160
+ * Returns a value where 0 = identical, >100 = very different
161
+ */
162
+ export function colorDistance(color1, color2) {
163
+ const c1 = color1 instanceof Color ? color1 : new Color(color1);
164
+ const c2 = color2 instanceof Color ? color2 : new Color(color2);
165
+ const lab1 = rgbToLab(c1.getRgbObject());
166
+ const lab2 = rgbToLab(c2.getRgbObject());
167
+ // Simplified Delta E calculation (Euclidean distance in LAB space)
168
+ const deltaL = lab1.l - lab2.l;
169
+ const deltaA = lab1.a - lab2.a;
170
+ const deltaB = lab1.b - lab2.b;
171
+ return Math.sqrt(deltaL * deltaL + deltaA * deltaA + deltaB * deltaB);
172
+ }
173
+ /**
174
+ * Find closest color from a palette
175
+ */
176
+ export function findClosestColor(color, palette) {
177
+ const targetColor = color instanceof Color ? color : new Color(color);
178
+ let closestColor = null;
179
+ let minDistance = Infinity;
180
+ for (const paletteColor of palette) {
181
+ const distance = colorDistance(targetColor, paletteColor);
182
+ if (distance < minDistance) {
183
+ minDistance = distance;
184
+ closestColor =
185
+ paletteColor instanceof Color ? paletteColor : new Color(paletteColor);
186
+ }
187
+ }
188
+ return closestColor || targetColor;
189
+ }
190
+ /**
191
+ * Generate gradient colors
192
+ */
193
+ export function generateGradient(startColor, endColor, steps = 5, colorSpace = 'rgb') {
194
+ const start = startColor instanceof Color ? startColor : new Color(startColor);
195
+ const end = endColor instanceof Color ? endColor : new Color(endColor);
196
+ const colors = [];
197
+ if (steps < 2) {
198
+ return [start];
199
+ }
200
+ for (let i = 0; i < steps; i++) {
201
+ const t = i / (steps - 1);
202
+ let interpolated;
203
+ switch (colorSpace) {
204
+ case 'hsl': {
205
+ const hsl1 = rgbToHsl(start.getRgbObject());
206
+ const hsl2 = rgbToHsl(end.getRgbObject());
207
+ // Handle hue interpolation (shortest path around color wheel)
208
+ let h1 = hsl1.h;
209
+ let h2 = hsl2.h;
210
+ const diff = h2 - h1;
211
+ if (Math.abs(diff) > 180) {
212
+ if (h1 < h2) {
213
+ h1 += 360;
214
+ }
215
+ else {
216
+ h2 += 360;
217
+ }
218
+ }
219
+ const h = (h1 + (h2 - h1) * t) % 360;
220
+ const s = hsl1.s + (hsl2.s - hsl1.s) * t;
221
+ const l = hsl1.l + (hsl2.l - hsl1.l) * t;
222
+ const a = (hsl1.a ?? 1) + ((hsl2.a ?? 1) - (hsl1.a ?? 1)) * t;
223
+ interpolated = hslToRgb({ h, s, l, a });
224
+ break;
225
+ }
226
+ case 'lab': {
227
+ const lab1 = rgbToLab(start.getRgbObject());
228
+ const lab2 = rgbToLab(end.getRgbObject());
229
+ const l = lab1.l + (lab2.l - lab1.l) * t;
230
+ const a = lab1.a + (lab2.a - lab1.a) * t;
231
+ const b = lab1.b + (lab2.b - lab1.b) * t;
232
+ const alpha = (lab1.alpha ?? 1) + ((lab2.alpha ?? 1) - (lab1.alpha ?? 1)) * t;
233
+ interpolated = labToRgb({ l, a, b, alpha });
234
+ break;
235
+ }
236
+ case 'oklab': {
237
+ const oklab1 = rgbToOklab(start.getRgbObject());
238
+ const oklab2 = rgbToOklab(end.getRgbObject());
239
+ const l = oklab1.l + (oklab2.l - oklab1.l) * t;
240
+ const a = oklab1.a + (oklab2.a - oklab1.a) * t;
241
+ const b = oklab1.b + (oklab2.b - oklab1.b) * t;
242
+ const alpha = (oklab1.alpha ?? 1) + ((oklab2.alpha ?? 1) - (oklab1.alpha ?? 1)) * t;
243
+ interpolated = oklabToRgb({ l, a, b, alpha });
244
+ break;
245
+ }
246
+ case 'oklch': {
247
+ const oklch1 = rgbToOklch(start.getRgbObject());
248
+ const oklch2 = rgbToOklch(end.getRgbObject());
249
+ // Handle hue interpolation (shortest path around color wheel)
250
+ let h1 = oklch1.h;
251
+ let h2 = oklch2.h;
252
+ const diff = h2 - h1;
253
+ if (Math.abs(diff) > 180) {
254
+ if (h1 < h2) {
255
+ h1 += 360;
256
+ }
257
+ else {
258
+ h2 += 360;
259
+ }
260
+ }
261
+ const l = oklch1.l + (oklch2.l - oklch1.l) * t;
262
+ const c = oklch1.c + (oklch2.c - oklch1.c) * t;
263
+ const h = (h1 + (h2 - h1) * t) % 360;
264
+ const alpha = (oklch1.alpha ?? 1) + ((oklch2.alpha ?? 1) - (oklch1.alpha ?? 1)) * t;
265
+ interpolated = oklchToRgb({ l, c, h, alpha });
266
+ break;
267
+ }
268
+ case 'rgb':
269
+ default: {
270
+ const rgb1 = start.getRgbObject();
271
+ const rgb2 = end.getRgbObject();
272
+ interpolated = {
273
+ r: Math.round(rgb1.r + (rgb2.r - rgb1.r) * t),
274
+ g: Math.round(rgb1.g + (rgb2.g - rgb1.g) * t),
275
+ b: Math.round(rgb1.b + (rgb2.b - rgb1.b) * t),
276
+ a: (rgb1.a ?? 1) + ((rgb2.a ?? 1) - (rgb1.a ?? 1)) * t,
277
+ };
278
+ break;
279
+ }
280
+ }
281
+ colors.push(new Color(interpolated));
282
+ }
283
+ return colors;
284
+ }
285
+ /**
286
+ * Calculate perceptual brightness (0-1)
287
+ */
288
+ export function getPerceivedBrightness(color) {
289
+ const colorObj = color instanceof Color ? color : new Color(color);
290
+ const rgb = colorObj.getRgbObject();
291
+ // Using W3C formula for perceived brightness
292
+ return (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;
293
+ }
294
+ /**
295
+ * Check if color is light (brightness > 0.5)
296
+ */
297
+ export function isLight(color) {
298
+ return getPerceivedBrightness(color) > 0.5;
299
+ }
300
+ /**
301
+ * Check if color is dark (brightness <= 0.5)
302
+ */
303
+ export function isDark(color) {
304
+ return !isLight(color);
305
+ }
306
+ /**
307
+ * Blend two colors using various blend modes
308
+ */
309
+ export function blendColors(base, blend, mode = 'normal', opacity = 1) {
310
+ const baseColor = base instanceof Color ? base : new Color(base);
311
+ const blendColor = blend instanceof Color ? blend : new Color(blend);
312
+ const b = baseColor.getRgbObject();
313
+ const a = blendColor.getRgbObject();
314
+ const blendChannel = (base, blend) => {
315
+ const b = base / 255;
316
+ const a = blend / 255;
317
+ let result;
318
+ switch (mode) {
319
+ case 'multiply':
320
+ result = b * a;
321
+ break;
322
+ case 'screen':
323
+ result = 1 - (1 - b) * (1 - a);
324
+ break;
325
+ case 'overlay':
326
+ result = b < 0.5 ? 2 * b * a : 1 - 2 * (1 - b) * (1 - a);
327
+ break;
328
+ case 'normal':
329
+ default:
330
+ result = a * opacity + b * (1 - opacity);
331
+ break;
332
+ }
333
+ return Math.round(Math.max(0, Math.min(255, result * 255)));
334
+ };
335
+ return new Color([
336
+ blendChannel(b.r, a.r),
337
+ blendChannel(b.g, a.g),
338
+ blendChannel(b.b, a.b),
339
+ b.a || 1,
340
+ ]);
341
+ }
342
+ /**
343
+ * Get dominant color component
344
+ */
345
+ export function getDominantComponent(color) {
346
+ const colorObj = color instanceof Color ? color : new Color(color);
347
+ const rgb = colorObj.getRgbObject();
348
+ const max = Math.max(rgb.r, rgb.g, rgb.b);
349
+ const min = Math.min(rgb.r, rgb.g, rgb.b);
350
+ // Check if color is grayscale
351
+ if (max - min < 20) {
352
+ return 'gray';
353
+ }
354
+ if (rgb.r === max)
355
+ return 'red';
356
+ if (rgb.g === max)
357
+ return 'green';
358
+ return 'blue';
359
+ }
360
+ /**
361
+ * Get color name (basic approximation)
362
+ */
363
+ export function getColorName(color) {
364
+ const colorObj = color instanceof Color ? color : new Color(color);
365
+ const hsl = rgbToHsl(colorObj.getRgbObject());
366
+ // Determine saturation level
367
+ if (hsl.s < 10) {
368
+ if (hsl.l > 90)
369
+ return 'white';
370
+ if (hsl.l < 10)
371
+ return 'black';
372
+ if (hsl.l > 60)
373
+ return 'light gray';
374
+ if (hsl.l < 40)
375
+ return 'dark gray';
376
+ return 'gray';
377
+ }
378
+ // Determine hue
379
+ const h = hsl.h;
380
+ let hueName;
381
+ if (h < 15 || h >= 345)
382
+ hueName = 'red';
383
+ else if (h < 45)
384
+ hueName = 'orange';
385
+ else if (h < 75)
386
+ hueName = 'yellow';
387
+ else if (h < 165)
388
+ hueName = 'green';
389
+ else if (h < 255)
390
+ hueName = 'blue';
391
+ else if (h < 285)
392
+ hueName = 'purple';
393
+ else if (h < 315)
394
+ hueName = 'magenta';
395
+ else
396
+ hueName = 'pink';
397
+ // Add lightness modifier
398
+ if (hsl.l < 30)
399
+ return `dark ${hueName}`;
400
+ if (hsl.l > 70)
401
+ return `light ${hueName}`;
402
+ // Add saturation modifier
403
+ if (hsl.s < 30)
404
+ return `dull ${hueName}`;
405
+ if (hsl.s > 70)
406
+ return `vivid ${hueName}`;
407
+ return hueName;
408
+ }
409
+ /**
410
+ * Random color generator with constraints
411
+ */
412
+ export function randomColor(options = {}) {
413
+ const { hue = [0, 360], saturation = [0, 100], lightness = [0, 100], alpha = 1, } = options;
414
+ const h = hue[0] + Math.random() * (hue[1] - hue[0]);
415
+ const s = saturation[0] + Math.random() * (saturation[1] - saturation[0]);
416
+ const l = lightness[0] + Math.random() * (lightness[1] - lightness[0]);
417
+ const rgb = hslToRgb({ h, s, l, a: alpha });
418
+ return new Color(rgb);
419
+ }