@lapis-notes/bases 0.1.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/CHANGELOG.md +6 -0
- package/LICENSE.md +8 -0
- package/README.md +20 -0
- package/dist/bases-plugin.d.ts +10 -0
- package/dist/bases-plugin.js +118 -0
- package/dist/bases-view/app-database-query-source.d.ts +30 -0
- package/dist/bases-view/app-database-query-source.js +248 -0
- package/dist/bases-view/bases.svelte.d.ts +569 -0
- package/dist/bases-view/bases.svelte.js +910 -0
- package/dist/bases-view/card-view/components/card-placeholder.svelte +68 -0
- package/dist/bases-view/card-view/components/card-placeholder.svelte.d.ts +7 -0
- package/dist/bases-view/card-view/components/card.svelte +289 -0
- package/dist/bases-view/card-view/components/card.svelte.d.ts +7 -0
- package/dist/bases-view/card-view/index.d.ts +11 -0
- package/dist/bases-view/card-view/index.js +55 -0
- package/dist/bases-view/cell-editor-options.d.ts +2 -0
- package/dist/bases-view/cell-editor-options.js +26 -0
- package/dist/bases-view/cell-editor.svelte +206 -0
- package/dist/bases-view/cell-editor.svelte.d.ts +12 -0
- package/dist/bases-view/cell.svelte +132 -0
- package/dist/bases-view/cell.svelte.d.ts +16 -0
- package/dist/bases-view/column-definition.d.ts +22 -0
- package/dist/bases-view/column-definition.js +149 -0
- package/dist/bases-view/columns.d.ts +15 -0
- package/dist/bases-view/columns.js +103 -0
- package/dist/bases-view/components/Tag.svelte +14 -0
- package/dist/bases-view/components/Tag.svelte.d.ts +8 -0
- package/dist/bases-view/components/autocomplete.svelte +45 -0
- package/dist/bases-view/components/autocomplete.svelte.d.ts +17 -0
- package/dist/bases-view/components/card-image.svelte +121 -0
- package/dist/bases-view/components/card-image.svelte.d.ts +11 -0
- package/dist/bases-view/components/column-visibility.svelte +388 -0
- package/dist/bases-view/components/column-visibility.svelte.d.ts +13 -0
- package/dist/bases-view/components/datetime.svelte +35 -0
- package/dist/bases-view/components/datetime.svelte.d.ts +7 -0
- package/dist/bases-view/components/file.svelte +31 -0
- package/dist/bases-view/components/file.svelte.d.ts +8 -0
- package/dist/bases-view/components/filters/filter-editor.svelte +102 -0
- package/dist/bases-view/components/filters/filter-editor.svelte.d.ts +10 -0
- package/dist/bases-view/components/filters/filter-group.svelte +142 -0
- package/dist/bases-view/components/filters/filter-group.svelte.d.ts +11 -0
- package/dist/bases-view/components/filters/filter-properties.svelte +77 -0
- package/dist/bases-view/components/filters/filter-properties.svelte.d.ts +8 -0
- package/dist/bases-view/components/filters/filter-root.svelte +112 -0
- package/dist/bases-view/components/filters/filter-root.svelte.d.ts +12 -0
- package/dist/bases-view/components/filters/filter-row.svelte +351 -0
- package/dist/bases-view/components/filters/filter-row.svelte.d.ts +11 -0
- package/dist/bases-view/components/group/group-root.svelte +120 -0
- package/dist/bases-view/components/group/group-root.svelte.d.ts +8 -0
- package/dist/bases-view/components/limit.svelte +100 -0
- package/dist/bases-view/components/limit.svelte.d.ts +12 -0
- package/dist/bases-view/components/query-editor.svelte +230 -0
- package/dist/bases-view/components/query-editor.svelte.d.ts +15 -0
- package/dist/bases-view/components/sort/sort-direction-labels.d.ts +9 -0
- package/dist/bases-view/components/sort/sort-direction-labels.js +25 -0
- package/dist/bases-view/components/sort/sort-root.svelte +239 -0
- package/dist/bases-view/components/sort/sort-root.svelte.d.ts +11 -0
- package/dist/bases-view/components/sort/sort-row.svelte +190 -0
- package/dist/bases-view/components/sort/sort-row.svelte.d.ts +15 -0
- package/dist/bases-view/components/summary-strip.svelte +56 -0
- package/dist/bases-view/components/summary-strip.svelte.d.ts +8 -0
- package/dist/bases-view/components/tag-chip.svelte +47 -0
- package/dist/bases-view/components/tag-chip.svelte.d.ts +12 -0
- package/dist/bases-view/components/views.svelte +178 -0
- package/dist/bases-view/components/views.svelte.d.ts +12 -0
- package/dist/bases-view/data-table-adapter/data-table.svelte.d.ts +45 -0
- package/dist/bases-view/data-table-adapter/data-table.svelte.js +112 -0
- package/dist/bases-view/data-table-adapter/flex-render.svelte +43 -0
- package/dist/bases-view/data-table-adapter/flex-render.svelte.d.ts +30 -0
- package/dist/bases-view/data-table-adapter/index.d.ts +3 -0
- package/dist/bases-view/data-table-adapter/index.js +3 -0
- package/dist/bases-view/data-table-adapter/render-helpers.d.ts +101 -0
- package/dist/bases-view/data-table-adapter/render-helpers.js +110 -0
- package/dist/bases-view/db.d.ts +31 -0
- package/dist/bases-view/db.js +174 -0
- package/dist/bases-view/document-core.d.ts +2 -0
- package/dist/bases-view/document-core.js +166 -0
- package/dist/bases-view/export-core.d.ts +4 -0
- package/dist/bases-view/export-core.js +31 -0
- package/dist/bases-view/file-fields-core.d.ts +31 -0
- package/dist/bases-view/file-fields-core.js +114 -0
- package/dist/bases-view/filter-parser.d.ts +27 -0
- package/dist/bases-view/filter-parser.js +315 -0
- package/dist/bases-view/functions-core.d.ts +66 -0
- package/dist/bases-view/functions-core.js +265 -0
- package/dist/bases-view/functions.d.ts +5 -0
- package/dist/bases-view/functions.js +107 -0
- package/dist/bases-view/fuzzy-search.d.ts +6 -0
- package/dist/bases-view/fuzzy-search.js +15 -0
- package/dist/bases-view/hooks/useResizeObserver.svelte.d.ts +7 -0
- package/dist/bases-view/hooks/useResizeObserver.svelte.js +26 -0
- package/dist/bases-view/index.d.ts +66 -0
- package/dist/bases-view/index.js +231 -0
- package/dist/bases-view/list-view/index.d.ts +10 -0
- package/dist/bases-view/list-view/index.js +17 -0
- package/dist/bases-view/list-view/list.svelte +156 -0
- package/dist/bases-view/list-view/list.svelte.d.ts +7 -0
- package/dist/bases-view/map-view/index.d.ts +10 -0
- package/dist/bases-view/map-view/index.js +17 -0
- package/dist/bases-view/map-view/view.svelte +28 -0
- package/dist/bases-view/map-view/view.svelte.d.ts +7 -0
- package/dist/bases-view/metadata-invalidation-core.d.ts +34 -0
- package/dist/bases-view/metadata-invalidation-core.js +162 -0
- package/dist/bases-view/metadata-type-info.d.ts +7 -0
- package/dist/bases-view/metadata-type-info.js +10 -0
- package/dist/bases-view/models.d.ts +90 -0
- package/dist/bases-view/models.js +133 -0
- package/dist/bases-view/query-result-core.d.ts +8 -0
- package/dist/bases-view/query-result-core.js +16 -0
- package/dist/bases-view/resource-url.d.ts +2 -0
- package/dist/bases-view/resource-url.js +21 -0
- package/dist/bases-view/search-core.d.ts +9 -0
- package/dist/bases-view/search-core.js +20 -0
- package/dist/bases-view/summary-core.d.ts +7 -0
- package/dist/bases-view/summary-core.js +17 -0
- package/dist/bases-view/table-view/components/div-table.svelte +464 -0
- package/dist/bases-view/table-view/components/div-table.svelte.d.ts +32 -0
- package/dist/bases-view/table-view/components/dnd-style.d.ts +3 -0
- package/dist/bases-view/table-view/components/dnd-style.js +6 -0
- package/dist/bases-view/table-view/components/sort-header.svelte +48 -0
- package/dist/bases-view/table-view/components/sort-header.svelte.d.ts +11 -0
- package/dist/bases-view/table-view/components/table-column-tracks.d.ts +14 -0
- package/dist/bases-view/table-view/components/table-column-tracks.js +27 -0
- package/dist/bases-view/table-view/components/table-header.svelte +146 -0
- package/dist/bases-view/table-view/components/table-header.svelte.d.ts +10 -0
- package/dist/bases-view/table-view/components/table-placeholder.svelte +46 -0
- package/dist/bases-view/table-view/components/table-placeholder.svelte.d.ts +30 -0
- package/dist/bases-view/table-view/components/table-virtualizer-core.d.ts +13 -0
- package/dist/bases-view/table-view/components/table-virtualizer-core.js +12 -0
- package/dist/bases-view/table-view/components/table.svelte +997 -0
- package/dist/bases-view/table-view/components/table.svelte.d.ts +32 -0
- package/dist/bases-view/table-view/index.svelte.d.ts +10 -0
- package/dist/bases-view/table-view/index.svelte.js +30 -0
- package/dist/bases-view/unknown-view/index.d.ts +10 -0
- package/dist/bases-view/unknown-view/index.js +19 -0
- package/dist/bases-view/unknown-view/view.svelte +11 -0
- package/dist/bases-view/unknown-view/view.svelte.d.ts +6 -0
- package/dist/bases-view/view-header.svelte +142 -0
- package/dist/bases-view/view-header.svelte.d.ts +28 -0
- package/dist/bases-view/view-registration-inventory.d.ts +22 -0
- package/dist/bases-view/view-registration-inventory.js +7 -0
- package/dist/bases-view/view-settings.svelte +350 -0
- package/dist/bases-view/view-settings.svelte.d.ts +9 -0
- package/dist/bases-view/view.svelte +192 -0
- package/dist/bases-view/view.svelte.d.ts +15 -0
- package/dist/bases-view-surface.svelte +31 -0
- package/dist/bases-view-surface.svelte.d.ts +14 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +8 -0
- package/dist/serialized-write-queue.d.ts +10 -0
- package/dist/serialized-write-queue.js +36 -0
- package/dist/styles.css +2164 -0
- package/manifest.json +33 -0
- package/package.json +90 -0
- package/styles.css +1 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script
|
|
2
|
+
lang="ts"
|
|
3
|
+
generics="TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>"
|
|
4
|
+
>
|
|
5
|
+
import type {
|
|
6
|
+
CellContext,
|
|
7
|
+
ColumnDefTemplate,
|
|
8
|
+
HeaderContext,
|
|
9
|
+
} from "@tanstack/table-core";
|
|
10
|
+
import {
|
|
11
|
+
RenderComponentConfig,
|
|
12
|
+
RenderSnippetConfig,
|
|
13
|
+
} from "./render-helpers.js";
|
|
14
|
+
type Props = {
|
|
15
|
+
/** The cell or header field of the current cell's column definition. */
|
|
16
|
+
content?: TContext extends HeaderContext<TData, TValue>
|
|
17
|
+
? ColumnDefTemplate<HeaderContext<TData, TValue>>
|
|
18
|
+
: TContext extends CellContext<TData, TValue>
|
|
19
|
+
? ColumnDefTemplate<CellContext<TData, TValue>>
|
|
20
|
+
: never;
|
|
21
|
+
/** The result of the `getContext()` function of the header or cell */
|
|
22
|
+
context: TContext;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
let { content, context }: Props = $props();
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
{#if typeof content === "string"}
|
|
29
|
+
{content}
|
|
30
|
+
{:else if content instanceof Function}
|
|
31
|
+
<!-- It's unlikely that a CellContext will be passed to a Header -->
|
|
32
|
+
<!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->
|
|
33
|
+
{@const result = content(context as any)}
|
|
34
|
+
{#if result instanceof RenderComponentConfig}
|
|
35
|
+
{@const { component: Component, props } = result}
|
|
36
|
+
<Component {...props} />
|
|
37
|
+
{:else if result instanceof RenderSnippetConfig}
|
|
38
|
+
{@const { snippet, params } = result}
|
|
39
|
+
{@render snippet(params)}
|
|
40
|
+
{:else}
|
|
41
|
+
{result}
|
|
42
|
+
{/if}
|
|
43
|
+
{/if}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { CellContext, ColumnDefTemplate, HeaderContext } from "@tanstack/table-core";
|
|
2
|
+
declare function $$render<TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>>(): {
|
|
3
|
+
props: {
|
|
4
|
+
/** The cell or header field of the current cell's column definition. */
|
|
5
|
+
content?: TContext extends HeaderContext<TData, TValue> ? ColumnDefTemplate<HeaderContext<TData, TValue>> : TContext extends CellContext<TData, TValue> ? ColumnDefTemplate<CellContext<TData, TValue>> : never;
|
|
6
|
+
/** The result of the `getContext()` function of the header or cell */
|
|
7
|
+
context: TContext;
|
|
8
|
+
};
|
|
9
|
+
exports: {};
|
|
10
|
+
bindings: "";
|
|
11
|
+
slots: {};
|
|
12
|
+
events: {};
|
|
13
|
+
};
|
|
14
|
+
declare class __sveltets_Render<TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>> {
|
|
15
|
+
props(): ReturnType<typeof $$render<TData, TValue, TContext>>['props'];
|
|
16
|
+
events(): ReturnType<typeof $$render<TData, TValue, TContext>>['events'];
|
|
17
|
+
slots(): ReturnType<typeof $$render<TData, TValue, TContext>>['slots'];
|
|
18
|
+
bindings(): "";
|
|
19
|
+
exports(): {};
|
|
20
|
+
}
|
|
21
|
+
interface $$IsomorphicComponent {
|
|
22
|
+
new <TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TData, TValue, TContext>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TData, TValue, TContext>['props']>, ReturnType<__sveltets_Render<TData, TValue, TContext>['events']>, ReturnType<__sveltets_Render<TData, TValue, TContext>['slots']>> & {
|
|
23
|
+
$$bindings?: ReturnType<__sveltets_Render<TData, TValue, TContext>['bindings']>;
|
|
24
|
+
} & ReturnType<__sveltets_Render<TData, TValue, TContext>['exports']>;
|
|
25
|
+
<TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>>(internal: unknown, props: ReturnType<__sveltets_Render<TData, TValue, TContext>['props']> & {}): ReturnType<__sveltets_Render<TData, TValue, TContext>['exports']>;
|
|
26
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
|
|
27
|
+
}
|
|
28
|
+
declare const FlexRender: $$IsomorphicComponent;
|
|
29
|
+
type FlexRender<TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>> = InstanceType<typeof FlexRender<TData, TValue, TContext>>;
|
|
30
|
+
export default FlexRender;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { Component, ComponentProps, Snippet } from "svelte";
|
|
2
|
+
/**
|
|
3
|
+
* A helper class to make it easy to identify Svelte components in
|
|
4
|
+
* `columnDef.cell` and `columnDef.header` properties.
|
|
5
|
+
*
|
|
6
|
+
* > NOTE: This class should only be used internally by the adapter. If you're
|
|
7
|
+
* > reading this and you don't know what this is for, you probably don't need
|
|
8
|
+
* > it.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```svelte
|
|
12
|
+
* {@const result = content(context as any)}
|
|
13
|
+
* {#if result instanceof RenderComponentConfig}
|
|
14
|
+
* {@const { component: Component, props } = result}
|
|
15
|
+
* <Component {...props} />
|
|
16
|
+
* {/if}
|
|
17
|
+
* ```;
|
|
18
|
+
*/
|
|
19
|
+
export declare class RenderComponentConfig<TComponent extends Component> {
|
|
20
|
+
component: TComponent;
|
|
21
|
+
props: ComponentProps<TComponent> | Record<string, never>;
|
|
22
|
+
constructor(component: TComponent, props?: ComponentProps<TComponent> | Record<string, never>);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A helper class to make it easy to identify Svelte Snippets in
|
|
26
|
+
* `columnDef.cell` and `columnDef.header` properties.
|
|
27
|
+
*
|
|
28
|
+
* > NOTE: This class should only be used internally by the adapter. If you're
|
|
29
|
+
* > reading this and you don't know what this is for, you probably don't need
|
|
30
|
+
* > it.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```svelte
|
|
34
|
+
* {@const result = content(context as any)}
|
|
35
|
+
* {#if result instanceof RenderSnippetConfig}
|
|
36
|
+
* {@const { snippet, params } = result}
|
|
37
|
+
* {@render snippet(params)}
|
|
38
|
+
* {/if}
|
|
39
|
+
* ```;
|
|
40
|
+
*/
|
|
41
|
+
export declare class RenderSnippetConfig<TProps> {
|
|
42
|
+
snippet: Snippet<[TProps]>;
|
|
43
|
+
params: TProps;
|
|
44
|
+
constructor(snippet: Snippet<[TProps]>, params: TProps);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A helper function to help create cells from Svelte components through
|
|
48
|
+
* ColumnDef's `cell` and `header` properties.
|
|
49
|
+
*
|
|
50
|
+
* This is only to be used with Svelte Components - use `renderSnippet` for
|
|
51
|
+
* Svelte Snippets.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* // +page.svelte
|
|
56
|
+
* const defaultColumns = [
|
|
57
|
+
* columnHelper.accessor('name', {
|
|
58
|
+
* header: header => renderComponent(SortHeader, { label: 'Name', header }),
|
|
59
|
+
* }),
|
|
60
|
+
* columnHelper.accessor('state', {
|
|
61
|
+
* header: header => renderComponent(SortHeader, { label: 'State', header }),
|
|
62
|
+
* }),
|
|
63
|
+
* ]
|
|
64
|
+
* ```;
|
|
65
|
+
*
|
|
66
|
+
* @param component A Svelte component
|
|
67
|
+
* @param props The props to pass to `component`
|
|
68
|
+
* @returns A `RenderComponentConfig` object that helps svelte-table know how to
|
|
69
|
+
* render the header/cell component.
|
|
70
|
+
* @see {@link https://tanstack.com/table/latest/docs/guide/column-defs}
|
|
71
|
+
*/
|
|
72
|
+
export declare function renderComponent<T extends Component<any>, Props extends ComponentProps<T>>(component: T, props?: Props): RenderComponentConfig<T>;
|
|
73
|
+
/**
|
|
74
|
+
* A helper function to help create cells from Svelte Snippets through
|
|
75
|
+
* ColumnDef's `cell` and `header` properties.
|
|
76
|
+
*
|
|
77
|
+
* The snippet must only take one parameter.
|
|
78
|
+
*
|
|
79
|
+
* This is only to be used with Snippets - use `renderComponent` for Svelte
|
|
80
|
+
* Components.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* // +page.svelte
|
|
85
|
+
* const defaultColumns = [
|
|
86
|
+
* columnHelper.accessor('name', {
|
|
87
|
+
* cell: cell => renderSnippet(nameSnippet, { name: cell.row.name }),
|
|
88
|
+
* }),
|
|
89
|
+
* columnHelper.accessor('state', {
|
|
90
|
+
* cell: cell => renderSnippet(stateSnippet, { state: cell.row.state }),
|
|
91
|
+
* }),
|
|
92
|
+
* ]
|
|
93
|
+
* ```;
|
|
94
|
+
*
|
|
95
|
+
* @param snippet
|
|
96
|
+
* @param params
|
|
97
|
+
* @returns - A `RenderSnippetConfig` object that helps svelte-table know how to
|
|
98
|
+
* render the header/cell snippet.
|
|
99
|
+
* @see {@link https://tanstack.com/table/latest/docs/guide/column-defs}
|
|
100
|
+
*/
|
|
101
|
+
export declare function renderSnippet<TProps>(snippet: Snippet<[TProps]>, params?: TProps): RenderSnippetConfig<TProps>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A helper class to make it easy to identify Svelte components in
|
|
3
|
+
* `columnDef.cell` and `columnDef.header` properties.
|
|
4
|
+
*
|
|
5
|
+
* > NOTE: This class should only be used internally by the adapter. If you're
|
|
6
|
+
* > reading this and you don't know what this is for, you probably don't need
|
|
7
|
+
* > it.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```svelte
|
|
11
|
+
* {@const result = content(context as any)}
|
|
12
|
+
* {#if result instanceof RenderComponentConfig}
|
|
13
|
+
* {@const { component: Component, props } = result}
|
|
14
|
+
* <Component {...props} />
|
|
15
|
+
* {/if}
|
|
16
|
+
* ```;
|
|
17
|
+
*/
|
|
18
|
+
export class RenderComponentConfig {
|
|
19
|
+
component;
|
|
20
|
+
props;
|
|
21
|
+
constructor(component, props = {}) {
|
|
22
|
+
this.component = component;
|
|
23
|
+
this.props = props;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A helper class to make it easy to identify Svelte Snippets in
|
|
28
|
+
* `columnDef.cell` and `columnDef.header` properties.
|
|
29
|
+
*
|
|
30
|
+
* > NOTE: This class should only be used internally by the adapter. If you're
|
|
31
|
+
* > reading this and you don't know what this is for, you probably don't need
|
|
32
|
+
* > it.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```svelte
|
|
36
|
+
* {@const result = content(context as any)}
|
|
37
|
+
* {#if result instanceof RenderSnippetConfig}
|
|
38
|
+
* {@const { snippet, params } = result}
|
|
39
|
+
* {@render snippet(params)}
|
|
40
|
+
* {/if}
|
|
41
|
+
* ```;
|
|
42
|
+
*/
|
|
43
|
+
export class RenderSnippetConfig {
|
|
44
|
+
snippet;
|
|
45
|
+
params;
|
|
46
|
+
constructor(snippet, params) {
|
|
47
|
+
this.snippet = snippet;
|
|
48
|
+
this.params = params;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A helper function to help create cells from Svelte components through
|
|
53
|
+
* ColumnDef's `cell` and `header` properties.
|
|
54
|
+
*
|
|
55
|
+
* This is only to be used with Svelte Components - use `renderSnippet` for
|
|
56
|
+
* Svelte Snippets.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* // +page.svelte
|
|
61
|
+
* const defaultColumns = [
|
|
62
|
+
* columnHelper.accessor('name', {
|
|
63
|
+
* header: header => renderComponent(SortHeader, { label: 'Name', header }),
|
|
64
|
+
* }),
|
|
65
|
+
* columnHelper.accessor('state', {
|
|
66
|
+
* header: header => renderComponent(SortHeader, { label: 'State', header }),
|
|
67
|
+
* }),
|
|
68
|
+
* ]
|
|
69
|
+
* ```;
|
|
70
|
+
*
|
|
71
|
+
* @param component A Svelte component
|
|
72
|
+
* @param props The props to pass to `component`
|
|
73
|
+
* @returns A `RenderComponentConfig` object that helps svelte-table know how to
|
|
74
|
+
* render the header/cell component.
|
|
75
|
+
* @see {@link https://tanstack.com/table/latest/docs/guide/column-defs}
|
|
76
|
+
*/
|
|
77
|
+
export function renderComponent(component, props = {}) {
|
|
78
|
+
return new RenderComponentConfig(component, props);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A helper function to help create cells from Svelte Snippets through
|
|
82
|
+
* ColumnDef's `cell` and `header` properties.
|
|
83
|
+
*
|
|
84
|
+
* The snippet must only take one parameter.
|
|
85
|
+
*
|
|
86
|
+
* This is only to be used with Snippets - use `renderComponent` for Svelte
|
|
87
|
+
* Components.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* // +page.svelte
|
|
92
|
+
* const defaultColumns = [
|
|
93
|
+
* columnHelper.accessor('name', {
|
|
94
|
+
* cell: cell => renderSnippet(nameSnippet, { name: cell.row.name }),
|
|
95
|
+
* }),
|
|
96
|
+
* columnHelper.accessor('state', {
|
|
97
|
+
* cell: cell => renderSnippet(stateSnippet, { state: cell.row.state }),
|
|
98
|
+
* }),
|
|
99
|
+
* ]
|
|
100
|
+
* ```;
|
|
101
|
+
*
|
|
102
|
+
* @param snippet
|
|
103
|
+
* @param params
|
|
104
|
+
* @returns - A `RenderSnippetConfig` object that helps svelte-table know how to
|
|
105
|
+
* render the header/cell snippet.
|
|
106
|
+
* @see {@link https://tanstack.com/table/latest/docs/guide/column-defs}
|
|
107
|
+
*/
|
|
108
|
+
export function renderSnippet(snippet, params = {}) {
|
|
109
|
+
return new RenderSnippetConfig(snippet, params);
|
|
110
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Context, EvalNode, Structure, Table, type DType, type MutableTableProperties, EvalColumn } from "peaql";
|
|
2
|
+
import type { VaultRecord } from ".";
|
|
3
|
+
import { TFile, type App } from "@lapis-notes/api";
|
|
4
|
+
import { SQLDialect } from "@codemirror/lang-sql";
|
|
5
|
+
import type { QueryController } from "./bases.svelte";
|
|
6
|
+
export declare class TFileExt extends TFile {
|
|
7
|
+
readonly tags: string[];
|
|
8
|
+
readonly links: string[];
|
|
9
|
+
readonly embeds: string[];
|
|
10
|
+
readonly backlinks: string[];
|
|
11
|
+
properties: Record<string, unknown>;
|
|
12
|
+
checksum: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class VaultFile extends Structure {
|
|
15
|
+
static columns: Map<string, EvalColumn>;
|
|
16
|
+
}
|
|
17
|
+
export declare class BasesTable extends Table {
|
|
18
|
+
context: Context;
|
|
19
|
+
private app;
|
|
20
|
+
withApp(app: App): this;
|
|
21
|
+
constructor(...args: ConstructorParameters<typeof Table>);
|
|
22
|
+
copy(props?: Partial<MutableTableProperties>): BasesTable;
|
|
23
|
+
withPropertyColumns(columns: Record<string, DType>): this;
|
|
24
|
+
getColumn(name: string, fullScan?: boolean): EvalNode;
|
|
25
|
+
file(entry: VaultRecord): TFileExt;
|
|
26
|
+
rowId(entry: VaultRecord): VaultRecord;
|
|
27
|
+
setContext(context: Context): void;
|
|
28
|
+
}
|
|
29
|
+
export declare const SQLTypes = "array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying ";
|
|
30
|
+
export declare const SQLKeywords = "file note absolute action add after all allocate alter and any are as asc assertion at authorization before begin between both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone ";
|
|
31
|
+
export declare function basesDialect(table: QueryController): SQLDialect;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { AttributeGetter, Context, EvalNode, getValueByDotNotation, Structure, Table, typedTupleToColumns, TimeStamp, parseDateTime, EvalColumn, } from "peaql";
|
|
2
|
+
import { TFile } from "@lapis-notes/api";
|
|
3
|
+
import { DateTime } from "luxon";
|
|
4
|
+
import { SQLDialect } from "@codemirror/lang-sql";
|
|
5
|
+
import { deriveFileMetadata } from "./file-fields-core";
|
|
6
|
+
function defineStructureName(structure, name) {
|
|
7
|
+
Object.defineProperty(structure, "name", {
|
|
8
|
+
configurable: true,
|
|
9
|
+
value: name,
|
|
10
|
+
});
|
|
11
|
+
return structure;
|
|
12
|
+
}
|
|
13
|
+
export class TFileExt extends TFile {
|
|
14
|
+
tags = [];
|
|
15
|
+
links = [];
|
|
16
|
+
embeds = [];
|
|
17
|
+
backlinks = [];
|
|
18
|
+
properties = {};
|
|
19
|
+
checksum = "";
|
|
20
|
+
}
|
|
21
|
+
export class VaultFile extends Structure {
|
|
22
|
+
static columns = typedTupleToColumns({
|
|
23
|
+
name: String,
|
|
24
|
+
baseName: String,
|
|
25
|
+
path: String,
|
|
26
|
+
checksum: String,
|
|
27
|
+
}, [
|
|
28
|
+
new AttributeGetter("ext", String, (context) => {
|
|
29
|
+
return context.extension;
|
|
30
|
+
}),
|
|
31
|
+
new AttributeGetter("ctime", DateTime, (context) => {
|
|
32
|
+
return DateTime.fromMillis(context.stat.ctime);
|
|
33
|
+
}),
|
|
34
|
+
new AttributeGetter("mtime", DateTime, (context) => {
|
|
35
|
+
return DateTime.fromMillis(context.stat.mtime);
|
|
36
|
+
}),
|
|
37
|
+
new AttributeGetter("size", Number, (context) => {
|
|
38
|
+
return context.stat.size;
|
|
39
|
+
}),
|
|
40
|
+
new AttributeGetter("folder", String, (context) => {
|
|
41
|
+
return context.parent?.path || "/";
|
|
42
|
+
}),
|
|
43
|
+
new AttributeGetter("fullname", String, (context) => {
|
|
44
|
+
return context.name;
|
|
45
|
+
}),
|
|
46
|
+
new AttributeGetter("basename", String, (context) => {
|
|
47
|
+
return context.baseName;
|
|
48
|
+
}),
|
|
49
|
+
new AttributeGetter("name", String, (context) => {
|
|
50
|
+
return context.name;
|
|
51
|
+
}),
|
|
52
|
+
new AttributeGetter("file", TFile, (context) => {
|
|
53
|
+
return context;
|
|
54
|
+
}),
|
|
55
|
+
new AttributeGetter("tags", String, (context) => {
|
|
56
|
+
return context.tags;
|
|
57
|
+
}),
|
|
58
|
+
new AttributeGetter("links", String, (context) => {
|
|
59
|
+
return context.links;
|
|
60
|
+
}),
|
|
61
|
+
new AttributeGetter("embeds", String, (context) => {
|
|
62
|
+
return context.embeds;
|
|
63
|
+
}),
|
|
64
|
+
new AttributeGetter("backlinks", String, (context) => {
|
|
65
|
+
return context.backlinks;
|
|
66
|
+
}),
|
|
67
|
+
new AttributeGetter("properties", Object, (context) => {
|
|
68
|
+
return context.properties;
|
|
69
|
+
}),
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
defineStructureName(VaultFile, "TFile");
|
|
73
|
+
export class BasesTable extends Table {
|
|
74
|
+
context;
|
|
75
|
+
app = null;
|
|
76
|
+
withApp(app) {
|
|
77
|
+
this.app = app;
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
constructor(...args) {
|
|
81
|
+
super(...args);
|
|
82
|
+
this.columns.set("file", new AttributeGetter("file", VaultFile, (entry) => this.file(entry)));
|
|
83
|
+
this.columns.set("rowId", new AttributeGetter("rowId", VaultFile, (entry) => this.rowId(entry)));
|
|
84
|
+
}
|
|
85
|
+
copy(props = {}) {
|
|
86
|
+
const table = new BasesTable(props.name ?? this.name, props.columns ?? this.columns, props.constraints ?? this.constraints, props.wildcardColumns ?? this.wildcardColumns, props.props ? { ...this.props, ...props.props } : this.props);
|
|
87
|
+
table.app = this.app;
|
|
88
|
+
const entries = props.joins ? props.joins.entries() : this.joins.entries();
|
|
89
|
+
for (const [k, v] of entries) {
|
|
90
|
+
table.joins.set(k, v.copy());
|
|
91
|
+
}
|
|
92
|
+
table.setContext(props.context ?? this.context);
|
|
93
|
+
return table;
|
|
94
|
+
}
|
|
95
|
+
withPropertyColumns(columns) {
|
|
96
|
+
const map = new Map();
|
|
97
|
+
for (const [id, type] of Object.entries(columns)) {
|
|
98
|
+
const name = id.replace("note.", "");
|
|
99
|
+
const column = new AttributeGetter(name, type, (context) => {
|
|
100
|
+
let value = null;
|
|
101
|
+
if (context.cache?.frontmatter) {
|
|
102
|
+
value = context.cache.frontmatter[name];
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
value = context[name];
|
|
106
|
+
}
|
|
107
|
+
if (type === TimeStamp && typeof value === "string") {
|
|
108
|
+
value = parseDateTime(value) ?? value;
|
|
109
|
+
}
|
|
110
|
+
return value;
|
|
111
|
+
});
|
|
112
|
+
if (this.columns.has(name))
|
|
113
|
+
continue;
|
|
114
|
+
map.set(name, column);
|
|
115
|
+
this.columns.set(name, column);
|
|
116
|
+
}
|
|
117
|
+
const PropStructure = defineStructureName(class extends Structure {
|
|
118
|
+
static type = "default";
|
|
119
|
+
static columns = map;
|
|
120
|
+
}, "note");
|
|
121
|
+
this.columns.set("note", new AttributeGetter("note", PropStructure, (context) => {
|
|
122
|
+
return context.cache?.frontmatter || {};
|
|
123
|
+
}));
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
getColumn(name, fullScan = true) {
|
|
127
|
+
const col = super.getColumn(name, fullScan);
|
|
128
|
+
if (!col) {
|
|
129
|
+
return new AttributeGetter(name, Object, (context) => {
|
|
130
|
+
const props = context.cache?.frontmatter || {};
|
|
131
|
+
return (getValueByDotNotation(props, name) ??
|
|
132
|
+
getValueByDotNotation(context, name));
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return col;
|
|
136
|
+
}
|
|
137
|
+
file(entry) {
|
|
138
|
+
const file = new TFileExt(entry.file.path, entry.file.stat, entry.file.parent);
|
|
139
|
+
const metadata = deriveFileMetadata(entry.file.path, entry.cache, entry.backlinks ?? []);
|
|
140
|
+
file.tags.push(...metadata.tags);
|
|
141
|
+
file.links.push(...metadata.links);
|
|
142
|
+
file.embeds.push(...metadata.embeds);
|
|
143
|
+
file.backlinks.push(...metadata.backlinks);
|
|
144
|
+
file.properties = metadata.properties;
|
|
145
|
+
file.checksum = entry.checksum ?? entry.id;
|
|
146
|
+
return file;
|
|
147
|
+
}
|
|
148
|
+
rowId(entry) {
|
|
149
|
+
return entry;
|
|
150
|
+
}
|
|
151
|
+
setContext(context) {
|
|
152
|
+
this.context = context;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export const SQLTypes = "array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying ";
|
|
156
|
+
export const SQLKeywords = "file note absolute action add after all allocate alter and any are as asc assertion at authorization before begin between both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone ";
|
|
157
|
+
export function basesDialect(table) {
|
|
158
|
+
const columns = [
|
|
159
|
+
...table.getAllColumns().map((it) => it.id),
|
|
160
|
+
...table.getAllColumns().filter((it) => it.id.startsWith("note.")),
|
|
161
|
+
];
|
|
162
|
+
return SQLDialect.define({
|
|
163
|
+
charSetCasts: true,
|
|
164
|
+
doubleDollarQuotedStrings: true,
|
|
165
|
+
operatorChars: "+-*/<>=~!@#%^&|`?",
|
|
166
|
+
specialVar: "",
|
|
167
|
+
keywords: SQLKeywords +
|
|
168
|
+
" note file " +
|
|
169
|
+
columns.join(" ") +
|
|
170
|
+
" abort abs absent access according ada admin aggregate alias also always analyse analyze array_agg array_max_cardinality asensitive assert assignment asymmetric atomic attach attribute attributes avg backward base64 begin_frame begin_partition bernoulli bit_length blocked bom cache called cardinality catalog_name ceil ceiling chain char_length character_length character_set_catalog character_set_name character_set_schema characteristics characters checkpoint class class_origin cluster coalesce cobol collation_catalog collation_name collation_schema collect column_name columns command_function command_function_code comment comments committed concurrently condition_number configuration conflict connection_name constant constraint_catalog constraint_name constraint_schema contains content control conversion convert copy corr cost covar_pop covar_samp csv cume_dist current_catalog current_row current_schema cursor_name database datalink datatype datetime_interval_code datetime_interval_precision db debug defaults defined definer degree delimiter delimiters dense_rank depends derived detach detail dictionary disable discard dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue document dump dynamic_function dynamic_function_code element elsif empty enable encoding encrypted end_frame end_partition endexec enforced enum errcode error event every exclude excluding exclusive exp explain expression extension extract family file filter final first_value flag floor following force foreach fortran forward frame_row freeze fs functions fusion generated granted greatest groups handler header hex hierarchy hint id ignore ilike immediately immutable implementation implicit import include including increment indent index indexes info inherit inherits inline insensitive instance instantiable instead integrity intersection invoker isnull key_member key_type label lag last_value lead leakproof least length library like_regex link listen ln load location lock locked log logged lower mapping matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text min minvalue mod mode more move multiset mumps name namespace nfc nfd nfkc nfkd nil normalize normalized nothing notice notify notnull nowait nth_value ntile nullable nullif nulls number occurrences_regex octet_length octets off offset oids operator options ordering others over overlay overriding owned owner parallel parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partition pascal passing passthrough password percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding prepared print_strict_params procedural procedures program publication query quote raise range rank reassign recheck recovery refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex rename repeatable replace replica requiring reset respect restart restore result_oid returned_cardinality returned_length returned_octet_length returned_sqlstate returning reverse routine_catalog routine_name routine_schema routines row_count row_number rowtype rule scale schema_name schemas scope scope_catalog scope_name scope_schema security selective self sensitive sequence sequences serializable server server_name setof share show simple skip slice snapshot source specific_name sqlcode sqlerror sqrt stable stacked standalone statement statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time table_name tables tablesample tablespace temp template ties token top_level_count transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex trigger_catalog trigger_name trigger_schema trim trim_array truncate trusted type types uescape unbounded uncommitted unencrypted unlink unlisten unlogged unnamed untyped upper uri use_column use_variable user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema vacuum valid validate validator value_of var_pop var_samp varbinary variable_conflict variadic verbose version versioning views volatile warning whitespace width_bucket window within wrapper xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate yes",
|
|
171
|
+
types: SQLTypes +
|
|
172
|
+
"bigint int8 bigserial serial8 varbit bool box bytea cidr circle precision float8 inet int4 json jsonb line lseg macaddr macaddr8 money numeric pg_lsn point polygon float4 int2 smallserial serial2 serial serial4 text timetz timestamptz tsquery tsvector txid_snapshot uuid xml",
|
|
173
|
+
});
|
|
174
|
+
}
|