npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

datocms-plugin-visual-select

v0.1.15

Published

Elegantly visualize a group of options in the DatoCMS Editor using colors, images, and more.

Readme

Visual Select — a DatoCMS Plugin

Elegantly visualize a group of options in the DatoCMS Editor using colors, images, and more.


Configuration

This plugin is designed to be used on a per-field basis. To get started, add a single-string text field to any model or block, and under the presentation tab change the field editor from "Text input" to "Visual Select".

JSON Data Structure

Each field requires a JSON configuration object. This object has 2 key fields — the first is extends and the second is options.

To understand the behaviour of extends, see the Global Presets section below.

options represents each visual option displayed to the editor, as well the underlying value returned by the API. There are 4 required fields on each option:

| Key | Value | Description | | --------- | -------- | ------------------------------------------------ | | name | string | The label displayed in the editor | | type | string | The visualization type, see table below | | display | string | The visualization display value, see table below | | value | string | The value returned by the API |

Visualization displays

| Type | Display | Example | | ------- | ------- | --------------------------------- | | color | hex | #bada55 | | image | url | https://example.com/my-icon.svg |

Visualization

There is also a third optional field you can add called presentation

presentation Is an object representing how the options should be displayed. It has 3 optional fields:

| Key | Value | Description | | --------- | --------- | ---------------------------------------------------------------------------- | | type | string | The presentation type, can be either grid or carousel | | columns | integer | The number of columns, used only if the type grid was selected | | width | string | The width of each option item, used only if the type carousel was selected |

Example configuration

{
	"options": [
		{
			"name": "Green",
			"type": "color",
			"display": "#bada55",
			"value": "text-brand-green"
		},
		{
			"name": "Yellow",
			"type": "color",
			"display": "#fcba03",
			"value": "text-brand-yellow"
		}
	],
	"presentation": {
		"type": "carousel",
		"width": "300px"
	}
}

Global Presets

You'll often have a collection of options that you want to make available across multiple different models or blocks. Instead of repeating the same configuration object on each field, you can make use of the global presets functionality.

To supply a global presets object, navigate to the Visual Select plugin settings under Settings > Plugins > Visual Select.

JSON Data Structure

The JSON configuration for global presets is a simple dictionary object, where each entry is an array of options following the same structure as those used on individual fields.

To make use of a global preset, first define the dictionary object in the plugin settings:

{
	"brandColors": [
		{
			"name": "Green",
			"type": "color",
			"display": "#bada55",
			"value": "text-brand-green"
		},
		{
			"name": "Yellow",
			"type": "color",
			"display": "#fcba03",
			"value": "text-brand-yellow"
		}
	]
}

and then in an individual field's configuration object, use the extends key:

{
	"extends": ["brandColors"]
}

You can extend multiple presets if required, and you can also supply additional options:

{
	"extends": ["brandColors"],
	"options": [
		{
			"name": "Blue",
			"type": "color",
			"display": "#00d0ff",
			"value": "text-specials-blue"
		},
		{
			"name": "Purple",
			"type": "color",
			"display": "#8b05eb",
			"value": "text-specials-purple"
		}
	]
}

The example above would produce the following editor visualization (where Green and Yellow are coming from the brandColors preset, and Blue and Purple are from the additional options supplied):