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,135 @@
import React from "react";
import {
AbilityLookup,
BaseFeat,
CharClass,
ClassFeature,
ClassFeatureUtils,
ClassUtils,
DataOriginBaseAction,
DataOriginRefData,
DataOriginSpell,
InfusionChoice,
RuleData,
SnippetData,
AccessUtils,
CharacterTheme,
CharacterFeaturesManager,
FeatManager,
} from "@dndbeyond/character-rules-engine/es";
import { DataOriginTypeEnum } from "~/constants";
import { FeatureSnippet } from "~/subApps/sheet/components/FeatureSnippet";
import FeatFeatureSnippet from "../FeatFeatureSnippet";
interface Props {
feature: ClassFeature;
charClass: CharClass;
extraMeta: Array<string>;
onActionClick: (action: DataOriginBaseAction) => void;
onActionUseSet: (action: DataOriginBaseAction, uses: number) => void;
onSpellClick: (spell: DataOriginSpell) => void;
onSpellUseSet: (spell: DataOriginSpell, uses: number) => void;
onFeatureClick: (feat: ClassFeature, charClass: CharClass) => void;
onInfusionChoiceClick: (infusionChoice: InfusionChoice) => void;
showHeader?: boolean;
showDescription?: boolean;
feats: Array<BaseFeat>;
snippetData: SnippetData;
ruleData: RuleData;
abilityLookup: AbilityLookup;
dataOriginRefData: DataOriginRefData;
isReadonly: boolean;
proficiencyBonus: number;
theme: CharacterTheme;
onFeatClick: (feat: FeatManager) => void;
featuresManager: CharacterFeaturesManager;
}
export default class ClassFeatureSnippet extends React.PureComponent<Props> {
static defaultProps = {
extraMeta: [],
showDescription: false,
};
handleFeatureClick = (): void => {
const { feature, charClass, onFeatureClick } = this.props;
if (onFeatureClick) {
onFeatureClick(feature, charClass);
}
};
renderDescription = (): React.ReactNode => {
const { feature, showDescription } = this.props;
const description: string | null = AccessUtils.isAccessible(
ClassFeatureUtils.getAccessType(feature)
)
? ClassFeatureUtils.getDescription(feature)
: "Check out the Marketplace to unlock this Class Feature.";
return showDescription
? description
: ClassFeatureUtils.getSnippet(feature);
};
render() {
const {
feature,
charClass,
onFeatureClick,
showDescription,
featuresManager,
onFeatClick,
...restProps
} = this.props;
const feats = [
// Both primary and parent. Feats from the Granted Feat system have the class feature as a parent.
...featuresManager.getDataOriginOnlyFeatsByPrimary(
DataOriginTypeEnum.CLASS_FEATURE,
`${ClassFeatureUtils.getId(feature)}`
),
...featuresManager.getDataOriginOnlyFeatsByParent(
DataOriginTypeEnum.CLASS_FEATURE,
`${ClassFeatureUtils.getId(feature)}`
),
];
// When the class feature grants feats, show those rather than the class feature.
return feats.length ? (
feats.map((feat) => (
<FeatFeatureSnippet
{...restProps}
key={feat.getId()}
feat={feat}
onFeatureClick={onFeatClick}
/>
))
) : (
<FeatureSnippet
{...restProps}
heading={ClassFeatureUtils.getName(feature)}
className="ct-feature-snippet--class"
levelScale={ClassFeatureUtils.getLevelScale(feature)}
actions={ClassFeatureUtils.getActions(feature)}
options={ClassFeatureUtils.getOptions(feature)}
choices={ClassFeatureUtils.getChoices(feature)}
infusionChoices={ClassFeatureUtils.getInfusionChoices(feature)}
classLevel={ClassUtils.getLevel(charClass)}
subclass={ClassUtils.getSubclass(charClass)}
spells={ClassFeatureUtils.getSpells(feature)}
sourceId={ClassFeatureUtils.getSourceId(feature)}
sourcePage={ClassFeatureUtils.getSourcePage(feature)}
onFeatureClick={this.handleFeatureClick}
showDescription={showDescription}
>
{this.renderDescription()}
</FeatureSnippet>
);
}
}
@@ -0,0 +1,4 @@
import ClassFeatureSnippet from "./ClassFeatureSnippet";
export default ClassFeatureSnippet;
export { ClassFeatureSnippet };