fix: lint and format cmds
Some checks failed
CI / install (pull_request) Successful in 58s
CI / lint (pull_request) Failing after 56s
CI / type-check (pull_request) Failing after 1m0s
CI / format-check (pull_request) Failing after 1m1s
CI / build (pull_request) Failing after 10m26s

This commit is contained in:
Tobias Klemp
2025-12-03 22:27:18 +01:00
parent c49cd85a09
commit 5ac014d112
21 changed files with 354 additions and 347 deletions

View File

@@ -70,7 +70,7 @@ jobs:
bun-
- name: Run linting
run: bun run lint
run: bun run lint:check
format-check:
runs-on: ubuntu-latest
@@ -90,7 +90,7 @@ jobs:
bun-
- name: Check formatting
run: bun exec prettier --check .
run: bun run format:check
build:
runs-on: ubuntu-latest

View File

@@ -11,7 +11,8 @@
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"format": "prettier --write .",
"lint": "prettier --check . && eslint ."
"format:check": "prettier --check",
"lint:check": "eslint ."
},
"devDependencies": {
"@eslint/compat": "^1.4.0",

View File

@@ -1,2 +1,2 @@
export { default as Badge } from "./badge.svelte";
export { badgeVariants, type BadgeVariant } from "./badge.svelte";
export { default as Badge } from './badge.svelte'
export { badgeVariants, type BadgeVariant } from './badge.svelte'

View File

@@ -1,10 +1,10 @@
import Root from "./card.svelte";
import Content from "./card-content.svelte";
import Description from "./card-description.svelte";
import Footer from "./card-footer.svelte";
import Header from "./card-header.svelte";
import Title from "./card-title.svelte";
import Action from "./card-action.svelte";
import Root from './card.svelte'
import Content from './card-content.svelte'
import Description from './card-description.svelte'
import Footer from './card-footer.svelte'
import Header from './card-header.svelte'
import Title from './card-title.svelte'
import Action from './card-action.svelte'
export {
Root,
@@ -22,4 +22,4 @@ export {
Header as CardHeader,
Title as CardTitle,
Action as CardAction,
};
}

View File

@@ -1,58 +1,60 @@
import type { WithElementRef } from "$lib/utils.js";
import type { WithElementRef } from '$lib/utils.js'
import type {
EmblaCarouselSvelteType,
default as emblaCarouselSvelte,
} from "embla-carousel-svelte";
import { getContext, hasContext, setContext } from "svelte";
import type { HTMLAttributes } from "svelte/elements";
} from 'embla-carousel-svelte'
import { getContext, hasContext, setContext } from 'svelte'
import type { HTMLAttributes } from 'svelte/elements'
export type CarouselAPI =
NonNullable<NonNullable<EmblaCarouselSvelteType["$$_attributes"]>["on:emblaInit"]> extends (
evt: CustomEvent<infer CarouselAPI>
) => void
NonNullable<
NonNullable<EmblaCarouselSvelteType['$$_attributes']>['on:emblaInit']
> extends (evt: CustomEvent<infer CarouselAPI>) => void
? CarouselAPI
: never;
: never
type EmblaCarouselConfig = NonNullable<Parameters<typeof emblaCarouselSvelte>[1]>;
type EmblaCarouselConfig = NonNullable<
Parameters<typeof emblaCarouselSvelte>[1]
>
export type CarouselOptions = EmblaCarouselConfig["options"];
export type CarouselPlugins = EmblaCarouselConfig["plugins"];
export type CarouselOptions = EmblaCarouselConfig['options']
export type CarouselPlugins = EmblaCarouselConfig['plugins']
////
export type CarouselProps = {
opts?: CarouselOptions;
plugins?: CarouselPlugins;
setApi?: (api: CarouselAPI | undefined) => void;
orientation?: "horizontal" | "vertical";
} & WithElementRef<HTMLAttributes<HTMLDivElement>>;
opts?: CarouselOptions
plugins?: CarouselPlugins
setApi?: (api: CarouselAPI | undefined) => void
orientation?: 'horizontal' | 'vertical'
} & WithElementRef<HTMLAttributes<HTMLDivElement>>
const EMBLA_CAROUSEL_CONTEXT = Symbol("EMBLA_CAROUSEL_CONTEXT");
const EMBLA_CAROUSEL_CONTEXT = Symbol('EMBLA_CAROUSEL_CONTEXT')
export type EmblaContext = {
api: CarouselAPI | undefined;
orientation: "horizontal" | "vertical";
scrollNext: () => void;
scrollPrev: () => void;
canScrollNext: boolean;
canScrollPrev: boolean;
handleKeyDown: (e: KeyboardEvent) => void;
options: CarouselOptions;
plugins: CarouselPlugins;
onInit: (e: CustomEvent<CarouselAPI>) => void;
scrollTo: (index: number, jump?: boolean) => void;
scrollSnaps: number[];
selectedIndex: number;
};
api: CarouselAPI | undefined
orientation: 'horizontal' | 'vertical'
scrollNext: () => void
scrollPrev: () => void
canScrollNext: boolean
canScrollPrev: boolean
handleKeyDown: (e: KeyboardEvent) => void
options: CarouselOptions
plugins: CarouselPlugins
onInit: (e: CustomEvent<CarouselAPI>) => void
scrollTo: (index: number, jump?: boolean) => void
scrollSnaps: number[]
selectedIndex: number
}
export function setEmblaContext(config: EmblaContext): EmblaContext {
setContext(EMBLA_CAROUSEL_CONTEXT, config);
return config;
setContext(EMBLA_CAROUSEL_CONTEXT, config)
return config
}
export function getEmblaContext(name = "This component") {
export function getEmblaContext(name = 'This component') {
if (!hasContext(EMBLA_CAROUSEL_CONTEXT)) {
throw new Error(`${name} must be used within a <Carousel.Root> component`);
throw new Error(`${name} must be used within a <Carousel.Root> component`)
}
return getContext<ReturnType<typeof setEmblaContext>>(EMBLA_CAROUSEL_CONTEXT);
return getContext<ReturnType<typeof setEmblaContext>>(EMBLA_CAROUSEL_CONTEXT)
}

View File

@@ -1,8 +1,8 @@
import Root from "./carousel.svelte";
import Content from "./carousel-content.svelte";
import Item from "./carousel-item.svelte";
import Previous from "./carousel-previous.svelte";
import Next from "./carousel-next.svelte";
import Root from './carousel.svelte'
import Content from './carousel-content.svelte'
import Item from './carousel-item.svelte'
import Previous from './carousel-previous.svelte'
import Next from './carousel-next.svelte'
export {
Root,
@@ -16,4 +16,4 @@ export {
Item as CarouselItem,
Previous as CarouselPrevious,
Next as CarouselNext,
};
}

View File

@@ -1,7 +1,7 @@
import Root from "./input.svelte";
import Root from './input.svelte'
export {
Root,
//
Root as Input,
};
}

