Grabbed dndbeyond's source code

```
~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js
```
This commit is contained in:
2025-05-28 11:50:03 -07:00
commit 8df9031d27
3592 changed files with 319051 additions and 0 deletions
@@ -0,0 +1,120 @@
import React, { useContext } from "react";
import {
AbilityLookup,
Action,
CharacterTheme,
CharacterUtils,
DataOriginRefData,
FeatManager,
RuleData,
SnippetData,
SourceMappingContract,
Spell,
} from "@dndbeyond/character-rules-engine/es";
import { useCharacterEngine } from "~/hooks/useCharacterEngine";
import { FeatureSnippet } from "~/subApps/sheet/components/FeatureSnippet";
import { CharacterFeaturesManagerContext } from "../../../../Shared/managers/CharacterFeaturesManagerContext";
interface Props {
feat: FeatManager;
extraMeta?: Array<string>;
onActionClick?: (action: Action) => void;
onActionUseSet?: (action: Action, uses: number) => void;
onSpellClick?: (spell: Spell) => void;
onSpellUseSet?: (spell: Spell, uses: number) => void;
onFeatureClick?: (feat: FeatManager) => void;
showHeader?: boolean;
showDescription?: boolean;
snippetData: SnippetData;
ruleData: RuleData;
abilityLookup: AbilityLookup;
dataOriginRefData: DataOriginRefData;
isReadonly: boolean;
proficiencyBonus: number;
theme: CharacterTheme;
}
export const FeatFeatureSnippet: React.FC<Props> = ({
feat,
onFeatureClick,
snippetData,
ruleData,
abilityLookup,
dataOriginRefData,
proficiencyBonus,
theme,
isReadonly,
onActionClick,
onSpellClick,
onSpellUseSet,
onActionUseSet,
showHeader,
extraMeta = [],
showDescription = false,
}) => {
const { characterFeaturesManager } = useContext(
CharacterFeaturesManagerContext
);
const currentFeats = characterFeaturesManager.getFeats();
const { entityUtils } = useCharacterEngine();
let sourceId: number | null = null;
let sourcePage: number | null = null;
let filteredSources = feat
.getSources()
.filter(CharacterUtils.isPrimarySource);
let dataOrigin = feat.getDataOrigin();
const dataOriginExtra = entityUtils.getDataOriginName(
dataOrigin,
"Unknown",
true
);
if (filteredSources.length) {
let primarySource: SourceMappingContract = filteredSources[0];
sourceId = primarySource.sourceId;
sourcePage = primarySource.pageNumber;
}
return (
<FeatureSnippet
snippetData={snippetData}
ruleData={ruleData}
abilityLookup={abilityLookup}
dataOriginRefData={dataOriginRefData}
proficiencyBonus={proficiencyBonus}
theme={theme}
isReadonly={isReadonly}
extraMeta={extraMeta}
onActionClick={onActionClick}
onActionUseSet={onActionUseSet}
onSpellClick={onSpellClick}
onSpellUseSet={onSpellUseSet}
showHeader={showHeader}
feats={currentFeats.map((feat) => feat.feat)}
dataOriginExtra={dataOriginExtra}
heading={feat.getName()}
className="ct-feature-snippet--feat"
actions={feat.getActions()}
options={feat.getOptions()}
choices={feat.getChoices()}
spells={feat.getSpells()}
sourceId={sourceId}
sourcePage={sourcePage}
onFeatureClick={() => {
if (onFeatureClick) {
onFeatureClick(feat);
}
}}
showDescription={showDescription}
>
{showDescription ? feat.getDescription() : feat.getSnippet()}
</FeatureSnippet>
);
};
export default FeatFeatureSnippet;
@@ -0,0 +1,4 @@
import FeatFeatureSnippet from "./FeatFeatureSnippet";
export default FeatFeatureSnippet;
export { FeatFeatureSnippet };