Every export
Each name the 11 packages export, read from their entry points. Type a name, or filter by kind.
106 exports11 packagesLast release 2026-10-05
- biome-configPatch
Point each package homepage to its entry on adrienlcp.com
- browserPatch
Point each package homepage to its entry on adrienlcp.com
- i18nPatch
Keep Web Dev Simplified's copyright notice in the license, as its MIT license requires
- i18nPatch
Point each package homepage to its entry on adrienlcp.com
- stylesPatch
Point each package homepage to its entry on adrienlcp.com
- reactPatch
Point each package homepage to its entry on adrienlcp.com
- react-routerPatch
Point each package homepage to its entry on adrienlcp.com
- react-ariaPatch
Point each package homepage to its entry on adrienlcp.com
- theme-preferencePatch
Point each package homepage to its entry on adrienlcp.com
- tsconfigPatch
Point each package homepage to its entry on adrienlcp.com
- resultPatch
Point each package homepage to its entry on adrienlcp.com
- safe-storagePatch
Point each package homepage to its entry on adrienlcp.com
Every export, grouped by package, newest release first
@adrienlcp/biome-config
Newest releaseBiome lint and format settings: single quotes, no semicolons, sorted keys and imports, no floating promises0.2.02026-10-052 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.2.02026-10-0510 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 reloadPageReloads the page, the way out a crash screen offers.@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/i18n
A typed i18n library in five files, with no dependencies, built on Intl0.5.02026-10-0528 exportsDictionaryLoaderContextWhat a loader is handed: a signal aborted once no caller wants the dictionary any more.@adrienlcp/Typei18n DictionaryLoaderA dictionary the bundler is told to split out —() => import('./fr').@adrienlcp/Typei18n LoadOptionsWhatloadtakes beside the locale.@adrienlcp/Typei18n isAbortErrorWhether a rejection is an abort — a supersededload— rather than a failure: expected control flow, never something to show the reader.@adrienlcp/Functioni18n 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 FormatLocaleWhere numbers and numeric dates take their shape from — the decimal separator, the hour cycle, the order of day and month.@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/styles
A reset, a reduced-motion switch, default tokens, Sass mixins for self-hosted fonts, container queries, a breakpoint, focus rings, visually hidden text and a two-column spread, and a WCAG contrast check for colour tokens0.6.02026-10-0520 exportsvisually-hiddenHidden from sight, still read aloud: a label the layout says without words, a column header a table needs for a screen reader only.@adrienlcp/Sassstyles/ accessibility ringThe focus ring from the--ringtokens, drawn on keyboard focus only.@adrienlcp/Sassstyles/ accessibility ring-insetThe ring drawn inside the box, for a control that fills its row edge to edge or sits in an ancestor that clips.@adrienlcp/Sassstyles/ accessibility $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 columnsA page of two columns,.columnsholding two.columns: stacked and ruled apart underbreakpoints.wide, side by side above it with the rule between them.@adrienlcp/Sassstyles/ spread defaultsThe tokens every app names the same way, at values that hold until the app sets its own.@adrienlcp/Sassstyles/ tokens
@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/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