update components

use clsx on classnames and extend HTML element where it makes sense
This commit is contained in:
Benjamin Palko 2025-01-17 15:39:56 -05:00 committed by Baobeld
parent bc371e9188
commit f19585712a
11 changed files with 37 additions and 25 deletions

View file

@ -24,7 +24,6 @@
children, children,
class: className, class: className,
color, color,
disabled,
full = false, full = false,
glass = false, glass = false,
shape, shape,
@ -37,7 +36,6 @@
<button <button
{...props} {...props}
{disabled}
class={twMerge('btn', clsx(className))} class={twMerge('btn', clsx(className))}
class:btn-active={active} class:btn-active={active}
class:no-animation={!animation} class:no-animation={!animation}
@ -51,7 +49,7 @@
class:btn-success={color === 'success'} class:btn-success={color === 'success'}
class:btn-warning={color === 'warning'} class:btn-warning={color === 'warning'}
class:btn-error={color === 'error'} class:btn-error={color === 'error'}
class:btn-disabled={disabled} class:btn-disabled={props.disabled}
class:w-full={full} class:w-full={full}
class:glass class:glass
class:btn-circle={shape === 'circle'} class:btn-circle={shape === 'circle'}

View file

@ -1,19 +1,28 @@
<script lang="ts"> <script lang="ts">
import type { DaisyColor, DaisySize } from '$lib/types'; import type { DaisyColor, DaisySize } from '$lib/types';
import clsx from 'clsx';
import type { Snippet } from 'svelte'; import type { Snippet } from 'svelte';
import type { SvelteHTMLElements } from 'svelte/elements';
import { twMerge } from 'tailwind-merge';
type Props = { type Props = {
bordered?: boolean; bordered?: boolean;
color?: Omit<DaisyColor, 'neutral'>; color?: Omit<DaisyColor, 'neutral'>;
disabled?: boolean;
error?: string | Snippet; error?: string | Snippet;
form?: string;
label?: string | Snippet; label?: string | Snippet;
name?: string; resizable?: boolean | 'yes' | 'no' | 'x' | 'y';
placeholder?: string;
size?: DaisySize; size?: DaisySize;
}; } & SvelteHTMLElements['textarea'];
let { bordered, color, error, label, size, ...props }: Props = $props(); let {
bordered,
class: className,
color,
error,
label,
resizable,
size,
...props
}: Props = $props();
</script> </script>
<label class="form-control w-full max-w-lg"> <label class="form-control w-full max-w-lg">
@ -43,7 +52,8 @@
</span> </span>
</div> </div>
<textarea <textarea
class="textarea" {...props}
class={twMerge('textarea', clsx(className))}
class:textarea-bordered={bordered} class:textarea-bordered={bordered}
class:textarea-xs={size === 'xs'} class:textarea-xs={size === 'xs'}
class:textarea-sm={size === 'sm'} class:textarea-sm={size === 'sm'}
@ -56,6 +66,9 @@
class:textarea-success={color === 'success'} class:textarea-success={color === 'success'}
class:textarea-warning={color === 'warning'} class:textarea-warning={color === 'warning'}
class:textarea-error={color === 'error' || error} class:textarea-error={color === 'error' || error}
{...props} class:resize={resizable === true || resizable === 'yes'}
class:resize-x={resizable === 'x'}
class:resize-y={resizable === 'y'}
class:resize-none={resizable === false || resizable === 'no'}
></textarea> ></textarea>
</label> </label>

View file

@ -15,13 +15,13 @@
</script> </script>
<div <div
{...props}
role="alert" role="alert"
class={twMerge('alert', clsx(className))} class={twMerge('alert', clsx(className))}
class:alert-info={color === 'info'} class:alert-info={color === 'info'}
class:alert-success={color === 'success'} class:alert-success={color === 'success'}
class:alert-warning={color === 'warning'} class:alert-warning={color === 'warning'}
class:alert-error={color === 'error'} class:alert-error={color === 'error'}
{...props}
> >
{@render icon?.()} {@render icon?.()}
{@render children?.()} {@render children?.()}

View file

