0.1.0 • Published 10 months ago

@tw-plugins/extend-aria v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

Tailwind CSS Extend ARIA Plugin

npm version

A Tailwind CSS plugin that extends support for WAI-ARIA 1.2 attributes, providing utility variants for boolean and enumerated ARIA states to enhance accessibility styling.

Installation:

Install the plugin:

npm install --save-dev @tw-plugins/extend-aria

Usage:

Add the plugin to your Tailwind CSS configuration:

// tailwind.config.js

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [],
  theme: {},
  plugins: [require("@tw-plugins/extend-aria")],
};

or with options:

// tailwind.config.ts

import type { Config } from "tailwindcss";
import extendAria from "@tw-plugins/extend-aria";

const tailwindConfig: Config = {
  content: [],
  theme: {},
  plugins: [
    extendAria({
      // ExtendAriaPluginOptions
    }),
  ],
};

export default tailwindConfig;

Configuration Options:

attributes

A list of extendable WAI-ARIA 1.2 attributes to include in the plugin. Only attributes with boolean or enumerated values are used and accepted.

Attributes with custom or free-form values, such as aria-label, are not included. Users can still extend these manually using Tailwind's arbitrary value feature aria-[].

If not provided, the plugin defaults to including all relevant attributes except deprecated ones (if includeDeprecated is false).

Example:

const extendAria = require("@tw-plugins/extend-aria");

const tailwindConfig = {
  plugins: [
    extendAria({
      attributes: ["aria-checked", "aria-current", "aria-invalid"],
    }),
  ],
};

includeDeprecated

A flag indicating whether to include deprecated ARIA attributes.

Default is false and deprecated attributes like aria-grabbed and aria-dropeffect are excluded from the variants. To include these, explicitly set this option to true.

negate

Specifies how boolean ARIA attributes with "false" values should be handled.

ValueDescription
"relevant" (default)Only include boolean attributes where "false" has significant meaning (e.g., aria-expanded="false"). Variants for these attributes are generated with the aria-not-_ prefix (e.g., aria-not-expanded for aria-expanded="false").
"all"Include all boolean attributes with both "true" and "false" values. Variants for "false" values are generated with the aria-not-_ prefix.
BoolAriaAttribute[]An array of specific boolean attributes to include with "false" values. Variants for these attributes are generated with the aria-not-* prefix, e.g. aria-not-current
falseDo not include any attributes with "false" values.

Examples

Default configuration:

// tailwind.config.js

module.exports = {
  plugins: [require("@tw-plugins/extend-aria")],
};

This will include all relevant WAI-ARIA 1.2 boolean and enumerated attributes, excluding deprecated ones, and only extend "false" values where meaningful.

Include deprecated attributes:

// tailwind.config.js

const extendAria = require("@tw-plugins/extend-aria");

module.exports = {
  plugins: [extendAria({ includeDeprecated: true })],
};

Include all boolean negations:

// tailwind.config.js

const extendAria = require("@tw-plugins/extend-aria");

module.exports = {
  plugins: [extendAria({ negate: "all" })],
};

Specific boolean attributes with "false" values:

// tailwind.config.js

const extendAria = require("@tw-plugins/extend-aria");

module.exports = {
  plugins: [extendAria({ negate: ["aria-checked", "aria-pressed"] })],
};

Supported Attributes:

This plugin only supports extendable WAI-ARIA 1.2 attributes that have boolean or enumerated values. Attributes with custom values, such as aria-label, are not included. However, you can still use these with Tailwind CSS's arbitrary value feature.

Here is a list of supported attributes:

AttributeValuesPossible outputs
aria-atomictrue, falsearia-atomic:{utility}, aria-not-atomic:{utility}
aria-autocompleteboth, inline, list, nonearia-autocomplete-both:{utility}, aria-autocomplete-inline:{utility}, aria-autocomplete-list:{utility}, aria-autocomplete-none:{utility}
aria-busytrue, falsearia-busy:{utility}, aria-not-busy:{utility}
aria-checkedtrue, false, mixedaria-checked:{utility}, aria-not-checked:{utility}, aria-checked-mixed:{utility}
aria-currenttrue, false, date, location, page, step, timearia-current:{utility}, aria-not-current:{utility}, aria-current-date:{utility}, aria-current-location:{utility}, aria-current-page:{utility}, aria-current-step:{utility}, aria-current-time:{utility}
aria-disabledtrue, falsearia-disabled:{utility}, aria-not-disabled:{utility}
aria-dropeffectcopy, execute, link, move, none, popuparia-dropeffect-copy:{utility}, aria-dropeffect-execute:{utility}, aria-dropeffect-link:{utility}, aria-dropeffect-move:{utility}, aria-dropeffect-none:{utility}, aria-dropeffect-popup:{utility}
aria-expandedtrue, falsearia-expanded:{utility}, aria-not-expanded:{utility}
aria-grabbedtrue, falsearia-grabbed:{utility}, aria-not-grabbed:{utility}
aria-haspopuptrue, false, dialog, grid, listbox, menu, treearia-haspopup:{utility}, aria-not-haspopup:{utility}, aria-haspopup-dialog:{utility}, aria-haspopup-grid:{utility}, aria-haspopup-listbox:{utility}, aria-haspopup-menu:{utility}, aria-haspopup-tree:{utility}
aria-hiddentrue, falsearia-hidden:{utility}, aria-not-hidden:{utility}
aria-invalidtrue, false, grammar, spellingaria-invalid:{utility}, aria-not-invalid:{utility}, aria-invalid-grammar:{utility}, aria-invalid-spelling:{utility}
aria-liveoff, assertive, politearia-live-off:{utility}, aria-live-assertive:{utility}, aria-live-polite:{utility}
aria-modaltrue, falsearia-modal:{utility}, aria-not-modal:{utility}
aria-multilinetrue, falsearia-multiline:{utility}, aria-not-multiline:{utility}
aria-multiselectabletrue, falsearia-multiselectable:{utility}, aria-not-multiselectable:{utility}
aria-orientationhorizontal, verticalaria-orientation-horizontal:{utility}, aria-orientation-vertical:{utility}
aria-pressedtrue, false, mixedaria-pressed:{utility}, aria-not-pressed:{utility}, aria-pressed-mixed:{utility}
aria-readonlytrue, falsearia-readonly:{utility}, aria-not-readonly:{utility}
aria-relevantadditions, all, removals, textaria-relevant-additions:{utility}, aria-relevant-all:{utility}, aria-relevant-removals:{utility}, aria-relevant-text:{utility}
aria-requiredtrue, falsearia-required:{utility}, aria-not-required:{utility}
aria-selectedtrue, falsearia-selected:{utility}, aria-not-selected:{utility}
aria-sortascending, descending, none, otheraria-sort-ascending:{utility}, aria-sort-descending:{utility}, aria-sort-none:{utility}, aria-sort-other:{utility}

All attributes produces variants for styling based on parent and sibling states, e.g. group-aria-expanded:{utility}, peer-aria-invalid-spelling:{utility}, etc.

Contributing:

Contributions are welcome! If you have suggestions for improving this plugin or find any bugs, please open an issue or submit a pull request.

License:

This project is licensed under the MIT License. See the LICENSE file for more details.