Revert "refactor(soma/eidos): migrate 4 service components from Eidos to Soma"

This reverts commit 540abee026.
active-uix
dev 5 months ago
parent 540abee026
commit cd2c0326dc

@ -1,4 +1,4 @@
# Soma FormatDate
# Eidos FormatDate
`<FormatDate>` es un **service component** — un wrapper greppable de
`getActiveUix().format.dates.formatDate / formatTime / formatDateTime`.
@ -10,10 +10,6 @@ Familia con `<Trans>`, `<FormatNumber>`, `<RelativeTime>`: todos son
wrappers tipados del runtime para que un audit i18n/l10n encuentre cada
sitio de formateo con `grep "<FormatDate"`.
Vive en `soma/components/` (no `eidos/components/`) porque es una pieza
de comportamiento alrededor de `getActiveUix()`. La invariante "Eidos no
importa runtime" se preserva sacando los 4 service components a Soma.
## Superficie
```svelte
@ -61,7 +57,7 @@ importa runtime" se preserva sacando los 4 service components a Soma.
`as="span"`, el `datetime` se aplica al span (validado por Svelte) pero
pierde la semantica nativa.
- **No CSS recipe**: el marker `[data-format-date]` existe solo para
tooling — no hay estilos a nivel de soma porque el output es texto
tooling — no hay estilos a nivel de eidos porque el output es texto
puro.
- **No emite eventos sema**: no es una acto perceptivo del usuario.
@ -87,7 +83,7 @@ Si quieres mostrar timezone label (`timeZoneName`), usa per-axis:
## Comparativa
| Capacidad | Soma | date-fns | Day.js | luxon | Intl.DateTimeFormat |
| Capacidad | Eidos | date-fns | Day.js | luxon | Intl.DateTimeFormat |
| --- | --- | --- | --- | --- | --- |
| Modo `date`/`time`/`dateTime` | Si | Manual via format strings | Manual | Si (`toLocaleString`) | Manual |
| Locale reactivo desde runtime | Si | No | No | No | No |

@ -1,6 +1,6 @@
<script lang="ts">
/**
* Soma `<FormatDate>` — service component wrapping the active
* Eidos `<FormatDate>` — service component wrapping the active
* dates runtime (`uix.format.dates.formatDate / formatTime /
* formatDateTime`). Renders as `<time datetime="...">` by default
* so screen readers and search engines can parse the original
@ -9,14 +9,9 @@
* <FormatDate value={post.publishedAt} dateStyle="medium" />
* <FormatDate value={meeting.startsAt} mode="dateTime" dateStyle="short" timeStyle="short" />
* <FormatDate value={createdAt} mode="time" timeZone="UTC" timeZoneName="short" />
*
* Lives in Soma (not Eidos) because it is a behavior component
* around `getActiveUix().format`, not a visual primitive. Eidos
* remains a pure visual layer; service components like this one
* own the runtime access.
*/
import { getActiveUix } from '$active-uix';
import type { FormatDateInput, FormatDateProps } from '../types';
import type { FormatDateInput, FormatDateProps } from './types';
let {
value = null,
@ -95,7 +90,7 @@
return dates.formatDate(parsed, options, locale);
}
// No runtime available (e.g. soma used outside `<UixApp>`).
// No runtime available (e.g. eidos used outside `<UixApp>`).
// Replicate the engine's default-preset logic locally so `mode`
// is still honoured. Defaults are skipped when the caller
// already passed a conflicting per-axis field or `timeZoneName`

@ -0,0 +1,20 @@
// FormatDate — service component wrapping uix.format.dates.
//
// import { FormatDate } from '$uix/eidos/components/format-date';
//
// <FormatDate value={post.publishedAt} dateStyle="medium" />
// <FormatDate value={meeting.startsAt} mode="dateTime" />
// <FormatDate value={now} mode="time" timeZoneName="short" />
//
// Renders as <time datetime="..."> for semantic ISO 8601 access.
import FormatDate from './format-date.svelte';
export { FormatDate };
export default FormatDate;
export type {
FormatDateProps,
FormatDateInput,
FormatDateMode,
FormatDateStyle,
FormatTimeStyle
} from './types';

@ -1,4 +1,4 @@
# Soma FormatNumber
# Eidos FormatNumber
`<FormatNumber>` es un **service component** — un wrapper greppable de
`getActiveUix().format.numbers`. Renderiza un numero a traves del
@ -7,10 +7,6 @@ preferencias de moneda / sistema de unidades).
Familia con `<Trans>`, `<FormatDate>`, `<RelativeTime>`.
Vive en `soma/components/` (no `eidos/components/`) porque es una pieza
de comportamiento alrededor de `getActiveUix()`. La invariante "Eidos no
importa runtime" se preserva sacando los 4 service components a Soma.
## Superficie
```svelte
@ -66,7 +62,7 @@ importa runtime" se preserva sacando los 4 service components a Soma.
## Comparativa
| Capacidad | Soma | numbro | accounting.js | Intl.NumberFormat |
| Capacidad | Eidos | numbro | accounting.js | Intl.NumberFormat |
| --- | --- | --- | --- | --- |
| Locale reactivo desde runtime | Si | No | No | No |
| Cache de instancias por options | Si | No | No | No |

