1 Commits

Author SHA1 Message Date
Elijah Duffy
e48de875e8 1.1.3 2026-03-15 13:00:23 -07:00
4 changed files with 13 additions and 29 deletions

View File

@@ -4,7 +4,7 @@
"type": "git",
"url": "https://gitea.auvem.com/svelte-toolkit/sui.git"
},
"version": "1.1.2",
"version": "1.1.3",
"scripts": {
"dev": "vite dev",
"build": "vite build && pnpm run prepack",

View File

@@ -76,9 +76,9 @@
/**
* Stores internal state of the dialog, everything necessary to render
* internal and override capable snippets.
* internal snippets.
*/
export type DialogState = {
type DialogState = {
frozen: boolean;
loading: boolean;
disabled: boolean;
@@ -141,10 +141,8 @@
onopenchange?: ({ open, dialog }: { open: boolean; dialog: DialogAPI }) => void;
/** If default controls are used, controls loading state of submit button */
loading?: boolean;
/** If default controls are used, freezes all interactions preventing user input */
/** If default controls are used, freezes all interactions */
frozen?: boolean;
/** If enabled, automatically freezes dialog when loading (default: true) */
autoFreeze?: boolean;
/** If default controls are used, disables submit button */
disabled?: boolean;
}
@@ -164,7 +162,6 @@
onopenchange,
loading = $bindable(false),
frozen = $bindable(false),
autoFreeze = true,
disabled = $bindable(false)
}: Props = $props();
@@ -183,8 +180,6 @@
let stackIndex = $state(-1);
const zIndex = $derived(1000 + stackIndex * 100);
const reallyFrozen = $derived(autoFreeze ? frozen || loading : frozen);
/** handles open change */
const handleOpenChange = (localOpen: boolean) => {
if (localOpen) {
@@ -249,7 +244,7 @@
/** Returns the current state of the dialog */
export const getState = (): DialogState => {
return {
frozen: reallyFrozen,
frozen,
loading,
disabled,
api: dialogAPI
@@ -276,11 +271,11 @@
transition:fade={{ duration: 150 }}
onclick={(e) => {
const target = e.target as HTMLElement;
if (open && !reallyFrozen && !dialogContainer?.contains(target) && target !== dialogContainer)
if (open && !frozen && !dialogContainer?.contains(target) && target !== dialogContainer)
open = false;
}}
onkeydown={(e) => {
if (e.key === 'Escape' && !reallyFrozen) {
if (e.key === 'Escape' && !frozen) {
if (stackIndex === dialogStack.length - 1) {
// only close if this dialog is the topmost dialog
open = false;
@@ -379,7 +374,7 @@
state.api.close();
}
}}
disabled={state.frozen || state.disabled}
disabled={state.frozen}
>
{opts?.label || 'Cancel'}
</Button>

View File

@@ -23,22 +23,12 @@
activeIndex?: number;
/** Callback fired when the active tab changes */
onchange?: (event: { index: number; tab: TabPage }) => void;
/** Applies layout padding to the tab header (default: false) */
padHeader?: boolean;
/** Applies layout padding to the content areas (default: false) */
padContent?: 'padding' | 'margin' | 'none';
/** Additional classes applied to the outer container */
/** Applies layout padding to the tab header & content areas (default: false) */
padded?: boolean;
class?: ClassValue | null;
}
let {
pages,
activeIndex = 0,
onchange,
padHeader = false,
padContent = 'none',
class: classValue
}: Props = $props();
let { pages, activeIndex = 0, onchange, padded = false, class: classValue }: Props = $props();
let primaryContainerEl: HTMLDivElement;
let tabContainerEl: HTMLDivElement;
@@ -109,7 +99,7 @@
bind:this={tabContainerEl}
class={[
'border-sui-text/15 relative mb-4 flex items-center gap-5 border-b-2',
padHeader && 'px-layout'
padded && 'px-layout'
]}
>
{#each pages as page, i (page.title)}
@@ -144,7 +134,7 @@
{#key activeIndex}
<div
class={[padContent === 'padding' && 'px-layout', padContent === 'margin' && 'mx-layout']}
class={[padded && 'px-layout']}
in:flyX={{ direction: activeIndex > prevIndex ? 1 : -1, duration: 180, delay: 181 }}
out:flyX={{ direction: activeIndex > prevIndex ? -1 : 1, duration: 180 }}
onoutrostart={lockHeight}

View File

@@ -10,7 +10,6 @@ export {
default as Dialog,
type DialogAPI,
type DialogControls,
type DialogState,
dialogCancelButton,
dialogCloseButton,
dialogOkButton