fix(eidos): use ActiveEidos.require() instead of getActiveUix() in 15 components

Cierra P1 #1 del audit Codex: «Eidos no importa `\$active-uix`
directamente — consume el runtime via `ActiveEidos.require()` que
expone la surface bounded (langs / format / prefs / dom / uix)».

`ActiveEidos` ya existe (src/uix/eidos/active-eidos.svelte.ts) y la
mayoria de eidos components la usan (accordion, alert-dialog, banner,
box, button, calendar, card, ~50 archivos). Estos 15 quedaban como
strugglers/adiciones recientes que se saltaron el patron.

Patron canonico aplicado en cada archivo:

  -import { getActiveUix } from '\$active-uix';
  -const uix = getActiveUix();
  -uix.langs.t(...)
  +import { ActiveEidos } from '\$uix/eidos';
  +const eidos = ActiveEidos.require();
  +eidos.langs.t(...)

Archivos (15):
- badge/badge.svelte
- format-date/format-date.svelte
- format-number/format-number.svelte
- image/image-{error,fallback,_}.svelte (3)
- password-field/password-field-caps-lock-indicator.svelte
- picker-shell/picker-shell-{cancel,clear,close}.svelte (3)
- relative-time/relative-time.svelte
- s-text/s-text.svelte
- skeleton/skeleton.svelte
- spinner/spinner.svelte
- trans/trans.svelte

Sin nueva surface introducida — todas las usages (langs, format.dates,
format.numbers, format.currency) ya estaban expuestas en
`ActiveEidos`.

Verificacion:
- `grep getActiveUix src/uix/eidos/components/ --include='*.svelte'`:
  cero matches. Quedan referencias en comments/READMEs/types.ts
  (informativas, no imports).
- `npm run check`: 0 errors mantenido.
- HTTP 200 en /uix/components/{trans,format-date,format-number,relative-time,badge,skeleton,spinner,image}.

Esto es el fix correcto del audit (no la migracion-a-soma del commit
anterior que se hizo por mal entendimiento de la regla — revertida en
el commit precedente «Revert ... service components from Eidos to
Soma»).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
active-uix
dev 5 months ago
parent cd2c0326dc
commit c85c729dde

@ -13,7 +13,6 @@
*/ */
import './badge.css'; import './badge.css';
import { ActiveEidos } from '$uix/eidos'; import { ActiveEidos } from '$uix/eidos';
import { getActiveUix } from '$active-uix';
import { BADGE_LANGS } from './langs'; import { BADGE_LANGS } from './langs';
import type { BadgeProps } from './types'; import type { BadgeProps } from './types';
@ -32,12 +31,11 @@
}: BadgeProps = $props(); }: BadgeProps = $props();
const eidos = ActiveEidos.require(); const eidos = ActiveEidos.require();
const uix = getActiveUix();
const resolvedSize = $derived(eidos.resolve(size, 'md')); const resolvedSize = $derived(eidos.resolve(size, 'md'));
const resolvedRounded = $derived(eidos.resolve(rounded, 'full')); const resolvedRounded = $derived(eidos.resolve(rounded, 'full'));
const resolvedRemoveLabel = $derived( const resolvedRemoveLabel = $derived(
removeLabel ?? uix.langs.ts(BADGE_LANGS.REMOVE) removeLabel ?? eidos.langs.ts(BADGE_LANGS.REMOVE)
); );
</script> </script>

