Socket
Book a DemoInstallSign in
Socket

@n8d/htwoo-react

Package Overview
Dependencies
Maintainers
1
Versions
71
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@n8d/htwoo-react

hTWOo React is a ReactJS implementation of hTWOo Core which is a Fluent Design Framework purely in HTML and CSS

Source
npmnpm
Version
1.1.0
Version published
Weekly downloads
85
-14.14%
Maintainers
1
Weekly downloads
 
Created
Source

HTWOO ReactJS Components

HTWOO ReactJS is an open source alternative for Microsoft's various implementations of their Fluent UI Web Design system. This library consists of flexible ReactJS components based on the HTWOO UI library. For a complete listing please see HTWOO Core Style Guide.

Complete documentation of the HTWOO ReactJS components

100% Fluent Design DOM manipulation free license

How To Use

Note: This component library is currently under development and will most likely continue to make improvements that could likely bring about breaking changes. Please feel free to submit your enhancement ideas and feedback to the issues list so that we can try to address them.

Initialize library in Microsoft SharePoint Framework (SPFx)

  • Install package in your solution.

    This package has a peer dependency on the correspoinding version of @n8d/htwoo-core so that will be added automatically for you.

    npm i @n8d/htwoo-react --save
    
  • Add a reference to the style.prod.scss file in your solutions root .scss file. Put the reference inside of the webparts base class so that the styles are scoped to the instance of this webpart:

    Note: The import is wrapped in :global so that the class names will not be modified with a namespace.

    .myWebPartRoot{
      :global {
        @import 'node_modules/@n8d/htwoo-core/lib/sass/style.prod';
      }
    }
    

    then in your root component's top level HTML element add a reference to that base class. This will make sure that when your project builds, the styles will be included. For example:

    public render(): React.ReactElement<IHtwooReactDemoProps> {
      try {
        return (
          <div className={styles.myWebPartRoot}>
            Hello World
          </div>
        );
      } catch (err) {
        console.error(`${this.LOG_SOURCE} (render) - ${err}`);
        return null;
      }
    }
    
  • To initilize the basic SVG icons add the following line to your components main ts file's onInit method:

    import { symset } from '@n8d/htwoo-react/SymbolSet';
    
    public async onInit(): Promise<void> {
      // Initialize Icons Symbol Set
      await symset.initSymbols();
    }
    

    Alternately you can load your own icon symbol set by passing the path into the initSymbols method:

    This will load both the default hoo-icons as well as whatever icons are in your referenced file.

    import { symset } from '@n8d/htwoo-react/SymbolSet';
    
    public async onInit(): Promise<void> {
      // Initialize Icons Symbol Set with Custom Symbol File
      const symbolSetFile: string = require("./images/icons.svg");
      await symset.initSymbols(symbolSetFile);
    }
    

    A SVG symbol file will look similar to the following:

    <svg aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1"
      xmlns="http://www.w3.org/2000/svg"
      xmlns:xlink="http://www.w3.org/1999/xlink">
      <defs>
          <symbol id="icon-arrow-left" viewBox="0 0 32 32">
              <path d="M22.547 31.953l-15.969-15.953 15.969-15.953 1.406 1.406-14.531 14.547 14.531 14.547-1.406 1.406z"></path>
          </symbol>
      </defs>
    </svg>
    

    If you are looking to load icons from the @n8d\htwoo-icons library you can install the package and then import them by referencing the svg file in the node_modules folder.

    import { symset } from '@n8d/htwoo-react/SymbolSet';
    
    public async onInit(): Promise<void> {
      // Initialize Icons Symbol Set with HTWOO-Icons
      const fuireg: string = require("@n8d/htwoo-icons/fluent-ui-regular/fluent-ui-regular.svg");
      await symset.initSymbols(fuireg);
    }
    

    To use the icons in this file, you will reference them by the individual icon's id value, which in the SVG file sample above is icon-arrow-left. Here's an example of using an icon in the HOOAction component

    <HOOAction iconName="hoo-icon-plus" label="Action Button" type={HOOActionType.Action}/>
    
  • (Optional) Add theme support to your SPFx project

    a. Modify your components manifest and add supportsThemeVariants which allows any of the hTWOo components to render properly in colored SharePoint section.

    { 
      //...
      "supportsThemeVariants": true,
      // ...
    }
    

    b. Add the following helper code to your components main ts file's onInit method which initializes the CSS Variables to support themes. Make sure to add the import and the private _spfxThemes variable:

    import { ThemeProvider } from '@microsoft/sp-component-base';
    import { SPFxThemes, ISPFxThemes } from '@n8d/htwoo-react/SPFxThemes';
    
    private _spfxThemes: ISPFxThemes = new SPFxThemes();
    
    public async onInit(): Promise<void> {
      // Consume the new ThemeProvider service
      const microsoftTeams = this.context.sdks?.microsoftTeams;
      const themeProvider = this.context.serviceScope.consume(ThemeProvider.serviceKey);
      this._spfxThemes.initThemeHandler(this.domElement, themeProvider, microsoftTeams);
    
      // If no ThemeProvider service, do not include property which will use page context
      this._spfxThemes.initThemeHandler(document.body);
    }
    

    There are two other alterivatives to adding theme support, for more information please check out the SPFxThemes Class documentation.

  • Import the HTWOO component that you want to use into your own projects components. All components are selectively importable from the /lib/ folder. We will be working on fully documenting all components and their implementation soon.

HTWOO Base Concept

hTWOo style guide, documentation and building platform is based on patternlab.io. To allow the most flexible implementation of designs and design pattern it follows the Atomic Design Methodology coined by Brad Frost around 2012 / 2013.

We're tasked with making interfaces for more users in more contexts using more browsers on more devices with more screen sizes and more capabilities than ever before. That's a daunting task indeed. Thankfully, design systems are here to help. - Brad Frost

Engage

Follow us on Twitter @htwooui.

Maintainer: Stefan Bauer (N8D), Julie Turner

Contributor: You ❤️

Keywords

Fluent Design

FAQs

Package last updated on 21 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts