@svadmin/lite 0.26.0 → 0.27.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/LiteAnnouncementBanner.svelte +88 -0
- package/dist/components/LiteAnnouncementBanner.svelte.d.ts +12 -0
- package/dist/components/LiteAsyncExportModal.svelte +113 -0
- package/dist/components/LiteAsyncExportModal.svelte.d.ts +14 -0
- package/dist/components/LiteContextMenu.svelte +114 -0
- package/dist/components/LiteContextMenu.svelte.d.ts +18 -0
- package/dist/components/LiteDualApprovalGate.svelte +58 -0
- package/dist/components/LiteDualApprovalGate.svelte.d.ts +11 -0
- package/dist/components/LiteJsonViewer.svelte +88 -0
- package/dist/components/LiteJsonViewer.svelte.d.ts +9 -0
- package/dist/components/LiteKeyboardShortcutsModal.svelte +56 -0
- package/dist/components/LiteKeyboardShortcutsModal.svelte.d.ts +13 -0
- package/dist/components/LiteKpiCard.svelte +169 -0
- package/dist/components/LiteKpiCard.svelte.d.ts +25 -0
- package/dist/components/LiteResultPage.svelte +135 -0
- package/dist/components/LiteResultPage.svelte.d.ts +17 -0
- package/dist/components/LiteSensitiveDataMask.svelte +34 -2
- package/dist/components/LiteSensitiveDataMask.svelte.d.ts +1 -2
- package/dist/components/LiteStepWizard.svelte +98 -0
- package/dist/components/LiteStepWizard.svelte.d.ts +16 -0
- package/dist/components/LiteTextDiffViewer.svelte +111 -0
- package/dist/components/LiteTextDiffViewer.svelte.d.ts +10 -0
- package/dist/components/LiteUnsavedChangesGuard.svelte +53 -0
- package/dist/components/LiteUnsavedChangesGuard.svelte.d.ts +10 -0
- package/dist/components/LiteWatermarkContainer.svelte +58 -0
- package/dist/components/LiteWatermarkContainer.svelte.d.ts +9 -0
- package/dist/components/LiteWorkflowStepper.svelte +56 -0
- package/dist/components/LiteWorkflowStepper.svelte.d.ts +14 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +14 -0
- package/package.json +1 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
hasChanges?: boolean;
|
|
6
|
+
message?: string;
|
|
7
|
+
class?: string;
|
|
8
|
+
children?: Snippet;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
hasChanges = false,
|
|
13
|
+
message = 'You have unsaved changes that may be lost.',
|
|
14
|
+
class: className = '',
|
|
15
|
+
children,
|
|
16
|
+
}: Props = $props();
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<div
|
|
20
|
+
class="lite-unsaved-guard {className}"
|
|
21
|
+
data-svadmin-component="LiteUnsavedChangesGuard"
|
|
22
|
+
data-dirty={hasChanges ? 'true' : 'false'}
|
|
23
|
+
>
|
|
24
|
+
{#if hasChanges}
|
|
25
|
+
<aside class="lite-unsaved-banner" role="status">
|
|
26
|
+
<span class="lite-unsaved-icon">⚠️</span>
|
|
27
|
+
<span class="lite-unsaved-text">{message}</span>
|
|
28
|
+
</aside>
|
|
29
|
+
{/if}
|
|
30
|
+
|
|
31
|
+
<div class="lite-unsaved-content">
|
|
32
|
+
{#if children}{@render children()}{/if}
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<style>
|
|
37
|
+
.lite-unsaved-guard { display: block; }
|
|
38
|
+
.lite-unsaved-banner {
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
padding: 8px 12px;
|
|
42
|
+
background: #fff7e8;
|
|
43
|
+
border: 1px solid #ffd591;
|
|
44
|
+
border-radius: 6px;
|
|
45
|
+
margin-bottom: 12px;
|
|
46
|
+
font-size: 13px;
|
|
47
|
+
color: #d46b08;
|
|
48
|
+
}
|
|
49
|
+
.lite-unsaved-banner > * + * { margin-left: 8px; }
|
|
50
|
+
.lite-unsaved-icon { font-size: 14px; }
|
|
51
|
+
.lite-unsaved-text { font-weight: 500; }
|
|
52
|
+
.lite-unsaved-content { position: relative; }
|
|
53
|
+
</style>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
hasChanges?: boolean;
|
|
4
|
+
message?: string;
|
|
5
|
+
class?: string;
|
|
6
|
+
children?: Snippet;
|
|
7
|
+
}
|
|
8
|
+
declare const LiteUnsavedChangesGuard: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type LiteUnsavedChangesGuard = ReturnType<typeof LiteUnsavedChangesGuard>;
|
|
10
|
+
export default LiteUnsavedChangesGuard;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
content?: string | string[];
|
|
6
|
+
class?: string;
|
|
7
|
+
children?: Snippet;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
let {
|
|
11
|
+
content = 'SVAdmin Lite',
|
|
12
|
+
class: className = '',
|
|
13
|
+
children,
|
|
14
|
+
}: Props = $props();
|
|
15
|
+
|
|
16
|
+
const watermarkText = $derived(
|
|
17
|
+
Array.isArray(content) ? content.join(' ') : String(content)
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
const encodedSvg = $derived.by(() => {
|
|
21
|
+
const escaped = watermarkText
|
|
22
|
+
.replace(/&/g, '&')
|
|
23
|
+
.replace(/</g, '<')
|
|
24
|
+
.replace(/>/g, '>')
|
|
25
|
+
.replace(/"/g, '"');
|
|
26
|
+
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="220" height="120" viewBox="0 0 220 120"><text x="20" y="60" fill="rgba(0,0,0,0.07)" font-family="sans-serif" font-size="12" transform="rotate(-18 110 60)">${escaped}</text></svg>`;
|
|
27
|
+
return `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;
|
|
28
|
+
});
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<div
|
|
32
|
+
class="lite-watermark-container {className}"
|
|
33
|
+
data-svadmin-component="LiteWatermarkContainer"
|
|
34
|
+
style="--lite-watermark-pattern: url('{encodedSvg}');"
|
|
35
|
+
>
|
|
36
|
+
<div class="lite-watermark-overlay" aria-hidden="true" style="background-image: url('{encodedSvg}');"></div>
|
|
37
|
+
<div class="lite-watermark-content">
|
|
38
|
+
{#if children}{@render children()}{/if}
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<style>
|
|
43
|
+
.lite-watermark-container {
|
|
44
|
+
position: relative;
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
}
|
|
47
|
+
.lite-watermark-overlay {
|
|
48
|
+
position: absolute;
|
|
49
|
+
inset: 0;
|
|
50
|
+
pointer-events: none;
|
|
51
|
+
z-index: 9;
|
|
52
|
+
background-repeat: repeat;
|
|
53
|
+
}
|
|
54
|
+
.lite-watermark-content {
|
|
55
|
+
position: relative;
|
|
56
|
+
z-index: 1;
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
content?: string | string[];
|
|
4
|
+
class?: string;
|
|
5
|
+
children?: Snippet;
|
|
6
|
+
}
|
|
7
|
+
declare const LiteWatermarkContainer: import("svelte").Component<Props, {}, "">;
|
|
8
|
+
type LiteWatermarkContainer = ReturnType<typeof LiteWatermarkContainer>;
|
|
9
|
+
export default LiteWatermarkContainer;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export interface LiteWorkflowNode {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
status: 'completed' | 'running' | 'failed' | 'pending';
|
|
6
|
+
durationText?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
nodes: LiteWorkflowNode[];
|
|
11
|
+
title?: string;
|
|
12
|
+
class?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
nodes = [],
|
|
17
|
+
title = 'Workflow Execution',
|
|
18
|
+
class: className = '',
|
|
19
|
+
}: Props = $props();
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<div
|
|
23
|
+
class="lite-workflow-stepper {className}"
|
|
24
|
+
data-svadmin-component="LiteWorkflowStepper"
|
|
25
|
+
>
|
|
26
|
+
<h4 class="lite-workflow-title">{title}</h4>
|
|
27
|
+
<ol class="lite-workflow-list">
|
|
28
|
+
{#each nodes as node (node.id)}
|
|
29
|
+
<li class="lite-workflow-node lite-status-{node.status}">
|
|
30
|
+
<span class="lite-node-icon">
|
|
31
|
+
{#if node.status === 'completed'}✓{:else if node.status === 'running'}⏳{:else if node.status === 'failed'}✕{:else}○{/if}
|
|
32
|
+
</span>
|
|
33
|
+
<span class="lite-node-label">{node.label}</span>
|
|
34
|
+
{#if node.durationText}
|
|
35
|
+
<span class="lite-node-duration">{node.durationText}</span>
|
|
36
|
+
{/if}
|
|
37
|
+
</li>
|
|
38
|
+
{/each}
|
|
39
|
+
</ol>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<style>
|
|
43
|
+
.lite-workflow-stepper { border: 1px solid #e5e6eb; border-radius: 8px; background: #ffffff; padding: 16px; }
|
|
44
|
+
.lite-workflow-title { font-size: 14px; font-weight: 600; margin: 0 0 12px 0; color: #1d2129; }
|
|
45
|
+
.lite-workflow-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
|
|
46
|
+
.lite-workflow-list > * + * { margin-top: 8px; }
|
|
47
|
+
.lite-workflow-node { display: flex; align-items: center; padding: 8px 12px; border-radius: 6px; border: 1px solid #f2f3f5; font-size: 12px; }
|
|
48
|
+
.lite-workflow-node > * + * { margin-left: 10px; }
|
|
49
|
+
.lite-node-icon { font-weight: 700; width: 18px; text-align: center; }
|
|
50
|
+
.lite-status-completed { background: #e8ffea; color: #00b42a; border-color: #aff0b5; }
|
|
51
|
+
.lite-status-running { background: #e8f3ff; color: #165dff; border-color: #b3d6ff; }
|
|
52
|
+
.lite-status-failed { background: #ffece8; color: #f53f3f; border-color: #fbbbb0; }
|
|
53
|
+
.lite-status-pending { background: #f7f8fa; color: #86909c; }
|
|
54
|
+
.lite-node-label { font-weight: 500; flex: 1; }
|
|
55
|
+
.lite-node-duration { font-family: monospace; font-size: 11px; color: #86909c; }
|
|
56
|
+
</style>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface LiteWorkflowNode {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
status: 'completed' | 'running' | 'failed' | 'pending';
|
|
5
|
+
durationText?: string;
|
|
6
|
+
}
|
|
7
|
+
interface Props {
|
|
8
|
+
nodes: LiteWorkflowNode[];
|
|
9
|
+
title?: string;
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const LiteWorkflowStepper: import("svelte").Component<Props, {}, "">;
|
|
13
|
+
type LiteWorkflowStepper = ReturnType<typeof LiteWorkflowStepper>;
|
|
14
|
+
export default LiteWorkflowStepper;
|
package/dist/index.d.ts
CHANGED
|
@@ -125,6 +125,23 @@ export type { LiteVirtualTreeNode } from './components/LiteVirtualTreeSelect.sve
|
|
|
125
125
|
export type { LiteConflictField } from './components/LiteConcurrentConflictModal.svelte';
|
|
126
126
|
export type { LiteTaskStatus, LiteBackgroundTask } from './components/LiteTaskCenter.svelte';
|
|
127
127
|
export type { LiteDeleteImpact } from './components/LiteSafeDeleteConfirm.svelte';
|
|
128
|
+
export { default as LiteKpiCard } from './components/LiteKpiCard.svelte';
|
|
129
|
+
export { default as LiteJsonViewer } from './components/LiteJsonViewer.svelte';
|
|
130
|
+
export { default as LiteResultPage } from './components/LiteResultPage.svelte';
|
|
131
|
+
export { default as LiteWatermarkContainer } from './components/LiteWatermarkContainer.svelte';
|
|
132
|
+
export { default as LiteContextMenu } from './components/LiteContextMenu.svelte';
|
|
133
|
+
export { default as LiteUnsavedChangesGuard } from './components/LiteUnsavedChangesGuard.svelte';
|
|
134
|
+
export { default as LiteAnnouncementBanner } from './components/LiteAnnouncementBanner.svelte';
|
|
135
|
+
export { default as LiteTextDiffViewer } from './components/LiteTextDiffViewer.svelte';
|
|
136
|
+
export { default as LiteAsyncExportModal } from './components/LiteAsyncExportModal.svelte';
|
|
137
|
+
export type { LiteContextMenuItem } from './components/LiteContextMenu.svelte';
|
|
138
|
+
export { default as LiteStepWizard } from './components/LiteStepWizard.svelte';
|
|
139
|
+
export { default as LiteWorkflowStepper } from './components/LiteWorkflowStepper.svelte';
|
|
140
|
+
export { default as LiteDualApprovalGate } from './components/LiteDualApprovalGate.svelte';
|
|
141
|
+
export { default as LiteKeyboardShortcutsModal } from './components/LiteKeyboardShortcutsModal.svelte';
|
|
142
|
+
export type { LiteStepItem } from './components/LiteStepWizard.svelte';
|
|
143
|
+
export type { LiteWorkflowNode } from './components/LiteWorkflowStepper.svelte';
|
|
144
|
+
export type { LiteShortcutItem } from './components/LiteKeyboardShortcutsModal.svelte';
|
|
128
145
|
export { configureMarkdownRenderer, escapeHtml, renderInlineMarkdown, renderMarkdown, renderRichContent, sanitizeRichTextHtml, } from './rich-content';
|
|
129
146
|
export type { MarkdownRenderOptions } from './rich-content';
|
|
130
147
|
export * from './components/compatibility/index';
|
package/dist/index.js
CHANGED
|
@@ -125,6 +125,20 @@ export { default as LiteConcurrentConflictModal } from './components/LiteConcurr
|
|
|
125
125
|
export { default as LiteTaskCenter } from './components/LiteTaskCenter.svelte';
|
|
126
126
|
export { default as LiteMicroAppFrame } from './components/LiteMicroAppFrame.svelte';
|
|
127
127
|
export { default as LiteSafeDeleteConfirm } from './components/LiteSafeDeleteConfirm.svelte';
|
|
128
|
+
// Enterprise suites SSR parity fallbacks
|
|
129
|
+
export { default as LiteKpiCard } from './components/LiteKpiCard.svelte';
|
|
130
|
+
export { default as LiteJsonViewer } from './components/LiteJsonViewer.svelte';
|
|
131
|
+
export { default as LiteResultPage } from './components/LiteResultPage.svelte';
|
|
132
|
+
export { default as LiteWatermarkContainer } from './components/LiteWatermarkContainer.svelte';
|
|
133
|
+
export { default as LiteContextMenu } from './components/LiteContextMenu.svelte';
|
|
134
|
+
export { default as LiteUnsavedChangesGuard } from './components/LiteUnsavedChangesGuard.svelte';
|
|
135
|
+
export { default as LiteAnnouncementBanner } from './components/LiteAnnouncementBanner.svelte';
|
|
136
|
+
export { default as LiteTextDiffViewer } from './components/LiteTextDiffViewer.svelte';
|
|
137
|
+
export { default as LiteAsyncExportModal } from './components/LiteAsyncExportModal.svelte';
|
|
138
|
+
export { default as LiteStepWizard } from './components/LiteStepWizard.svelte';
|
|
139
|
+
export { default as LiteWorkflowStepper } from './components/LiteWorkflowStepper.svelte';
|
|
140
|
+
export { default as LiteDualApprovalGate } from './components/LiteDualApprovalGate.svelte';
|
|
141
|
+
export { default as LiteKeyboardShortcutsModal } from './components/LiteKeyboardShortcutsModal.svelte';
|
|
128
142
|
// Rich content rendering (SSR-safe Markdown + rich HTML allowlist)
|
|
129
143
|
export { configureMarkdownRenderer, escapeHtml, renderInlineMarkdown, renderMarkdown, renderRichContent, sanitizeRichTextHtml, } from './rich-content';
|
|
130
144
|
// Compatibility fallbacks for browser-only and third-party UI capabilities.
|