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

@sarap422/clickdion-hoverdion

v3.1.0

Published

Click or hover accordion for WordPress menus and generic HTML structures

Readme

clickdion-hoverdion v3.1.0

クリック(.clickdion)またはホバー(.hoverdion)で開閉するアコーディオンを実装するJavaScript/CSSライブラリ。

WordPressのカスタムメニュー(wp_nav_menu)や、dl/dt/dd などの汎用的な構造に対応。1つのスイッチで複数のコンテンツを一括開閉したり、data-id で複数のスイッチ⇔コンテンツを個別に対応させることもできる。

Features

  • クリック型 (.clickdion) — クリックで開閉
  • ホバー型 (.hoverdion) — マウスオーバーで開閉
  • Web Animations APIで実測した高さ(0px⇔実寸)をアニメーション。.dion-content直下の子要素の数や入れ子構造に関係なく、どんなマークアップでも正しく開閉する
  • 連打・ホバー連打時も、現在の高さから途切れなくアニメーションを再生し直す
  • 1スイッチ×1コンテンツ、1スイッチ×複数コンテンツ(一括開閉)、data-id による複数スイッチ×複数コンテンツ(個別開閉)に対応
  • CSSクラスを付けるだけで動作
  • 依存ライブラリなし(Vanilla JS)

Install

npm install clickdion-hoverdion

CDN

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@sarap422/[email protected]/clickdion-hoverdion.min.css">
<script src="https://cdn.jsdelivr.net/npm/@sarap422/[email protected]/clickdion-hoverdion.min.js"></script>

Usage

WordPress Menu(1スイッチ×1コンテンツ)

<ul class="menu">
  <!-- ホバーで開閉 -->
  <li class="menu-item menu-item-has-children hoverdion">
    <a href="#" class="menu-link">BLOG</a>
    <ul class="sub-menu">
      <li class="menu-item"><a href="#" class="menu-link">Category 1</a></li>
      <li class="menu-item"><a href="#" class="menu-link">Category 2</a></li>
    </ul>
  </li>

  <!-- クリックで開閉(スイッチ付き) -->
  <li class="menu-item menu-item-has-children clickdion">
    <a href="#" class="menu-link">
      SNIPPET
      <i class="dion-switch"></i>
    </a>
    <ul class="sub-menu">
      <li class="menu-item"><a href="#" class="menu-link">Item 1</a></li>
      <li class="menu-item"><a href="#" class="menu-link">Item 2</a></li>
    </ul>
  </li>
</ul>

Generic Structure(dl/dt/dd、1スイッチ×1コンテンツ)

<dl class="clickdion">
  <dt class="dion-summary">
    Title
    <i class="dion-switch"></i>
  </dt>
  <dd class="dion-content">
    Content here
  </dd>
</dl>

1スイッチ×複数コンテンツ(一括開閉)

.dion-switchdata-id を付けない場合、コンテナ内のすべての .dion-content が同じスイッチで一括開閉する。静的な見出しと .dion-content を交互に並べ、末尾の1つのスイッチで全体を開閉するようなケースに使う。

<dl class="dion-details clickdion">
  <dt class="static-content">
    <h3>Section 1</h3>
  </dt>
  <dd class="dion-content">Content 1</dd>

  <dt class="static-content">
    <h3>Section 2</h3>
  </dt>
  <dd class="dion-content">Content 2</dd>

  <dt>
    <a class="dion-summary dion-switch button" onclick>
      <data class="dion-label" data-closed="READ MORE" data-opened="CLOSE"></data>
      <i class="dion-status"></i>
    </a>
  </dt>
</dl>

data-id による複数スイッチ×複数コンテンツ(個別開閉)

同じコンテナ内に複数の .dion-switch を置き、それぞれに data-id を付けると、対応する data-id.dion-content だけが開閉する(他のスイッチ・コンテンツには影響しない)。

<dl class="dion-details clickdion">
  <dt class="dion-summaries">
    <a class="dion-summary dion-switch" data-id="tab1" onclick>Tab 1</a>
    <a class="dion-summary dion-switch" data-id="tab2" onclick>Tab 2</a>
    <a class="dion-summary dion-switch" data-id="tab3" onclick>Tab 3</a>
  </dt>
  <dd class="dion-contents">
    <div class="dion-content" data-id="tab1">Content 1</div>
    <div class="dion-content" data-id="tab2">Content 2</div>
    <div class="dion-content" data-id="tab3">Content 3</div>
  </dd>
</dl>

Classes

| Class | Description | |-------|-------------| | .clickdion | クリックで開閉するアコーディオンのコンテナ | | .hoverdion | ホバーで開閉するアコーディオンのコンテナ | | .dion-summary / .menu-link | トリガー要素(クリック/ホバー判定の対象) | | .dion-content / .sub-menu | 開閉するコンテンツ。data-id を付けると対応するスイッチとのみ連動する | | .dion-switch | クリック可能なスイッチ(矢印アイコン用)。data-id を付けると複数スイッチの個別対応が可能 | | .dion-status | 開閉状態を示すアイコン(+/-)。.dion-switch の中に置く | | .dion-label | data-closed / data-opened の文字列を開閉状態に応じて出し分ける要素(例:READ MORE⇔CLOSE)。.dion-switch の中に置く | | .dion-summaries / .dion-contents | 複数スイッチ・複数コンテンツをまとめる際のラッパー(構造整理用。無くても動作する) | | .is-active | スイッチが開いている状態(自動付与) | | .is-opened | コンテンツが開いている状態(自動付与) |

.dion-switch が要素内に存在しない場合は、.dion-summary / .menu-link 自体がクリック(ホバー)対象になる。

Icon

.dion-switch.dion-status のアイコンには Material Symbols を使用しています。

<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL,[email protected],100..700,0..1,-50..200">

アイコンをカスタマイズする場合は、CSSで ::beforecontent を上書きしてください。

Browser Support

  • Chrome / Edge (Chromium)
  • Firefox
  • Safari

Web Animations API、:is():has() セレクタをサポートするモダンブラウザで動作します。

License

MIT