View File

@@ -1,7 +1,7 @@
import Root from "./label.svelte";
import Root from './label.svelte'
export {
Root,
//
Root as Label,
};
}

View File

@@ -1,5 +1,5 @@
import Root from "./radio-group.svelte";
import Item from "./radio-group-item.svelte";
import Root from './radio-group.svelte'
import Item from './radio-group-item.svelte'
export {
Root,
@@ -7,4 +7,4 @@ export {
//
Root as RadioGroup,
Item as RadioGroupItem,
};
}

View File

@@ -1,7 +1,7 @@
import Root from "./separator.svelte";
import Root from './separator.svelte'
export {
Root,
//
Root as Separator,
};
}

View File

@@ -1,15 +1,15 @@
import { Dialog as SheetPrimitive } from "bits-ui";
import Trigger from "./sheet-trigger.svelte";
import Close from "./sheet-close.svelte";
import Overlay from "./sheet-overlay.svelte";
import Content from "./sheet-content.svelte";
import Header from "./sheet-header.svelte";
import Footer from "./sheet-footer.svelte";
import Title from "./sheet-title.svelte";
import Description from "./sheet-description.svelte";
import { Dialog as SheetPrimitive } from 'bits-ui'
import Trigger from './sheet-trigger.svelte'
import Close from './sheet-close.svelte'
import Overlay from './sheet-overlay.svelte'
import Content from './sheet-content.svelte'
import Header from './sheet-header.svelte'
import Footer from './sheet-footer.svelte'
import Title from './sheet-title.svelte'
import Description from './sheet-description.svelte'
const Root = SheetPrimitive.Root;
const Portal = SheetPrimitive.Portal;
const Root = SheetPrimitive.Root
const Portal = SheetPrimitive.Portal
export {
Root,
@@ -33,4 +33,4 @@ export {
Footer as SheetFooter,
Title as SheetTitle,
Description as SheetDescription,
};
}

View File

