Power Apps Component Framework (PCF) controls for Dynamics 365 / Dataverse model-driven apps, one folder per control, each with its own build, tests and README. They are generic rewrites of controls built for a production Dynamics 365 implementation, with neutral names and sample data.
A cascading address picker for plain text columns: country, then city, district and neighbourhood, one instance per column, each level offering only what fits the level above. Search folds Turkish dotted and dotless I correctly and ranks prefix matches first; the place lists load lazily from JSON web resources. When a parent changes, it clears a child only if it set that child itself. See the AddressPicker README.
An address book with an approval step, built on customeraddress, in three controls that share one core and no UI framework. The book lists, adds and edits an account's addresses with a state (Draft, Pending, Approved, Denied) and submits them for approval; on an order form the same control picks one approved address. The split-shipment grid divides each order line's quantity across approved addresses; the unassigned remainder is derived, so over-assigning can't be typed. The approval panel lets an approver approve or deny with a reason, returned through bound outputs and saved with the form. An unsaved customer change can switch the addresses on offer, through a Lookup.Customer binding that Microsoft Learn lists as not currently supported (its README says what that rests on). See the AddressBook README.
A read-only manager panel over a view of hold events (placed, extended, moved, released, cancelled, converted). It turns the stream into four signals: low conversion per user, holds cancelled and placed again on the same record, old holds kept open by repeated extensions, and late moves that never converted. It also draws a hand-made SVG map of who moves holds to whom, pairing the two rows of each move, and a heatmap of open holds by age. The detectors, pairing, map geometry and buckets are pure, tested functions; colours follow the host's text colour and every cue has a text label. See the HoldSignalsPanel README.
A landing screen for a sales rep, drawn in place of a custom table's home grid: a dataset control that never reads its dataset and asks for everything through the Web API. Five work-queue cards over lead, opportunity, quote, order and account take their columns from the org's saved views, and a test fails if a card's OData filter drifts from a FetchXML snapshot of its view. Each user's card order is saved in a Dataverse row. A goal planner writes standard Goal records a few at a time and calls the bound Recalculate action, on a standard or a 4-4-5 fiscal calendar chosen by configuration. See the SalesDesk README.
Each control builds on its own. There is no root package.
cd AddressPicker # or AddressBook, HoldSignalsPanel, SalesDesk
npm ci
npm run build
npm testNode 22 or later. Packaging into a solution and importing it is environment-specific and not included.
Builds and unit tests run offline. Nothing here was run against a live Dataverse org.
kh_ is the publisher prefix used for every custom table, column and web resource name in these controls' defaults and examples, for example kh_addresspicker/provinces.json and kh_address1_neighbourhood. Use your own publisher's prefix. The controls' namespace is PCFControls.
MIT, see LICENSE. It covers the code and the sample data.