@svadmin/ui 0.72.0 → 0.73.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 +40 -25
- package/THIRD_PARTY_NOTICES.md +52 -0
- package/dist/app.css +7694 -5117
- package/dist/app.theme.css +7645 -5119
- 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/components/AutoForm.svelte +20 -6
- package/dist/components/AutoForm.svelte.d.ts +2 -0
- package/dist/components/AutoTable.svelte +249 -9
- package/dist/components/AutoTable.svelte.d.ts +5 -0
- package/dist/components/BoundRecordDetailDrawer.svelte +8 -2
- package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +2 -0
- package/dist/components/ComboboxField.svelte +31 -9
- package/dist/components/ComboboxField.svelte.d.ts +3 -2
- package/dist/components/CreatePage.svelte +4 -0
- package/dist/components/CreatePage.svelte.d.ts +2 -0
- package/dist/components/DateRangeInput.svelte +75 -0
- package/dist/components/DateRangeInput.svelte.d.ts +25 -0
- package/dist/components/DateTimeInput.svelte +65 -0
- package/dist/components/DateTimeInput.svelte.d.ts +19 -0
- package/dist/components/DevTools.svelte +2 -2
- package/dist/components/EditPage.svelte +4 -0
- package/dist/components/EditPage.svelte.d.ts +2 -0
- package/dist/components/FieldRenderer.svelte +90 -18
- package/dist/components/FileUpload.svelte +250 -0
- package/dist/components/FileUpload.svelte.d.ts +32 -0
- package/dist/components/FilterBuilder.svelte +236 -279
- package/dist/components/FilterBuilder.svelte.d.ts +3 -0
- package/dist/components/ImportWizard.svelte +181 -94
- package/dist/components/JsonSchemaForm.svelte +255 -99
- package/dist/components/JsonSchemaForm.svelte.d.ts +12 -1
- package/dist/components/Layout.svelte +1 -2
- package/dist/components/LazyTaskQueueDrawer.svelte.d.ts +1 -1
- package/dist/components/ListPage.svelte +4 -0
- package/dist/components/ListPage.svelte.d.ts +2 -0
- package/dist/components/LoginPage.svelte +1 -1
- package/dist/components/MoneyInput.svelte +25 -0
- package/dist/components/MoneyInput.svelte.d.ts +20 -0
- 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/QuickEditDrawer.svelte +4 -1
- package/dist/components/QuickEditDrawer.svelte.d.ts +2 -0
- package/dist/components/RecordDetailDrawer.svelte +4 -2
- package/dist/components/RecordDetailDrawer.svelte.d.ts +2 -0
- package/dist/components/ResourceOperationsPage.svelte +25 -19
- package/dist/components/ResourceOperationsPage.svelte.d.ts +5 -1
- package/dist/components/ShowInferencer.svelte +4 -2
- package/dist/components/ShowInferencer.svelte.d.ts +2 -0
- package/dist/components/ShowPage.svelte +7 -3
- package/dist/components/ShowPage.svelte.d.ts +2 -0
- package/dist/components/Sidebar.svelte +5 -5
- package/dist/components/SpreadsheetView.svelte +81 -286
- 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/TaskQueueDrawer.svelte +72 -16
- package/dist/components/TreeSelect.svelte +208 -28
- package/dist/components/TreeSelect.svelte.d.ts +3 -1
- package/dist/components/auto-table-grid.d.ts +26 -0
- package/dist/components/auto-table-grid.js +1 -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/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/fieldComponentMap.js +5 -0
- package/dist/components/fields/DateField.svelte +4 -3
- 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/record-detail.svelte.d.ts +3 -0
- package/dist/components/record-detail.svelte.js +10 -4
- 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/ui/badge/badge-variants.js +3 -1
- package/dist/components/ui/button/button-variants.js +5 -2
- package/dist/components/ui/input/input.svelte +1 -4
- package/dist/components/ui/textarea/textarea.svelte +2 -1
- package/dist/components.css +3079 -0
- package/dist/design-contract.d.ts +13 -0
- package/dist/design-contract.js +11 -0
- package/dist/design-system.d.ts +15 -0
- package/dist/design-system.js +7 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +9 -0
- package/dist/page-chrome.css +12 -49
- package/dist/recipes.d.ts +4 -0
- package/dist/recipes.js +4 -0
- package/dist/rendering/index.d.ts +87 -0
- package/dist/rendering/index.js +117 -0
- package/dist/styled-system/css/conditions.js +36 -0
- package/dist/styled-system/css/css.d.ts +22 -0
- package/dist/styled-system/css/css.js +45 -0
- package/dist/styled-system/css/cva.d.ts +6 -0
- package/dist/styled-system/css/cva.js +87 -0
- package/dist/styled-system/css/cx.d.ts +5 -0
- package/dist/styled-system/css/cx.js +15 -0
- package/dist/styled-system/css/index.d.ts +5 -0
- package/dist/styled-system/css/index.js +4 -0
- package/dist/styled-system/css/sva.d.ts +4 -0
- package/dist/styled-system/css/sva.js +46 -0
- package/dist/styled-system/helpers.js +316 -0
- package/dist/styled-system/patterns/aspect-ratio.d.ts +20 -0
- package/dist/styled-system/patterns/aspect-ratio.js +38 -0
- package/dist/styled-system/patterns/bleed.d.ts +21 -0
- package/dist/styled-system/patterns/bleed.js +24 -0
- package/dist/styled-system/patterns/box.d.ts +20 -0
- package/dist/styled-system/patterns/box.js +15 -0
- package/dist/styled-system/patterns/center.d.ts +20 -0
- package/dist/styled-system/patterns/center.js +21 -0
- package/dist/styled-system/patterns/circle.d.ts +20 -0
- package/dist/styled-system/patterns/circle.js +25 -0
- package/dist/styled-system/patterns/container.d.ts +20 -0
- package/dist/styled-system/patterns/container.js +21 -0
- package/dist/styled-system/patterns/cq.d.ts +21 -0
- package/dist/styled-system/patterns/cq.js +21 -0
- package/dist/styled-system/patterns/divider.d.ts +22 -0
- package/dist/styled-system/patterns/divider.js +25 -0
- package/dist/styled-system/patterns/flex.d.ts +26 -0
- package/dist/styled-system/patterns/flex.js +26 -0
- package/dist/styled-system/patterns/float.d.ts +23 -0
- package/dist/styled-system/patterns/float.js +52 -0
- package/dist/styled-system/patterns/grid-item.d.ts +25 -0
- package/dist/styled-system/patterns/grid-item.js +25 -0
- package/dist/styled-system/patterns/grid.d.ts +24 -0
- package/dist/styled-system/patterns/grid.js +27 -0
- package/dist/styled-system/patterns/hstack.d.ts +21 -0
- package/dist/styled-system/patterns/hstack.js +24 -0
- package/dist/styled-system/patterns/index.d.ts +21 -0
- package/dist/styled-system/patterns/index.js +20 -0
- package/dist/styled-system/patterns/link-overlay.d.ts +20 -0
- package/dist/styled-system/patterns/link-overlay.js +24 -0
- package/dist/styled-system/patterns/spacer.d.ts +20 -0
- package/dist/styled-system/patterns/spacer.js +25 -0
- package/dist/styled-system/patterns/square.d.ts +20 -0
- package/dist/styled-system/patterns/square.js +24 -0
- package/dist/styled-system/patterns/stack.d.ts +23 -0
- package/dist/styled-system/patterns/stack.js +24 -0
- package/dist/styled-system/patterns/visually-hidden.d.ts +20 -0
- package/dist/styled-system/patterns/visually-hidden.js +18 -0
- package/dist/styled-system/patterns/vstack.d.ts +21 -0
- package/dist/styled-system/patterns/vstack.js +24 -0
- package/dist/styled-system/patterns/wrap.d.ts +24 -0
- package/dist/styled-system/patterns/wrap.js +25 -0
- package/dist/styled-system/recipes/content-header.d.ts +31 -0
- package/dist/styled-system/recipes/content-header.js +65 -0
- package/dist/styled-system/recipes/content-page.d.ts +34 -0
- package/dist/styled-system/recipes/content-page.js +43 -0
- package/dist/styled-system/recipes/create-recipe.js +82 -0
- package/dist/styled-system/recipes/index.d.ts +17 -0
- package/dist/styled-system/recipes/index.js +16 -0
- package/dist/styled-system/recipes/metric-block.d.ts +34 -0
- package/dist/styled-system/recipes/metric-block.js +76 -0
- package/dist/styled-system/recipes/product-list.d.ts +31 -0
- package/dist/styled-system/recipes/product-list.js +73 -0
- package/dist/styled-system/recipes/product-section.d.ts +31 -0
- package/dist/styled-system/recipes/product-section.js +49 -0
- package/dist/styled-system/recipes/product-settings-row.d.ts +34 -0
- package/dist/styled-system/recipes/product-settings-row.js +58 -0
- package/dist/styled-system/recipes/product-settings.d.ts +31 -0
- package/dist/styled-system/recipes/product-settings.js +57 -0
- package/dist/styled-system/recipes/product-status.d.ts +34 -0
- package/dist/styled-system/recipes/product-status.js +45 -0
- package/dist/styled-system/recipes/product-toolbar.d.ts +31 -0
- package/dist/styled-system/recipes/product-toolbar.js +41 -0
- package/dist/styled-system/recipes/product-workspace.d.ts +34 -0
- package/dist/styled-system/recipes/product-workspace.js +58 -0
- package/dist/styled-system/recipes/surface-metric.d.ts +38 -0
- package/dist/styled-system/recipes/surface-metric.js +63 -0
- package/dist/styled-system/recipes/surface-table.d.ts +34 -0
- package/dist/styled-system/recipes/surface-table.js +62 -0
- package/dist/styled-system/recipes/ui-badge.d.ts +31 -0
- package/dist/styled-system/recipes/ui-badge.js +38 -0
- package/dist/styled-system/recipes/ui-button.d.ts +32 -0
- package/dist/styled-system/recipes/ui-button.js +43 -0
- package/dist/styled-system/recipes/ui-input.d.ts +31 -0
- package/dist/styled-system/recipes/ui-input.js +49 -0
- package/dist/styled-system/recipes/ui-textarea.d.ts +31 -0
- package/dist/styled-system/recipes/ui-textarea.js +24 -0
- package/dist/styled-system/styles.css +1257 -0
- package/dist/styled-system/tokens/index.d.ts +9 -0
- package/dist/styled-system/tokens/index.js +268 -0
- package/dist/styled-system/tokens/tokens.d.ts +36 -0
- package/dist/styled-system/types/composition.d.ts +227 -0
- package/dist/styled-system/types/conditions.d.ts +236 -0
- package/dist/styled-system/types/csstype.d.ts +22570 -0
- package/dist/styled-system/types/index.d.ts +6 -0
- package/dist/styled-system/types/parts.d.ts +8 -0
- package/dist/styled-system/types/pattern.d.ts +78 -0
- package/dist/styled-system/types/prop-type.d.ts +223 -0
- package/dist/styled-system/types/recipe.d.ts +181 -0
- package/dist/styled-system/types/selectors.d.ts +59 -0
- package/dist/styled-system/types/static-css.d.ts +56 -0
- package/dist/styled-system/types/style-props.d.ts +8088 -0
- package/dist/styled-system/types/system-types.d.ts +151 -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/styles/recipes.css +1262 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/package.json +31 -13
- package/styles-compatibility.json +12 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** 仅公开稳定语义;不向模型暴露 CSS、类名或内部 recipe 实现。 */
|
|
2
|
+
export declare const surfaceDesignContract: {
|
|
3
|
+
readonly version: "svadmin/design-v1";
|
|
4
|
+
readonly metric: {
|
|
5
|
+
readonly tone: readonly ["neutral", "success", "warning", "danger", "info"];
|
|
6
|
+
readonly density: readonly ["comfortable", "compact"];
|
|
7
|
+
};
|
|
8
|
+
readonly table: {
|
|
9
|
+
readonly density: readonly ["comfortable", "compact"];
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export type SurfaceTone = typeof surfaceDesignContract.metric.tone[number];
|
|
13
|
+
export type SurfaceDensity = typeof surfaceDesignContract.metric.density[number];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** 仅公开稳定语义;不向模型暴露 CSS、类名或内部 recipe 实现。 */
|
|
2
|
+
export const surfaceDesignContract = {
|
|
3
|
+
version: 'svadmin/design-v1',
|
|
4
|
+
metric: {
|
|
5
|
+
tone: ['neutral', 'success', 'warning', 'danger', 'info'],
|
|
6
|
+
density: ['comfortable', 'compact'],
|
|
7
|
+
},
|
|
8
|
+
table: {
|
|
9
|
+
density: ['comfortable', 'compact'],
|
|
10
|
+
},
|
|
11
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SurfaceTone, SurfaceDensity } from "./design-contract.js";
|
|
2
|
+
export declare function metricSurfaceClasses(tone?: SurfaceTone): {
|
|
3
|
+
state: string;
|
|
4
|
+
description: string;
|
|
5
|
+
root: string;
|
|
6
|
+
card: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function tableSurfaceClasses(density?: SurfaceDensity): {
|
|
9
|
+
state: string;
|
|
10
|
+
content: string;
|
|
11
|
+
head: string;
|
|
12
|
+
header: string;
|
|
13
|
+
root: string;
|
|
14
|
+
cell: string;
|
|
15
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { surfaceMetric, surfaceTable } from "./styled-system/recipes/index.js";
|
|
2
|
+
export function metricSurfaceClasses(tone = "neutral") {
|
|
3
|
+
return surfaceMetric({ tone });
|
|
4
|
+
}
|
|
5
|
+
export function tableSurfaceClasses(density = "comfortable") {
|
|
6
|
+
return surfaceTable({ density });
|
|
7
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { surfaceDesignContract } from "./design-contract.js";
|
|
2
|
+
export type { SurfaceTone, SurfaceDensity } from "./design-contract.js";
|
|
1
3
|
export { default as AdminApp } from './components/AdminApp.svelte';
|
|
2
4
|
export { default as AutoTable } from './components/AutoTable.svelte';
|
|
3
5
|
export { default as AutoForm } from './components/AutoForm.svelte';
|
|
@@ -120,6 +122,14 @@ export type { PendingMutation } from './components/OfflineSyncBanner.svelte';
|
|
|
120
122
|
export { default as InfiniteList } from './components/InfiniteList.svelte';
|
|
121
123
|
export { default as ComboboxField } from './components/ComboboxField.svelte';
|
|
122
124
|
export { default as PasswordInput } from './components/PasswordInput.svelte';
|
|
125
|
+
export { default as NumericInput } from './components/NumericInput.svelte';
|
|
126
|
+
export { default as NumberInput } from './components/NumberInput.svelte';
|
|
127
|
+
export { default as MoneyInput } from './components/MoneyInput.svelte';
|
|
128
|
+
export { default as PercentInput } from './components/PercentInput.svelte';
|
|
129
|
+
export { default as DateTimeInput } from './components/DateTimeInput.svelte';
|
|
130
|
+
export type { DateTimeInputMode } from './components/DateTimeInput.svelte';
|
|
131
|
+
export { default as DateRangeInput } from './components/DateRangeInput.svelte';
|
|
132
|
+
export type { DateRangeInputValue } from './components/DateRangeInput.svelte';
|
|
123
133
|
export { default as AnomalyBadge } from "./components/AnomalyBadge.svelte";
|
|
124
134
|
export { default as AnimatedCounter } from "./components/AnimatedCounter.svelte";
|
|
125
135
|
export { default as KeyboardShortcuts } from "./components/KeyboardShortcuts.svelte";
|
|
@@ -266,6 +276,8 @@ export type { SecurityEvent } from './components/content/SecurityEventTable.svel
|
|
|
266
276
|
export { default as MemberList } from './components/content/MemberList.svelte';
|
|
267
277
|
export type { MemberSummary } from './components/content/MemberList.svelte';
|
|
268
278
|
export { default as ImportDropzone } from './components/content/ImportDropzone.svelte';
|
|
279
|
+
export { default as FileUpload } from './components/FileUpload.svelte';
|
|
280
|
+
export type { UploadItem, UploadItemStatus, UploadSession } from './components/FileUpload.svelte';
|
|
269
281
|
export { default as NetworkUserCard } from './components/content/NetworkUserCard.svelte';
|
|
270
282
|
export type { NetworkUser, NetworkMetric } from './components/content/NetworkUserCard.svelte';
|
|
271
283
|
export { default as NetworkTable } from './components/content/NetworkTable.svelte';
|
|
@@ -292,3 +304,5 @@ export type { RatingSize } from './components/fields/RatingField.svelte';
|
|
|
292
304
|
export type { CurrencyTone } from './components/fields/CurrencyField.svelte';
|
|
293
305
|
export { default as MediaThumbnail } from './components/content/MediaThumbnail.svelte';
|
|
294
306
|
export type { MediaThumbnailSize, MediaThumbnailFit } from './components/content/MediaThumbnail.svelte';
|
|
307
|
+
export { default as FileBrowser } from './components/content/FileBrowser.svelte';
|
|
308
|
+
export type { FileBrowserData, FileBrowserInit, FileBrowserMenuOptions, FileBrowserProps } from './components/content/FileBrowser.svelte';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// @svadmin/ui — Pre-built admin UI components
|
|
2
|
+
export { surfaceDesignContract } from "./design-contract.js";
|
|
2
3
|
// Entry component
|
|
3
4
|
export { default as AdminApp } from './components/AdminApp.svelte';
|
|
4
5
|
// Admin components
|
|
@@ -95,6 +96,12 @@ export { default as OfflineSyncBanner } from './components/OfflineSyncBanner.sve
|
|
|
95
96
|
export { default as InfiniteList } from './components/InfiniteList.svelte';
|
|
96
97
|
export { default as ComboboxField } from './components/ComboboxField.svelte';
|
|
97
98
|
export { default as PasswordInput } from './components/PasswordInput.svelte';
|
|
99
|
+
export { default as NumericInput } from './components/NumericInput.svelte';
|
|
100
|
+
export { default as NumberInput } from './components/NumberInput.svelte';
|
|
101
|
+
export { default as MoneyInput } from './components/MoneyInput.svelte';
|
|
102
|
+
export { default as PercentInput } from './components/PercentInput.svelte';
|
|
103
|
+
export { default as DateTimeInput } from './components/DateTimeInput.svelte';
|
|
104
|
+
export { default as DateRangeInput } from './components/DateRangeInput.svelte';
|
|
98
105
|
export { default as AnomalyBadge } from "./components/AnomalyBadge.svelte";
|
|
99
106
|
export { default as AnimatedCounter } from "./components/AnimatedCounter.svelte";
|
|
100
107
|
export { default as KeyboardShortcuts } from "./components/KeyboardShortcuts.svelte";
|
|
@@ -238,6 +245,7 @@ export { default as ApiKeyList } from './components/content/ApiKeyList.svelte';
|
|
|
238
245
|
export { default as SecurityEventTable } from './components/content/SecurityEventTable.svelte';
|
|
239
246
|
export { default as MemberList } from './components/content/MemberList.svelte';
|
|
240
247
|
export { default as ImportDropzone } from './components/content/ImportDropzone.svelte';
|
|
248
|
+
export { default as FileUpload } from './components/FileUpload.svelte';
|
|
241
249
|
export { default as NetworkUserCard } from './components/content/NetworkUserCard.svelte';
|
|
242
250
|
export { default as NetworkTable } from './components/content/NetworkTable.svelte';
|
|
243
251
|
export { default as OtpInput } from './components/content/OtpInput.svelte';
|
|
@@ -250,3 +258,4 @@ export { default as AuditTimeline } from './components/content/AuditTimeline.sve
|
|
|
250
258
|
export { default as FilterDropdown } from './components/FilterDropdown.svelte';
|
|
251
259
|
export { default as BatchActionBar } from './components/BatchActionBar.svelte';
|
|
252
260
|
export { default as MediaThumbnail } from './components/content/MediaThumbnail.svelte';
|
|
261
|
+
export { default as FileBrowser } from './components/content/FileBrowser.svelte';
|
package/dist/page-chrome.css
CHANGED
|
@@ -3,61 +3,45 @@
|
|
|
3
3
|
--svadmin-page-header-gap: 0.5rem;
|
|
4
4
|
min-width: 0;
|
|
5
5
|
}
|
|
6
|
-
|
|
7
6
|
.svadmin-page-header[data-density="compact"] {
|
|
8
7
|
--svadmin-page-header-gap: 0.375rem;
|
|
9
8
|
}
|
|
10
|
-
|
|
11
9
|
.svadmin-page-header__breadcrumbs {
|
|
12
10
|
margin-bottom: 1rem;
|
|
13
11
|
}
|
|
14
|
-
|
|
15
12
|
.svadmin-page-header[data-density="compact"] .svadmin-page-header__breadcrumbs {
|
|
16
13
|
margin-bottom: 0.375rem;
|
|
17
14
|
font-size: 0.75rem;
|
|
18
15
|
}
|
|
19
|
-
|
|
20
|
-
.svadmin-page-header__row,
|
|
21
|
-
.svadmin-filter-toolbar__row {
|
|
16
|
+
.svadmin-page-header__row, .svadmin-filter-toolbar__row {
|
|
22
17
|
display: flex;
|
|
23
18
|
flex-direction: column;
|
|
24
19
|
min-width: 0;
|
|
25
20
|
gap: 0.5rem;
|
|
26
21
|
}
|
|
27
|
-
|
|
28
22
|
.svadmin-page-header__row {
|
|
29
23
|
gap: var(--svadmin-page-header-gap);
|
|
30
24
|
}
|
|
31
|
-
|
|
32
25
|
.svadmin-page-header__heading {
|
|
33
26
|
display: flex;
|
|
34
27
|
align-items: center;
|
|
35
28
|
min-width: 0;
|
|
36
29
|
gap: 0.625rem;
|
|
37
30
|
}
|
|
38
|
-
|
|
39
31
|
.svadmin-page-header__text {
|
|
40
32
|
min-width: 0;
|
|
41
33
|
}
|
|
42
|
-
|
|
43
|
-
.svadmin-page-header__title-row,
|
|
44
|
-
.svadmin-page-header__tags,
|
|
45
|
-
.svadmin-page-header__actions,
|
|
46
|
-
.svadmin-filter-toolbar__filters,
|
|
47
|
-
.svadmin-filter-toolbar__actions {
|
|
34
|
+
.svadmin-page-header__title-row, .svadmin-page-header__tags, .svadmin-page-header__actions, .svadmin-filter-toolbar__filters, .svadmin-filter-toolbar__actions {
|
|
48
35
|
display: flex;
|
|
49
36
|
flex-wrap: wrap;
|
|
50
37
|
align-items: center;
|
|
51
38
|
min-width: 0;
|
|
52
39
|
gap: 0.5rem;
|
|
53
40
|
}
|
|
54
|
-
|
|
55
|
-
.svadmin-page-header__tags,
|
|
56
|
-
.svadmin-page-header__actions {
|
|
41
|
+
.svadmin-page-header__tags, .svadmin-page-header__actions {
|
|
57
42
|
max-width: 100%;
|
|
58
43
|
gap: var(--svadmin-page-header-gap);
|
|
59
44
|
}
|
|
60
|
-
|
|
61
45
|
.svadmin-page-header__title {
|
|
62
46
|
min-width: 0;
|
|
63
47
|
color: var(--foreground);
|
|
@@ -66,73 +50,59 @@
|
|
|
66
50
|
line-height: 1.75rem;
|
|
67
51
|
overflow-wrap: anywhere;
|
|
68
52
|
}
|
|
69
|
-
|
|
70
53
|
.svadmin-page-header__description {
|
|
71
54
|
color: var(--muted-foreground);
|
|
72
55
|
font-size: 0.875rem;
|
|
73
56
|
line-height: 1.25rem;
|
|
74
57
|
overflow-wrap: anywhere;
|
|
75
58
|
}
|
|
76
|
-
|
|
77
59
|
.svadmin-page-header[data-density="compact"] .svadmin-page-header__title {
|
|
78
60
|
font-size: 1.125rem;
|
|
79
61
|
}
|
|
80
|
-
|
|
81
62
|
.svadmin-page-header[data-density="compact"] .svadmin-page-header__description {
|
|
82
63
|
font-size: 0.75rem;
|
|
83
64
|
line-height: 1rem;
|
|
84
65
|
}
|
|
85
|
-
|
|
86
66
|
.svadmin-page-header .svadmin-page-header__back {
|
|
87
67
|
flex-shrink: 0;
|
|
88
68
|
color: var(--muted-foreground);
|
|
89
69
|
}
|
|
90
|
-
|
|
91
70
|
.svadmin-page-header .svadmin-page-header__back:hover {
|
|
92
71
|
color: var(--foreground);
|
|
93
72
|
}
|
|
94
|
-
|
|
95
73
|
.svadmin-page-header .svadmin-page-header__back-icon {
|
|
96
74
|
width: 1rem;
|
|
97
75
|
height: 1rem;
|
|
98
76
|
}
|
|
99
|
-
|
|
100
77
|
.svadmin-breadcrumbs {
|
|
101
78
|
min-width: 0;
|
|
102
79
|
}
|
|
103
|
-
|
|
104
80
|
.svadmin-breadcrumbs--spaced {
|
|
105
81
|
margin-bottom: 1rem;
|
|
106
82
|
}
|
|
107
|
-
|
|
108
83
|
.svadmin-breadcrumbs__item {
|
|
109
84
|
display: inline-flex;
|
|
110
85
|
min-width: 0;
|
|
111
86
|
overflow-wrap: anywhere;
|
|
112
87
|
}
|
|
113
|
-
|
|
114
88
|
.svadmin-breadcrumbs__label {
|
|
115
89
|
color: var(--muted-foreground);
|
|
116
90
|
}
|
|
117
|
-
|
|
118
91
|
.svadmin-filter-toolbar {
|
|
119
92
|
--svadmin-filter-control-height: 2.25rem;
|
|
120
93
|
--svadmin-filter-control-font: 0.875rem;
|
|
121
94
|
--svadmin-filter-search-icon-size: 1rem;
|
|
122
95
|
min-width: 0;
|
|
123
96
|
}
|
|
124
|
-
|
|
125
97
|
.svadmin-filter-toolbar[data-density="compact"] {
|
|
126
98
|
--svadmin-filter-control-height: 2rem;
|
|
127
99
|
--svadmin-filter-control-font: 0.75rem;
|
|
128
100
|
--svadmin-filter-search-icon-size: 0.875rem;
|
|
129
101
|
}
|
|
130
|
-
|
|
131
102
|
.svadmin-filter-toolbar__search {
|
|
132
103
|
position: relative;
|
|
133
104
|
min-width: 0;
|
|
134
105
|
}
|
|
135
|
-
|
|
136
106
|
.svadmin-filter-toolbar__search-icon {
|
|
137
107
|
position: absolute;
|
|
138
108
|
top: 50%;
|
|
@@ -143,21 +113,18 @@
|
|
|
143
113
|
transform: translateY(-50%);
|
|
144
114
|
pointer-events: none;
|
|
145
115
|
}
|
|
146
|
-
|
|
147
116
|
.svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__input {
|
|
148
117
|
height: var(--svadmin-filter-control-height);
|
|
149
118
|
padding-inline: 2.25rem;
|
|
150
119
|
font-size: var(--svadmin-filter-control-font);
|
|
151
120
|
line-height: 1rem;
|
|
152
121
|
}
|
|
153
|
-
|
|
154
122
|
.svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__clear {
|
|
155
123
|
position: absolute;
|
|
156
124
|
top: 50%;
|
|
157
125
|
right: 0.25rem;
|
|
158
126
|
transform: translateY(-50%);
|
|
159
127
|
}
|
|
160
|
-
|
|
161
128
|
.svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__toggle {
|
|
162
129
|
flex-shrink: 0;
|
|
163
130
|
gap: 0.375rem;
|
|
@@ -167,23 +134,19 @@
|
|
|
167
134
|
white-space: normal;
|
|
168
135
|
overflow-wrap: anywhere;
|
|
169
136
|
}
|
|
170
|
-
|
|
171
137
|
.svadmin-filter-toolbar[data-density="compact"] .svadmin-filter-toolbar__toggle {
|
|
172
138
|
padding-inline: 0.625rem;
|
|
173
139
|
}
|
|
174
|
-
|
|
175
140
|
.svadmin-filter-toolbar .svadmin-filter-toolbar__control-icon {
|
|
176
141
|
width: 0.875rem;
|
|
177
142
|
height: 0.875rem;
|
|
178
143
|
}
|
|
179
|
-
|
|
180
144
|
.svadmin-filter-toolbar .svadmin-filter-toolbar__chevron {
|
|
181
145
|
width: 0.75rem;
|
|
182
146
|
height: 0.75rem;
|
|
183
147
|
margin-left: 0.125rem;
|
|
184
148
|
color: var(--muted-foreground);
|
|
185
149
|
}
|
|
186
|
-
|
|
187
150
|
.svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__count {
|
|
188
151
|
height: 1rem;
|
|
189
152
|
min-height: 1rem;
|
|
@@ -195,32 +158,32 @@
|
|
|
195
158
|
line-height: 1;
|
|
196
159
|
font-variant-numeric: tabular-nums;
|
|
197
160
|
}
|
|
198
|
-
|
|
199
161
|
.svadmin-filter-toolbar .svadmin-filter-toolbar-advanced {
|
|
200
162
|
margin-top: 0.5rem;
|
|
201
|
-
border: 1px solid
|
|
163
|
+
border: 1px solid var(--border);
|
|
164
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
165
|
+
border: 1px solid color-mix(in oklch, var(--border) 60%, transparent);
|
|
166
|
+
}
|
|
202
167
|
border-radius: var(--radius-lg);
|
|
203
|
-
background:
|
|
168
|
+
background: var(--muted);
|
|
169
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
170
|
+
background: color-mix(in oklch, var(--muted) 20%, transparent);
|
|
171
|
+
}
|
|
204
172
|
padding: 0.75rem;
|
|
205
173
|
overflow-wrap: anywhere;
|
|
206
174
|
}
|
|
207
|
-
|
|
208
175
|
@media (min-width: 640px) {
|
|
209
|
-
.svadmin-page-header__row,
|
|
210
|
-
.svadmin-filter-toolbar__row {
|
|
176
|
+
.svadmin-page-header__row, .svadmin-filter-toolbar__row {
|
|
211
177
|
flex-direction: row;
|
|
212
178
|
flex-wrap: wrap;
|
|
213
179
|
align-items: center;
|
|
214
180
|
}
|
|
215
|
-
|
|
216
181
|
.svadmin-page-header__row {
|
|
217
182
|
justify-content: space-between;
|
|
218
183
|
}
|
|
219
|
-
|
|
220
184
|
.svadmin-page-header__heading {
|
|
221
185
|
flex: 1 1 16rem;
|
|
222
186
|
}
|
|
223
|
-
|
|
224
187
|
.svadmin-filter-toolbar__search {
|
|
225
188
|
flex: 1 1 14rem;
|
|
226
189
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** 只选择构建期已生成的类名,不在浏览器生成 CSS。 */
|
|
2
|
+
export { surfaceMetric, surfaceTable, uiButton, uiBadge, uiInput, uiTextarea } from './styled-system/recipes/index.js';
|
|
3
|
+
/** Stripe-first 产品组合部件,消费端仅选择已生成 CSS。 */
|
|
4
|
+
export { productSection, productToolbar, productWorkspace, productSettings, productSettingsRow, productList, productStatus } from './styled-system/recipes/index.js';
|
package/dist/recipes.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** 只选择构建期已生成的类名,不在浏览器生成 CSS。 */
|
|
2
|
+
export { surfaceMetric, surfaceTable, uiButton, uiBadge, uiInput, uiTextarea } from './styled-system/recipes/index.js';
|
|
3
|
+
/** Stripe-first 产品组合部件,消费端仅选择已生成 CSS。 */
|
|
4
|
+
export { productSection, productToolbar, productWorkspace, productSettings, productSettingsRow, productList, productStatus } from './styled-system/recipes/index.js';
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Component, Snippet } from 'svelte';
|
|
2
|
+
import type { BaseRecord, FieldDefinition } from '@svadmin/core';
|
|
3
|
+
import { type ContractFormAction, type ContractFormDraft, type ContractFormValues, type ContractId, type ContractRecord, type ContractSchemas, type ResourceContract } from '@svadmin/core/resource-contract';
|
|
4
|
+
export type RecordField<S extends ContractSchemas> = Extract<keyof ContractRecord<S>, string>;
|
|
5
|
+
export type FormField<S extends ContractSchemas, A extends ContractFormAction> = Extract<keyof ContractFormValues<S, A>, string>;
|
|
6
|
+
/** 与 AutoTable 的现有 snippet 参数兼容;未经校验的数据保持 unknown。 */
|
|
7
|
+
export interface CellInput {
|
|
8
|
+
value: unknown;
|
|
9
|
+
record: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface FieldInput {
|
|
12
|
+
field: FieldDefinition;
|
|
13
|
+
value: unknown;
|
|
14
|
+
onchange: (value: unknown) => void;
|
|
15
|
+
}
|
|
16
|
+
export interface CellContext<S extends ContractSchemas, K extends RecordField<S>> {
|
|
17
|
+
key: K;
|
|
18
|
+
record: ContractRecord<S>;
|
|
19
|
+
value: ContractRecord<S>[K];
|
|
20
|
+
}
|
|
21
|
+
export type FieldState<T> = {
|
|
22
|
+
valid: true;
|
|
23
|
+
value: T;
|
|
24
|
+
} | {
|
|
25
|
+
valid: false;
|
|
26
|
+
};
|
|
27
|
+
export interface FieldContext<S extends ContractSchemas, A extends ContractFormAction, K extends FormField<S, A>> {
|
|
28
|
+
field: FieldDefinition & {
|
|
29
|
+
key: K;
|
|
30
|
+
};
|
|
31
|
+
state: FieldState<ContractFormValues<S, A>[K]>;
|
|
32
|
+
readonly: boolean;
|
|
33
|
+
/** 只接收符合当前操作契约的值,运行时也会重新校验。 */
|
|
34
|
+
onchange: (value: ContractFormValues<S, A>[K]) => void;
|
|
35
|
+
/** 草稿可以暂时不满足业务约束,但必须是可快照的普通数据。 */
|
|
36
|
+
onDraftChange: (value: unknown) => void;
|
|
37
|
+
}
|
|
38
|
+
export type CellSnippets<S extends ContractSchemas> = Partial<Record<RecordField<S>, Snippet<[CellInput]>>>;
|
|
39
|
+
export interface RowContext<S extends ContractSchemas> {
|
|
40
|
+
record: ContractRecord<S>;
|
|
41
|
+
id: ContractId<S>;
|
|
42
|
+
}
|
|
43
|
+
/** 动态路由只擦除资源类型,不把未知记录或草稿假定为业务类型。 */
|
|
44
|
+
export interface ResourceRendering {
|
|
45
|
+
readonly resource: ResourceContract;
|
|
46
|
+
record(value: unknown): BaseRecord;
|
|
47
|
+
records(value: unknown): BaseRecord[];
|
|
48
|
+
draft(action: ContractFormAction, value: unknown): Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
/** 同名但不同实例的契约也不可混用;宿主配置必须绑定实际查询契约。 */
|
|
51
|
+
export declare function bindResourceRendering(rendering: ResourceRendering | undefined, resource: ResourceContract): ResourceRendering | undefined;
|
|
52
|
+
/** 业务记录/草稿边界;无需自定义 snippet 时,不把完整渲染工具链加入首屏。 */
|
|
53
|
+
export declare function createResourceRendering<S extends ContractSchemas>(resource: ResourceContract<S>): Readonly<{
|
|
54
|
+
resource: ResourceContract<S>;
|
|
55
|
+
record: (value: unknown) => ContractRecord<S>;
|
|
56
|
+
records: (value: unknown) => ContractRecord<S>[];
|
|
57
|
+
draft: <A extends ContractFormAction>(action: A, value: unknown) => ContractFormDraft<S, A>;
|
|
58
|
+
}>;
|
|
59
|
+
/** 原生 Svelte 渲染适配器:不执行生成代码,不发请求,也不改变组件生命周期。 */
|
|
60
|
+
export declare function createResourceRenderers<S extends ContractSchemas>(resource: ResourceContract<S>): Readonly<{
|
|
61
|
+
resource: ResourceContract<S>;
|
|
62
|
+
record: (value: unknown) => ContractRecord<S>;
|
|
63
|
+
records: (value: unknown) => ContractRecord<S>[];
|
|
64
|
+
draft: <A extends ContractFormAction>(action: A, value: unknown) => Partial<Record<Extract<keyof ContractFormValues<S, A>, string>, unknown>>;
|
|
65
|
+
cell: <K extends RecordField<S>>(key: K, input: CellInput) => CellContext<S, K>;
|
|
66
|
+
row: (input: {
|
|
67
|
+
record: Record<string, unknown>;
|
|
68
|
+
id: string | number;
|
|
69
|
+
}) => RowContext<S>;
|
|
70
|
+
summary: (input: {
|
|
71
|
+
data: readonly unknown[];
|
|
72
|
+
total: number;
|
|
73
|
+
visibleColumnsCount: number;
|
|
74
|
+
}) => {
|
|
75
|
+
data: ContractRecord<S>[];
|
|
76
|
+
total: number;
|
|
77
|
+
visibleColumnsCount: number;
|
|
78
|
+
};
|
|
79
|
+
columns: <const C extends CellSnippets<S>>(snippets: C & Record<Exclude<keyof C, RecordField<S>>, never>) => C;
|
|
80
|
+
field: <A extends ContractFormAction, K extends FormField<S, A>>(action: A, key: K, input: FieldInput) => FieldContext<S, A, K>;
|
|
81
|
+
}>;
|
|
82
|
+
/** 在普通 .ts 配置中保留组件与属性的类型关联;使用原生 <view.component {...view.props} />。 */
|
|
83
|
+
export interface ComponentView<P extends Record<string, unknown>> {
|
|
84
|
+
component: Component<P>;
|
|
85
|
+
props: P;
|
|
86
|
+
}
|
|
87
|
+
export declare function componentView<P extends Record<string, unknown>>(component: Component<P>, props: NoInfer<P>): ComponentView<P>;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { snapshotPlainData } from '@svadmin/core/schema';
|
|
2
|
+
import { contractFormInvalidFields, contractKey, getContractFormFields, parseContractId, parseContractRecord, snapshotContractFormDraft, } from '@svadmin/core/resource-contract';
|
|
3
|
+
/** 同名但不同实例的契约也不可混用;宿主配置必须绑定实际查询契约。 */
|
|
4
|
+
export function bindResourceRendering(rendering, resource) {
|
|
5
|
+
if (rendering && rendering.resource !== resource) {
|
|
6
|
+
throw new TypeError('Renderer resource contract mismatch');
|
|
7
|
+
}
|
|
8
|
+
return rendering;
|
|
9
|
+
}
|
|
10
|
+
function assertAction(action) {
|
|
11
|
+
if (!['create', 'edit', 'clone', 'show'].includes(action)) {
|
|
12
|
+
throw new TypeError('Invalid renderer form action');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function fieldState(resource, action, key, value) {
|
|
16
|
+
try {
|
|
17
|
+
const draft = snapshotContractFormDraft(resource, action, { [key]: value });
|
|
18
|
+
const invalid = contractFormInvalidFields(resource, action, draft);
|
|
19
|
+
if (invalid.includes(key) || invalid.includes('_root'))
|
|
20
|
+
return { valid: false };
|
|
21
|
+
return { valid: true, value: Object.hasOwn(draft, key) ? draft[key] : undefined };
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return { valid: false };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** 业务记录/草稿边界;无需自定义 snippet 时,不把完整渲染工具链加入首屏。 */
|
|
28
|
+
export function createResourceRendering(resource) {
|
|
29
|
+
contractKey(resource);
|
|
30
|
+
function record(value) {
|
|
31
|
+
return parseContractRecord(resource, value);
|
|
32
|
+
}
|
|
33
|
+
function records(value) {
|
|
34
|
+
const snapshot = snapshotPlainData(value);
|
|
35
|
+
if (!Array.isArray(snapshot))
|
|
36
|
+
throw new TypeError('Renderer records must be an array');
|
|
37
|
+
return snapshot.map(record);
|
|
38
|
+
}
|
|
39
|
+
function draft(action, value) {
|
|
40
|
+
assertAction(action);
|
|
41
|
+
return snapshotContractFormDraft(resource, action, value);
|
|
42
|
+
}
|
|
43
|
+
return Object.freeze({ resource, record, records, draft });
|
|
44
|
+
}
|
|
45
|
+
/** 原生 Svelte 渲染适配器:不执行生成代码,不发请求,也不改变组件生命周期。 */
|
|
46
|
+
export function createResourceRenderers(resource) {
|
|
47
|
+
const boundary = createResourceRendering(resource);
|
|
48
|
+
const { record, records, draft } = boundary;
|
|
49
|
+
const recordFields = new Set(getContractFormFields(resource, 'show'));
|
|
50
|
+
function cell(key, input) {
|
|
51
|
+
if (!recordFields.has(key))
|
|
52
|
+
throw new TypeError('Unknown renderer record field');
|
|
53
|
+
const checked = record(input.record);
|
|
54
|
+
// value 从已校验记录读取,不相信调用方传入的脱离记录的 value。
|
|
55
|
+
return { key, record: checked, value: checked[key] };
|
|
56
|
+
}
|
|
57
|
+
function row(input) {
|
|
58
|
+
const checked = record(input.record);
|
|
59
|
+
const id = parseContractId(resource, input.id);
|
|
60
|
+
if (!Object.is(id, checked['id']))
|
|
61
|
+
throw new TypeError('Renderer row identity mismatch');
|
|
62
|
+
return { record: checked, id };
|
|
63
|
+
}
|
|
64
|
+
function summary(input) {
|
|
65
|
+
if (!Array.isArray(input.data) || !Number.isSafeInteger(input.total) || input.total < 0
|
|
66
|
+
|| !Number.isSafeInteger(input.visibleColumnsCount) || input.visibleColumnsCount < 0) {
|
|
67
|
+
throw new TypeError('Invalid renderer summary');
|
|
68
|
+
}
|
|
69
|
+
return { data: input.data.map(record), total: input.total, visibleColumnsCount: input.visibleColumnsCount };
|
|
70
|
+
}
|
|
71
|
+
function columns(snippets) {
|
|
72
|
+
if (!snippets || ![Object.prototype, null].includes(Object.getPrototypeOf(snippets))
|
|
73
|
+
|| Object.getOwnPropertySymbols(snippets).length) {
|
|
74
|
+
throw new TypeError('Invalid renderer column map');
|
|
75
|
+
}
|
|
76
|
+
for (const [key, property] of Object.entries(Object.getOwnPropertyDescriptors(snippets))) {
|
|
77
|
+
if (!recordFields.has(key) || !property.enumerable || !('value' in property)
|
|
78
|
+
|| typeof property.value !== 'function')
|
|
79
|
+
throw new TypeError('Invalid renderer column');
|
|
80
|
+
}
|
|
81
|
+
// 不冻结调用方对象,也不保留可被后来添加属性的原始映射。
|
|
82
|
+
return { ...snippets };
|
|
83
|
+
}
|
|
84
|
+
function field(action, key, input) {
|
|
85
|
+
assertAction(action);
|
|
86
|
+
if (!getContractFormFields(resource, action).includes(key) || input.field.key !== key) {
|
|
87
|
+
throw new TypeError('Renderer form field mismatch');
|
|
88
|
+
}
|
|
89
|
+
const change = input.onchange;
|
|
90
|
+
const readonly = action === 'show';
|
|
91
|
+
function assertWritable() {
|
|
92
|
+
if (readonly)
|
|
93
|
+
throw new TypeError('Cannot update a read-only renderer');
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
field: { ...input.field, key },
|
|
97
|
+
state: fieldState(resource, action, key, input.value),
|
|
98
|
+
readonly,
|
|
99
|
+
onchange(value) {
|
|
100
|
+
assertWritable();
|
|
101
|
+
const checked = fieldState(resource, action, key, value);
|
|
102
|
+
if (!checked.valid)
|
|
103
|
+
throw new TypeError('Invalid renderer field value');
|
|
104
|
+
change(checked.value);
|
|
105
|
+
},
|
|
106
|
+
onDraftChange(value) {
|
|
107
|
+
assertWritable();
|
|
108
|
+
const draft = snapshotContractFormDraft(resource, action, { [key]: value });
|
|
109
|
+
change(Object.hasOwn(draft, key) ? draft[key] : undefined);
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return Object.freeze({ resource, record, records, draft, cell, row, summary, columns, field });
|
|
114
|
+
}
|
|
115
|
+
export function componentView(component, props) {
|
|
116
|
+
return { component, props };
|
|
117
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { withoutSpace } from '../helpers.js';
|
|
2
|
+
|
|
3
|
+
const conditionsStr = "_hover,_focus,_focusWithin,_focusVisible,_disabled,_active,_visited,_target,_readOnly,_readWrite,_empty,_checked,_enabled,_expanded,_highlighted,_complete,_incomplete,_dragging,_before,_after,_firstLetter,_firstLine,_marker,_selection,_file,_backdrop,_first,_last,_only,_even,_odd,_firstOfType,_lastOfType,_onlyOfType,_peerFocus,_peerHover,_peerActive,_peerFocusWithin,_peerFocusVisible,_peerDisabled,_peerChecked,_peerInvalid,_peerExpanded,_peerPlaceholderShown,_groupFocus,_groupHover,_groupActive,_groupFocusWithin,_groupFocusVisible,_groupDisabled,_groupChecked,_groupExpanded,_groupInvalid,_indeterminate,_required,_valid,_invalid,_autofill,_inRange,_outOfRange,_placeholder,_placeholderShown,_pressed,_selected,_grabbed,_underValue,_overValue,_atValue,_default,_optional,_open,_closed,_fullscreen,_loading,_hidden,_current,_currentPage,_currentStep,_today,_unavailable,_rangeStart,_rangeEnd,_now,_topmost,_motionReduce,_motionSafe,_print,_landscape,_portrait,_dark,_light,_osDark,_osLight,_highContrast,_lessContrast,_moreContrast,_ltr,_rtl,_scrollbar,_scrollbarThumb,_scrollbarTrack,_horizontal,_vertical,_icon,_starting,_noscript,_invertedColors,base"
|
|
4
|
+
const conditions = new Set(conditionsStr.split(','))
|
|
5
|
+
|
|
6
|
+
const conditionRegex = /^@|&|&$/
|
|
7
|
+
|
|
8
|
+
export function isCondition(value){
|
|
9
|
+
return conditions.has(value) || conditionRegex.test(value)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const underscoreRegex = /^_/
|
|
13
|
+
const conditionsSelectorRegex = /&|@/
|
|
14
|
+
|
|
15
|
+
export function finalizeConditions(paths){
|
|
16
|
+
return paths.map((path) => {
|
|
17
|
+
if (conditions.has(path)){
|
|
18
|
+
return path.replace(underscoreRegex, '')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (conditionsSelectorRegex.test(path)){
|
|
22
|
+
return `[${withoutSpace(path.trim())}]`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return path
|
|
26
|
+
})}
|
|
27
|
+
|
|
28
|
+
export function sortConditions(paths){
|
|
29
|
+
return paths.sort((a, b) => {
|
|
30
|
+
const aa = isCondition(a)
|
|
31
|
+
const bb = isCondition(b)
|
|
32
|
+
if (aa && !bb) return 1
|
|
33
|
+
if (!aa && bb) return -1
|
|
34
|
+
return 0
|
|
35
|
+
})
|
|
36
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
import type { SystemStyleObject } from '../types/index';
|
|
3
|
+
|
|
4
|
+
type Styles = SystemStyleObject | undefined | null | false
|
|
5
|
+
|
|
6
|
+
interface CssRawFunction {
|
|
7
|
+
(styles: Styles): SystemStyleObject
|
|
8
|
+
(styles: Styles[]): SystemStyleObject
|
|
9
|
+
(...styles: Array<Styles | Styles[]>): SystemStyleObject
|
|
10
|
+
(styles: Styles): SystemStyleObject
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface CssFunction {
|
|
14
|
+
(styles: Styles): string
|
|
15
|
+
(styles: Styles[]): string
|
|
16
|
+
(...styles: Array<Styles | Styles[]>): string
|
|
17
|
+
(styles: Styles): string
|
|
18
|
+
|
|
19
|
+
raw: CssRawFunction
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export declare const css: CssFunction;
|