国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Home Web Front-end CSS Tutorial Migrating the VSCode theme generator to oklch

Migrating the VSCode theme generator to oklch

Dec 29, 2024 am 02:25 AM

Migrating the VSCode theme generator to oklch

TLDR: VSCode Themes Community now uses the OKLCH colorspace in the matching colors generation algorithm to randomize and manipulate colors and also has a oklch color picker to be used when adjusting the generated theme colors.

You can sneak a peek at VSCODE Themes Community or dive straight into the code in the GitHub repository.


The late discovery

I know, oklch colorspace is not that new, but when I started to develop the VSCode Themes Community I was totally unaware of its existence. It was only a couple of weeks ago I found out about it and started to read a lot of articles regarding it and became aware of all the benefits that could come along with a color space migration in both the algorithm and the app itself.

In the oklch colorspace the color is represented by

  • L for perceptual lightness.
  • C for chroma representing chromatic intensity, with values from 0 (achromatic) with no upper limit, but in practice it does not exceed 0.5; CSS treats 0.4 as 100%.
  • H for hue angle in a color wheel, typically denoted in decimal degrees.

The perceptual lightness not only enables the easy selection of colors with uniform lightness for different hues but also allows manipulation of colors lightness and chroma without any change in the hue parameter, which is perfect to be used with the colors generation algorithm.

After the algorithm generates a set of hues using the selected base hue and color scheme/sacred geometry pattern, the colors for the theme are randomly generated based on these hues with variations of lightness and chroma.

By adopting the oklch color space it would be possible to keep the all derived hues from the selected color scheme intact even after all manipulation of lightness and chroma needed to ensure minimum contrast between the background colors and the ones used as foreground.

Even after, when there is the need or will to change any of the colors, using the new oklch color picker it is possible not only to adjust the chroma and lightness without changing the hue, but one can change the hue while keeping the perceptual lightness of the selected color unchanged.

After all that said I had only one choice, migrate the app.

The code migration

Reading some articles regarding the css colorspace specification I learned about the Culori, a very complete and precise color manipulation library for typescript that implements the oklch colorspace.

It was not hard to change all the functions and methods that were using an old color manipulation library. Some parts of the algorithm even got cleaner and easier to maintain and understand.

After the code migration, I started looking for a color picker component but couldn’t find any that could suit my app’s requirements, it needed to use Svelte 5, have the option to use oklch color space and integrate well with the current ui that is based on shadcn-svelte components.

In the middle of the frustration, I've encountered this great work from EvilMartians at oklch.com which is open source and, at least for me, very complex.
After some hours spent at their GitHub repository and looking at the color picker on their web page I decided to give it a try, develop my own implementation using Svelte 5 and shadcn-svelte components.

I did not went all in developing a reusable component, but now I'm thinking about making a Svelte 5 package out of it. But I digress, back to my adventure I customized some sliders backgrounds to dynamically update as the L, C, H and Alpha options changes.

Implemented a web worker to calculate the pixel colors for the dynamic 2D maps for each slider, with the help of Culori it was not hard to generate gradients to accurately represent the complex oklch color space.

And there it was…a functional oklch color picker that could fulfill the needs of my current stack.

As I already was with my hands dirty, I went to talk to my invaluable friend Claude 3.5 to ask if he had a few more sacred geometry patterns that could be used as color schemes to add to the, already long, list of patterns/schemes. This time Claude did not measured the efforts and 'spited' more than a hundred new sacred geometry, modern quantum physics and some other mathematical equations that could be integrated as patterns/color schemes in the algorithm.

The result

It is live at VSCode Themes Community and you can check out the code in the Github repository.

Please, as always, feel free to provide any kind of feedback and/or suggestion in the comments or file an issue at the repository. I would be very happy to hear your thoughts.

Thanks a lot for the reading and, hopefully, I see you in the next one!

