Every export
Each name the 11 packages export, read from their entry points. Type a name, or filter by kind.
96 exports11 packagesLast release 2026-10-04
/
Nothing pending
Nothing merged since the last release. A change merged into main shows here, in its author’s words, until it ships.
Every export, grouped by package, newest release first
@adrienlcp/i18n
Newest releaseA typed i18n library in five files, with no dependencies, built on Intl0.3.02026-10-0424 exportsDictionaryLoaderA dictionary the bundler is told to split out —() => import('./fr').@adrienlcp/Typei18n I18n@adrienlcp/Typei18n createI18nBinds every locale to its dictionary once, so that afterwards a locale is all anyone passes.@adrienlcp/Functioni18n PluralFormsA placeholder written{name}is text and takes a string.@adrienlcp/Typei18n RelativeTimeIntl.RelativeTimeFormatformats a number of something, and the message cannot say which — so the unit is declared here, per placeholder, and the caller passes the count alone.@adrienlcp/Typei18n TranslationOptions@adrienlcp/Typei18n OptionsFor@adrienlcp/Typei18n DefinedTranslation@adrienlcp/Typei18n defineTranslationPairs a message with what its placeholders need beyond the value itself.@adrienlcp/Functioni18n DictionaryA tree of messages for one locale: every leaf is a sentence, every branch a namespace.@adrienlcp/Typei18n WellFormedA bare string is enough until a placeholder needs alternatives to choose between — and{n:plural}or{n:enum}written as one resolves toneverhere rather than putting the raw key on screen at runtime.@adrienlcp/Typei18n defineDictionaryThe reference dictionary — the one every key and every value is typed from.@adrienlcp/Functioni18n DictionaryForWhat a second locale owes the reference one: the same tree down to the same leaves, and for a leaf whose placeholders carry alternatives, its own alternatives in the same shape.@adrienlcp/Typei18n MatchingDictionaryWhat a second locale owes the reference beyond its shape: the same placeholders, in the same message.@adrienlcp/Typei18n DotPathEvery leaf, as the dotted path that reaches it.@adrienlcp/Typei18n LeafAt@adrienlcp/Typei18n FormattableDateWhat a{x:date}placeholder takes: aDate, or aTemporal.Instant,Temporal.PlainDate,Temporal.PlainDateTime,Temporal.PlainTimeorTemporal.ZonedDateTime, handed toIntl.DateTimeFormatas they are.@adrienlcp/Typei18n ValuesFor@adrienlcp/Typei18n RichValuesForWhat a rich rendering asks for: the message's values, plus one function per marked span.@adrienlcp/Typei18n PlainKeyA key whose message carries no placeholder, so it renders from nothing but itself.@adrienlcp/Typei18n ParameterizedKey@adrienlcp/Typei18n negotiateLocaleThe locale to open on, out of what the caller asked for.@adrienlcp/Functioni18n Translator@adrienlcp/Typei18n createTranslatorThe reference dictionary is the contract and every locale is an implementation of it, so the keys and their values are typed from the reference even when the strings being read are another language's.@adrienlcp/Functioni18n
@adrienlcp/react
Generic React helpers: a context that names its missing provider, and an element that finishes its exit transition before unmounting0.3.02026-10-035 exportsAnimateProps@adrienlcp/Typereact AnimateMounts and unmounts an element without cutting its exit short.@adrienlcp/Componentreact createSafeContext[Context, useSafeContext, useOptionalContext]for one value.@adrienlcp/Functionreact StaggerStyle@adrienlcp/Typereact staggerStyleHands an item its place in a list to its stylesheet, which turns it into a delay:calc(var(--stagger-index) * var(--transition-fast))on the way in,calc((var(--stagger-count) - 1 - var(--stagger-index)) * var(--transition-fast))to leave in reverse.@adrienlcp/Functionreact
@adrienlcp/react-router
react-aria links that navigate through react-router: a RouterProvider wired to useNavigate, external URLs left alone, NavigateOptions typed on every link0.1.12026-10-034 exportsAriaRouterProviderProps@adrienlcp/Typereact-router AriaRouterProviderreact-aria'sRouterProviderwired to react-router: anhrefon any react-ariaLink,MenuItemorListBoxItembelow it becomes a client-side navigation instead of a page load, itsrouterOptionsare forwarded tonavigate, and an external URL is left as it is.@adrienlcp/Componentreact-router ignoreSupersededNavigationA navigation superseded by the next one rejects withAbortError, more often with view transitions on: expected control flow, not a failure.@adrienlcp/Functionreact-router useRouterHrefreact-router'suseHref, except for an absolute URL, which comes back untouched:useHrefresolves every href against the current route, sohttps://example.comwould come out as/current/route/https:/example.com.@adrienlcp/Hookreact-router
@adrienlcp/styles
A reset, a reduced-motion switch, Sass mixins for self-hosted fonts, container queries and a breakpoint, and a WCAG contrast check for colour tokens0.5.02026-10-0315 exports$wide-screenWhere a screen stops being a phone's.@adrienlcp/Sassstyles/ breakpoints widewideandnarroware exact complements: every width is one or the other.@adrienlcp/Sassstyles/ breakpoints narrow@adrienlcp/Sassstyles/ breakpoints containerMakes the element a container its descendants query by inline size.@adrienlcp/Sassstyles/ containers container-wideMatches when the nearest container — or the one named — is at least$widthwide.@adrienlcp/Sassstyles/ containers container-narrowThe exact complement ofcontainer-widefor the same$widthand$name.@adrienlcp/Sassstyles/ containers WCAG_AAWCAG 2.2 level AA minimum contrast ratios.@adrienlcp/Constantstyles/ contrast ContrastPairTwo tokens that meet on screen, named as declared:{ foreground: '--ink', background: '--ground', minimum: WCAG_AA.text }.@adrienlcp/Typestyles/ contrast ContrastFailure@adrienlcp/Typestyles/ contrast findContrastFailuresEvery pair below its minimum, in either scheme, read straight from the stylesheet that declares the tokens.@adrienlcp/Functionstyles/ contrast $latinThe two subsets Google Fonts cuts a Latin face into: a page in English or French downloads the first file only.@adrienlcp/Sassstyles/ fonts $latin-ext@adrienlcp/Sassstyles/ fonts font-faceOne self-hostedwoff2file.@adrienlcp/Sassstyles/ fonts @adrienlcp/styles/ reduced-motion.css @adrienlcp/Filestyles/ reduced-motion.css @adrienlcp/styles/ reset.css @adrienlcp/Filestyles/ reset.css
@adrienlcp/biome-config
Biome lint and format settings: single quotes, no semicolons, sorted keys and imports, no floating promises0.1.02026-09-292 exports@adrienlcp/browser
Browser calls that hide a trap: a clipboard copy that works over plain HTTP, a wake lock that survives the tab going away, the reduced-motion preference0.1.12026-09-299 exportscopyTextCopiestextto the clipboard.@adrienlcp/Functionbrowser StopKeepingScreenAwakeStops holding the screen awake and releases the lock if it is held.@adrienlcp/Typebrowser keepScreenAwakeHolds the screen awake until the returned function is called, taking the lock again every time the document comes back into view: a browser releases it when the tab is hidden and never gives it back on its own.@adrienlcp/Functionbrowser REDUCED_MOTION_QUERY@adrienlcp/Constantbrowser prefersReducedMotionWhether the reader asked the system for less motion.@adrienlcp/Functionbrowser subscribeToReducedMotionCallslistenerwhenever the preference changes; returns the unsubscribe.@adrienlcp/Functionbrowser selectContentsSelects everything insidenode, so a reader can finish a refused copy with a keystroke.@adrienlcp/Functionbrowser usePrefersReducedMotionThe reduced-motion preference, re-rendering when the reader changes it.@adrienlcp/Hookbrowser/ react useScreenAwakeHolds the screen awake whileisWantedis true and the component is mounted.@adrienlcp/Hookbrowser/ react
@adrienlcp/react-aria
What every react-aria app of mine repeats: a className merge that follows the render state, and a Sass focus ring on data-focus-visible0.1.02026-09-297 exportsClassNameRenderPropsThe render state react-aria hands aclassNamefunction.@adrienlcp/Typereact-aria composeClassNameMerges a component's own class names with theclassNameits caller passed.@adrienlcp/Functionreact-aria $ring-widthConfigure once, in the app's own_focus.sass:@forward '@adrienlcp/react-aria/focus' with ($ring-color: var(--focus)).@adrienlcp/Sassreact-aria/ focus $ring-color@adrienlcp/Sassreact-aria/ focus $ring-offset@adrienlcp/Sassreact-aria/ focus ringreact-aria stampsdata-focus-visibleon keyboard focus only, and on the element it styles: a control built over a hidden input rings through it alone.@adrienlcp/Sassreact-aria/ focus ring-insetThe ring drawn inside the box, for an element a clipping ancestor would cut.@adrienlcp/Sassreact-aria/ focus
@adrienlcp/theme-preference
Light, dark or system theme with no flash on load, and a browser toolbar that follows the choice0.3.02026-09-2915 exportsTHEME_COLOR_SELECTOREach tag names the scheme it colours:<meta name="theme-color" data-scheme="dark">.@adrienlcp/Constanttheme-preference themeColorMediaForThemediaatheme-colortag of the given scheme must carry.@adrienlcp/Functiontheme-preference applyThemePreferenceStampsdata-themeon<html>for an explicit scheme, removes it for'system'so the stylesheet'sprefers-color-schemerules answer, and points everytheme-colortag at the same palette.@adrienlcp/Functiontheme-preference prePaintScriptForThe inline script that applies a stored explicit scheme before the first paint, so the page never flashes the system palette first.@adrienlcp/Functiontheme-preference COLOR_SCHEMES@adrienlcp/Constanttheme-preference ColorSchemeA palette the page can be painted in.@adrienlcp/Typetheme-preference THEME_PREFERENCES@adrienlcp/Constanttheme-preference ThemePreferenceWhat the visitor chose.@adrienlcp/Typetheme-preference isColorScheme@adrienlcp/Functiontheme-preference isThemePreference@adrienlcp/Functiontheme-preference ThemePreferenceStore@adrienlcp/Typetheme-preference createThemePreferenceStoreOne store per page, so every switch showing the theme reads the same choice.@adrienlcp/Functiontheme-preference @adrienlcp/theme-preference/ color-scheme.css @adrienlcp/Filetheme-preference/ color-scheme.css useThemePreferenceThe store's preference, re-rendering every component that shows it when it changes.@adrienlcp/Hooktheme-preference/ react themePreferencePluginAppends the pre-paint script to the<head>of every page Vite serves or builds, after thetheme-colortags.@adrienlcp/Functiontheme-preference/ vite
@adrienlcp/tsconfig
The strictest TypeScript settings, for a type-check-only project bundled by something else0.1.02026-09-292 exports@adrienlcp/result
A success-or-failure value with no exceptions and no nulls0.1.02 exports@adrienlcp/safe-storage
localStorage that never throws: every read, write and removal returns a Result, and typed reads check what they find0.1.011 exportsreadRecognizedTextThe text stored underkey, narrowed byisRecognized— a locale, a theme, any closed set of strings.@adrienlcp/Functionsafe-storage readStoredJsonThe JSON stored underkey, parsed and narrowed byisValue.@adrienlcp/Functionsafe-storage readStoredTextThe text stored underkey, ornullwhen nothing is: an absence, never a failure.@adrienlcp/Functionsafe-storage removeStoredRemoves whatever is stored underkey; a missing key is not a failure.@adrienlcp/Functionsafe-storage StorageUnavailablelocalStoragethrew on access: a Safari private window, storage blocked by the user or a policy, or nolocalStorageat all, as on a server.@adrienlcp/Typesafe-storage StoredValueUnrecognizedSomething is stored under the key, but not a value the caller recognizes.@adrienlcp/Typesafe-storage StorageQuotaExceededThe browser refused the write because the origin's storage is full.@adrienlcp/Typesafe-storage StorageReadError@adrienlcp/Typesafe-storage StorageWriteError@adrienlcp/Typesafe-storage writeStoredJsonStoresvalueas JSON underkey, refused likewriteStoredText.@adrienlcp/Functionsafe-storage writeStoredTextStorestextunderkey.@adrienlcp/Functionsafe-storage