svelte-object
Version:
A nested component Svelte 5 Runes pattern for structuring objects/arrays and their properties
77 lines (76 loc) • 3.23 kB
TypeScript
export interface Props<T extends Record<PropertyKey, unknown> | unknown[]> {
children?: Snippet<[
props: {
value: T;
attributes: Record<PropertyKey, unknown>;
}
]>;
name?: string | number;
default?: T;
value?: T;
/**
* What the unmodified object is
*
* Note: Set it with snapshot and untracked;
* `origin={untrack(() => $state.snapshot(value))}`
*
* Alternatively, use `object.setOrigin(value)`.
*/
origin?: T;
/** Whether there's a difference between the modified and unmodified */
modified?: boolean;
attributes?: Record<PropertyKey, unknown>;
onSubmit?: (value: T) => void;
/** Validate with parent, even if unnamed */
withParent?: boolean;
}
type Prescriptor = {
name: PropertyKey;
get: () => unknown;
set: (value: unknown) => void;
};
type SvelteObjectGeneric = Record<PropertyKey, unknown> | unknown[];
type SvelteObjectContext<T extends SvelteObjectGeneric = SvelteObjectGeneric> = {
addPrescriptor: (name: Prescriptor['name'], getter: Prescriptor['get'], setter: Prescriptor['set']) => () => void;
addValidator(fn: (trigger?: ValidationType) => boolean): void;
removeValidator(fn: (trigger?: ValidationType) => boolean): void;
submit: () => void;
validate: (trigger?: ValidationType) => boolean;
value: T | undefined;
attributes: Record<string, unknown>;
};
export declare function getContextSvelteObject(): SvelteObjectContext;
import { type Snippet } from 'svelte';
import type { ValidationType } from './validation-types';
declare function $$render<T extends SvelteObjectGeneric>(): {
props: Props<T>;
exports: {
submit: () => void;
setOrigin: (newOrigin: T) => void;
validate: (trigger?: ValidationType) => boolean;
};
bindings: "value" | "origin" | "modified" | "attributes";
slots: {};
events: {};
};
declare class __sveltets_Render<T extends SvelteObjectGeneric> {
props(): ReturnType<typeof $$render<T>>['props'];
events(): ReturnType<typeof $$render<T>>['events'];
slots(): ReturnType<typeof $$render<T>>['slots'];
bindings(): "value" | "origin" | "modified" | "attributes";
exports(): {
submit: () => void;
setOrigin: (newOrigin: T) => void;
validate: (trigger?: ValidationType) => boolean;
};
}
interface $$IsomorphicComponent {
new <T extends SvelteObjectGeneric>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
$$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
} & ReturnType<__sveltets_Render<T>['exports']>;
<T extends SvelteObjectGeneric>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
}
declare const SvelteObject: $$IsomorphicComponent;
type SvelteObject<T extends SvelteObjectGeneric> = InstanceType<typeof SvelteObject<T>>;
export default SvelteObject;