增加Tint和Shade的Mix系数反算。
This commit is contained in:
		| @@ -4,6 +4,9 @@ | |||||||
|     flex-direction: row; |     flex-direction: row; | ||||||
|     align-items: stretch; |     align-items: stretch; | ||||||
|     gap: var(--spacing-m); |     gap: var(--spacing-m); | ||||||
|  |     &:not(:first-of-type) { | ||||||
|  |       margin-top: var(--spacing-s); | ||||||
|  |     } | ||||||
|     .element { |     .element { | ||||||
|       display: flex; |       display: flex; | ||||||
|       flex-direction: row; |       flex-direction: row; | ||||||
| @@ -20,6 +23,11 @@ | |||||||
|         font-size: var(--font-size-xs); |         font-size: var(--font-size-xs); | ||||||
|         line-height: var(--font-size-xs); |         line-height: var(--font-size-xs); | ||||||
|       } |       } | ||||||
|  |       .element_value { | ||||||
|  |         align-self: flex-end; | ||||||
|  |         font-size: var(--font-size-s); | ||||||
|  |         line-height: var(--font-size-s); | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										54
									
								
								src/page-components/color-compare/ShadeScale.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/page-components/color-compare/ShadeScale.tsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | import { useMemo } from 'react'; | ||||||
|  | import { MixReversing } from '../../color_functions/color_module'; | ||||||
|  | import { useColorFunction } from '../../ColorFunctionContext'; | ||||||
|  | import styles from './CompareLayout.module.css'; | ||||||
|  | import { CompareMethodProps } from './share-props'; | ||||||
|  |  | ||||||
|  | const defaultMixResult: MixReversing = { | ||||||
|  |   r_factor: 0, | ||||||
|  |   g_factor: 0, | ||||||
|  |   b_factor: 0, | ||||||
|  |   average: 0, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export function ShadeScale({ basic = '000000', compare = '000000' }: CompareMethodProps) { | ||||||
|  |   const { colorFn } = useColorFunction(); | ||||||
|  |   const mixFactors = useMemo(() => { | ||||||
|  |     if (!colorFn) { | ||||||
|  |       return defaultMixResult; | ||||||
|  |     } | ||||||
|  |     try { | ||||||
|  |       const factor = colorFn.shade_scale(basic, compare); | ||||||
|  |       return factor; | ||||||
|  |     } catch (e) { | ||||||
|  |       console.error('[Reversing Tint]', e); | ||||||
|  |     } | ||||||
|  |     return defaultMixResult; | ||||||
|  |   }, [basic, compare]); | ||||||
|  |  | ||||||
|  |   return ( | ||||||
|  |     <div> | ||||||
|  |       <h6>Compare in RGB Shade.</h6> | ||||||
|  |       <div className={styles.elements}> | ||||||
|  |         <div className={styles.element}> | ||||||
|  |           <div className={styles.element_name}>R</div> | ||||||
|  |           <div className={styles.element_value}>{(mixFactors.r_factor * 100).toFixed(2)}%</div> | ||||||
|  |         </div> | ||||||
|  |         <div className={styles.element}> | ||||||
|  |           <div className={styles.element_name}>G</div> | ||||||
|  |           <div className={styles.element_value}>{(mixFactors.g_factor * 100).toFixed(2)}%</div> | ||||||
|  |         </div> | ||||||
|  |         <div className={styles.element}> | ||||||
|  |           <div className={styles.element_name}>B</div> | ||||||
|  |           <div className={styles.element_value}>{(mixFactors.b_factor * 100).toFixed(2)}%</div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div className={styles.elements}> | ||||||
|  |         <div className={styles.element}> | ||||||
|  |           <div className={styles.element_name}>Average</div> | ||||||
|  |           <div className={styles.element_value}>{(mixFactors.average * 100).toFixed(2)}%</div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   ); | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								src/page-components/color-compare/TintScale.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/page-components/color-compare/TintScale.tsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | import { useMemo } from 'react'; | ||||||
|  | import { MixReversing } from '../../color_functions/color_module'; | ||||||
|  | import { useColorFunction } from '../../ColorFunctionContext'; | ||||||
|  | import styles from './CompareLayout.module.css'; | ||||||
|  | import { CompareMethodProps } from './share-props'; | ||||||
|  |  | ||||||
|  | const defaultMixResult: MixReversing = { | ||||||
|  |   r_factor: 0, | ||||||
|  |   g_factor: 0, | ||||||
|  |   b_factor: 0, | ||||||
|  |   average: 0, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export function TintScale({ basic = '000000', compare = '000000' }: CompareMethodProps) { | ||||||
|  |   const { colorFn } = useColorFunction(); | ||||||
|  |   const mixFactors = useMemo(() => { | ||||||
|  |     if (!colorFn) { | ||||||
|  |       return defaultMixResult; | ||||||
|  |     } | ||||||
|  |     try { | ||||||
|  |       const factor = colorFn.tint_scale(basic, compare); | ||||||
|  |       return factor; | ||||||
|  |     } catch (e) { | ||||||
|  |       console.error('[Reversing Tint]', e); | ||||||
|  |     } | ||||||
|  |     return defaultMixResult; | ||||||
|  |   }, [basic, compare]); | ||||||
|  |  | ||||||
|  |   return ( | ||||||
|  |     <div> | ||||||
|  |       <h6>Compare in RGB Tint.</h6> | ||||||
|  |       <div className={styles.elements}> | ||||||
|  |         <div className={styles.element}> | ||||||
|  |           <div className={styles.element_name}>R</div> | ||||||
|  |           <div className={styles.element_value}>{(mixFactors.r_factor * 100).toFixed(2)}%</div> | ||||||
|  |         </div> | ||||||
|  |         <div className={styles.element}> | ||||||
|  |           <div className={styles.element_name}>G</div> | ||||||
|  |           <div className={styles.element_value}>{(mixFactors.g_factor * 100).toFixed(2)}%</div> | ||||||
|  |         </div> | ||||||
|  |         <div className={styles.element}> | ||||||
|  |           <div className={styles.element_name}>B</div> | ||||||
|  |           <div className={styles.element_value}>{(mixFactors.b_factor * 100).toFixed(2)}%</div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div className={styles.elements}> | ||||||
|  |         <div className={styles.element}> | ||||||
|  |           <div className={styles.element_name}>Average</div> | ||||||
|  |           <div className={styles.element_value}>{(mixFactors.average * 100).toFixed(2)}%</div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   ); | ||||||
|  | } | ||||||
| @@ -6,6 +6,8 @@ import { HCTCompare } from '../page-components/color-compare/HCTCompare'; | |||||||
| import { HSLCompare } from '../page-components/color-compare/HSLCompare'; | import { HSLCompare } from '../page-components/color-compare/HSLCompare'; | ||||||
| import { OklchCompare } from '../page-components/color-compare/OKLCHCompare'; | import { OklchCompare } from '../page-components/color-compare/OKLCHCompare'; | ||||||
| import { RGBCompare } from '../page-components/color-compare/RGBCompare'; | import { RGBCompare } from '../page-components/color-compare/RGBCompare'; | ||||||
|  | import { ShadeScale } from '../page-components/color-compare/ShadeScale'; | ||||||
|  | import { TintScale } from '../page-components/color-compare/TintScale'; | ||||||
| import styles from './Compare.module.css'; | import styles from './Compare.module.css'; | ||||||
|  |  | ||||||
| export function ColorCompare() { | export function ColorCompare() { | ||||||
| @@ -36,6 +38,8 @@ export function ColorCompare() { | |||||||
|             <HSLCompare basic={basicColor} compare={compareColor} /> |             <HSLCompare basic={basicColor} compare={compareColor} /> | ||||||
|             <HCTCompare basic={basicColor} compare={compareColor} /> |             <HCTCompare basic={basicColor} compare={compareColor} /> | ||||||
|             <OklchCompare basic={basicColor} compare={compareColor} /> |             <OklchCompare basic={basicColor} compare={compareColor} /> | ||||||
|  |             <TintScale basic={basicColor} compare={compareColor} /> | ||||||
|  |             <ShadeScale basic={basicColor} compare={compareColor} /> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </ScrollArea> |       </ScrollArea> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user