npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@khester/dynamics-cell-renderers

v1.1.2

Published

Cell renderer components for Dynamics 365 grids: text, currency, date, lookup, optionset, progress, and editable variants

Readme

@khester/dynamics-cell-renderers

React cell renderer components for Dynamics 365 grids — read-only and editable renderers for common Dataverse field types (text, link, currency, date, number, optionset, toggle, icon, progress, rating, lookup, composite).

What it does

Provides a set of small, focused Fluent UI v8 components that render a single grid cell for a given field type. Each read-only renderer (e.g. CurrencyCell, DateCell, OptionSetCell, LookupCell) takes a shared CellRendererProps<T> shape — item, column, value, itemKey — and formats the value via @khester/dynamics-utils, honoring per-column options on IReusableColumn<T> (currency code, locale, color maps, progress max, rating style, etc.). Editable variants (EditableTextCell, EditableNumberCell, EditableDateCell, EditableOptionSetCell, EditableLookupCell, EditableRatingCell) add in-cell editing with dirty/error indicators and validation callbacks. The package also exports the column/cell type definitions and the CSS-in-JS style classes the renderers use.

When to use it

Reach for this package when you need the leaf-level cell rendering for a Dynamics grid, or when you are authoring a new cell renderer — new renderers go here. In practice you rarely import these directly: @dataverse-kit/grid-kit wraps these renderers behind its registry-driven DataGrid/detail-list hosts, so use grid-kit when you want a whole grid. Use @dataverse-kit/surface-kit for form shells/containers and @khester/reusable-components for custom-page controls. Import this package directly when you're building a custom grid host or extending the renderer set.

Install

npm install @khester/dynamics-cell-renderers

Peer dependencies (not bundled): react / react-dom (>=17) and @fluentui/react (^8). Formatting/color utilities come from @khester/dynamics-utils.

Minimal example

import { CurrencyCell, EditableTextCell } from '@khester/dynamics-cell-renderers';
import type { IReusableColumn } from '@khester/dynamics-cell-renderers';

type Row = { key: string; name: string; revenue: number };
const row: Row = { key: 'a1', name: 'Contoso', revenue: 1500000 };

const revenueColumn: IReusableColumn<Row> = {
  key: 'revenue',
  name: 'Revenue',
  fieldName: 'revenue',
  minWidth: 120,
  fieldType: 'currency',
  currencyCode: 'USD',
  locale: 'en-US',
};

// Read-only currency cell
<CurrencyCell item={row} column={revenueColumn} value={row.revenue} itemKey={row.key} />;

// Editable text cell with dirty/validation tracking
<EditableTextCell
  item={row}
  column={{ key: 'name', name: 'Name', fieldName: 'name', minWidth: 160, fieldType: 'text' }}
  value={row.name}
  itemKey={row.key}
  isEditMode
  isDirty={false}
  onValueChange={(rowKey, field, next, original) => console.log(rowKey, field, next, original)}
/>;

Key exports

| Export | Purpose | |--------|---------| | TextCell / LinkCell / NumberCell | Read-only text, hyperlink, and numeric cell renderers | | CurrencyCell / DateCell | Locale-aware currency and date renderers | | OptionSetCell / ToggleCell / ColoredCell | OptionSet badge, two-option toggle, and color-mapped cells | | IconCell / ProgressBarCell / RatingCell | Icon button, progress bar, and star/emoji rating renderers | | LookupCell / CompositeCell | Lookup display (with navigation) and multi-slot composite renderer | | EditableTextCell / EditableNumberCell / EditableDateCell | Inline-editable text, number, and date cells with dirty/error state | | EditableOptionSetCell / EditableLookupCell / EditableRatingCell | Inline-editable optionset dropdown, lookup search, and rating cells | | CellRendererProps / IReusableColumn / ListFieldType | Core types: shared cell props, extended column config, and field-type union | | cellClass, currencyCellClass, getDetailsListStyles, … | CSS-in-JS style classes shared by the renderers and host grids |