187 lines
6.2 KiB
TypeScript
187 lines
6.2 KiB
TypeScript
// Metro module 10283 (f10284).
|
|
import { MUTED_OPACITY_CONTENT } from "../../channel_list_v2/native/RedesignChannelListConstants";
|
|
import { ANSI_CONTROL_SEQUENCE_RE } from "../../../utils/HighlightJsAnsiLanguage";
|
|
import { smartOutput, isStaticRouteIconType } from "../MarkupRulesUtils";
|
|
import { makeSizeStyle, getLayoutStyles } from "../../main_tabs_v2/native/shared_components/guild_channels/layouts/ChannelListLayout";
|
|
import { ICON_SIZE } from "../../../design/components/Icon/IconSize";
|
|
import { AST_KEY } from "../MarkupTypes";
|
|
import MarkupRules from "../MarkupRules";
|
|
import HighlightText from "../../search/native/components/HighlightText";
|
|
import FastImage from "../../../components_native/common/FastImage";
|
|
import { isAndroid } from "../../../_bundle/Module501";
|
|
import Spoiler from "./Spoiler";
|
|
import { inlineChannelMentionReact, createInlineChannelReact } from "./MarkupInlineChannelMentionRules";
|
|
import { LegacyText, ThemedIcon } from "../../../design/void/native";
|
|
import { isFabric } from "../../../utils/native/FabricUtils";
|
|
import { AttachmentIcon } from "../../../design/components/Icon/native/redesign/generated/AttachmentIcon";
|
|
import Module4669 from "../../../_bundle/Module4669";
|
|
import Timestamp_native from "../Timestamp.native";
|
|
let c6867_6, createMessagePreviewReactRules;
|
|
const defaultReactFn = function defaultReactFn(a0, a1, a2) {
|
|
return typeof a0.content === "string" ? a0.content : smartOutput(a0, a1, a2);
|
|
};
|
|
createMessagePreviewReactRules = function createMessagePreviewReactRules({ iconColor, iconSize, channelIconSize, customEmojiSize = 15 }) {
|
|
let c17842_2 = customEmojiSize;
|
|
const r21 = {};
|
|
r21[AST_KEY.TEXT] = {
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.STRIKETHROUGH] = {
|
|
...MarkupRules.RULES[AST_KEY.STRIKETHROUGH],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.UNDERLINE] = {
|
|
...MarkupRules.RULES[AST_KEY.UNDERLINE],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.ITALICS] = {
|
|
...MarkupRules.RULES[AST_KEY.ITALICS],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.STRONG] = {
|
|
...MarkupRules.RULES[AST_KEY.STRONG],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.LINK] = {
|
|
...MarkupRules.RULES[AST_KEY.LINK],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.URL] = {
|
|
...MarkupRules.RULES[AST_KEY.URL],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.AUTOLINK] = {
|
|
...MarkupRules.RULES[AST_KEY.AUTOLINK],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.LINE_BREAK] = {
|
|
...MarkupRules.RULES[AST_KEY.LINE_BREAK],
|
|
react: () => "\n"
|
|
};
|
|
r21[AST_KEY.HIGHLIGHT] = {
|
|
react: (a0, a1, a2) => <HighlightText key={a2.key}>
|
|
{smartOutput(a0, a1, a2)}
|
|
</HighlightText>
|
|
};
|
|
r21[AST_KEY.BLOCK_QUOTE] = {
|
|
...MarkupRules.RULES[AST_KEY.BLOCK_QUOTE],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.PARAGRAPH] = {
|
|
...MarkupRules.RULES[AST_KEY.PARAGRAPH],
|
|
order: 600,
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.EMOJI] = {
|
|
react: (a0) => a0.surrogate || a0.content
|
|
};
|
|
r21[AST_KEY.CUSTOM_EMOJI] = {
|
|
react: (a0, a1, a2) => {
|
|
if (a0.src) {
|
|
return <FastImage key={a2.key} style={[makeSizeStyle(c17842_2), {
|
|
resizeMode: "contain"
|
|
}, isAndroid() && {
|
|
transform: [{
|
|
translateY: 3
|
|
}]
|
|
}, a2.muted && {
|
|
opacity: MUTED_OPACITY_CONTENT
|
|
}]} source={{
|
|
uri: a0.src
|
|
}} />;
|
|
}
|
|
return a0.alt;
|
|
}
|
|
};
|
|
r21[AST_KEY.SPOILER] = {
|
|
react: (a0, a1, a2) => <Spoiler key={a2.key} disableReveal muted={a2.muted}>
|
|
{smartOutput(a0, a1, a2)}
|
|
</Spoiler>
|
|
};
|
|
r21[AST_KEY.STATIC_ROUTE_LINK] = {
|
|
react: (a0, a1, a2) => isStaticRouteIconType(a0.channelId) ? smartOutput(a0, a1, a2) : null
|
|
};
|
|
r21[AST_KEY.INLINE_CODE] = {
|
|
...MarkupRules.RULES[AST_KEY.INLINE_CODE],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.CODE_BLOCK] = {
|
|
...MarkupRules.RULES[AST_KEY.CODE_BLOCK],
|
|
parse: (a0, a1, a2) => {
|
|
const r17 = MarkupRules.RULES[AST_KEY.CODE_BLOCK].parse(a0, a1, a2);
|
|
if (r17.lang.toLowerCase() === "ansi") {
|
|
r17.content = r17.content.replaceAll(c6867_6, "");
|
|
}
|
|
return r17;
|
|
},
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.MENTION] = {
|
|
...MarkupRules.RULES[AST_KEY.MENTION],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.CHANNEL_MENTION] = {
|
|
...MarkupRules.RULES[AST_KEY.CHANNEL_MENTION],
|
|
react: inlineChannelMentionReact
|
|
};
|
|
r21[AST_KEY.ATTACHMENT_LINK] = {
|
|
...MarkupRules.RULES[AST_KEY.ATTACHMENT_LINK],
|
|
react: (a0, a1, a2) => <LegacyText key={a2.key}>
|
|
{isFabric() ? "📎 " : <AttachmentIcon color={iconColor} size={iconSize} />}
|
|
{smartOutput(a0, a1, a2)}
|
|
</LegacyText>
|
|
};
|
|
r21[AST_KEY.SOUNDBOARD] = {
|
|
...MarkupRules.RULES[AST_KEY.SOUNDBOARD],
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.GUILD] = {
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.CHANNEL] = {
|
|
react: createInlineChannelReact(isFabric() ? "💬" : <ThemedIcon source={Module4669} size={channelIconSize} themedColor={iconColor} />)
|
|
};
|
|
r21[AST_KEY.COMMAND_MENTION] = {
|
|
...MarkupRules.RULES[AST_KEY.COMMAND_MENTION],
|
|
react: (a0, a1, a2) => <LegacyText key={a2.key}>
|
|
/
|
|
{smartOutput(a0, a1, a2)}
|
|
</LegacyText>
|
|
};
|
|
r21[AST_KEY.TIMESTAMP] = {
|
|
...MarkupRules.RULES[AST_KEY.TIMESTAMP],
|
|
react: (a0, a1, a2) => <Timestamp_native key={a2.key} node={a0} style={null} />
|
|
};
|
|
r21[AST_KEY.LIST] = {
|
|
...MarkupRules.RULES[AST_KEY.LIST],
|
|
react: (a0, a1, a2) => {
|
|
const r8 = a0.items[0];
|
|
const r6 = Array.isArray(r8) ? r8[0] : r8;
|
|
return r6 != null ? smartOutput(r6, a1, a2) : null;
|
|
}
|
|
};
|
|
r21[AST_KEY.HEADING] = {
|
|
react: defaultReactFn
|
|
};
|
|
r21[AST_KEY.SUBTEXT] = {
|
|
react: defaultReactFn
|
|
};
|
|
return r21;
|
|
};
|
|
c6867_6 = new RegExp(ANSI_CONTROL_SEQUENCE_RE, "g");
|
|
export default function createChannelListMessagePreviewReactRules(a0, a1, a2, a3) {
|
|
const styles = getLayoutStyles(a0);
|
|
const r14 = a3 != null ? Math.min(a2, a3) : a2;
|
|
let r29 = ICON_SIZE[styles.messagePreview.messageTypeIconSizeNew];
|
|
if (r29 == null) {
|
|
r29 = 0;
|
|
}
|
|
return createMessagePreviewReactRules({
|
|
iconColor: a1,
|
|
iconSize: styles.messagePreview.messageTypeIconSizeNew,
|
|
channelIconSize: styles.messagePreview.messageTypeIconSize,
|
|
customEmojiSize: r29 * r14
|
|
});
|
|
};
|
|
export { createMessagePreviewReactRules };
|