@ -1,16 +1,19 @@
<script lang="ts"> <script lang="ts">
import type { DaisyColor, DaisySize } from '$lib/types'; import type { DaisyColor, DaisySize } from '$lib/types';
import clsx from 'clsx';
import type { SvelteHTMLElements } from 'svelte/elements';
import { twMerge } from 'tailwind-merge';
type Props = { type Props = {
color?: Exclude<DaisyColor, 'ghost'>; color?: Exclude<DaisyColor, 'ghost'>;
size?: DaisySize | 'md'; size?: DaisySize | 'md';
variant?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity'; variant?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity';
}; } & Pick<SvelteHTMLElements['span'], 'class'>;
let { color, size = 'md', variant = 'spinner' }: Props = $props(); let { class: className, color, size = 'md', variant = 'spinner' }: Props = $props();
</script> </script>
<span <span
class="loading" class={twMerge('loading', clsx(className))}
class:text-primary={color === 'primary'} class:text-primary={color === 'primary'}
class:text-secondary={color === 'secondary'} class:text-secondary={color === 'secondary'}
class:text-accent={color === 'accent'} class:text-accent={color === 'accent'}

View file

@ -11,6 +11,7 @@
</script> </script>
<progress <progress
{...props}
class={twMerge('progress', clsx(className))} class={twMerge('progress', clsx(className))}
class:progress-primary={color === 'primary'} class:progress-primary={color === 'primary'}
class:progress-secondary={color === 'secondary'} class:progress-secondary={color === 'secondary'}
@ -19,7 +20,6 @@
class:progress-success={color === 'success'} class:progress-success={color === 'success'}
class:progress-warning={color === 'warning'} class:progress-warning={color === 'warning'}
class:progress-error={color === 'error'} class:progress-error={color === 'error'}
{...props}
> >
{@render children?.()} {@render children?.()}
</progress> </progress>

View file

@ -1,12 +1,9 @@
<script lang="ts"> <script lang="ts">
import clsx from 'clsx'; import clsx from 'clsx';
import type { Snippet } from 'svelte';
import type { SvelteHTMLElements } from 'svelte/elements'; import type { SvelteHTMLElements } from 'svelte/elements';
import { twMerge } from 'tailwind-merge'; import { twMerge } from 'tailwind-merge';
type Props = { type Props = SvelteHTMLElements['div'];
children?: Snippet;
} & SvelteHTMLElements['div'];
let { children, class: className, ...props }: Props = $props(); let { children, class: className, ...props }: Props = $props();
</script> </script>

View file

@ -14,6 +14,7 @@
</script> </script>
<div <div
{...props}
class={twMerge('tooltip', clsx(className))} class={twMerge('tooltip', clsx(className))}
class:tooltip-primary={color === 'primary'} class:tooltip-primary={color === 'primary'}
class:tooltip-secondary={color === 'secondary'} class:tooltip-secondary={color === 'secondary'}
@ -28,7 +29,6 @@
class:tooltip-left={position === 'left'} class:tooltip-left={position === 'left'}
class:tooltip-right={position === 'right'} class:tooltip-right={position === 'right'}
data-tip={tip} data-tip={tip}
{...props}
> >
{@render children?.()} {@render children?.()}
</div> </div>

View file

@ -13,6 +13,7 @@
</script> </script>
<div <div
{...props}
class={twMerge('divider', clsx(className))} class={twMerge('divider', clsx(className))}
class:divider-neutral={color === 'neutral'} class:divider-neutral={color === 'neutral'}
class:divider-primary={color === 'primary'} class:divider-primary={color === 'primary'}
@ -26,7 +27,6 @@
class:divider-vertical={direction === 'vertical'} class:divider-vertical={direction === 'vertical'}
class:divider-start={variant === 'start'} class:divider-start={variant === 'start'}
class:divider-end={variant === 'end'} class:divider-end={variant === 'end'}
{...props}
> >
{@render children?.()} {@render children?.()}
</div> </div>

View file

@ -10,6 +10,7 @@
</script> </script>
<a <a
{...props}
class={twMerge('link', clsx(className))} class={twMerge('link', clsx(className))}
class:link-primary={color === 'primary'} class:link-primary={color === 'primary'}
class:link-secondary={color === 'secondary'} class:link-secondary={color === 'secondary'}
@ -19,6 +20,5 @@
class:link-success={color === 'success'} class:link-success={color === 'success'}
class:link-warning={color === 'warning'} class:link-warning={color === 'warning'}
class:link-error={color === 'error'} class:link-error={color === 'error'}
class:link-hover={hover} class:link-hover={hover}>{@render children?.()}</a
{...props}>{@render children?.()}</a
> >

View file

@ -68,6 +68,7 @@
name="message" name="message"
placeholder="..." placeholder="..."
form="sms" form="sms"
resizable={false}
/> />
</div> </div>
<div class="card-actions justify-center px-8 pb-4"> <div class="card-actions justify-center px-8 pb-4">