@@ -1,6 +1,6 @@
export const SIDEBAR_COOKIE_NAME = "sidebar:state";
export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
export const SIDEBAR_WIDTH = "16rem";
export const SIDEBAR_WIDTH_MOBILE = "18rem";
export const SIDEBAR_WIDTH_ICON = "3rem";
export const SIDEBAR_KEYBOARD_SHORTCUT = "b";
export const SIDEBAR_COOKIE_NAME = 'sidebar:state'
export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
export const SIDEBAR_WIDTH = '16rem'
export const SIDEBAR_WIDTH_MOBILE = '18rem'
export const SIDEBAR_WIDTH_ICON = '3rem'
export const SIDEBAR_KEYBOARD_SHORTCUT = 'b'

View File

@@ -1,8 +1,8 @@
import { IsMobile } from "$lib/hooks/is-mobile.svelte.js";
import { getContext, setContext } from "svelte";
import { SIDEBAR_KEYBOARD_SHORTCUT } from "./constants.js";
import { IsMobile } from '$lib/hooks/is-mobile.svelte.js'
import { getContext, setContext } from 'svelte'
import { SIDEBAR_KEYBOARD_SHORTCUT } from './constants.js'
type Getter<T> = () => T;
type Getter<T> = () => T
export type SidebarStateProps = {
/**
@@ -10,56 +10,56 @@ export type SidebarStateProps = {
* We use a getter function here to support `bind:open` on the `Sidebar.Provider`
* component.
*/
open: Getter<boolean>;
open: Getter<boolean>
/**
* A function that sets the open state of the sidebar. To support `bind:open`, we need
* a source of truth for changing the open state to ensure it will be synced throughout
* the sub-components and any `bind:` references.
*/
setOpen: (open: boolean) => void;
};
setOpen: (open: boolean) => void
}
class SidebarState {
readonly props: SidebarStateProps;
open = $derived.by(() => this.props.open());
openMobile = $state(false);
setOpen: SidebarStateProps["setOpen"];
#isMobile: IsMobile;
state = $derived.by(() => (this.open ? "expanded" : "collapsed"));
readonly props: SidebarStateProps
open = $derived.by(() => this.props.open())
openMobile = $state(false)
setOpen: SidebarStateProps['setOpen']
#isMobile: IsMobile
state = $derived.by(() => (this.open ? 'expanded' : 'collapsed'))
constructor(props: SidebarStateProps) {
this.setOpen = props.setOpen;
this.#isMobile = new IsMobile();
this.props = props;
this.setOpen = props.setOpen
this.#isMobile = new IsMobile()
this.props = props
}
// Convenience getter for checking if the sidebar is mobile
// without this, we would need to use `sidebar.isMobile.current` everywhere
get isMobile() {
return this.#isMobile.current;
return this.#isMobile.current
}
// Event handler to apply to the `<svelte:window>`
handleShortcutKeydown = (e: KeyboardEvent) => {
if (e.key === SIDEBAR_KEYBOARD_SHORTCUT && (e.metaKey || e.ctrlKey)) {
e.preventDefault();
this.toggle();
e.preventDefault()
this.toggle()
}
}
};
setOpenMobile = (value: boolean) => {
this.openMobile = value;
};
this.openMobile = value
}
toggle = () => {
return this.#isMobile.current
? (this.openMobile = !this.openMobile)
: this.setOpen(!this.open);
};
: this.setOpen(!this.open)
}
}
const SYMBOL_KEY = "scn-sidebar";
const SYMBOL_KEY = 'scn-sidebar'
/**
* Instantiates a new `SidebarState` instance and sets it in the context.
@@ -68,7 +68,7 @@ const SYMBOL_KEY = "scn-sidebar";
* @returns The `SidebarState` instance.
*/
export function setSidebar(props: SidebarStateProps): SidebarState {
return setContext(Symbol.for(SYMBOL_KEY), new SidebarState(props));
return setContext(Symbol.for(SYMBOL_KEY), new SidebarState(props))
}
/**
@@ -77,5 +77,5 @@ export function setSidebar(props: SidebarStateProps): SidebarState {
* @returns The `SidebarState` instance.
*/
export function useSidebar(): SidebarState {
return getContext(Symbol.for(SYMBOL_KEY));
return getContext(Symbol.for(SYMBOL_KEY))
}

View File

