@svadmin/ui 0.73.0 → 0.75.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/README.md +53 -28
- package/dist/app.css +3733 -4119
- package/dist/app.theme.css +3733 -4119
- package/dist/component-registry.d.ts +14977 -0
- package/dist/component-registry.js +216 -0
- package/dist/components/AboutSettings.svelte +7 -1
- package/dist/components/AboutSettings.svelte.d.ts +4 -1
- package/dist/components/ActivityFeed.svelte +9 -3
- package/dist/components/ActivityFeed.svelte.d.ts +3 -0
- package/dist/components/AdminApp.svelte +24 -15
- package/dist/components/AdminApp.svelte.d.ts +6 -0
- package/dist/components/ApiSettings.svelte +41 -5
- package/dist/components/ApprovalCenter.svelte +283 -0
- package/dist/components/ApprovalCenter.svelte.d.ts +10 -0
- package/dist/components/AuditLogViewer.svelte +3 -1
- package/dist/components/AutoForm.svelte +33 -3
- package/dist/components/AutoForm.svelte.d.ts +1 -0
- package/dist/components/AutoTable.svelte +610 -47
- package/dist/components/AutoTable.svelte.d.ts +17 -1
- package/dist/components/BoundRecordDetailDrawer.svelte +9 -0
- package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +2 -0
- package/dist/components/Breadcrumbs.svelte +11 -1
- package/dist/components/CancelTaskButton.svelte +12 -42
- package/dist/components/ColorPicker.svelte +73 -0
- package/dist/components/ColorPicker.svelte.d.ts +15 -0
- package/dist/components/ComboboxField.svelte +114 -27
- package/dist/components/ComboboxField.svelte.d.ts +1 -0
- package/dist/components/DashboardView.svelte +99 -0
- package/dist/components/DashboardView.svelte.d.ts +14 -0
- package/dist/components/DatePicker.svelte +10 -0
- package/dist/components/DatePicker.svelte.d.ts +6 -0
- package/dist/components/DateRangeInput.svelte +85 -5
- package/dist/components/DateRangeInput.svelte.d.ts +10 -0
- package/dist/components/DateRangePicker.svelte +10 -0
- package/dist/components/DateRangePicker.svelte.d.ts +6 -0
- package/dist/components/DateTimeInput.svelte +85 -16
- package/dist/components/DateTimeInput.svelte.d.ts +19 -11
- package/dist/components/DateTimePicker.svelte +10 -0
- package/dist/components/DateTimePicker.svelte.d.ts +6 -0
- package/dist/components/DevTools.svelte +34 -26
- package/dist/components/DevframePanel.svelte +123 -0
- package/dist/components/DevframePanel.svelte.d.ts +3 -0
- package/dist/components/ErrorSummary.svelte +52 -0
- package/dist/components/ErrorSummary.svelte.d.ts +14 -0
- package/dist/components/FieldRenderer.svelte +82 -81
- package/dist/components/FileUpload.svelte +214 -52
- package/dist/components/FileUpload.svelte.d.ts +11 -0
- package/dist/components/FilterBuilder.svelte +88 -66
- package/dist/components/FilterCollectionInput.svelte +80 -0
- package/dist/components/FilterCollectionInput.svelte.d.ts +10 -0
- package/dist/components/GanttChart.svelte +66 -14
- package/dist/components/GanttChart.svelte.d.ts +6 -0
- package/dist/components/Header.svelte +18 -2
- package/dist/components/ImportWizard.svelte +339 -17
- package/dist/components/ImportWizard.svelte.d.ts +11 -0
- package/dist/components/JsonSchemaForm.svelte +120 -52
- package/dist/components/JsonSchemaForm.svelte.d.ts +7 -1
- package/dist/components/KanbanBoard.svelte +195 -40
- package/dist/components/KanbanBoard.svelte.d.ts +9 -2
- package/dist/components/Layout.svelte +4 -2
- package/dist/components/LazyAutoForm.svelte +28 -0
- package/dist/components/LazyAutoForm.svelte.d.ts +8 -0
- package/dist/components/LazyAutoTable.svelte +28 -0
- package/dist/components/LazyAutoTable.svelte.d.ts +8 -0
- package/dist/components/LazyPage.svelte +3 -3
- package/dist/components/LazyPage.svelte.d.ts +2 -2
- package/dist/components/LazySettingsPage.svelte +28 -0
- package/dist/components/LazySettingsPage.svelte.d.ts +8 -0
- package/dist/components/LazyShowPage.svelte +28 -0
- package/dist/components/LazyShowPage.svelte.d.ts +8 -0
- package/dist/components/ListPage.svelte +5 -1
- package/dist/components/ListPage.svelte.d.ts +3 -0
- package/dist/components/LoginPage.svelte +1 -1
- package/dist/components/MultiTabKeepAlive.svelte +11 -6
- package/dist/components/NotificationsSettings.svelte +69 -2
- package/dist/components/NotificationsSettings.svelte.d.ts +25 -1
- package/dist/components/PasswordInput.svelte +3 -3
- package/dist/components/PasswordInput.svelte.d.ts +2 -1
- package/dist/components/PermissionMatrix.svelte +20 -1
- package/dist/components/PivotExportButton.svelte +157 -0
- package/dist/components/PivotExportButton.svelte.d.ts +16 -0
- package/dist/components/PivotTable.svelte +229 -74
- package/dist/components/PivotTable.svelte.d.ts +19 -2
- package/dist/components/RadioGroup.svelte +121 -0
- package/dist/components/RadioGroup.svelte.d.ts +43 -0
- package/dist/components/RangeSlider.svelte +127 -0
- package/dist/components/RangeSlider.svelte.d.ts +22 -0
- package/dist/components/Rate.svelte +121 -0
- package/dist/components/Rate.svelte.d.ts +16 -0
- package/dist/components/RecordDetailDrawer.svelte +4 -2
- package/dist/components/RecordDetailDrawer.svelte.d.ts +2 -0
- package/dist/components/RelationPicker.svelte +341 -0
- package/dist/components/RelationPicker.svelte.d.ts +26 -0
- package/dist/components/ResourceOperationsPage.svelte +23 -19
- package/dist/components/ResourceOperationsPage.svelte.d.ts +2 -2
- package/dist/components/RetryTaskButton.svelte +12 -42
- package/dist/components/SecuritySettings.svelte +29 -5
- package/dist/components/SegmentedControl.svelte +145 -0
- package/dist/components/SegmentedControl.svelte.d.ts +38 -0
- package/dist/components/SettingsPage.svelte +3 -1
- package/dist/components/SettingsPage.svelte.d.ts +1 -0
- package/dist/components/ShowPage.svelte +18 -3
- package/dist/components/ShowPage.svelte.d.ts +3 -0
- package/dist/components/Sidebar.svelte +2 -2
- package/dist/components/Slider.svelte +100 -0
- package/dist/components/Slider.svelte.d.ts +19 -0
- package/dist/components/SpreadsheetView.svelte +1213 -95
- package/dist/components/SpreadsheetView.svelte.d.ts +19 -0
- package/dist/components/TagsInput.svelte +178 -0
- package/dist/components/TagsInput.svelte.d.ts +17 -0
- package/dist/components/TimePicker.svelte +10 -0
- package/dist/components/TimePicker.svelte.d.ts +6 -0
- package/dist/components/TooltipButton.svelte +3 -4
- package/dist/components/TreeSelect.svelte +267 -53
- package/dist/components/TreeSelect.svelte.d.ts +3 -0
- package/dist/components/TreeTable.svelte +484 -82
- package/dist/components/TreeTable.svelte.d.ts +24 -1
- package/dist/components/TwoFactorAuthPage.svelte +85 -48
- package/dist/components/TwoFactorAuthPage.svelte.d.ts +12 -1
- package/dist/components/VirtualTable.svelte +116 -20
- package/dist/components/VirtualTable.svelte.d.ts +5 -0
- package/dist/components/account/CompanyProfilePage.svelte +74 -38
- package/dist/components/account/GetStartedPage.svelte +2 -1
- package/dist/components/account/ImportMembersPage.svelte +22 -167
- package/dist/components/account/ImportMembersPage.svelte.d.ts +4 -1
- package/dist/components/account/MemberDirectory.svelte +156 -0
- package/dist/components/account/MemberDirectory.svelte.d.ts +19 -0
- package/dist/components/account/MembersStarterPage.svelte +9 -55
- package/dist/components/account/MembersStarterPage.svelte.d.ts +5 -1
- package/dist/components/account/SecurityLogPage.svelte +4 -1
- package/dist/components/account/SettingsPlainPage.svelte +7 -38
- package/dist/components/account/SettingsPlainPage.svelte.d.ts +4 -1
- package/dist/components/account/SettingsSidebarPage.svelte +7 -20
- package/dist/components/account/TeamMembersPage.svelte +4 -20
- package/dist/components/account/TeamMembersPage.svelte.d.ts +5 -1
- package/dist/components/account/UserProfilePage.svelte +3 -25
- package/dist/components/account/UserProfilePage.svelte.d.ts +17 -2
- package/dist/components/buttons/ExportButton.svelte +56 -12
- package/dist/components/buttons/ExportButton.svelte.d.ts +11 -0
- package/dist/components/content/ContentPageHeader.svelte +1 -1
- package/dist/components/content/ContentPageShell.svelte +1 -1
- package/dist/components/content/MetricBlock.svelte +1 -1
- package/dist/components/content/PageToolbar.svelte +1 -1
- package/dist/components/content/ReferenceNotice.svelte +5 -0
- package/dist/components/content/ReferenceNotice.svelte.d.ts +18 -0
- package/dist/components/content/SectionHeader.svelte +1 -1
- package/dist/components/content/SettingsFieldRow.svelte +1 -1
- package/dist/components/content/SettingsGroup.svelte +1 -1
- package/dist/components/content/StatusBadge.svelte +1 -1
- package/dist/components/content/WorkspaceLayout.svelte +1 -1
- package/dist/components/export-reference.d.ts +2 -0
- package/dist/components/export-reference.js +9 -0
- package/dist/components/fieldComponentMap.js +2 -5
- package/dist/components/fields/DateField.svelte +12 -13
- package/dist/components/fields/MarkdownField.svelte +14 -5
- package/dist/components/fields/date-display.d.ts +6 -0
- package/dist/components/fields/date-display.js +24 -0
- package/dist/components/network/TeamCrewTablePage.svelte +6 -1
- package/dist/components/network/UserCardsNFTPage.svelte +2 -0
- package/dist/components/profile/PublicProfilePage.svelte +2 -0
- package/dist/components/saved-list-views.d.ts +74 -1
- package/dist/components/saved-list-views.js +191 -3
- package/dist/components/table-contract.d.ts +12 -1
- package/dist/components/task-action.svelte.d.ts +13 -0
- package/dist/components/task-action.svelte.js +73 -0
- package/dist/components/ui/DesignSystemShowcase.svelte +164 -0
- package/dist/components/ui/DesignSystemShowcase.svelte.d.ts +3 -0
- package/dist/components/ui/badge/badge-variants.d.ts +3 -2
- package/dist/components/ui/badge/badge-variants.js +2 -3
- package/dist/components/ui/badge/badge.svelte +3 -0
- package/dist/components/ui/badge/badge.svelte.d.ts +1 -0
- package/dist/components/ui/button/button-variants.d.ts +5 -4
- package/dist/components/ui/button/button-variants.js +7 -5
- package/dist/components/ui/checkbox/checkbox.svelte +5 -1
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +5 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +1 -2
- package/dist/components/ui/input/input.svelte +7 -2
- package/dist/components/ui/input/input.svelte.d.ts +4 -1
- package/dist/components/ui/select/select.svelte +4 -1
- package/dist/components/ui/select/select.svelte.d.ts +2 -1
- package/dist/components/ui/textarea/textarea.svelte +2 -2
- package/dist/components.css +33 -2
- package/dist/date-input-policy.d.ts +4 -0
- package/dist/date-input-policy.js +35 -0
- package/dist/design-system-components.d.ts +100 -0
- package/dist/design-system-components.js +101 -0
- package/dist/design-system.js +1 -1
- package/dist/devtools-bridge.d.ts +80 -0
- package/dist/devtools-bridge.js +92 -0
- package/dist/editor-config.svelte.d.ts +4 -2
- package/dist/index.d.ts +37 -2
- package/dist/index.js +23 -2
- package/dist/recipes.d.ts +960 -4
- package/dist/recipes.js +264 -4
- package/dist/tree-table-model.d.ts +24 -0
- package/dist/tree-table-model.js +111 -0
- package/dist/types.d.ts +4 -4
- package/package.json +22 -10
- package/dist/styled-system/css/conditions.js +0 -36
- package/dist/styled-system/css/css.d.ts +0 -22
- package/dist/styled-system/css/css.js +0 -45
- package/dist/styled-system/css/cva.d.ts +0 -6
- package/dist/styled-system/css/cva.js +0 -87
- package/dist/styled-system/css/cx.d.ts +0 -5
- package/dist/styled-system/css/cx.js +0 -15
- package/dist/styled-system/css/index.d.ts +0 -5
- package/dist/styled-system/css/index.js +0 -4
- package/dist/styled-system/css/sva.d.ts +0 -4
- package/dist/styled-system/css/sva.js +0 -46
- package/dist/styled-system/helpers.js +0 -316
- package/dist/styled-system/patterns/aspect-ratio.d.ts +0 -20
- package/dist/styled-system/patterns/aspect-ratio.js +0 -38
- package/dist/styled-system/patterns/bleed.d.ts +0 -21
- package/dist/styled-system/patterns/bleed.js +0 -24
- package/dist/styled-system/patterns/box.d.ts +0 -20
- package/dist/styled-system/patterns/box.js +0 -15
- package/dist/styled-system/patterns/center.d.ts +0 -20
- package/dist/styled-system/patterns/center.js +0 -21
- package/dist/styled-system/patterns/circle.d.ts +0 -20
- package/dist/styled-system/patterns/circle.js +0 -25
- package/dist/styled-system/patterns/container.d.ts +0 -20
- package/dist/styled-system/patterns/container.js +0 -21
- package/dist/styled-system/patterns/cq.d.ts +0 -21
- package/dist/styled-system/patterns/cq.js +0 -21
- package/dist/styled-system/patterns/divider.d.ts +0 -22
- package/dist/styled-system/patterns/divider.js +0 -25
- package/dist/styled-system/patterns/flex.d.ts +0 -26
- package/dist/styled-system/patterns/flex.js +0 -26
- package/dist/styled-system/patterns/float.d.ts +0 -23
- package/dist/styled-system/patterns/float.js +0 -52
- package/dist/styled-system/patterns/grid-item.d.ts +0 -25
- package/dist/styled-system/patterns/grid-item.js +0 -25
- package/dist/styled-system/patterns/grid.d.ts +0 -24
- package/dist/styled-system/patterns/grid.js +0 -27
- package/dist/styled-system/patterns/hstack.d.ts +0 -21
- package/dist/styled-system/patterns/hstack.js +0 -24
- package/dist/styled-system/patterns/index.d.ts +0 -21
- package/dist/styled-system/patterns/index.js +0 -20
- package/dist/styled-system/patterns/link-overlay.d.ts +0 -20
- package/dist/styled-system/patterns/link-overlay.js +0 -24
- package/dist/styled-system/patterns/spacer.d.ts +0 -20
- package/dist/styled-system/patterns/spacer.js +0 -25
- package/dist/styled-system/patterns/square.d.ts +0 -20
- package/dist/styled-system/patterns/square.js +0 -24
- package/dist/styled-system/patterns/stack.d.ts +0 -23
- package/dist/styled-system/patterns/stack.js +0 -24
- package/dist/styled-system/patterns/visually-hidden.d.ts +0 -20
- package/dist/styled-system/patterns/visually-hidden.js +0 -18
- package/dist/styled-system/patterns/vstack.d.ts +0 -21
- package/dist/styled-system/patterns/vstack.js +0 -24
- package/dist/styled-system/patterns/wrap.d.ts +0 -24
- package/dist/styled-system/patterns/wrap.js +0 -25
- package/dist/styled-system/recipes/content-header.d.ts +0 -31
- package/dist/styled-system/recipes/content-header.js +0 -65
- package/dist/styled-system/recipes/content-page.d.ts +0 -34
- package/dist/styled-system/recipes/content-page.js +0 -43
- package/dist/styled-system/recipes/create-recipe.js +0 -82
- package/dist/styled-system/recipes/index.d.ts +0 -17
- package/dist/styled-system/recipes/index.js +0 -16
- package/dist/styled-system/recipes/metric-block.d.ts +0 -34
- package/dist/styled-system/recipes/metric-block.js +0 -76
- package/dist/styled-system/recipes/product-list.d.ts +0 -31
- package/dist/styled-system/recipes/product-list.js +0 -73
- package/dist/styled-system/recipes/product-section.d.ts +0 -31
- package/dist/styled-system/recipes/product-section.js +0 -49
- package/dist/styled-system/recipes/product-settings-row.d.ts +0 -34
- package/dist/styled-system/recipes/product-settings-row.js +0 -58
- package/dist/styled-system/recipes/product-settings.d.ts +0 -31
- package/dist/styled-system/recipes/product-settings.js +0 -57
- package/dist/styled-system/recipes/product-status.d.ts +0 -34
- package/dist/styled-system/recipes/product-status.js +0 -45
- package/dist/styled-system/recipes/product-toolbar.d.ts +0 -31
- package/dist/styled-system/recipes/product-toolbar.js +0 -41
- package/dist/styled-system/recipes/product-workspace.d.ts +0 -34
- package/dist/styled-system/recipes/product-workspace.js +0 -58
- package/dist/styled-system/recipes/surface-metric.d.ts +0 -38
- package/dist/styled-system/recipes/surface-metric.js +0 -63
- package/dist/styled-system/recipes/surface-table.d.ts +0 -34
- package/dist/styled-system/recipes/surface-table.js +0 -62
- package/dist/styled-system/recipes/ui-badge.d.ts +0 -31
- package/dist/styled-system/recipes/ui-badge.js +0 -38
- package/dist/styled-system/recipes/ui-button.d.ts +0 -32
- package/dist/styled-system/recipes/ui-button.js +0 -43
- package/dist/styled-system/recipes/ui-input.d.ts +0 -31
- package/dist/styled-system/recipes/ui-input.js +0 -49
- package/dist/styled-system/recipes/ui-textarea.d.ts +0 -31
- package/dist/styled-system/recipes/ui-textarea.js +0 -24
- package/dist/styled-system/styles.css +0 -1257
- package/dist/styled-system/tokens/index.d.ts +0 -9
- package/dist/styled-system/tokens/index.js +0 -268
- package/dist/styled-system/tokens/tokens.d.ts +0 -36
- package/dist/styled-system/types/composition.d.ts +0 -227
- package/dist/styled-system/types/conditions.d.ts +0 -236
- package/dist/styled-system/types/csstype.d.ts +0 -22570
- package/dist/styled-system/types/index.d.ts +0 -6
- package/dist/styled-system/types/parts.d.ts +0 -8
- package/dist/styled-system/types/pattern.d.ts +0 -78
- package/dist/styled-system/types/prop-type.d.ts +0 -223
- package/dist/styled-system/types/recipe.d.ts +0 -181
- package/dist/styled-system/types/selectors.d.ts +0 -59
- package/dist/styled-system/types/static-css.d.ts +0 -56
- package/dist/styled-system/types/style-props.d.ts +0 -8088
- package/dist/styled-system/types/system-types.d.ts +0 -151
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount } from 'svelte';
|
|
3
|
+
import { connectPanelChannel, type PanelChannel } from 'devframe/in-page-channel';
|
|
4
|
+
import {
|
|
5
|
+
SVADMIN_DEVFRAME_CHANNEL,
|
|
6
|
+
type DevtoolsQuerySelector,
|
|
7
|
+
type SvadminDevframeProtocol,
|
|
8
|
+
type SvadminDevtoolsSnapshot,
|
|
9
|
+
} from '../devtools-bridge.js';
|
|
10
|
+
|
|
11
|
+
let channel = $state<PanelChannel<SvadminDevframeProtocol> | null>(null);
|
|
12
|
+
let snapshot = $state<SvadminDevtoolsSnapshot | null>(null);
|
|
13
|
+
let status = $state('connecting');
|
|
14
|
+
let busy = $state(false);
|
|
15
|
+
let selectedProvider = $state('');
|
|
16
|
+
let selectedResource = $state('');
|
|
17
|
+
let selectedOperation = $state('');
|
|
18
|
+
|
|
19
|
+
const selector = $derived<DevtoolsQuerySelector>({
|
|
20
|
+
...(selectedProvider ? { provider: selectedProvider } : {}),
|
|
21
|
+
...(selectedResource ? { resource: selectedResource } : {}),
|
|
22
|
+
...(selectedOperation ? { operation: selectedOperation } : {}),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
async function run(action: (selector?: DevtoolsQuerySelector) => Promise<void> | void): Promise<void> {
|
|
26
|
+
if (!channel || !snapshot) return;
|
|
27
|
+
busy = true;
|
|
28
|
+
try {
|
|
29
|
+
await action(Object.keys(selector).length > 0 ? selector : undefined);
|
|
30
|
+
snapshot = await channel.call('getSnapshot');
|
|
31
|
+
} finally {
|
|
32
|
+
busy = false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
onMount(() => {
|
|
37
|
+
const nextChannel = connectPanelChannel<SvadminDevframeProtocol>({
|
|
38
|
+
name: SVADMIN_DEVFRAME_CHANNEL,
|
|
39
|
+
functions: {},
|
|
40
|
+
});
|
|
41
|
+
channel = nextChannel;
|
|
42
|
+
status = nextChannel.status;
|
|
43
|
+
const onStatus = () => {
|
|
44
|
+
status = nextChannel.status;
|
|
45
|
+
if (nextChannel.status === 'connected') {
|
|
46
|
+
void nextChannel.call('getSnapshot').then((next) => { snapshot = next; });
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
nextChannel.events.on('status:updated', onStatus);
|
|
50
|
+
onStatus();
|
|
51
|
+
return () => nextChannel.close();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
function unique(values: string[]): string[] {
|
|
55
|
+
return [...new Set(values)].sort();
|
|
56
|
+
}
|
|
57
|
+
</script>
|
|
58
|
+
|
|
59
|
+
<section aria-label="svadmin Devframe panel">
|
|
60
|
+
<header>
|
|
61
|
+
<strong>svadmin DevTools</strong>
|
|
62
|
+
<span>{status}</span>
|
|
63
|
+
</header>
|
|
64
|
+
|
|
65
|
+
{#if snapshot}
|
|
66
|
+
<dl>
|
|
67
|
+
<div><dt>Route</dt><dd>{snapshot.route}</dd></div>
|
|
68
|
+
<div><dt>Resources</dt><dd>{snapshot.resourceCount}</dd></div>
|
|
69
|
+
<div><dt>Queries</dt><dd>{snapshot.cache.queries.total}</dd></div>
|
|
70
|
+
<div><dt>Mutations</dt><dd>{snapshot.cache.mutations.total}</dd></div>
|
|
71
|
+
</dl>
|
|
72
|
+
<div>
|
|
73
|
+
<label>
|
|
74
|
+
Provider
|
|
75
|
+
<select bind:value={selectedProvider}>
|
|
76
|
+
<option value="">All</option>
|
|
77
|
+
{#each unique(snapshot.queries.map((query) => query.provider)) as provider (provider)}
|
|
78
|
+
<option value={provider}>{provider}</option>
|
|
79
|
+
{/each}
|
|
80
|
+
</select>
|
|
81
|
+
</label>
|
|
82
|
+
<label>
|
|
83
|
+
Resource
|
|
84
|
+
<select bind:value={selectedResource}>
|
|
85
|
+
<option value="">All</option>
|
|
86
|
+
{#each unique(snapshot.queries.map((query) => query.resource)) as resource (resource)}
|
|
87
|
+
<option value={resource}>{resource}</option>
|
|
88
|
+
{/each}
|
|
89
|
+
</select>
|
|
90
|
+
</label>
|
|
91
|
+
<label>
|
|
92
|
+
Operation
|
|
93
|
+
<select bind:value={selectedOperation}>
|
|
94
|
+
<option value="">All</option>
|
|
95
|
+
{#each unique(snapshot.queries.map((query) => query.operation)) as operation (operation)}
|
|
96
|
+
<option value={operation}>{operation}</option>
|
|
97
|
+
{/each}
|
|
98
|
+
</select>
|
|
99
|
+
</label>
|
|
100
|
+
</div>
|
|
101
|
+
{#if snapshot.queries.length > 0}
|
|
102
|
+
<ul>
|
|
103
|
+
{#each snapshot.queries as query (`${query.provider}:${query.resource}:${query.operation}`)}
|
|
104
|
+
<li>
|
|
105
|
+
<strong>{query.provider} / {query.resource}</strong>
|
|
106
|
+
<span>{query.operation} · {query.status} · {query.duration}</span>
|
|
107
|
+
</li>
|
|
108
|
+
{/each}
|
|
109
|
+
</ul>
|
|
110
|
+
{/if}
|
|
111
|
+
<div>
|
|
112
|
+
<button type="button" disabled={busy} onclick={() => run((selector) => channel?.call('cacheInvalidate', selector))}>Invalidate</button>
|
|
113
|
+
<button type="button" disabled={busy} onclick={() => run((selector) => channel?.call('cacheRefetch', selector))}>Refetch</button>
|
|
114
|
+
<button type="button" disabled={busy} onclick={() => run((selector) => channel?.call('cacheCancel', selector))}>Cancel</button>
|
|
115
|
+
<button type="button" disabled={busy} onclick={() => run((selector) => channel?.call('cacheReset', selector))}>Reset</button>
|
|
116
|
+
<button type="button" disabled={busy} onclick={() => run((selector) => channel?.call('cacheRemove', selector))}>Remove</button>
|
|
117
|
+
<button type="button" disabled={busy} onclick={() => run(() => channel?.call('cacheClear'))}>Clear cache</button>
|
|
118
|
+
<button type="button" disabled={busy} onclick={() => run(() => channel?.call('clearMutations'))}>Clear mutations</button>
|
|
119
|
+
</div>
|
|
120
|
+
{:else}
|
|
121
|
+
<p>Waiting for an svadmin page.</p>
|
|
122
|
+
{/if}
|
|
123
|
+
</section>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { useTranslation } from '@svadmin/core/i18n';
|
|
3
|
+
|
|
4
|
+
const i18n = useTranslation();
|
|
5
|
+
|
|
6
|
+
export interface FormErrorEntry {
|
|
7
|
+
fieldKey: string;
|
|
8
|
+
label: string;
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
errors = [],
|
|
14
|
+
title = i18n.t('common.formErrors'),
|
|
15
|
+
id,
|
|
16
|
+
onfocusfield,
|
|
17
|
+
} = $props<{
|
|
18
|
+
errors?: FormErrorEntry[];
|
|
19
|
+
title?: string;
|
|
20
|
+
id?: string;
|
|
21
|
+
onfocusfield?: (fieldKey: string) => void;
|
|
22
|
+
}>();
|
|
23
|
+
|
|
24
|
+
const headingId = $derived(id ? `${id}-title` : undefined);
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
{#if errors.length > 0}
|
|
28
|
+
<div
|
|
29
|
+
class="svadmin-u-ee1a5af3aa10"
|
|
30
|
+
role="region"
|
|
31
|
+
aria-labelledby={headingId}
|
|
32
|
+
>
|
|
33
|
+
<h2 id={headingId} class="svadmin-u-2689f3958069">{title}</h2>
|
|
34
|
+
<ul>
|
|
35
|
+
{#each errors as error (error.fieldKey)}
|
|
36
|
+
<li>
|
|
37
|
+
{#if onfocusfield}
|
|
38
|
+
<button
|
|
39
|
+
type="button"
|
|
40
|
+
class="svadmin-u-d4108abe6359"
|
|
41
|
+
onclick={() => onfocusfield?.(error.fieldKey)}
|
|
42
|
+
>
|
|
43
|
+
{error.label}: {error.message}
|
|
44
|
+
</button>
|
|
45
|
+
{:else}
|
|
46
|
+
<span>{error.label}: {error.message}</span>
|
|
47
|
+
{/if}
|
|
48
|
+
</li>
|
|
49
|
+
{/each}
|
|
50
|
+
</ul>
|
|
51
|
+
</div>
|
|
52
|
+
{/if}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface FormErrorEntry {
|
|
2
|
+
fieldKey: string;
|
|
3
|
+
label: string;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
type $$ComponentProps = {
|
|
7
|
+
errors?: FormErrorEntry[];
|
|
8
|
+
title?: string;
|
|
9
|
+
id?: string;
|
|
10
|
+
onfocusfield?: (fieldKey: string) => void;
|
|
11
|
+
};
|
|
12
|
+
declare const ErrorSummary: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
13
|
+
type ErrorSummary = ReturnType<typeof ErrorSummary>;
|
|
14
|
+
export default ErrorSummary;
|
|
@@ -24,6 +24,9 @@
|
|
|
24
24
|
import DateTimeInput from './DateTimeInput.svelte';
|
|
25
25
|
import DateRangeInput, { type DateRangeInputValue } from './DateRangeInput.svelte';
|
|
26
26
|
import FileUpload from './FileUpload.svelte';
|
|
27
|
+
import ColorPicker from './ColorPicker.svelte';
|
|
28
|
+
import Rate from './Rate.svelte';
|
|
29
|
+
import TagsInput from './TagsInput.svelte';
|
|
27
30
|
import TreeSelect, { type TreeSelectOption } from './TreeSelect.svelte';
|
|
28
31
|
import Cascader, { type CascaderOption } from './Cascader.svelte';
|
|
29
32
|
import Transfer, { type TransferItem } from './Transfer.svelte';
|
|
@@ -35,6 +38,7 @@
|
|
|
35
38
|
import { cn } from '../utils.js';
|
|
36
39
|
import { numericInputValue } from '../numeric-input.js';
|
|
37
40
|
|
|
41
|
+
type FieldOption = NonNullable<FieldDefinition['options']>[number];
|
|
38
42
|
const i18n = useTranslation();
|
|
39
43
|
|
|
40
44
|
let { field, value, onchange, disabled, invalid = false, errorId, density = 'comfortable', children } = $props<{
|
|
@@ -56,6 +60,10 @@
|
|
|
56
60
|
const boolVal = $derived((value as boolean) ?? false);
|
|
57
61
|
const tagsVal = $derived((value as string[]) ?? []);
|
|
58
62
|
const multiVal = $derived((value as (string | number)[]) ?? []);
|
|
63
|
+
const selectToken = $derived.by(() => {
|
|
64
|
+
const index = field.options?.findIndex((option: FieldOption) => option.value === value) ?? -1;
|
|
65
|
+
return index < 0 ? '' : `option:${index}`;
|
|
66
|
+
});
|
|
59
67
|
const imagesVal = $derived((value as string[]) ?? []);
|
|
60
68
|
let jsonEditText = $state('');
|
|
61
69
|
let jsonEditing = false;
|
|
@@ -65,24 +73,20 @@
|
|
|
65
73
|
jsonEditText = typeof value === 'string' ? String(value) : JSON.stringify(value, null, 2);
|
|
66
74
|
});
|
|
67
75
|
|
|
68
|
-
function
|
|
69
|
-
if (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
onchange([...tagsVal, tag]);
|
|
75
|
-
input.value = '';
|
|
76
|
-
}
|
|
76
|
+
function changeSelect(event: Event) {
|
|
77
|
+
if (disabled || !(event.currentTarget instanceof HTMLSelectElement)) return;
|
|
78
|
+
const token = event.currentTarget.value;
|
|
79
|
+
if (token === '') {
|
|
80
|
+
onchange(null);
|
|
81
|
+
return;
|
|
77
82
|
}
|
|
83
|
+
const option = field.options?.find((_option: FieldOption, index: number) => token === `option:${index}`);
|
|
84
|
+
if (option && !option.disabled) onchange(option.value);
|
|
78
85
|
}
|
|
79
86
|
|
|
80
|
-
|
|
81
|
-
onchange(tagsVal.filter((_: string, i: number) => i !== index));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Multiselect toggle
|
|
87
|
+
// 禁用值保留回显,但不能从复选框或标签删除入口修改。
|
|
85
88
|
function toggleMulti(optValue: string | number) {
|
|
89
|
+
if (disabled || field.options?.find((option: FieldOption) => option.value === optValue)?.disabled) return;
|
|
86
90
|
if (multiVal.includes(optValue)) {
|
|
87
91
|
onchange(multiVal.filter((v: string | number) => v !== optValue));
|
|
88
92
|
} else {
|
|
@@ -186,33 +190,17 @@
|
|
|
186
190
|
/>
|
|
187
191
|
|
|
188
192
|
{:else if field.type === 'color'}
|
|
189
|
-
<
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
/>
|
|
201
|
-
<Input
|
|
202
|
-
type="text"
|
|
203
|
-
value={strVal}
|
|
204
|
-
oninput={(e) => onchange((e.target as HTMLInputElement).value)}
|
|
205
|
-
placeholder="#000000"
|
|
206
|
-
class="svadmin-u-1d274d2422d8 svadmin-u-0e65706bcccd svadmin-u-fc7473ca09eb"
|
|
207
|
-
{disabled}
|
|
208
|
-
/>
|
|
209
|
-
{#if strVal}
|
|
210
|
-
<span
|
|
211
|
-
class="svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179 svadmin-u-ac204c108886 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-438b2237b8d6"
|
|
212
|
-
style="background-color: {strVal}"
|
|
213
|
-
></span>
|
|
214
|
-
{/if}
|
|
215
|
-
</div>
|
|
193
|
+
<ColorPicker
|
|
194
|
+
id={field.key}
|
|
195
|
+
name={field.key}
|
|
196
|
+
value={strVal}
|
|
197
|
+
onchange={onchange}
|
|
198
|
+
required={field.required}
|
|
199
|
+
invalid={invalid}
|
|
200
|
+
describedby={errorId}
|
|
201
|
+
ariaLabel={field.label}
|
|
202
|
+
{disabled}
|
|
203
|
+
/>
|
|
216
204
|
|
|
217
205
|
{:else if field.type === 'number'}
|
|
218
206
|
<NumberInput
|
|
@@ -361,14 +349,14 @@
|
|
|
361
349
|
/>
|
|
362
350
|
|
|
363
351
|
{:else if field.type === 'select'}
|
|
352
|
+
<input type="hidden" name={field.key} value={value == null ? '' : String(value)} {disabled} />
|
|
364
353
|
{#if (field.options?.length ?? 0) > 8}
|
|
365
354
|
<select
|
|
366
355
|
id={field.key}
|
|
367
|
-
name={field.key}
|
|
368
356
|
data-slot="select"
|
|
369
357
|
class="svadmin-u-60fbb7713999 svadmin-u-426b8b75185b svadmin-u-6da6a3c3f741 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-e5795dad4d22 svadmin-u-e6f9e383a762 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-fc7473ca09eb svadmin-u-582e6ef4b245 svadmin-u-9c24ab70af61 svadmin-u-55d048ebfb1c svadmin-u-608dd26cd5ba svadmin-u-80b9d0ae125f svadmin-u-6b22a22a9752 svadmin-u-5f533b3a7de7 svadmin-u-b29d8adbad2e"
|
|
370
|
-
value={
|
|
371
|
-
onchange={
|
|
358
|
+
value={selectToken}
|
|
359
|
+
onchange={changeSelect}
|
|
372
360
|
required={field.required}
|
|
373
361
|
aria-invalid={invalid || undefined}
|
|
374
362
|
aria-describedby={errorId}
|
|
@@ -376,30 +364,29 @@
|
|
|
376
364
|
>
|
|
377
365
|
<option value="">{i18n.t('field.selectPlaceholder')}</option>
|
|
378
366
|
{#each field.options ?? [] as opt, _i (_i)}
|
|
379
|
-
<option value={opt.
|
|
367
|
+
<option value={`option:${_i}`} disabled={opt.disabled}>{opt.label}</option>
|
|
380
368
|
{/each}
|
|
381
369
|
</select>
|
|
382
370
|
{:else}
|
|
383
371
|
<Select
|
|
384
372
|
id={field.key}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
onchange={(e) => onchange((e.target as HTMLSelectElement).value)}
|
|
373
|
+
value={selectToken}
|
|
374
|
+
onchange={changeSelect}
|
|
388
375
|
required={field.required}
|
|
389
376
|
aria-invalid={invalid || undefined}
|
|
390
377
|
aria-describedby={errorId}
|
|
391
378
|
{disabled}
|
|
392
|
-
placeholder={i18n.t('field.selectPlaceholder')}
|
|
393
379
|
>
|
|
380
|
+
<option value="">{i18n.t('field.selectPlaceholder')}</option>
|
|
394
381
|
{#each field.options ?? [] as opt, _i (_i)}
|
|
395
|
-
<option value={opt.
|
|
382
|
+
<option value={`option:${_i}`} disabled={opt.disabled}>{opt.label}</option>
|
|
396
383
|
{/each}
|
|
397
384
|
</Select>
|
|
398
385
|
{/if}
|
|
399
386
|
|
|
400
387
|
{:else if field.type === 'multiselect'}
|
|
401
388
|
{#each multiVal as selectedValue, selectedIndex (`${selectedValue}-${selectedIndex}`)}
|
|
402
|
-
<input type="hidden" name={`${field.key}[]`} value={String(selectedValue)} />
|
|
389
|
+
<input type="hidden" name={`${field.key}[]`} value={String(selectedValue)} {disabled} />
|
|
403
390
|
{/each}
|
|
404
391
|
<div
|
|
405
392
|
class="svadmin-u-6f7e013d6499 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-e5795dad4d22 svadmin-u-eb6e8b881acd svadmin-u-558f64349245 svadmin-u-92bf82f493b1"
|
|
@@ -411,12 +398,12 @@
|
|
|
411
398
|
{#each field.options ?? [] as opt, _i (_i)}
|
|
412
399
|
<label class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4 svadmin-u-fc7473ca09eb svadmin-u-34516836730d svadmin-u-39f703dbe296 svadmin-u-07389a777c1f svadmin-u-d8e0e382c67b svadmin-u-465609a240a8 svadmin-u-ceb69a6b0e5f">
|
|
413
400
|
<Checkbox
|
|
414
|
-
id={`${field.key}-${
|
|
401
|
+
id={`${field.key}-option-${_i}`}
|
|
415
402
|
checked={multiVal.includes(opt.value)}
|
|
416
403
|
onCheckedChange={() => toggleMulti(opt.value)}
|
|
417
404
|
aria-invalid={invalid || undefined}
|
|
418
405
|
aria-describedby={errorId}
|
|
419
|
-
disabled={disabled}
|
|
406
|
+
disabled={disabled || opt.disabled}
|
|
420
407
|
/>
|
|
421
408
|
{opt.label}
|
|
422
409
|
</label>
|
|
@@ -431,7 +418,7 @@
|
|
|
431
418
|
{@const label = field.options?.find((o: { label: string; value: string | number }) => o.value === v)?.label ?? String(v)}
|
|
432
419
|
<Badge variant="secondary" class="svadmin-u-44ee8ba0a421">
|
|
433
420
|
{label}
|
|
434
|
-
<button type="button" onclick={() => toggleMulti(v)} class="svadmin-u-b45ce4b65d53 svadmin-u-36d4469299aa svadmin-u-51e95020d6f2 svadmin-u-8db899b4e072 svadmin-u-ceb69a6b0e5f" aria-label={i18n.t('common.clear')}>×</button>
|
|
421
|
+
<button type="button" disabled={disabled || field.options?.find((option: FieldOption) => option.value === v)?.disabled} onclick={() => toggleMulti(v)} class="svadmin-u-b45ce4b65d53 svadmin-u-36d4469299aa svadmin-u-51e95020d6f2 svadmin-u-8db899b4e072 svadmin-u-ceb69a6b0e5f" aria-label={i18n.t('common.clear')}>×</button>
|
|
435
422
|
</Badge>
|
|
436
423
|
{/each}
|
|
437
424
|
</div>
|
|
@@ -452,39 +439,30 @@
|
|
|
452
439
|
</div>
|
|
453
440
|
|
|
454
441
|
{:else if field.type === 'tags'}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
class="svadmin-u-b45ce4b65d53 svadmin-u-36d4469299aa svadmin-u-51e95020d6f2 svadmin-u-8db899b4e072 svadmin-u-ceb69a6b0e5f"
|
|
467
|
-
aria-label={i18n.t('common.clear')}
|
|
468
|
-
>×</button>
|
|
469
|
-
</Badge>
|
|
470
|
-
{/each}
|
|
471
|
-
</div>
|
|
472
|
-
<Input
|
|
473
|
-
id={field.key}
|
|
474
|
-
type="text"
|
|
475
|
-
placeholder={i18n.t('field.tagsPlaceholder')}
|
|
476
|
-
onkeydown={handleTagKeydown}
|
|
477
|
-
aria-invalid={invalid || undefined}
|
|
478
|
-
aria-describedby={errorId}
|
|
479
|
-
{disabled}
|
|
480
|
-
/>
|
|
481
|
-
</div>
|
|
442
|
+
<TagsInput
|
|
443
|
+
name={`${field.key}[]`}
|
|
444
|
+
value={tagsVal}
|
|
445
|
+
onchange={onchange}
|
|
446
|
+
placeholder={i18n.t('field.tagsPlaceholder')}
|
|
447
|
+
required={field.required}
|
|
448
|
+
invalid={invalid}
|
|
449
|
+
describedby={errorId}
|
|
450
|
+
ariaLabel={field.label}
|
|
451
|
+
{disabled}
|
|
452
|
+
/>
|
|
482
453
|
|
|
483
454
|
{:else if field.type === 'date' || field.type === 'time' || field.type === 'datetime'}
|
|
484
455
|
<DateTimeInput
|
|
485
456
|
id={field.key}
|
|
486
457
|
name={field.key}
|
|
487
458
|
mode={field.type}
|
|
459
|
+
min={field.dateInput?.min}
|
|
460
|
+
max={field.dateInput?.max}
|
|
461
|
+
step={field.dateInput?.step}
|
|
462
|
+
disabledDate={field.dateInput?.disabledDate}
|
|
463
|
+
valueMode={field.dateInput?.valueMode}
|
|
464
|
+
timeZone={field.dateInput?.timeZone}
|
|
465
|
+
disambiguation={field.dateInput?.disambiguation}
|
|
488
466
|
value={strVal || null}
|
|
489
467
|
onchange={(next) => onchange(next)}
|
|
490
468
|
required={field.required}
|
|
@@ -496,7 +474,18 @@
|
|
|
496
474
|
{:else if field.type === 'daterange'}
|
|
497
475
|
<DateRangeInput
|
|
498
476
|
startId={`${field.key}-start`}
|
|
477
|
+
mode={field.dateInput?.rangeMode ?? 'date'}
|
|
478
|
+
valueMode={field.dateInput?.valueMode}
|
|
479
|
+
timeZone={field.dateInput?.timeZone}
|
|
480
|
+
disambiguation={field.dateInput?.disambiguation}
|
|
481
|
+
min={field.dateInput?.min}
|
|
482
|
+
max={field.dateInput?.max}
|
|
483
|
+
step={field.dateInput?.step}
|
|
484
|
+
disabledDate={field.dateInput?.disabledDate}
|
|
485
|
+
presets={field.dateInput?.presets}
|
|
499
486
|
endId={`${field.key}-end`}
|
|
487
|
+
startAriaLabel={`${field.label} ${i18n.t('common.startDate')}`}
|
|
488
|
+
endAriaLabel={`${field.label} ${i18n.t('common.endDate')}`}
|
|
500
489
|
startName={`${field.key}.start`}
|
|
501
490
|
endName={`${field.key}.end`}
|
|
502
491
|
value={value as DateRangeInputValue | null}
|
|
@@ -507,6 +496,18 @@
|
|
|
507
496
|
{disabled}
|
|
508
497
|
/>
|
|
509
498
|
|
|
499
|
+
{:else if field.type === 'rate' || field.type === 'rating'}
|
|
500
|
+
<Rate
|
|
501
|
+
name={field.key}
|
|
502
|
+
value={numVal ?? 0}
|
|
503
|
+
onchange={onchange}
|
|
504
|
+
required={field.required}
|
|
505
|
+
invalid={invalid}
|
|
506
|
+
describedby={errorId}
|
|
507
|
+
ariaLabel={field.label}
|
|
508
|
+
{disabled}
|
|
509
|
+
/>
|
|
510
|
+
|
|
510
511
|
{:else if field.type === 'file'}
|
|
511
512
|
<FileUpload
|
|
512
513
|
id={field.key}
|