From 1c7b5e84c15dd58c892a82ca1b9a762947c1bfec Mon Sep 17 00:00:00 2001 From: abdel Date: Thu, 23 Oct 2025 06:43:05 +0800 Subject: [PATCH 01/10] feat: handle presets and introduce `$preset` placeholder for better customization --- src/lib/components/atom/html-atom.svelte | 45 ++++++++++++++++++++---- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/lib/components/atom/html-atom.svelte b/src/lib/components/atom/html-atom.svelte index 48977ba..cbf94b1 100644 --- a/src/lib/components/atom/html-atom.svelte +++ b/src/lib/components/atom/html-atom.svelte @@ -1,9 +1,11 @@ {#if isSnippet} - {@render snippet({ class: cn(klass), as, base, children, ...restProps })} + {@render snippet({ class: _klass, as: _as, base: _base, children, ..._restProps })} {:else} - + {@render children?.()} {/if} From 5ba3f5cd415488e1f6e98f0b76d690f9ed61b01b Mon Sep 17 00:00:00 2001 From: abdel Date: Thu, 23 Oct 2025 06:43:41 +0800 Subject: [PATCH 02/10] refactor: migrate components to use the new approach --- .../accordion/accordion-root.svelte | 17 ++------ .../accordion/item/accordion-item-body.svelte | 19 ++------- .../item/accordion-item-header.svelte | 23 +++------- .../item/accordion-item-indicator.svelte | 15 +------ .../accordion/item/accordion-item-root.svelte | 13 ++---- src/lib/components/alert/alert-actions.svelte | 17 ++------ .../alert/alert-close-button.svelte | 17 ++++---- src/lib/components/alert/alert-content.svelte | 17 ++------ .../components/alert/alert-description.svelte | 19 +++------ src/lib/components/alert/alert-icon.svelte | 25 +++++------ src/lib/components/alert/alert-root.svelte | 13 ++---- src/lib/components/alert/alert-title.svelte | 19 +++------ src/lib/components/atom/types.ts | 4 ++ src/lib/components/avatar/avatar.svelte | 2 + src/lib/components/badge/badge.svelte | 18 ++------ .../breadcrumb/breadcrumb-item.svelte | 23 +++------- .../breadcrumb/breadcrumb-root.svelte | 22 ++-------- .../breadcrumb/breadcrumb-separator.svelte | 22 ++-------- src/lib/components/button/button.svelte | 12 ++---- src/lib/components/card/card-body.svelte | 16 ++----- .../components/card/card-description.svelte | 17 +++----- src/lib/components/card/card-footer.svelte | 17 +++----- src/lib/components/card/card-header.svelte | 17 +++----- src/lib/components/card/card-media.svelte | 17 +++----- src/lib/components/card/card-root.svelte | 15 +++---- src/lib/components/card/card-subtitle.svelte | 17 +++----- src/lib/components/card/card-title.svelte | 17 +++----- src/lib/components/checkbox/checkbox.svelte | 42 ++++++++----------- .../collapsible/collapsible-body.svelte | 12 ++---- .../collapsible/collapsible-header.svelte | 16 ++----- .../collapsible/collapsible-indicator.svelte | 17 ++------ .../collapsible/collapsible-root.svelte | 15 ++----- .../components/combobox/combobox-input.svelte | 11 +---- .../combobox/combobox-trigger.svelte | 8 ++-- .../components/combobox/compobox-item.svelte | 9 ++-- .../contaiener/container.stories.svelte | 18 ++++---- .../components/contaiener/container.svelte | 15 +------ .../components/datagrid/datagrid-body.svelte | 10 ++--- .../datagrid/datagrid-checkbox.svelte | 19 +++------ .../datagrid/datagrid-footer.svelte | 12 ++---- .../datagrid/datagrid-header.svelte | 16 ++----- .../components/datagrid/datagrid-root.svelte | 18 +++----- .../components/datagrid/td/datagrid-td.svelte | 16 ++----- .../datagrid/th/datagrid-th-sort-icon.svelte | 12 ++---- .../components/datagrid/th/datagrid-th.svelte | 14 +++---- .../components/datagrid/tr/datagrid-tr.svelte | 15 +++---- src/lib/components/dialog/dialog-body.svelte | 16 ++----- .../dialog/dialog-close-button.svelte | 16 ++----- .../components/dialog/dialog-content.svelte | 14 ++----- .../dialog/dialog-description.svelte | 5 +-- .../components/dialog/dialog-footer.svelte | 16 ++----- .../components/dialog/dialog-header.svelte | 16 ++----- src/lib/components/dialog/dialog-root.svelte | 15 +++---- src/lib/components/dialog/dialog-title.svelte | 12 ++---- src/lib/components/divider/divider.svelte | 13 +++--- .../components/drawer/drawer-backdrop.svelte | 15 ++----- src/lib/components/drawer/drawer-body.svelte | 12 ++---- .../components/drawer/drawer-content.svelte | 15 ++----- .../drawer/drawer-description.svelte | 11 ++--- .../components/drawer/drawer-footer.svelte | 10 +---- .../components/drawer/drawer-header.svelte | 10 +---- src/lib/components/drawer/drawer-root.svelte | 6 +-- src/lib/components/drawer/drawer-title.svelte | 13 +++--- .../dropdown/dropdown-placeholder.svelte | 9 ++-- .../components/dropdown/dropdown-query.svelte | 11 ++--- .../dropdown/dropdown-trigger.svelte | 20 +++------ .../components/dropdown/dropdown-value.svelte | 14 +++---- .../dropdown/item/dropdown-item.svelte | 16 +++---- src/lib/components/element/types.ts | 7 ++-- .../form/field/field-control.svelte | 14 ++----- .../components/form/field/field-label.svelte | 18 +------- .../components/form/field/field-root.svelte | 9 +--- src/lib/components/form/form-root.svelte | 11 +---- src/lib/components/icon/icon.svelte | 14 ++----- src/lib/components/image/image.svelte | 4 +- src/lib/components/input/input-icon.svelte | 3 +- .../components/input/input-placeholder.svelte | 11 ++--- src/lib/components/input/input-root.svelte | 14 +++---- src/lib/components/input/input-value.svelte | 21 ++++++---- src/lib/components/label/label.svelte | 14 ++++--- src/lib/components/layer/layer-inner.svelte | 15 +------ src/lib/components/layer/layer-root.svelte | 10 +---- src/lib/components/link/link.svelte | 17 ++------ src/lib/components/list/list-divider.svelte | 16 ++----- src/lib/components/list/list-group.svelte | 18 ++------ src/lib/components/list/list-item.svelte | 16 ++----- src/lib/components/list/list-root.svelte | 23 +--------- src/lib/components/list/list-title.svelte | 21 ++-------- src/lib/components/menu/menu-item.svelte | 17 +++----- src/lib/components/menu/menu-list.svelte | 19 ++++----- .../components/popover/popover-arrow.svelte | 22 ++++------ .../components/popover/popover-content.svelte | 14 ++----- .../popover/popover-indicator.svelte | 11 ++--- .../components/popover/popover-trigger.svelte | 23 ++++------ .../components/popover/popover.stories.svelte | 3 +- src/lib/components/portal/portal-inner.svelte | 15 ++----- src/lib/components/portal/portal-root.svelte | 11 +---- src/lib/components/radio/radio-group.svelte | 16 +------ src/lib/components/radio/radio.svelte | 12 ++---- src/lib/components/root/root.svelte | 17 +++----- .../scrollable/scrollable-container.svelte | 15 ++++--- .../scrollable/scrollable-content.svelte | 14 ++----- .../scrollable/scrollable-root.svelte | 10 ++--- .../scrollable/scrollable-thumb.svelte | 13 ++---- .../scrollable/scrollable-track.svelte | 15 +++---- .../components/sidebar/sidebar-content.svelte | 15 ++----- .../components/sidebar/sidebar-root.svelte | 17 ++------ src/lib/components/stack/stack-item.svelte | 23 +--------- src/lib/components/stack/stack-root.svelte | 18 +------- src/lib/components/tabs/tab/tab-body.svelte | 15 ++----- .../tabs/tab/tab-description.svelte | 13 +++--- src/lib/components/tabs/tab/tab-header.svelte | 13 +++--- src/lib/components/tabs/tab/tab-root.svelte | 20 +++------ src/lib/components/tabs/tabs-body.svelte | 19 +++------ src/lib/components/tabs/tabs-header.svelte | 17 ++------ src/lib/components/tabs/tabs-root.svelte | 17 ++------ .../components/textarea/textarea-input.svelte | 4 +- .../components/textarea/textarea-root.svelte | 2 +- .../components/toast/toast-description.svelte | 7 ++-- src/lib/components/toast/toast-root.svelte | 7 +--- src/lib/components/toast/toast-title.svelte | 9 ++-- .../components/tooltip/tooltip-trigger.svelte | 2 +- src/lib/components/tree/tree-body.svelte | 12 ++---- src/lib/components/tree/tree-header.svelte | 18 ++------ src/lib/components/tree/tree-indicator.svelte | 16 ++----- src/lib/components/tree/tree-root.svelte | 10 ++--- src/lib/context/index.ts | 2 +- src/lib/context/preset.svelte.ts | 10 ++--- src/stories/Theme.svelte | 10 ++--- 129 files changed, 528 insertions(+), 1321 deletions(-) diff --git a/src/lib/components/accordion/accordion-root.svelte b/src/lib/components/accordion/accordion-root.svelte index 916b4c3..c94517b 100644 --- a/src/lib/components/accordion/accordion-root.svelte +++ b/src/lib/components/accordion/accordion-root.svelte @@ -19,19 +19,14 @@ {@render children?.({ accordion: bond })} diff --git a/src/lib/components/accordion/item/accordion-item-body.svelte b/src/lib/components/accordion/item/accordion-item-body.svelte index 11b1b44..442508c 100644 --- a/src/lib/components/accordion/item/accordion-item-body.svelte +++ b/src/lib/components/accordion/item/accordion-item-body.svelte @@ -10,21 +10,14 @@ {#if children} diff --git a/src/lib/components/accordion/item/accordion-item-root.svelte b/src/lib/components/accordion/item/accordion-item-root.svelte index 6840038..d4cd6ce 100644 --- a/src/lib/components/accordion/item/accordion-item-root.svelte +++ b/src/lib/components/accordion/item/accordion-item-root.svelte @@ -19,17 +19,12 @@ AccordionItemBondState, type AccordionItemBondProps } from './bond.svelte'; - import { defineProperty, defineState, toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; + import { defineProperty, defineState } from '$svelte-atoms/core/utils'; import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; import type { Factory } from '$svelte-atoms/core/types'; - const preset = getPreset('accordion.item'); - let { class: klass = '', - as = preset?.as ?? 'div', - base = preset?.base as B, value = nanoid(), data = undefined, disabled = false, @@ -69,15 +64,15 @@ {@render children?.({ accordionItem: bond })} diff --git a/src/lib/components/alert/alert-actions.svelte b/src/lib/components/alert/alert-actions.svelte index 143c82c..91ce443 100644 --- a/src/lib/components/alert/alert-actions.svelte +++ b/src/lib/components/alert/alert-actions.svelte @@ -11,19 +11,14 @@ import type { Snippet } from 'svelte'; import type { HTMLAttributes } from 'svelte/elements'; import { AlertBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; - import { getPreset } from '$svelte-atoms/core/context'; type Element = HTMLElementTagNameMap[E]; const bond = AlertBond.get(); - const preset = getPreset('alert.actions'); - let { - as = preset?.as ?? ('div' as E), - base = preset?.base as B, class: klass = '', children = undefined, onmount = undefined, @@ -42,19 +37,15 @@ {@render children?.({ alert: bond! })} diff --git a/src/lib/components/alert/alert-close-button.svelte b/src/lib/components/alert/alert-close-button.svelte index 6ed0f3e..a96c81b 100644 --- a/src/lib/components/alert/alert-close-button.svelte +++ b/src/lib/components/alert/alert-close-button.svelte @@ -11,20 +11,16 @@ import type { Snippet } from 'svelte'; import type { HTMLAttributes } from 'svelte/elements'; import { AlertBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; - import { getPreset } from '$svelte-atoms/core/context'; type Element = HTMLElementTagNameMap[E]; const bond = AlertBond.get(); - const preset = getPreset('alert.close-button'); - let { class: klass = '', - as = preset?.as ?? ('button' as E), - base = preset?.base as B, + as = 'button' as E, children = undefined, onmount = undefined, ondestroy = undefined, @@ -45,6 +41,9 @@ {#if isDismissible} {@render children?.({ alert: bond! })} diff --git a/src/lib/components/alert/alert-content.svelte b/src/lib/components/alert/alert-content.svelte index 98049e0..8efe059 100644 --- a/src/lib/components/alert/alert-content.svelte +++ b/src/lib/components/alert/alert-content.svelte @@ -11,19 +11,14 @@ import type { Snippet } from 'svelte'; import type { HTMLAttributes } from 'svelte/elements'; import { AlertBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; - import { getPreset } from '$svelte-atoms/core/context'; type Element = HTMLElementTagNameMap[E]; const bond = AlertBond.get(); - const preset = getPreset('alert.content'); - let { - as = preset?.as ?? ('div' as E), - base = preset?.base as B, class: klass = '', children = undefined, onmount = undefined, @@ -42,19 +37,15 @@ {@render children?.({ alert: bond! })} diff --git a/src/lib/components/alert/alert-description.svelte b/src/lib/components/alert/alert-description.svelte index c0b91c1..b389306 100644 --- a/src/lib/components/alert/alert-description.svelte +++ b/src/lib/components/alert/alert-description.svelte @@ -8,20 +8,16 @@ {@render children?.({ alert: bond! })} diff --git a/src/lib/components/alert/alert-icon.svelte b/src/lib/components/alert/alert-icon.svelte index 6d9ee46..442dfc7 100644 --- a/src/lib/components/alert/alert-icon.svelte +++ b/src/lib/components/alert/alert-icon.svelte @@ -10,19 +10,15 @@ - - {#if base} - - {:else} - {@render children?.({ alert: bond! })} - {/if} - + {@render children?.({ alert: bond! })} + diff --git a/src/lib/components/alert/alert-root.svelte b/src/lib/components/alert/alert-root.svelte index be03e7c..88add26 100644 --- a/src/lib/components/alert/alert-root.svelte +++ b/src/lib/components/alert/alert-root.svelte @@ -19,15 +19,10 @@ import { AlertBond, AlertBondState, type AlertBondProps } from './bond.svelte'; import { toClassValue, cn, defineProperty, defineState } from '$svelte-atoms/core/utils'; import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; - import { getPreset } from '$svelte-atoms/core/context'; import './alert.css'; - const preset = getPreset('alert'); - let { class: klass = '', - as = preset?.as ?? ('div' as E), - base = preset?.base as B, dismissible = false, dismissed = $bindable(false), disabled = false, @@ -97,6 +92,7 @@ {@render children?.({ alert: bond })} diff --git a/src/lib/components/alert/alert-title.svelte b/src/lib/components/alert/alert-title.svelte index 4e052d5..c27d74f 100644 --- a/src/lib/components/alert/alert-title.svelte +++ b/src/lib/components/alert/alert-title.svelte @@ -10,17 +10,13 @@ {@render children?.({ alert: bond! })} diff --git a/src/lib/components/atom/types.ts b/src/lib/components/atom/types.ts index 6bd9d7e..62f34bc 100644 --- a/src/lib/components/atom/types.ts +++ b/src/lib/components/atom/types.ts @@ -1,6 +1,8 @@ import type { Component, Snippet } from 'svelte'; import { type HtmlElementTagName } from '$svelte-atoms/core/components/element'; import type { HtmlElementProps, ElementType } from '../element/types'; +import type { PresetModuleName } from '$svelte-atoms/core/context/preset.svelte'; +import type { Bond } from '$svelte-atoms/core/shared'; export type ComponentBase = Component; export type SnippetBase = Snippet; @@ -11,7 +13,9 @@ export type HtmlAtomProps< E extends HtmlElementTagName = HtmlElementTagName, B extends Base = Base > = HtmlElementProps & { + bond?: Bond; base?: B; + preset?: PresetModuleName | (string & {}); }; export type { ElementType }; diff --git a/src/lib/components/avatar/avatar.svelte b/src/lib/components/avatar/avatar.svelte index e45cbfd..cf0beb9 100644 --- a/src/lib/components/avatar/avatar.svelte +++ b/src/lib/components/avatar/avatar.svelte @@ -18,8 +18,10 @@ - import { toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; import { HtmlAtom } from '$svelte-atoms/core/components/atom'; import type { BadgeProps } from './types'; - const preset = getPreset('badge'); - - let { - class: klass = '', - as = preset?.as ?? 'span', - base = preset?.base as B, - children = undefined, - ...restProps - }: BadgeProps = $props(); + let { class: klass = '', as = 'span', children = undefined, ...restProps }: BadgeProps = $props(); {@render children?.()} diff --git a/src/lib/components/breadcrumb/breadcrumb-item.svelte b/src/lib/components/breadcrumb/breadcrumb-item.svelte index 2cd1506..9720a56 100644 --- a/src/lib/components/breadcrumb/breadcrumb-item.svelte +++ b/src/lib/components/breadcrumb/breadcrumb-item.svelte @@ -1,30 +1,19 @@ {@render children?.()} diff --git a/src/lib/components/breadcrumb/breadcrumb-root.svelte b/src/lib/components/breadcrumb/breadcrumb-root.svelte index a7112ea..fb32958 100644 --- a/src/lib/components/breadcrumb/breadcrumb-root.svelte +++ b/src/lib/components/breadcrumb/breadcrumb-root.svelte @@ -1,28 +1,14 @@ {@render children?.()} diff --git a/src/lib/components/breadcrumb/breadcrumb-separator.svelte b/src/lib/components/breadcrumb/breadcrumb-separator.svelte index de1dd84..32a092f 100644 --- a/src/lib/components/breadcrumb/breadcrumb-separator.svelte +++ b/src/lib/components/breadcrumb/breadcrumb-separator.svelte @@ -1,28 +1,14 @@ {@render children?.()} diff --git a/src/lib/components/button/button.svelte b/src/lib/components/button/button.svelte index c378ec1..9f561ca 100644 --- a/src/lib/components/button/button.svelte +++ b/src/lib/components/button/button.svelte @@ -2,15 +2,11 @@ import type { HTMLAttributes } from 'svelte/elements'; import type { ButtonProps } from './types'; import { HtmlAtom } from '$svelte-atoms/core/components/atom'; - import { getPreset } from '$svelte-atoms/core/context'; - import { toClassValue } from '$svelte-atoms/core/utils'; - - const preset = getPreset('button'); let { class: klass = '', type = 'button', - base = preset?.base as B, + preset = 'button', children = undefined, ...restProps }: ButtonProps & HTMLAttributes = $props(); @@ -22,13 +18,13 @@ {@render children?.()} diff --git a/src/lib/components/card/card-body.svelte b/src/lib/components/card/card-body.svelte index b96e23b..39ce91c 100644 --- a/src/lib/components/card/card-body.svelte +++ b/src/lib/components/card/card-body.svelte @@ -6,19 +6,13 @@ import { CardBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; const bond = CardBond.get(); - const preset = getPreset('card.description'); - let { class: klass = '', - as = preset?.as ?? 'p', - base = preset?.base as B, + as = 'p' as E, children = undefined, onmount = undefined, ondestroy = undefined, @@ -37,12 +33,9 @@ import { CardBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; const bond = CardBond.get(); - const preset = getPreset('card.footer'); - let { class: klass = '', - as = preset?.as ?? 'div', - base = preset?.base as B, + as = 'div' as E, children = undefined, onmount = undefined, ondestroy = undefined, @@ -37,12 +33,9 @@ import { CardBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; const bond = CardBond.get(); - const preset = getPreset('card.header'); - let { class: klass = '', - as = preset?.as ?? 'div', - base = preset?.base as B, + as = 'div' as E, children = undefined, onmount = undefined, ondestroy = undefined, @@ -37,12 +33,9 @@ import { CardBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; const bond = CardBond.get(); - const preset = getPreset('card.media'); - let { class: klass = '', - as = preset?.as ?? 'div', - base = preset?.base as B, + as = 'div' as E, children = undefined, onmount = undefined, ondestroy = undefined, @@ -37,12 +33,9 @@ import { CardBond, CardBondState, type CardBondProps } from './bond.svelte'; import type { CardRootProps } from './types'; - import { defineState, toClassValue } from '$svelte-atoms/core/utils'; + import { defineState } from '$svelte-atoms/core/utils'; import { defineProperty } from '$svelte-atoms/core/utils/state'; - import { getPreset } from '$svelte-atoms/core/context'; import { HtmlAtom, type Base } from '$svelte-atoms/core/components/atom'; import './card.css'; - const preset = getPreset('card'); - let { class: klass = '', disabled = false, - as = preset?.as ?? 'div', - base = preset?.base as B, factory = _factory, children = undefined, onclick = undefined, @@ -74,14 +69,14 @@ import { CardBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; const bond = CardBond.get(); - const preset = getPreset('card.subtitle'); - let { class: klass = '', - as = preset?.as ?? 'p', - base = preset?.base as B, + as = 'p' as E, children = undefined, onmount = undefined, ondestroy = undefined, @@ -37,12 +33,9 @@ import { CardBond } from './bond.svelte'; - import { toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; + import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; const bond = CardBond.get(); - const preset = getPreset('card.title'); - let { class: klass = '', - as = preset?.as ?? 'h3', - base = preset?.base as B, + as = 'h3' as E, children = undefined, onmount = undefined, ondestroy = undefined, @@ -37,12 +33,9 @@ @@ -114,41 +107,40 @@ {#if indeterminate} {#if indeterminateContent} {:else} -
-
+
{/if} {:else if checked === true} {#if checkedContent} {:else} -
-
+
{/if} {/if}
diff --git a/src/lib/components/collapsible/collapsible-body.svelte b/src/lib/components/collapsible/collapsible-body.svelte index a889618..6f5c4f3 100644 --- a/src/lib/components/collapsible/collapsible-body.svelte +++ b/src/lib/components/collapsible/collapsible-body.svelte @@ -13,19 +13,13 @@ {@render children?.({ collapsible: bond })} diff --git a/src/lib/components/collapsible/collapsible-header.svelte b/src/lib/components/collapsible/collapsible-header.svelte index 13dd323..9bef5d2 100644 --- a/src/lib/components/collapsible/collapsible-header.svelte +++ b/src/lib/components/collapsible/collapsible-header.svelte @@ -13,19 +13,13 @@ {@render children?.({ collapsible: bond })} diff --git a/src/lib/components/collapsible/collapsible-indicator.svelte b/src/lib/components/collapsible/collapsible-indicator.svelte index 5e34e80..ed2308b 100644 --- a/src/lib/components/collapsible/collapsible-indicator.svelte +++ b/src/lib/components/collapsible/collapsible-indicator.svelte @@ -15,21 +15,16 @@ import { animate as motion } from 'motion'; import { CollapsibleBond } from './bond.svelte'; import { Icon } from '$svelte-atoms/core/components/icon'; - import { toClassValue } from '$svelte-atoms/core/utils'; + import type { Override } from '$svelte-atoms/core/types'; - import { getPreset } from '$svelte-atoms/core/context'; import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; import IconArrowDown from '$svelte-atoms/core/icons/icon-arrow-down.svelte'; const bond = CollapsibleBond.get(); const isOpen = $derived(bond?.state.props.open ?? false); - const preset = getPreset('collapsible.indicator'); - let { class: klass = '', - as = preset?.as ?? ('div' as E), - base = preset?.base as B, children = undefined, onmount = undefined, ondestroy = undefined, @@ -51,19 +46,15 @@ {#if children} diff --git a/src/lib/components/collapsible/collapsible-root.svelte b/src/lib/components/collapsible/collapsible-root.svelte index b90a126..f9137e2 100644 --- a/src/lib/components/collapsible/collapsible-root.svelte +++ b/src/lib/components/collapsible/collapsible-root.svelte @@ -20,13 +20,10 @@ import type { Snippet } from 'svelte'; import { nanoid } from 'nanoid'; import type { Factory, Override } from '$svelte-atoms/core/types'; - import { getPreset } from '$svelte-atoms/core/context'; - import { defineProperty, defineState, toClassValue } from '$svelte-atoms/core/utils'; + import { defineProperty, defineState } from '$svelte-atoms/core/utils'; import { CollapsibleBond, CollapsibleState, type CollapsibleStateProps } from './bond.svelte'; import { HtmlAtom, type HtmlAtomProps, type Base } from '$svelte-atoms/core/components/atom'; - const preset = getPreset('collapsible'); - let { open = $bindable(false), class: klass = '', @@ -34,7 +31,6 @@ data = undefined, disabled = false, as = 'div' as E, - base = preset?.base as B, factory = _factory, children = undefined, onmount = undefined, @@ -75,11 +71,9 @@ {@render children?.({ collapsible: bond })} diff --git a/src/lib/components/combobox/combobox-input.svelte b/src/lib/components/combobox/combobox-input.svelte index 9b68ea3..79313be 100644 --- a/src/lib/components/combobox/combobox-input.svelte +++ b/src/lib/components/combobox/combobox-input.svelte @@ -1,7 +1,5 @@ import { DataGridBond } from './bond.svelte'; import type { DatagridFooterProps } from './types'; - import { toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; import { HtmlAtom, type Base } from '$svelte-atoms/core/components/atom'; const bond = DataGridBond.get(); - const preset = getPreset('datagrid.footer'); - let { class: klass = '', - as = preset?.as ?? 'div', - base = preset?.base as B, children = undefined, onmount = undefined, ondestroy = undefined, @@ -25,9 +19,9 @@ import { DataGridBond, DataGridBondState, type DataGridStateProps } from './bond.svelte'; import type { DatagridRootProps } from './types'; - import { defineProperty, defineState, toClassValue } from '$svelte-atoms/core/utils'; - import { getPreset } from '$svelte-atoms/core/context'; + import { defineProperty, defineState } from '$svelte-atoms/core/utils'; import { HtmlAtom, type Base } from '$svelte-atoms/core/components/atom'; - import './datagrid.css'; - const preset = getPreset('datagrid'); + import './datagrid.css'; let { class: klass = '', values = $bindable([]), template = undefined, data = [], - as = preset?.as ?? 'div', - base = preset?.base as B, factory = _factory, children = undefined, onmount = undefined, @@ -47,13 +43,9 @@ { element = node; }} - {as} - {base} - class={[ - 'flex h-full items-center py-2 text-left', - toClassValue.apply(bond, [preset?.class]), - toClassValue.apply(bond, [klass]) - ]} + {bond} + preset="datagrid.td" + class={['flex h-full items-center py-2 text-left', '$preset', klass]} enter={enter?.bind(bond.state)} exit={exit?.bind(bond.state)} initial={initial?.bind(bond.state)} diff --git a/src/lib/components/datagrid/th/datagrid-th-sort-icon.svelte b/src/lib/components/datagrid/th/datagrid-th-sort-icon.svelte index c3c924d..75285b7 100644 --- a/src/lib/components/datagrid/th/datagrid-th-sort-icon.svelte +++ b/src/lib/components/datagrid/th/datagrid-th-sort-icon.svelte @@ -3,21 +3,15 @@ import { Icon } from '$svelte-atoms/core/components/icon'; import { DataGridThBond } from './bond.svelte'; import IconArrowDown from '$svelte-atoms/core/icons/icon-arrow-down.svelte'; - import { getPreset } from '$svelte-atoms/core/context'; import { HtmlAtom, type Base } from '$svelte-atoms/core/components/atom'; - import { toClassValue } from '$lib/utils'; const bond = DataGridThBond.get(); - const preset = getPreset('datagrid.sort-icon'); - const isSortable = $derived(bond.state.isSortable); const directionAsNumber = $derived(+(bond.state.props.direction === 'asc')); let { class: klass = '', - as = preset?.as, - base = preset?.base as B, onmount = undefined, ondestroy = undefined, animate = _animate, @@ -38,9 +32,9 @@ {#if !!isSortable}