@kung-fu/components is a small, dependency-free vanilla JavaScript library for adding common UI behaviors to plain HTML — no framework required.
---// install
npm install @kung-fu/components
---// what's in it
| helper | description |
| createAudioPlayer | customizable audio players with optional playlists |
| rotateListStyleType | auto-apply alternating list-style-type to nested lists |
| wrapImageWithFigure | wrap <img> elements in <figure> / <figcaption> |
---// usage // audio player
import { createAudioPlayer } from '@kung-fu/components';
const player = createAudioPlayer('audio-container', 'default.mp3');
player.withPlaylist('playlist-container');
Expected HTML structure:
<div id="audio-container">
<audio></audio>
<div id="audio-player-cover"></div>
<div id="audio-player-title"></div>
<div id="audio-player-date"></div>
<div id="audio-player-summary"></div>
</div>
<dl id="playlist-container">
<dt data-source="track1.mp3"
data-cover-img="cover1.jpg"
data-title="Track 1"
data-pub="2023-01-01"
data-summary="...">Track 1</dt>
</dl>
---// usage // list style rotation
import { rotateListStyleType } from '@kung-fu/components';
// Defaults applied to every list on the page:
rotateListStyleType();
// Custom rotation on a selector:
rotateListStyleType('.content-list', ['decimal', 'lower-alpha', 'lower-roman']);
---// usage // figure wrapping
import { wrapImageWithFigure } from '@kung-fu/components';
// Wrap every image:
wrapImageWithFigure();
// Or just a subset:
wrapImageWithFigure('.article-image');
// Skip images marked with a data-attribute:
wrapImageWithFigure('img', 'data-no-figure');
---// source