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

attendease-blocks

v0.4.63

Published

CMS Blocks for Attendease

Readme

Attendease Blocks for the CMS

What is a block?

A block is an element on a page that takes the form of a Bootstrap row. What lives inside the row is entirely up to the block.

Blocks are written as React components.

Content and Preferences

A block is made up of content and preferences. A block configuration is made up of two tabs: the first is a content editor that is provided by each block, and the second is a preferences screen which is driven by a definition that the block provides along with a generic preferences form.

Both content and preferences are stored in the form of objects.

How do I make a block?

That's an excellent question, and I'm so glad you asked.

Content Editors

Your block should provide a content editor if there's content to edit.

Content Editor components receive three props:

Property | Description --------- | ----------- content | The object containing the content properties of the block preferences | The key/value object containing the preferences of the block handleUpdate | A callback function that you are responsible for calling when there's content to update. You need to pass back the updated content prop.

Your content editor should be named using the BlockFooContentEditor form.

Use react-bootstrap to style the content editor.

Testing Blocks

Adding Blocks to the project

  1. Block components live in src/components/blocks.
  2. You provide three files: BlockFoo.js, BlockFooConfigurationProperties.js, and BlockFooContentEditor.js (where Foo is the real name of your block).
  3. Your main Block component class must be imported and exported in src/index.js.
  4. Your main Block components must be imported in src/blockrenderer.js as well as being added to the const Components object.
  5. Your content editor must be imported in src/components/BlockModalEditor.js as well being added to the const EditorComponents object.
  6. Your component tests belong in test/components.
  7. There is no step 7! So easy! (Hopefully we can make this more automatic over time.)

Test with karma.

yarn run test

Building / Developing / Distributing

Setup

Install yarn if you don't have it.

brew install yarn

Add the module dependencies.

yarn

Local Development

yarn start

Bundle for local development

e.g. Pointing your Attendease project to your local tree.

yarn dist

Then on the Attendease side, you would do:

import { ... } from '/path/to/attendease-blocks'

or in Webpack add an alias (and change only once!):

'attendease-blocks': '/Users/mike/Sites/attendease-blocks'

Publishing

Jenkins handles this when things are merged into master.

DO NOT CHANGE THE VERSION IN package.json!

and:

DO NOT RUN ANY OF THE release: SCRIPTS

Supported Blocks

Component | Description --------- | ----------- BlockHeading | A simple heading block (h1, h2, etc) BlockHeroHeaderText | A heading and subheading BlockText | A simple text block BlockSpacer | A simple spacer block

Importing Blocks

import { BlockHeading, BlockText, BlockSpacer } from 'attendease-blocks'