diff --git a/src/components/layout/ProgressBar.tsx b/src/components/layout/ProgressBar.tsx
index 62ede29..4afa7c3 100644
--- a/src/components/layout/ProgressBar.tsx
+++ b/src/components/layout/ProgressBar.tsx
@@ -1,8 +1,8 @@
import { Progress } from "@kobalte/core";
-import { SmallHeader } from ".";
+import { SmallHeader } from "~/components";
import { useI18n } from "~/i18n/context";
-export default function formatNumber(num: number) {
+export function formatNumber(num: number) {
const map = [
{ suffix: "T", threshold: 1e12 },
{ suffix: "B", threshold: 1e9 },
diff --git a/src/components/layout/TextField.tsx b/src/components/layout/TextField.tsx
index 8b4f600..b3dbe56 100644
--- a/src/components/layout/TextField.tsx
+++ b/src/components/layout/TextField.tsx
@@ -1,6 +1,6 @@
import { TextField as KTextField } from "@kobalte/core";
import { type JSX, Show, splitProps } from "solid-js";
-import { TinyText } from ".";
+import { TinyText } from "~/components";
export type TextFieldProps = {
name: string;
diff --git a/src/components/layout/index.ts b/src/components/layout/index.ts
new file mode 100644
index 0000000..08e7363
--- /dev/null
+++ b/src/components/layout/index.ts
@@ -0,0 +1,9 @@
+export * from "./BackButton";
+export * from "./BackLink";
+export * from "./BackPop";
+export * from "./Button";
+export * from "./Linkify";
+export * from "./Misc";
+export * from "./ProgressBar";
+export * from "./Radio";
+export * from "./TextField";
diff --git a/src/components/successfail/SuccessModal.tsx b/src/components/successfail/SuccessModal.tsx
index 6715ec7..3dfdc9f 100644
--- a/src/components/successfail/SuccessModal.tsx
+++ b/src/components/successfail/SuccessModal.tsx
@@ -1,6 +1,6 @@
import { Dialog } from "@kobalte/core";
import { JSX } from "solid-js";
-import { Button } from "~/components/layout";
+import { Button } from "~/components";
import { DIALOG_CONTENT, DIALOG_POSITIONER } from "~/styles/dialogs";
import { useI18n } from "~/i18n/context";
diff --git a/src/components/successfail/index.ts b/src/components/successfail/index.ts
new file mode 100644
index 0000000..e00bfc9
--- /dev/null
+++ b/src/components/successfail/index.ts
@@ -0,0 +1,3 @@
+export * from "./MegaCheck";
+export * from "./MegaEx";
+export * from "./SuccessModal";
diff --git a/src/root.tsx b/src/root.tsx
index 87383b5..0923392 100644
--- a/src/root.tsx
+++ b/src/root.tsx
@@ -15,9 +15,7 @@ import {
// eslint-disable-next-line
import "@mutinywallet/ui/style.css";
import { Provider as MegaStoreProvider } from "~/state/megaStore";
-import { Toaster } from "~/components/Toaster";
-import ErrorDisplay from "./components/ErrorDisplay";
-import { I18nProvider } from "./components/I18nProvider";
+import { Toaster, ErrorDisplay, I18nProvider } from "~/components";
export default function Root() {
return (
diff --git a/src/routes/Activity.tsx b/src/routes/Activity.tsx
index 3fc650b..721f6b2 100644
--- a/src/routes/Activity.tsx
+++ b/src/routes/Activity.tsx
@@ -1,5 +1,4 @@
import { For, Show, Suspense, createResource } from "solid-js";
-import NavBar from "~/components/NavBar";
import {
Button,
Card,
@@ -8,18 +7,20 @@ import {
NiceP,
MutinyWalletGuard,
SafeArea,
- VStack
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
-import { CombinedActivity } from "~/components/Activity";
+ VStack,
+ NavBar,
+ BackLink,
+ CombinedActivity,
+ ContactEditor,
+ ContactFormValues,
+ ContactViewer,
+ showToast,
+ LoadingShimmer
+} from "~/components";
import { Tabs } from "@kobalte/core";
import { gradientsPerContact } from "~/utils/gradientHash";
-import { ContactEditor } from "~/components/ContactEditor";
-import { ContactFormValues, ContactViewer } from "~/components/ContactViewer";
import { useMegaStore } from "~/state/megaStore";
import { Contact } from "@mutinywallet/mutiny-wasm";
-import { showToast } from "~/components/Toaster";
-import { LoadingShimmer } from "~/components/BalanceBox";
import { useI18n } from "~/i18n/context";
function ContactRow() {
diff --git a/src/routes/Feedback.tsx b/src/routes/Feedback.tsx
index 8cc6d4c..5ca7f42 100644
--- a/src/routes/Feedback.tsx
+++ b/src/routes/Feedback.tsx
@@ -8,7 +8,6 @@ import {
} from "@modular-forms/solid";
import { Match, Show, Switch, createSignal } from "solid-js";
import { A, useLocation } from "solid-start";
-import NavBar from "~/components/NavBar";
import {
Button,
ButtonLink,
@@ -17,17 +16,16 @@ import {
LargeHeader,
NiceP,
SafeArea,
- VStack
+ VStack,
+ BackPop,
+ StyledRadioGroup,
+ TextField
} from "~/components/layout";
-import { BackPop } from "~/components/layout/BackPop";
import { ExternalLink } from "@mutinywallet/ui";
-import { StyledRadioGroup } from "~/components/layout/Radio";
-import { TextField } from "~/components/layout/TextField";
import feedback from "~/assets/icons/feedback.svg";
-import { InfoBox } from "~/components/InfoBox";
import eify from "~/utils/eify";
-import { MegaCheck } from "~/components/successfail/MegaCheck";
import { useI18n } from "~/i18n/context";
+import { InfoBox, MegaCheck, NavBar } from "~/components";
const FEEDBACK_API = import.meta.env.VITE_FEEDBACK;
diff --git a/src/routes/Receive.tsx b/src/routes/Receive.tsx
index f148bcd..a41f6e5 100644
--- a/src/routes/Receive.tsx
+++ b/src/routes/Receive.tsx
@@ -13,7 +13,12 @@ import {
Show,
Switch
} from "solid-js";
+import { useMegaStore } from "~/state/megaStore";
+import { objectToSearchParams } from "~/utils/objectToSearchParams";
+import mempoolTxUrl from "~/utils/mempoolTxUrl";
+import { useNavigate } from "solid-start";
import {
+ Fee,
Button,
Card,
DefaultMain,
@@ -21,33 +26,29 @@ import {
LargeHeader,
MutinyWalletGuard,
SafeArea,
- SimpleDialog
-} from "~/components/layout";
+ SimpleDialog,
+ NavBar,
+ AmountSats,
+ AmountFiat,
+ BackLink,
+ TagEditor,
+ StyledRadioGroup,
+ showToast,
+ AmountCard,
+ BackButton,
+ SuccessModal,
+ MegaCheck,
+ InfoBox,
+ FeesModal,
+ IntegratedQr
+} from "~/components";
import { ExternalLink } from "@mutinywallet/ui";
-import NavBar from "~/components/NavBar";
-import { useMegaStore } from "~/state/megaStore";
-import { objectToSearchParams } from "~/utils/objectToSearchParams";
-import mempoolTxUrl from "~/utils/mempoolTxUrl";
-import { AmountSats, AmountFiat } from "~/components/Amount";
-import { BackLink } from "~/components/layout/BackLink";
-import { TagEditor } from "~/components/TagEditor";
-import { StyledRadioGroup } from "~/components/layout/Radio";
-import { showToast } from "~/components/Toaster";
-import { useNavigate } from "solid-start";
-import { AmountCard } from "~/components/AmountCard";
-import { BackButton } from "~/components/layout/BackButton";
import { MutinyTagItem } from "~/utils/tags";
import { Network } from "~/logic/mutinyWalletSetup";
-import { SuccessModal } from "~/components/successfail/SuccessModal";
-import { MegaCheck } from "~/components/successfail/MegaCheck";
-import { InfoBox } from "~/components/InfoBox";
-import { FeesModal } from "~/components/MoreInfoModal";
-import { IntegratedQr } from "~/components/IntegratedQR";
import side2side from "~/assets/icons/side-to-side.svg";
import eify from "~/utils/eify";
import { matchError } from "~/logic/errorDispatch";
import { useI18n } from "~/i18n/context";
-import { Fee } from "~/components/Fee";
type OnChainTx = {
transaction: {
diff --git a/src/routes/Redshift.tsx b/src/routes/Redshift.tsx
deleted file mode 100644
index 008585e..0000000
--- a/src/routes/Redshift.tsx
+++ /dev/null
@@ -1,644 +0,0 @@
-import {
- createEffect,
- createMemo,
- createResource,
- createSignal,
- For,
- Match,
- onMount,
- ParentComponent,
- Show,
- Suspense,
- Switch
-} from "solid-js";
-import {
- CENTER_COLUMN,
- MISSING_LABEL,
- REDSHIFT_LABEL,
- RIGHT_COLUMN,
- THREE_COLUMNS,
- UtxoItem
-} from "~/components/Activity";
-import {
- Button,
- Card,
- DefaultMain,
- LargeHeader,
- NiceP,
- MutinyWalletGuard,
- SafeArea,
- SmallAmount,
- SmallHeader,
- VStack
-} from "~/components/layout";
-import { LoadingSpinner } from "@mutinywallet/ui";
-import { BackLink } from "~/components/layout/BackLink";
-import { StyledRadioGroup } from "~/components/layout/Radio";
-import NavBar from "~/components/NavBar";
-import { useMegaStore } from "~/state/megaStore";
-import wave from "~/assets/wave.gif";
-import utxoIcon from "~/assets/icons/coin.svg";
-import { ProgressBar } from "~/components/layout/ProgressBar";
-import { MutinyChannel } from "@mutinywallet/mutiny-wasm";
-import mempoolTxUrl from "~/utils/mempoolTxUrl";
-import { AmountSats } from "~/components/Amount";
-import { getRedshifted, setRedshifted } from "~/utils/fakeLabels";
-import { Network } from "~/logic/mutinyWalletSetup";
-import { useI18n } from "~/i18n/context";
-
-type ShiftOption = "utxo" | "lightning";
-
-type ShiftStage = "choose" | "observe" | "success" | "failure";
-
-type OutPoint = string; // Replace with the actual TypeScript type for OutPoint
-type RedshiftStatus = string; // Replace with the actual TypeScript type for RedshiftStatus
-type RedshiftRecipient = unknown; // Replace with the actual TypeScript type for RedshiftRecipient
-type PublicKey = unknown; // Replace with the actual TypeScript type for PublicKey
-
-interface RedshiftResult {
- id: string;
- input_utxo: OutPoint;
- status: RedshiftStatus;
- recipient: RedshiftRecipient;
- output_utxo?: OutPoint;
- introduction_channel?: OutPoint;
- output_channel?: OutPoint;
- introduction_node: PublicKey;
- amount_sats: bigint;
- change_amt?: bigint;
- fees_paid: bigint;
-}
-
-const dummyRedshift: RedshiftResult = {
- id: "44036599c37d590899e8d5d920860286",
- input_utxo:
- "44036599c37d590899e8d5d92086028695d2c2966fdc354ce1da9a9eac610a53:1",
- status: "Completed", // Replace with a dummy value for RedshiftStatus
- recipient: {}, // Replace with a dummy value for RedshiftRecipient
- output_utxo:
- "44036599c37d590899e8d5d92086028695d2c2966fdc354ce1da9a9eac610a53:1",
- introduction_channel:
- "a7773e57f8595848a635e9af105927cac9ecaf292d71a76456ae0455bd3c9c64:0",
- output_channel:
- "a7773e57f8595848a635e9af105927cac9ecaf292d71a76456ae0455bd3c9c64:0",
- introduction_node: {}, // Replace with a dummy value for PublicKey
- amount_sats: BigInt(1000000),
- change_amt: BigInt(12345),
- fees_paid: BigInt(2500)
-};
-
-function RedshiftReport(props: { redshift: RedshiftResult; utxo: UtxoItem }) {
- const i18n = useI18n();
- const [state, _actions] = useMegaStore();
-
- const getUtXos = async () => {
- console.log("Getting utxos");
- return (await state.mutiny_wallet?.list_utxos()) as UtxoItem[];
- };
-
- // function findUtxoByOutpoint(
- // outpoint?: string,
- // utxos: UtxoItem[] = []
- // ): UtxoItem | undefined {
- // if (!outpoint) return undefined
- // return utxos.find((utxo) => utxo.outpoint === outpoint)
- // }
-
- const [_utxos, { refetch: _refetchUtxos }] = createResource(getUtXos);
-
- // const inputUtxo = createMemo(() => {
- // console.log(utxos())
- // const foundUtxo = findUtxoByOutpoint(props.redshift.input_utxo, utxos())
- // console.log("Found utxo:", foundUtxo)
- // return foundUtxo
- // })
-
- const [redshiftResource, { refetch: _refetchRedshift }] = createResource(
- async () => {
- console.log("Checking redshift", props.redshift.id);
- const redshift = await state.mutiny_wallet?.get_redshift(
- props.redshift.id
- );
- console.log(redshift);
- return redshift;
- }
- );
- onMount(() => {
- // const interval = setInterval(() => {
- // if (redshiftResource()) refetch()
- // // if (sentAmount() === 200000) {
- // // clearInterval(interval)
- // // props.setShiftStage("success");
- // // // setSentAmount((0))
- // // } else {
- // // setSentAmount((sentAmount() + 50000))
- // // }
- // }, 1000)
- });
-
- // const outputUtxo = createMemo(() => {
- // return findUtxoByOutpoint(redshiftResource()?.output_utxo, utxos())
- // })
-
- createEffect(() => {
- setRedshifted(true, redshiftResource()?.output_utxo);
- });
-
- const network = state.mutiny_wallet?.get_network() as Network;
-
- return (
-
- {/*
- We did it. Here's your new UTXO:
-
-
-
-
-
- */}
-
- {i18n.t("redshift.what_happened")}
-
-
-
- {/*
-
-
-
- */}
-
-
-
-
-
-
-
-
-
-
-
-
- {
- redshiftResource()!
- .introduction_channel
- }
-
-
- {i18n.t("common.view_transaction")}
-
-
-
-
-
-
-
- {redshiftResource()!.output_channel}
-
-
- {i18n.t("common.view_transaction")}
-
-
-
-
-
-
-
-
-
- );
-}
-
-export function Utxo(props: { item: UtxoItem; onClick?: () => void }) {
- const i18n = useI18n();
- const redshifted = createMemo(() => getRedshifted(props.item.outpoint));
- return (
- <>
- props.onClick && props.onClick()}
- >
-
-

-
-
-
-
- {i18n.t("redshift.unknown")}
-
- }
- >
-
- {i18n.t("redshift.title")}
-
-
-
-
-
-
-
- {/* {props.item?.is_spent ? "SPENT" : "UNSPENT"} */}
-
-
-
- >
- );
-}
-
-const FAKE_STATES = [
- "Creating a new node",
- "Opening a channel",
- "Sending funds through",
- "Closing the channel",
- "Redshift complete"
-];
-
-function ShiftObserver(props: {
- setShiftStage: (stage: ShiftStage) => void;
- redshiftId: string;
-}) {
- const i18n = useI18n();
- const [_state, _actions] = useMegaStore();
-
- const [fakeStage, _setFakeStage] = createSignal(2);
-
- const [sentAmount, setSentAmount] = createSignal(0);
-
- onMount(() => {
- const interval = setInterval(() => {
- if (sentAmount() === 200000) {
- clearInterval(interval);
- props.setShiftStage("success");
- // setSentAmount((0))
- } else {
- setSentAmount(sentAmount() + 50000);
- }
- }, 1000);
- });
-
- // async function checkRedshift(id: string) {
- // console.log("Checking redshift", id)
- // const redshift = await state.mutiny_wallet?.get_redshift(id)
- // console.log(redshift)
- // return redshift
- // }
-
- // const [redshiftResource, { refetch }] = createResource(
- // props.redshiftId,
- // checkRedshift
- // )
-
- // onMount(() => {
- // const interval = setInterval(() => {
- // if (redshiftResource()) refetch();
- // // if (sentAmount() === 200000) {
- // // clearInterval(interval)
- // // props.setShiftStage("success");
- // // // setSentAmount((0))
-
- // // } else {
- // // setSentAmount((sentAmount() + 50000))
- // // }
- // }, 1000)
- // })
-
- // createEffect(() => {
- // const interval = setInterval(() => {
- // if (chosenUtxo()) refetch();
- // }, 1000); // Poll every second
- // onCleanup(() => {
- // clearInterval(interval);
- // });
- // });
-
- return (
- <>
- {i18n.t("redshift.watch_it_go")}
-
-
- {FAKE_STATES[fakeStage()]}
-
-
-
-
- >
- );
-}
-
-const KV: ParentComponent<{ key: string }> = (props) => {
- return (
-
-
{props.key}
- {props.children}
-
- );
-};
-
-export default function Redshift() {
- const i18n = useI18n();
- const [state, _actions] = useMegaStore();
-
- const [shiftStage, setShiftStage] = createSignal("choose");
- const [shiftType, setShiftType] = createSignal("utxo");
-
- const [chosenUtxo, setChosenUtxo] = createSignal();
-
- const SHIFT_OPTIONS = [
- {
- value: "utxo",
- label: i18n.t("redshift.utxo_label"),
- caption: i18n.t("redshift.utxo_caption")
- },
- {
- value: "lightning",
- label: i18n.t("redshift.lightning_label"),
- caption: i18n.t("redshift.lightning_caption")
- }
- ];
-
- const getUtXos = async () => {
- console.log("Getting utxos");
- return (await state.mutiny_wallet?.list_utxos()) as UtxoItem[];
- };
-
- // TODO: FIXME: this is old code needs to be revisited!
- const getChannels = async () => {
- console.log("Getting channels");
- // await state.mutiny_wallet?.sync();
- const channels =
- (await state.mutiny_wallet?.list_channels()) as Promise<
- MutinyChannel[]
- >;
- console.log(channels);
- return channels;
- };
-
- const [utxos, { refetch: _refetchUtxos }] = createResource(getUtXos);
- const [_channels, { refetch: _refetchChannels }] =
- createResource(getChannels);
-
- const redshiftedUtxos = createMemo(() => {
- return utxos()?.filter((utxo) => getRedshifted(utxo.outpoint));
- });
-
- const unredshiftedUtxos = createMemo(() => {
- return utxos()?.filter((utxo) => !getRedshifted(utxo.outpoint));
- });
-
- function resetState() {
- setShiftStage("choose");
- setShiftType("utxo");
- setChosenUtxo(undefined);
- }
-
- async function redshiftUtxo(utxo: UtxoItem) {
- console.log("Redshifting utxo", utxo.outpoint);
- const redshift = await state.mutiny_wallet?.init_redshift(
- utxo.outpoint
- );
- console.log("Redshift initialized:");
- console.log(redshift);
- return redshift;
- }
-
- const [initializedRedshift, { refetch: _refetchRedshift }] = createResource(
- chosenUtxo,
- redshiftUtxo
- );
-
- createEffect(() => {
- if (chosenUtxo() && initializedRedshift()) {
- // window.location.href = "/"
- setShiftStage("observe");
- }
- });
-
- return (
-
-
-
-
-
- {i18n.t("redshift.title")}{" "}
- {i18n.t("common.coming_soon")}
-
-
-
- {/* {JSON.stringify(redshiftResource(), null, 2)} */}
-
-
-
-
- {i18n.t("redshift.where_this_goes")}
-
-
- setShiftType(
- newValue as ShiftOption
- )
- }
- choices={SHIFT_OPTIONS}
- />
-
-
-
- {i18n.t("redshift.choose_your")}{" "}
-
-
- {" "}
- {i18n.t("redshift.utxo_to_begin")}
-
-
-
-
-
-
-
-
-
- {i18n.t(
- "redshift.no_utxos_empty_state"
- )}
-
-
- = 0
- }
- >
-
- {(utxo) => (
-
- setChosenUtxo(
- utxo
- )
- }
- />
- )}
-
-
-
-
-
-
-
-
- {i18n.t(
- "redshift.redshifted"
- )}{" "}
-
- {i18n.t(
- "redshift.utxos"
- )}
-
- }
- >
-
-
-
-
-
-
- {i18n.t(
- "redshift.no_utxos_empty_state"
- )}
-
-
- = 0
- }
- >
-
- {(utxo) => (
-
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {i18n.t("redshift.oh_dear")}
-
- {i18n.t("redshift.here_is_error")}
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/routes/Scanner.tsx b/src/routes/Scanner.tsx
index b5bed4d..47c205c 100644
--- a/src/routes/Scanner.tsx
+++ b/src/routes/Scanner.tsx
@@ -1,8 +1,6 @@
-import Reader from "~/components/Reader";
import { createEffect, createSignal } from "solid-js";
import { useNavigate } from "solid-start";
-import { Button } from "~/components/layout";
-import { showToast } from "~/components/Toaster";
+import { Button, Scanner as Reader, showToast } from "~/components";
import { useMegaStore } from "~/state/megaStore";
import { toParsedParams } from "~/logic/waila";
import { Clipboard } from "@capacitor/clipboard";
diff --git a/src/routes/Send.tsx b/src/routes/Send.tsx
index b812bde..f05497f 100644
--- a/src/routes/Send.tsx
+++ b/src/routes/Send.tsx
@@ -7,9 +7,10 @@ import {
createSignal,
onMount
} from "solid-js";
-import { AmountSats, AmountFiat } from "~/components/Amount";
-import NavBar from "~/components/NavBar";
import {
+ NavBar,
+ AmountSats,
+ AmountFiat,
Button,
ButtonLink,
Card,
@@ -19,35 +20,35 @@ import {
MutinyWalletGuard,
SafeArea,
SmallHeader,
- VStack
-} from "~/components/layout";
+ VStack,
+ StyledRadioGroup,
+ showToast,
+ MegaCheck,
+ MegaEx,
+ BackLink,
+ TagEditor,
+ StringShower,
+ AmountCard,
+ BackButton,
+ SuccessModal,
+ InfoBox,
+ Fee
+} from "~/components";
+import { ExternalLink } from "@mutinywallet/ui";
import { Paste } from "~/assets/svg/Paste";
import { Scan } from "~/assets/svg/Scan";
import { useMegaStore } from "~/state/megaStore";
import { Contact, MutinyInvoice } from "@mutinywallet/mutiny-wasm";
-import { StyledRadioGroup } from "~/components/layout/Radio";
-import { showToast } from "~/components/Toaster";
import eify from "~/utils/eify";
-import { MegaCheck } from "~/components/successfail/MegaCheck";
-import { MegaEx } from "~/components/successfail/MegaEx";
import mempoolTxUrl from "~/utils/mempoolTxUrl";
-import { BackLink } from "~/components/layout/BackLink";
import { useNavigate } from "solid-start";
-import { TagEditor } from "~/components/TagEditor";
-import { StringShower } from "~/components/ShareCard";
-import { AmountCard } from "~/components/AmountCard";
import { MutinyTagItem } from "~/utils/tags";
-import { BackButton } from "~/components/layout/BackButton";
import { Network } from "~/logic/mutinyWalletSetup";
-import { SuccessModal } from "~/components/successfail/SuccessModal";
-import { ExternalLink } from "@mutinywallet/ui";
-import { InfoBox } from "~/components/InfoBox";
import { useI18n } from "~/i18n/context";
import { ParsedParams, toParsedParams } from "~/logic/waila";
import { Clipboard } from "@capacitor/clipboard";
import { Capacitor } from "@capacitor/core";
import { FeedbackLink } from "./Feedback";
-import { Fee } from "~/components/Fee";
export type SendSource = "lightning" | "onchain";
diff --git a/src/routes/Storybook.tsx b/src/routes/Storybook.tsx
index f9cc016..b4b981d 100644
--- a/src/routes/Storybook.tsx
+++ b/src/routes/Storybook.tsx
@@ -1,15 +1,15 @@
-import { AmountCard } from "~/components/AmountCard";
-import { Fee } from "~/components/Fee";
-import NavBar from "~/components/NavBar";
-import { OnboardWarning } from "~/components/OnboardWarning";
-import { ShareCard } from "~/components/ShareCard";
import {
+ AmountCard,
+ Fee,
+ NavBar,
+ OnboardWarning,
Button,
DefaultMain,
+ ShareCard,
LargeHeader,
SafeArea,
VStack
-} from "~/components/layout";
+} from "~/components";
const SAMPLE =
"bitcoin:tb1prqm8xtlgme0vmw5s30lgf0a4f5g4mkgsqundwmpu6thrg8zr6uvq2qrhzq?amount=0.001&lightning=lntbs1m1pj9n9xjsp5xgdrmvprtm67p7nq4neparalexlhlmtxx87zx6xeqthsplu842zspp546d6zd2seyaxpapaxx62m88yz3xueqtjmn9v6wj8y56np8weqsxqdqqnp4qdn2hj8tfknpuvdg6tz9yrf3e27ltrx9y58c24jh89lnm43yjwfc5xqrpwjcqpj9qrsgq5sdgh0m3ur5mu5hrmmag4mx9yvy86f83pd0x9ww80kgck6tac3thuzkj0mrtltaxwnlfea95h2re7tj4qsnwzxlvrdmyq2h9mgapnycpppz6k6";
diff --git a/src/routes/Swap.tsx b/src/routes/Swap.tsx
index 35e69fb..2bc7bc3 100644
--- a/src/routes/Swap.tsx
+++ b/src/routes/Swap.tsx
@@ -9,33 +9,33 @@ import {
createResource,
createSignal
} from "solid-js";
-import { AmountCard } from "~/components/AmountCard";
-import NavBar from "~/components/NavBar";
-import { showToast } from "~/components/Toaster";
import {
+ AmountCard,
+ NavBar,
+ showToast,
Button,
Card,
DefaultMain,
LargeHeader,
MutinyWalletGuard,
SafeArea,
- VStack
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
-import { TextField } from "~/components/layout/TextField";
+ BackLink,
+ TextField,
+ VStack,
+ MegaCheck,
+ MegaEx,
+ InfoBox,
+ SuccessModal,
+ AmountFiat
+} from "~/components";
import { MethodChooser, SendSource } from "~/routes/Send";
import { useMegaStore } from "~/state/megaStore";
import eify from "~/utils/eify";
-import { MegaCheck } from "~/components/successfail/MegaCheck";
-import { MegaEx } from "~/components/successfail/MegaEx";
-import { InfoBox } from "~/components/InfoBox";
import { useNavigate } from "solid-start";
import mempoolTxUrl from "~/utils/mempoolTxUrl";
-import { SuccessModal } from "~/components/successfail/SuccessModal";
import { ExternalLink } from "@mutinywallet/ui";
import { Network } from "~/logic/mutinyWalletSetup";
import { useI18n } from "~/i18n/context";
-import { AmountFiat } from "~/components/Amount";
const CHANNEL_FEE_ESTIMATE_ADDRESS =
"bc1qf7546vg73ddsjznzq57z3e8jdn6gtw6au576j07kt6d9j7nz8mzsyn6lgf";
diff --git a/src/routes/[...404].tsx b/src/routes/[...404].tsx
index 8f54961..f06ea80 100644
--- a/src/routes/[...404].tsx
+++ b/src/routes/[...404].tsx
@@ -1,11 +1,6 @@
import { Title } from "solid-start";
import { HttpStatusCode } from "solid-start/server";
-import {
- ButtonLink,
- DefaultMain,
- LargeHeader,
- SafeArea
-} from "~/components/layout";
+import { ButtonLink, DefaultMain, LargeHeader, SafeArea } from "~/components";
import { useI18n } from "~/i18n/context";
export default function NotFound() {
diff --git a/src/routes/index.tsx b/src/routes/index.tsx
index 3e2a5f5..8f06ccd 100644
--- a/src/routes/index.tsx
+++ b/src/routes/index.tsx
@@ -1,8 +1,6 @@
-import App from "~/components/App";
import { Switch, Match } from "solid-js";
import { useMegaStore } from "~/state/megaStore";
-import { FullscreenLoader } from "~/components/layout";
-import SetupErrorDisplay from "~/components/SetupErrorDisplay";
+import { App, FullscreenLoader, SetupErrorDisplay } from "~/components";
export default function Home() {
const [state, _] = useMegaStore();
diff --git a/src/routes/settings/Admin.tsx b/src/routes/settings/Admin.tsx
index 77b7585..035b00d 100644
--- a/src/routes/settings/Admin.tsx
+++ b/src/routes/settings/Admin.tsx
@@ -1,16 +1,16 @@
-import { DeleteEverything } from "~/components/DeleteEverything";
-import KitchenSink from "~/components/KitchenSink";
-import NavBar from "~/components/NavBar";
import {
+ DeleteEverything,
+ KitchenSink,
+ NavBar,
DefaultMain,
LargeHeader,
MutinyWalletGuard,
NiceP,
SafeArea,
SmallHeader,
- VStack
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
+ VStack,
+ BackLink
+} from "~/components";
import { useI18n } from "~/i18n/context";
export default function Admin() {
diff --git a/src/routes/settings/Backup.tsx b/src/routes/settings/Backup.tsx
index b65a48c..95538d0 100644
--- a/src/routes/settings/Backup.tsx
+++ b/src/routes/settings/Backup.tsx
@@ -6,14 +6,14 @@ import {
MutinyWalletGuard,
SafeArea,
VStack,
- Checkbox
-} from "~/components/layout";
-import NavBar from "~/components/NavBar";
+ Checkbox,
+ NavBar,
+ SeedWords,
+ BackLink
+} from "~/components";
import { useNavigate } from "solid-start";
-import { SeedWords } from "~/components/SeedWords";
import { useMegaStore } from "~/state/megaStore";
import { Show, createEffect, createSignal } from "solid-js";
-import { BackLink } from "~/components/layout/BackLink";
import { useI18n } from "~/i18n/context";
function Quiz(props: { setHasCheckedAll: (hasChecked: boolean) => void }) {
diff --git a/src/routes/settings/Channels.tsx b/src/routes/settings/Channels.tsx
index ab05c96..c315353 100644
--- a/src/routes/settings/Channels.tsx
+++ b/src/routes/settings/Channels.tsx
@@ -9,11 +9,11 @@ import {
SafeArea,
SmallHeader,
TinyText,
- VStack
-} from "~/components/layout";
-import { AmountSmall } from "~/components/Amount";
-import { BackLink } from "~/components/layout/BackLink";
-import NavBar from "~/components/NavBar";
+ VStack,
+ AmountSmall,
+ BackLink,
+ NavBar
+} from "~/components";
import { useI18n } from "~/i18n/context";
function BalanceBar(props: { inbound: number; outbound: number }) {
diff --git a/src/routes/settings/Connections.tsx b/src/routes/settings/Connections.tsx
index 39c2eb5..82903f1 100644
--- a/src/routes/settings/Connections.tsx
+++ b/src/routes/settings/Connections.tsx
@@ -1,11 +1,12 @@
import { NwcProfile } from "@mutinywallet/mutiny-wasm";
import { For, Show, createResource, createSignal } from "solid-js";
import { QRCodeSVG } from "solid-qr-code";
-import { KeyValue, MiniStringShower } from "~/components/DetailsModal";
-import { InfoBox } from "~/components/InfoBox";
-import NavBar from "~/components/NavBar";
-import { ShareCard } from "~/components/ShareCard";
import {
+ KeyValue,
+ MiniStringShower,
+ InfoBox,
+ NavBar,
+ ShareCard,
Button,
Collapser,
DefaultMain,
@@ -15,10 +16,10 @@ import {
SafeArea,
SettingsCard,
SimpleDialog,
- VStack
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
-import { TextField } from "~/components/layout/TextField";
+ VStack,
+ BackLink,
+ TextField
+} from "~/components";
import { useMegaStore } from "~/state/megaStore";
import eify from "~/utils/eify";
import { useI18n } from "~/i18n/context";
diff --git a/src/routes/settings/EmergencyKit.tsx b/src/routes/settings/EmergencyKit.tsx
index 0d93bb4..2ce2d36 100644
--- a/src/routes/settings/EmergencyKit.tsx
+++ b/src/routes/settings/EmergencyKit.tsx
@@ -1,17 +1,17 @@
-import { DeleteEverything } from "~/components/DeleteEverything";
-import { ImportExport } from "~/components/ImportExport";
-import { LoadingIndicator } from "~/components/LoadingIndicator";
-import { Logs } from "~/components/Logs";
-import NavBar from "~/components/NavBar";
import {
+ DeleteEverything,
+ ImportExport,
+ LoadingIndicator,
+ Logs,
+ NavBar,
DefaultMain,
LargeHeader,
NiceP,
SafeArea,
SmallHeader,
- VStack
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
+ VStack,
+ BackLink
+} from "~/components";
import { ExternalLink } from "@mutinywallet/ui";
import { useI18n } from "~/i18n/context";
diff --git a/src/routes/settings/Encrypt.tsx b/src/routes/settings/Encrypt.tsx
index 7537809..3945230 100644
--- a/src/routes/settings/Encrypt.tsx
+++ b/src/routes/settings/Encrypt.tsx
@@ -6,17 +6,17 @@ import {
NiceP,
MutinyWalletGuard,
SafeArea,
- VStack
-} from "~/components/layout";
-import NavBar from "~/components/NavBar";
+ VStack,
+ NavBar,
+ BackLink,
+ TextField,
+ InfoBox
+} from "~/components";
import { useMegaStore } from "~/state/megaStore";
import { Show, createSignal } from "solid-js";
-import { BackLink } from "~/components/layout/BackLink";
import { createForm } from "@modular-forms/solid";
-import { TextField } from "~/components/layout/TextField";
import { timeout } from "~/utils/timeout";
import eify from "~/utils/eify";
-import { InfoBox } from "~/components/InfoBox";
import { useI18n } from "~/i18n/context";
type EncryptPasswordForm = {
diff --git a/src/routes/settings/LnUrlAuth.tsx b/src/routes/settings/LnUrlAuth.tsx
index bc6bf75..7f748cc 100644
--- a/src/routes/settings/LnUrlAuth.tsx
+++ b/src/routes/settings/LnUrlAuth.tsx
@@ -1,15 +1,15 @@
import { TextField } from "@kobalte/core";
import { createSignal } from "solid-js";
-import NavBar from "~/components/NavBar";
import {
Button,
+ NavBar,
DefaultMain,
InnerCard,
LargeHeader,
MutinyWalletGuard,
- SafeArea
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
+ SafeArea,
+ BackLink
+} from "~/components";
import { useMegaStore } from "~/state/megaStore";
import { useI18n } from "~/i18n/context";
diff --git a/src/routes/settings/Plus.tsx b/src/routes/settings/Plus.tsx
index 1d4a4a9..2fa02d6 100644
--- a/src/routes/settings/Plus.tsx
+++ b/src/routes/settings/Plus.tsx
@@ -7,10 +7,10 @@ import {
createSignal
} from "solid-js";
import { A } from "solid-start";
-import { ConfirmDialog } from "~/components/Dialog";
-import { InfoBox } from "~/components/InfoBox";
-import NavBar from "~/components/NavBar";
import {
+ ConfirmDialog,
+ InfoBox,
+ NavBar,
Button,
DefaultMain,
FancyCard,
@@ -19,13 +19,13 @@ import {
NiceP,
SafeArea,
TinyText,
- VStack
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
+ VStack,
+ BackLink,
+ LoadingShimmer
+} from "~/components";
import { useMegaStore } from "~/state/megaStore";
import eify from "~/utils/eify";
import party from "~/assets/party.gif";
-import { LoadingShimmer } from "~/components/BalanceBox";
import { useI18n } from "~/i18n/context";
import { subscriptionValid } from "~/utils/subscriptions";
diff --git a/src/routes/settings/Restore.tsx b/src/routes/settings/Restore.tsx
index b010710..c86cbc3 100644
--- a/src/routes/settings/Restore.tsx
+++ b/src/routes/settings/Restore.tsx
@@ -4,10 +4,14 @@ import {
LargeHeader,
NiceP,
SafeArea,
- VStack
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
-import NavBar from "~/components/NavBar";
+ VStack,
+ BackLink,
+ NavBar,
+ TextFieldProps,
+ showToast,
+ ConfirmDialog,
+ InfoBox
+} from "~/components";
import { useMegaStore } from "~/state/megaStore";
import { For, Show, createSignal, splitProps } from "solid-js";
import pasteIcon from "~/assets/icons/paste.svg";
@@ -20,13 +24,9 @@ import {
validate
} from "@modular-forms/solid";
import { TextField as KTextField } from "@kobalte/core";
-import { TextFieldProps } from "~/components/layout/TextField";
-import { showToast } from "~/components/Toaster";
import eify from "~/utils/eify";
-import { ConfirmDialog } from "~/components/Dialog";
import { MutinyWallet } from "@mutinywallet/mutiny-wasm";
import { WORDS_EN } from "~/utils/words";
-import { InfoBox } from "~/components/InfoBox";
import { Clipboard } from "@capacitor/clipboard";
import { Capacitor } from "@capacitor/core";
import { useI18n } from "~/i18n/context";
diff --git a/src/routes/settings/Servers.tsx b/src/routes/settings/Servers.tsx
index ffbf486..ef227e3 100644
--- a/src/routes/settings/Servers.tsx
+++ b/src/routes/settings/Servers.tsx
@@ -1,5 +1,4 @@
import { createForm, url } from "@modular-forms/solid";
-import { TextField } from "~/components/layout/TextField";
import {
MutinyWalletSettingStrings,
setSettings
@@ -8,16 +7,17 @@ import {
Button,
Card,
DefaultMain,
+ TextField,
LargeHeader,
MutinyWalletGuard,
NiceP,
- SafeArea
-} from "~/components/layout";
-import { showToast } from "~/components/Toaster";
+ SafeArea,
+ showToast,
+ BackLink,
+ NavBar
+} from "~/components";
import eify from "~/utils/eify";
import { ExternalLink } from "@mutinywallet/ui";
-import { BackLink } from "~/components/layout/BackLink";
-import NavBar from "~/components/NavBar";
import { useI18n } from "~/i18n/context";
import { useMegaStore } from "~/state/megaStore";
diff --git a/src/routes/settings/index.tsx b/src/routes/settings/index.tsx
index 17cd65d..32d902e 100644
--- a/src/routes/settings/index.tsx
+++ b/src/routes/settings/index.tsx
@@ -3,10 +3,10 @@ import {
LargeHeader,
SafeArea,
SettingsCard,
- VStack
-} from "~/components/layout";
-import { BackLink } from "~/components/layout/BackLink";
-import NavBar from "~/components/NavBar";
+ VStack,
+ BackLink,
+ NavBar
+} from "~/components";
import { A } from "solid-start";
import { For, Show } from "solid-js";
import forward from "~/assets/icons/forward.svg";