[Themes] Implement (#34)

* [Themes] Initial work

* [Themes] Read from __vendetta_themes and early UI (#36)

* [Themes] Read from `__vendetta_themes`

* [Themes] Save as JSON and native theming

* [Themes] Basic UI

* [Themes] Merge processed theme data

* [Themes] Import ReactNative from `@lib/preinit`, oraganize imports

* [Themes] Some minor cleanup

* [Themes] UI overhaul

* [Themes] Minor adjustments

* [Themes] Implement updates, make UI reactive-ish

* [Themes] Move to new format

* [Themes > UI] Last-minute ThemeCard changes

* [Themes] Properly support AMOLED

---------

Co-authored-by: Amsyar Rasyiq <82711525+amsyarasyiq@users.noreply.github.com>
This commit is contained in:
Beef 2023-03-17 21:58:37 +00:00 committed by GitHub
parent 7dc0b1286a
commit 85a83e4873
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 464 additions and 132 deletions

View file

@ -0,0 +1,37 @@
import { ReactNative as RN, clipboard, stylesheet } from "@metro/common";
import { HTTP_REGEX } from "@lib/constants";
import { showInputAlert } from "@ui/alerts";
import { getAssetIDByName } from "@ui/assets";
import { semanticColors } from "@ui/color";
const styles = stylesheet.createThemedStyleSheet({
icon: {
marginRight: 10,
tintColor: semanticColors.HEADER_PRIMARY,
}
});
interface InstallButtonProps {
alertTitle: string;
installFunction: (id: string) => Promise<void>;
}
export default function InstallButton({ alertTitle, installFunction: fetchFunction }: InstallButtonProps) {
return (
<RN.TouchableOpacity onPress={() =>
clipboard.getString().then((content) =>
showInputAlert({
title: alertTitle,
initialValue: HTTP_REGEX.test(content) ? content : "",
placeholder: "https://example.com/",
onConfirm: (input: string) => fetchFunction(input),
confirmText: "Install",
confirmColor: undefined,
cancelText: "Cancel"
})
)
}>
<RN.Image style={styles.icon} source={getAssetIDByName("ic_add_24px")} />
</RN.TouchableOpacity>
);
}