@ -1,16 +1,16 @@
<script lang="ts"> <script lang="ts">
/** /**
* Eidos `<FormatDate>` — service component wrapping the active * Eidos `<FormatDate>` — service component wrapping the active
* dates runtime (`uix.format.dates.formatDate / formatTime / * dates runtime (`eidos.format.dates.formatDate / formatTime /
* formatDateTime`). Renders as `<time datetime="...">` by default * formatDateTime`) via `ActiveEidos.require()`. Renders as
* so screen readers and search engines can parse the original * `<time datetime="...">` by default so screen readers and search
* ISO 8601 value. * engines can parse the original ISO 8601 value.
* *
* <FormatDate value={post.publishedAt} dateStyle="medium" /> * <FormatDate value={post.publishedAt} dateStyle="medium" />
* <FormatDate value={meeting.startsAt} mode="dateTime" dateStyle="short" timeStyle="short" /> * <FormatDate value={meeting.startsAt} mode="dateTime" dateStyle="short" timeStyle="short" />
* <FormatDate value={createdAt} mode="time" timeZone="UTC" timeZoneName="short" /> * <FormatDate value={createdAt} mode="time" timeZone="UTC" timeZoneName="short" />
*/ */
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import type { FormatDateInput, FormatDateProps } from './types'; import type { FormatDateInput, FormatDateProps } from './types';
let { let {
@ -39,7 +39,7 @@
...rest ...rest
}: FormatDateProps = $props(); }: FormatDateProps = $props();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
const parsed = $derived.by<Date | null>(() => { const parsed = $derived.by<Date | null>(() => {
if (value == null) return null; if (value == null) return null;
@ -51,7 +51,7 @@
const resolved = $derived.by(() => { const resolved = $derived.by(() => {
if (!parsed) return fallback; if (!parsed) return fallback;
const dates = uix.format?.dates; const dates = eidos.format?.dates;
// Caller-provided fields only — `undefined` keys would register // Caller-provided fields only — `undefined` keys would register
// as "present" inside `Intl.DateTimeFormat`'s option validation, // as "present" inside `Intl.DateTimeFormat`'s option validation,

@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
/** /**
* Eidos `<FormatNumber>` — service component wrapping * Eidos `<FormatNumber>` — service component wrapping
* `getActiveUix().format.numbers.format(...)` so consumers can * `ActiveEidos.require().format.numbers.format(...)` so consumers
* type-safe their locale-aware number rendering without inlining * can type-safe their locale-aware number rendering without
* the runtime call on every site. * inlining the runtime call on every site.
* *
* <FormatNumber value={1234567} /> * <FormatNumber value={1234567} />
* <FormatNumber value={0.425} formatStyle="percent" /> * <FormatNumber value={0.425} formatStyle="percent" />
@ -17,7 +17,7 @@
* already exposes those signals, this component just observes them * already exposes those signals, this component just observes them
* via `$derived`. * via `$derived`.
*/ */
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import type { FormatNumberProps } from './types'; import type { FormatNumberProps } from './types';
let { let {
@ -44,11 +44,11 @@
...rest ...rest
}: FormatNumberProps = $props(); }: FormatNumberProps = $props();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
const resolved = $derived.by(() => { const resolved = $derived.by(() => {
if (value == null || !Number.isFinite(value)) return fallback; if (value == null || !Number.isFinite(value)) return fallback;
const numbers = uix.format?.numbers; const numbers = eidos.format?.numbers;
// Scale percent values when the caller passes them pre-scaled. // Scale percent values when the caller passes them pre-scaled.
const inputValue = const inputValue =
@ -76,11 +76,11 @@
// currency runtime so the consumer doesn't have to repeat it // currency runtime so the consumer doesn't have to repeat it
// on every <FormatNumber>. // on every <FormatNumber>.
if (formatStyle === 'currency' && !currency) { if (formatStyle === 'currency' && !currency) {
const activeCurrency = uix.format?.currency?.getCurrency?.(); const activeCurrency = eidos.format?.currency?.getCurrency?.();
if (activeCurrency) options.currency = activeCurrency; if (activeCurrency) options.currency = activeCurrency;
} }
// Always route through `uix.format.numbers` when the runtime is // Always route through `eidos.format.numbers` when the runtime is
// available — it owns the cache (`getCachedNumberFormat`), the // available — it owns the cache (`getCachedNumberFormat`), the
// reactive locale, separator preferences, and the default-format // reactive locale, separator preferences, and the default-format
// merge. The third `locale` arg is a per-call override that // merge. The third `locale` arg is a per-call override that

@ -5,7 +5,7 @@
* translated `aria-label` so screen readers know it's a broken * translated `aria-label` so screen readers know it's a broken
* image, not arbitrary chrome. * image, not arbitrary chrome.
*/ */
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import { IMAGE_LANGS } from './langs'; import { IMAGE_LANGS } from './langs';
import type { ImageErrorProps } from './types'; import type { ImageErrorProps } from './types';
import { getImageEidosContext } from './image-context'; import { getImageEidosContext } from './image-context';
@ -17,8 +17,8 @@
}: ImageErrorProps = $props(); }: ImageErrorProps = $props();
const image = getImageEidosContext(); const image = getImageEidosContext();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
const resolvedLabel = $derived(ariaLabel ?? uix.langs.ts(IMAGE_LANGS.ERROR_LABEL)); const resolvedLabel = $derived(ariaLabel ?? eidos.langs.ts(IMAGE_LANGS.ERROR_LABEL));
</script> </script>
{#if image?.status === 'error'} {#if image?.status === 'error'}

@ -7,7 +7,7 @@
* No parent Image? Always renders — useful for static placeholders * No parent Image? Always renders — useful for static placeholders
* outside a managed image surface. * outside a managed image surface.
*/ */
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import { IMAGE_LANGS } from './langs'; import { IMAGE_LANGS } from './langs';
import type { ImageFallbackProps } from './types'; import type { ImageFallbackProps } from './types';
import { getImageEidosContext } from './image-context'; import { getImageEidosContext } from './image-context';
@ -19,8 +19,8 @@
}: ImageFallbackProps = $props(); }: ImageFallbackProps = $props();
const image = getImageEidosContext(); const image = getImageEidosContext();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
const resolvedLabel = $derived(ariaLabel ?? uix.langs.ts(IMAGE_LANGS.LOADING_LABEL)); const resolvedLabel = $derived(ariaLabel ?? eidos.langs.ts(IMAGE_LANGS.LOADING_LABEL));
</script> </script>
{#if (image?.fallbackVisible ?? true) && image?.status !== 'error'} {#if (image?.fallbackVisible ?? true) && image?.status !== 'error'}

@ -21,7 +21,6 @@
import { ImageProvider } from '$soma/layers'; import { ImageProvider } from '$soma/layers';
import { ActiveEidos } from '$uix/eidos'; import { ActiveEidos } from '$uix/eidos';
import { COLOR_ROLES } from '$uix/eidos/lib/config-types'; import { COLOR_ROLES } from '$uix/eidos/lib/config-types';
import { getActiveUix } from '$active-uix';
import { IMAGE_LANGS } from './langs'; import { IMAGE_LANGS } from './langs';
import type { ImageProps, ImageStatusValue } from './types'; import type { ImageProps, ImageStatusValue } from './types';
import { setImageEidosContext } from './image-context'; import { setImageEidosContext } from './image-context';
@ -58,7 +57,6 @@
}: ImageProps = $props(); }: ImageProps = $props();
const eidos = ActiveEidos.require(); const eidos = ActiveEidos.require();
const uix = getActiveUix();
const resolvedFit = $derived(eidos.resolve(fit, 'cover')); const resolvedFit = $derived(eidos.resolve(fit, 'cover'));
const resolvedPosition = $derived(eidos.resolve(position, 'center')); const resolvedPosition = $derived(eidos.resolve(position, 'center'));
@ -123,8 +121,8 @@
// Translated default labels — exposed to the Fallback / Error // Translated default labels — exposed to the Fallback / Error
// children as `aria-label` defaults via context. // children as `aria-label` defaults via context.
const loadingLabel = $derived(uix.langs.ts(IMAGE_LANGS.LOADING_LABEL)); const loadingLabel = $derived(eidos.langs.ts(IMAGE_LANGS.LOADING_LABEL));
const errorLabel = $derived(uix.langs.ts(IMAGE_LANGS.ERROR_LABEL)); const errorLabel = $derived(eidos.langs.ts(IMAGE_LANGS.ERROR_LABEL));
const fallbackIsString = $derived(typeof fallback === 'string'); const fallbackIsString = $derived(typeof fallback === 'string');
const errorFallbackIsString = $derived(typeof errorFallback === 'string'); const errorFallbackIsString = $derived(typeof errorFallback === 'string');

@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import * as PasswordField from '$soma/components/password-field'; import * as PasswordField from '$soma/components/password-field';
import { PASSWORD_FIELD_LANGS } from '$soma/components/password-field/langs'; import { PASSWORD_FIELD_LANGS } from '$soma/components/password-field/langs';
import { ArrowBigUp } from '$uix/eidos/components/icon'; import { ArrowBigUp } from '$uix/eidos/components/icon';
@ -11,8 +11,8 @@
...rest ...rest
}: PasswordFieldCapsLockIndicatorProps = $props(); }: PasswordFieldCapsLockIndicatorProps = $props();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
const capsLabel = $derived(uix.langs.ts(PASSWORD_FIELD_LANGS.CAPS_WARNING)); const capsLabel = $derived(eidos.langs.ts(PASSWORD_FIELD_LANGS.CAPS_WARNING));
</script> </script>
<PasswordField.CapsLockIndicator {...rest} bind:ref> <PasswordField.CapsLockIndicator {...rest} bind:ref>

@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import { getPickerShellHandle } from '$soma/components/picker-shell'; import { getPickerShellHandle } from '$soma/components/picker-shell';
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import { Button } from '$uix/eidos/components/button'; import { Button } from '$uix/eidos/components/button';
import type { PickerShellCancelProps } from './types'; import type { PickerShellCancelProps } from './types';
@ -10,9 +10,9 @@
// the solid primary Close. // the solid primary Close.
const { children, onclick, ...rest }: PickerShellCancelProps = $props(); const { children, onclick, ...rest }: PickerShellCancelProps = $props();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
const shell = getPickerShellHandle(); const shell = getPickerShellHandle();
const label = uix.langs.ts('#?components.picker-shell.cancel|Cancel'); const label = eidos.langs.ts('#?components.picker-shell.cancel|Cancel');
function handleClick(event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }) { function handleClick(event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }) {
shell?.cancel(); shell?.cancel();

@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import { getPickerShellHandle } from '$soma/components/picker-shell'; import { getPickerShellHandle } from '$soma/components/picker-shell';
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import { Button } from '$uix/eidos/components/button'; import { Button } from '$uix/eidos/components/button';
import type { PickerShellClearProps } from './types'; import type { PickerShellClearProps } from './types';
@ -8,9 +8,9 @@
// the popover open. Visual: ghost neutral `<Button>` at size='xs'. // the popover open. Visual: ghost neutral `<Button>` at size='xs'.
const { children, onclick, ...rest }: PickerShellClearProps = $props(); const { children, onclick, ...rest }: PickerShellClearProps = $props();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
const shell = getPickerShellHandle(); const shell = getPickerShellHandle();
const label = uix.langs.ts('#?components.picker-shell.clear|Clear'); const label = eidos.langs.ts('#?components.picker-shell.clear|Clear');
function handleClick(event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }) { function handleClick(event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }) {
shell?.clear(); shell?.clear();

@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import { getPickerShellHandle } from '$soma/components/picker-shell'; import { getPickerShellHandle } from '$soma/components/picker-shell';
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import { Button } from '$uix/eidos/components/button'; import { Button } from '$uix/eidos/components/button';
import type { PickerShellCloseProps } from './types'; import type { PickerShellCloseProps } from './types';
@ -16,9 +16,9 @@
// closure sounds like a save regardless of the visual palette. // closure sounds like a save regardless of the visual palette.
const { children, onclick, ...rest }: PickerShellCloseProps = $props(); const { children, onclick, ...rest }: PickerShellCloseProps = $props();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
const shell = getPickerShellHandle(); const shell = getPickerShellHandle();
const label = uix.langs.ts('#?components.picker-shell.close|Done'); const label = eidos.langs.ts('#?components.picker-shell.close|Done');
function handleClick(event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }) { function handleClick(event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }) {
shell?.commit(); shell?.commit();

@ -15,7 +15,7 @@
* Pass `updateInterval={0}` to render once and stop. * Pass `updateInterval={0}` to render once and stop.
*/ */
import { onDestroy } from 'svelte'; import { onDestroy } from 'svelte';
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import type { import type {
RelativeTimeInput, RelativeTimeInput,
RelativeTimeProps, RelativeTimeProps,
@ -35,7 +35,7 @@
...rest ...rest
}: RelativeTimeProps = $props(); }: RelativeTimeProps = $props();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
function parseTime(input: RelativeTimeInput | null | undefined): Date | null { function parseTime(input: RelativeTimeInput | null | undefined): Date | null {
if (input == null) return null; if (input == null) return null;
@ -101,7 +101,7 @@
const resolved = $derived.by(() => { const resolved = $derived.by(() => {
if (!parsedValue) return fallback; if (!parsedValue) return fallback;
const dates = uix.format?.dates; const dates = eidos.format?.dates;
// Route through the runtime when available — it owns the // Route through the runtime when available — it owns the
// `Intl.RelativeTimeFormat` cache and the active locale. Per-call // `Intl.RelativeTimeFormat` cache and the active locale. Per-call
// `locale` override doesn't mutate engine state. Fall back to a // `locale` override doesn't mutate engine state. Fall back to a

@ -23,7 +23,6 @@
// `$app/environment` (couples the visual layer to a specific framework). // `$app/environment` (couples the visual layer to a specific framework).
const isBrowser = typeof window !== 'undefined'; const isBrowser = typeof window !== 'undefined';
import { ActiveEidos } from '$uix/eidos'; import { ActiveEidos } from '$uix/eidos';
import { getActiveUix } from '$active-uix';
import { useContainerWidth, useTextLayout } from '$uix/eidos/lib/canvas-text/use-canvas.svelte'; import { useContainerWidth, useTextLayout } from '$uix/eidos/lib/canvas-text/use-canvas.svelte';
import { S_TEXT_LANGS } from './langs'; import { S_TEXT_LANGS } from './langs';
import type { STextProps } from './types'; import type { STextProps } from './types';
@ -50,7 +49,6 @@
}: STextProps = $props(); }: STextProps = $props();
const eidos = ActiveEidos.require(); const eidos = ActiveEidos.require();
const uix = getActiveUix();
function pushVar(decls: string[], name: string, value: string | number | undefined): void { function pushVar(decls: string[], name: string, value: string | number | undefined): void {
if (value === undefined || value === null || value === '') return; if (value === undefined || value === null || value === '') return;
@ -137,7 +135,7 @@
const clampHint = $derived.by(() => { const clampHint = $derived.by(() => {
if (!isClipped || hideClampHint) return ''; if (!isClipped || hideClampHint) return '';
const key = hiddenLines === 1 ? S_TEXT_LANGS.CLAMP_HINT_ONE : S_TEXT_LANGS.CLAMP_HINT_OTHER; const key = hiddenLines === 1 ? S_TEXT_LANGS.CLAMP_HINT_ONE : S_TEXT_LANGS.CLAMP_HINT_OTHER;
const template = uix.langs.ts(key); const template = eidos.langs.ts(key);
return template.replace('{count}', String(hiddenLines)); return template.replace('{count}', String(hiddenLines));
}); });
</script> </script>

@ -13,7 +13,6 @@
*/ */
import './skeleton.css'; import './skeleton.css';
import { ActiveEidos } from '$uix/eidos'; import { ActiveEidos } from '$uix/eidos';
import { getActiveUix } from '$active-uix';
import { SKELETON_LANGS } from './langs'; import { SKELETON_LANGS } from './langs';
import type { SkeletonProps } from './types'; import type { SkeletonProps } from './types';
@ -29,11 +28,10 @@
}: SkeletonProps = $props(); }: SkeletonProps = $props();
const eidos = ActiveEidos.require(); const eidos = ActiveEidos.require();
const uix = getActiveUix();
const resolvedShape = $derived(eidos.resolve(shape, 'rect')); const resolvedShape = $derived(eidos.resolve(shape, 'rect'));
const resolvedSize = $derived(eidos.resolve(size, 'md')); const resolvedSize = $derived(eidos.resolve(size, 'md'));
const resolvedLabel = $derived(ariaLabel ?? uix.langs.ts(SKELETON_LANGS.LABEL)); const resolvedLabel = $derived(ariaLabel ?? eidos.langs.ts(SKELETON_LANGS.LABEL));
// Stagger widths for multi-line text skeletons so the block reads as // Stagger widths for multi-line text skeletons so the block reads as
// a paragraph rather than a solid rectangle. Last line always shorter. // a paragraph rather than a solid rectangle. Last line always shorter.

@ -12,7 +12,6 @@
*/ */
import './spinner.css'; import './spinner.css';
import { ActiveEidos } from '$uix/eidos'; import { ActiveEidos } from '$uix/eidos';
import { getActiveUix } from '$active-uix';
import { SPINNER_LANGS } from './langs'; import { SPINNER_LANGS } from './langs';
import type { SpinnerProps } from './types'; import type { SpinnerProps } from './types';
@ -26,10 +25,9 @@
}: SpinnerProps = $props(); }: SpinnerProps = $props();
const eidos = ActiveEidos.require(); const eidos = ActiveEidos.require();
const uix = getActiveUix();
const resolvedSize = $derived(eidos.resolve(size, 'md')); const resolvedSize = $derived(eidos.resolve(size, 'md'));
const resolvedLabel = $derived(ariaLabel ?? uix.langs.ts(SPINNER_LANGS.LABEL)); const resolvedLabel = $derived(ariaLabel ?? eidos.langs.ts(SPINNER_LANGS.LABEL));
</script> </script>
<div <div

@ -17,7 +17,7 @@
* every site that touches the langs catalog, which is much harder * every site that touches the langs catalog, which is much harder
* to audit when consumers call `langs.ts(...)` inline. * to audit when consumers call `langs.ts(...)` inline.
*/ */
import { getActiveUix } from '$active-uix'; import { ActiveEidos } from '$uix/eidos';
import type { LangString } from '$libs/langs'; import type { LangString } from '$libs/langs';
import type { TransProps } from './types'; import type { TransProps } from './types';
@ -32,7 +32,7 @@
...rest ...rest
}: TransProps = $props(); }: TransProps = $props();
const uix = getActiveUix(); const eidos = ActiveEidos.require();
// When neither `value` nor `path` is set, capture the children DOM // When neither `value` nor `path` is set, capture the children DOM
// text content and treat it as the source. This lets consumers // text content and treat it as the source. This lets consumers
@ -55,7 +55,7 @@
// match. The runtime accepts arbitrary dotted paths just fine, // match. The runtime accepts arbitrary dotted paths just fine,
// so the cast is safe — we route through the second overload. // so the cast is safe — we route through the second overload.
if (path !== undefined) { if (path !== undefined) {
const result = uix.langs.t(path as Parameters<typeof uix.langs.t>[0], params, locale); const result = eidos.langs.t(path as Parameters<typeof eidos.langs.t>[0], params, locale);
// langs.t returns the path itself when missing — fall back to // langs.t returns the path itself when missing — fall back to
// the captured children text if available. // the captured children text if available.
if (result === path && capturedText) return capturedText; if (result === path && capturedText) return capturedText;
@ -66,7 +66,7 @@
// idlangrefs (`#?path|fallback`) and literal strings alike. // idlangrefs (`#?path|fallback`) and literal strings alike.
const source = value ?? capturedText; const source = value ?? capturedText;
if (source === undefined) return ''; if (source === undefined) return '';
return uix.langs.ts(source as LangString, locale); return eidos.langs.ts(source as LangString, locale);
}); });
// `hasSource` is true once we have any source string to render. // `hasSource` is true once we have any source string to render.

Loading…
Cancel
Save

Powered by TurnKey Linux.