getCampaignTranslation(name))}
+ name="campaigns"
+ />
campaign
. If you want to delete the objective, you must first
@@ -622,7 +602,17 @@ export default function ObjectiveCard({
This objective is used in the{' '}
- {campaignList}{' '}
+ (
+
+ {getCampaignTranslation(name)}
+
+ ))}
+ name="campaigns"
+ />{' '}
campaign
.
diff --git a/hera/editor/lib/getMapValidationErrorText.tsx b/hera/editor/lib/getMapValidationErrorText.tsx
index 9ac681ed..0df14b4f 100644
--- a/hera/editor/lib/getMapValidationErrorText.tsx
+++ b/hera/editor/lib/getMapValidationErrorText.tsx
@@ -1,5 +1,5 @@
import { ErrorReason } from '@deities/athena/lib/validateMap.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
export default function getValidationErrorText(error?: ErrorReason) {
const errors = {
diff --git a/hera/editor/panels/DesignPanel.tsx b/hera/editor/panels/DesignPanel.tsx
index 8800db4b..fb7827c4 100644
--- a/hera/editor/panels/DesignPanel.tsx
+++ b/hera/editor/panels/DesignPanel.tsx
@@ -40,7 +40,7 @@ import InlineLink from '@deities/ui/InlineLink.tsx';
import Stack from '@deities/ui/Stack.tsx';
import { css, cx } from '@emotion/css';
import Fill from '@iconify-icons/pixelarticons/fill-half.js';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { useCallback, useMemo } from 'react';
import InlineTileList, { SelectTileFn } from '../../card/InlineTileList.tsx';
import useGridNavigation from '../../hooks/useGridNavigation.tsx';
diff --git a/hera/editor/panels/EntityPanel.tsx b/hera/editor/panels/EntityPanel.tsx
index a5b42980..7aa8b08e 100644
--- a/hera/editor/panels/EntityPanel.tsx
+++ b/hera/editor/panels/EntityPanel.tsx
@@ -28,7 +28,7 @@ import Slider from '@deities/ui/Slider.tsx';
import Stack from '@deities/ui/Stack.tsx';
import { css } from '@emotion/css';
import Heart from '@iconify-icons/pixelarticons/heart.js';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { ChangeEvent, Fragment, useCallback, useEffect, useMemo } from 'react';
import AttributeGrid from '../../card/AttributeGrid.tsx';
import { useSprites } from '../../hooks/useSprites.tsx';
diff --git a/hera/editor/panels/EvaluationPanel.tsx b/hera/editor/panels/EvaluationPanel.tsx
index 1925c709..51ca967a 100644
--- a/hera/editor/panels/EvaluationPanel.tsx
+++ b/hera/editor/panels/EvaluationPanel.tsx
@@ -14,9 +14,9 @@ import ErrorText from '@deities/ui/ErrorText.tsx';
import Spinner from '@deities/ui/Spinner.tsx';
import Stack from '@deities/ui/Stack.tsx';
import { css } from '@emotion/css';
+import { List } from 'fbtee';
import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';
import useClientGameAction from '../../hooks/useClientGameAction.tsx';
-import intlList, { Conjunctions, Delimiters } from '../../i18n/intlList.tsx';
import getTranslatedFactionName from '../../lib/getTranslatedFactionName.tsx';
import { StateWithActions } from '../../Types.tsx';
import MiniPlayerIcon from '../../ui/MiniPlayerIcon.tsx';
@@ -30,10 +30,10 @@ type Result = Readonly<{
const RUNS = 10;
const Rounds = ({ results }: { results: ReadonlyArray }) => (
-
+ <>
Rounds:{' '}
{results.map(({ turns }) => turns).join(', ')}
-
+ >
);
export default function EvaluationPanel({
@@ -143,7 +143,10 @@ export default function EvaluationPanel({
- Draw:{' '}
+
+ Draw
+
+ :{' '}
{results.length}{' '}
id)
.values(),
];
- const winnerList = intlList(
- winners.map(
- getTranslatedFactionName.bind(null, state.playerDetails),
- ),
- Conjunctions.AND,
- Delimiters.COMMA,
- );
return (
@@ -184,7 +180,15 @@ export default function EvaluationPanel({
- {winnerList}:{' '}
+
+ :{' '}
{results.length}{' '}
+
import isPresent from '@deities/hephaestus/isPresent.tsx';
import AvailableLanguages from '@deities/i18n/AvailableLanguages.tsx';
import { Fonts } from '@deities/ui/CSS.tsx';
import Storage from '@deities/ui/Storage.tsx';
-import { TranslationDict } from 'fbt';
+import { TranslationDictionary, TranslationTable } from 'fbtee';
type LocaleLoaderFn = (
locale: string,
-) => Promise<{ [hashKey: string]: unknown }>;
+) => Promise<{ [hashKey: string]: TranslationTable }>;
const key = 'locale';
const _defaultLanguage = 'en_US';
const availableLocales = new Map();
-const translations: TranslationDict = { [_defaultLanguage]: {} };
+const translations: TranslationDictionary = { [_defaultLanguage]: {} };
for (const [locale] of AvailableLanguages) {
availableLocales.set(locale, locale);
diff --git a/hera/i18n/intlList.tsx b/hera/i18n/intlList.tsx
deleted file mode 100644
index 87b262ea..00000000
--- a/hera/i18n/intlList.tsx
+++ /dev/null
@@ -1,167 +0,0 @@
-/* eslint-disable @deities/require-fbt-description */
-import { isValidElement, ReactElement, ReactNode } from 'react';
-
-export const Conjunctions = {
- AND: 'AND',
- NONE: 'NONE',
- OR: 'OR',
-} as const;
-
-export const Delimiters = {
- BULLET: 'BULLET',
- COMMA: 'COMMA',
- SEMICOLON: 'SEMICOLON',
-} as const;
-
-type Conjunction = keyof typeof Conjunctions;
-type Delimiter = keyof typeof Delimiters;
-
-export default function intList(
- items: ReadonlyArray,
- conjunction: Conjunction,
- delimiter: Delimiter,
-): ReactNode {
- if (process.env.NODE_ENV === 'development') {
- items.forEach((item) => {
- if (typeof item !== 'string' && !isValidElement(item)) {
- throw new Error('Must provide a string or ReactComponent to intlList.');
- }
- });
- }
-
- const count = items.length;
- if (count === 0) {
- return '';
- } else if (count === 1) {
- return items[0];
- }
-
- const lastItem = items[count - 1];
- let output: ReactNode = items[0];
- for (let i = 1; i < count - 1; ++i) {
- switch (delimiter) {
- case Delimiters.SEMICOLON:
- output = (
-
- {output}
- {'; '}
- {items[i]}
-
- );
- break;
- case Delimiters.BULLET:
- output = (
-
- {output} •{' '}
- {items[i]}
-
- );
- break;
- default:
- output = (
-
- {output}
- {', '}
- {items[i]}
-
- );
- }
- }
-
- switch (conjunction) {
- case Conjunctions.AND:
- return (
-
- {output}
- and
- {lastItem}
-
- );
-
- case Conjunctions.OR:
- return (
-
- {output}
- or
- {lastItem}
-
- );
- case Conjunctions.NONE:
- switch (delimiter) {
- case Delimiters.SEMICOLON:
- return (
-
- {output}
- {'; '}
- {lastItem}
-
- );
- case Delimiters.BULLET:
- return (
-
- {output} •{' '}
- {lastItem}
-
- );
- default:
- return (
-
- {output}
- {', '}
- {lastItem}
-
- );
- }
- default:
- throw new Error(
- `fbt: Invalid conjunction '${conjunction}' provided to 'intlList'.`,
- );
- }
-}
diff --git a/hera/invasions/getCrystalDescription.tsx b/hera/invasions/getCrystalDescription.tsx
index d1446685..69210ff6 100644
--- a/hera/invasions/getCrystalDescription.tsx
+++ b/hera/invasions/getCrystalDescription.tsx
@@ -4,7 +4,7 @@ import {
MaxChaosStars,
} from '@deities/athena/invasions/Crystal.tsx';
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
export default function getCrystalDescription(crystal: Crystal) {
switch (crystal) {
diff --git a/hera/invasions/getTranslatedCrystalName.tsx b/hera/invasions/getTranslatedCrystalName.tsx
index 291554f4..f10ac8c3 100644
--- a/hera/invasions/getTranslatedCrystalName.tsx
+++ b/hera/invasions/getTranslatedCrystalName.tsx
@@ -1,6 +1,6 @@
import { Crystal } from '@deities/athena/invasions/Crystal.tsx';
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
export default function getTranslatedCrystalName(crystal: Crystal) {
switch (crystal) {
diff --git a/hera/lib/abandonInvasion.tsx b/hera/lib/abandonInvasion.tsx
index 56454018..2aeda7db 100644
--- a/hera/lib/abandonInvasion.tsx
+++ b/hera/lib/abandonInvasion.tsx
@@ -1,4 +1,4 @@
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { State, StateLike } from '../Types.tsx';
import AnimationKey from './AnimationKey.tsx';
import getUserDisplayName from './getUserDisplayName.tsx';
diff --git a/hera/lib/addEndTurnAnimations.tsx b/hera/lib/addEndTurnAnimations.tsx
index 4b52da8a..4bf7e92d 100644
--- a/hera/lib/addEndTurnAnimations.tsx
+++ b/hera/lib/addEndTurnAnimations.tsx
@@ -16,7 +16,7 @@ import Vector, {
sortVectors,
} from '@deities/athena/map/Vector.tsx';
import ImmutableMap from '@nkzw/immutable-map';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import NullBehavior from '../behavior/NullBehavior.tsx';
import { Actions, State, StateToStateLike } from '../Types.tsx';
import animateHeal from './animateHeal.tsx';
diff --git a/hera/lib/addPlayerLoseAnimation.tsx b/hera/lib/addPlayerLoseAnimation.tsx
index 23337685..4303723e 100644
--- a/hera/lib/addPlayerLoseAnimation.tsx
+++ b/hera/lib/addPlayerLoseAnimation.tsx
@@ -1,7 +1,7 @@
import Player from '@deities/athena/map/Player.tsx';
import Unit from '@deities/athena/map/Unit.tsx';
import { sortVectors } from '@deities/athena/map/Vector.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import NullBehavior from '../behavior/NullBehavior.tsx';
import { Actions, State, StateToStateLike } from '../Types.tsx';
import AnimationKey from './AnimationKey.tsx';
diff --git a/hera/lib/animatePoison.tsx b/hera/lib/animatePoison.tsx
index 6e781f65..9cb008cf 100644
--- a/hera/lib/animatePoison.tsx
+++ b/hera/lib/animatePoison.tsx
@@ -2,7 +2,7 @@ import { UnitsWithPosition } from '@deities/athena/lib/getUnitsByPositions.tsx';
import { PoisonDamage } from '@deities/athena/map/Configuration.tsx';
import Unit from '@deities/athena/map/Unit.tsx';
import Vector from '@deities/athena/map/Vector.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { resetBehavior } from '../behavior/Behavior.tsx';
import NullBehavior from '../behavior/NullBehavior.tsx';
import { State, StateLike, StateToStateLike } from '../Types.tsx';
diff --git a/hera/lib/animateSupply.tsx b/hera/lib/animateSupply.tsx
index 68795161..32e050bf 100644
--- a/hera/lib/animateSupply.tsx
+++ b/hera/lib/animateSupply.tsx
@@ -1,7 +1,7 @@
import { UnitsWithPosition } from '@deities/athena/lib/getUnitsByPositions.tsx';
import Unit from '@deities/athena/map/Unit.tsx';
import Vector from '@deities/athena/map/Vector.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { resetBehavior } from '../behavior/Behavior.tsx';
import NullBehavior from '../behavior/NullBehavior.tsx';
import { State, StateLike, StateToStateLike } from '../Types.tsx';
diff --git a/hera/lib/getCoverName.tsx b/hera/lib/getCoverName.tsx
index 9458ebb5..c6cf83a0 100644
--- a/hera/lib/getCoverName.tsx
+++ b/hera/lib/getCoverName.tsx
@@ -1,4 +1,4 @@
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
const getCover = (cover: number) => {
if (cover === Number.POSITIVE_INFINITY) {
diff --git a/hera/lib/getCriteriaName.tsx b/hera/lib/getCriteriaName.tsx
index ab87acb2..6ecbb990 100644
--- a/hera/lib/getCriteriaName.tsx
+++ b/hera/lib/getCriteriaName.tsx
@@ -1,6 +1,6 @@
import { Criteria } from '@deities/athena/Objectives.tsx';
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
export default function getCriteriaName(criteria: Criteria) {
switch (criteria) {
diff --git a/hera/lib/getInvasionNoticeAnimation.tsx b/hera/lib/getInvasionNoticeAnimation.tsx
index 81b75cbd..bfc17adf 100644
--- a/hera/lib/getInvasionNoticeAnimation.tsx
+++ b/hera/lib/getInvasionNoticeAnimation.tsx
@@ -1,6 +1,6 @@
import { Crystal } from '@deities/athena/invasions/Crystal.tsx';
import { PlayerID } from '@deities/athena/map/Player.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { Animations } from '../MapAnimations.tsx';
import { PlayerDetails } from '../Types.tsx';
import AnimationKey from './AnimationKey.tsx';
diff --git a/hera/lib/getMapSizeName.tsx b/hera/lib/getMapSizeName.tsx
index 52c67a3e..ef390f4f 100644
--- a/hera/lib/getMapSizeName.tsx
+++ b/hera/lib/getMapSizeName.tsx
@@ -1,5 +1,5 @@
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
export type MapSize =
| 'Large'
diff --git a/hera/lib/getSkillConfigForDisplay.tsx b/hera/lib/getSkillConfigForDisplay.tsx
index 2a474cfc..e71d0dd4 100644
--- a/hera/lib/getSkillConfigForDisplay.tsx
+++ b/hera/lib/getSkillConfigForDisplay.tsx
@@ -33,7 +33,7 @@ import Shield from '@iconify-icons/pixelarticons/shield.js';
import Ship from '@iconify-icons/pixelarticons/ship.js';
import SpeedSlow from '@iconify-icons/pixelarticons/speed-slow.js';
import Zap from '@iconify-icons/pixelarticons/zap.js';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
type SkillConfig = Readonly<{
alpha?: number;
diff --git a/hera/lib/getTranslatedBiomeName.tsx b/hera/lib/getTranslatedBiomeName.tsx
index aac91778..c4812f89 100644
--- a/hera/lib/getTranslatedBiomeName.tsx
+++ b/hera/lib/getTranslatedBiomeName.tsx
@@ -1,6 +1,6 @@
import { Biome } from '@deities/athena/map/Biome.tsx';
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
export default function getTranslatedBiomeName(biome: Biome) {
switch (biome) {
diff --git a/hera/lib/getTranslatedColorName.tsx b/hera/lib/getTranslatedColorName.tsx
index 493783da..72ace6a1 100644
--- a/hera/lib/getTranslatedColorName.tsx
+++ b/hera/lib/getTranslatedColorName.tsx
@@ -1,6 +1,6 @@
import { PlayerID } from '@deities/athena/map/Player.tsx';
import { playerToColor } from '@deities/ui/getColor.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
const capitalizedColor = (player: PlayerID) => {
const color = playerToColor(player);
diff --git a/hera/lib/getTranslatedEntityName.tsx b/hera/lib/getTranslatedEntityName.tsx
index 6deccbc1..52a0269b 100644
--- a/hera/lib/getTranslatedEntityName.tsx
+++ b/hera/lib/getTranslatedEntityName.tsx
@@ -1,6 +1,6 @@
import { EntityGroup, EntityType } from '@deities/athena/map/Entity.tsx';
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
export default function getTranslatedEntityName(entityType: EntityType) {
switch (entityType) {
diff --git a/hera/lib/getTranslatedFactionName.tsx b/hera/lib/getTranslatedFactionName.tsx
index 92fadbfd..60a79178 100644
--- a/hera/lib/getTranslatedFactionName.tsx
+++ b/hera/lib/getTranslatedFactionName.tsx
@@ -1,6 +1,6 @@
import { PlayerID } from '@deities/athena/map/Player.tsx';
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { PlayerDetails } from '../Types.tsx';
import getTranslatedColorName from './getTranslatedColorName.tsx';
diff --git a/hera/lib/getTranslatedTileTypeName.tsx b/hera/lib/getTranslatedTileTypeName.tsx
index a5b7b0e4..93008e81 100644
--- a/hera/lib/getTranslatedTileTypeName.tsx
+++ b/hera/lib/getTranslatedTileTypeName.tsx
@@ -1,6 +1,6 @@
import { TileType, TileTypes } from '@deities/athena/info/Tile.tsx';
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
export default function getTranslatedTileTypeName(tileType: TileType) {
switch (tileType) {
diff --git a/hera/lib/getUserDisplayName.tsx b/hera/lib/getUserDisplayName.tsx
index 548511c9..e45ce23c 100644
--- a/hera/lib/getUserDisplayName.tsx
+++ b/hera/lib/getUserDisplayName.tsx
@@ -1,5 +1,5 @@
import { PlayerID } from '@deities/athena/map/Player.tsx';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { PlayerDetails } from '../Types.tsx';
export default function getUserDisplayName(
diff --git a/hera/objectives/ObjectiveDescription.tsx b/hera/objectives/ObjectiveDescription.tsx
index 5184e066..1a614920 100644
--- a/hera/objectives/ObjectiveDescription.tsx
+++ b/hera/objectives/ObjectiveDescription.tsx
@@ -11,7 +11,7 @@ import getColor from '@deities/ui/getColor.tsx';
import gradient from '@deities/ui/gradient.tsx';
import Stack from '@deities/ui/Stack.tsx';
import { css } from '@emotion/css';
-import intlList, { Conjunctions, Delimiters } from '../i18n/intlList.tsx';
+import { list } from 'fbtee';
import getTranslatedFactionName from '../lib/getTranslatedFactionName.tsx';
import { PlayerDetails } from '../Types.tsx';
import UILabel from '../ui/UILabel.tsx';
@@ -27,14 +27,13 @@ const PlayerList = ({
players: PlayerIDs;
}) =>
players.length ? (
- intlList(
+ list(
players.map((id) => (
{getTranslatedFactionName(playerDetails, id)}
)),
- Conjunctions[conjunction === 'or' ? 'OR' : 'AND'],
- Delimiters.COMMA,
+ conjunction,
)
) : (
@@ -65,12 +64,7 @@ const ObjectiveText = ({
))) ||
null;
const labelList =
- labels &&
- intlList(
- labels,
- type === Criteria.DefeatOneLabel ? Conjunctions.OR : Conjunctions.AND,
- Delimiters.COMMA,
- );
+ labels && list(labels, type === Criteria.DefeatOneLabel ? 'or' : 'and');
switch (type) {
case Criteria.Default:
diff --git a/hera/package.json b/hera/package.json
index cd2a6e17..b9f7f061 100644
--- a/hera/package.json
+++ b/hera/package.json
@@ -23,7 +23,7 @@
"@nkzw/immutable-map": "^1.2.2",
"@nkzw/use-relative-time": "^1.1.0",
"array-shuffle": "^3.0.0",
- "fbt": "^1.0.2",
+ "fbtee": "^0.2.0",
"framer-motion": "^11.15.0",
"react": "19.0.0",
"react-dom": "19.0.0",
diff --git a/hera/types/Fbt.tsx b/hera/types/Fbt.tsx
deleted file mode 100644
index 41faf5ab..00000000
--- a/hera/types/Fbt.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-import type { fbt } from 'fbt';
-
-export type Fbt = ReturnType;
diff --git a/hera/ui/ErrorOverlay.tsx b/hera/ui/ErrorOverlay.tsx
index 31b3f4d9..24dbf862 100644
--- a/hera/ui/ErrorOverlay.tsx
+++ b/hera/ui/ErrorOverlay.tsx
@@ -3,7 +3,7 @@ import useAlert from '@deities/ui/hooks/useAlert.tsx';
import captureException from '@deities/ui/lib/captureException.tsx';
import Stack from '@deities/ui/Stack.tsx';
import { css } from '@emotion/css';
-import { fbt } from 'fbt';
+import { fbt } from 'fbtee';
import { useEffect } from 'react';
export class SpriteLoadError extends Error {}
diff --git a/hera/ui/GameDialog.tsx b/hera/ui/GameDialog.tsx
index bbcd2b32..f31bd8da 100644
--- a/hera/ui/GameDialog.tsx
+++ b/hera/ui/GameDialog.tsx
@@ -44,7 +44,6 @@ import Subscriptions from '@iconify-icons/pixelarticons/subscriptions.js';
import Trophy from '@iconify-icons/pixelarticons/trophy.js';
import Zap from '@iconify-icons/pixelarticons/zap.js';
import {
- Fragment,
memo,
ReactElement,
useCallback,
@@ -383,10 +382,10 @@ const MapPerformance = ({
without losing a unit to secure the{' '}
{
-
+ <>
{getTranslatedPerformanceTypeName('power')}
-
+ >
}
{' '}
star.
@@ -461,19 +460,19 @@ const GameInfoPanel = memo(function GameInfoPanel({
const endGameText = useMemo(
() => (
-
+ <>
{canAbandon ? (
Abandon
) : (
Give Up
)}
-
+ >
),
[canAbandon],
);
const endGameExplanation = useMemo(
() => (
-
+ <>
{canAbandon ? (
Are you sure you want to abandon this map? You will not receive any
@@ -484,7 +483,7 @@ const GameInfoPanel = memo(function GameInfoPanel({
Are you sure you want to give up and restart this map?
)}
-
+ >
),
[canAbandon],
);
diff --git a/hera/ui/SkillDescription.tsx b/hera/ui/SkillDescription.tsx
index 26733b1f..b2fd65b6 100644
--- a/hera/ui/SkillDescription.tsx
+++ b/hera/ui/SkillDescription.tsx
@@ -81,9 +81,9 @@ import { css, cx } from '@emotion/css';
import Charge from '@iconify-icons/pixelarticons/ac.js';
import Coin from '@iconify-icons/pixelarticons/coin.js';
import WarningBox from '@iconify-icons/pixelarticons/warning-box.js';
+import { List, list } from 'fbtee';
import { Fragment, memo } from 'react';
import BuildingTile from '../Building.tsx';
-import intlList, { Conjunctions, Delimiters } from '../i18n/intlList.tsx';
import getTranslatedCrystalName from '../invasions/getTranslatedCrystalName.tsx';
import getSkillConfigForDisplay from '../lib/getSkillConfigForDisplay.tsx';
import getTranslatedTileTypeName from '../lib/getTranslatedTileTypeName.tsx';
@@ -95,7 +95,7 @@ const canBuildBar = (unitCosts: ReadonlyMap) =>
);
const RawUnitName = ({ color, unit }: { color: BaseColor; unit: UnitInfo }) => (
-
+ <>
(
>
{unit.name}
-
+ >
);
const UnitName = ({ color, unit }: { color: BaseColor; unit: UnitInfo }) => (
@@ -135,15 +135,12 @@ const UnitNames = ({
units: ReadonlyArray;
}) => (
-
- {intlList(
- units.map((unit, index) => (
-
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )}
- {' '}
+ (
+
+ ))}
+ name="units"
+ />{' '}
units
);
@@ -236,7 +233,7 @@ const UnitStatusEffects = ({
type: 'attack' | 'defense';
}) =>
effects.size
- ? intlList(
+ ? list(
groupUnitTypes(effects).map(([effect, units], index) => (
)),
- Conjunctions.AND,
- Delimiters.COMMA,
)
: null;
@@ -280,20 +275,17 @@ const UnitRange = ({
range.size ? (
Changes the range of{' '}
-
- {intlList(
- [...range].map(([unit, range], index) => (
-
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )}
-
+ (
+
+ ))}
+ name="list"
+ />
) : null;
@@ -331,20 +323,20 @@ const MovementTypeStatusEffect = ({
effects: ReadonlyMap;
type: 'attack' | 'defense';
}) =>
- effects.size
- ? intlList(
- groupMovementTypes(effects).map(([effect, movementTypes], index) => (
+ effects.size ? (
+ (
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )
- : null;
+ ),
+ )}
+ />
+ ) : null;
const TileTypeStatusEffect = ({
effects: initialEffects,
@@ -368,32 +360,27 @@ const TileTypeStatusEffect = ({
]);
}
- return inverseEffects.size
- ? intlList(
- [...inverseEffects].map(([movementTypes, tileTypes], index) => (
-
-
-
-
- {' '}
- on{' '}
-
- {intlList(
- tileTypes.map((tileType, index) => (
-
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )}
- {' '}
- fields
-
-
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )
- : null;
+ return inverseEffects.size ? (
+ (
+
+
+
+
+ {' '}
+ on{' '}
+ (
+
+ ))}
+ name="tileType"
+ />{' '}
+ fields
+
+
+ ))}
+ />
+ ) : null;
};
const BuildingName = ({
@@ -445,9 +432,9 @@ const UnitCost = ({
{' '}
for
-
+ <>
{cost}
-
+ >
) : (
@@ -457,9 +444,9 @@ const UnitCost = ({
for
-
+ <>
{cost}
-
+ >
);
@@ -471,26 +458,23 @@ const UnitCosts = ({
color: BaseColor;
costs: ReadonlyMap;
}) => (
-
+ <>
Build
-
- {intlList(
- [...costs].map(([unit, cost], index) => (
-
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )}
- .
+ (
+
+ ))}
+ name="list"
+ />.
{canBuildBar(costs) ? (
-
+ <>
{' '}
Enables constructing
@@ -499,9 +483,9 @@ const UnitCosts = ({
{' '}
buildings.
-
+ >
) : null}
-
+ >
);
const UnitBlocks = ({
@@ -513,15 +497,12 @@ const UnitBlocks = ({
}) => (
Cannot build
-
- {intlList(
- [...blocked].map((unit, index) => (
-
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )}
- .
+ (
+
+ ))}
+ name="list"
+ />.
);
@@ -541,14 +522,13 @@ const MovementTypeNames = ({
movementTypes,
}: {
movementTypes: ReadonlyArray;
-}) =>
- intlList(
- movementTypes.map((movementType, index) => (
+}) => (
+ (
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- );
+ ))}
+ />
+);
const TileTypeName = ({ tileType }: { tileType: TileType }) => (
;
}) => (
-
- {intlList(
- groupMovementTypes(movement).map(([radius, movementTypes], index) => (
+ (
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
+ ),
)}
-
+ name="list"
+ />
);
@@ -611,7 +590,7 @@ const ActiveUnitType = ({
return typeof type === 'number' ? (
) : isVector(type) ? (
-
+
Position {`(${type.x},${type.y})`}
) : (
@@ -629,15 +608,15 @@ const HealTypes = ({
{types === 'all' ? (
- all units
+
+ all units
+
) : (
- intlList(
- [...types].map((type, index) => (
+ (
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )
+ ))}
+ />
)}
{' '}
units are healed by {`${HealAmount}%`}
@@ -1138,7 +1117,9 @@ export default memo(function SkillDescription({
) : null,
effects.length ? (
- <>{intlList(effects, Conjunctions.AND, Delimiters.COMMA)}.>
+ <>
+
.
+ >
) : null,
isPower && activateOnInvasion ? (
@@ -1263,19 +1244,16 @@ export const SkillUnlockDescription = ({
unlockContent = (
Unlocks{' '}
-
- {intlList(
- [...costs].map(([unit], index) => (
-
- )),
- Conjunctions.AND,
- Delimiters.COMMA,
- )}
- {' '}
+ (
+
+ ))}
+ name="list"
+ />{' '}
and the{' '}
diff --git a/hera/ui/lib/formatCharacterText.tsx b/hera/ui/lib/formatCharacterText.tsx
index fc421a0f..514ab1fb 100644
--- a/hera/ui/lib/formatCharacterText.tsx
+++ b/hera/ui/lib/formatCharacterText.tsx
@@ -9,8 +9,7 @@ import MapData from '@deities/athena/MapData.tsx';
import parseInteger from '@deities/hephaestus/parseInteger.tsx';
import { formatInputNames } from '@deities/ui/controls/formatInputNames.tsx';
import { getGamepadType } from '@deities/ui/controls/setupGamePad.tsx';
-import { fbt } from 'fbt';
-import intlList, { Conjunctions, Delimiters } from '../../i18n/intlList.tsx';
+import { fbt, list } from 'fbtee';
import getTranslatedFactionName from '../../lib/getTranslatedFactionName.tsx';
import getUserDisplayName from '../../lib/getUserDisplayName.tsx';
import { PlayerDetails } from '../../Types.tsx';
@@ -29,7 +28,7 @@ export default function formatCharacterText(
[
'opponents',
String(
- intlList(
+ list(
[...playerDetails]
.filter(
([playerID]) =>
@@ -37,8 +36,6 @@ export default function formatCharacterText(
map.isOpponent(playerID, player),
)
.map(([playerID]) => getUserDisplayName(playerDetails, playerID)),
- Conjunctions.AND,
- Delimiters.COMMA,
),
) ||
fbt(
diff --git a/i18n/Common.cjs b/i18n/Common.cjs
deleted file mode 100644
index 7bad63ca..00000000
--- a/i18n/Common.cjs
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- ...require('./Entities.cjs'),
-};
diff --git a/i18n/Common.ts b/i18n/Common.ts
new file mode 100644
index 00000000..58040df5
--- /dev/null
+++ b/i18n/Common.ts
@@ -0,0 +1 @@
+export { default } from './Entities.ts';
diff --git a/infra/babelPlugins.tsx b/infra/babelPlugins.tsx
deleted file mode 100644
index bef6ff55..00000000
--- a/infra/babelPlugins.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { join } from 'node:path';
-import babelPluginFbt from 'babel-plugin-fbt';
-import babelPluginFbtImport from 'babel-plugin-fbt-import';
-import babelPluginFbtRuntime from 'babel-plugin-fbt-runtime';
-import isOpenSource from './isOpenSource.tsx';
-import root from './root.ts';
-
-const enumManifest = (() => {
- try {
- return require('../ares/.enum_manifest.json');
- } catch {
- if (!isOpenSource()) {
- throw new Error('babelPlugins: Missing enum manifest.');
- }
- }
- return {};
-})();
-
-export default [
- babelPluginFbtImport,
- [
- babelPluginFbt,
- {
- extraOptions: { __self: true },
- fbtCommonPath: join(root, 'i18n/Common.cjs'),
- fbtEnumManifest: enumManifest,
- },
- ],
- babelPluginFbtRuntime,
-];
diff --git a/infra/babelPresets.tsx b/infra/babelPresets.tsx
new file mode 100644
index 00000000..ae8a4832
--- /dev/null
+++ b/infra/babelPresets.tsx
@@ -0,0 +1,25 @@
+import fbteePreset from '@nkzw/babel-preset-fbtee';
+import fbtCommon from '../i18n/Common.ts';
+import isOpenSource from './isOpenSource.tsx';
+
+const enumManifest = (() => {
+ try {
+ return require('../ares/.enum_manifest.json');
+ } catch {
+ if (!isOpenSource()) {
+ throw new Error('babelPresets: Missing enum manifest.');
+ }
+ }
+ return {};
+})();
+
+export default [
+ [
+ fbteePreset,
+ {
+ extraOptions: { __self: true },
+ fbtCommon,
+ fbtEnumManifest: enumManifest,
+ },
+ ],
+];
diff --git a/package.json b/package.json
index 86707e9b..42f1dbec 100644
--- a/package.json
+++ b/package.json
@@ -59,15 +59,13 @@
"@babel/plugin-syntax-typescript": "^7.25.9",
"@deities/eslint-plugin": "workspace:*",
"@ianvs/prettier-plugin-sort-imports": "^4.4.0",
+ "@nkzw/babel-preset-fbtee": "^0.2.0",
"@nkzw/eslint-config": "^1.19.0",
+ "@nkzw/eslint-plugin-fbtee": "^0.2.0",
"@styled/typescript-styled-plugin": "^1.0.1",
"@swc/core": "^1.10.4",
- "@types/fbt": "^1.0.5",
"@types/node": "^22.10.4",
"@vitejs/plugin-react": "^4.3.4",
- "babel-plugin-fbt": "^1.0.0",
- "babel-plugin-fbt-import": "^0.1.0",
- "babel-plugin-fbt-runtime": "^1.0.0",
"chalk": "^5.4.1",
"dotenv": "^16.4.7",
"eslint": "^8.57.0",
@@ -93,9 +91,6 @@
"react",
"react-dom",
"utf-8-validate"
- ],
- "ignoreMissing": [
- "@fbtjs/default-collection-transform"
]
},
"neverBuiltDependencies": [
@@ -113,7 +108,6 @@
"patchedDependencies": {
"@remix-run/router": "patches/@remix-run__router.patch",
"eslint-plugin-import": "patches/eslint-plugin-import.patch",
- "fbt@1.0.2": "patches/fbt@1.0.2.patch",
"graphql-helix@1.13.0": "patches/graphql-helix@1.13.0.patch",
"howler@2.2.4": "patches/howler@2.2.4.patch",
"require-in-the-middle": "patches/require-in-the-middle.patch",
diff --git a/patches/fbt@1.0.2.patch b/patches/fbt@1.0.2.patch
deleted file mode 100644
index 150b77eb..00000000
--- a/patches/fbt@1.0.2.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-diff --git a/lib/FbtReactUtil.js b/lib/FbtReactUtil.js
-index becb60e893478abf6b5edf1baa176c69b009d33f..6a0b62f647f23a5688fed5c6e5b3df801af379d8 100644
---- a/lib/FbtReactUtil.js
-+++ b/lib/FbtReactUtil.js
-@@ -16,7 +16,7 @@
- * @noformat
- * @nogrep
- */
--var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol["for"] && Symbol["for"]('react.element') || 0xeac7;
-+var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol["for"] && Symbol["for"]('react.transitional.element') || 0xeac7;
- var canDefineProperty = false;
-
- if (process.env.NODE_ENV !== "production") {
-diff --git a/lib/substituteTokens.js b/lib/substituteTokens.js
-index 144db1d6553417bb9ec67f537c40c0c4cc4f0067..3061f41cf04dce35f5868c14bbfa2bd75cca10eb 100644
---- a/lib/substituteTokens.js
-+++ b/lib/substituteTokens.js
-@@ -39,17 +39,28 @@ function markAsSafeForReact(object) {
- if (process.env.NODE_ENV !== "production") {
- // If this looks like a ReactElement, mark it as safe to silence any
- // key warnings.
-- // I use a string key to avoid any possible private variable transforms.
-- var storeKey = '_store';
-- var store = object[storeKey];
-
-- if (object.type != null && object.type != '' && typeof object.props === 'object' && store != null && typeof store === 'object' && typeof store.validated === 'boolean') {
-- store.validated = true;
-+ // I use a string key to avoid any possible private variable transforms.
-+ const storeKey = '_store';
-+
-+ const store = object[storeKey];
-+ if (
-+ object.type != null &&
-+ object.type != '' &&
-+ typeof object.props === 'object' &&
-+ store != null &&
-+ typeof store === 'object'
-+ ) {
-+ if (typeof store.validated === 'number') {
-+ store.validated = 1;
-+ } else if (typeof store.validated === 'boolean') {
-+ store.validated = true;
-+ }
- }
- }
--
- return object;
- }
-+
- /**
- * Does the token substitution fbt() but without the string lookup.
- * Used for in-place substitutions in translation mode.
-@@ -66,12 +77,6 @@ function substituteTokens(template, args, errorListener) {
- var objectPieces = [];
- var argNames = [];
- var stringPieces = template.replace(parameterRegexp, function (_match, parameter, punctuation) {
-- if (!hasOwnProperty.call(args, parameter)) {
-- var _errorListener$onMiss;
--
-- errorListener === null || errorListener === void 0 ? void 0 : (_errorListener$onMiss = errorListener.onMissingParameterError) === null || _errorListener$onMiss === void 0 ? void 0 : _errorListener$onMiss.call(errorListener, Object.keys(args), parameter);
-- }
--
- var argument = args[parameter];
-
- if (argument != null && typeof argument === 'object') {
-@@ -80,7 +85,7 @@ function substituteTokens(template, args, errorListener) {
-
- return '\x17' + punctuation;
- } else if (argument == null) {
-- return '';
-+ return '{' + parameter + '}' + punctuation;
- }
-
- return String(argument) + (0, _IntlPunctuation.dedupeStops)(String(argument), punctuation);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f683f168..525a768c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -15,9 +15,6 @@ patchedDependencies:
eslint-plugin-import:
hash: bydsny2voedhnuh2ubrznxjhie
path: patches/eslint-plugin-import.patch
- fbt@1.0.2:
- hash: h3le5xcbsw44ybdi7qpcrzppny
- path: patches/fbt@1.0.2.patch
graphql-helix@1.13.0:
hash: zltyqk45poay6m4komgvsov4ua
path: patches/graphql-helix@1.13.0.patch
@@ -47,33 +44,27 @@ importers:
'@ianvs/prettier-plugin-sort-imports':
specifier: ^4.4.0
version: 4.4.0(prettier@4.0.0-alpha.10)
+ '@nkzw/babel-preset-fbtee':
+ specifier: ^0.2.0
+ version: 0.2.0
'@nkzw/eslint-config':
specifier: ^1.19.0
version: 1.19.0(eslint@8.57.0)(typescript@5.7.2(patch_hash=icxwwkq44uizmbsct6du47zdsu))
+ '@nkzw/eslint-plugin-fbtee':
+ specifier: ^0.2.0
+ version: 0.2.0(eslint@8.57.0)(typescript@5.7.2(patch_hash=icxwwkq44uizmbsct6du47zdsu))
'@styled/typescript-styled-plugin':
specifier: ^1.0.1
version: 1.0.1
'@swc/core':
specifier: ^1.10.4
version: 1.10.4
- '@types/fbt':
- specifier: ^1.0.5
- version: 1.0.5
'@types/node':
specifier: ^22.10.4
version: 22.10.4
'@vitejs/plugin-react':
specifier: ^4.3.4
version: 4.3.4(vite@6.0.7(@types/node@22.10.4)(jiti@1.21.7)(terser@5.37.0)(yaml@2.7.0))
- babel-plugin-fbt:
- specifier: ^1.0.0
- version: 1.0.0
- babel-plugin-fbt-import:
- specifier: ^0.1.0
- version: 0.1.0
- babel-plugin-fbt-runtime:
- specifier: ^1.0.0
- version: 1.0.0(babel-plugin-fbt@1.0.0)
chalk:
specifier: ^5.4.1
version: 5.4.1
@@ -191,9 +182,9 @@ importers:
cordova-plugin-purchase:
specifier: ^13.12.1
version: 13.12.1
- fbt:
- specifier: ^1.0.2
- version: 1.0.2(patch_hash=h3le5xcbsw44ybdi7qpcrzppny)(babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0))(babel-plugin-fbt@1.0.0)(react@19.0.0)
+ fbtee:
+ specifier: ^0.2.0
+ version: 0.2.0(@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0))(@nkzw/babel-plugin-fbtee@0.2.0)(react@19.0.0)
framer-motion:
specifier: ^11.15.0
version: 11.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -575,9 +566,9 @@ importers:
array-shuffle:
specifier: ^3.0.0
version: 3.0.0
- fbt:
- specifier: ^1.0.2
- version: 1.0.2(patch_hash=h3le5xcbsw44ybdi7qpcrzppny)(babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0))(babel-plugin-fbt@1.0.0)(react@19.0.0)
+ fbtee:
+ specifier: ^0.2.0
+ version: 0.2.0(@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0))(@nkzw/babel-plugin-fbtee@0.2.0)(react@19.0.0)
framer-motion:
specifier: ^11.15.0
version: 11.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -654,9 +645,9 @@ importers:
dunkel-theme:
specifier: ^1.7.1
version: 1.7.1
- fbt:
- specifier: ^1.0.2
- version: 1.0.2(patch_hash=h3le5xcbsw44ybdi7qpcrzppny)(babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0))(babel-plugin-fbt@1.0.0)(react@19.0.0)
+ fbtee:
+ specifier: ^0.2.0
+ version: 0.2.0(@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0))(@nkzw/babel-plugin-fbtee@0.2.0)(react@19.0.0)
framer-motion:
specifier: ^11.15.0
version: 11.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -730,9 +721,9 @@ importers:
array-shuffle:
specifier: ^3.0.0
version: 3.0.0
- fbt:
- specifier: ^1.0.2
- version: 1.0.2(patch_hash=h3le5xcbsw44ybdi7qpcrzppny)(babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0))(babel-plugin-fbt@1.0.0)(react@19.0.0)
+ fbtee:
+ specifier: ^0.2.0
+ version: 0.2.0(@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0))(@nkzw/babel-plugin-fbtee@0.2.0)(react@19.0.0)
framer-motion:
specifier: ^11.15.0
version: 11.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -865,9 +856,9 @@ importers:
chalk:
specifier: ^5.4.1
version: 5.4.1
- fbt:
- specifier: ^1.0.2
- version: 1.0.2(patch_hash=h3le5xcbsw44ybdi7qpcrzppny)(babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0))(babel-plugin-fbt@1.0.0)(react@19.0.0)
+ fbtee:
+ specifier: ^0.2.0
+ version: 0.2.0(@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0))(@nkzw/babel-plugin-fbtee@0.2.0)(react@19.0.0)
jest-image-snapshot:
specifier: ^6.4.0
version: 6.4.0
@@ -910,9 +901,9 @@ importers:
'@emotion/css':
specifier: ^11.13.5
version: 11.13.5
- fbt:
- specifier: ^1.0.2
- version: 1.0.2(patch_hash=h3le5xcbsw44ybdi7qpcrzppny)(babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0))(babel-plugin-fbt@1.0.0)(react@19.0.0)
+ fbtee:
+ specifier: ^0.2.0
+ version: 0.2.0(@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0))(@nkzw/babel-plugin-fbtee@0.2.0)(react@19.0.0)
react:
specifier: 19.0.0
version: 19.0.0
@@ -956,9 +947,9 @@ importers:
'@nkzw/joymap':
specifier: ^3.0.0
version: 3.0.0
- fbt:
- specifier: ^1.0.2
- version: 1.0.2(patch_hash=h3le5xcbsw44ybdi7qpcrzppny)(babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0))(babel-plugin-fbt@1.0.0)(react@19.0.0)
+ fbtee:
+ specifier: ^0.2.0
+ version: 0.2.0(@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0))(@nkzw/babel-plugin-fbtee@0.2.0)(react@19.0.0)
framer-motion:
specifier: ^11.15.0
version: 11.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -1337,17 +1328,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-class-properties@7.12.13':
- resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-flow@7.26.0':
- resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/plugin-syntax-import-assertions@7.26.0':
resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==}
engines: {node: '>=6.9.0'}
@@ -1366,31 +1346,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
- resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-numeric-separator@7.10.4':
- resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-object-rest-spread@7.8.3':
- resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-optional-catch-binding@7.8.3':
- resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-optional-chaining@7.8.3':
- resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/plugin-syntax-typescript@7.25.9':
resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
engines: {node: '>=6.9.0'}
@@ -1499,12 +1454,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-flow-strip-types@7.25.9':
- resolution: {integrity: sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/plugin-transform-for-of@7.25.9':
resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==}
engines: {node: '>=6.9.0'}
@@ -1637,6 +1586,18 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-react-display-name@7.25.9':
+ resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-development@7.25.9':
+ resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-react-jsx-self@7.25.9':
resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==}
engines: {node: '>=6.9.0'}
@@ -1649,6 +1610,18 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-react-jsx@7.25.9':
+ resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-pure-annotations@7.25.9':
+ resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-regenerator@7.25.9':
resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==}
engines: {node: '>=6.9.0'}
@@ -1697,6 +1670,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-typescript@7.26.3':
+ resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-unicode-escapes@7.25.9':
resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==}
engines: {node: '>=6.9.0'}
@@ -1732,8 +1711,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
- '@babel/register@7.25.9':
- resolution: {integrity: sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==}
+ '@babel/preset-react@7.26.3':
+ resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-typescript@7.26.0':
+ resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -2426,11 +2411,30 @@ packages:
peerDependencies:
rollup: ^4.16.4
+ '@nkzw/babel-plugin-fbtee-auto-import@0.2.0':
+ resolution: {integrity: sha512-iOj2EOVQ3fybTnvF1lba2MhrR3ndAQBaoVpmvtAB5F3bQ3GbKw3htF9YBTDATZwxIhrmdmmvTz8rsK0SPkZV8A==}
+
+ '@nkzw/babel-plugin-fbtee-runtime@0.2.0':
+ resolution: {integrity: sha512-StWScPZisSaq1l6Xj4ilqgKCt+SDRw5JBnKQi4cOAmVi+4MDGgAgVAI2TU1Ypnp3y8eN/mM8oWoOOJ+XUPNvFg==}
+ peerDependencies:
+ '@nkzw/babel-plugin-fbtee': ^0.2.0
+
+ '@nkzw/babel-plugin-fbtee@0.2.0':
+ resolution: {integrity: sha512-wdQxtdZGsnHPMSa1B7SS6iIjuqnExeh9oQxu8+TYmo2Yo0o8gyW/aZW4kSWNcM61jcd8pMEcmI6UjYYToNLhVw==}
+ hasBin: true
+
+ '@nkzw/babel-preset-fbtee@0.2.0':
+ resolution: {integrity: sha512-ref96cHAP83Lo3li7XGr+YfWj5Kkhe7VW8isnQDxz6C+eK+noij4Bk4RQLbnPCpkzK7qT9OH+eu2FuF+5wyb3g==}
+ hasBin: true
+
'@nkzw/eslint-config@1.19.0':
resolution: {integrity: sha512-udRBviWy0oBHrOtCE/viXn1Iqy52oC0ex7LsmWnCfXvkfoWCEhK1jxI4pIz+5Ctli03/+9YJxT2cVXA8ikDzPg==}
peerDependencies:
eslint: '>= 8'
+ '@nkzw/eslint-plugin-fbtee@0.2.0':
+ resolution: {integrity: sha512-J70+6sKZdB8ie0tOUO0iiXBwrnryxNTuMUVZr1GKJb5/xu9374ux1Qtzd36sOKRYdjUzWEafpJsm13gyve/mCA==}
+
'@nkzw/eslint-plugin@1.8.0':
resolution: {integrity: sha512-doODSLfA7C6fA/wF20uk9whJIeH0ZydyVb8PlhDBZE0kJaOUSKfZqTKzxflxPF9sGG+Lhr2v/Ih//dzBHp/rxw==}
peerDependencies:
@@ -3823,9 +3827,6 @@ packages:
'@types/express@5.0.0':
resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==}
- '@types/fbt@1.0.5':
- resolution: {integrity: sha512-eSyOYJH6YaMRd3HIy34TArMDgfCw3nJ8ijMc/dCvBRVIxsujZsVO6pYi10rFInPhaY60P7WSYz9SH70tWZ00UA==}
-
'@types/gaussian@1.2.2':
resolution: {integrity: sha512-FLlJb9oGcoq0xVaAmn5ytZWeEO4M7nfudewzqL6FxUUYLR5FB+hEzSYAsuhX7H7M6Mw/Z0rLbIVbQkMqHlRS7g==}
@@ -4352,21 +4353,6 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
- babel-plugin-fbt-import@0.1.0:
- resolution: {integrity: sha512-doOkIPQ5vP4hQsgwlyxqoh61JU9MZ2nbj7WaiqxHKPeT03OFJA/+d5+PvWfDOh6F2qlBKAGbhy0fFiOKwxxU7Q==}
-
- babel-plugin-fbt-runtime@1.0.0:
- resolution: {integrity: sha512-gML1rXqIfc+sDf1DWxu1WJjmotBYr6f9vjKwOoetuOukM1o3mTKNAeBFGEYu7iBACkuaXpIi++qW8/URgHnduQ==}
- peerDependencies:
- babel-plugin-fbt: ^1.0.0
-
- babel-plugin-fbt@1.0.0:
- resolution: {integrity: sha512-Tjpkrt4JJLgtS+x6HzkWdOguH+Pb+pzJmSkBmHIWrjf3x9Pf+xFcQUdAbpDKOtRPgu6QyI9DtDulw0sbgdfYdg==}
- engines: {node: '>= 12.16.0'}
- hasBin: true
- peerDependencies:
- '@fbtjs/default-collection-transform': ^1.0.0
-
babel-plugin-macros@2.8.0:
resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==}
@@ -4509,10 +4495,6 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
- camelcase@5.3.1:
- resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
- engines: {node: '>=6'}
-
caniuse-lite@1.0.30001690:
resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==}
@@ -4580,10 +4562,6 @@ packages:
resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
engines: {node: '>=4'}
- cli-color@0.1.7:
- resolution: {integrity: sha512-xNaQxWYgI6DD4xIJLn8GY2zDZVbrN0vsU1fEbDNAHZRyceWhpj7A08mYcG1AY92q1Aw0geYkVfiAcEYIZtuTSg==}
- engines: {node: '>=0.1.103'}
-
cli-cursor@4.0.0:
resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -4592,12 +4570,9 @@ packages:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
- cliui@6.0.0:
- resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
-
- clone-deep@4.0.1:
- resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
- engines: {node: '>=6'}
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
@@ -4635,9 +4610,6 @@ packages:
resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
engines: {node: '>=4.0.0'}
- commondir@1.0.1:
- resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
-
compressible@2.0.18:
resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
engines: {node: '>= 0.6'}
@@ -4805,10 +4777,6 @@ packages:
supports-color:
optional: true
- decamelize@1.2.0:
- resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
- engines: {node: '>=0.10.0'}
-
decode-named-character-reference@1.0.2:
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
@@ -4913,9 +4881,6 @@ packages:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
- difflib@0.2.4:
- resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==}
-
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -4962,10 +4927,6 @@ packages:
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
engines: {node: '>=12'}
- dreamopt@0.6.0:
- resolution: {integrity: sha512-KRJa47iBEK0y6ZtgCgy2ykuvMT8c9gj3ua9Dv7vCkclFJJeH2FjhGY2xO5qBoWGahsjCGMlk4Cq9wJYeWxuYhQ==}
- engines: {node: '>=0.4.0'}
-
dset@3.1.4:
resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==}
engines: {node: '>=4'}
@@ -5086,10 +5047,6 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
- es5-ext@0.8.2:
- resolution: {integrity: sha512-H19ompyhnKiBdjHR1DPHvf5RHgHPmJaY9JNzFGbMbPgdsUkvnUCN1Ke8J4Y0IMyTwFM2M9l4h2GoHwzwpSmXbA==}
- engines: {node: '>=0.4'}
-
esast-util-from-estree@2.0.0:
resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
@@ -5405,21 +5362,18 @@ packages:
fault@2.0.1:
resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
- fb-babel-plugin-utils@0.13.1:
- resolution: {integrity: sha512-AxAr7ut7v4fzHp5VETGxcDUPmRup5H7bkMNNfxaRunS3jzm2rOS5NLvCPCDnnQIiI6AB0x2GrOx/eIcAOVJAAA==}
-
fbjs-css-vars@1.0.2:
resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==}
fbjs@3.0.5:
resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==}
- fbt@1.0.2:
- resolution: {integrity: sha512-vWIasrcX34OW2EWohjrAQM0jpJBH2FjqxW9XrQd38xhtBVXWaks34ePWBSHO3QEShmirRx6kwJNZJrofsHjvlw==}
+ fbtee@0.2.0:
+ resolution: {integrity: sha512-ZMfX6xmm9kmtU7Pi6SHXcrFODbm1cR/MDCTUlWKZYThHgPqp9Mal8a82Pml0Zf5aj80mXNwt7yhFvo+HwJnTsA==}
peerDependencies:
- babel-plugin-fbt: ^1.0.0
- babel-plugin-fbt-runtime: ^1.0.0
- react: 19.0.0-rc.1
+ '@nkzw/babel-plugin-fbtee': ^0.2.0
+ '@nkzw/babel-plugin-fbtee-runtime': ^0.2.0
+ react: ^19.0.0
fdir@6.4.2:
resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
@@ -5444,10 +5398,6 @@ packages:
resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
engines: {node: '>= 0.8'}
- find-cache-dir@2.1.0:
- resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
- engines: {node: '>=6'}
-
find-root@1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
@@ -5457,10 +5407,6 @@ packages:
find-up-path@1.0.0:
resolution: {integrity: sha512-cjXDXnYfEezIqqbzctBNNqUax/rRCyNo/VTCFId3Hp9FyVL4uk0PvWrs7Xibtl2E4P5HnWnlxxJsbHqK6DsDPw==}
- find-up@3.0.0:
- resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
- engines: {node: '>=6'}
-
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
@@ -5479,9 +5425,6 @@ packages:
flatted@3.3.1:
resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
- flow-enums-runtime@0.0.4:
- resolution: {integrity: sha512-kkJ/ABZb4rhyFw05yCWdcA1K2uW7ddYzz9zVNJp5kRX3BzsIynB4f0E4oLlf+zgDLErj9FwGda1qEAmhnRNXPQ==}
-
for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
@@ -5761,9 +5704,6 @@ packages:
hastscript@8.0.0:
resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
- heap@0.2.7:
- resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==}
-
hono@3.12.12:
resolution: {integrity: sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==}
engines: {node: '>=16.0.0'}
@@ -6006,10 +5946,6 @@ packages:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
- is-plain-object@2.0.4:
- resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
- engines: {node: '>=0.10.0'}
-
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
@@ -6071,10 +6007,6 @@ packages:
resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
engines: {node: '>=16'}
- isobject@3.0.1:
- resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
- engines: {node: '>=0.10.0'}
-
iterator.prototype@1.1.5:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
@@ -6102,9 +6034,9 @@ packages:
resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- jest-docblock@26.0.0:
- resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==}
- engines: {node: '>= 10.14.2'}
+ jest-docblock@30.0.0-alpha.6:
+ resolution: {integrity: sha512-KXRLgRo7/rF1wqxQupsFCZa6wOp1qrDg4GdSXKfIHODYQb0dpi4rYaYA8xV5l2g9KwYc9/zV7l1tPe9TOr27ew==}
+ engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0}
jest-get-type@29.6.3:
resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
@@ -6172,10 +6104,6 @@ packages:
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
- json-diff@0.5.5:
- resolution: {integrity: sha512-B2RSfPv8Y5iqm6/9aKC3cOhXPzjYupKDpGuqT5py9NRulL8J0UoB/zKXUo70xBsuxPcIFgtsGgEdXLrNp0GL7w==}
- hasBin: true
-
json-parse-better-errors@1.0.2:
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
@@ -6243,10 +6171,6 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- kind-of@6.0.3:
- resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
- engines: {node: '>=0.10.0'}
-
leac@0.6.0:
resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==}
@@ -6269,10 +6193,6 @@ packages:
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- locate-path@3.0.0:
- resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
- engines: {node: '>=6'}
-
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
@@ -6345,10 +6265,6 @@ packages:
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
engines: {node: '>=12'}
- make-dir@2.1.0:
- resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
- engines: {node: '>=6'}
-
make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
@@ -6840,10 +6756,6 @@ packages:
resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==}
engines: {node: '>=18'}
- p-locate@3.0.0:
- resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
- engines: {node: '>=6'}
-
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -6899,10 +6811,6 @@ packages:
resolution: {integrity: sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==}
engines: {node: '>= 0.4.0'}
- path-exists@3.0.0:
- resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
- engines: {node: '>=4'}
-
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -6977,10 +6885,6 @@ packages:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
- pify@4.0.1:
- resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
- engines: {node: '>=6'}
-
pioppo@1.2.0:
resolution: {integrity: sha512-Mze+UGMj6fGMq7KQQTtiTDQN1RrfXeQwUssaKRgzp3HLx8SS5B9cTFIqQLkr2t6cIWpefGTpwiOLN8Y+3IODBg==}
@@ -6992,10 +6896,6 @@ packages:
resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==}
hasBin: true
- pkg-dir@3.0.0:
- resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
- engines: {node: '>=6'}
-
pkg-types@1.3.0:
resolution: {integrity: sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==}
@@ -7489,9 +7389,6 @@ packages:
require-like@0.1.2:
resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==}
- require-main-filename@2.0.0:
- resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
-
requireindex@1.2.0:
resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==}
engines: {node: '>=0.10.5'}
@@ -7594,9 +7491,6 @@ packages:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
- set-blocking@2.0.0:
- resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
-
set-cookie-parser@2.7.1:
resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
@@ -7618,10 +7512,6 @@ packages:
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
- shallow-clone@3.0.1:
- resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
- engines: {node: '>=8'}
-
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -8599,9 +8489,6 @@ packages:
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
engines: {node: '>= 0.4'}
- which-module@2.0.1:
- resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
-
which-typed-array@1.1.18:
resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
engines: {node: '>= 0.4'}
@@ -8621,9 +8508,6 @@ packages:
engines: {node: '>=8'}
hasBin: true
- wordwrap@1.0.0:
- resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
-
workbox-background-sync@7.3.0:
resolution: {integrity: sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg==}
@@ -8676,10 +8560,6 @@ packages:
worktank@2.7.3:
resolution: {integrity: sha512-M0fesnpttBPdvNYBdzRvLDsacN0na9RYWFxwmM/x1+/6mufjduv9/9vBObK8EXDqxRMX/SOYJabpo0UCYYBUdQ==}
- wrap-ansi@6.2.0:
- resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
- engines: {node: '>=8'}
-
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -8727,8 +8607,9 @@ packages:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
- y18n@4.0.3:
- resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
@@ -8742,13 +8623,13 @@ packages:
engines: {node: '>= 14'}
hasBin: true
- yargs-parser@18.1.3:
- resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
- engines: {node: '>=6'}
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
- yargs@15.4.1:
- resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
- engines: {node: '>=8'}
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
yn@3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
@@ -9521,16 +9402,6 @@ snapshots:
dependencies:
'@babel/core': 7.26.0
- '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
'@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@@ -9546,31 +9417,6 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
'@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@@ -9686,12 +9532,6 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-transform-flow-strip-types@7.25.9(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0)
-
'@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@@ -9839,6 +9679,18 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
+ '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+
+ '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@@ -9849,6 +9701,23 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
+ '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-plugin-utils': 7.25.9
+
'@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@@ -9894,6 +9763,17 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
+ '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@@ -9999,14 +9879,28 @@ snapshots:
'@babel/types': 7.26.3
esutils: 2.0.3
- '@babel/register@7.25.9(@babel/core@7.26.0)':
+ '@babel/preset-react@7.26.3(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
- clone-deep: 4.0.1
- find-cache-dir: 2.1.0
- make-dir: 2.1.0
- pirates: 4.0.6
- source-map-support: 0.5.21
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-validator-option': 7.25.9
+ '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0)
+ '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0)
+ '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0)
+ '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-validator-option': 7.25.9
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0)
+ '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0)
+ transitivePeerDependencies:
+ - supports-color
'@babel/runtime@7.26.0':
dependencies:
@@ -10590,6 +10484,50 @@ snapshots:
- acorn
- supports-color
+ '@nkzw/babel-plugin-fbtee-auto-import@0.2.0':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/types': 7.26.3
+ '@nkzw/babel-plugin-fbtee': 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/preset-react': 7.26.3(@babel/core@7.26.0)
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ '@nkzw/babel-plugin-fbtee': 0.2.0
+ invariant: 2.2.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@nkzw/babel-plugin-fbtee@0.2.0':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/generator': 7.26.3
+ '@babel/preset-react': 7.26.3(@babel/core@7.26.0)
+ '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0)
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ '@nkzw/babel-plugin-fbtee-auto-import': 0.2.0
+ glob: 11.0.0
+ invariant: 2.2.4
+ jest-docblock: 30.0.0-alpha.6
+ nullthrows: 1.1.1
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@nkzw/babel-preset-fbtee@0.2.0':
+ dependencies:
+ '@nkzw/babel-plugin-fbtee': 0.2.0
+ '@nkzw/babel-plugin-fbtee-auto-import': 0.2.0
+ '@nkzw/babel-plugin-fbtee-runtime': 0.2.0(@nkzw/babel-plugin-fbtee@0.2.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@nkzw/eslint-config@1.19.0(eslint@8.57.0)(typescript@5.7.2(patch_hash=icxwwkq44uizmbsct6du47zdsu))':
dependencies:
'@nkzw/eslint-plugin': 1.8.0(eslint@8.57.0)
@@ -10612,6 +10550,14 @@ snapshots:
- supports-color
- typescript
+ '@nkzw/eslint-plugin-fbtee@0.2.0(eslint@8.57.0)(typescript@5.7.2(patch_hash=icxwwkq44uizmbsct6du47zdsu))':
+ dependencies:
+ '@typescript-eslint/utils': 8.19.0(eslint@8.57.0)(typescript@5.7.2(patch_hash=icxwwkq44uizmbsct6du47zdsu))
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
+ - typescript
+
'@nkzw/eslint-plugin@1.8.0(eslint@8.57.0)':
dependencies:
eslint: 8.57.0
@@ -12221,10 +12167,6 @@ snapshots:
'@types/qs': 6.9.17
'@types/serve-static': 1.15.7
- '@types/fbt@1.0.5':
- dependencies:
- '@types/react': 19.0.2
-
'@types/gaussian@1.2.2': {}
'@types/glob@8.1.0':
@@ -12908,35 +12850,6 @@ snapshots:
dependencies:
possible-typed-array-names: 1.0.0
- babel-plugin-fbt-import@0.1.0: {}
-
- babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0):
- dependencies:
- '@babel/core': 7.26.0
- babel-plugin-fbt: 1.0.0
- invariant: 2.2.4
- transitivePeerDependencies:
- - supports-color
-
- babel-plugin-fbt@1.0.0:
- dependencies:
- '@babel/core': 7.26.0
- '@babel/generator': 7.26.3
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-transform-flow-strip-types': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0)
- '@babel/register': 7.25.9(@babel/core@7.26.0)
- '@babel/types': 7.26.3
- fb-babel-plugin-utils: 0.13.1
- flow-enums-runtime: 0.0.4
- glob: 7.2.3
- invariant: 2.2.4
- jest-docblock: 26.0.0
- nullthrows: 1.1.1
- yargs: 15.4.1
- transitivePeerDependencies:
- - supports-color
-
babel-plugin-macros@2.8.0:
dependencies:
'@babel/runtime': 7.26.0
@@ -13106,8 +13019,6 @@ snapshots:
camelcase-css@2.0.1: {}
- camelcase@5.3.1: {}
-
caniuse-lite@1.0.30001690: {}
canvas@3.0.1:
@@ -13173,27 +13084,17 @@ snapshots:
dependencies:
escape-string-regexp: 1.0.5
- cli-color@0.1.7:
- dependencies:
- es5-ext: 0.8.2
-
cli-cursor@4.0.0:
dependencies:
restore-cursor: 4.0.0
cli-spinners@2.9.2: {}
- cliui@6.0.0:
+ cliui@8.0.1:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
- wrap-ansi: 6.2.0
-
- clone-deep@4.0.1:
- dependencies:
- is-plain-object: 2.0.4
- kind-of: 6.0.3
- shallow-clone: 3.0.1
+ wrap-ansi: 7.0.0
clsx@2.1.1: {}
@@ -13217,8 +13118,6 @@ snapshots:
common-tags@1.8.2: {}
- commondir@1.0.1: {}
-
compressible@2.0.18:
dependencies:
mime-db: 1.53.0
@@ -13380,8 +13279,6 @@ snapshots:
optionalDependencies:
supports-color: 5.5.0
- decamelize@1.2.0: {}
-
decode-named-character-reference@1.0.2:
dependencies:
character-entities: 2.0.2
@@ -13456,10 +13353,6 @@ snapshots:
diff@4.0.2: {}
- difflib@0.2.4:
- dependencies:
- heap: 0.2.7
-
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -13521,10 +13414,6 @@ snapshots:
dotenv@16.4.7: {}
- dreamopt@0.6.0:
- dependencies:
- wordwrap: 1.0.0
-
dset@3.1.4: {}
dunder-proto@1.0.1:
@@ -13721,8 +13610,6 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- es5-ext@0.8.2: {}
-
esast-util-from-estree@2.0.0:
dependencies:
'@types/estree-jsx': 1.0.5
@@ -14233,23 +14120,6 @@ snapshots:
dependencies:
format: 0.2.2
- fb-babel-plugin-utils@0.13.1:
- dependencies:
- '@babel/core': 7.26.0
- '@babel/generator': 7.26.3
- '@babel/parser': 7.26.3
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0)
- '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0)
- '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0)
- json-diff: 0.5.5
- transitivePeerDependencies:
- - supports-color
-
fbjs-css-vars@1.0.2: {}
fbjs@3.0.5:
@@ -14264,10 +14134,10 @@ snapshots:
transitivePeerDependencies:
- encoding
- fbt@1.0.2(patch_hash=h3le5xcbsw44ybdi7qpcrzppny)(babel-plugin-fbt-runtime@1.0.0(babel-plugin-fbt@1.0.0))(babel-plugin-fbt@1.0.0)(react@19.0.0):
+ fbtee@0.2.0(@nkzw/babel-plugin-fbtee-runtime@0.2.0(@nkzw/babel-plugin-fbtee@0.2.0))(@nkzw/babel-plugin-fbtee@0.2.0)(react@19.0.0):
dependencies:
- babel-plugin-fbt: 1.0.0
- babel-plugin-fbt-runtime: 1.0.0(babel-plugin-fbt@1.0.0)
+ '@nkzw/babel-plugin-fbtee': 0.2.0
+ '@nkzw/babel-plugin-fbtee-runtime': 0.2.0(@nkzw/babel-plugin-fbtee@0.2.0)
invariant: 2.2.4
react: 19.0.0
@@ -14299,12 +14169,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- find-cache-dir@2.1.0:
- dependencies:
- commondir: 1.0.1
- make-dir: 2.1.0
- pkg-dir: 3.0.0
-
find-root@1.1.0: {}
find-up-json@2.0.4:
@@ -14313,10 +14177,6 @@ snapshots:
find-up-path@1.0.0: {}
- find-up@3.0.0:
- dependencies:
- locate-path: 3.0.0
-
find-up@4.1.0:
dependencies:
locate-path: 5.0.0
@@ -14341,8 +14201,6 @@ snapshots:
flatted@3.3.1: {}
- flow-enums-runtime@0.0.4: {}
-
for-each@0.3.3:
dependencies:
is-callable: 1.2.7
@@ -14687,8 +14545,6 @@ snapshots:
property-information: 6.5.0
space-separated-tokens: 2.0.2
- heap@0.2.7: {}
-
hono@3.12.12: {}
hosted-git-info@2.8.9: {}
@@ -14934,10 +14790,6 @@ snapshots:
is-plain-obj@4.1.0: {}
- is-plain-object@2.0.4:
- dependencies:
- isobject: 3.0.1
-
is-regex@1.2.1:
dependencies:
call-bound: 1.0.3
@@ -14991,8 +14843,6 @@ snapshots:
isexe@3.1.1: {}
- isobject@3.0.1: {}
-
iterator.prototype@1.1.5:
dependencies:
define-data-property: 1.1.4
@@ -15033,7 +14883,7 @@ snapshots:
jest-get-type: 29.6.3
pretty-format: 29.7.0
- jest-docblock@26.0.0:
+ jest-docblock@30.0.0-alpha.6:
dependencies:
detect-newline: 3.1.0
@@ -15109,12 +14959,6 @@ snapshots:
json-buffer@3.0.1: {}
- json-diff@0.5.5:
- dependencies:
- cli-color: 0.1.7
- difflib: 0.2.4
- dreamopt: 0.6.0
-
json-parse-better-errors@1.0.2: {}
json-parse-even-better-errors@2.3.1: {}
@@ -15181,8 +15025,6 @@ snapshots:
dependencies:
json-buffer: 3.0.1
- kind-of@6.0.3: {}
-
leac@0.6.0: {}
leven@3.1.0: {}
@@ -15198,11 +15040,6 @@ snapshots:
lines-and-columns@1.2.4: {}
- locate-path@3.0.0:
- dependencies:
- p-locate: 3.0.0
- path-exists: 3.0.0
-
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
@@ -15266,11 +15103,6 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
- make-dir@2.1.0:
- dependencies:
- pify: 4.0.1
- semver: 5.7.2
-
make-error@1.3.6: {}
mark.js@8.11.1: {}
@@ -16051,10 +15883,6 @@ snapshots:
dependencies:
yocto-queue: 1.1.1
- p-locate@3.0.0:
- dependencies:
- p-limit: 2.3.0
-
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
@@ -16122,8 +15950,6 @@ snapshots:
pause: 0.0.1
utils-merge: 1.0.1
- path-exists@3.0.0: {}
-
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
@@ -16176,8 +16002,6 @@ snapshots:
pify@2.3.0: {}
- pify@4.0.1: {}
-
pioppo@1.2.0:
dependencies:
dettle: 1.0.4
@@ -16189,10 +16013,6 @@ snapshots:
dependencies:
pngjs: 6.0.0
- pkg-dir@3.0.0:
- dependencies:
- find-up: 3.0.0
-
pkg-types@1.3.0:
dependencies:
confbox: 0.1.8
@@ -16769,8 +16589,6 @@ snapshots:
require-like@0.1.2: {}
- require-main-filename@2.0.0: {}
-
requireindex@1.2.0: {}
resend@4.0.1(patch_hash=jy6o2bk2q3hc4sulops4iuwsmi)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
@@ -16908,8 +16726,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- set-blocking@2.0.0: {}
-
set-cookie-parser@2.7.1: {}
set-function-length@1.2.2:
@@ -16938,10 +16754,6 @@ snapshots:
setprototypeof@1.2.0: {}
- shallow-clone@3.0.1:
- dependencies:
- kind-of: 6.0.3
-
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -18063,8 +17875,6 @@ snapshots:
is-weakmap: 2.0.2
is-weakset: 2.0.4
- which-module@2.0.1: {}
-
which-typed-array@1.1.18:
dependencies:
available-typed-arrays: 1.0.7
@@ -18087,8 +17897,6 @@ snapshots:
siginfo: 2.0.0
stackback: 0.0.2
- wordwrap@1.0.0: {}
-
workbox-background-sync@7.3.0:
dependencies:
idb: 7.1.1
@@ -18207,12 +18015,6 @@ snapshots:
promise-make-naked: 2.1.2
webworker-shim: 1.1.0
- wrap-ansi@6.2.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -18243,7 +18045,7 @@ snapshots:
xtend@4.0.2: {}
- y18n@4.0.3: {}
+ y18n@5.0.8: {}
yallist@3.1.1: {}
@@ -18251,24 +18053,17 @@ snapshots:
yaml@2.7.0: {}
- yargs-parser@18.1.3:
- dependencies:
- camelcase: 5.3.1
- decamelize: 1.2.0
+ yargs-parser@21.1.1: {}
- yargs@15.4.1:
+ yargs@17.7.2:
dependencies:
- cliui: 6.0.0
- decamelize: 1.2.0
- find-up: 4.1.0
+ cliui: 8.0.1
+ escalade: 3.2.0
get-caller-file: 2.0.5
require-directory: 2.1.1
- require-main-filename: 2.0.0
- set-blocking: 2.0.0
string-width: 4.2.3
- which-module: 2.0.1
- y18n: 4.0.3
- yargs-parser: 18.1.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
yn@3.1.1: {}
diff --git a/tests/display.html b/tests/display.html
index 5956b5e8..5d15c15e 100644
--- a/tests/display.html
+++ b/tests/display.html
@@ -12,9 +12,9 @@