ImporterState fields. There are also new,
fully opt-in features (see What’s new).
1. Namespaced CSS utility classes
What changed
HelloCSV is built with Tailwind CSS. Previously its utility classes (text-center,
bg-hello-csv-muted, etc.) used the same names Tailwind generates everywhere, so they
could clash with another CSS framework loaded on the same page — for example Bootstrap,
whose global .text-center overrode HelloCSV’s styles and broke the layout
(#262).
As of v0.6.0, every internal utility class is namespaced with an hc: prefix:
This makes HelloCSV’s styles collision-proof against any host CSS framework, without
resorting to
!important (which would have made the styles hard for you to override).
Do I need to do anything?
No changes needed if you:- Style the importer with the
themeprop. - Customize colors via the
--hello-csv-color-*CSS variables (see Theme Styles) — variable names are unchanged. - Only render the importer and let it style itself.
- Use your own Tailwind/CSS classes in your surrounding layout — your classes are untouched.
-
Reference HelloCSV’s internal utility classes in a
customRendercallback (or any custom cell/component) — for example checking or reusing the cell background classes. Add thehc:prefix:The classes a cell may carry are nowhc:bg-hello-csv-danger-extra-light(validation errors) andhc:bg-hello-csv-muted(read-only columns).
Notes
- The
hello-csvroot/scoping class is not prefixed — only Tailwind utility classes are. - CSS custom properties (
--hello-csv-color-*) are not prefixed and keep their names. - You do not need to configure a Tailwind prefix in your own project; HelloCSV ships pre-compiled CSS, so the prefix is entirely internal.
2. Renamed ImporterState processing fields
The async pass that runs after an edit now runs transformers and then validators (in
v0.5.0 transformation happened synchronously and only validation was async). To reflect
that it’s a combined “processing” pass, two transient ImporterState
fields were renamed:
validationErrors is unchanged. The internal reducer action types
VALIDATION_STARTED / VALIDATION_COMPLETED were likewise renamed to
PROCESSING_STARTED / PROCESSING_COMPLETED — only relevant if you dispatch importer
actions directly, which is uncommon.
Do I need to do anything?
No changes needed if you:- Only read
validationErrors(unchanged) or don’t inspect these fields at all. - Rely on persistence (IndexedDB).
No migration is required — these fields are transient and optional. A persisted
v0.5.0 state keeps its old keys harmlessly (nothing reads them), and the new fields
default to
undefined(falsy = “not running”), which is the correct resting state.
-
Read
state.validationInProgressorstate.validationRunIdinonStateChanged,onComplete, or a custom component (e.g. viauseImporterState). Rename the references:
What’s new
These are fully opt-in and require no changes to existing code:- Async transformers. A
customtransformFnmay now return aPromise(see Transformers). runOn: 'change' | 'submit'on any validator or transformer — defer slow/costly async work (e.g. an LLM call) to the submit pass instead of running it on every edit.maxConcurrentAsyncOperationsto cap how many async validator/transformer calls run at once.