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

@cgdd-bun/dido-widgets

v2.2.3

Published

Widgets Library for DiDo Api as Web Components

Readme

DiDo Wigets as Custom Elements Library

This project is a library of web components. This web components are widgets for interaction with the DiDo API.

Actually there are 10 web components in the library:

  • a web component for displaying a "dataset" detail
  • a web component for displaying a "dataset" card
  • a web component for displaying a "datafile" detail
  • a web component for displaying a "datafile" card
  • a web component for displaying a "millesime" detail
  • a web component for downloading data from api
  • a web component for displaying a pagination for datasets or datafiles resources (with infinite scroll)
  • a web component for displaying an explore page (pagination with ui filter)
  • a web component for displaying global apidoc
  • a web component for displaying a full catalog

Usage of the library

The library is developped with Vue3. But for optimization Vue is not included in the library and must be loaded before.

The library expose a function for registering each web component with a custom tag. If you don't specify a custom tag, the default tag for the component will be used;

Example of usage of web component dataset:

<!-- Loading of Vue3 -->
<script src="https://unpkg.com/[email protected]/dist/vue.global.prod.js"></script>
<!-- Loading of DiDo Library -->
<script src="https://unpkg.com/@cgdd-bun/dido-widgets/dist/dido-widgets.umd.js"></script>
<!-- Registering dido dataset custom element as my-custom-tag web component -->
<script>
  DidoWidgets.register("dataset", "my-custom-tag");
</script>
<!-- Web component will be here in shadow dom -->
<my-custom-tag
  dido-url="http://api.diffusion.dido.fr/v1"
  dido-dataset-id="61d4612eb90992002e39724f"
/>

Interaction with library

Each web component get props for initializing. Ex: url of api and dataset id for the web component "dataset".

Each web component emit events. You can attach listener to these events

Ex: attaching an event listener to event 'datafile-selection' of web component "dataset":

// get webcomponent
const comp = document.querySelector("dido-dataset");

// attach listener to event 'datafile-selection'
comp.addEventListener("datafile-selection", (event) =>
  console.log(
    "click on card of datafile " +
      event.detail[0].datafileRid +
      " of dataset " +
      event.detail[0].datasetId,
  ),
);

Dataset web component

  • Default tag for registration: dido-dataset
  • Props:
    • dido-url:
      • url of DiDo api
      • required
    • dido-dataset-id:
      • id of Dataset
      • required
  • Events emitted
    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • dataset-retrieved:
      • emitted when the dataset is retrieved with api
      • event.detail[0]: { datasetId }
    • dataset-not-retrieved:
      • emitted when the dataset is unavailable
      • event.detail[0]: { datasetId }
    • label-selection:
      • emitted when a label is clicked
      • event.detail[0]: { type, value }
    • datafile-selection:
      • emitted when a datafile in the dataset is clicked
      • event.detail[0]: { datasetId, datafileRid }

Dataset Card web component

  • Default tag for registration: dido-dataset-card
  • Props:
    • dido-url:
      • url of DiDo api
      • required
    • dido-dataset-id:
      • id of Dataset
      • required
  • Events emitted
    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • dataset-retrieved:
      • emitted when the dataset is retrieved with api
      • event.detail[0]: { datasetId }
    • dataset-not-retrieved:
      • emitted when the dataset is unavailable
      • event.detail[0]: { datasetId }
    • label-selection:
      • emitted when a label is clicked
      • event.detail[0]: { type, value }
    • click-card:
      • emitted when dataset card is clicked
      • event.detail[0]: { datasetId }

Datafile web component

  • Default tag for registration: dido-datafile

  • Props:

    • dido-url:
      • url of DiDo api
      • required
    • dido-datafile-rid:
      • rid of Datafile
      • required
    • dido-datafile-millesime:
      • millesime of datafile preselected
      • not required (if not set the last millesime is preselected)
    • dido-initial-filter:
      • initial filter in the table of data of selected millesime

      • not required, if set, format of json string:

        {
          "orderBy": "-COLUMN1",
          "columns": "COLUMN1,COLUMN3,COLUMN4",
          "COLUMN1": { "type": "neq", "value": "valeur1" },
          "COLUMN4": { "type": "withinCogZones", "value": "dpt:63@2020" }
        }
  • Events emitted

    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • datafile-retrieved:
      • emitted when the datafile is retrieved with api
      • event.detail[0]: { datafileRid }
    • datafile-not-retrieved:
      • emitted when the datafile is unavailable
      • event.detail[0]: { datafileRid }
    • label-selection:
      • emitted when a label is clicked
      • event.detail[0]: { type, value }
    • dataset-selection:
      • emitted when the dataset of the datefile is clicked
      • event.detail[0]: { datasetId }
    • millesime-selection:
      • emitted when a millesime in the datefile is clicked
      • event.detail[0]: { datafileRid, datafileMillesime }

Datafile Card web component

  • Default tag for registration: dido-datafile-card
  • Props:
    • dido-url:
      • url of DiDo api
      • required
    • dido-datafile-rid:
      • rid of Datafile
      • required
  • Events emitted
    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • datafile-retrieved:
      • emitted when the datafile is retrieved with api
      • event.detail[0]: { datafileRid }
    • datafile-not-retrieved:
      • emitted when the datafile is unavailable
      • event.detail[0]: { datafileRid }
    • label-selection:
      • emitted when a label is clicked
      • event.detail[0]: { type, value }
    • click-card:
      • emitted when datafile card is clicked
      • event.detail[0]: { datafileRid }

Millesime web component

  • Default tag for registration: dido-millesime

  • Props:

    • dido-url:
      • url of DiDo api
      • required
    • dido-datafile-rid:
      • rid of Datafile of millesime
      • required
    • dido-datafile-millesime:
      • millesime
      • required
    • dido-initial-filter:
      • initial filter in the table of data

      • not required, if set, format of json string:

        {
          "orderBy": "-COLUMN1",
          "columns": "COLUMN1,COLUMN3,COLUMN4",
          "COLUMN1": { "type": "neq", "value": "valeur1" },
          "COLUMN4": { "type": "withinCogZones", "value": "dpt:63@2020" }
        }
  • Events emitted

    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • millesime-retrieved:
      • emitted when the millesime is retrieved with api
      • event.detail[0]: { datafileRid, datafileMillesime }
    • millesime-not-retrieved:
      • emitted when the millesime is unavailable
      • event.detail[0]: { datafileRid, datafileMillesime }

Download web component

  • Default tag for registration: dido-download
  • Props:
    • dido-url:
      • url of DiDo api
      • required
    • dido-widget-type
      • level of widget (available values are dataset, datafile and millesime)
      • required
    • dido-dataset-id:
      • id of Dataset
      • required if dido-widget-type is dataset
    • dido-datafile-rid:
      • id of Datafile
      • required if dido-widget-type is datafile or millesime
    • dido-datafile-millesime:
      • millesime of datafile preselected
      • required if dido-widget-type is millesime
  • Events emitted
    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • widget-type-unknown:
      • emitted when dido-widget-type is not valid
      • event.detail[0]: { datasetId }
    • dataset-retrieved:
      • emitted when dido-widget-type is dataset and the dataset is retrieved with api
      • event.detail[0]: { datasetId }
    • dataset-not-retrieved:
      • emitted when dido-widget-type is dataset and the dataset is unavailable
      • event.detail[0]: { datasetId }
    • datafile-retrieved:
      • emitted when dido-widget-type is datafile and the datafile is retrieved with api
      • event.detail[0]: { datafileRid }
    • datafile-not-retrieved:
      • emitted when dido-widget-type is datafileand the datafile is unavailable
      • event.detail[0]: { datafileRid }
    • millesime-retrieved:
      • emitted when dido-widget-type is millesime and the millesime is retrieved with api
      • event.detail[0]: { datafileRid, datafileMillesime }
    • millesime-not-retrieved:
      • eemitted when dido-widget-type is millesime and the millesime is unavailable
      • event.detail[0]: { widgetType }

Pagination web component

  • Default tag for registration: dido-pagination

  • Props:

    • dido-url:
      • url of DiDo api
      • required
    • dido-filter:
      • filter used for pagination

      • required (you can pass {} for default value)

      • default value:

        {
          "itemsType": "dataset",
          "order": { "field": "last_modified", "sort": "desc" },
          "text": "",
          "lastModified": { "max": "", "min": "" },
          "temporalCoverage": { "from": "", "to": "" },
          "topics": [],
          "tags": [],
          "licenses": [],
          "zones": [],
          "granularities": [],
          "frequencies": []
        }
  • Events emitted

    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • click-card:
      • emitted when a card id clicked
      • event.detail[0]: { type, datasetId, datafileRid }
    • label-selection-on-card:
      • emitted when a label in a card is clicked
      • event.detail[0]: { card, type, value }
    • init:
      • emitted when a pagination with new filter is initialized

      • event.detail[0]:

        {
          itemsType,
          order: { field, sort },
          text,
          lastModified: { min, max },
          temporalCoverage: { from, to },
          topics,
          tags,
          frequencies,
          zones,
          granularities,
          licenses
        }

