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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@hcaptcha/vanilla-hcaptcha

v1.1.0-alpha2

Published

Vanilla Web Component for hCaptcha. 0 dependencies. <1kb gzipped.

Downloads

1,062

Readme

hCaptcha - Vanilla Web Component

A Vanilla Web Component wrapper for hCaptcha. It allows for easy integration with hCaptcha in many modern web frameworks.

0 dependencies. <1kb gzipped. Integrates well with Vue.JS, React, Preact, Angular, etc.

Install | Browser Compatibility | Usage | Attributes | Events | Methods

Install

Use your favorite package manager:

yarn add @hcaptcha/vanilla-hcaptcha
pnpm add @hcaptcha/vanilla-hcaptcha
npm install @hcaptcha/vanilla-hcaptcha

Or via cdn:

<script src="https://cdn.jsdelivr.net/npm/@hcaptcha/vanilla-hcaptcha"></script>

Browser Compatibility

hCaptcha web component is using es6 syntax and window property customElements.

| Browser | Min Version | |-----------------|-------------| | Chrome | 54 | | Edge | 79 | | Firefox | 63 | | Opera | 41 | | Safari | 10.1 | | Chrome Android | 54 | | Firefox Android | 63 |

Usage

Being a vanilla web component, it is relatively easy to integrate in mainstream web frameworks such as: React, Preact, Vue.js, Angular, Stencil.js, etc. See below some examples.

Vue.JS

Example: display invisible hCaptcha and render programmatically.

  1. Import once in application (main.js). Ignore the custom element.

    import "@hcaptcha/vanilla-hcaptcha";
       
    Vue.config.ignoredElements = [
      "h-captcha"
    ];
  2. Add handling methods

    methods: {
        onError(e) {
          console.log('hCaptcha error: ', e);
        },
        onCaptchaVerified(e) {
          console.log("Captcha is verified", { token: e.token, eKey: e.eKey });
        }
    }
  3. Integrate in your vue component

    <template>
        ...
        <h-captcha site-key="781559eb-513a-4bae-8d29-d4af340e3624"
                   size="invisible"
                   @error="onError"
                   @verified="onCaptchaVerified"></h-captcha>
        ...
    </template>

React.JS and Preact

Example: display normal size hCaptcha with dark theme.

  1. Import once in application (index.js).

    import '@hcaptcha/vanilla-hcaptcha';
  2. Add event handler after mount

    componentDidMount() {
        const signupCaptcha = document.getElementById('signupCaptcha');
        signupCaptcha.addEventListener('verified', (e) => {
          console.log('verified event', { token: e.token });
        });
    }
  3. Integrate in your html template

     <h-captcha id="signupCaptcha"
                site-key="781559eb-513a-4bae-8d29-d4af340e3624"
                size="normal"
                theme="dark"></h-captcha>

Angular

Example: display default hCaptcha.

  1. Import once in application (main.ts).

    import '@hcaptcha/vanilla-hcaptcha';
  2. Add CUSTOM_ELEMENTS_SCHEMA to @NgModule.schemas

  3. Integrate in your html template

     <h-captcha [attr.site-key]="siteKey"
                (verified)="onCaptchaVerified($event)"></h-captcha>
        

Angular.JS

Example: display compact hCaptcha with dark theme.

<!doctype html>
<html ng-app="angularjsApp">
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@hcaptcha/vanilla-hcaptcha"></script>

    <script>
        angular.module('angularjsApp', [])
                .controller('ExampleController', function () {
                    this.siteKey = "781559eb-513a-4bae-8d29-d4af340e3624";
                    this.onCaptchaVerified = function (e) {
                        console.log('verified event', {token: e.token});
                    };
                    this.onCaptchaError = function (e) {
                        console.log('error event', {error: e.error});
                    };
                });
    </script>
</head>
<body>
<div ng-controller="ExampleController as ctrl">
    <h-captcha site-key="{{ctrl.siteKey}}"
               size="compact"
               theme="dark"
               ng-on-verified="ctrl.onCaptchaVerified($event)"
               ng-on-error="ctrl.onCaptchaError($event)"
    ></h-captcha>
</div>
</body>
</html>

Next.JS

