Skip to content

Repository files navigation

PID Component

BuildNode 22Node 24Node 25codecovCodeQL

DOInpm versionnpm downloadsLicenseStorybook

The pid-component is an easily extensible web component that can be used to display PIDs, ORCiDs, and other identifiers in a user-friendly way. It is easily extensible to support other identifier types.

Framework wrappers are available for React, Vue, and Angular.

The pid-component dynamically renders a component based on the value of the value property. Depending on the value, it decides which component to render, what priority to give it, and what props to pass to it. It also renders itself recursively for all its children when unfolded. You can set the maximum depth of recursion with the level-of-subcomponents property. By default, it is set to 1, which means that it will only render the first level of children, but not their children. You can prohibit unfolding of the component by setting the current-level-of-subcomponents to the same value as the level-of-subcomponents property.

Example of a DOI component with a nested ORCID component

Via CDN (no bundler)

You can load the component directly from unpkg with a single script tag:

<scripttype="module">import{defineCustomElements}from'https://cdn.jsdelivr.net/npm/@kit-data-manager/pid-component/dist/loader/index.js';defineCustomElements();</script><pid-componentvalue="21.T11981/be908bd1-e049-4d35-975e-8e27d40117e6"></pid-component>

Via npm

npm install @kit-data-manager/pid-component

Then use the component in your HTML:

<pid-componentvalue="21.T11981/be908bd1-e049-4d35-975e-8e27d40117e6"></pid-component>

You can try this web component in the demo.

Only use the pid-component component! All the others are only for internal use and may change at any moment...

There are detailed docs for the pid-component component available in the Storybook and in the source code.

Please notice that you must use the hyphenated version of an attribute when using the component directly in HTML ( e.g. currentLevelOfSubcomponents -> current-level-of-subcomponents). When using inside Stencil or with JSX/TSX syntax, you must use the camelCase version.

Supported Types

The component automatically detects and renders the following types:

  • Dates: Formatted date strings.
  • ORCiDs: Resolvable via orcid.org. Displays profile information, affiliations, works, etc.
  • DOIs: With DataCite or CrossRef metadata; resolvable via doi.org. Supports various citation styles.
  • PIDs: Resolvable via handle.net.
  • RORs: Resolvable via ror.org. Displays organization details, hierarchies, and location.
  • SPDX: License identifiers and URLs.
  • ISBNs: International Standard Book Numbers (ISBN-10 and ISBN-13).
  • Email-addresses: Individual or comma-separated lists.
  • URLs: Starting with http:// or https://.
  • Locales: e.g., en-US, de-DE. Visualized with flags (if region is present).
  • JSON objects: Rendered with syntax highlighting and tree view using json-viewer.
  • Fallback: Everything else is rendered as a simple string.

Configuration & Settings

You can customize the behavior of specific renderers by passing a JSON configuration string to the settings property.

Available Settings

Global Settings

  • ttl (number): Time-to-live in milliseconds for cached data (default: varies by type).

DOIType

  • citationStyle (string): The citation style to use for the preview.
    • Options: APA, Chicago, IEEE, Harvard, Anglia Ruskin.
    • Default: APA.

ORCIDType

  • showAffiliation (boolean): Whether to show the affiliation in the summary.
    • Default: true.
  • affiliationAt (string/date as ms): The date for which the affiliation should be shown.
    • Default: Current date.

JSONType

  • darkMode (string): The theme for the JSON viewer.
    • Options: light, dark, system.
    • Default: system.

Example Configuration

<pid-componentvalue="https://orcid.org/0000-0000-0000-0000"
settings='[{"type":"ORCIDType","values":[{"name":"showAffiliation","value":false}]}]'
></pid-component>

Automatic PID Detection

The pid-component package includes an automatic PID detection feature that scans a DOM subtree for text containing PIDs and replaces them with interactive <pid-component> elements.

import{initPidDetection}from'@kit-data-manager/pid-component';constcontroller=initPidDetection({root: document.getElementById('my-content'),darkMode: 'system',renderers: ['DOIType','ORCIDType','HandleType'],// optional: try these firstobserve: true,// watch for dynamic content changes});// Later:controller.stop();// pause MutationObservercontroller.rescan();// re-scan the DOMcontroller.destroy();// remove all components, restore original text

Or with a plain <script> tag (no bundler):

<scripttype="module">import{initPidDetection}from'https://unpkg.com/@kit-data-manager/pid-component/dist/esm/index.js';initPidDetection({root: document.getElementById('content'),darkMode: 'system',});</script>

How It Works

  1. Walks the DOM tree collecting text nodes (skips <script>, <style>, <code>, <pre>, <pid-component>, etc.)
  2. Tokenizes text and sanitizes surrounding punctuation (dots, commas, quotes, brackets)
  3. Runs tokens through the detection registry (same regex patterns used by the renderers)
  4. Wraps only matched PID tokens in <pid-component> elements — non-matching text stays untouched
  5. Original text stays visible until the component finishes loading; on failure, original text is restored

Configuration Options

OptionTypeDefaultDescription
rootHTMLElementdocument.bodyRoot element to scan
renderersstring[]allOrdered renderer preselection (non-binding)
fallbackToAllbooleantrueFall back to full registry if preselection doesn't match
excludestringCSS selector for elements to skip
observebooleanfalseWatch for new DOM nodes (MutationObserver)
darkModestring"light""light", "dark", or "system"
settingsstring"[]"JSON settings for all detected components
levelOfSubcomponentsnumber1Max depth of nested subcomponents
amountOfItemsnumber10Items per page in data tables
emphasizeComponentbooleantrueShow border/shadow on components
showTopLevelCopybooleantrueShow copy button on top-level components
defaultTTLnumber86400000Cache TTL in milliseconds

Available Renderer Keys

DateType, ORCIDType, DOIType, HandleType, RORType, SPDXType, EmailType, URLType, LocaleType, JSONType, ISBNType, FallbackType

Framework Integration

  • React: Call in useEffect(), return controller.destroy() as cleanup
  • Angular: Call in ngAfterViewInit(), cleanup in ngOnDestroy()
  • Vue: Call in onMounted(), cleanup in onUnmounted()

See the Storybook documentation for detailed examples and interactive demos.

PID Resolver helper classes

The pid-component package exports a useful helper class for resolving PIDs. These are PID, PIDDataType and PIDRecord and can be imported like this:

import{PID,PIDDataType,PIDRecord}from"@kit-data-manager/pid-component"constpid=newPID("21.T11981/be908bd1-e049-4d35-975e-8e27d40117e6")constpidRecord=awaitpid.resolve()constpidDataType=awaitPIDDataType.resolveDataType(pid)

Further documentation is available in the source code.

Development

For development setup, building, testing, and deployment documentation, see DEVELOPMENT.md.

About

The PID-Component is a web component that can be used to display PIDs, ORCiDs, and possibly other identifiers in a user-friendly way. It is easily extensible to support other identifier types.

Topics

Resources

Code of conduct

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages