
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
A flexible Angular component library for creating responsive layouts like grids, tabs, wizards, and more, styled with Tailwind CSS.
BlFrameComponent
is an easy-to-use Angular component library that helps you create beautiful and flexible layouts for your web apps. It supports 14 different layouts, like grids, tabs, wizards, and modals, all styled with Tailwind CSS. Whether you're building a dashboard, a form, or a task board, this component makes it simple to create modern, responsive interfaces.
theme
object.Get started in just a few steps:
Install the package:
npm install bl-frame
Add to your Angular app:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BlFrameModule } from 'bl-frame';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, BlFrameModule],
bootstrap: [AppComponent],
})
export class AppModule {}
Set up Tailwind CSS: Follow the Tailwind CSS guide for Angular to add Tailwind to your project.
Add Font Awesome (for icons):
Include in your index.html
:
<script src="https://kit.fontawesome.com/your-kit-id.js" crossorigin="anonymous"></script>
Add CSS variable:
In your styles.css
:
:root {
--accent-color: #0d9488;
}
Use in your template:
<bl-frame layoutStyle="grid" title="My Grid">
<div grid-view-content>
<div class="p-4 bg-white rounded shadow">Item 1</div>
<div class="p-4 bg-white rounded shadow">Item 2</div>
</div>
</bl-frame>
Here’s a simple breakdown of the 14 layouts you can use, what they’re for, and how to add content:
<div grid-view-content>
.<div grid-view-content>
.<div create-view-content>
.<div create-view-content>
.<ng-template tabContent tabName="Tab Name">
.<div tab-view-content>
.<div grid-view-content>
.<ng-template wizardStep stepIndex="0">
.<div left-pane>
and <div right-pane>
.<div timeline-item>
.<div kanban-column>
.<div stat-card>
.<div accordion-item>
.<div wizard-step-content>
.You can tweak the look and feel using these inputs:
layoutStyle
(string): Choose the layout type (e.g., grid
, tabbed
). Default: grid
.theme
(object): Customize colors, sizes, and effects:
themeColor
: Background color (default: #f9fafb
).themeTextColor
: Text color (default: #1f2937
).cardBackgroundColor
: Card background (default: #ffffff
).themeAccentColor
: Highlight color (default: #0d9488
).borderRadius
: Corner roundness (default: 0.5rem
).gridShadow
: Shadow effect (default: 0 4px 6px rgba(0, 0, 0, 0.1)
).showShadow
: Show/hide shadow (default: true
).minHeight
: Minimum height (default: 400px
).maxHeight
: Maximum height (optional).containerHeight
: Container height (default: 100%
).containerWidth
: Container width (default: 100%
).transition
: Animation effect (default: all 0.3s ease
).title
(string): Title for the layout header (default: ''
).tabs
(string[]): Names for tabs in tabbed
or sidebar
layouts (default: ['Tab 1', 'Tab 2', 'Tab 3']
).wizardSteps
(string[]): Names for steps in wizard
or form-wizard
layouts (default: ['Step 1', 'Step 2', 'Step 3']
).currentStepIndex
(number): Current step in wizards (default: 0
).containerWidth
(string): Overrides theme.containerWidth
(default: 100%
).containerHeight
(string): Overrides theme.containerHeight
(default: auto
).minHeight
(string): Overrides theme.minHeight
(default: 400px
).showShadow
(boolean): Overrides theme.showShadow
(default: true
).createClicked
: Triggered when the create button is clicked (grid
, small
).backClicked
: Triggered when the close button is clicked (modal
).<bl-frame layoutStyle="grid" title="My Grid" [theme]="{ minHeight: '600px' }">
<div grid-view-content>
<div class="p-4 bg-white rounded shadow">Item 1</div>
<div class="p-4 bg-white rounded shadow">Item 2</div>
</div>
</bl-frame>
<bl-frame layoutStyle="small" title="Small Layout">
<div grid-view-content>
<div class="p-4 bg-white rounded shadow">Single Item</div>
</div>
</bl-frame>
<bl-frame layoutStyle="modal" title="Modal Example">
<div create-view-content>
<p>Modal content goes here.</p>
<button>Submit</button>
</div>
</bl-frame>
<bl-frame layoutStyle="tabbed" title="Tabbed Layout" [tabs]="['Profile', 'Settings']">
<ng-template tabContent tabName="Profile">
<div class="p-4">Profile details.</div>
</ng-template>
<ng-template tabContent tabName="Settings">
<div class="p-4">Settings options.</div>
</ng-template>
</bl-frame>
<bl-frame layoutStyle="sidebar" title="Sidebar Example" [tabs]="['Home', 'Profile']">
<div tab-view-content>
<div class="p-4">Content for selected tab.</div>
</div>
</bl-frame>
<bl-frame layoutStyle="card-stack" title="Card Stack">
<div grid-view-content>
<div class="p-4 bg-white rounded shadow">Card 1</div>
<div class="p-4 bg-white rounded shadow">Card 2</div>
</div>
</bl-frame>
<bl-frame layoutStyle="wizard" title="Wizard Example" [wizardSteps]="['Personal', 'Contact', 'Review']">
<ng-template wizardStep stepIndex="0">
<div class="p-4">Enter personal info.</div>
</ng-template>
<ng-template wizardStep stepIndex="1">
<div class="p-4">Enter contact info.</div>
</ng-template>
<ng-template wizardStep stepIndex="2">
<div class="p-4">Review your info.</div>
</ng-template>
</bl-frame>
<bl-frame layoutStyle="split-pane" title="Split Pane">
<div left-pane>
<p>Left side content.</p>
</div>
<div right-pane>
<p>Right side content.</p>
</div>
</bl-frame>
<bl-frame layoutStyle="timeline" title="Timeline">
<div timeline-item>
<div class="p-4 bg-white rounded shadow">Event 1</div>
<div class="p-4 bg-white rounded shadow">Event 2</div>
</div>
</bl-frame>
<bl-frame layoutStyle="kanban" title="Kanban Board">
<div kanban-column>
<div class="p-4 bg-white rounded shadow">To Do</div>
<div class="p-4 bg-white rounded shadow">In Progress</div>
</div>
</bl-frame>
<bl-frame layoutStyle="dashboard" title="Dashboard">
<div stat-card>
<div class="p-4 bg-white rounded shadow">Stat 1</div>
<div class="p-4 bg-white rounded shadow">Stat 2</div>
</div>
</bl-frame>
<bl-frame layoutStyle="accordion" title="Accordion">
<div accordion-item>
<div class="p-4 bg-white rounded shadow">Section 1</div>
<div class="p-4 bg-white rounded shadow">Section 2</div>
</div>
</bl-frame>
<bl-frame layoutStyle="form-wizard" title="Form Wizard" [wizardSteps]="['Step 1', 'Step 2']">
<div wizard-step-content>
<div class="p-4">Content for the current step.</div>
</div>
</bl-frame>
fa-circle-plus
and fa-xmark
.We’d love your help to make BlFrameComponent
better! Here’s how to contribute:
git checkout -b feature/your-feature
.git commit -m 'Add your feature'
.git push origin feature/your-feature
.Please follow the Angular style guide and add tests if possible.
Found a bug or want a new feature? Create an issue on GitHub.
This project is licensed under the LEEWAY.
FAQs
A flexible Angular component library for creating responsive layouts like grids, tabs, wizards, and more, styled with Tailwind CSS.
The npm package bl-frame receives a total of 2 weekly downloads. As such, bl-frame popularity was classified as not popular.
We found that bl-frame demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.