@ -1,6 +1,6 @@
<script lang="ts">
/**
* Soma `<FormatNumber>` — service component wrapping
* Eidos `<FormatNumber>` — service component wrapping
* `getActiveUix().format.numbers.format(...)` so consumers can
* type-safe their locale-aware number rendering without inlining
* the runtime call on every site.
@ -16,14 +16,9 @@
* Reactive to locale + currency + preference changes — the runtime
* already exposes those signals, this component just observes them
* via `$derived`.
*
* Lives in Soma (not Eidos) because it is a behavior component
* around `getActiveUix().format`, not a visual primitive. Eidos
* remains a pure visual layer; service components like this one
* own the runtime access.
*/
import { getActiveUix } from '$active-uix';
import type { FormatNumberProps } from '../types';
import type { FormatNumberProps } from './types';
let {
value = null,
@ -95,7 +90,7 @@
return numbers.format(inputValue, options, locale);
}
// No runtime available (e.g. soma used outside `<UixApp>`).
// No runtime available (e.g. eidos used outside `<UixApp>`).
return new Intl.NumberFormat(locale ?? undefined, options).format(inputValue);
});
</script>

@ -1,6 +1,6 @@
// FormatNumber — service component wrapping uix.format.numbers.
//
// import { FormatNumber } from '$soma/components/format-number';
// import { FormatNumber } from '$uix/eidos/components/format-number';
//
// <FormatNumber value={1234567} />
// <FormatNumber value={42.5} formatStyle="percent" valueAsPercent />
@ -10,14 +10,10 @@
// Same family as <Trans>: no CSS recipe, no behaviour, just a typed
// wrapper around the active runtime API. Reactive to locale and
// currency preference changes.
//
// Lives under `soma/` (not `eidos/`) because the component owns runtime
// access. Eidos invariant — "no `getActiveUix()` imports" — is enforced
// across the visual layer; service components like `Trans` /
// `FormatDate` / `FormatNumber` / `RelativeTime` are their Soma-side peers.
export { default as FormatNumber } from './components/format-number.svelte';
export { default as Provider } from './components/format-number.svelte';
import FormatNumber from './format-number.svelte';
export { FormatNumber };
export default FormatNumber;
export type {
FormatNumberProps,
FormatNumberStyle,

@ -1,4 +1,4 @@
# Soma RelativeTime
# Eidos RelativeTime
`<RelativeTime>` es un **service component** que envuelve
`Intl.RelativeTimeFormat` con auto-refresh tick. Renderiza frases
@ -7,10 +7,6 @@ cuando pasa el tiempo.
Familia con `<Trans>`, `<FormatDate>`, `<FormatNumber>`.
Vive en `soma/components/` (no `eidos/components/`) porque es una pieza
de comportamiento alrededor de `getActiveUix()`. La invariante "Eidos no
importa runtime" se preserva sacando los 4 service components a Soma.
## Superficie
```svelte
@ -62,7 +58,7 @@ importa runtime" se preserva sacando los 4 service components a Soma.
## Comparativa
| Capacidad | Soma | date-fns `formatDistance` | Day.js `from` | luxon `toRelative` | Intl.RelativeTimeFormat |
| Capacidad | Eidos | date-fns `formatDistance` | Day.js `from` | luxon `toRelative` | Intl.RelativeTimeFormat |
| --- | --- | --- | --- | --- | --- |
| Auto-unit | Si | Si | Si | Si | No (manual) |
| Auto-tick | Si | No | No | No | No |

@ -0,0 +1,19 @@
// RelativeTime — service component rendering Intl.RelativeTimeFormat
// output ("hace 2 horas" / "in 3 days") with an auto-refresh tick.
//
// import { RelativeTime } from '$uix/eidos/components/relative-time';
//
// <RelativeTime value={post.publishedAt} />
// <RelativeTime value={createdAt} style="short" />
// <RelativeTime value={dueDate} unit="day" updateInterval={0} />
import RelativeTime from './relative-time.svelte';
export { RelativeTime };
export default RelativeTime;
export type {
RelativeTimeProps,
RelativeTimeInput,
RelativeTimeUnit,
RelativeTimeNumeric,
RelativeTimeStyle
} from './types';

@ -1,6 +1,6 @@
<script lang="ts">
/**
* Soma `<RelativeTime>` — service component wrapping
* Eidos `<RelativeTime>` — service component wrapping
* `Intl.RelativeTimeFormat` with an auto-refresh tick. Renders
* relative phrases like "hace 2 horas" / "in 3 days" and updates
* itself as time passes so the displayed text stays fresh.
@ -13,11 +13,6 @@
* Auto-tick cadence is derived from the resolved unit (1s for
* second, 30s for minute, 5min for hour, 1h for day, none above).
* Pass `updateInterval={0}` to render once and stop.
*
* Lives in Soma (not Eidos) because it is a behavior component
* around `getActiveUix().format`, not a visual primitive. Eidos
* remains a pure visual layer; service components like this one
* own the runtime access.
*/
import { onDestroy } from 'svelte';
import { getActiveUix } from '$active-uix';
@ -25,7 +20,7 @@
RelativeTimeInput,
RelativeTimeProps,
RelativeTimeUnit
} from '../types';
} from './types';
let {
value = null,

@ -0,0 +1,82 @@
# Eidos Trans
`<Trans>` es un **service component** — un wrapper greppable de
`getActiveUix().langs.t / ts`. Resuelve un `idlangref` o un `path` a
traves del catalogo activo de langs y renderiza el texto traducido.
Familia con `<FormatDate>`, `<FormatNumber>`, `<RelativeTime>`: todos
son wrappers tipados del runtime para que un audit i18n encuentre cada
sitio que toca el catalogo con `grep "<Trans"`.
## Superficie
```svelte
<!-- 5 modos de resolucion -->
<Trans>#?common.save|Save</Trans> <!-- children como idlangref -->
<Trans value="#?common.save|Save" /> <!-- value prop -->
<Trans path="common.save">Save</Trans> <!-- path + children=fallback -->
<Trans path="common.greet" params={{name: 'Juan'}} />
<Trans as="strong">#?ui.required|Required</Trans>
<Trans path="common.save" locale="en-US">Save</Trans>
```
## Props clave
| Prop | Tipo | Default | Notas |
| --- | --- | --- | --- |
| `value` | `LangString` | — | `idlangref` (`#?path\|fallback`) o literal. |
| `path` | `string` | — | Dotted path al catalogo (ej. `'common.save'`). |
| `params` | `Record<string, unknown>` | — | Interpolacion para `path`. |
| `locale` | `SupportedLocale` | runtime | Override por instancia. |
| `trim` | `boolean` | `true` | Trim del texto capturado de children. |
| `as` | `keyof HTMLElementTagNameMap` | `'span'` | Tag HTML. |
| `children` | snippet | — | Fallback / source si no hay `value` / `path`. |
## Modos de resolucion
| Modo | Forma | Source |
| --- | --- | --- |
| 1. Children-only | `<Trans>#?common.save\|Save</Trans>` | DOM `textContent` parseado como `idlangref`. |
| 2. Value prop | `<Trans value="#?common.save\|Save" />` | `value` parseado. |
| 3. Path + children fallback | `<Trans path="common.save">Save</Trans>` | `t(path)` con `children` como fallback si la key no existe. |
| 4. Path + params | `<Trans path="common.greet" params={{name}} />` | `t(path, params)`. |
| 5. Pass-through | `<Trans value="literal text" />` | Texto literal sin resolver. |
## Decisiones
- **Reactivo al locale**: el `$derived` re-corre cuando el locale activo
cambia. La lectura va a traves de `uix.langs.t / ts` que estan
acopladas al sistema reactivo de runes.
- **Captura de children**: cuando ni `value` ni `path` estan
presentes, el componente captura `textContent` del nodo via
`bind:this={captureNode}` + `$effect`. La primera render emite el
children original (`#?path|fallback` sin resolver); en `$effect`
intercepta y resuelve.
- **Cast del path**: `langs.t()` tipa su primer overload con
`${string}.${string}` (template literal estricto). Como el runtime
acepta paths dinamicos en runtime, se castea via
`Parameters<typeof t>[0]`.
- **Fallback a children**: cuando `t(path)` devuelve el path original
(signal de "key no encontrada"), el componente cae al `capturedText`
si existe.
- **No CSS recipe**: marker `[data-trans]` solo para tooling.
- **No emite eventos sema**.
## Comparativa
| Capacidad | Eidos | i18next `Trans` | formatjs `FormattedMessage` | svelte-i18n `_` |
| --- | --- | --- | --- | --- |
| Greppable site marker | Si: `<Trans` | Si | Si | No: `$_('key')` inline |
| Children-as-idlangref | Si: `#?path\|fallback` | Si | No | No |
| Path + params | Si | Si | Si | Si |
| Locale override per-instance | Si | Limitado | Si | No |
| Reactivo al cambio de locale | Si | Si | Si | Si |
| Tag HTML configurable | Si: `as` | Si: `as` | Si: `tagName` | No |
| Pluralizacion | Via params del catalogo | Si | Si | Si |
## Referencias
- i18next Trans: https://react.i18next.com/latest/trans-component
- formatjs: https://formatjs.io/docs/react-intl/components#formattedmessage
- Active langs: `src/arts/langs/`
- Sistema idlangref: `src/uix/langs/`

@ -0,0 +1,17 @@
// Trans — i18n primitive that resolves an idlangref or path through
// the active langs catalog and renders the translated string.
//
// import { Trans } from '$uix/eidos/components/trans';
//
// <Trans>#?common.save|Save</Trans>
// <Trans value="#?common.save|Save" />
// <Trans path="common.save">Save</Trans>
// <Trans path="common.greet" params={{ name: 'Juan' }} />
// <Trans as="strong">#?ui.required|Required</Trans>
//
// Reactive to locale changes; greppable as the canonical i18n marker.
import Trans from './trans.svelte';
export { Trans };
export default Trans;
export type { TransProps } from './types';

@ -1,8 +1,8 @@
<script lang="ts">
/**
* Soma `<Trans>` — i18n service component. Resolves an idlangref or
* path through the active langs catalog and renders the translated
* text in a configurable element (default `<span>`).
* Eidos `<Trans>` — i18n primitive. Resolves an idlangref or path
* through the active langs catalog and renders the translated text
* in a configurable element (default `<span>`).
*
* <Trans>#?common.save|Save</Trans> <!-- children → idlangref -->
* <Trans value="#?common.save|Save" /> <!-- value prop -->
@ -13,14 +13,13 @@
* Reactive to locale changes — when the active locale flips, the
* rendered text updates without consumer plumbing.
*
* Lives in Soma (not Eidos) because it is a behavior component
* around `getActiveUix().langs`, not a visual primitive. Eidos
* remains a pure visual layer; service components like this one
* own the runtime access.
* Designed as a greppable i18n marker — searching `<Trans` finds
* every site that touches the langs catalog, which is much harder
* to audit when consumers call `langs.ts(...)` inline.
*/
import { getActiveUix } from '$active-uix';
import type { LangString } from '$libs/langs';
import type { TransProps } from '../types';
import type { TransProps } from './types';
let {
value,
@ -73,9 +72,7 @@
// `hasSource` is true once we have any source string to render.
// While the children-capture path runs $effect on mount, we render
// the children initially so the captureNode has text to read.
const hasSource = $derived(
value !== undefined || path !== undefined || capturedText !== undefined
);
const hasSource = $derived(value !== undefined || path !== undefined || capturedText !== undefined);
</script>
<svelte:element this={as} bind:this={captureNode} data-trans="" {...rest}>

@ -3,25 +3,29 @@ import type { HTMLAttributes } from 'svelte/elements';
import type { LangParams, SupportedLocale } from '$libs/langs';
/**
* Props for `<Trans>` — i18n service component.
* Props for `<Trans>`.
*
* Three resolution modes (any one activates translation):
* Three resolution modes (any one of them activates translation):
*
* 1. **idlangref in children**
* 1. **idlangref string in children**
* `<Trans>#?common.save|Save</Trans>`
* Reads the children DOM text. `#?…` → idlangref;
* otherwise literal string.
* The component reads the children DOM text content. If it
* starts with `#?` it's treated as an idlangref; otherwise it
* passes through as a literal string.
*
* 2. **`value` prop**
* `<Trans value="#?common.save|Save" />`
* Same split via prop — cleaner for SSR and dynamic values.
* Same idlangref / literal split, but supplied via prop —
* cleaner for SSR and dynamic values.
*
* 3. **`path` prop**
* `<Trans path="common.save">Save</Trans>`
* Dotted path (no `#?` prefix). Supports `params`. Children act as
* the fallback when the path is missing from the catalog.
* Strips the `#?` prefix — pass the dotted path directly. The
* children act as the fallback text. Use this when the consumer
* wants type-safety on the path (autocomplete from the langs
* schema).
*
* `path` + `params` interpolate:
* `path` + `params` enable interpolation:
* `<Trans path="common.greet" params={{ name: 'Juan' }} />`
*
* `as` swaps the rendered tag (default `<span>`).
@ -41,9 +45,9 @@ export type TransProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
*/
path?: string;
/**
* Interpolation params for `path`-based translations. Ignored when
* `value` is the source — idlangref interpolation lives in the
* inline syntax.
* Interpolation params for `path`-based translations. Ignored
* when `value` (idlangref) is the source — interpolation in
* idlangrefs lives in the inline syntax.
*/
params?: LangParams;
/**

@ -12,7 +12,7 @@ import type { Morfo } from '../types';
export const formatDateMorfo = {
name: 'FormatDate',
kebab: 'format-date',
scope: ['soma'],
scope: ['eidos'],
parts: [
{
name: 'Provider',

@ -16,7 +16,7 @@ import type { Morfo } from '../types';
export const formatNumberMorfo = {
name: 'FormatNumber',
kebab: 'format-number',
scope: ['soma'],
scope: ['eidos'],
parts: [
{
name: 'Provider',

@ -12,7 +12,7 @@ import type { Morfo } from '../types';
export const relativeTimeMorfo = {
name: 'RelativeTime',
kebab: 'relative-time',
scope: ['soma'],
scope: ['eidos'],
parts: [
{
name: 'Provider',

@ -20,7 +20,7 @@ import type { Morfo } from '../types';
export const transMorfo = {
name: 'Trans',
kebab: 'trans',
scope: ['soma'],
scope: ['eidos'],
parts: [
{
name: 'Provider',

@ -1,24 +0,0 @@
// FormatDate — service component wrapping uix.format.dates.
//
// import { FormatDate } from '$soma/components/format-date';
//
// <FormatDate value={post.publishedAt} dateStyle="medium" />
// <FormatDate value={meeting.startsAt} mode="dateTime" />
// <FormatDate value={now} mode="time" timeZoneName="short" />
//
// Renders as <time datetime="..."> for semantic ISO 8601 access.
//
// Lives under `soma/` (not `eidos/`) because the component owns runtime
// access. Eidos invariant — "no `getActiveUix()` imports" — is enforced
// across the visual layer; service components like `Trans` /
// `FormatDate` / `FormatNumber` / `RelativeTime` are their Soma-side peers.
export { default as FormatDate } from './components/format-date.svelte';
export { default as Provider } from './components/format-date.svelte';
export type {
FormatDateProps,
FormatDateInput,
FormatDateMode,
FormatDateStyle,
FormatTimeStyle
} from './types';

@ -1 +0,0 @@
export * from './exports';

@ -1,23 +0,0 @@
// RelativeTime — service component rendering Intl.RelativeTimeFormat
// output ("hace 2 horas" / "in 3 days") with an auto-refresh tick.
//
// import { RelativeTime } from '$soma/components/relative-time';
//
// <RelativeTime value={post.publishedAt} />
// <RelativeTime value={createdAt} style="short" />
// <RelativeTime value={dueDate} unit="day" updateInterval={0} />
//
// Lives under `soma/` (not `eidos/`) because the component owns runtime
// access. Eidos invariant — "no `getActiveUix()` imports" — is enforced
// across the visual layer; service components like `Trans` /
// `FormatDate` / `FormatNumber` / `RelativeTime` are their Soma-side peers.
export { default as RelativeTime } from './components/relative-time.svelte';
export { default as Provider } from './components/relative-time.svelte';
export type {
RelativeTimeProps,
RelativeTimeInput,
RelativeTimeUnit,
RelativeTimeNumeric,
RelativeTimeStyle
} from './types';

@ -1,22 +0,0 @@
// Trans — i18n service component. Renders translated text through the
// active langs catalog (`uix.langs.t / ts`).
//
// import { Trans } from '$soma/components/trans';
//
// <Trans>#?common.save|Save</Trans>
// <Trans value="#?common.save|Save" />
// <Trans path="common.save">Save</Trans>
// <Trans path="common.greet" params={{ name: 'Juan' }} />
// <Trans as="strong">#?ui.required|Required</Trans>
//
// Reactive to locale changes; greppable as the canonical i18n marker.
//
// Lives under `soma/` (not `eidos/`) because the component owns runtime
// access. Eidos invariant — "no `getActiveUix()` imports" — is enforced
// across the visual layer; service components like `Trans` /
// `FormatDate` / `FormatNumber` / `RelativeTime` are their Soma-side
// peers.
export { default as Trans } from './components/trans.svelte';
export { default as Provider } from './components/trans.svelte';
export type { TransProps } from './types';

@ -1 +0,0 @@
export * from './exports';

@ -4,7 +4,7 @@
type FormatDateMode,
type FormatDateStyle,
type FormatTimeStyle
} from '$soma/components/format-date';
} from '$uix/eidos/components/format-date';
import { compileMorfo } from '$uix/morfo';
import { formatDateMorfo } from '@/uix/morfo/components/format-date';
import { getActiveUix } from '$active-uix';
@ -80,7 +80,7 @@
<code>{demoLocale}</code>
</span>
<span data-uix-meta-pill>
<span data-uix-meta-key>scope</span>soma
<span data-uix-meta-key>scope</span>eidos
</span>
</div>
</header>

@ -1,5 +1,5 @@
<script lang="ts">
import { FormatNumber } from '$soma/components/format-number';
import { FormatNumber } from '$uix/eidos/components/format-number';
import { compileMorfo } from '$uix/morfo';
import { formatNumberMorfo } from '@/uix/morfo/components/format-number';
import { getActiveUix } from '$active-uix';
@ -41,7 +41,7 @@
const eidosSnippet = $derived(
[
"<script lang='ts'>",
" import { FormatNumber } from '$soma/components/format-number';",
" import { FormatNumber } from '$uix/eidos/components/format-number';",
'</' + 'script>',
'',
'<FormatNumber',
@ -88,7 +88,7 @@
<code>{uix.langs.getLocale()}</code>
</span>
<span data-uix-meta-pill>
<span data-uix-meta-key>scope</span>soma
<span data-uix-meta-key>scope</span>eidos
</span>
</div>
</header>

@ -4,7 +4,7 @@
type RelativeTimeUnit,
type RelativeTimeStyle,
type RelativeTimeNumeric
} from '$soma/components/relative-time';
} from '$uix/eidos/components/relative-time';
import { compileMorfo } from '$uix/morfo';
import { relativeTimeMorfo } from '@/uix/morfo/components/relative-time';
import { getActiveUix } from '$active-uix';
@ -95,7 +95,7 @@
<code>{demoLocale}</code>
</span>
<span data-uix-meta-pill>
<span data-uix-meta-key>scope</span>soma
<span data-uix-meta-key>scope</span>eidos
</span>
</div>
</header>

@ -1,5 +1,5 @@
<script lang="ts">
import { Trans } from '$soma/components/trans';
import { Trans } from '$uix/eidos/components/trans';
import { compileMorfo } from '$uix/morfo';
import { transMorfo } from '@/uix/morfo/components/trans';
import { getActiveUix } from '$active-uix';
@ -20,7 +20,7 @@
const eidosSnippet = $derived(
[
"<script lang='ts'>",
" import { Trans } from '$soma/components/trans';",
" import { Trans } from '$uix/eidos/components/trans';",
'</' + 'script>',
'',
'<!-- mode 1 — idlangref via children -->',
@ -72,7 +72,7 @@
<code>{uix.langs.getLocale()}</code>
</span>
<span data-uix-meta-pill>
<span data-uix-meta-key>scope</span>soma
<span data-uix-meta-key>scope</span>eidos
</span>
</div>
</header>

Loading…
Cancel
Save

Powered by TurnKey Linux.