skills/vendix-frontend-data-display/SKILL.md
Responsive data display patterns using TableComponent, ItemListComponent, and ResponsiveDataViewComponent. Trigger: When displaying lists of records, creating responsive admin tables, or configuring mobile card views.
npx skillsauth add rzyfront/vendix vendix-frontend-data-displayInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
TableColumn, TableAction, or ItemListCardConfig.Before implementing, check the component READMEs under apps/frontend/src/app/shared/components/{table,item-list,responsive-data-view}/ and then verify against the component source when an input matters.
| Need | Component |
| --- | --- |
| Desktop table only | TableComponent |
| Mobile card list only | ItemListComponent |
| Both desktop and mobile | ResponsiveDataViewComponent |
ResponsiveDataViewComponent is the default for admin lists. It renders app-table in hidden md:block and app-item-list in block md:hidden.
Required for useful output:
data: records.columns: TableColumn[] for desktop.cardConfig: required ItemListCardConfig for mobile.actions: optional TableAction[], shared across table and cards.loading: aliases to the component loading input.Also supported: tableSize, itemListSize, showHeader, striped, hoverable, bordered, compact, sortable, emptyMessage, emptyTitle, emptyDescription, emptyActionText, emptyActionIcon, showEmptyAction, showEmptyClearFilters, and showEmptyRefresh.
Outputs include sort, rowClick, actionClick, and empty-state action outputs.
<app-responsive-data-view
[data]="items()"
[columns]="columns"
[cardConfig]="cardConfig"
[actions]="actions"
[loading]="loading()"
[sortable]="true"
emptyMessage="No data available"
emptyIcon="inbox"
(sort)="onSort($event)"
(rowClick)="onRowClick($event)"
(actionClick)="onActionClick($event)"
/>
TableColumn supports key, label, sortable, width, align, template, transform, cellClass, cellStyle, defaultValue, badge, badgeConfig, priority, type, and badgeTransform.
TableAction supports label, icon, action, variant, disabled, show, and tooltip.
Action variants currently include primary, secondary, danger, ghost, success, warning, info, gaming, royal, muted, or a function returning a class/string.
Table responsive priority behavior:
priority >= 2 hides on mobile.priority >= 3 hides on tablet.ItemListCardConfig supports:
const cardConfig: ItemListCardConfig = {
titleKey: 'name',
titleTransform: (item) => item.name,
subtitleKey: 'sku',
subtitleTransform: (item) => item.brand,
avatarKey: 'image_url',
avatarFallbackIcon: 'package',
avatarShape: 'square',
badgeKey: 'state',
badgeConfig: { type: 'status', size: 'sm' },
badgeTransform: (value) => String(value),
detailKeys: [
{ key: 'sku', label: 'SKU', icon: 'barcode' },
{ key: 'stock', label: 'Stock', icon: 'boxes' },
],
footerKey: 'base_price',
footerLabel: 'Price',
footerStyle: 'prominent',
footerTransform: (value) => formatCurrency(value),
};
ItemListDetailField also supports infoIcon, infoIconTransform, infoIconVariant, and infoIconVariantTransform.
Current caveat: footerStyle exists in the interface and is used by module configs, but the current item-list template does not visibly branch on it. Do not promise special styling unless verified in the component SCSS/template.
more-horizontal dropdown.show and disabled may be booleans or item-aware functions depending on the action config.apps/frontend/src/app/private/modules/store/products/components/product-list/product-list.component.tsapps/frontend/src/app/private/modules/store/orders/components/orders-list/orders-list.component.tsapps/frontend/src/app/private/modules/store/settings/roles/components/store-roles-list.component.tsapps/frontend/src/app/shared/components/index.tsvendix-frontend-standard-module - Full admin list layoutvendix-frontend-icons - Icons used in actions, avatars, and detail fieldsvendix-date-timezone - Date transformsvendix-currency-formatting - Currency transformsdevelopment
Mobile app development rules for Vendix Expo/React Native project. Trigger: When editing, creating, or modifying any file under apps/mobile, or when developing mobile-specific features.
development
Feature gating by store subscription state: global store write guard, AI feature gate, Redis feature resolution, quota consumption, frontend paywall interceptor, banner, and subscription UI states. Trigger: When adding feature gates, paywalls, subscription-based access control, protecting store write operations, AI feature gates, or rollout flags.
testing
SaaS subscription billing for Vendix stores: plan pricing, invoices, Wompi platform payments, manual payments, partner commissions, payouts, proration, and dunning. Trigger: When creating SaaS invoices, working with partner rev-share, margin/surcharge pricing, invoice sequence allocation, partner payout batches, subscription payments, manual payments, or dunning flows.
development
Periodic quota counters with Redis, UTC period keys, Lua-based idempotent AI quota consumption, request-id deduplication, and post-success consumption. Trigger: When building quota counters, enforcing monthly/daily feature caps, or reusing AI quota patterns for uploads, emails, exports, or rate-limited features.