@@ -1,27 +1,27 @@
import { useSidebar } from "./context.svelte.js";
import Content from "./sidebar-content.svelte";
import Footer from "./sidebar-footer.svelte";
import GroupAction from "./sidebar-group-action.svelte";
import GroupContent from "./sidebar-group-content.svelte";
import GroupLabel from "./sidebar-group-label.svelte";
import Group from "./sidebar-group.svelte";
import Header from "./sidebar-header.svelte";
import Input from "./sidebar-input.svelte";
import Inset from "./sidebar-inset.svelte";
import MenuAction from "./sidebar-menu-action.svelte";
import MenuBadge from "./sidebar-menu-badge.svelte";
import MenuButton from "./sidebar-menu-button.svelte";
import MenuItem from "./sidebar-menu-item.svelte";
import MenuSkeleton from "./sidebar-menu-skeleton.svelte";
import MenuSubButton from "./sidebar-menu-sub-button.svelte";
import MenuSubItem from "./sidebar-menu-sub-item.svelte";
import MenuSub from "./sidebar-menu-sub.svelte";
import Menu from "./sidebar-menu.svelte";
import Provider from "./sidebar-provider.svelte";
import Rail from "./sidebar-rail.svelte";
import Separator from "./sidebar-separator.svelte";
import Trigger from "./sidebar-trigger.svelte";
import Root from "./sidebar.svelte";
import { useSidebar } from './context.svelte.js'
import Content from './sidebar-content.svelte'
import Footer from './sidebar-footer.svelte'
import GroupAction from './sidebar-group-action.svelte'
import GroupContent from './sidebar-group-content.svelte'
import GroupLabel from './sidebar-group-label.svelte'
import Group from './sidebar-group.svelte'
import Header from './sidebar-header.svelte'
import Input from './sidebar-input.svelte'
import Inset from './sidebar-inset.svelte'
import MenuAction from './sidebar-menu-action.svelte'
import MenuBadge from './sidebar-menu-badge.svelte'
import MenuButton from './sidebar-menu-button.svelte'
import MenuItem from './sidebar-menu-item.svelte'
import MenuSkeleton from './sidebar-menu-skeleton.svelte'
import MenuSubButton from './sidebar-menu-sub-button.svelte'
import MenuSubItem from './sidebar-menu-sub-item.svelte'
import MenuSub from './sidebar-menu-sub.svelte'
import Menu from './sidebar-menu.svelte'
import Provider from './sidebar-provider.svelte'
import Rail from './sidebar-rail.svelte'
import Separator from './sidebar-separator.svelte'
import Trigger from './sidebar-trigger.svelte'
import Root from './sidebar.svelte'
export {
Content,
@@ -72,4 +72,4 @@ export {
Trigger as SidebarTrigger,
Trigger,
useSidebar,
};
}

View File

@@ -1,7 +1,7 @@
import Root from "./skeleton.svelte";
import Root from './skeleton.svelte'
export {
Root,
//
Root as Skeleton,
};
}

View File

@@ -1,7 +1,7 @@
import Root from "./tabs.svelte";
import Content from "./tabs-content.svelte";
import List from "./tabs-list.svelte";
import Trigger from "./tabs-trigger.svelte";
import Root from './tabs.svelte'
import Content from './tabs-content.svelte'
import List from './tabs-list.svelte'
import Trigger from './tabs-trigger.svelte'
export {
Root,
@@ -13,4 +13,4 @@ export {
Content as TabsContent,
List as TabsList,
Trigger as TabsTrigger,
};
}

View File

@@ -1,10 +1,10 @@
import { Tooltip as TooltipPrimitive } from "bits-ui";
import Trigger from "./tooltip-trigger.svelte";
import Content from "./tooltip-content.svelte";
import { Tooltip as TooltipPrimitive } from 'bits-ui'
import Trigger from './tooltip-trigger.svelte'
import Content from './tooltip-content.svelte'
const Root = TooltipPrimitive.Root;
const Provider = TooltipPrimitive.Provider;
const Portal = TooltipPrimitive.Portal;
const Root = TooltipPrimitive.Root
const Provider = TooltipPrimitive.Provider
const Portal = TooltipPrimitive.Portal
export {
Root,
@@ -18,4 +18,4 @@ export {
Trigger as TooltipTrigger,
Provider as TooltipProvider,
Portal as TooltipPortal,
};
}

View File

@@ -1,13 +1,17 @@
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
import { clsx, type ClassValue } from 'clsx'
import { twMerge } from 'tailwind-merge'
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
return twMerge(clsx(inputs))
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type WithoutChild<T> = T extends { child?: any } ? Omit<T, "child"> : T;
export type WithoutChild<T> = T extends { child?: any } ? Omit<T, 'child'> : T
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type WithoutChildren<T> = T extends { children?: any } ? Omit<T, "children"> : T;
export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;
export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };
export type WithoutChildren<T> = T extends { children?: any }
? Omit<T, 'children'>
: T
export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>
export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & {
ref?: U | null
}