@svadmin/ui 0.72.0 → 0.74.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 +62 -22
- package/THIRD_PARTY_NOTICES.md +52 -0
- package/dist/app.css +8488 -6297
- package/dist/app.theme.css +8514 -6374
- package/dist/class-properties.generated.d.ts +1 -0
- package/dist/class-properties.generated.js +2 -0
- package/dist/classnames.d.ts +8 -0
- package/dist/classnames.js +26 -0
- 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 +19 -10
- 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 +53 -9
- package/dist/components/AutoForm.svelte.d.ts +3 -0
- package/dist/components/AutoTable.svelte +846 -43
- package/dist/components/AutoTable.svelte.d.ts +22 -1
- package/dist/components/BoundRecordDetailDrawer.svelte +17 -2
- package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +4 -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 +143 -34
- package/dist/components/ComboboxField.svelte.d.ts +4 -2
- package/dist/components/CreatePage.svelte +4 -0
- package/dist/components/CreatePage.svelte.d.ts +2 -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 +155 -0
- package/dist/components/DateRangeInput.svelte.d.ts +35 -0
- package/dist/components/DateRangePicker.svelte +10 -0
- package/dist/components/DateRangePicker.svelte.d.ts +6 -0
- package/dist/components/DateTimeInput.svelte +134 -0
- package/dist/components/DateTimeInput.svelte.d.ts +27 -0
- package/dist/components/DateTimePicker.svelte +10 -0
- package/dist/components/DateTimePicker.svelte.d.ts +6 -0
- package/dist/components/DevTools.svelte +36 -28
- package/dist/components/DevframePanel.svelte +123 -0
- package/dist/components/DevframePanel.svelte.d.ts +3 -0
- package/dist/components/EditPage.svelte +4 -0
- package/dist/components/EditPage.svelte.d.ts +2 -0
- package/dist/components/ErrorSummary.svelte +52 -0
- package/dist/components/ErrorSummary.svelte.d.ts +14 -0
- package/dist/components/FieldRenderer.svelte +172 -99
- package/dist/components/FileUpload.svelte +412 -0
- package/dist/components/FileUpload.svelte.d.ts +43 -0
- package/dist/components/FilterBuilder.svelte +244 -265
- package/dist/components/FilterBuilder.svelte.d.ts +3 -0
- 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 +509 -100
- package/dist/components/ImportWizard.svelte.d.ts +11 -0
- package/dist/components/JsonSchemaForm.svelte +322 -98
- package/dist/components/JsonSchemaForm.svelte.d.ts +18 -1
- package/dist/components/KanbanBoard.svelte +195 -40
- package/dist/components/KanbanBoard.svelte.d.ts +9 -2
- package/dist/components/Layout.svelte +4 -3
- 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/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/LazyTaskQueueDrawer.svelte.d.ts +1 -1
- package/dist/components/ListPage.svelte +9 -1
- package/dist/components/ListPage.svelte.d.ts +5 -0
- package/dist/components/LoginPage.svelte +2 -2
- package/dist/components/MoneyInput.svelte +25 -0
- package/dist/components/MoneyInput.svelte.d.ts +20 -0
- 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/NumberInput.svelte +25 -0
- package/dist/components/NumberInput.svelte.d.ts +19 -0
- package/dist/components/NumericInput.svelte +110 -0
- package/dist/components/NumericInput.svelte.d.ts +23 -0
- package/dist/components/PercentInput.svelte +25 -0
- package/dist/components/PercentInput.svelte.d.ts +20 -0
- 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/QuickEditDrawer.svelte +4 -1
- package/dist/components/QuickEditDrawer.svelte.d.ts +2 -0
- 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 +6 -2
- package/dist/components/RecordDetailDrawer.svelte.d.ts +4 -0
- package/dist/components/RelationPicker.svelte +341 -0
- package/dist/components/RelationPicker.svelte.d.ts +26 -0
- package/dist/components/ResourceOperationsPage.svelte +25 -19
- package/dist/components/ResourceOperationsPage.svelte.d.ts +5 -1
- 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/ShowInferencer.svelte +4 -2
- package/dist/components/ShowInferencer.svelte.d.ts +2 -0
- package/dist/components/ShowPage.svelte +25 -6
- package/dist/components/ShowPage.svelte.d.ts +5 -0
- package/dist/components/Sidebar.svelte +5 -5
- package/dist/components/Slider.svelte +100 -0
- package/dist/components/Slider.svelte.d.ts +19 -0
- package/dist/components/SpreadsheetView.svelte +1037 -124
- package/dist/components/SpreadsheetView.svelte.d.ts +19 -0
- package/dist/components/StepsForm.svelte +5 -5
- package/dist/components/SvarAutoTable.svelte +39 -0
- package/dist/components/SvarAutoTable.svelte.d.ts +13 -0
- package/dist/components/SvarDataGrid.svelte +362 -0
- package/dist/components/SvarDataGrid.svelte.d.ts +57 -0
- package/dist/components/SvarGridCell.svelte +10 -0
- package/dist/components/SvarGridCell.svelte.d.ts +7 -0
- package/dist/components/SvarResourceRead.svelte +50 -0
- package/dist/components/SvarResourceRead.svelte.d.ts +23 -0
- package/dist/components/SvarResourceTable.svelte +63 -0
- package/dist/components/SvarResourceTable.svelte.d.ts +42 -0
- package/dist/components/SvarResourceTableView.svelte +364 -0
- package/dist/components/SvarResourceTableView.svelte.d.ts +4 -0
- package/dist/components/TagsInput.svelte +178 -0
- package/dist/components/TagsInput.svelte.d.ts +17 -0
- package/dist/components/TaskQueueDrawer.svelte +72 -16
- package/dist/components/TimePicker.svelte +10 -0
- package/dist/components/TimePicker.svelte.d.ts +6 -0
- package/dist/components/TreeSelect.svelte +440 -46
- package/dist/components/TreeSelect.svelte.d.ts +6 -1
- 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/auto-table-grid.d.ts +26 -0
- package/dist/components/auto-table-grid.js +1 -0
- package/dist/components/buttons/ExportButton.svelte +56 -12
- package/dist/components/buttons/ExportButton.svelte.d.ts +11 -0
- package/dist/components/content/ContentPageHeader.svelte +12 -9
- package/dist/components/content/ContentPageShell.svelte +6 -9
- package/dist/components/content/FileBrowser.svelte +35 -0
- package/dist/components/content/FileBrowser.svelte.d.ts +14 -0
- package/dist/components/content/MetricBlock.svelte +10 -13
- package/dist/components/content/NetworkTable.svelte +3 -3
- package/dist/components/content/NetworkTable.svelte.d.ts +1 -0
- package/dist/components/content/PageToolbar.svelte +6 -10
- package/dist/components/content/ReferenceNotice.svelte +5 -0
- package/dist/components/content/ReferenceNotice.svelte.d.ts +18 -0
- package/dist/components/content/SectionHeader.svelte +8 -13
- package/dist/components/content/SettingsFieldRow.svelte +9 -23
- package/dist/components/content/SettingsGroup.svelte +11 -27
- package/dist/components/content/StatusBadge.svelte +3 -8
- package/dist/components/content/WorkspaceLayout.svelte +8 -12
- package/dist/components/enterprise/filter-tree.d.ts +48 -0
- package/dist/components/enterprise/filter-tree.js +224 -0
- package/dist/components/enterprise/json-schema-form.d.ts +39 -0
- package/dist/components/enterprise/json-schema-form.js +195 -0
- package/dist/components/enterprise/recursive-schema-form.d.ts +30 -0
- package/dist/components/enterprise/recursive-schema-form.js +196 -0
- package/dist/components/enterprise/spreadsheet-formula.d.ts +12 -0
- package/dist/components/enterprise/spreadsheet-formula.js +245 -0
- package/dist/components/export-reference.d.ts +2 -0
- package/dist/components/export-reference.js +9 -0
- package/dist/components/fieldComponentMap.js +2 -0
- package/dist/components/fields/DateField.svelte +12 -12
- package/dist/components/fields/date-display.d.ts +6 -0
- package/dist/components/fields/date-display.js +24 -0
- package/dist/components/fields/date-field-value.d.ts +2 -0
- package/dist/components/fields/date-field-value.js +13 -0
- package/dist/components/json-schema-form-state.d.ts +37 -0
- package/dist/components/json-schema-form-state.js +168 -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/record-detail.svelte.d.ts +3 -0
- package/dist/components/record-detail.svelte.js +10 -4
- package/dist/components/saved-list-views.d.ts +74 -1
- package/dist/components/saved-list-views.js +191 -3
- package/dist/components/svar-grid-cells.d.ts +14 -0
- package/dist/components/svar-grid-cells.js +2 -0
- package/dist/components/svar-grid-contract.d.ts +80 -0
- package/dist/components/svar-grid-contract.js +159 -0
- package/dist/components/svar-grid-interactions.d.ts +54 -0
- package/dist/components/svar-grid-interactions.js +174 -0
- package/dist/components/svar-grid-loading.d.ts +40 -0
- package/dist/components/svar-grid-loading.js +180 -0
- package/dist/components/svar-grid-operations.d.ts +37 -0
- package/dist/components/svar-grid-operations.js +186 -0
- package/dist/components/svar-grid-panes.d.ts +34 -0
- package/dist/components/svar-grid-panes.js +66 -0
- package/dist/components/svar-grid-resource-loading.d.ts +18 -0
- package/dist/components/svar-grid-resource-loading.js +68 -0
- package/dist/components/svar-grid-resource-session.svelte.d.ts +29 -0
- package/dist/components/svar-grid-resource-session.svelte.js +61 -0
- 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 -1
- 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 -2
- package/dist/components/ui/checkbox/checkbox.svelte +5 -1
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +5 -1
- package/dist/components/ui/input/input.svelte +8 -6
- 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 -1
- package/dist/components.css +3110 -0
- package/dist/date-input-policy.d.ts +4 -0
- package/dist/date-input-policy.js +35 -0
- package/dist/design-contract.d.ts +13 -0
- package/dist/design-contract.js +11 -0
- package/dist/design-system-components.d.ts +100 -0
- package/dist/design-system-components.js +101 -0
- package/dist/design-system.d.ts +15 -0
- package/dist/design-system.js +7 -0
- package/dist/devtools-bridge.d.ts +80 -0
- package/dist/devtools-bridge.js +92 -0
- package/dist/index.d.ts +50 -1
- package/dist/index.js +32 -2
- package/dist/page-chrome.css +12 -49
- package/dist/recipes.d.ts +960 -0
- package/dist/recipes.js +264 -0
- package/dist/rendering/index.d.ts +87 -0
- package/dist/rendering/index.js +117 -0
- package/dist/styles/aliases.css +49 -0
- package/dist/styles/compatibility.epilogue.css +384 -0
- package/dist/styles/compatibility.prelude.css +5513 -0
- package/dist/styles/conditional-states.css +28 -0
- package/dist/styles/conditional-utilities.css +22 -0
- package/dist/tree-table-model.d.ts +24 -0
- package/dist/tree-table-model.js +111 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/package.json +40 -10
- package/styles-compatibility.json +12 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Filter, KnownResources } from '@svadmin/core';
|
|
2
|
+
export interface RelationPickerOption {
|
|
3
|
+
value: string | number;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
interface Props {
|
|
7
|
+
resource: KnownResources;
|
|
8
|
+
value?: string | number | null | (string | number)[];
|
|
9
|
+
onchange?: (value: string | number | null | (string | number)[]) => void;
|
|
10
|
+
optionLabel?: string;
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
title?: string;
|
|
13
|
+
multiple?: boolean;
|
|
14
|
+
searchable?: boolean;
|
|
15
|
+
fetchSize?: number;
|
|
16
|
+
sorters?: {
|
|
17
|
+
field: string;
|
|
18
|
+
order: 'asc' | 'desc';
|
|
19
|
+
}[];
|
|
20
|
+
filters?: Filter[];
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
allowClear?: boolean;
|
|
23
|
+
}
|
|
24
|
+
declare const RelationPicker: import("svelte").Component<Props, {}, "">;
|
|
25
|
+
type RelationPicker = ReturnType<typeof RelationPicker>;
|
|
26
|
+
export default RelationPicker;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type { Component } from 'svelte';
|
|
2
|
+
import { captureAdminContext, useCan, useNavigation } from '@svadmin/core';
|
|
3
|
+
import type { Component, ComponentProps } from 'svelte';
|
|
4
|
+
import type { ResourceRendering } from '../rendering/index.js';
|
|
4
5
|
import AutoTable from './AutoTable.svelte';
|
|
5
6
|
import { Badge } from './ui/badge/index.js';
|
|
6
7
|
import { Button } from './ui/button/index.js';
|
|
@@ -44,6 +45,7 @@
|
|
|
44
45
|
|
|
45
46
|
interface Props {
|
|
46
47
|
resourceName: string;
|
|
48
|
+
rendering?: ResourceRendering | undefined;
|
|
47
49
|
eyebrow: string;
|
|
48
50
|
title: string;
|
|
49
51
|
description: string;
|
|
@@ -57,10 +59,12 @@
|
|
|
57
59
|
emptyLanesText?: string;
|
|
58
60
|
highlightsLabel?: string;
|
|
59
61
|
workspaceStyle?: WorkspaceStyle;
|
|
62
|
+
tableProps?: Omit<ComponentProps<typeof AutoTable>, 'resourceName'>;
|
|
60
63
|
}
|
|
61
64
|
|
|
62
65
|
let {
|
|
63
66
|
resourceName,
|
|
67
|
+
rendering,
|
|
64
68
|
eyebrow,
|
|
65
69
|
title,
|
|
66
70
|
description,
|
|
@@ -74,9 +78,11 @@
|
|
|
74
78
|
emptyLanesText = 'No grouped records yet.',
|
|
75
79
|
highlightsLabel = 'Focus queue',
|
|
76
80
|
workspaceStyle = 'operations',
|
|
81
|
+
tableProps = {},
|
|
77
82
|
}: Props = $props();
|
|
78
83
|
const navigation = useNavigation();
|
|
79
|
-
const
|
|
84
|
+
const context = captureAdminContext();
|
|
85
|
+
const resource = $derived(context.getResource(resourceName));
|
|
80
86
|
const createPermission = useCan(() => ({ resource: resourceName, action: 'create' }));
|
|
81
87
|
const showCreate = $derived(resource.canCreate !== false && createPermission.allowed);
|
|
82
88
|
</script>
|
|
@@ -94,18 +100,18 @@
|
|
|
94
100
|
|
|
95
101
|
{#if workspaceStyle === 'inventory'}
|
|
96
102
|
<section class="svadmin-u-f3c543ad5fe9 svadmin-u-0d304f904cb0 svadmin-u-64f847a259bc" data-svadmin-inventory-layout>
|
|
97
|
-
<div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-50d0d216a2f8 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></div>
|
|
103
|
+
<div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-50d0d216a2f8 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></div>
|
|
98
104
|
<aside class="svadmin-u-b43b4c086d9a"><section><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-eccd13ef4f2f svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-8b8196092091 svadmin-u-18049387f0af">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-1b2d54a3fd12"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{:else}<p class="svadmin-u-1b2d54a3fd12 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{emptyLanesText}</p>{/each}</div></section><section><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><div class="svadmin-u-eccd13ef4f2f svadmin-u-6f7e013d6499">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div></section></aside>
|
|
99
105
|
</section>
|
|
100
106
|
{:else if workspaceStyle === 'operations'}
|
|
101
107
|
<section class="svadmin-u-b43b4c086d9a" data-svadmin-operations-layout>
|
|
102
108
|
<div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-478497d5efa5"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><div class="svadmin-u-0ab8667228fd svadmin-u-3e7ce58d64fa">{#each lanes as lane (lane.label)}<div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-fc7473ca09eb"><span class="svadmin-u-2689f3958069">{lane.label}</span><span class="svadmin-u-bfa603190748">{lane.value}</span></div><div class="svadmin-u-50d0d216a2f8 svadmin-u-095acb275581 svadmin-u-2cd02d11d1af svadmin-u-ac204c108886 svadmin-u-2ef11f1cb219"><div class="svadmin-u-668b21aa5409 svadmin-u-ac204c108886 svadmin-u-75b1bec3ea0e" style:width={`${Math.min(100, Math.max(12, Number(lane.value) * 8))}%`}></div></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</div></div><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-f3c543ad5fe9 svadmin-u-77a2a20e90d4 svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12 svadmin-u-18d3e28787c3"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}{#if item.meta}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.meta}</span>{/if}</div></div>{/each}</div></div></div>
|
|
103
109
|
<div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div><p class="svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div>
|
|
104
|
-
<AutoTable {resourceName} />
|
|
110
|
+
<AutoTable {...tableProps} {resourceName} {rendering} />
|
|
105
111
|
</section>
|
|
106
112
|
{:else if workspaceStyle === 'orders'}
|
|
107
113
|
<section class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-956fcc198f22" data-svadmin-orders-layout>
|
|
108
|
-
<div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-f57e7530965b svadmin-u-6cbc84dd9e1a svadmin-u-81976f3f2c63"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></div>
|
|
114
|
+
<div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-f57e7530965b svadmin-u-6cbc84dd9e1a svadmin-u-81976f3f2c63"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></div>
|
|
109
115
|
<aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{tableDescription}</p></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside>
|
|
110
116
|
</section>
|
|
111
117
|
{:else if workspaceStyle === 'people'}
|
|
@@ -115,51 +121,51 @@
|
|
|
115
121
|
<div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a svadmin-u-bb10ec63a8d0">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-1b2d54a3fd12"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
|
|
116
122
|
<div class="svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div>
|
|
117
123
|
</aside>
|
|
118
|
-
<div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558">{#each highlights as item (item.title)}<article class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-0c3bc98565dd svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</article>{/each}</div><AutoTable {resourceName} /></div>
|
|
124
|
+
<div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558">{#each highlights as item (item.title)}<article class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-0c3bc98565dd svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</article>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></div>
|
|
119
125
|
</section>
|
|
120
126
|
{:else if workspaceStyle === 'calendar'}
|
|
121
127
|
<section class="svadmin-u-b43b4c086d9a" data-svadmin-calendar-layout>
|
|
122
128
|
<div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
|
|
123
129
|
<div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-d9a1932be4d4"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<article class="svadmin-u-f3c543ad5fe9 svadmin-u-77a2a20e90d4 svadmin-u-8e63407b5ceb svadmin-u-8045cf4c0182"><p class="svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</article>{/each}</div></div><aside class="svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</aside></div>
|
|
124
|
-
<AutoTable {resourceName} />
|
|
130
|
+
<AutoTable {...tableProps} {resourceName} {rendering} />
|
|
125
131
|
</section>
|
|
126
132
|
{:else if workspaceStyle === 'crm'}
|
|
127
133
|
<section class="svadmin-u-b43b4c086d9a" data-svadmin-crm-layout>
|
|
128
134
|
<div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-f57e7530965b svadmin-u-6cbc84dd9e1a svadmin-u-81976f3f2c63"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
|
|
129
135
|
<div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-4a33def12a78"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-ab1b20c2292a">{#each lanes as lane (lane.label)}<section class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-8e63407b5ceb svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</section>{/each}</div><aside class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558">{#each highlights as item (item.title)}<article class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</aside></div>
|
|
130
|
-
<AutoTable {resourceName} />
|
|
136
|
+
<AutoTable {...tableProps} {resourceName} {rendering} />
|
|
131
137
|
</section>
|
|
132
138
|
{:else if workspaceStyle === 'property'}
|
|
133
139
|
<section class="svadmin-u-b43b4c086d9a" data-svadmin-property-layout>
|
|
134
140
|
<div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-64f847a259bc"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-e4d6f343b9ff">{#each highlights as item (item.title)}<Card.Root><Card.Content class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-89a62219c1a7 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-20aaf08a7ed1">{#if Icon}<Icon class="svadmin-u-cc46d0fa277d" />{/if}</div><div class="svadmin-u-0ab8667228fd svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.title}</h2>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><aside class="svadmin-u-3e7ce58d64fa">{#each metrics as metric (metric.label)}<div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div>
|
|
135
|
-
<AutoTable {resourceName} />
|
|
141
|
+
<AutoTable {...tableProps} {resourceName} {rendering} />
|
|
136
142
|
</section>
|
|
137
143
|
{:else if workspaceStyle === 'ai'}
|
|
138
144
|
<section class="svadmin-u-f3c543ad5fe9 svadmin-u-479a710e57e6 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-cecf8bbb11d7" data-svadmin-ai-layout>
|
|
139
145
|
<aside class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-967d113a1451 svadmin-u-8e63407b5ceb svadmin-u-e2f2b4a69d35 svadmin-u-64a6e3fce6e0"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-0ab8667228fd svadmin-u-6f7e013d6499">{#each lanes as lane (lane.label)}<div class="svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</div></aside>
|
|
140
|
-
<div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-8e63407b5ceb">{#each highlights as item (item.title)}<article class="svadmin-u-2cc8041eca99 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-fc7473ca09eb svadmin-u-18550d5945ae svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {resourceName} /></div></div>
|
|
146
|
+
<div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-8e63407b5ceb">{#each highlights as item (item.title)}<article class="svadmin-u-2cc8041eca99 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-fc7473ca09eb svadmin-u-18550d5945ae svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {...tableProps} {resourceName} {rendering} /></div></div>
|
|
141
147
|
</section>
|
|
142
148
|
{:else if workspaceStyle === 'communications'}
|
|
143
149
|
<section class="svadmin-u-f3c543ad5fe9 svadmin-u-89904d276530 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c98d73ab4dcd" data-svadmin-communications-layout>
|
|
144
150
|
<nav class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-967d113a1451 svadmin-u-eb6e8b881acd svadmin-u-e2f2b4a69d35 svadmin-u-64a6e3fce6e0">{#each lanes as lane (lane.label)}<button class="svadmin-u-60fbb7713999 svadmin-u-6da6a3c3f741 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-421ac2be5045 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-2eba0d65d059 svadmin-u-fc7473ca09eb svadmin-u-300b7bc3815e"><span><span class="svadmin-u-0214b4b355d1 svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</span>{#if lane.hint}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</span>{/if}</span><Badge variant="outline">{lane.value}</Badge></button>{/each}</nav>
|
|
145
|
-
<div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<article class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb svadmin-u-18d3e28787c3"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}{#if item.meta}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.meta}</span>{/if}</div></article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {resourceName} /></div></div>
|
|
151
|
+
<div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<article class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb svadmin-u-18d3e28787c3"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}{#if item.meta}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.meta}</span>{/if}</div></article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {...tableProps} {resourceName} {rendering} /></div></div>
|
|
146
152
|
</section>
|
|
147
153
|
{:else if workspaceStyle === 'store'}
|
|
148
|
-
<section class="svadmin-u-b43b4c086d9a" data-svadmin-store-layout><div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-0c3bc98565dd svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e svadmin-u-020ba687fa12 svadmin-u-f89e35297f0f svadmin-u-3b9871a0bf93"><div><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p></div><div class="svadmin-u-60fbb7713999 svadmin-u-b39e60c339f4">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div></div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-e4d6f343b9ff svadmin-u-b86f7f946cd8">{#each highlights as item (item.title)}<Card.Root><Card.Content class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-9e50f522071f svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-20aaf08a7ed1">{#if Icon}<Icon class="svadmin-u-d8f5213f0fe0" />{/if}</div><div class="svadmin-u-0ab8667228fd svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><h3 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.title}</h3>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-4d62c2e3009b"><aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><div class="svadmin-u-eccd13ef4f2f svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside><AutoTable {resourceName} /></div></section>
|
|
154
|
+
<section class="svadmin-u-b43b4c086d9a" data-svadmin-store-layout><div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-0c3bc98565dd svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e svadmin-u-020ba687fa12 svadmin-u-f89e35297f0f svadmin-u-3b9871a0bf93"><div><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p></div><div class="svadmin-u-60fbb7713999 svadmin-u-b39e60c339f4">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div></div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-e4d6f343b9ff svadmin-u-b86f7f946cd8">{#each highlights as item (item.title)}<Card.Root><Card.Content class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-9e50f522071f svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-20aaf08a7ed1">{#if Icon}<Icon class="svadmin-u-d8f5213f0fe0" />{/if}</div><div class="svadmin-u-0ab8667228fd svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><h3 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.title}</h3>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-4d62c2e3009b"><aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><div class="svadmin-u-eccd13ef4f2f svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside><AutoTable {...tableProps} {resourceName} {rendering} /></div></section>
|
|
149
155
|
{:else if workspaceStyle === 'planning'}
|
|
150
|
-
<section class="svadmin-u-b43b4c086d9a" data-svadmin-planning-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-19d9b25e8fae">{#each lanes as lane, laneIndex (lane.label)}<section class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-eb6e8b881acd">{#each highlights.filter((_, itemIndex) => itemIndex % lanes.length === laneIndex) as item (item.title)}<article class="svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div></section>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></section>
|
|
156
|
+
<section class="svadmin-u-b43b4c086d9a" data-svadmin-planning-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-19d9b25e8fae">{#each lanes as lane, laneIndex (lane.label)}<section class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-eb6e8b881acd">{#each highlights.filter((_, itemIndex) => itemIndex % lanes.length === laneIndex) as item (item.title)}<article class="svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div></section>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></section>
|
|
151
157
|
{:else if workspaceStyle === 'generation'}
|
|
152
158
|
<section class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-fd0beb7ec078" data-svadmin-generation-layout>
|
|
153
159
|
<aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><div class="svadmin-u-0ab8667228fd svadmin-u-3e7ce58d64fa">{#each lanes as lane, index (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-1004c0c3954c"><span class="svadmin-u-60fbb7713999 svadmin-u-cc46d0fa277d svadmin-u-012fbd121f37 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-2ef11f1cb219 svadmin-u-359090c2d529 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{index + 1}</span><div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div></div>{/each}</div></aside>
|
|
154
|
-
<div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}</article>{/each}</div><AutoTable {resourceName} /></div>
|
|
160
|
+
<div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}</article>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></div>
|
|
155
161
|
</section>
|
|
156
162
|
{:else if workspaceStyle === 'billing'}
|
|
157
|
-
<section class="svadmin-u-b43b4c086d9a" data-svadmin-billing-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<Card.Root><Card.Header><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><Card.Title class="svadmin-u-4ee734926ff6">{item.title}</Card.Title>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<Card.Description>{item.description}</Card.Description>{/if}</Card.Header><Card.Content>{#if item.meta}<p class="svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.meta}</p>{/if}<Button variant="outline" size="sm" class="svadmin-u-0ab8667228fd svadmin-u-6da6a3c3f741">{actionLabel}</Button></Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-64f847a259bc"><AutoTable {resourceName} /><aside class="svadmin-u-3e7ce58d64fa">{#each metrics as metric (metric.label)}<div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div></section>
|
|
163
|
+
<section class="svadmin-u-b43b4c086d9a" data-svadmin-billing-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<Card.Root><Card.Header><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><Card.Title class="svadmin-u-4ee734926ff6">{item.title}</Card.Title>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<Card.Description>{item.description}</Card.Description>{/if}</Card.Header><Card.Content>{#if item.meta}<p class="svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.meta}</p>{/if}<Button variant="outline" size="sm" class="svadmin-u-0ab8667228fd svadmin-u-6da6a3c3f741">{actionLabel}</Button></Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-64f847a259bc"><AutoTable {...tableProps} {resourceName} {rendering} /><aside class="svadmin-u-3e7ce58d64fa">{#each metrics as metric (metric.label)}<div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div></section>
|
|
158
164
|
{:else if workspaceStyle === 'security'}
|
|
159
|
-
<section class="svadmin-u-b43b4c086d9a" data-svadmin-security-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-2ee0591bf105"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-bfa603190748">{metrics[0]?.label}</p><p class="svadmin-u-eccd13ef4f2f svadmin-u-751fb0d102ba svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metrics[0]?.value}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metrics[0]?.hint}</p><div class="svadmin-u-fb77735ed17c svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></div><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</div>{/each}</div></div></div><AutoTable {resourceName} /></section>
|
|
165
|
+
<section class="svadmin-u-b43b4c086d9a" data-svadmin-security-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-2ee0591bf105"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-bfa603190748">{metrics[0]?.label}</p><p class="svadmin-u-eccd13ef4f2f svadmin-u-751fb0d102ba svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metrics[0]?.value}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metrics[0]?.hint}</p><div class="svadmin-u-fb77735ed17c svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></div><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</div>{/each}</div></div></div><AutoTable {...tableProps} {resourceName} {rendering} /></section>
|
|
160
166
|
{:else if workspaceStyle === 'referral'}
|
|
161
|
-
<section class="svadmin-u-f3c543ad5fe9 svadmin-u-0d304f904cb0 svadmin-u-4a33def12a78" data-svadmin-referral-layout><div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-fb77735ed17c svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p></div>{/each}</div></div><AutoTable {resourceName} /></div><aside class="svadmin-u-6ed543e2fbbb">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-0e65706bcccd svadmin-u-359090c2d529 svadmin-u-d4108abe6359">{item.meta}</p>{/if}</article>{/each}</aside></section>
|
|
167
|
+
<section class="svadmin-u-f3c543ad5fe9 svadmin-u-0d304f904cb0 svadmin-u-4a33def12a78" data-svadmin-referral-layout><div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-fb77735ed17c svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p></div>{/each}</div></div><AutoTable {...tableProps} {resourceName} {rendering} /></div><aside class="svadmin-u-6ed543e2fbbb">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-0e65706bcccd svadmin-u-359090c2d529 svadmin-u-d4108abe6359">{item.meta}</p>{/if}</article>{/each}</aside></section>
|
|
162
168
|
{:else}
|
|
163
|
-
<section class="svadmin-u-3e7ce58d64fa" data-svadmin-default-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div><AutoTable {resourceName} /></section>
|
|
169
|
+
<section class="svadmin-u-3e7ce58d64fa" data-svadmin-default-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div><AutoTable {...tableProps} {resourceName} {rendering} /></section>
|
|
164
170
|
{/if}
|
|
165
171
|
</div>
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { Component } from 'svelte';
|
|
1
|
+
import type { Component, ComponentProps } from 'svelte';
|
|
2
|
+
import type { ResourceRendering } from '../rendering/index.js';
|
|
3
|
+
import AutoTable from './AutoTable.svelte';
|
|
2
4
|
interface SummaryMetric {
|
|
3
5
|
label: string;
|
|
4
6
|
value: string | number;
|
|
@@ -18,6 +20,7 @@ interface HighlightItem {
|
|
|
18
20
|
type WorkspaceStyle = 'inventory' | 'operations' | 'orders' | 'people' | 'calendar' | 'communications' | 'crm' | 'property' | 'ai' | 'store' | 'planning' | 'generation' | 'billing' | 'security' | 'referral';
|
|
19
21
|
interface Props {
|
|
20
22
|
resourceName: string;
|
|
23
|
+
rendering?: ResourceRendering | undefined;
|
|
21
24
|
eyebrow: string;
|
|
22
25
|
title: string;
|
|
23
26
|
description: string;
|
|
@@ -33,6 +36,7 @@ interface Props {
|
|
|
33
36
|
emptyLanesText?: string;
|
|
34
37
|
highlightsLabel?: string;
|
|
35
38
|
workspaceStyle?: WorkspaceStyle;
|
|
39
|
+
tableProps?: Omit<ComponentProps<typeof AutoTable>, 'resourceName'>;
|
|
36
40
|
}
|
|
37
41
|
declare const ResourceOperationsPage: Component<Props, {}, "">;
|
|
38
42
|
type ResourceOperationsPage = ReturnType<typeof ResourceOperationsPage>;
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { captureAdminContext, queryKeyMatches, withValidatedTaskProvider } from '@svadmin/core';
|
|
3
|
-
import { useQueryClient } from '@tanstack/svelte-query';
|
|
4
2
|
import { useTranslation } from '@svadmin/core/i18n';
|
|
5
3
|
|
|
6
4
|
import { Button } from './ui/button/index.js';
|
|
7
5
|
import { Loader2, RotateCcw } from '@lucide/svelte';
|
|
6
|
+
import { createTaskAction } from './task-action.svelte.js';
|
|
8
7
|
|
|
9
8
|
const i18n = useTranslation();
|
|
10
|
-
const adminContext = captureAdminContext();
|
|
11
9
|
|
|
12
10
|
let {
|
|
13
11
|
taskId,
|
|
14
|
-
taskProvider
|
|
12
|
+
taskProvider,
|
|
15
13
|
onSuccess,
|
|
16
14
|
onError,
|
|
17
15
|
disabled = false,
|
|
@@ -29,46 +27,18 @@
|
|
|
29
27
|
children?: import('svelte').Snippet;
|
|
30
28
|
}>();
|
|
31
29
|
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
const provider = withValidatedTaskProvider(taskProvider);
|
|
42
|
-
if (!provider.retry) return;
|
|
43
|
-
await provider.retry(scopedTaskId);
|
|
44
|
-
await Promise.all([
|
|
45
|
-
queryClient.invalidateQueries({
|
|
46
|
-
predicate: (query) => queryKeyMatches(query.queryKey, {
|
|
47
|
-
...scope,
|
|
48
|
-
kind: 'task',
|
|
49
|
-
action: 'list',
|
|
50
|
-
}),
|
|
51
|
-
}),
|
|
52
|
-
queryClient.invalidateQueries({
|
|
53
|
-
predicate: (query) => queryKeyMatches(query.queryKey, {
|
|
54
|
-
...scope,
|
|
55
|
-
kind: 'task',
|
|
56
|
-
action: 'one',
|
|
57
|
-
id: scopedTaskId,
|
|
58
|
-
}),
|
|
59
|
-
}),
|
|
60
|
-
]);
|
|
61
|
-
onSuccess?.();
|
|
62
|
-
} catch (error) {
|
|
63
|
-
onError?.(error);
|
|
64
|
-
} finally {
|
|
65
|
-
pending = false;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
30
|
+
const action = createTaskAction({
|
|
31
|
+
action: 'retry',
|
|
32
|
+
get taskId() { return taskId; },
|
|
33
|
+
get provider() { return taskProvider; },
|
|
34
|
+
get disabled() { return disabled; },
|
|
35
|
+
get onSuccess() { return onSuccess; },
|
|
36
|
+
get onError() { return onError; },
|
|
37
|
+
});
|
|
68
38
|
</script>
|
|
69
39
|
|
|
70
|
-
<Button {variant} {size} onclick={
|
|
71
|
-
{#if pending}
|
|
40
|
+
<Button {variant} {size} onclick={action.run} disabled={!action.available || action.pending}>
|
|
41
|
+
{#if action.pending}
|
|
72
42
|
<Loader2 class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c svadmin-u-afbdd13a380e" />
|
|
73
43
|
{:else}
|
|
74
44
|
<RotateCcw class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import SettingsFieldRow from './content/SettingsFieldRow.svelte';
|
|
11
11
|
import DataState from './content/DataState.svelte';
|
|
12
12
|
import FeedbackNotice from './content/FeedbackNotice.svelte';
|
|
13
|
+
import ConfirmDialog from './ConfirmDialog.svelte';
|
|
13
14
|
|
|
14
15
|
const i18n = useTranslation();
|
|
15
16
|
const adminContext = captureAdminContext();
|
|
@@ -29,6 +30,11 @@
|
|
|
29
30
|
let passwordErrorMessage = $state('');
|
|
30
31
|
let changingPassword = $state(false);
|
|
31
32
|
let requestId = 0;
|
|
33
|
+
let pendingDanger = $state<{ label: string; run: () => Promise<void> } | null>(null);
|
|
34
|
+
function requestDanger(label: string, run: () => Promise<void>): void {
|
|
35
|
+
const epoch = requestId;
|
|
36
|
+
pendingDanger = { label, run: async () => { if (epoch === requestId) await run(); } };
|
|
37
|
+
}
|
|
32
38
|
|
|
33
39
|
function message(error: unknown): string {
|
|
34
40
|
return error instanceof Error ? error.message : String(error);
|
|
@@ -70,11 +76,16 @@
|
|
|
70
76
|
changingPassword = false;
|
|
71
77
|
updatingMfa = false;
|
|
72
78
|
revoking = null;
|
|
79
|
+
pendingDanger = null;
|
|
73
80
|
void loadSecurity();
|
|
74
81
|
return () => { requestId += 1; };
|
|
75
82
|
});
|
|
76
83
|
|
|
77
|
-
async function handleMfaChange(enabled: boolean): Promise<void> {
|
|
84
|
+
async function handleMfaChange(enabled: boolean, confirmed = false): Promise<void> {
|
|
85
|
+
if (!enabled && !confirmed) {
|
|
86
|
+
requestDanger(isZh ? '关闭两步验证' : 'Disable two-factor authentication', () => handleMfaChange(false, true));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
78
89
|
const provider = sessionProvider;
|
|
79
90
|
const currentRequest = requestId;
|
|
80
91
|
const context = adminContext.enterpriseRequestContext;
|
|
@@ -120,7 +131,11 @@
|
|
|
120
131
|
}
|
|
121
132
|
}
|
|
122
133
|
|
|
123
|
-
async function revokeSession(id: string): Promise<void> {
|
|
134
|
+
async function revokeSession(id: string, confirmed = false): Promise<void> {
|
|
135
|
+
if (!confirmed) {
|
|
136
|
+
requestDanger(`${i18n.t('security.revokeSession')}: ${id}`, () => revokeSession(id, true));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
124
139
|
const provider = sessionProvider;
|
|
125
140
|
const currentRequest = requestId;
|
|
126
141
|
const context = adminContext.enterpriseRequestContext;
|
|
@@ -139,7 +154,11 @@
|
|
|
139
154
|
}
|
|
140
155
|
}
|
|
141
156
|
|
|
142
|
-
async function revokeAllOthers(): Promise<void> {
|
|
157
|
+
async function revokeAllOthers(confirmed = false): Promise<void> {
|
|
158
|
+
if (!confirmed) {
|
|
159
|
+
requestDanger(i18n.t('security.revokeOthers'), () => revokeAllOthers(true));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
143
162
|
const provider = sessionProvider;
|
|
144
163
|
const currentRequest = requestId;
|
|
145
164
|
const context = adminContext.enterpriseRequestContext;
|
|
@@ -166,7 +185,7 @@
|
|
|
166
185
|
{/if}
|
|
167
186
|
<SettingsGroup title={i18n.t('security.twoFactorAuth')} description={i18n.t('security.twoFactorDescription')}>
|
|
168
187
|
<SettingsFieldRow label={i18n.t('security.enable2fa')} description={is2faEnabled ? i18n.t('security.twoFactorActive') : i18n.t('security.twoFactorInactive')}>
|
|
169
|
-
{#snippet control()}<Switch checked={is2faEnabled} disabled={!sessionProvider?.setMfaEnabled || updatingMfa}
|
|
188
|
+
{#snippet control()}<Switch bind:checked={() => is2faEnabled, (enabled) => { void handleMfaChange(enabled); }} disabled={!sessionProvider?.setMfaEnabled || updatingMfa} />{/snippet}
|
|
170
189
|
</SettingsFieldRow>
|
|
171
190
|
</SettingsGroup>
|
|
172
191
|
<SettingsGroup title={i18n.t('profile.changePassword')} description={isZh ? '密码修改由 AuthProvider 持久化。' : 'Password changes are persisted by AuthProvider.'}>
|
|
@@ -180,7 +199,7 @@
|
|
|
180
199
|
</form>
|
|
181
200
|
</SettingsGroup>
|
|
182
201
|
<SettingsGroup title={i18n.t('security.activeSessions')} description={i18n.t('security.sessionsDescription')}>
|
|
183
|
-
{#snippet actions()}{#if sessions.some((session) => !session.current)}<Button variant="outline" size="sm" disabled={revoking !== null} onclick={revokeAllOthers}>{i18n.t('security.revokeOthers')}</Button>{/if}{/snippet}
|
|
202
|
+
{#snippet actions()}{#if sessions.some((session) => !session.current)}<Button variant="outline" size="sm" disabled={revoking !== null} onclick={() => revokeAllOthers()}>{i18n.t('security.revokeOthers')}</Button>{/if}{/snippet}
|
|
184
203
|
{#if loadingSessions}
|
|
185
204
|
<DataState state="loading" />
|
|
186
205
|
{:else if sessionError}
|
|
@@ -199,3 +218,8 @@
|
|
|
199
218
|
{/if}
|
|
200
219
|
</SettingsGroup>
|
|
201
220
|
</div>
|
|
221
|
+
<ConfirmDialog open={pendingDanger !== null}
|
|
222
|
+
title={pendingDanger?.label ?? ''}
|
|
223
|
+
message={isZh ? '此操作将立即影响登录访问。确认继续?' : 'This immediately affects sign-in access. Continue?'}
|
|
224
|
+
oncancel={() => pendingDanger = null}
|
|
225
|
+
onconfirm={() => { const action = pendingDanger; pendingDanger = null; void action?.run(); }} />
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
<script lang="ts" generics="T extends string">
|
|
2
|
+
import { cn } from '../utils.js';
|
|
3
|
+
|
|
4
|
+
export interface SegmentedControlOption<T extends string = string> {
|
|
5
|
+
value: T;
|
|
6
|
+
label: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface Props<T extends string = string> {
|
|
11
|
+
options: readonly SegmentedControlOption<T>[];
|
|
12
|
+
value?: T;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
ariaLabel: string;
|
|
15
|
+
dir?: 'ltr' | 'rtl';
|
|
16
|
+
class?: string;
|
|
17
|
+
onchange?: (value: T) => void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
options,
|
|
22
|
+
value = $bindable(),
|
|
23
|
+
disabled = false,
|
|
24
|
+
ariaLabel,
|
|
25
|
+
dir,
|
|
26
|
+
class: className = '',
|
|
27
|
+
onchange,
|
|
28
|
+
}: Props<T> = $props();
|
|
29
|
+
|
|
30
|
+
let root: HTMLDivElement;
|
|
31
|
+
const enabledOptions = $derived(options.filter(option => !option.disabled));
|
|
32
|
+
const tabValue = $derived(enabledOptions.find(option => option.value === value)?.value ?? enabledOptions[0]?.value);
|
|
33
|
+
|
|
34
|
+
function select(option: SegmentedControlOption<T>): void {
|
|
35
|
+
if (disabled || option.disabled) return;
|
|
36
|
+
if (value !== option.value) {
|
|
37
|
+
value = option.value;
|
|
38
|
+
onchange?.(option.value);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function moveFocus(index: number, direction: number): void {
|
|
43
|
+
if (disabled || enabledOptions.length === 0) return;
|
|
44
|
+
const next = (index + direction + enabledOptions.length) % enabledOptions.length;
|
|
45
|
+
const nextOption = enabledOptions[next];
|
|
46
|
+
if (!nextOption) return;
|
|
47
|
+
const target = root.querySelector<HTMLButtonElement>(
|
|
48
|
+
`[data-svadmin-segment-value="${CSS.escape(nextOption.value)}"]`,
|
|
49
|
+
);
|
|
50
|
+
target?.focus();
|
|
51
|
+
select(nextOption);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function handleKeydown(event: KeyboardEvent, option: SegmentedControlOption<T>, index: number): void {
|
|
55
|
+
if (disabled || option.disabled) return;
|
|
56
|
+
const rtl = getComputedStyle(root).direction === 'rtl' || dir === 'rtl';
|
|
57
|
+
if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
moveFocus(index, event.key === 'ArrowRight' && rtl ? -1 : 1);
|
|
60
|
+
} else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
moveFocus(index, event.key === 'ArrowLeft' && rtl ? 1 : -1);
|
|
63
|
+
} else if (event.key === 'Home') {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
moveFocus(index, -index);
|
|
66
|
+
} else if (event.key === 'End') {
|
|
67
|
+
event.preventDefault();
|
|
68
|
+
moveFocus(index, enabledOptions.length - 1 - index);
|
|
69
|
+
} else if (event.key === ' ' || event.key === 'Enter') {
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
select(option);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
</script>
|
|
75
|
+
|
|
76
|
+
<div
|
|
77
|
+
bind:this={root}
|
|
78
|
+
{dir}
|
|
79
|
+
role="radiogroup"
|
|
80
|
+
aria-label={ariaLabel}
|
|
81
|
+
aria-disabled={disabled ? 'true' : undefined}
|
|
82
|
+
class={cn('svadmin-segmented-control', className)}
|
|
83
|
+
>
|
|
84
|
+
{#each options as option (option.value)}
|
|
85
|
+
{@const selected = value === option.value}
|
|
86
|
+
{@const enabledIndex = enabledOptions.findIndex(candidate => candidate.value === option.value)}
|
|
87
|
+
<button
|
|
88
|
+
type="button"
|
|
89
|
+
role="radio"
|
|
90
|
+
aria-checked={selected}
|
|
91
|
+
aria-disabled={disabled || option.disabled ? 'true' : undefined}
|
|
92
|
+
tabindex={!disabled && !option.disabled && option.value === tabValue ? 0 : -1}
|
|
93
|
+
disabled={disabled || option.disabled}
|
|
94
|
+
data-svadmin-segment-value={option.value}
|
|
95
|
+
class={cn('svadmin-segmented-control__item', selected && 'svadmin-segmented-control__item--selected')}
|
|
96
|
+
onclick={() => select(option)}
|
|
97
|
+
onkeydown={(event) => handleKeydown(event, option, enabledIndex)}
|
|
98
|
+
>
|
|
99
|
+
{option.label}
|
|
100
|
+
</button>
|
|
101
|
+
{/each}
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<style>
|
|
105
|
+
.svadmin-segmented-control {
|
|
106
|
+
display: inline-flex;
|
|
107
|
+
flex-wrap: wrap;
|
|
108
|
+
gap: 4px;
|
|
109
|
+
padding: 4px;
|
|
110
|
+
max-width: 100%;
|
|
111
|
+
border: 1px solid var(--border);
|
|
112
|
+
border-radius: 6px;
|
|
113
|
+
background: var(--muted);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.svadmin-segmented-control__item {
|
|
117
|
+
min-height: 32px;
|
|
118
|
+
min-width: 0;
|
|
119
|
+
padding: 4px 12px;
|
|
120
|
+
border: 1px solid transparent;
|
|
121
|
+
border-radius: 4px;
|
|
122
|
+
background: transparent;
|
|
123
|
+
color: var(--muted-foreground);
|
|
124
|
+
font: inherit;
|
|
125
|
+
letter-spacing: 0;
|
|
126
|
+
overflow-wrap: anywhere;
|
|
127
|
+
cursor: pointer;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.svadmin-segmented-control__item--selected {
|
|
131
|
+
background: var(--background);
|
|
132
|
+
color: var(--foreground);
|
|
133
|
+
border-color: var(--border);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.svadmin-segmented-control__item:focus-visible {
|
|
137
|
+
outline: 2px solid var(--ring);
|
|
138
|
+
outline-offset: 2px;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.svadmin-segmented-control__item:disabled {
|
|
142
|
+
opacity: 0.5;
|
|
143
|
+
cursor: not-allowed;
|
|
144
|
+
}
|
|
145
|
+
</style>
|