From 0686d83b21b3913dca5c1d03d5a6e31722beae50 Mon Sep 17 00:00:00 2001 From: Qubasa Date: Wed, 18 Jun 2025 22:42:00 +0200 Subject: [PATCH] clan-app: 3d UI Remove unused files and exports --- pkgs/clan-app/ui/knip.json | 19 +++++++ pkgs/clan-app/ui/package.json | 4 +- pkgs/clan-app/ui/src/Form/base/index.tsx | 4 +- .../ui/src/Form/fields/FormSection.tsx | 2 +- pkgs/clan-app/ui/src/Form/fields/Select.tsx | 2 +- pkgs/clan-app/ui/src/Form/form/index.tsx | 14 ++--- pkgs/clan-app/ui/src/api/index.tsx | 18 +++---- pkgs/clan-app/ui/src/api/wifi.ts | 20 ------- .../ui/src/components/Button/Button.tsx | 2 +- .../ui/src/components/SelectInput.tsx | 54 ------------------- .../ui/src/components/Sidebar/index.tsx | 2 +- .../ui/src/components/TagList/TagList.tsx | 2 +- .../ui/src/components/Typography/index.tsx | 2 +- .../ui/src/components/group/index.tsx | 2 +- .../src/components/noiseThumbnail/index.tsx | 2 +- .../ui/src/components/toast/index.tsx | 4 +- pkgs/clan-app/ui/src/components/v2/index.css | 3 +- pkgs/clan-app/ui/src/floating/index.tsx | 4 +- pkgs/clan-app/ui/src/hooks/index.ts | 2 +- pkgs/clan-app/ui/src/index.css | 3 +- pkgs/clan-app/ui/src/queries/index.ts | 2 +- pkgs/clan-app/ui/src/routes/colors/view.tsx | 13 ----- pkgs/clan-app/ui/src/routes/deploy/index.tsx | 6 --- pkgs/clan-app/ui/src/routes/disk/view.tsx | 31 ----------- pkgs/clan-app/ui/src/routes/flash/view.tsx | 2 +- .../src/routes/machines/install/vars-step.tsx | 4 +- pkgs/clan-app/ui/src/routes/modules/add.tsx | 2 +- .../ui/src/routes/modules/details.tsx | 2 +- pkgs/clan-app/ui/src/stores/clan.tsx | 1 - 29 files changed, 60 insertions(+), 168 deletions(-) create mode 100644 pkgs/clan-app/ui/knip.json delete mode 100644 pkgs/clan-app/ui/src/api/wifi.ts delete mode 100644 pkgs/clan-app/ui/src/components/SelectInput.tsx delete mode 100644 pkgs/clan-app/ui/src/routes/colors/view.tsx delete mode 100644 pkgs/clan-app/ui/src/routes/deploy/index.tsx delete mode 100644 pkgs/clan-app/ui/src/routes/disk/view.tsx diff --git a/pkgs/clan-app/ui/knip.json b/pkgs/clan-app/ui/knip.json new file mode 100644 index 000000000..1104209f2 --- /dev/null +++ b/pkgs/clan-app/ui/knip.json @@ -0,0 +1,19 @@ +{ + "ignore": [ + "gtk.webview.js", + "stylelint.config.js", + "util.ts", + "src/components/v2/**", + "api/**", + "tailwind/**" + ], + "ignoreDependencies": [ + "@babel/plugin-syntax-import-attributes", + "@storybook/addon-viewport", + "@typescript-eslint/parser", + "@vitest/coverage-v8", + "http-server", + "playwright", + "wait-on" + ] +} diff --git a/pkgs/clan-app/ui/package.json b/pkgs/clan-app/ui/package.json index 25ea99623..be1dd4531 100644 --- a/pkgs/clan-app/ui/package.json +++ b/pkgs/clan-app/ui/package.json @@ -12,6 +12,7 @@ "check": "tsc --noEmit --skipLibCheck && eslint ./src", "test": "vitest run --project unit --typecheck", "storybook": "storybook", + "knip": "knip", "storybook-build": "storybook build", "storybook-dev": "storybook dev -p 6006", "test-storybook": "vitest run --project storybook", @@ -43,6 +44,7 @@ "eslint-plugin-tailwindcss": "^3.17.0", "http-server": "^14.1.1", "jsdom": "^26.1.0", + "knip": "^5.61.2", "playwright": "~1.52.0", "postcss": "^8.4.38", "postcss-url": "^10.1.3", @@ -68,10 +70,8 @@ "@tanstack/eslint-plugin-query": "^5.51.12", "@tanstack/solid-query": "^5.76.0", "corvu": "^0.7.1", - "material-icons": "^1.13.12", "nanoid": "^5.0.7", "solid-js": "^1.9.7", - "solid-markdown": "^2.0.13", "solid-toast": "^0.5.0", "three": "^0.176.0" }, diff --git a/pkgs/clan-app/ui/src/Form/base/index.tsx b/pkgs/clan-app/ui/src/Form/base/index.tsx index ba62cd2c9..1d1a76095 100644 --- a/pkgs/clan-app/ui/src/Form/base/index.tsx +++ b/pkgs/clan-app/ui/src/Form/base/index.tsx @@ -6,7 +6,7 @@ import type { } from "@floating-ui/dom"; import { computePosition } from "@floating-ui/dom"; -export interface UseFloatingOptions< +interface UseFloatingOptions< R extends ReferenceElement, F extends HTMLElement, > extends Partial { @@ -23,7 +23,7 @@ interface UseFloatingState extends Omit { y?: number | null; } -export interface UseFloatingResult extends UseFloatingState { +interface UseFloatingResult extends UseFloatingState { update(): void; } diff --git a/pkgs/clan-app/ui/src/Form/fields/FormSection.tsx b/pkgs/clan-app/ui/src/Form/fields/FormSection.tsx index d3633f0b2..66a17717d 100644 --- a/pkgs/clan-app/ui/src/Form/fields/FormSection.tsx +++ b/pkgs/clan-app/ui/src/Form/fields/FormSection.tsx @@ -3,6 +3,6 @@ import { JSX } from "solid-js"; interface FormSectionProps { children: JSX.Element; } -export const FormSection = (props: FormSectionProps) => { +const FormSection = (props: FormSectionProps) => { return
{props.children}
; }; diff --git a/pkgs/clan-app/ui/src/Form/fields/Select.tsx b/pkgs/clan-app/ui/src/Form/fields/Select.tsx index 727f62f62..88522f8cf 100644 --- a/pkgs/clan-app/ui/src/Form/fields/Select.tsx +++ b/pkgs/clan-app/ui/src/Form/fields/Select.tsx @@ -21,7 +21,7 @@ import { FieldLayout } from "./layout"; import Icon from "@/src/components/icon"; import { useContext } from "corvu/dialog"; -export interface Option { +interface Option { value: string; label: string; disabled?: boolean; diff --git a/pkgs/clan-app/ui/src/Form/form/index.tsx b/pkgs/clan-app/ui/src/Form/form/index.tsx index f4e1b038c..031ca927d 100644 --- a/pkgs/clan-app/ui/src/Form/form/index.tsx +++ b/pkgs/clan-app/ui/src/Form/form/index.tsx @@ -139,7 +139,7 @@ interface SchemaFieldsProps { readonly: boolean; parent: JSONSchema7; } -export function SchemaFields( +function SchemaFields( props: SchemaFieldsProps, ) { return ( @@ -172,7 +172,7 @@ export function SchemaFields( ); } -export function StringField( +function StringField( props: SchemaFieldsProps, ) { if ( @@ -325,7 +325,7 @@ export function StringField( interface OptionSchemaProps { itemSpec: JSONSchema7Type; } -export function OptionSchema(props: OptionSchemaProps) { +function OptionSchema(props: OptionSchemaProps) { return ( Item spec unhandled} @@ -344,7 +344,7 @@ interface ValueDisplayProps idx: number; of: number; } -export function ListValueDisplay( +function ListValueDisplay( props: ValueDisplayProps, ) { const removeItem = (e: Event) => { @@ -446,7 +446,7 @@ const OnlyStringItems = (props: OnlyStringItems) => { ); }; -export function ArrayFields( +function ArrayFields( props: SchemaFieldsProps, ) { if (props.schema.type !== "array") { @@ -711,7 +711,7 @@ interface ObjectFieldPropertyLabelProps { schema: JSONSchema7; fallback: JSX.Element; } -export function ObjectFieldPropertyLabel(props: ObjectFieldPropertyLabelProps) { +function ObjectFieldPropertyLabel(props: ObjectFieldPropertyLabelProps) { return ( {/* @ts-expect-error: $exportedModuleInfo should exist since we export it */} @@ -722,7 +722,7 @@ export function ObjectFieldPropertyLabel(props: ObjectFieldPropertyLabelProps) { ); } -export function ObjectFields( +function ObjectFields( props: SchemaFieldsProps, ) { if (props.schema.type !== "object") { diff --git a/pkgs/clan-app/ui/src/api/index.tsx b/pkgs/clan-app/ui/src/api/index.tsx index 531448f53..a51fa07b8 100644 --- a/pkgs/clan-app/ui/src/api/index.tsx +++ b/pkgs/clan-app/ui/src/api/index.tsx @@ -7,11 +7,11 @@ import { ErrorToastComponent, CancelToastComponent, } from "@/src/components/toast"; -export type OperationNames = keyof API; +type OperationNames = keyof API; export type OperationArgs = API[T]["arguments"]; export type OperationResponse = API[T]["return"]; -export type ApiEnvelope = +type ApiEnvelope = | { status: "success"; data: T; @@ -19,9 +19,9 @@ export type ApiEnvelope = } | ApiError; -export type Services = NonNullable; -export type ServiceNames = keyof Services; -export type ClanService = Services[T]; +type Services = NonNullable; +type ServiceNames = keyof Services; +type ClanService = Services[T]; export type ClanServiceInstance = NonNullable< Services[T] >[string]; @@ -32,15 +32,15 @@ export type SuccessQuery = Extract< >; export type SuccessData = SuccessQuery["data"]; -export type ErrorQuery = Extract< +type ErrorQuery = Extract< OperationResponse, { status: "error" } >; -export type ErrorData = ErrorQuery["errors"]; +type ErrorData = ErrorQuery["errors"]; -export type ClanOperations = Record void>; +type ClanOperations = Record void>; -export interface GtkResponse { +interface GtkResponse { result: T; op_key: string; } diff --git a/pkgs/clan-app/ui/src/api/wifi.ts b/pkgs/clan-app/ui/src/api/wifi.ts deleted file mode 100644 index 8e84776e2..000000000 --- a/pkgs/clan-app/ui/src/api/wifi.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { callApi } from "."; -import { Schema as Inventory } from "@/api/Inventory"; - -export const instance_name = (machine_name: string) => - `${machine_name}_wifi_0` as const; - -export async function get_iwd_service(base_path: string, machine_name: string) { - const r = await callApi("get_inventory", { - flake: { identifier: base_path }, - }).promise; - if (r.status == "error") { - return null; - } - // @FIXME: Clean this up once we implement the feature - // @ts-expect-error: This doesn't check currently - const inventory: Inventory = r.data; - - const instance_key = instance_name(machine_name); - return inventory.services?.iwd?.[instance_key] || null; -} diff --git a/pkgs/clan-app/ui/src/components/Button/Button.tsx b/pkgs/clan-app/ui/src/components/Button/Button.tsx index 4d7e55e76..1895e2246 100644 --- a/pkgs/clan-app/ui/src/components/Button/Button.tsx +++ b/pkgs/clan-app/ui/src/components/Button/Button.tsx @@ -42,7 +42,7 @@ const sizeFont: Record = { s: cx("text-[0.75rem]"), }; -export interface ButtonProps +interface ButtonProps extends JSX.ButtonHTMLAttributes { variant?: Variants; size?: Size; diff --git a/pkgs/clan-app/ui/src/components/SelectInput.tsx b/pkgs/clan-app/ui/src/components/SelectInput.tsx deleted file mode 100644 index 9d8ea3d10..000000000 --- a/pkgs/clan-app/ui/src/components/SelectInput.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { FieldValues, FormStore, ResponseData } from "@modular-forms/solid"; -import { Show } from "solid-js"; -import { type JSX } from "solid-js"; -import cx from "classnames"; - -interface SelectInputProps { - formStore: FormStore; - value: string; - options: JSX.Element; - selectProps: JSX.HTMLAttributes; - label: JSX.Element; - error?: string; - required?: boolean; - topRightLabel?: JSX.Element; - class?: string; -} - -export function SelectInput( - props: SelectInputProps, -) { - return ( - - ); -} diff --git a/pkgs/clan-app/ui/src/components/Sidebar/index.tsx b/pkgs/clan-app/ui/src/components/Sidebar/index.tsx index f527e8847..8d062cf73 100644 --- a/pkgs/clan-app/ui/src/components/Sidebar/index.tsx +++ b/pkgs/clan-app/ui/src/components/Sidebar/index.tsx @@ -8,7 +8,7 @@ import "./css/sidebar.css"; import Icon, { IconVariant } from "../icon"; import { clanMetaQuery } from "@/src/queries/clan-meta"; -export const SidebarSection = (props: { +const SidebarSection = (props: { title: string; icon: IconVariant; children: JSX.Element; diff --git a/pkgs/clan-app/ui/src/components/TagList/TagList.tsx b/pkgs/clan-app/ui/src/components/TagList/TagList.tsx index ff039ceaa..78d6ea193 100644 --- a/pkgs/clan-app/ui/src/components/TagList/TagList.tsx +++ b/pkgs/clan-app/ui/src/components/TagList/TagList.tsx @@ -2,7 +2,7 @@ import { Component, For } from "solid-js"; import { Typography } from "@/src/components/Typography"; import "./TagList.css"; -export interface TagListProps { +interface TagListProps { values: string[]; } diff --git a/pkgs/clan-app/ui/src/components/Typography/index.tsx b/pkgs/clan-app/ui/src/components/Typography/index.tsx index 994ffd104..63c2f9e04 100644 --- a/pkgs/clan-app/ui/src/components/Typography/index.tsx +++ b/pkgs/clan-app/ui/src/components/Typography/index.tsx @@ -3,7 +3,7 @@ import { Dynamic } from "solid-js/web"; import cx from "classnames"; import "./css/typography.css"; -export type Hierarchy = "body" | "title" | "headline" | "label"; +type Hierarchy = "body" | "title" | "headline" | "label"; type Color = "primary" | "secondary" | "tertiary"; type Weight = "normal" | "medium" | "bold"; type Tag = "span" | "p" | "h1" | "h2" | "h3" | "h4" | "div"; diff --git a/pkgs/clan-app/ui/src/components/group/index.tsx b/pkgs/clan-app/ui/src/components/group/index.tsx index ff0437271..22297e340 100644 --- a/pkgs/clan-app/ui/src/components/group/index.tsx +++ b/pkgs/clan-app/ui/src/components/group/index.tsx @@ -12,7 +12,7 @@ export const Group = (props: GroupProps) => ( ); -export type SectionVariant = "attention" | "danger"; +type SectionVariant = "attention" | "danger"; interface SectionHeaderProps { variant: SectionVariant; diff --git a/pkgs/clan-app/ui/src/components/noiseThumbnail/index.tsx b/pkgs/clan-app/ui/src/components/noiseThumbnail/index.tsx index 66c122bea..e779c6b12 100644 --- a/pkgs/clan-app/ui/src/components/noiseThumbnail/index.tsx +++ b/pkgs/clan-app/ui/src/components/noiseThumbnail/index.tsx @@ -108,7 +108,7 @@ export const RndThumbnail = (props: RndThumbnailProps) => { return {props.name}; }; -export const RndThumbnailShow = () => { +const RndThumbnailShow = () => { const names = ["hsjobeki", "mic92", "lassulus", "D", "A", "D", "B", "C"]; return ( diff --git a/pkgs/clan-app/ui/src/components/toast/index.tsx b/pkgs/clan-app/ui/src/components/toast/index.tsx index 4a2b66154..ef1729f9f 100644 --- a/pkgs/clan-app/ui/src/components/toast/index.tsx +++ b/pkgs/clan-app/ui/src/components/toast/index.tsx @@ -68,7 +68,7 @@ const WarningIcon: Component = () => ( // --- Base Props and Styles --- -export interface BaseToastProps { +interface BaseToastProps { t: Toast; message: string; onCancel?: () => void; // Optional custom function on X click @@ -254,7 +254,7 @@ export const CancelToastComponent: Component = (props) => { }; // Warning Toast -export const WarningToastComponent: Component = (props) => { +const WarningToastComponent: Component = (props) => { let timeoutId: number | undefined; const [clicked, setClicked] = createSignal(false); const [exiting, setExiting] = createSignal(false); diff --git a/pkgs/clan-app/ui/src/components/v2/index.css b/pkgs/clan-app/ui/src/components/v2/index.css index 35bb1af02..c1e6f9ddc 100644 --- a/pkgs/clan-app/ui/src/components/v2/index.css +++ b/pkgs/clan-app/ui/src/components/v2/index.css @@ -1,5 +1,4 @@ -@import "material-icons/iconfont/filled.css"; -/* List of icons: https://marella.me/material-icons/demo/ */ +/* Material icons removed - using custom icons */ /* @import url(./components/Typography/css/typography.css); */ @tailwind base; diff --git a/pkgs/clan-app/ui/src/floating/index.tsx b/pkgs/clan-app/ui/src/floating/index.tsx index ba62cd2c9..1d1a76095 100644 --- a/pkgs/clan-app/ui/src/floating/index.tsx +++ b/pkgs/clan-app/ui/src/floating/index.tsx @@ -6,7 +6,7 @@ import type { } from "@floating-ui/dom"; import { computePosition } from "@floating-ui/dom"; -export interface UseFloatingOptions< +interface UseFloatingOptions< R extends ReferenceElement, F extends HTMLElement, > extends Partial { @@ -23,7 +23,7 @@ interface UseFloatingState extends Omit { y?: number | null; } -export interface UseFloatingResult extends UseFloatingState { +interface UseFloatingResult extends UseFloatingState { update(): void; } diff --git a/pkgs/clan-app/ui/src/hooks/index.ts b/pkgs/clan-app/ui/src/hooks/index.ts index 6a7735e68..b197821fd 100644 --- a/pkgs/clan-app/ui/src/hooks/index.ts +++ b/pkgs/clan-app/ui/src/hooks/index.ts @@ -23,7 +23,7 @@ export const registerClan = async () => { * Opens the custom file dialog * Returns a native FileList to allow interaction with the native input type="file" */ -export const selectSshKeys = async (): Promise => { +const selectSshKeys = async (): Promise => { const dataTransfer = new DataTransfer(); const response = await callApi("open_file", { diff --git a/pkgs/clan-app/ui/src/index.css b/pkgs/clan-app/ui/src/index.css index e645ad29d..4c68000e8 100644 --- a/pkgs/clan-app/ui/src/index.css +++ b/pkgs/clan-app/ui/src/index.css @@ -1,5 +1,4 @@ -@import "material-icons/iconfont/filled.css"; -/* List of icons: https://marella.me/material-icons/demo/ */ +/* Material icons removed - using custom icons */ /* @import url(./components/Typography/css/typography.css); */ @tailwind base; diff --git a/pkgs/clan-app/ui/src/queries/index.ts b/pkgs/clan-app/ui/src/queries/index.ts index 85cabd5de..7c442999d 100644 --- a/pkgs/clan-app/ui/src/queries/index.ts +++ b/pkgs/clan-app/ui/src/queries/index.ts @@ -2,7 +2,7 @@ import { useQuery } from "@tanstack/solid-query"; import { callApi } from "../api"; import toast from "solid-toast"; -export interface ModulesFilter { +interface ModulesFilter { features: string[]; } export const createModulesQuery = ( diff --git a/pkgs/clan-app/ui/src/routes/colors/view.tsx b/pkgs/clan-app/ui/src/routes/colors/view.tsx deleted file mode 100644 index 465c18563..000000000 --- a/pkgs/clan-app/ui/src/routes/colors/view.tsx +++ /dev/null @@ -1,13 +0,0 @@ -export const colors = () => { - return ( -
-
red
-
green
-
blue
-
yellow
-
purple
-
cyan
-
pink
-
- ); -}; diff --git a/pkgs/clan-app/ui/src/routes/deploy/index.tsx b/pkgs/clan-app/ui/src/routes/deploy/index.tsx deleted file mode 100644 index dc19d723c..000000000 --- a/pkgs/clan-app/ui/src/routes/deploy/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { callApi } from "@/src/api"; -import { createQuery } from "@tanstack/solid-query"; - -export const Deploy = () => { - return
Deloy view
; -}; diff --git a/pkgs/clan-app/ui/src/routes/disk/view.tsx b/pkgs/clan-app/ui/src/routes/disk/view.tsx deleted file mode 100644 index 7d02b2aa3..000000000 --- a/pkgs/clan-app/ui/src/routes/disk/view.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { callApi } from "@/src/api"; -import { useQuery } from "@tanstack/solid-query"; -import { useClanContext } from "@/src/contexts/clan"; - -export function DiskView() { - const { activeClanURI } = useClanContext(); - - const query = useQuery(() => ({ - queryKey: ["disk", activeClanURI()], - queryFn: async () => { - const currUri = activeClanURI(); - if (currUri) { - // Example of calling an API - const result = await callApi("get_inventory", { - flake: { identifier: currUri }, - }).promise; - if (result.status === "error") throw new Error("Failed to fetch data"); - return result.data; - } - }, - })); - return ( -
-

Configure Disk

-

- Select machine then configure the disk. Required before installing for - the first time. -

-
- ); -} diff --git a/pkgs/clan-app/ui/src/routes/flash/view.tsx b/pkgs/clan-app/ui/src/routes/flash/view.tsx index a7b0c226d..d33e37e95 100644 --- a/pkgs/clan-app/ui/src/routes/flash/view.tsx +++ b/pkgs/clan-app/ui/src/routes/flash/view.tsx @@ -34,7 +34,7 @@ interface Wifi extends FieldValues { password: string; } -export interface FlashFormValues extends FieldValues { +interface FlashFormValues extends FieldValues { machine: { devicePath: string; flake: string; diff --git a/pkgs/clan-app/ui/src/routes/machines/install/vars-step.tsx b/pkgs/clan-app/ui/src/routes/machines/install/vars-step.tsx index 887852cb1..6045bfb78 100644 --- a/pkgs/clan-app/ui/src/routes/machines/install/vars-step.tsx +++ b/pkgs/clan-app/ui/src/routes/machines/install/vars-step.tsx @@ -19,7 +19,7 @@ import { useClanContext } from "@/src/contexts/clan"; export type VarsValues = FieldValues & Record>; -export interface VarsFormProps { +interface VarsFormProps { machine_id: string; dir: string; handleSubmit: SubmitHandler; @@ -27,7 +27,7 @@ export interface VarsFormProps { footer: JSX.Element; } -export const VarsForm = (props: VarsFormProps) => { +const VarsForm = (props: VarsFormProps) => { const [formStore, { Form, Field }] = createForm({}); const handleSubmit: SubmitHandler = async (values, event) => { diff --git a/pkgs/clan-app/ui/src/routes/modules/add.tsx b/pkgs/clan-app/ui/src/routes/modules/add.tsx index c11f045e0..d732312ee 100644 --- a/pkgs/clan-app/ui/src/routes/modules/add.tsx +++ b/pkgs/clan-app/ui/src/routes/modules/add.tsx @@ -32,7 +32,7 @@ interface AddModuleProps { id: string; } -export const AddModule = (props: AddModuleProps) => { +const AddModule = (props: AddModuleProps) => { const { activeClanURI } = useClanContext(); const tags = tagsQuery(activeClanURI()); const machines = machinesQuery(activeClanURI()); diff --git a/pkgs/clan-app/ui/src/routes/modules/details.tsx b/pkgs/clan-app/ui/src/routes/modules/details.tsx index f2fa04aa5..de8b35f9f 100644 --- a/pkgs/clan-app/ui/src/routes/modules/details.tsx +++ b/pkgs/clan-app/ui/src/routes/modules/details.tsx @@ -140,7 +140,7 @@ interface SchemaFormProps { path: string[]; } -export const ModuleForm = (props: { id: string }) => { +const ModuleForm = (props: { id: string }) => { // TODO: Fetch the synced schema for all the modules at runtime // We use static schema file at build time for now. (Different versions might have different schema at runtime) const schemaQuery = createQuery(() => ({ diff --git a/pkgs/clan-app/ui/src/stores/clan.tsx b/pkgs/clan-app/ui/src/stores/clan.tsx index 43c545ae8..0cb0747df 100644 --- a/pkgs/clan-app/ui/src/stores/clan.tsx +++ b/pkgs/clan-app/ui/src/stores/clan.tsx @@ -80,7 +80,6 @@ const removeClanURI = (uri: string) => { export { store, - setStore, activeClanURI, setActiveClanURI, clanURIs,