Explore web component

  • Default tag for registration: dido-explore

  • Props:

    • dido-url:
      • url of DiDo api
      • required
    • dido-filter:
      • filter used for explore

      • required (you can pass {} for default value)

      • default value:

        {
          "itemsType": "dataset",
          "order": { "field": "last_modified", "sort": "desc" },
          "text": "",
          "lastModified": { "max": "", "min": "" },
          "temporalCoverage": { "from": "", "to": "" },
          "topics": [],
          "tags": [],
          "licenses": [],
          "zones": [],
          "granularities": [],
          "frequencies": []
        }
  • Events emitted

    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • click-card:
      • emitted when a card id clicked
      • event.detail[0]: { type, datasetId, datafileRid }
    • label-selection-on-card:
      • emitted when a label in a card is clicked
      • event.detail[0]: { card, type, value }
    • new-filter:
      • emitted when a new filter is activated

      • event.detail[0]:

        {
          itemsType,
          order: { field, sort },
          text,
          lastModified: { min, max },
          temporalCoverage: { from, to },
          topics,
          tags,
          frequencies,
          zones,
          granularities,
          licenses
        }

Global apidoc web component

  • Default tag for registration: dido-apidoc
  • Props:
    • dido-url:
      • url of DiDo api
      • required
  • Events emitted
    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }

Catalog web component

  • Default tag for registration: dido-catalog

  • Props:

    • dido-url:

      • url of DiDo api
      • required
    • dido-catalog-contact-url:

    • dido-linked-docs-url:

      • url for linked docs from external api

      • schema for external api:

        [
          {
            // the external id
            "nid": "5825",
            "type_dido": "dataset",
            "datasetid": "631b03afb61e5c6479370169",
            "datafileRid": "",
            "datafileMillesime": "",
            "created": "2023-05-05",
            // Url encoded
            "content_title": "Donn\u00e9es mensuelles de l\u0026#039;\u00e9nergie",
            // Url encoded
            "content_summary": "Principales donn\u00e9es mensuelles.......",
            // Url encoded
            "content_link": "https://www.statistiques.developpement-durable.gouv.fr/donnees-mensuelles-de-lenergie"
          }
        ]
      • not required (if not set linked docs functionnality is disabled)

    • dido-initial-explore-url:

      • not required

      • used for setting an initial filter in explore page when first loading and querystring in url is empty

      • format of string example:

        type=datafile&pagination=1&sortField=title&sortOrder=desc&topics=Environnement&tags=territoire,indicateur&licenses=fr-lo&zones=country:fr&granularities=fr:commune&frequencies=annual

    • dido-message-service:

      • not required
      • default value is false
      • used to activate the message service
    • dido-message-service-type:

      • not required
      • default value is primary
      • possible values are all Quasar colors
      • used for the color of the message service (used only if dido-message-service is true)
    • dido-message-service-content:

      • not required
      • default value is 'Un message de service'
      • used for the content of the service message
    • dido-message-service-permanent

      • not required
      • default value is false
      • used to set the service message as permanent or dismissible
  • Events emitted

    • widget-mounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
    • bad-configuration:
      • emitted when a required prop is not set
      • event.detail[0]: empty
    • widget-unmounted:
      • emitted when widget is mounted
      • event.detail[0]: { type }
  • Scopes:

    • didoMessageServiceContent:
      • slot used for rich-text in service message.
      • supercharge attribute dido-message-service-content
      • examples:
        • a simple positive permanent message:

          <dido-catalog
            dido-url="{your_dido_url_api}"
            dido-message-service
            dido-message-service-type="positive"
            dido-message-service-content="un simple message de service dans l'attribut dido-message-service-content de la balise dido-catalog"
            dido-message-service-permanent
          ></dido-catalog>
        • a riche negative dismissible message:

          <dido-catalog
            dido-url="{your_dido_url_api}"
            dido-message-service
            dido-message-service-type="negative"
          >
            <p slot="didoMessageServiceContent">
              <style>
                .text-bold {
                  font-weight: bold;
                }
                .text-uppercase {
                  text-transform: uppercase;
                }
              </style>
              <span class="text-bold">Le titre du message en gras</span>
              <br /><br />
              On peut mettre tout le texte qui suit en majuscule :
              <span class="text-uppercase"
                >Ceci est un message enrichi qui provient du slot</span
              >
              didoMessageServiceContent
              <span class="text-uppercase">de la balise</span>
              <span class="text-uppercase">dido-catalog</span>
            </p>
          </dido-catalog>