Example: display normal size hCaptcha with dark theme.

  1. Add h-captcha web component type by extending JSX.IntrinsicElements in *.d.ts.

    import * as React from 'react';
    
    declare global {
      declare namespace JSX {
        interface IntrinsicElements {
          'h-captcha': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement> & {
            [k: string]: unknown;
          }, HTMLElement>;
        }
      }
    }
  2. Integrate in your next.js page.

     export default function HomeComponent() {
       const sitekey = '781559eb-513a-4bae-8d29-d4af340e3624';
       const captchaRef = createRef<HTMLElement>();
    
       useEffect(() => {
         import('@hcaptcha/vanilla-hcaptcha');
       
         if (captchaRef.current) {
           captchaRef.current.addEventListener('verified', (e: Event) => {
             console.log('hCaptcha event: verified', { token: e.token });
           });
         }
       }, []);
       
       return (
       <main>
         <h-captcha
             ref={captchaRef}
             sitekey={sitekey}
             size="normal"
             theme="dark"
         ></h-captcha>
       </main>
       );
     }

Vanilla.JS

Example: display normal size hCaptcha accessible by keyboard (see tabindex).


<script src="https://cdn.jsdelivr.net/npm/@hcaptcha/vanilla-hcaptcha"></script>

<h-captcha id="signupCaptcha"
           site-key="781559eb-513a-4bae-8d29-d4af340e3624"
           size="normal"
           tabindex="0"></h-captcha>

<script>
    const signupCaptcha = document.getElementById('signupCaptcha');

    signupCaptcha.addEventListener('verified', (e) => {
        console.log('verified event', {token: e.token});
    });
    signupCaptcha.addEventListener('error', (e) => {
        console.log('error event', {error: e.error});
    });
</script>

Attributes

The web component allows specifying attributes. These are split into two categories: render and api attributes.

Render Attributes

Conveniently you can set the render properties as attributes to the web component. If you would like to programmatically call the render() method, you can set auto-render="false" property.

| Attribute | Values/Type | Default | Description | |-----------------------|-------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------| | auto-render | Boolean | true | When "false" it prevents automatic rendering of the checkbox. | | sitekey (required) | String | - | Your sitekey. Please visit hCaptcha and sign up to get a sitekey. | | size | String (normal, compact, invisible) | normal | This specifies the "size" of the checkbox. hCaptcha allows you to decide how big the component will appear on render. Defaults to normal. | | theme | String (light, dark) | light | hCaptcha supports both a light and dark theme. If no theme is set, the API will default to light. | | tabindex | Integer | 0 | Set the tabindex of the widget and popup. When appropriate, this can make navigation of your site more intuitive. | | hl | String (ISO 639-2 code) | - | hCaptcha auto-detects language via the user's browser. This overrides that to set a default UI language. | | challenge-container | String | - | A custom element ID to render the hCaptcha challenge. | | rqdata | String | - | See Enterprise docs. |

API Attributes

These attributes are optional.

| Attribute | Values/Type | Default | Description | |-------------------|----------------------------|---------|--------------------------------------------------------------------------------------------------------------------| | recaptchacompat | Boolean | true | Disable drop-in replacement for reCAPTCHA with false to prevent hCaptcha from injecting into window.grecaptcha. | | hl | String (ISO 639-2 code) | - | hCaptcha auto-detects language via the user's browser. This overrides that to set a default UI language. | | jsapi | String | - | See Enterprise docs. | | endpoint | String | - | See Enterprise docs. | | reportapi | String | - | See Enterprise docs. | | assethost | String | - | See Enterprise docs. | | imghost | String | - | See Enterprise docs. | | sentry | Boolean | - | See Enterprise docs. |

Events

Depending on the use case, you can or not listen to the following events.

| Event | Params | Description | |----------------------|----------------|---------------------------------------------------------------------------| | error | err | When an error occurs. Component will reset immediately after an error. | | verified | token, eKey | When challenge is completed. The token and the eKey are passed along. | | expired | - | When the current token expires. | | challenge-expired | - | When the unfinished challenge expires. | | opened | - | When the challenge is opened. | | closed | - | When the challenge is closed. |

Methods

The following methods allow for programmatic control, necessary only in case of a custom hCaptcha verification flow.

| Method | Description | |------------------|--------------------------------------------------------------------------------------------------------------------------| | render(config) | Renders the checkbox. Must pass the full render config, no attributes are injected. | | execute() | Triggers a verification request. | | executeAsync() | Triggers a verification request and receive a Promise which resolved with the token results or throws in case of errors. | | reset() | Resets the hCaptcha which requires user to fill captcha again. |

Commands

  • pnpm build

    Build a production version of the component.

  • pnpm dev

    Build dev version with hot reload.

  • pnpm test

    Runs unit tests.