@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,66 @@
|
|
|
1
|
+
import { DateTime, Duration } from "luxon";
|
|
2
|
+
export declare function isEmpty(obj: unknown): boolean;
|
|
3
|
+
export declare function isTruthy(value: unknown): boolean;
|
|
4
|
+
export declare function valueToString(value: unknown): string;
|
|
5
|
+
export declare function startsWith(source: string, value: string): boolean;
|
|
6
|
+
export declare function endsWith(source: string, value: string): boolean;
|
|
7
|
+
export declare function contains(source: string, value: string): boolean;
|
|
8
|
+
export declare function containsAnyOf(source: string, ...values: Array<string>): boolean;
|
|
9
|
+
export declare function containsAny(source: string, ...values: Array<string>): boolean;
|
|
10
|
+
export declare function containsAllOf(source: string, ...values: Array<string>): boolean;
|
|
11
|
+
export declare function containsAll(source: string, ...values: Array<string>): boolean;
|
|
12
|
+
export declare function length(obj: unknown): any;
|
|
13
|
+
export declare function title(str: string): string;
|
|
14
|
+
export declare function trim(value: string): string;
|
|
15
|
+
export declare function split(value: string, separator: string): string[];
|
|
16
|
+
export declare function replace(value: string, search: string, replacement: string): string;
|
|
17
|
+
export declare function repeat(value: string, count: number): string;
|
|
18
|
+
export declare function reverseString(value: string): string;
|
|
19
|
+
export declare function reverseList<T>(value: T[]): T[];
|
|
20
|
+
export declare function sliceString(value: string, start: number, end?: number): string;
|
|
21
|
+
export declare function sliceList<T>(value: T[], start: number, end?: number): T[];
|
|
22
|
+
export declare function ceil(value: number): number;
|
|
23
|
+
export declare function floor(value: number): number;
|
|
24
|
+
export declare function list<T>(...value: T[]): T[];
|
|
25
|
+
export declare function number(value: unknown): number | null;
|
|
26
|
+
type Resolvable = {
|
|
27
|
+
resolve(context: any): any;
|
|
28
|
+
};
|
|
29
|
+
export declare function max(...value: number[]): number;
|
|
30
|
+
export declare function min(...value: number[]): number;
|
|
31
|
+
export declare function random(): number;
|
|
32
|
+
export declare function flat<T>(value: T[]): (T extends readonly (infer InnerArr)[] ? InnerArr : T)[];
|
|
33
|
+
export declare function join(value: unknown[], separator?: string): string;
|
|
34
|
+
export declare function sortList<T>(value: T[]): T[];
|
|
35
|
+
export declare function unique<T>(value: T[]): T[];
|
|
36
|
+
export declare function escapeHTML(value: string): string;
|
|
37
|
+
export declare function date(value: string | number | Date | DateTime): DateTime<boolean>;
|
|
38
|
+
export declare function duration(value: string | number | Duration): Duration<boolean>;
|
|
39
|
+
export declare function html(value: string): string;
|
|
40
|
+
export declare function image(value: string): string;
|
|
41
|
+
export declare function link(value: string): string;
|
|
42
|
+
export declare function isType(value: unknown, type: string): boolean;
|
|
43
|
+
export declare function file(value: string | {
|
|
44
|
+
path: string;
|
|
45
|
+
}): string;
|
|
46
|
+
export declare function asFile(value: string | {
|
|
47
|
+
path: string;
|
|
48
|
+
}): string;
|
|
49
|
+
export declare function asLink(value: string | {
|
|
50
|
+
path: string;
|
|
51
|
+
}): string;
|
|
52
|
+
export declare function linksTo(value: string | {
|
|
53
|
+
path: string;
|
|
54
|
+
}, target: string | {
|
|
55
|
+
path: string;
|
|
56
|
+
}): boolean;
|
|
57
|
+
export declare function ifValue<TTruthy, TFalsy = null>(condition: unknown, truthy: TTruthy, falsy?: TFalsy): TTruthy | NonNullable<TFalsy> | null;
|
|
58
|
+
export declare function mapItems(obj: any, items: Resolvable, expr: Resolvable): any;
|
|
59
|
+
export declare function filterItems(obj: any, items: Resolvable, expr: Resolvable): any;
|
|
60
|
+
export declare function reduceItems(obj: any, items: Resolvable, initial: Resolvable, expr: Resolvable): any;
|
|
61
|
+
export declare function keys(value: Record<string, unknown>): string[];
|
|
62
|
+
export declare function values(value: Record<string, unknown>): unknown[];
|
|
63
|
+
export declare function matches(value: string, pattern: string | RegExp): boolean;
|
|
64
|
+
export declare function relative(date: DateTime | Date): string | null | undefined;
|
|
65
|
+
export declare function time(date: DateTime | Date): string | null | undefined;
|
|
66
|
+
export {};
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { startCase, toLower } from "lodash-es";
|
|
2
|
+
import { DateTime, Duration } from "luxon";
|
|
3
|
+
import { Decimal, isNull } from "peaql";
|
|
4
|
+
export function isEmpty(obj) {
|
|
5
|
+
if (obj === null || obj === undefined)
|
|
6
|
+
return true;
|
|
7
|
+
if (typeof obj === "string") {
|
|
8
|
+
return obj.length == 0;
|
|
9
|
+
}
|
|
10
|
+
else if (Array.isArray(obj)) {
|
|
11
|
+
return obj.length == 0;
|
|
12
|
+
}
|
|
13
|
+
else if (typeof obj === "number") {
|
|
14
|
+
return obj === 0;
|
|
15
|
+
}
|
|
16
|
+
else if (obj instanceof Decimal) {
|
|
17
|
+
return obj.number === 0;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
export function isTruthy(value) {
|
|
22
|
+
return Boolean(value);
|
|
23
|
+
}
|
|
24
|
+
export function valueToString(value) {
|
|
25
|
+
if (value === null || value === undefined)
|
|
26
|
+
return "";
|
|
27
|
+
return String(value);
|
|
28
|
+
}
|
|
29
|
+
export function startsWith(source, value) {
|
|
30
|
+
return source.startsWith(value);
|
|
31
|
+
}
|
|
32
|
+
export function endsWith(source, value) {
|
|
33
|
+
return source.endsWith(value);
|
|
34
|
+
}
|
|
35
|
+
export function contains(source, value) {
|
|
36
|
+
source = (source || "").toLowerCase();
|
|
37
|
+
return source.includes(value.toLowerCase());
|
|
38
|
+
}
|
|
39
|
+
export function containsAnyOf(source, ...values) {
|
|
40
|
+
source = (source || "").toLowerCase();
|
|
41
|
+
return values.some((v) => source.includes(v.toLowerCase()));
|
|
42
|
+
}
|
|
43
|
+
export function containsAny(source, ...values) {
|
|
44
|
+
return containsAnyOf(source, ...values);
|
|
45
|
+
}
|
|
46
|
+
export function containsAllOf(source, ...values) {
|
|
47
|
+
source = (source || "").toLowerCase();
|
|
48
|
+
return values.every((v) => source.includes(v.toLowerCase()));
|
|
49
|
+
}
|
|
50
|
+
export function containsAll(source, ...values) {
|
|
51
|
+
return containsAllOf(source, ...values);
|
|
52
|
+
}
|
|
53
|
+
export function length(obj) {
|
|
54
|
+
if (isNull(obj))
|
|
55
|
+
return 0;
|
|
56
|
+
if (Array.isArray(obj)) {
|
|
57
|
+
return obj.length;
|
|
58
|
+
}
|
|
59
|
+
else if (typeof obj === "string") {
|
|
60
|
+
return obj.length;
|
|
61
|
+
}
|
|
62
|
+
else if (typeof obj === "object") {
|
|
63
|
+
return Object.keys(obj).length;
|
|
64
|
+
}
|
|
65
|
+
return obj.toString().length;
|
|
66
|
+
}
|
|
67
|
+
export function title(str) {
|
|
68
|
+
return startCase(toLower(str));
|
|
69
|
+
}
|
|
70
|
+
export function trim(value) {
|
|
71
|
+
return value.trim();
|
|
72
|
+
}
|
|
73
|
+
export function split(value, separator) {
|
|
74
|
+
return value.split(separator);
|
|
75
|
+
}
|
|
76
|
+
export function replace(value, search, replacement) {
|
|
77
|
+
return value.replaceAll(search, replacement);
|
|
78
|
+
}
|
|
79
|
+
export function repeat(value, count) {
|
|
80
|
+
return value.repeat(count);
|
|
81
|
+
}
|
|
82
|
+
export function reverseString(value) {
|
|
83
|
+
return [...value].reverse().join("");
|
|
84
|
+
}
|
|
85
|
+
export function reverseList(value) {
|
|
86
|
+
return [...value].reverse();
|
|
87
|
+
}
|
|
88
|
+
export function sliceString(value, start, end) {
|
|
89
|
+
return value.slice(start, end);
|
|
90
|
+
}
|
|
91
|
+
export function sliceList(value, start, end) {
|
|
92
|
+
return value.slice(start, end);
|
|
93
|
+
}
|
|
94
|
+
export function ceil(value) {
|
|
95
|
+
return Math.ceil(value);
|
|
96
|
+
}
|
|
97
|
+
export function floor(value) {
|
|
98
|
+
return Math.floor(value);
|
|
99
|
+
}
|
|
100
|
+
export function list(...value) {
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
export function number(value) {
|
|
104
|
+
if (typeof value === "number")
|
|
105
|
+
return value;
|
|
106
|
+
const parsed = Number(value);
|
|
107
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
108
|
+
}
|
|
109
|
+
export function max(...value) {
|
|
110
|
+
return Math.max(...value);
|
|
111
|
+
}
|
|
112
|
+
export function min(...value) {
|
|
113
|
+
return Math.min(...value);
|
|
114
|
+
}
|
|
115
|
+
export function random() {
|
|
116
|
+
return Math.random();
|
|
117
|
+
}
|
|
118
|
+
export function flat(value) {
|
|
119
|
+
return value.flat();
|
|
120
|
+
}
|
|
121
|
+
export function join(value, separator = ",") {
|
|
122
|
+
return value.join(separator);
|
|
123
|
+
}
|
|
124
|
+
export function sortList(value) {
|
|
125
|
+
return [...value].sort((left, right) => {
|
|
126
|
+
if (typeof left === "number" && typeof right === "number") {
|
|
127
|
+
return left - right;
|
|
128
|
+
}
|
|
129
|
+
return String(left).localeCompare(String(right));
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
export function unique(value) {
|
|
133
|
+
return [...new Set(value)];
|
|
134
|
+
}
|
|
135
|
+
export function escapeHTML(value) {
|
|
136
|
+
return value
|
|
137
|
+
.replaceAll("&", "&")
|
|
138
|
+
.replaceAll("<", "<")
|
|
139
|
+
.replaceAll(">", ">")
|
|
140
|
+
.replaceAll('"', """)
|
|
141
|
+
.replaceAll("'", "'");
|
|
142
|
+
}
|
|
143
|
+
export function date(value) {
|
|
144
|
+
if (value instanceof DateTime)
|
|
145
|
+
return value;
|
|
146
|
+
if (value instanceof Date)
|
|
147
|
+
return DateTime.fromJSDate(value);
|
|
148
|
+
if (typeof value === "number")
|
|
149
|
+
return DateTime.fromMillis(value);
|
|
150
|
+
return DateTime.fromISO(value);
|
|
151
|
+
}
|
|
152
|
+
export function duration(value) {
|
|
153
|
+
if (value instanceof Duration)
|
|
154
|
+
return value;
|
|
155
|
+
if (typeof value === "number")
|
|
156
|
+
return Duration.fromMillis(value);
|
|
157
|
+
return Duration.fromISO(value);
|
|
158
|
+
}
|
|
159
|
+
export function html(value) {
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
export function image(value) {
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
165
|
+
export function link(value) {
|
|
166
|
+
return value;
|
|
167
|
+
}
|
|
168
|
+
export function isType(value, type) {
|
|
169
|
+
switch (type.toLowerCase()) {
|
|
170
|
+
case "null":
|
|
171
|
+
return value === null || value === undefined;
|
|
172
|
+
case "list":
|
|
173
|
+
return Array.isArray(value);
|
|
174
|
+
case "date":
|
|
175
|
+
return value instanceof DateTime || value instanceof Date;
|
|
176
|
+
case "duration":
|
|
177
|
+
return value instanceof Duration;
|
|
178
|
+
case "regexp":
|
|
179
|
+
return value instanceof RegExp;
|
|
180
|
+
case "number":
|
|
181
|
+
case "string":
|
|
182
|
+
case "boolean":
|
|
183
|
+
return typeof value === type.toLowerCase();
|
|
184
|
+
case "object":
|
|
185
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
186
|
+
default:
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function normalizeFileLike(value) {
|
|
191
|
+
const path = typeof value === "string" ? value : value.path;
|
|
192
|
+
return path.replaceAll(/^\[\[|\]\]$/g, "");
|
|
193
|
+
}
|
|
194
|
+
export function file(value) {
|
|
195
|
+
return normalizeFileLike(value);
|
|
196
|
+
}
|
|
197
|
+
export function asFile(value) {
|
|
198
|
+
return file(value);
|
|
199
|
+
}
|
|
200
|
+
export function asLink(value) {
|
|
201
|
+
return `[[${normalizeFileLike(value)}]]`;
|
|
202
|
+
}
|
|
203
|
+
export function linksTo(value, target) {
|
|
204
|
+
return normalizeFileLike(value) === normalizeFileLike(target);
|
|
205
|
+
}
|
|
206
|
+
export function ifValue(condition, truthy, falsy) {
|
|
207
|
+
return condition ? truthy : (falsy ?? null);
|
|
208
|
+
}
|
|
209
|
+
export function mapItems(obj, items, expr) {
|
|
210
|
+
let values = items.resolve(obj);
|
|
211
|
+
if (isNull(values))
|
|
212
|
+
return null;
|
|
213
|
+
if (!Array.isArray(values)) {
|
|
214
|
+
values = [values];
|
|
215
|
+
}
|
|
216
|
+
return values.map((value, index) => expr.resolve({ ...(obj || {}), value, index }));
|
|
217
|
+
}
|
|
218
|
+
export function filterItems(obj, items, expr) {
|
|
219
|
+
let values = items.resolve(obj);
|
|
220
|
+
if (isNull(values))
|
|
221
|
+
return null;
|
|
222
|
+
if (!Array.isArray(values)) {
|
|
223
|
+
values = [values];
|
|
224
|
+
}
|
|
225
|
+
return values.filter((value, index) => !!expr.resolve({ ...(obj || {}), value, index }));
|
|
226
|
+
}
|
|
227
|
+
export function reduceItems(obj, items, initial, expr) {
|
|
228
|
+
let values = items.resolve(obj);
|
|
229
|
+
if (isNull(values))
|
|
230
|
+
return null;
|
|
231
|
+
if (!Array.isArray(values)) {
|
|
232
|
+
values = [values];
|
|
233
|
+
}
|
|
234
|
+
let accumulator = initial.resolve(obj);
|
|
235
|
+
values.forEach((value, index) => {
|
|
236
|
+
accumulator = expr.resolve({ ...(obj || {}), accumulator, value, index });
|
|
237
|
+
});
|
|
238
|
+
return accumulator;
|
|
239
|
+
}
|
|
240
|
+
export function keys(value) {
|
|
241
|
+
return Object.keys(value || {});
|
|
242
|
+
}
|
|
243
|
+
export function values(value) {
|
|
244
|
+
return Object.values(value || {});
|
|
245
|
+
}
|
|
246
|
+
export function matches(value, pattern) {
|
|
247
|
+
const expression = pattern instanceof RegExp ? pattern : new RegExp(pattern);
|
|
248
|
+
return expression.test(value);
|
|
249
|
+
}
|
|
250
|
+
export function relative(date) {
|
|
251
|
+
if (date instanceof Date) {
|
|
252
|
+
return relative(DateTime.fromJSDate(date));
|
|
253
|
+
}
|
|
254
|
+
if (!(date instanceof DateTime))
|
|
255
|
+
return;
|
|
256
|
+
return date.toRelative();
|
|
257
|
+
}
|
|
258
|
+
export function time(date) {
|
|
259
|
+
if (date instanceof Date) {
|
|
260
|
+
return relative(DateTime.fromJSDate(date));
|
|
261
|
+
}
|
|
262
|
+
if (!(date instanceof DateTime))
|
|
263
|
+
return;
|
|
264
|
+
return date.toISOTime();
|
|
265
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { normalizePath, TFile } from "@lapis-notes/api";
|
|
2
|
+
import { createFunction, Decimal, VARARG } from "peaql";
|
|
3
|
+
import { VaultFile } from "./db";
|
|
4
|
+
import { DateTime, Duration } from "luxon";
|
|
5
|
+
import { ceil, contains, containsAll, containsAllOf, containsAny, containsAnyOf, date, duration, endsWith, escapeHTML, file, filterItems, flat, floor, html, image, ifValue, isEmpty, isTruthy, isType, join, keys, length, list, link, linksTo, max, matches, min, number, relative, random, repeat, replace, reduceItems, reverseList, reverseString, sliceList, sliceString, sortList, split, startsWith, time, title, trim, unique, values, valueToString, asFile, asLink, mapItems, } from "./functions-core";
|
|
6
|
+
createFunction("isEmpty", [Object], Boolean, isEmpty, true);
|
|
7
|
+
createFunction("isTruthy", [Object], Boolean, isTruthy, true);
|
|
8
|
+
createFunction("toString", [Object], String, valueToString, true);
|
|
9
|
+
createFunction("startsWith", [String, String], Boolean, startsWith, true);
|
|
10
|
+
createFunction("endsWith", [String, String], Boolean, endsWith, true);
|
|
11
|
+
createFunction("contains", [String, String], Boolean, contains, true);
|
|
12
|
+
createFunction("containsAnyOf", [String, VARARG, String], Boolean, containsAnyOf, true);
|
|
13
|
+
createFunction("containsAny", [String, VARARG, String], Boolean, containsAny, true);
|
|
14
|
+
createFunction("containsAllOf", [String, VARARG, String], Boolean, containsAllOf, true);
|
|
15
|
+
createFunction("containsAll", [String, VARARG, String], Boolean, containsAll, true);
|
|
16
|
+
createFunction("inFolder", [TFile, String], Boolean, inFolder, true);
|
|
17
|
+
createFunction("inFolder", [VaultFile, String], Boolean, inFolder, true);
|
|
18
|
+
function inFolder(file, path) {
|
|
19
|
+
path = normalizePath(path);
|
|
20
|
+
return file.path.startsWith(`${path}/`) || path == "/" || path == "";
|
|
21
|
+
}
|
|
22
|
+
createFunction("hasLink", [TFile, String], Boolean, hasLink, true);
|
|
23
|
+
createFunction("hasLink", [VaultFile, String], Boolean, hasLink, true);
|
|
24
|
+
function hasLink(file, path) {
|
|
25
|
+
const links = file.links ?? [];
|
|
26
|
+
return links.includes(path);
|
|
27
|
+
}
|
|
28
|
+
createFunction("hasTag", [VaultFile, VARARG, String], Boolean, hasTag, true);
|
|
29
|
+
function hasTag(file, ...tags) {
|
|
30
|
+
tags = tags.map((t) => (t.startsWith("#") ? t : `#${t}`));
|
|
31
|
+
const fileTags = file.tags ?? [];
|
|
32
|
+
return fileTags.some((tag) => tags.some((value) => value === tag || tag.startsWith(`${value}/`)));
|
|
33
|
+
}
|
|
34
|
+
createFunction("hasProperty", [TFile, String], Boolean, hasProperty, true);
|
|
35
|
+
createFunction("hasProperty", [VaultFile, String], Boolean, hasProperty, true);
|
|
36
|
+
function hasProperty(file, path) {
|
|
37
|
+
const properties = file.properties ?? {};
|
|
38
|
+
return path in properties;
|
|
39
|
+
}
|
|
40
|
+
createFunction("length", [Object], Number, length, true);
|
|
41
|
+
createFunction("map", [Object, Object], [Object], mapItems, true, {
|
|
42
|
+
index: Number,
|
|
43
|
+
value: Object,
|
|
44
|
+
});
|
|
45
|
+
export class Icon {
|
|
46
|
+
name;
|
|
47
|
+
constructor(name) {
|
|
48
|
+
this.name = name;
|
|
49
|
+
}
|
|
50
|
+
toString() {
|
|
51
|
+
return this.name;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
createFunction("icon", [String], Icon, icon, true);
|
|
55
|
+
function icon(name) {
|
|
56
|
+
return new Icon(name);
|
|
57
|
+
}
|
|
58
|
+
createFunction("title", [String], String, title, true);
|
|
59
|
+
createFunction("trim", [String], String, trim, true);
|
|
60
|
+
createFunction("split", [String, String], [String], split, true);
|
|
61
|
+
createFunction("replace", [String, String, String], String, replace, true);
|
|
62
|
+
createFunction("repeat", [String, Number], String, repeat, true);
|
|
63
|
+
createFunction("escapeHTML", [String], String, escapeHTML, true);
|
|
64
|
+
createFunction("date", [String], DateTime, date, true);
|
|
65
|
+
createFunction("date", [Number], DateTime, date, true);
|
|
66
|
+
createFunction("date", [Date], DateTime, date, true);
|
|
67
|
+
createFunction("date", [DateTime], DateTime, date, true);
|
|
68
|
+
createFunction("duration", [String], Duration, duration, true);
|
|
69
|
+
createFunction("duration", [Number], Duration, duration, true);
|
|
70
|
+
createFunction("duration", [Duration], Duration, duration, true);
|
|
71
|
+
createFunction("file", [String], String, file, true);
|
|
72
|
+
createFunction("html", [String], String, html, true);
|
|
73
|
+
createFunction("image", [String], String, image, true);
|
|
74
|
+
createFunction("link", [String], String, link, true);
|
|
75
|
+
createFunction("if", [Object, Object, Object], Object, ifValue, true);
|
|
76
|
+
createFunction("list", [VARARG, Object], [Object], list, true);
|
|
77
|
+
createFunction("number", [Object], Number, number, true);
|
|
78
|
+
createFunction("max", [VARARG, Number], Number, max, true);
|
|
79
|
+
createFunction("min", [VARARG, Number], Number, min, true);
|
|
80
|
+
createFunction("random", [], Number, random, true);
|
|
81
|
+
createFunction("flat", [Array], Array, flat, true);
|
|
82
|
+
createFunction("filter", [Object, Object], [Object], filterItems, true);
|
|
83
|
+
createFunction("join", [Array], String, join, true);
|
|
84
|
+
createFunction("join", [Array, String], String, join, true);
|
|
85
|
+
createFunction("reverse", [String], String, reverseString, true);
|
|
86
|
+
createFunction("reverse", [Array], Array, reverseList, true);
|
|
87
|
+
createFunction("reduce", [Object, Object, Object], Object, reduceItems, true);
|
|
88
|
+
createFunction("slice", [String, Number], String, sliceString, true);
|
|
89
|
+
createFunction("slice", [String, Number, Number], String, sliceString, true);
|
|
90
|
+
createFunction("slice", [Array, Number], Array, sliceList, true);
|
|
91
|
+
createFunction("slice", [Array, Number, Number], Array, sliceList, true);
|
|
92
|
+
createFunction("sort", [Array], Array, sortList, true);
|
|
93
|
+
createFunction("unique", [Array], Array, unique, true);
|
|
94
|
+
createFunction("ceil", [Number], Number, ceil, true);
|
|
95
|
+
createFunction("floor", [Number], Number, floor, true);
|
|
96
|
+
createFunction("isType", [Object, String], Boolean, isType, true);
|
|
97
|
+
createFunction("asFile", [String], String, asFile, true);
|
|
98
|
+
createFunction("asLink", [String], String, asLink, true);
|
|
99
|
+
createFunction("linksTo", [String, String], Boolean, linksTo, true);
|
|
100
|
+
createFunction("keys", [Object], [String], keys, true);
|
|
101
|
+
createFunction("values", [Object], [Object], values, true);
|
|
102
|
+
createFunction("matches", [String, String], Boolean, matches, true);
|
|
103
|
+
createFunction("matches", [String, RegExp], Boolean, matches, true);
|
|
104
|
+
createFunction("relative", [DateTime], String, relative, true);
|
|
105
|
+
createFunction("relative", [Date], String, relative, true);
|
|
106
|
+
createFunction("time", [DateTime], String, time, true);
|
|
107
|
+
createFunction("time", [Date], String, time, true);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { prepareFuzzySearch } from "@lapis-notes/api";
|
|
2
|
+
export function fuzzySearch(items, query, options) {
|
|
3
|
+
const normalized = query.trim();
|
|
4
|
+
if (!normalized) {
|
|
5
|
+
return items.map((item) => ({ item, score: 1 }));
|
|
6
|
+
}
|
|
7
|
+
const search = prepareFuzzySearch(normalized);
|
|
8
|
+
return items
|
|
9
|
+
.map((item) => {
|
|
10
|
+
const result = search(options.keys.map((key) => String(item[key] ?? "")).join(" "));
|
|
11
|
+
return result ? { item, score: result.score } : null;
|
|
12
|
+
})
|
|
13
|
+
.filter((result) => result !== null)
|
|
14
|
+
.sort((left, right) => right.score - left.score);
|
|
15
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function useResizeObserver() {
|
|
2
|
+
let size = $state({ width: 0, height: 0 });
|
|
3
|
+
let ref = $state(null);
|
|
4
|
+
$effect(() => {
|
|
5
|
+
if (!ref)
|
|
6
|
+
return;
|
|
7
|
+
const observer = new ResizeObserver(([entry]) => {
|
|
8
|
+
size = {
|
|
9
|
+
width: entry.contentRect.width,
|
|
10
|
+
height: entry.contentRect.height,
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
observer.observe(ref);
|
|
14
|
+
return () => {
|
|
15
|
+
observer.disconnect();
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
set ref(el) {
|
|
20
|
+
ref = el;
|
|
21
|
+
},
|
|
22
|
+
get size() {
|
|
23
|
+
return size;
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type App, MarkdownView, TFile, WorkspaceLeaf, type CachedMetadata, type MetadataType, type ViewStateResult } from "@lapis-notes/api";
|
|
2
|
+
import type { Column, RowData } from "@tanstack/table-core";
|
|
3
|
+
import { type BasesDocument } from "./models";
|
|
4
|
+
import type { BasesViewRegistration } from "./bases.svelte";
|
|
5
|
+
export * from "./models";
|
|
6
|
+
export declare const BasesViewType = "bases";
|
|
7
|
+
export declare const vaultKey: unique symbol;
|
|
8
|
+
export type VaultRecord = {
|
|
9
|
+
id: string;
|
|
10
|
+
checksum?: string;
|
|
11
|
+
file: TFile;
|
|
12
|
+
cache: CachedMetadata | null;
|
|
13
|
+
backlinks?: string[];
|
|
14
|
+
};
|
|
15
|
+
declare module "@lapis-notes/api" {
|
|
16
|
+
interface IMetadataType {
|
|
17
|
+
file: "file";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
declare module "@tanstack/table-core" {
|
|
21
|
+
interface ColumnMeta<TData extends RowData, TValue> {
|
|
22
|
+
displayName: string;
|
|
23
|
+
icon: string;
|
|
24
|
+
type: MetadataType;
|
|
25
|
+
frontmatter?: boolean;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export declare function normalizeName(name: string): string;
|
|
29
|
+
export declare function columnName(column: Column<any> | undefined): string;
|
|
30
|
+
export type BasesViewModeType = "source" | "preview";
|
|
31
|
+
export declare function serializeBasesDocument(content: BasesDocument): string;
|
|
32
|
+
/** @deprecated Use serializeBasesDocument. */
|
|
33
|
+
export declare const dumpDocument: typeof serializeBasesDocument;
|
|
34
|
+
export declare function registerBuiltInBasesViews(views: Map<string, BasesViewRegistration>): void;
|
|
35
|
+
export declare function createBasesViewRegistrations(app: App, registrations?: ReadonlyMap<string, BasesViewRegistration>): Map<string, BasesViewRegistration>;
|
|
36
|
+
export declare function parseBasesDocument(content: string): BasesDocument;
|
|
37
|
+
export declare class BasesView extends MarkdownView {
|
|
38
|
+
readonly views: Map<string, BasesViewRegistration>;
|
|
39
|
+
private readonly writeQueue;
|
|
40
|
+
constructor(leaf?: WorkspaceLeaf);
|
|
41
|
+
/**
|
|
42
|
+
* Register a Base view handler that can be used to render data from property
|
|
43
|
+
* queries.
|
|
44
|
+
*
|
|
45
|
+
* @since 1.10.0
|
|
46
|
+
* @returns False if bases are not enabled in this vault.
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
registerBasesView(viewId: string, registration: BasesViewRegistration): boolean;
|
|
50
|
+
getMode(): BasesViewModeType;
|
|
51
|
+
setState(state: Record<string, unknown>, result?: ViewStateResult): Promise<void>;
|
|
52
|
+
getViewData(): string;
|
|
53
|
+
setViewData(data: string, clear?: boolean): void;
|
|
54
|
+
clear(): void;
|
|
55
|
+
canAcceptExtension(extension: string): boolean;
|
|
56
|
+
private component;
|
|
57
|
+
private previewLoadVersion;
|
|
58
|
+
protected onOpen(): Promise<void>;
|
|
59
|
+
protected onClose(): Promise<void>;
|
|
60
|
+
load(): Promise<void> | void;
|
|
61
|
+
refresh(): void;
|
|
62
|
+
onunload(): void;
|
|
63
|
+
getViewType(): string;
|
|
64
|
+
getIcon(): string;
|
|
65
|
+
getDisplayText(): string;
|
|
66
|
+
}
|