
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@praxisui/list
Advanced tools
Para ver esta biblioteca em funcionamento em uma aplicação completa, utilize o projeto de exemplo (Quickstart):
@praxisui/* em um app Angular, incluindo instalação, configuração e uso em telas reais.Angular list/cards component for enterprise apps. Supports local or remote data, multiple layout variants, templating slots, actions, grouping and selection.
npm i @praxisui/list
Peers (install in your app):
@angular/core, @angular/common, @angular/material (Angular 16–20 compatible)rxjs (>=7 <9)@praxisui/core (icons, config storage, CRUD service)@praxisui/settings-panel (to open the in-app list configuration editor)import { Component } from '@angular/core';
import { PraxisList } from '@praxisui/list';
@Component({
selector: 'app-list-demo',
standalone: true,
imports: [PraxisList],
template: `
<praxis-list
[config]="config"
(itemClick)="onItem($event)"
(actionClick)="onAction($event)"
(selectionChange)="onSelection($event)"
/>
`,
})
export class ListDemoComponent {
config = {
id: 'products-list',
dataSource: { data: [
{ id: 1, name: 'Phone', price: 699, image: '/assets/phone.png', rating: 4.5 },
{ id: 2, name: 'Laptop', price: 1499, image: '/assets/laptop.png', rating: 4.8 },
] },
layout: { variant: 'list', lines: 2, dividers: 'between' },
selection: { mode: 'single', return: 'item', compareBy: 'id' },
templating: {
leading: { type: 'image', expr: '${item.image}', imageAlt: 'Product image' },
primary: { type: 'text', expr: '${item.name}' },
secondary: { type: 'currency', expr: '${item.price}|:USD' },
meta: { type: 'rating', expr: '${item.rating}' },
trailing: { type: 'chip', expr: 'In stock', color: 'primary' },
features: [
{ icon: 'grade', expr: '${item.rating}' },
],
},
actions: [
{ id: 'favorite', icon: 'favorite', label: 'Like' },
{ id: 'buy', icon: 'shopping_cart', kind: 'button', buttonVariant: 'stroked', label: 'Buy' },
],
} satisfies import('@praxisui/list').PraxisListConfig;
onItem(e: any) { console.log('itemClick', e); }
onAction(e: any) { console.log('actionClick', e); }
onSelection(e: any) { console.log('selectionChange', e); }
}
Provide dataSource.resourcePath to fetch data and (optionally) infer templating from backend schema.
<praxis-list [config]="{
id: 'employees',
dataSource: { resourcePath: 'employees', sort: ['name,asc'] },
layout: { variant: 'list', lines: 2, groupBy: 'department' },
templating: { primary: { type: 'text', expr: '${item.name}' } }
}"></praxis-list>
The component uses GenericCrudService from @praxisui/core when resourcePath is set. If no primary template is provided, it will try to infer templates using the backend schema once.
list (default): Material list with optional selection and dividers.cards: Card grid layout with the same templating slots.Layout options (config.layout):
lines: 1 | 2 | 3 controls visible text lines.dividers: 'none' | 'between' | 'all'.groupBy: string key to group items; section headers can be templated via templating.sectionHeader.pageSize, virtualScroll, density, model for advanced tuning.Every slot accepts a TemplateDef with type, expr, optional class and style.
leading: 'icon' | 'image' with optional badge.primary: 'text' | 'html' | 'date' | 'currency' | 'rating' | 'chip'.secondary: same as primary; shown when lines > 1.meta: small text or chip/rating rendered inline or on the side (metaPlacement).trailing: optional trailing text/chip.features: array of { icon?, expr } rendered below primary/secondary; control with featuresVisible and featuresMode ('icons+labels' | 'icons-only' | 'labels-only').Expressions use ${...} to read from item (e.g., ${item.name}). For currency, you may pass code/locale as |:USD or |:USD:en-US.
Configure contextual item actions via config.actions:
actions: [
{ id: 'edit', icon: 'edit', label: 'Edit' },
{ id: 'delete', icon: 'delete', color: 'warn', showIf: "${item.status} == 'active'" },
{ id: 'details', kind: 'button', buttonVariant: 'raised', label: 'Details' },
]
kind: 'icon' (default) or 'button'.showIf: simple equality check is supported (left side must be an ${...} expression).emitPayload: choose what the action emits ('item' | 'id' | 'value').Selection (config.selection):
mode: 'none' | 'single' | 'multiple'.compareBy: property used to track items.return: 'value' | 'item' | 'id' for selectionChange payload.FormControl via formControlName/formControlPath when using form.Outputs:
(itemClick): { item, index, section? }(actionClick): { actionId, item, index }(selectionChange): { mode, value, items, ids? }Apache-2.0 — see LICENSE in this package or the repository root.
FAQs
List components and helpers for Praxis UI.
The npm package @praxisui/list receives a total of 316 weekly downloads. As such, @praxisui/list popularity was classified as not popular.
We found that @praxisui/list 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.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.