svelte-tably 1.0.0-next.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +299 -93
- package/dist/column/Column.svelte +41 -0
- package/dist/column/Column.svelte.d.ts +27 -0
- package/dist/column/column.svelte.js +64 -0
- package/dist/conditional.svelte.d.ts +10 -0
- package/dist/conditional.svelte.js +26 -0
- package/dist/expandable/Expandable.svelte +24 -0
- package/dist/expandable/Expandable.svelte.d.ts +25 -0
- package/dist/expandable/expandable.svelte.js +27 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.js +5 -3
- package/dist/panel/Panel.svelte +21 -0
- package/dist/{Panel.svelte.d.ts → panel/Panel.svelte.d.ts} +1 -28
- package/dist/panel/panel.svelte.js +18 -0
- package/dist/row/Row.svelte +24 -0
- package/dist/row/Row.svelte.d.ts +25 -0
- package/dist/row/row.svelte.js +28 -0
- package/dist/size-tween.svelte.d.ts +16 -0
- package/dist/size-tween.svelte.js +33 -0
- package/dist/table/Table.svelte +1139 -0
- package/dist/table/Table.svelte.d.ts +31 -0
- package/dist/table/data.svelte.d.ts +14 -0
- package/dist/table/data.svelte.js +81 -0
- package/dist/table/table.svelte.js +76 -0
- package/dist/table/virtualization.svelte.d.ts +14 -0
- package/dist/table/virtualization.svelte.js +86 -0
- package/dist/utility.svelte.d.ts +21 -0
- package/dist/utility.svelte.js +104 -0
- package/package.json +34 -53
- package/dist/Column.svelte +0 -164
- package/dist/Column.svelte.d.ts +0 -115
- package/dist/Panel.svelte +0 -74
- package/dist/Table.svelte +0 -906
- package/dist/Table.svelte.d.ts +0 -112
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
export { default as default } from './Table.svelte';
|
|
2
|
-
export { default as Panel } from './Panel.svelte';
|
|
3
|
-
export { default as Column } from './Column.svelte';
|
|
1
|
+
export { default as default } from './table/Table.svelte';
|
|
2
|
+
export { default as Panel } from './panel/Panel.svelte';
|
|
3
|
+
export { default as Column } from './column/Column.svelte';
|
|
4
|
+
export { default as Row } from './row/Row.svelte';
|
|
5
|
+
export { default as Expandable } from './expandable/Expandable.svelte';
|
|
6
|
+
export type { TableState, TableProps } from './table/table.svelte.js';
|
|
7
|
+
export type { RowState, RowProps } from './row/row.svelte.js';
|
|
8
|
+
export type { ColumnState, ColumnProps } from './column/column.svelte.js';
|
|
9
|
+
export type { ExpandableState, ExpandableProps } from './expandable/expandable.svelte.js';
|
|
10
|
+
export type { PanelState, PanelProps } from './panel/panel.svelte.js';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export { default as default } from './Table.svelte';
|
|
2
|
-
export { default as Panel } from './Panel.svelte';
|
|
3
|
-
export { default as Column } from './Column.svelte';
|
|
1
|
+
export { default as default } from './table/Table.svelte';
|
|
2
|
+
export { default as Panel } from './panel/Panel.svelte';
|
|
3
|
+
export { default as Column } from './column/Column.svelte';
|
|
4
|
+
export { default as Row } from './row/Row.svelte';
|
|
5
|
+
export { default as Expandable } from './expandable/Expandable.svelte';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- @component
|
|
2
|
+
|
|
3
|
+
This is a description, \
|
|
4
|
+
on how to use this.
|
|
5
|
+
|
|
6
|
+
@example
|
|
7
|
+
<Component />
|
|
8
|
+
|
|
9
|
+
-->
|
|
10
|
+
|
|
11
|
+
<script lang='ts' generics='T extends Record<PropertyKey, unknown>'>
|
|
12
|
+
|
|
13
|
+
import { PanelState, type PanelProps } from './panel.svelte.js'
|
|
14
|
+
import { fromProps } from '../utility.svelte.js'
|
|
15
|
+
|
|
16
|
+
let {...props}: PanelProps<T> = $props()
|
|
17
|
+
const properties = fromProps(props)
|
|
18
|
+
|
|
19
|
+
new PanelState<T>(properties)
|
|
20
|
+
|
|
21
|
+
</script>
|
|
@@ -1,32 +1,5 @@
|
|
|
1
|
-
export interface Panel<T extends Record<PropertyKey, unknown> = Record<PropertyKey, unknown>> {
|
|
2
|
-
/** A darkened backdrop? */
|
|
3
|
-
backdrop: boolean;
|
|
4
|
-
content: Snippet<[context: {
|
|
5
|
-
readonly table: TableState<T>;
|
|
6
|
-
readonly data: T[];
|
|
7
|
-
}]>;
|
|
8
|
-
}
|
|
9
|
-
export declare class PanelTween {
|
|
10
|
-
#private;
|
|
11
|
-
current: number;
|
|
12
|
-
transitioning: boolean;
|
|
13
|
-
/** bind:clientWidth */
|
|
14
|
-
width: number;
|
|
15
|
-
set target(value: number);
|
|
16
|
-
constructor(cb: () => string | undefined, added?: number);
|
|
17
|
-
}
|
|
18
|
-
import { type Snippet } from 'svelte';
|
|
19
|
-
import { type TableState } from './Table.svelte';
|
|
20
1
|
declare class __sveltets_Render<T extends Record<PropertyKey, unknown>> {
|
|
21
|
-
props():
|
|
22
|
-
id: string;
|
|
23
|
-
/** A darkened backdrop? */
|
|
24
|
-
backdrop?: boolean;
|
|
25
|
-
children: Snippet<[context: {
|
|
26
|
-
readonly table: TableState<T>;
|
|
27
|
-
readonly data: T[];
|
|
28
|
-
}]>;
|
|
29
|
-
};
|
|
2
|
+
props(): PanelProps<T_1>;
|
|
30
3
|
events(): {};
|
|
31
4
|
slots(): {};
|
|
32
5
|
bindings(): "";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TableState } from '../table/table.svelte.js';
|
|
2
|
+
export class PanelState {
|
|
3
|
+
#props = {};
|
|
4
|
+
table;
|
|
5
|
+
id = $derived(this.#props.id);
|
|
6
|
+
backdrop = $derived(this.#props.backdrop ?? true);
|
|
7
|
+
children = $derived(this.#props.children);
|
|
8
|
+
constructor(props) {
|
|
9
|
+
this.#props = props;
|
|
10
|
+
const table = props.table ?? TableState.getContext();
|
|
11
|
+
if (!table) {
|
|
12
|
+
throw new Error('svelte-tably: Panel must be associated with a Table');
|
|
13
|
+
}
|
|
14
|
+
this.table = table;
|
|
15
|
+
const remove = table.add(this);
|
|
16
|
+
$effect(() => remove);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!-- @component
|
|
2
|
+
|
|
3
|
+
This is a description, \
|
|
4
|
+
on how to use this.
|
|
5
|
+
|
|
6
|
+
@example
|
|
7
|
+
<Component />
|
|
8
|
+
|
|
9
|
+
-->
|
|
10
|
+
|
|
11
|
+
<script lang='ts'>
|
|
12
|
+
|
|
13
|
+
import { RowState, type RowProps } from './row.svelte.js'
|
|
14
|
+
import type { AnyRecord } from '../utility.svelte.js'
|
|
15
|
+
import { fromProps } from '../utility.svelte.js'
|
|
16
|
+
|
|
17
|
+
type T = $$Generic<AnyRecord>
|
|
18
|
+
|
|
19
|
+
let { ...restProps }: RowProps<T> = $props()
|
|
20
|
+
|
|
21
|
+
const properties = fromProps(restProps)
|
|
22
|
+
new RowState<T>(properties)
|
|
23
|
+
|
|
24
|
+
</script>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AnyRecord } from '../utility.svelte.js';
|
|
2
|
+
declare class __sveltets_Render<T extends AnyRecord> {
|
|
3
|
+
props(): RowProps<T_1>;
|
|
4
|
+
events(): {};
|
|
5
|
+
slots(): {};
|
|
6
|
+
bindings(): "";
|
|
7
|
+
exports(): {};
|
|
8
|
+
}
|
|
9
|
+
interface $$IsomorphicComponent {
|
|
10
|
+
new <T extends AnyRecord>(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']>> & {
|
|
11
|
+
$$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
|
|
12
|
+
} & ReturnType<__sveltets_Render<T>['exports']>;
|
|
13
|
+
<T extends AnyRecord>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
|
|
14
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* This is a description, \
|
|
18
|
+
* on how to use this.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <Component />
|
|
22
|
+
*/
|
|
23
|
+
declare const Row: $$IsomorphicComponent;
|
|
24
|
+
type Row<T extends AnyRecord> = InstanceType<typeof Row<T>>;
|
|
25
|
+
export default Row;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TableState } from '../table/table.svelte.js';
|
|
2
|
+
export class RowState {
|
|
3
|
+
#table;
|
|
4
|
+
#props = {};
|
|
5
|
+
snippets = $derived({
|
|
6
|
+
context: this.#props.context,
|
|
7
|
+
contextHeader: this.#props.contextHeader
|
|
8
|
+
});
|
|
9
|
+
events = $derived({
|
|
10
|
+
onclick: this.#props.onclick,
|
|
11
|
+
oncontextmenu: this.#props.oncontextmenu
|
|
12
|
+
});
|
|
13
|
+
options = $derived({
|
|
14
|
+
context: {
|
|
15
|
+
hover: this.#props.contextOptions?.hover ?? true,
|
|
16
|
+
width: this.#props.contextOptions?.width ?? 'max-content'
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
constructor(props) {
|
|
20
|
+
this.#props = props;
|
|
21
|
+
this.#table = TableState.getContext();
|
|
22
|
+
if (!this.#table) {
|
|
23
|
+
throw new Error('svelte-tably: Expandable must be associated with a Table');
|
|
24
|
+
}
|
|
25
|
+
this.#table.row = this;
|
|
26
|
+
$effect(() => () => this.#table.row === this && (this.#table.row = undefined));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { EasingFunction } from 'svelte/transition';
|
|
2
|
+
interface SizeOptions {
|
|
3
|
+
min?: number;
|
|
4
|
+
duration?: number;
|
|
5
|
+
easing?: EasingFunction;
|
|
6
|
+
}
|
|
7
|
+
export declare class SizeTween {
|
|
8
|
+
#private;
|
|
9
|
+
current: number;
|
|
10
|
+
transitioning: boolean;
|
|
11
|
+
/** bind:offsetWidth bind:offsetHeight */
|
|
12
|
+
size: number;
|
|
13
|
+
set target(value: number);
|
|
14
|
+
constructor(cb: () => boolean | undefined, opts?: SizeOptions);
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { untrack } from 'svelte';
|
|
2
|
+
import { sineInOut } from 'svelte/easing';
|
|
3
|
+
import { Tween } from 'svelte/motion';
|
|
4
|
+
export class SizeTween {
|
|
5
|
+
#tweenOptions = { duration: 300, easing: sineInOut };
|
|
6
|
+
#tween = new Tween(0, this.#tweenOptions);
|
|
7
|
+
current = $derived(this.#tween.current);
|
|
8
|
+
transitioning = $state(false);
|
|
9
|
+
/** bind:offsetWidth bind:offsetHeight */
|
|
10
|
+
size = $state(0);
|
|
11
|
+
set target(value) {
|
|
12
|
+
this.transitioning = true;
|
|
13
|
+
this.#tween.set(value, this.#tweenOptions).then(() => this.transitioning = false);
|
|
14
|
+
}
|
|
15
|
+
constructor(cb, opts = {}) {
|
|
16
|
+
if ('duration' in opts) {
|
|
17
|
+
this.#tweenOptions.duration = opts.duration;
|
|
18
|
+
}
|
|
19
|
+
if ('easing' in opts) {
|
|
20
|
+
this.#tweenOptions.easing = opts.easing;
|
|
21
|
+
}
|
|
22
|
+
untrack(() => {
|
|
23
|
+
if (cb()) {
|
|
24
|
+
requestAnimationFrame(() => {
|
|
25
|
+
this.#tween.set(Math.max(this.size, opts.min ?? 0), { duration: 0 });
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
$effect.pre(() => {
|
|
30
|
+
this.target = cb() ? Math.max(this.size, opts.min ?? 0) : 0;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|