Skip to content

NpmCard ​

Compound card component for npm packages. Use subcomponents to build custom npm package cards with full control over layout and styling.

Installation ​

bash
npx @manningworks/projex add npm-card

Import ​

tsx
import { NpmCard } from '@manningworks/projex'

Usage ​

Basic Usage ​

tsx
<NpmCard>
  <NpmCard.Header project={project} />
  <NpmCard.Description project={project} />
  <NpmCard.Stats project={project} />
  <NpmCard.Status project={project} />
  <NpmCard.Links project={project} />
</NpmCard>

Hide Version ​

tsx
<NpmCard>
  <NpmCard.Header project={project} />
  <NpmCard.Description project={project} />
  <NpmCard.Stats project={project} showVersion={false} />
  <NpmCard.Status project={project} />
  <NpmCard.Links project={project} />
</NpmCard>
tsx
<NpmCard>
  <NpmCard.Header project={project} />
  <NpmCard.Description project={project} />
  <NpmCard.Stats project={project} />
  <NpmCard.Status project={project} />
  <NpmCard.Links project={project} />
  <NpmCard.Footer>
    <div className="mt-4">
      <button>Read Documentation</button>
    </div>
  </NpmCard.Footer>
</NpmCard>

Props ​

NpmCard (Root) ​

PropTypeRequiredDefaultDescription
childrenReact.ReactNodeNo-Card subcomponents (Header, Description, Stats, Status, Links, Footer)

NpmCard.Header ​

PropTypeRequiredDescription
projectProjexProjectYesProject data to display

NpmCard.Description ​

PropTypeRequiredDescription
projectProjexProjectYesProject data to display

Returns null if project.description is empty.

NpmCard.Tags ​

PropTypeRequiredDescription
projectProjexProjectYesProject data to display

Returns null if project.stack is empty.

NpmCard.Stats ​

PropTypeRequiredDefaultDescription
projectProjexProjectYes-Project data to display
showVersionbooleanNotrueWhether to display version string

Returns null if no stats are available.

NpmCard.Status ​

PropTypeRequiredDescription
projectProjexProjectYesProject data to display
PropTypeRequiredDescription
projectProjexProjectYesProject data to display

Returns null if no links are available.

PropTypeRequiredDescription
childrenReact.ReactNodeNoContent to render in footer

Returns null if no children are provided.

Data Attributes ​

AttributeValueDescription
data-projex-card-Root card container
data-projex-card-header-Header section
data-projex-card-description-Description section
data-projex-card-tags-Tags container
data-projex-card-stats-Stats container
data-projex-card-footer-Footer content container
data-projex-status-Status badge
data-projex-status-valueactive | shipped | ...Current status
data-projex-tag-Individual tag
data-projex-link-Link element
data-projex-link-typenpm | github | docsLink type
data-projex-statdownloads | versionStat type
data-projex-stat-icondownloadsStat icon indicator

Example ​

tsx
import { NpmCard } from '@manningworks/projex'

function NpmPackages({ projects }) {
  return (
    <div className="grid grid-cols-3 gap-4">
      {projects
        .filter((p) => p.type === 'npm' || p.type === 'hybrid')
        .map((project) => (
          <NpmCard key={project.id}>
            <NpmCard.Header project={project} />
            <NpmCard.Description project={project} />
            <NpmCard.Stats project={project} />
            <NpmCard.Status project={project} />
            <NpmCard.Links project={project} />
          </NpmCard>
        ))}
    </div>
  )
}

Customization ​

NpmCard is copied to your project and can be freely modified to customize card structure and behavior:

tsx
// components/projex/NpmCard/NpmCard.tsx
function NpmCard({ children }: { children?: ReactNode }) {
  // Your customizations here
}