EdgeJS Components

In this series, we'll take a deep dive into EdgeJS Components by creating our own reusable components from the PinesUI component library, built with TailwindCSS and ApineJS.

Difficulty Beginner
What's Inside 25 Lessons
Sign up to save progress
1

Module 1
Getting Started

1.0

Exploring EdgeJS' Component System

In this lesson, we'll walk through a high-level overview of this series' objectives, including the various components we'll build throughout this series.

1m 6s
1.1

Getting Started, Installing AlpineJS and TailwindCSS

In this lesson, we'll quickly create a new AdonisJS 5 project to house our components. Then, we'll install the dependencies needed by PinesUI; AlpineJS and TailwindCSS.

3m 33s
1.2

View Structure and Component-Based Layouts

In this lesson, we'll get our view and component structures set up. Then, we'll take an abnormal approach and cover how to use components for your layouts.

4m 32s

Dynamic Demo Routes for Components

In this lesson, we'll set up a dynamic route, which will be used to serve demos of the various components we'll be building.

2m 58s
2

Module 2
Components Overview

A Look At Component Reactivity

In this lesson, we'll take a look at how we'll approach reactivity within our EdgeJS components using AlpineJS. We'll also briefly discuss where the line between EdgeJS and AlpineJS is, in terms of our component state and reactivity.

1m 56s

Component State & Passing State from EdgeJS to ApineJS

In this lesson, we'll take a look at how we can define and manage state within EdgeJS Components. We'll also learn how we can pass single properties or full objects from EdgeJS to AlpineJS and our client-side scripts.

3m 36s

Component Props and Default State

In this lesson, we'll learn how about props and how props and state interact within EdgeJS Components. We'll also take a look at how we can default default state values for our components.

3m 43s

Serializing Props as Element Attributes

In this lesson, we'll learn about EdgeJS' serialize only and serialize except utility methods, which allow us to directly serialize key-value pairs from our props as element attributes within our components.

1m 53s

Main Slot, Named Slots, and Slot Scopes

In this lesson, we'll learn all about the main slot, how to define and use named slots, as well as passing state information from within our components to our slots using slot scopes.

4m 23s
3

Module 3
Button Component

Creating Our Base Button

In this lesson, we'll create our base button component which al our other button styles will derive from. It'll be in charge of building our classes, adding interactivity, and more.

3m 55s

Adding Interactivity to our Button

In this lesson, we'll add extendable interactivity to our button using AlpineJS. We'll also walk through a demonstration of how we can utilize event propagation in AlpineJS to our advantage.

3m 27s

Adding Button Size Options

In this lesson, we'll add four size options to our base button large, base, small, and extra small. These sizes will then automatically be available as we add our button variants and styles.

2m 29s

Adding Button Variants

In this lesson, we'll add variant options for our base button. These will provide light and dark options as well as stateful coloring blue, green, red, and yellow.

3m 13s

Adding Button Inverse and Outline Styles

In this lesson, we'll add two new button style options, inverse and outline. Both styles will extend off the work we did with our base button to keep all functionality in one concise location

5m 4s
4

Module 4
Alert Component

Creating Our Base Alert

In this lesson, we'll create our base alert to serve as our building block for our content, variant, and style options. We'll also fix a pseudo-selector issue.

3m 30s

Adding Alert Variants

In this lesson, we'll focus on adding a light, dark, blue, green, red, and yellow variant option to our base alert.

3m 36s

Adding Conditional Icon, Headline, and Message Content

In this lesson, we'll make our alert's icon, headline, and message completely optional. We'll also allow our icon to be provided via slot and our headline and message via prop or slot.

5m 52s

Inverse Alert Style & Cascading Slots

In this lesson, we'll add our alert's inverse styling by extending our base alert. We'll also see how to cascade slots passed into our inverse alert to our extended base alert.

6m 10s

Dismissible & Self Destructing Alerts

In this lesson, we'll focus on adding interactivity to our alerts by making them both conditionally dismissible and self-destructable.

3m 44s
5

Module 5
Accordion Component

Starting Our Accordion

In this lesson, we'll start our accordion component and gain an understanding of how to handle uniquely identifying components that may appear multiple times on a single page via the AlpineJS magic id utility.

5m 17s

Identifying Accordion Items

In this lesson, we'll add the ability to have more than one item on a given accordion by creating a new accordion item component.

5m 58s

Bordered, Active Bordered, and Plain Variants

In this lesson, we'll split out three different variants from the accordion item we made in the last lesson. We'll create bordered, active bordered, and plain accordion items.

6m 16s
6

Module 6
Form Component

Form Utility Component

In this lesson, we'll start a form utility component. This component will allow us to create one central location where we can maintain our forms and provide additional functionality like simplified method spoofing.

5m 23s

Form Component Method Spoofing

In this lesson, we'll add simplified HTTP Method Spoofing functionality to our base form component. With this simplified functionality all we'll need to do is specify the desired HTTP Method to the method prop and it'll add it to our URL.

8m 3s

Form HTTP Method Components

In this lesson, we'll create helper HTTP Method form components, further simplifying our method spoofing by allowing us to just chain the desired method off our form component.

2m 46s
excited robot

More in the works!

Add to your watchlist to get notified when new lessons are added