@svadmin/ui 0.64.0 → 0.65.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/dist/components/ActivityFeed.svelte +135 -0
- package/dist/components/ActivityFeed.svelte.d.ts +21 -0
- package/dist/components/ApprovalActionCard.svelte +248 -0
- package/dist/components/ApprovalActionCard.svelte.d.ts +22 -0
- package/dist/components/CanvasAnnotation.svelte +389 -0
- package/dist/components/CanvasAnnotation.svelte.d.ts +17 -0
- package/dist/components/ColumnHeaderFilter.svelte +178 -0
- package/dist/components/ColumnHeaderFilter.svelte.d.ts +12 -0
- package/dist/components/ColumnSettings.svelte +198 -0
- package/dist/components/ColumnSettings.svelte.d.ts +19 -0
- package/dist/components/DecisionTable.svelte +240 -0
- package/dist/components/DecisionTable.svelte.d.ts +22 -0
- package/dist/components/DraggableRowTable.svelte +117 -0
- package/dist/components/DraggableRowTable.svelte.d.ts +15 -0
- package/dist/components/DrawerForm.svelte +110 -26
- package/dist/components/DrawerForm.svelte.d.ts +20 -8
- package/dist/components/EditableTable.svelte +195 -0
- package/dist/components/EditableTable.svelte.d.ts +25 -0
- package/dist/components/GanttChart.svelte +144 -0
- package/dist/components/GanttChart.svelte.d.ts +20 -0
- package/dist/components/ImageCropper.svelte +122 -0
- package/dist/components/ImageCropper.svelte.d.ts +12 -0
- package/dist/components/ImportWizard.svelte +336 -0
- package/dist/components/ImportWizard.svelte.d.ts +12 -0
- package/dist/components/JsonSchemaForm.svelte +149 -0
- package/dist/components/JsonSchemaForm.svelte.d.ts +10 -0
- package/dist/components/KanbanBoard.svelte +212 -0
- package/dist/components/KanbanBoard.svelte.d.ts +30 -0
- package/dist/components/MasterDetailView.svelte +134 -0
- package/dist/components/MasterDetailView.svelte.d.ts +16 -0
- package/dist/components/MediaLibraryModal.svelte +195 -0
- package/dist/components/MediaLibraryModal.svelte.d.ts +22 -0
- package/dist/components/MentionsInput.svelte +174 -0
- package/dist/components/MentionsInput.svelte.d.ts +21 -0
- package/dist/components/ModalForm.svelte +113 -28
- package/dist/components/ModalForm.svelte.d.ts +20 -8
- package/dist/components/MultiTabKeepAlive.svelte +143 -0
- package/dist/components/MultiTabKeepAlive.svelte.d.ts +21 -0
- package/dist/components/OfflineSyncBanner.svelte +172 -0
- package/dist/components/OfflineSyncBanner.svelte.d.ts +19 -0
- package/dist/components/PdfDocumentViewer.svelte +255 -0
- package/dist/components/PdfDocumentViewer.svelte.d.ts +22 -0
- package/dist/components/PivotTable.svelte +140 -0
- package/dist/components/PivotTable.svelte.d.ts +16 -0
- package/dist/components/PresenceAvatarGroup.svelte +89 -0
- package/dist/components/PresenceAvatarGroup.svelte.d.ts +15 -0
- package/dist/components/PrintableBill.svelte +149 -0
- package/dist/components/PrintableBill.svelte.d.ts +24 -0
- package/dist/components/SensitiveDataMask.svelte +125 -0
- package/dist/components/SensitiveDataMask.svelte.d.ts +13 -0
- package/dist/components/SignaturePad.svelte +264 -0
- package/dist/components/SignaturePad.svelte.d.ts +17 -0
- package/dist/components/SplitPaneLayout.svelte +113 -0
- package/dist/components/SplitPaneLayout.svelte.d.ts +13 -0
- package/dist/components/SpreadsheetView.svelte +363 -0
- package/dist/components/SpreadsheetView.svelte.d.ts +18 -0
- package/dist/components/StepForm.svelte +180 -0
- package/dist/components/StepForm.svelte.d.ts +23 -0
- package/dist/components/TableSummary.svelte +110 -0
- package/dist/components/TableSummary.svelte.d.ts +20 -0
- package/dist/components/TreeTable.svelte +237 -0
- package/dist/components/TreeTable.svelte.d.ts +28 -0
- package/dist/components/UnsavedChangesPrompt.svelte +44 -0
- package/dist/components/UnsavedChangesPrompt.svelte.d.ts +7 -0
- package/dist/components/VersionDiffViewer.svelte +196 -0
- package/dist/components/VersionDiffViewer.svelte.d.ts +12 -0
- package/dist/components/VirtualTable.svelte +86 -54
- package/dist/components/VirtualTable.svelte.d.ts +14 -21
- package/dist/components/Watermark.svelte +166 -0
- package/dist/components/Watermark.svelte.d.ts +26 -0
- package/dist/index.d.ts +58 -3
- package/dist/index.js +35 -3
- package/package.json +2 -2
|
@@ -1,74 +1,106 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* VirtualTable — A lightweight virtual scrolling wrapper for large datasets.
|
|
4
|
-
* Uses IntersectionObserver-based approach instead of a heavy dependency.
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* <VirtualTable items={rows} rowHeight={40} containerHeight={500}>
|
|
8
|
-
* {#snippet row(item, index)}
|
|
9
|
-
* <tr>...</tr>
|
|
10
|
-
* {/snippet}
|
|
11
|
-
* </VirtualTable>
|
|
12
|
-
*/
|
|
13
2
|
import type { Snippet } from 'svelte';
|
|
3
|
+
import { cn } from '../utils.js';
|
|
14
4
|
|
|
15
|
-
interface
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
5
|
+
export interface VirtualTableColumn {
|
|
6
|
+
key: string;
|
|
7
|
+
label: string;
|
|
8
|
+
width?: string;
|
|
9
|
+
align?: 'left' | 'center' | 'right';
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
items?: Record<string, unknown>[];
|
|
14
|
+
columns: VirtualTableColumn[];
|
|
15
|
+
itemHeight?: number;
|
|
16
|
+
height?: number;
|
|
22
17
|
overscan?: number;
|
|
23
|
-
|
|
24
|
-
row: Snippet<[T, number]>;
|
|
18
|
+
rowKey?: string;
|
|
25
19
|
class?: string;
|
|
20
|
+
rowSnippet?: Snippet<[Record<string, unknown>, number]>;
|
|
26
21
|
}
|
|
27
22
|
|
|
28
23
|
let {
|
|
29
|
-
items,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
items = [],
|
|
25
|
+
columns,
|
|
26
|
+
itemHeight = 44,
|
|
27
|
+
height = 360,
|
|
28
|
+
overscan = 4,
|
|
29
|
+
rowKey = 'id',
|
|
34
30
|
class: className = '',
|
|
35
|
-
|
|
31
|
+
rowSnippet,
|
|
32
|
+
}: Props = $props();
|
|
36
33
|
|
|
37
34
|
let scrollTop = $state(0);
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return { start, end };
|
|
44
|
-
});
|
|
36
|
+
function handleScroll(e: Event) {
|
|
37
|
+
const target = e.currentTarget as HTMLElement;
|
|
38
|
+
scrollTop = target.scrollTop;
|
|
39
|
+
}
|
|
45
40
|
|
|
46
|
-
const
|
|
47
|
-
|
|
41
|
+
const totalHeight = $derived(items.length * itemHeight);
|
|
42
|
+
const startIndex = $derived(Math.max(0, Math.floor(scrollTop / itemHeight) - overscan));
|
|
43
|
+
const endIndex = $derived(Math.min(items.length, Math.ceil((scrollTop + height) / itemHeight) + overscan));
|
|
44
|
+
const visibleSlice = $derived(
|
|
45
|
+
items.slice(startIndex, endIndex).map((item, idx) => ({
|
|
48
46
|
item,
|
|
49
|
-
index:
|
|
50
|
-
|
|
47
|
+
index: startIndex + idx,
|
|
48
|
+
top: (startIndex + idx) * itemHeight,
|
|
51
49
|
}))
|
|
52
50
|
);
|
|
53
|
-
|
|
54
|
-
function handleScroll(e: Event) {
|
|
55
|
-
const target = e.target as HTMLDivElement;
|
|
56
|
-
scrollTop = target.scrollTop;
|
|
57
|
-
}
|
|
58
51
|
</script>
|
|
59
52
|
|
|
60
|
-
<div
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
53
|
+
<div class={cn('w-full rounded-xl border border-border bg-card shadow-xs overflow-hidden flex flex-col text-xs', className)}>
|
|
54
|
+
<!-- Sticky Header -->
|
|
55
|
+
<div class="border-b border-border/80 bg-muted/40 font-semibold text-muted-foreground flex items-center h-10 px-4 select-none shrink-0">
|
|
56
|
+
{#each columns as col (col.key)}
|
|
57
|
+
<div
|
|
58
|
+
style={col.width ? `width: ${col.width}; flex-shrink: 0;` : 'flex: 1; min-width: 0;'}
|
|
59
|
+
class={cn('truncate px-2', col.align === 'right' ? 'text-right' : col.align === 'center' ? 'text-center' : 'text-left')}
|
|
60
|
+
>
|
|
61
|
+
{col.label}
|
|
62
|
+
</div>
|
|
63
|
+
{/each}
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<!-- Virtual Scroll Viewport -->
|
|
67
|
+
<div
|
|
68
|
+
class="overflow-y-auto relative w-full"
|
|
69
|
+
style="height: {height}px;"
|
|
70
|
+
onscroll={handleScroll}
|
|
71
|
+
>
|
|
72
|
+
<div style="height: {totalHeight}px; width: 100%; position: relative;">
|
|
73
|
+
{#each visibleSlice as { item, index, top } (item[rowKey] ?? index)}
|
|
74
|
+
<div
|
|
75
|
+
class="absolute left-0 right-0 flex items-center px-4 border-b border-border/40 hover:bg-muted/30 transition-colors"
|
|
76
|
+
style="top: {top}px; height: {itemHeight}px;"
|
|
77
|
+
>
|
|
78
|
+
{#if rowSnippet}
|
|
79
|
+
{@render rowSnippet(item, index)}
|
|
80
|
+
{:else}
|
|
81
|
+
{#each columns as col (col.key)}
|
|
82
|
+
<div
|
|
83
|
+
style={col.width ? `width: ${col.width}; flex-shrink: 0;` : 'flex: 1; min-width: 0;'}
|
|
84
|
+
class={cn('truncate px-2 font-medium text-foreground', col.align === 'right' ? 'text-right' : col.align === 'center' ? 'text-center' : 'text-left')}
|
|
85
|
+
>
|
|
86
|
+
{item[col.key] ?? '—'}
|
|
87
|
+
</div>
|
|
88
|
+
{/each}
|
|
89
|
+
{/if}
|
|
90
|
+
</div>
|
|
70
91
|
{/each}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
92
|
+
|
|
93
|
+
{#if items.length === 0}
|
|
94
|
+
<div class="h-32 flex items-center justify-center text-muted-foreground text-xs">
|
|
95
|
+
No records to display
|
|
96
|
+
</div>
|
|
97
|
+
{/if}
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<!-- Footer Info -->
|
|
102
|
+
<div class="flex items-center justify-between px-4 py-2 border-t border-border/60 bg-muted/20 text-[11px] text-muted-foreground shrink-0">
|
|
103
|
+
<span>Total <strong class="text-foreground font-semibold">{items.length}</strong> rows</span>
|
|
104
|
+
<span>Rendered {visibleSlice.length} in viewport</span>
|
|
105
|
+
</div>
|
|
74
106
|
</div>
|
|
@@ -1,27 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* VirtualTable — A lightweight virtual scrolling wrapper for large datasets.
|
|
3
|
-
* Uses IntersectionObserver-based approach instead of a heavy dependency.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* <VirtualTable items={rows} rowHeight={40} containerHeight={500}>
|
|
7
|
-
* {#snippet row(item, index)}
|
|
8
|
-
* <tr>...</tr>
|
|
9
|
-
* {/snippet}
|
|
10
|
-
* </VirtualTable>
|
|
11
|
-
*/
|
|
12
1
|
import type { Snippet } from 'svelte';
|
|
13
|
-
interface
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
2
|
+
export interface VirtualTableColumn {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
width?: string;
|
|
6
|
+
align?: 'left' | 'center' | 'right';
|
|
7
|
+
}
|
|
8
|
+
interface Props {
|
|
9
|
+
items?: Record<string, unknown>[];
|
|
10
|
+
columns: VirtualTableColumn[];
|
|
11
|
+
itemHeight?: number;
|
|
12
|
+
height?: number;
|
|
20
13
|
overscan?: number;
|
|
21
|
-
|
|
22
|
-
row: Snippet<[T, number]>;
|
|
14
|
+
rowKey?: string;
|
|
23
15
|
class?: string;
|
|
16
|
+
rowSnippet?: Snippet<[Record<string, unknown>, number]>;
|
|
24
17
|
}
|
|
25
|
-
declare const VirtualTable: import("svelte").Component<Props
|
|
18
|
+
declare const VirtualTable: import("svelte").Component<Props, {}, "">;
|
|
26
19
|
type VirtualTable = ReturnType<typeof VirtualTable>;
|
|
27
20
|
export default VirtualTable;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount, onDestroy, type Snippet } from 'svelte';
|
|
3
|
+
import { cn } from '../utils.js';
|
|
4
|
+
|
|
5
|
+
interface WatermarkFont {
|
|
6
|
+
color?: string;
|
|
7
|
+
fontSize?: number;
|
|
8
|
+
fontWeight?: 'normal' | 'light' | 'weight' | 'bold' | number;
|
|
9
|
+
fontFamily?: string;
|
|
10
|
+
fontStyle?: 'none' | 'normal' | 'italic' | 'oblique';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface Props {
|
|
14
|
+
content?: string | string[];
|
|
15
|
+
image?: string;
|
|
16
|
+
width?: number;
|
|
17
|
+
height?: number;
|
|
18
|
+
rotate?: number;
|
|
19
|
+
zIndex?: number;
|
|
20
|
+
gap?: [number, number];
|
|
21
|
+
offset?: [number, number];
|
|
22
|
+
opacity?: number;
|
|
23
|
+
font?: WatermarkFont;
|
|
24
|
+
antiTamper?: boolean;
|
|
25
|
+
class?: string;
|
|
26
|
+
children?: Snippet;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let {
|
|
30
|
+
content = 'CONFIDENTIAL',
|
|
31
|
+
image,
|
|
32
|
+
width = 120,
|
|
33
|
+
height = 64,
|
|
34
|
+
rotate = -22,
|
|
35
|
+
zIndex = 9,
|
|
36
|
+
gap = [100, 100],
|
|
37
|
+
offset = [gap[0] / 2, gap[1] / 2],
|
|
38
|
+
opacity = 0.12,
|
|
39
|
+
font = {},
|
|
40
|
+
antiTamper = true,
|
|
41
|
+
class: className = '',
|
|
42
|
+
children,
|
|
43
|
+
}: Props = $props();
|
|
44
|
+
|
|
45
|
+
let containerEl: HTMLDivElement | null = $state(null);
|
|
46
|
+
let base64Url = $state<string>('');
|
|
47
|
+
let watermarkRevision = $state(0);
|
|
48
|
+
let observer: MutationObserver | null = null;
|
|
49
|
+
let isCleaningUp = false;
|
|
50
|
+
|
|
51
|
+
function renderWatermark() {
|
|
52
|
+
if (typeof window === 'undefined') return;
|
|
53
|
+
|
|
54
|
+
const canvas = document.createElement('canvas');
|
|
55
|
+
const ctx = canvas.getContext('2d');
|
|
56
|
+
if (!ctx) return;
|
|
57
|
+
|
|
58
|
+
const ratio = window.devicePixelRatio || 1;
|
|
59
|
+
const [gapX, gapY] = gap;
|
|
60
|
+
const canvasWidth = (gapX + width) * ratio;
|
|
61
|
+
const canvasHeight = (gapY + height) * ratio;
|
|
62
|
+
|
|
63
|
+
canvas.width = canvasWidth;
|
|
64
|
+
canvas.height = canvasHeight;
|
|
65
|
+
canvas.style.width = `${gapX + width}px`;
|
|
66
|
+
canvas.style.height = `${gapY + height}px`;
|
|
67
|
+
|
|
68
|
+
ctx.scale(ratio, ratio);
|
|
69
|
+
ctx.translate(offset[0], offset[1]);
|
|
70
|
+
ctx.rotate((rotate * Math.PI) / 180);
|
|
71
|
+
|
|
72
|
+
if (image) {
|
|
73
|
+
const img = new Image();
|
|
74
|
+
img.crossOrigin = 'anonymous';
|
|
75
|
+
img.referrerPolicy = 'no-referrer';
|
|
76
|
+
img.onload = () => {
|
|
77
|
+
ctx.globalAlpha = opacity;
|
|
78
|
+
ctx.drawImage(img, -width / 2, -height / 2, width, height);
|
|
79
|
+
base64Url = canvas.toDataURL();
|
|
80
|
+
};
|
|
81
|
+
img.src = image;
|
|
82
|
+
} else {
|
|
83
|
+
const {
|
|
84
|
+
fontSize = 14,
|
|
85
|
+
fontFamily = 'sans-serif',
|
|
86
|
+
fontWeight = 'normal',
|
|
87
|
+
fontStyle = 'normal',
|
|
88
|
+
color = 'currentColor',
|
|
89
|
+
} = font;
|
|
90
|
+
|
|
91
|
+
ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`;
|
|
92
|
+
ctx.fillStyle = color === 'currentColor' ? 'rgba(128, 128, 128, 0.85)' : color;
|
|
93
|
+
ctx.globalAlpha = opacity;
|
|
94
|
+
ctx.textBaseline = 'middle';
|
|
95
|
+
ctx.textAlign = 'center';
|
|
96
|
+
|
|
97
|
+
const contents = Array.isArray(content) ? content : [content];
|
|
98
|
+
const lineHeight = fontSize + 4;
|
|
99
|
+
const totalHeight = contents.length * lineHeight;
|
|
100
|
+
const startY = -(totalHeight / 2) + lineHeight / 2;
|
|
101
|
+
|
|
102
|
+
contents.forEach((text, i) => {
|
|
103
|
+
ctx.fillText(text, 0, startY + i * lineHeight);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
base64Url = canvas.toDataURL();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
$effect(() => {
|
|
111
|
+
// Re-generate watermark when inputs change
|
|
112
|
+
if (content || image || width || height || rotate || gap || offset || opacity || font) {
|
|
113
|
+
renderWatermark();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
onMount(() => {
|
|
118
|
+
renderWatermark();
|
|
119
|
+
|
|
120
|
+
if (antiTamper && typeof MutationObserver !== 'undefined' && containerEl) {
|
|
121
|
+
observer = new MutationObserver((mutations) => {
|
|
122
|
+
if (isCleaningUp) return;
|
|
123
|
+
for (const mutation of mutations) {
|
|
124
|
+
if (mutation.type === 'childList' || mutation.type === 'attributes') {
|
|
125
|
+
watermarkRevision += 1;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
observer.observe(containerEl, {
|
|
132
|
+
attributes: true,
|
|
133
|
+
subtree: true,
|
|
134
|
+
childList: true,
|
|
135
|
+
attributeFilter: ['style', 'class', 'hidden'],
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
onDestroy(() => {
|
|
141
|
+
isCleaningUp = true;
|
|
142
|
+
if (observer) {
|
|
143
|
+
observer.disconnect();
|
|
144
|
+
observer = null;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
</script>
|
|
148
|
+
|
|
149
|
+
<div
|
|
150
|
+
bind:this={containerEl}
|
|
151
|
+
class={cn('relative overflow-hidden', className)}
|
|
152
|
+
data-svadmin-watermark-wrapper
|
|
153
|
+
>
|
|
154
|
+
{#key watermarkRevision}
|
|
155
|
+
{#if base64Url}
|
|
156
|
+
<div
|
|
157
|
+
data-svadmin-watermark
|
|
158
|
+
class="absolute inset-0 pointer-events-none"
|
|
159
|
+
style="z-index: {zIndex}; background-image: url('{base64Url}'); background-position: {offset[0]}px {offset[1]}px; background-repeat: repeat;"
|
|
160
|
+
></div>
|
|
161
|
+
{/if}
|
|
162
|
+
{/key}
|
|
163
|
+
{#if children}
|
|
164
|
+
{@render children()}
|
|
165
|
+
{/if}
|
|
166
|
+
</div>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
interface WatermarkFont {
|
|
3
|
+
color?: string;
|
|
4
|
+
fontSize?: number;
|
|
5
|
+
fontWeight?: 'normal' | 'light' | 'weight' | 'bold' | number;
|
|
6
|
+
fontFamily?: string;
|
|
7
|
+
fontStyle?: 'none' | 'normal' | 'italic' | 'oblique';
|
|
8
|
+
}
|
|
9
|
+
interface Props {
|
|
10
|
+
content?: string | string[];
|
|
11
|
+
image?: string;
|
|
12
|
+
width?: number;
|
|
13
|
+
height?: number;
|
|
14
|
+
rotate?: number;
|
|
15
|
+
zIndex?: number;
|
|
16
|
+
gap?: [number, number];
|
|
17
|
+
offset?: [number, number];
|
|
18
|
+
opacity?: number;
|
|
19
|
+
font?: WatermarkFont;
|
|
20
|
+
antiTamper?: boolean;
|
|
21
|
+
class?: string;
|
|
22
|
+
children?: Snippet;
|
|
23
|
+
}
|
|
24
|
+
declare const Watermark: import("svelte").Component<Props, {}, "">;
|
|
25
|
+
type Watermark = ReturnType<typeof Watermark>;
|
|
26
|
+
export default Watermark;
|
package/dist/index.d.ts
CHANGED
|
@@ -24,8 +24,6 @@ export { default as ForgotPasswordPage } from './components/ForgotPasswordPage.s
|
|
|
24
24
|
export { default as CanAccess } from './components/CanAccess.svelte';
|
|
25
25
|
export { default as Can } from './components/CanAccess.svelte';
|
|
26
26
|
export { default as UndoableNotification } from './components/UndoableNotification.svelte';
|
|
27
|
-
export { default as ModalForm } from './components/ModalForm.svelte';
|
|
28
|
-
export { default as DrawerForm } from './components/DrawerForm.svelte';
|
|
29
27
|
export { default as DevTools } from './components/DevTools.svelte';
|
|
30
28
|
export { default as Authenticated } from './components/Authenticated.svelte';
|
|
31
29
|
export { default as UpdatePasswordPage } from './components/UpdatePasswordPage.svelte';
|
|
@@ -58,6 +56,64 @@ export { default as Transfer } from './components/Transfer.svelte';
|
|
|
58
56
|
export type { TransferItem } from './components/Transfer.svelte';
|
|
59
57
|
export { default as FilterBuilder } from './components/FilterBuilder.svelte';
|
|
60
58
|
export type { FilterRuleItem } from './components/FilterBuilder.svelte';
|
|
59
|
+
export { default as Watermark } from './components/Watermark.svelte';
|
|
60
|
+
export { default as ColumnSettings } from './components/ColumnSettings.svelte';
|
|
61
|
+
export type { ColumnItem } from './components/ColumnSettings.svelte';
|
|
62
|
+
export { default as UnsavedChangesPrompt } from './components/UnsavedChangesPrompt.svelte';
|
|
63
|
+
export { default as ImportWizard } from './components/ImportWizard.svelte';
|
|
64
|
+
export { default as ColumnHeaderFilter } from './components/ColumnHeaderFilter.svelte';
|
|
65
|
+
export { default as TreeTable } from './components/TreeTable.svelte';
|
|
66
|
+
export type { TreeTableColumn } from './components/TreeTable.svelte';
|
|
67
|
+
export { default as SensitiveDataMask } from './components/SensitiveDataMask.svelte';
|
|
68
|
+
export type { MaskType } from './components/SensitiveDataMask.svelte';
|
|
69
|
+
export { default as ApprovalActionCard } from './components/ApprovalActionCard.svelte';
|
|
70
|
+
export type { ApprovalStatus } from './components/ApprovalActionCard.svelte';
|
|
71
|
+
export { default as StepForm } from './components/StepForm.svelte';
|
|
72
|
+
export type { FormStep } from './components/StepForm.svelte';
|
|
73
|
+
export { default as ModalForm } from './components/ModalForm.svelte';
|
|
74
|
+
export { default as DrawerForm } from './components/DrawerForm.svelte';
|
|
75
|
+
export { default as TableSummary } from './components/TableSummary.svelte';
|
|
76
|
+
export type { TableSummaryColumn, AggregationType } from './components/TableSummary.svelte';
|
|
77
|
+
export { default as VersionDiffViewer } from './components/VersionDiffViewer.svelte';
|
|
78
|
+
export { default as VirtualTable } from './components/VirtualTable.svelte';
|
|
79
|
+
export type { VirtualTableColumn } from './components/VirtualTable.svelte';
|
|
80
|
+
export { default as EditableTable } from './components/EditableTable.svelte';
|
|
81
|
+
export type { EditableTableColumn } from './components/EditableTable.svelte';
|
|
82
|
+
export { default as DraggableRowTable } from './components/DraggableRowTable.svelte';
|
|
83
|
+
export type { DraggableTableColumn } from './components/DraggableRowTable.svelte';
|
|
84
|
+
export { default as SplitPaneLayout } from './components/SplitPaneLayout.svelte';
|
|
85
|
+
export { default as MasterDetailView } from './components/MasterDetailView.svelte';
|
|
86
|
+
export { default as MediaLibraryModal } from './components/MediaLibraryModal.svelte';
|
|
87
|
+
export type { MediaItem } from './components/MediaLibraryModal.svelte';
|
|
88
|
+
export { default as ImageCropper } from './components/ImageCropper.svelte';
|
|
89
|
+
export { default as ActivityFeed } from './components/ActivityFeed.svelte';
|
|
90
|
+
export type { ActivityItem } from './components/ActivityFeed.svelte';
|
|
91
|
+
export { default as PresenceAvatarGroup } from './components/PresenceAvatarGroup.svelte';
|
|
92
|
+
export type { PresenceUser } from './components/PresenceAvatarGroup.svelte';
|
|
93
|
+
export { default as PrintableBill } from './components/PrintableBill.svelte';
|
|
94
|
+
export type { BillItem } from './components/PrintableBill.svelte';
|
|
95
|
+
export { default as JsonSchemaForm } from './components/JsonSchemaForm.svelte';
|
|
96
|
+
export { default as MentionsInput } from './components/MentionsInput.svelte';
|
|
97
|
+
export type { MentionOption } from './components/MentionsInput.svelte';
|
|
98
|
+
export { default as KanbanBoard } from './components/KanbanBoard.svelte';
|
|
99
|
+
export type { KanbanCard, KanbanColumn } from './components/KanbanBoard.svelte';
|
|
100
|
+
export { default as PivotTable } from './components/PivotTable.svelte';
|
|
101
|
+
export type { AggregationFn } from './components/PivotTable.svelte';
|
|
102
|
+
export { default as MultiTabKeepAlive } from './components/MultiTabKeepAlive.svelte';
|
|
103
|
+
export type { WorkspaceTab } from './components/MultiTabKeepAlive.svelte';
|
|
104
|
+
export { default as GanttChart } from './components/GanttChart.svelte';
|
|
105
|
+
export type { GanttTask } from './components/GanttChart.svelte';
|
|
106
|
+
export { default as CanvasAnnotation } from './components/CanvasAnnotation.svelte';
|
|
107
|
+
export type { AnnotationTool } from './components/CanvasAnnotation.svelte';
|
|
108
|
+
export { default as SignaturePad } from './components/SignaturePad.svelte';
|
|
109
|
+
export { default as PdfDocumentViewer } from './components/PdfDocumentViewer.svelte';
|
|
110
|
+
export type { DocumentStamp } from './components/PdfDocumentViewer.svelte';
|
|
111
|
+
export { default as SpreadsheetView } from './components/SpreadsheetView.svelte';
|
|
112
|
+
export type { SheetData } from './components/SpreadsheetView.svelte';
|
|
113
|
+
export { default as DecisionTable } from './components/DecisionTable.svelte';
|
|
114
|
+
export type { DecisionColumn, DecisionRule } from './components/DecisionTable.svelte';
|
|
115
|
+
export { default as OfflineSyncBanner } from './components/OfflineSyncBanner.svelte';
|
|
116
|
+
export type { PendingMutation } from './components/OfflineSyncBanner.svelte';
|
|
61
117
|
export { default as InfiniteList } from './components/InfiniteList.svelte';
|
|
62
118
|
export { default as ComboboxField } from './components/ComboboxField.svelte';
|
|
63
119
|
export { default as PasswordInput } from './components/PasswordInput.svelte';
|
|
@@ -72,7 +128,6 @@ export { default as VoiceInput } from "./components/VoiceInput.svelte";
|
|
|
72
128
|
export { default as AnimatedCounter } from "./components/AnimatedCounter.svelte";
|
|
73
129
|
export { default as KeyboardShortcuts } from "./components/KeyboardShortcuts.svelte";
|
|
74
130
|
export { default as InlineEdit } from "./components/InlineEdit.svelte";
|
|
75
|
-
export { default as VirtualTable } from "./components/VirtualTable.svelte";
|
|
76
131
|
export { default as DraggableHeader } from "./components/DraggableHeader.svelte";
|
|
77
132
|
export { default as SettingsPage } from "./components/SettingsPage.svelte";
|
|
78
133
|
export { default as FeedbackNotice } from './components/content/FeedbackNotice.svelte';
|
package/dist/index.js
CHANGED
|
@@ -27,8 +27,6 @@ export { default as ForgotPasswordPage } from './components/ForgotPasswordPage.s
|
|
|
27
27
|
export { default as CanAccess } from './components/CanAccess.svelte';
|
|
28
28
|
export { default as Can } from './components/CanAccess.svelte';
|
|
29
29
|
export { default as UndoableNotification } from './components/UndoableNotification.svelte';
|
|
30
|
-
export { default as ModalForm } from './components/ModalForm.svelte';
|
|
31
|
-
export { default as DrawerForm } from './components/DrawerForm.svelte';
|
|
32
30
|
export { default as DevTools } from './components/DevTools.svelte';
|
|
33
31
|
export { default as Authenticated } from './components/Authenticated.svelte';
|
|
34
32
|
export { default as UpdatePasswordPage } from './components/UpdatePasswordPage.svelte';
|
|
@@ -58,6 +56,41 @@ export { default as TreeSelect } from './components/TreeSelect.svelte';
|
|
|
58
56
|
export { default as Cascader } from './components/Cascader.svelte';
|
|
59
57
|
export { default as Transfer } from './components/Transfer.svelte';
|
|
60
58
|
export { default as FilterBuilder } from './components/FilterBuilder.svelte';
|
|
59
|
+
export { default as Watermark } from './components/Watermark.svelte';
|
|
60
|
+
export { default as ColumnSettings } from './components/ColumnSettings.svelte';
|
|
61
|
+
export { default as UnsavedChangesPrompt } from './components/UnsavedChangesPrompt.svelte';
|
|
62
|
+
export { default as ImportWizard } from './components/ImportWizard.svelte';
|
|
63
|
+
export { default as ColumnHeaderFilter } from './components/ColumnHeaderFilter.svelte';
|
|
64
|
+
export { default as TreeTable } from './components/TreeTable.svelte';
|
|
65
|
+
export { default as SensitiveDataMask } from './components/SensitiveDataMask.svelte';
|
|
66
|
+
export { default as ApprovalActionCard } from './components/ApprovalActionCard.svelte';
|
|
67
|
+
export { default as StepForm } from './components/StepForm.svelte';
|
|
68
|
+
export { default as ModalForm } from './components/ModalForm.svelte';
|
|
69
|
+
export { default as DrawerForm } from './components/DrawerForm.svelte';
|
|
70
|
+
export { default as TableSummary } from './components/TableSummary.svelte';
|
|
71
|
+
export { default as VersionDiffViewer } from './components/VersionDiffViewer.svelte';
|
|
72
|
+
export { default as VirtualTable } from './components/VirtualTable.svelte';
|
|
73
|
+
export { default as EditableTable } from './components/EditableTable.svelte';
|
|
74
|
+
export { default as DraggableRowTable } from './components/DraggableRowTable.svelte';
|
|
75
|
+
export { default as SplitPaneLayout } from './components/SplitPaneLayout.svelte';
|
|
76
|
+
export { default as MasterDetailView } from './components/MasterDetailView.svelte';
|
|
77
|
+
export { default as MediaLibraryModal } from './components/MediaLibraryModal.svelte';
|
|
78
|
+
export { default as ImageCropper } from './components/ImageCropper.svelte';
|
|
79
|
+
export { default as ActivityFeed } from './components/ActivityFeed.svelte';
|
|
80
|
+
export { default as PresenceAvatarGroup } from './components/PresenceAvatarGroup.svelte';
|
|
81
|
+
export { default as PrintableBill } from './components/PrintableBill.svelte';
|
|
82
|
+
export { default as JsonSchemaForm } from './components/JsonSchemaForm.svelte';
|
|
83
|
+
export { default as MentionsInput } from './components/MentionsInput.svelte';
|
|
84
|
+
export { default as KanbanBoard } from './components/KanbanBoard.svelte';
|
|
85
|
+
export { default as PivotTable } from './components/PivotTable.svelte';
|
|
86
|
+
export { default as MultiTabKeepAlive } from './components/MultiTabKeepAlive.svelte';
|
|
87
|
+
export { default as GanttChart } from './components/GanttChart.svelte';
|
|
88
|
+
export { default as CanvasAnnotation } from './components/CanvasAnnotation.svelte';
|
|
89
|
+
export { default as SignaturePad } from './components/SignaturePad.svelte';
|
|
90
|
+
export { default as PdfDocumentViewer } from './components/PdfDocumentViewer.svelte';
|
|
91
|
+
export { default as SpreadsheetView } from './components/SpreadsheetView.svelte';
|
|
92
|
+
export { default as DecisionTable } from './components/DecisionTable.svelte';
|
|
93
|
+
export { default as OfflineSyncBanner } from './components/OfflineSyncBanner.svelte';
|
|
61
94
|
export { default as InfiniteList } from './components/InfiniteList.svelte';
|
|
62
95
|
export { default as ComboboxField } from './components/ComboboxField.svelte';
|
|
63
96
|
export { default as PasswordInput } from './components/PasswordInput.svelte';
|
|
@@ -72,7 +105,6 @@ export { default as VoiceInput } from "./components/VoiceInput.svelte";
|
|
|
72
105
|
export { default as AnimatedCounter } from "./components/AnimatedCounter.svelte";
|
|
73
106
|
export { default as KeyboardShortcuts } from "./components/KeyboardShortcuts.svelte";
|
|
74
107
|
export { default as InlineEdit } from "./components/InlineEdit.svelte";
|
|
75
|
-
export { default as VirtualTable } from "./components/VirtualTable.svelte";
|
|
76
108
|
export { default as DraggableHeader } from "./components/DraggableHeader.svelte";
|
|
77
109
|
export { default as SettingsPage } from "./components/SettingsPage.svelte";
|
|
78
110
|
export { default as FeedbackNotice } from './components/content/FeedbackNotice.svelte';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svadmin/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.65.0",
|
|
4
4
|
"description": "Pre-built admin UI components — AdminApp, AutoTable, AutoForm, Sidebar, Layout",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": [
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"./components/*": "./dist/components/*"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"@svadmin/core": "^0.
|
|
42
|
+
"@svadmin/core": "^0.47.0",
|
|
43
43
|
"@tanstack/svelte-query": "^6.1.48",
|
|
44
44
|
"highlight.js": "^11.12.0",
|
|
45
45
|
"isomorphic-dompurify": "^3.23.0",
|