The above is the detailed content of Migrating the VSCode theme generator to oklch. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What is 'render-blocking CSS'? What is 'render-blocking CSS'? Jun 24, 2025 am 12:42 AM

CSS blocks page rendering because browsers view inline and external CSS as key resources by default, especially with imported stylesheets, header large amounts of inline CSS, and unoptimized media query styles. 1. Extract critical CSS and embed it into HTML; 2. Delay loading non-critical CSS through JavaScript; 3. Use media attributes to optimize loading such as print styles; 4. Compress and merge CSS to reduce requests. It is recommended to use tools to extract key CSS, combine rel="preload" asynchronous loading, and use media delayed loading reasonably to avoid excessive splitting and complex script control.

External vs. Internal CSS: What's the Best Approach? External vs. Internal CSS: What's the Best Approach? Jun 20, 2025 am 12:45 AM

ThebestapproachforCSSdependsontheproject'sspecificneeds.Forlargerprojects,externalCSSisbetterduetomaintainabilityandreusability;forsmallerprojectsorsingle-pageapplications,internalCSSmightbemoresuitable.It'scrucialtobalanceprojectsize,performanceneed

Does my CSS must be on lower case? Does my CSS must be on lower case? Jun 19, 2025 am 12:29 AM

No,CSSdoesnothavetobeinlowercase.However,usinglowercaseisrecommendedfor:1)Consistencyandreadability,2)Avoidingerrorsinrelatedtechnologies,3)Potentialperformancebenefits,and4)Improvedcollaborationwithinteams.

CSS Case Sensitivity: Understanding What Matters CSS Case Sensitivity: Understanding What Matters Jun 20, 2025 am 12:09 AM

CSSismostlycase-insensitive,butURLsandfontfamilynamesarecase-sensitive.1)Propertiesandvalueslikecolor:red;arenotcase-sensitive.2)URLsmustmatchtheserver'scase,e.g.,/images/Logo.png.3)Fontfamilynameslike'OpenSans'mustbeexact.

What is Autoprefixer and how does it work? What is Autoprefixer and how does it work? Jul 02, 2025 am 01:15 AM

Autoprefixer is a tool that automatically adds vendor prefixes to CSS attributes based on the target browser scope. 1. It solves the problem of manually maintaining prefixes with errors; 2. Work through the PostCSS plug-in form, parse CSS, analyze attributes that need to be prefixed, and generate code according to configuration; 3. The usage steps include installing plug-ins, setting browserslist, and enabling them in the build process; 4. Notes include not manually adding prefixes, keeping configuration updates, prefixes not all attributes, and it is recommended to use them with the preprocessor.

What are CSS counters? What are CSS counters? Jun 19, 2025 am 12:34 AM

CSScounterscanautomaticallynumbersectionsandlists.1)Usecounter-resettoinitialize,counter-incrementtoincrease,andcounter()orcounters()todisplayvalues.2)CombinewithJavaScriptfordynamiccontenttoensureaccurateupdates.

CSS: When Does Case Matter (and When Doesn't)? CSS: When Does Case Matter (and When Doesn't)? Jun 19, 2025 am 12:27 AM

In CSS, selector and attribute names are case-sensitive, while values, named colors, URLs, and custom attributes are case-sensitive. 1. The selector and attribute names are case-insensitive, such as background-color and background-Color are the same. 2. The hexadecimal color in the value is case-sensitive, but the named color is case-sensitive, such as red and Red is invalid. 3. URLs are case sensitive and may cause file loading problems. 4. Custom properties (variables) are case sensitive, and you need to pay attention to the consistency of case when using them.

What is the conic-gradient() function? What is the conic-gradient() function? Jul 01, 2025 am 01:16 AM

Theconic-gradient()functioninCSScreatescirculargradientsthatrotatecolorstopsaroundacentralpoint.1.Itisidealforpiecharts,progressindicators,colorwheels,anddecorativebackgrounds.2.Itworksbydefiningcolorstopsatspecificangles,optionallystartingfromadefin

See all articles