@elmenov-softworks/typographist-vue

Vue Composition API provider, leaf text component and composable for typography and soft hyphenation.
172
Install
npm install @elmenov-softworks/typographist-vue
Latest Version:1.0.2
Vue:3
License:MIT
Last Updated:Oct 22, 2026
Links: GitHub  ·  npm
Maintainer: elmenov

Typographist for Vue

For package selection and display-text integration, see the agent guide.

Components use Vue SFCs with <script setup lang="ts"> and type-based props.

Use the nearest provider to share a prepared core formatter and its bounded word cache. Each provider owns its own instance, including nested providers and separate server requests. Nested configuration is complete; it does not merge with an outer provider.

<script setup lang="ts">
import { ref, shallowRef } from 'vue';
import type { TypographistConfig } from '@elmenov-softworks/typographist';
import { TypographistProvider, TypographistText } from '@elmenov-softworks/typographist-vue';

const config = shallowRef<TypographistConfig>({
  locale: 'en',
  categories: ['quotes', 'nonbreakingSpacing'],
  cacheSize: 64,
});
const source = ref('"Hello"');
</script>

<template>
  <TypographistProvider :config="config">
    <TypographistText :text="source" />
    <TypographistText :text="source" locale="ru" />
  </TypographistProvider>
</template>

TypographistProvider accepts optional config: TypographistConfig<string> and a default slot. The public core configuration accepts custom locale definitions and their locale names. Omitted configuration uses core defaults. TypographistText accepts required text: string and optional locale: string and disabled: boolean (default false). It renders text without a wrapper and never interprets HTML-like strings.

Inside a descendant's setup, the hook has this signature:

useTypographist(
  text: MaybeRefOrGetter<string>,
  locale?: MaybeRefOrGetter<string | undefined>,
  disabled?: MaybeRefOrGetter<boolean>,
): ComputedRef<string>

The returned computed ref is read-only. Pass a ref or getter for changing inputs; a plain string is a fixed input. Keep the original source text:

const formatted = useTypographist(
  () => props.text,
  () => props.locale,
);
// Read formatted.value in script, or formatted in a template.

A missing provider throws. Locale overrides apply only to that consumer. Unknown locales throw by default. Set provider configuration unsupportedLocale: 'preserve' to keep text unchanged for unregistered explicit or default locales. The core hasLocale(locale) method reports whether rules are registered. Invalid configuration and malformed locales retain core errors. Soft hyphens, Unicode, protected content and empty strings retain core behavior.

Replace configuration immutably. Use shallowRef for configuration to preserve plugin identity and class instances rather than deeply proxying them. Scalars, primitive array contents and primitive rule settings compare by value. New equivalent array containers do not require stable identity. Custom plugins, locale definitions and callbacks compare by identity; replace their identity to request an update. Mutating plugin internals is not tracked. Supported explicit defaults compare equally to omitted defaults.

A meaningful configuration change prepares a replacement instance before publishing it and resets that provider's word cache. Failed preparation does not replace the previous valid instance. Ordinary parent updates retain the instance and cache. Each consumer memoizes its current derivation synchronously; unchanged inputs do not repeat formatting. A text change does not invalidate other consumers. Vue can still execute application renders for unrelated reasons.

Native Vue server rendering and hydration need no browser globals during import or server rendering. Use equal source text and configuration on server and client for equal initial text. No mutable service is shared between roots.

See the core documentation for formatting categories, configuration defaults and text-processing limits.

Set disabled to render the current source unchanged and skip locale lookup. The provider is still required. Refs and getters support enable/disable transitions:

<TypographistText :text="source" :disabled="disabled" />
const disabled = ref(false);
const formatted = useTypographist(source, () => props.locale, disabled);
const config = shallowRef({ locale: 'ja', unsupportedLocale: 'preserve' as const });

Related Packages

@composy/i18n-vue

Vue 3 integration for @composy/i18n-core - Powerful i18n solution with compositi...

0
@comvi/vue

Vue 3 integration for Comvi — composables, components, and type-safe translation...

2,098 2
v-emoji-picker

This simple package using Emojis Natives

371,363 363
@byjohann/vue-i18n

Lightweight internationalization plugin for Vue

8,721 7
vue-emoji-picker-custom

This simple package using Emojis Natives

1,525

Version History

Version Released Vue License
1.0.2 ^3.5.43 MIT
1.0.1 ^3.5.43 MIT
1.0.0 ^3.5.43 MIT
0.1.0 ^3.5.43 MIT
Pre-releases (1)
Version Released License
0.0.0-stage