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

@randevcx/ranui

v0.1.10-alpha.12

Published

UI Component library based on `Web Component`

Downloads

423

Readme

ranui

UI Component library based on Web Component


Feature

  1. High Cross-Framework Compatibility: Our solution seamlessly adapts to a wide array of leading front-end frameworks, including React, Vue, Preact, SolidJS, Svelte, and more. It also integrates smoothly with any project built on JavaScript and adhering to W3C standards. No matter your choice of technology stack, we guarantee consistent and reliable support.
  2. Pure Native Experience: Our solution eliminates the need for dependencies on front-end frameworks like npm, React/Vue, or complex build tools such as webpack/vite. It truly embodies the essence of Web technology. You can get started effortlessly, just like manipulating native div tags, immediately experiencing the purity and intuitiveness of the technology. This design not only simplifies project structure but also reduces the cost of learning and usage, enabling every developer to appreciate the native charm of Web technology.
  3. Ultimate Modular Design: Utilizing the principle of minimal modularization, we carefully dismantle large and complex systems or applications into extremely small, functionally independent, and easily reusable component units. This approach significantly enhances code maintainability, scalability, and reusability.
  4. Fully Open-Source for Free Learning: Our project fully adheres to the MIT open-source license, granting unrestricted access to all source code. This means you are free to access, learn from, reference, and even modify our code, whether for personal development or commercial applications. We firmly believe that open-source is a vital pathway for technological advancement and innovation.
  5. Interactive and Comprehensive Documentation: We provide detailed and highly interactive documentation, where all component examples are live and interactive. This allows you to directly experience the component functionality while reading, deepening your understanding and enabling quick hands-on learning. This design is aimed at providing you with the most intuitive and efficient learning experience possible.
  6. Type-Checking Support: Our development environment is fully built on TypeScript, equipped with comprehensive declaration files and type definitions, ensuring smooth integration for both JavaScript and TypeScript projects. With powerful type-checking capabilities, we significantly enhance code readability, maintainability, and project robustness, bringing unprecedented convenience and peace of mind to development work.
  7. Enhanced Durability and Stability: Our solution offers exceptional stability, eliminating concerns about disruptive updates encountered during version upgrades, such as React from version 15 to 16 (with fiber) or Vue from version 2 to 3 (with hooks). We ensure that your components won't be forced into unnecessary updates or redevelopments, thus avoiding potential project interruptions and additional workloads. This translates into a continuous and hassle-free project operation.

Install

Using npm:

npm install ranui --save

Document

See components and use examples

Example

https://github.com/chaxus/ran/blob/main/packages/ranui/index.html

Import

Support for on-demand import, which can reduce the size of loaded js

import 'ranui/button';

For global components like preview and message, you need to import global styles

import 'ranui/preview';
import 'ranui/style';

Support global import

  • ES module
import 'ranui';
  • UMD, IIFE, CJS
<script src="./ranui/dist/umd/index.umd.cjs"></script>

Usage

It is based on the Web Component, you can use it without focusing on the framework.

In most cases, you can use it just like a native div tag

Here are some examples:

  • html
  • js
  • jsx
  • vue
  • tsx

html

<script src="./ranui/dist/umd/index.umd.cjs"></script>

<body>
  <r-button>Button</r-button>
</body>

js

import 'ranui';

const Button = document.createElement('r-button');
Button.appendChild('this is button text');
document.body.appendChild(Button);

jsx

Since react has composite events, for more convenient use, ranui is encapsulated through react high-level components to form @ranui/react.

In react, it is recommended to use @ranui/react.

However, ranui can still be used in any js or ts framework.

import 'ranui';

const App = () => {
  return (
    <>
      <r-button>Button</r-button>
    </>
  );
};

vue

<template>
  <r-button></r-button>
</template>
<script>
import 'ranui';
</script>

tsx

Since react has composite events, for more convenient use, ranui is encapsulated through react high-level components, so there is @ranui/react.

In react, using @ranui/react is silky and fully integrated into the react ecosystem after being wrapped in higher-order functions.

However, ranui can still be used in any js or ts.

// react 18
import type { SyntheticEvent } from 'react';
import React, { useRef } from 'react';
import 'ranui';

const FilePreview = () => {
  const ref = useRef<HTMLDivElement | null>(null);
  const uploadFile = (e: SyntheticEvent<HTMLDivElement>) => {
    if (ref.current) {
      const uploadFile = document.createElement('input');
      uploadFile.setAttribute('type', 'file');
      uploadFile.click();
      uploadFile.onchange = (e) => {
        const { files = [] } = uploadFile;
        if (files && files?.length > 0 && ref.current) {
          ref.current.setAttribute('src', '');
          const file = files[0];
          const url = URL.createObjectURL(file);
          ref.current.setAttribute('src', url);
        }
      };
    }
  };
  return (
    <div>
      <r-preview ref={ref}></r-preview>
      <r-button type="primary" onClick={uploadFile}>
        choose file to preview
      </r-button>
    </div>
  );
};

jsx defines the types of all HTML-native components in TypeScript.

The web component type is not in the jsx definition.

You need to add it manually.

Otherwise you'll have type problems, but it actually works.

// typings.d.ts
interface RButton {
  type?: string;
  onClick?: React.MouseEventHandler<HTMLDivElement> | undefined;
}

interface RPreview {
  src?: string | Blob | ArrayBuffer;
  onClick?: React.MouseEventHandler<HTMLDivElement> | undefined;
  ref?: React.MutableRefObject<HTMLDivElement | null>;
}

declare namespace JSX {
  interface IntrinsicElements {
    'r-preview': React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & RPreview;
    'r-button': React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & RButton;
  }
}

Contributors

Visitors

Meta

LICENSE (MIT)