@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.
Files changed (276) hide show
  1. package/README.md +62 -22
  2. package/THIRD_PARTY_NOTICES.md +52 -0
  3. package/dist/app.css +8488 -6297
  4. package/dist/app.theme.css +8514 -6374
  5. package/dist/class-properties.generated.d.ts +1 -0
  6. package/dist/class-properties.generated.js +2 -0
  7. package/dist/classnames.d.ts +8 -0
  8. package/dist/classnames.js +26 -0
  9. package/dist/component-registry.d.ts +14977 -0
  10. package/dist/component-registry.js +216 -0
  11. package/dist/components/AboutSettings.svelte +7 -1
  12. package/dist/components/AboutSettings.svelte.d.ts +4 -1
  13. package/dist/components/ActivityFeed.svelte +9 -3
  14. package/dist/components/ActivityFeed.svelte.d.ts +3 -0
  15. package/dist/components/AdminApp.svelte +19 -10
  16. package/dist/components/AdminApp.svelte.d.ts +6 -0
  17. package/dist/components/ApiSettings.svelte +41 -5
  18. package/dist/components/ApprovalCenter.svelte +283 -0
  19. package/dist/components/ApprovalCenter.svelte.d.ts +10 -0
  20. package/dist/components/AuditLogViewer.svelte +3 -1
  21. package/dist/components/AutoForm.svelte +53 -9
  22. package/dist/components/AutoForm.svelte.d.ts +3 -0
  23. package/dist/components/AutoTable.svelte +846 -43
  24. package/dist/components/AutoTable.svelte.d.ts +22 -1
  25. package/dist/components/BoundRecordDetailDrawer.svelte +17 -2
  26. package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +4 -0
  27. package/dist/components/Breadcrumbs.svelte +11 -1
  28. package/dist/components/CancelTaskButton.svelte +12 -42
  29. package/dist/components/ColorPicker.svelte +73 -0
  30. package/dist/components/ColorPicker.svelte.d.ts +15 -0
  31. package/dist/components/ComboboxField.svelte +143 -34
  32. package/dist/components/ComboboxField.svelte.d.ts +4 -2
  33. package/dist/components/CreatePage.svelte +4 -0
  34. package/dist/components/CreatePage.svelte.d.ts +2 -0
  35. package/dist/components/DashboardView.svelte +99 -0
  36. package/dist/components/DashboardView.svelte.d.ts +14 -0
  37. package/dist/components/DatePicker.svelte +10 -0
  38. package/dist/components/DatePicker.svelte.d.ts +6 -0
  39. package/dist/components/DateRangeInput.svelte +155 -0
  40. package/dist/components/DateRangeInput.svelte.d.ts +35 -0
  41. package/dist/components/DateRangePicker.svelte +10 -0
  42. package/dist/components/DateRangePicker.svelte.d.ts +6 -0
  43. package/dist/components/DateTimeInput.svelte +134 -0
  44. package/dist/components/DateTimeInput.svelte.d.ts +27 -0
  45. package/dist/components/DateTimePicker.svelte +10 -0
  46. package/dist/components/DateTimePicker.svelte.d.ts +6 -0
  47. package/dist/components/DevTools.svelte +36 -28
  48. package/dist/components/DevframePanel.svelte +123 -0
  49. package/dist/components/DevframePanel.svelte.d.ts +3 -0
  50. package/dist/components/EditPage.svelte +4 -0
  51. package/dist/components/EditPage.svelte.d.ts +2 -0
  52. package/dist/components/ErrorSummary.svelte +52 -0
  53. package/dist/components/ErrorSummary.svelte.d.ts +14 -0
  54. package/dist/components/FieldRenderer.svelte +172 -99
  55. package/dist/components/FileUpload.svelte +412 -0
  56. package/dist/components/FileUpload.svelte.d.ts +43 -0
  57. package/dist/components/FilterBuilder.svelte +244 -265
  58. package/dist/components/FilterBuilder.svelte.d.ts +3 -0
  59. package/dist/components/FilterCollectionInput.svelte +80 -0
  60. package/dist/components/FilterCollectionInput.svelte.d.ts +10 -0
  61. package/dist/components/GanttChart.svelte +66 -14
  62. package/dist/components/GanttChart.svelte.d.ts +6 -0
  63. package/dist/components/Header.svelte +18 -2
  64. package/dist/components/ImportWizard.svelte +509 -100
  65. package/dist/components/ImportWizard.svelte.d.ts +11 -0
  66. package/dist/components/JsonSchemaForm.svelte +322 -98
  67. package/dist/components/JsonSchemaForm.svelte.d.ts +18 -1
  68. package/dist/components/KanbanBoard.svelte +195 -40
  69. package/dist/components/KanbanBoard.svelte.d.ts +9 -2
  70. package/dist/components/Layout.svelte +4 -3
  71. package/dist/components/LazyAutoForm.svelte +28 -0
  72. package/dist/components/LazyAutoForm.svelte.d.ts +8 -0
  73. package/dist/components/LazyAutoTable.svelte +28 -0
  74. package/dist/components/LazyAutoTable.svelte.d.ts +8 -0
  75. package/dist/components/LazySettingsPage.svelte +28 -0
  76. package/dist/components/LazySettingsPage.svelte.d.ts +8 -0
  77. package/dist/components/LazyShowPage.svelte +28 -0
  78. package/dist/components/LazyShowPage.svelte.d.ts +8 -0
  79. package/dist/components/LazyTaskQueueDrawer.svelte.d.ts +1 -1
  80. package/dist/components/ListPage.svelte +9 -1
  81. package/dist/components/ListPage.svelte.d.ts +5 -0
  82. package/dist/components/LoginPage.svelte +2 -2
  83. package/dist/components/MoneyInput.svelte +25 -0
  84. package/dist/components/MoneyInput.svelte.d.ts +20 -0
  85. package/dist/components/MultiTabKeepAlive.svelte +11 -6
  86. package/dist/components/NotificationsSettings.svelte +69 -2
  87. package/dist/components/NotificationsSettings.svelte.d.ts +25 -1
  88. package/dist/components/NumberInput.svelte +25 -0
  89. package/dist/components/NumberInput.svelte.d.ts +19 -0
  90. package/dist/components/NumericInput.svelte +110 -0
  91. package/dist/components/NumericInput.svelte.d.ts +23 -0
  92. package/dist/components/PercentInput.svelte +25 -0
  93. package/dist/components/PercentInput.svelte.d.ts +20 -0
  94. package/dist/components/PermissionMatrix.svelte +20 -1
  95. package/dist/components/PivotExportButton.svelte +157 -0
  96. package/dist/components/PivotExportButton.svelte.d.ts +16 -0
  97. package/dist/components/PivotTable.svelte +229 -74
  98. package/dist/components/PivotTable.svelte.d.ts +19 -2
  99. package/dist/components/QuickEditDrawer.svelte +4 -1
  100. package/dist/components/QuickEditDrawer.svelte.d.ts +2 -0
  101. package/dist/components/RadioGroup.svelte +121 -0
  102. package/dist/components/RadioGroup.svelte.d.ts +43 -0
  103. package/dist/components/RangeSlider.svelte +127 -0
  104. package/dist/components/RangeSlider.svelte.d.ts +22 -0
  105. package/dist/components/Rate.svelte +121 -0
  106. package/dist/components/Rate.svelte.d.ts +16 -0
  107. package/dist/components/RecordDetailDrawer.svelte +6 -2
  108. package/dist/components/RecordDetailDrawer.svelte.d.ts +4 -0
  109. package/dist/components/RelationPicker.svelte +341 -0
  110. package/dist/components/RelationPicker.svelte.d.ts +26 -0
  111. package/dist/components/ResourceOperationsPage.svelte +25 -19
  112. package/dist/components/ResourceOperationsPage.svelte.d.ts +5 -1
  113. package/dist/components/RetryTaskButton.svelte +12 -42
  114. package/dist/components/SecuritySettings.svelte +29 -5
  115. package/dist/components/SegmentedControl.svelte +145 -0
  116. package/dist/components/SegmentedControl.svelte.d.ts +38 -0
  117. package/dist/components/SettingsPage.svelte +3 -1
  118. package/dist/components/SettingsPage.svelte.d.ts +1 -0
  119. package/dist/components/ShowInferencer.svelte +4 -2
  120. package/dist/components/ShowInferencer.svelte.d.ts +2 -0
  121. package/dist/components/ShowPage.svelte +25 -6
  122. package/dist/components/ShowPage.svelte.d.ts +5 -0
  123. package/dist/components/Sidebar.svelte +5 -5
  124. package/dist/components/Slider.svelte +100 -0
  125. package/dist/components/Slider.svelte.d.ts +19 -0
  126. package/dist/components/SpreadsheetView.svelte +1037 -124
  127. package/dist/components/SpreadsheetView.svelte.d.ts +19 -0
  128. package/dist/components/StepsForm.svelte +5 -5
  129. package/dist/components/SvarAutoTable.svelte +39 -0
  130. package/dist/components/SvarAutoTable.svelte.d.ts +13 -0
  131. package/dist/components/SvarDataGrid.svelte +362 -0
  132. package/dist/components/SvarDataGrid.svelte.d.ts +57 -0
  133. package/dist/components/SvarGridCell.svelte +10 -0
  134. package/dist/components/SvarGridCell.svelte.d.ts +7 -0
  135. package/dist/components/SvarResourceRead.svelte +50 -0
  136. package/dist/components/SvarResourceRead.svelte.d.ts +23 -0
  137. package/dist/components/SvarResourceTable.svelte +63 -0
  138. package/dist/components/SvarResourceTable.svelte.d.ts +42 -0
  139. package/dist/components/SvarResourceTableView.svelte +364 -0
  140. package/dist/components/SvarResourceTableView.svelte.d.ts +4 -0
  141. package/dist/components/TagsInput.svelte +178 -0
  142. package/dist/components/TagsInput.svelte.d.ts +17 -0
  143. package/dist/components/TaskQueueDrawer.svelte +72 -16
  144. package/dist/components/TimePicker.svelte +10 -0
  145. package/dist/components/TimePicker.svelte.d.ts +6 -0
  146. package/dist/components/TreeSelect.svelte +440 -46
  147. package/dist/components/TreeSelect.svelte.d.ts +6 -1
  148. package/dist/components/TreeTable.svelte +484 -82
  149. package/dist/components/TreeTable.svelte.d.ts +24 -1
  150. package/dist/components/TwoFactorAuthPage.svelte +85 -48
  151. package/dist/components/TwoFactorAuthPage.svelte.d.ts +12 -1
  152. package/dist/components/VirtualTable.svelte +116 -20
  153. package/dist/components/VirtualTable.svelte.d.ts +5 -0
  154. package/dist/components/account/CompanyProfilePage.svelte +74 -38
  155. package/dist/components/account/GetStartedPage.svelte +2 -1
  156. package/dist/components/account/ImportMembersPage.svelte +22 -167
  157. package/dist/components/account/ImportMembersPage.svelte.d.ts +4 -1
  158. package/dist/components/account/MemberDirectory.svelte +156 -0
  159. package/dist/components/account/MemberDirectory.svelte.d.ts +19 -0
  160. package/dist/components/account/MembersStarterPage.svelte +9 -55
  161. package/dist/components/account/MembersStarterPage.svelte.d.ts +5 -1
  162. package/dist/components/account/SecurityLogPage.svelte +4 -1
  163. package/dist/components/account/SettingsPlainPage.svelte +7 -38
  164. package/dist/components/account/SettingsPlainPage.svelte.d.ts +4 -1
  165. package/dist/components/account/SettingsSidebarPage.svelte +7 -20
  166. package/dist/components/account/TeamMembersPage.svelte +4 -20
  167. package/dist/components/account/TeamMembersPage.svelte.d.ts +5 -1
  168. package/dist/components/account/UserProfilePage.svelte +3 -25
  169. package/dist/components/account/UserProfilePage.svelte.d.ts +17 -2
  170. package/dist/components/auto-table-grid.d.ts +26 -0
  171. package/dist/components/auto-table-grid.js +1 -0
  172. package/dist/components/buttons/ExportButton.svelte +56 -12
  173. package/dist/components/buttons/ExportButton.svelte.d.ts +11 -0
  174. package/dist/components/content/ContentPageHeader.svelte +12 -9
  175. package/dist/components/content/ContentPageShell.svelte +6 -9
  176. package/dist/components/content/FileBrowser.svelte +35 -0
  177. package/dist/components/content/FileBrowser.svelte.d.ts +14 -0
  178. package/dist/components/content/MetricBlock.svelte +10 -13
  179. package/dist/components/content/NetworkTable.svelte +3 -3
  180. package/dist/components/content/NetworkTable.svelte.d.ts +1 -0
  181. package/dist/components/content/PageToolbar.svelte +6 -10
  182. package/dist/components/content/ReferenceNotice.svelte +5 -0
  183. package/dist/components/content/ReferenceNotice.svelte.d.ts +18 -0
  184. package/dist/components/content/SectionHeader.svelte +8 -13
  185. package/dist/components/content/SettingsFieldRow.svelte +9 -23
  186. package/dist/components/content/SettingsGroup.svelte +11 -27
  187. package/dist/components/content/StatusBadge.svelte +3 -8
  188. package/dist/components/content/WorkspaceLayout.svelte +8 -12
  189. package/dist/components/enterprise/filter-tree.d.ts +48 -0
  190. package/dist/components/enterprise/filter-tree.js +224 -0
  191. package/dist/components/enterprise/json-schema-form.d.ts +39 -0
  192. package/dist/components/enterprise/json-schema-form.js +195 -0
  193. package/dist/components/enterprise/recursive-schema-form.d.ts +30 -0
  194. package/dist/components/enterprise/recursive-schema-form.js +196 -0
  195. package/dist/components/enterprise/spreadsheet-formula.d.ts +12 -0
  196. package/dist/components/enterprise/spreadsheet-formula.js +245 -0
  197. package/dist/components/export-reference.d.ts +2 -0
  198. package/dist/components/export-reference.js +9 -0
  199. package/dist/components/fieldComponentMap.js +2 -0
  200. package/dist/components/fields/DateField.svelte +12 -12
  201. package/dist/components/fields/date-display.d.ts +6 -0
  202. package/dist/components/fields/date-display.js +24 -0
  203. package/dist/components/fields/date-field-value.d.ts +2 -0
  204. package/dist/components/fields/date-field-value.js +13 -0
  205. package/dist/components/json-schema-form-state.d.ts +37 -0
  206. package/dist/components/json-schema-form-state.js +168 -0
  207. package/dist/components/network/TeamCrewTablePage.svelte +6 -1
  208. package/dist/components/network/UserCardsNFTPage.svelte +2 -0
  209. package/dist/components/profile/PublicProfilePage.svelte +2 -0
  210. package/dist/components/record-detail.svelte.d.ts +3 -0
  211. package/dist/components/record-detail.svelte.js +10 -4
  212. package/dist/components/saved-list-views.d.ts +74 -1
  213. package/dist/components/saved-list-views.js +191 -3
  214. package/dist/components/svar-grid-cells.d.ts +14 -0
  215. package/dist/components/svar-grid-cells.js +2 -0
  216. package/dist/components/svar-grid-contract.d.ts +80 -0
  217. package/dist/components/svar-grid-contract.js +159 -0
  218. package/dist/components/svar-grid-interactions.d.ts +54 -0
  219. package/dist/components/svar-grid-interactions.js +174 -0
  220. package/dist/components/svar-grid-loading.d.ts +40 -0
  221. package/dist/components/svar-grid-loading.js +180 -0
  222. package/dist/components/svar-grid-operations.d.ts +37 -0
  223. package/dist/components/svar-grid-operations.js +186 -0
  224. package/dist/components/svar-grid-panes.d.ts +34 -0
  225. package/dist/components/svar-grid-panes.js +66 -0
  226. package/dist/components/svar-grid-resource-loading.d.ts +18 -0
  227. package/dist/components/svar-grid-resource-loading.js +68 -0
  228. package/dist/components/svar-grid-resource-session.svelte.d.ts +29 -0
  229. package/dist/components/svar-grid-resource-session.svelte.js +61 -0
  230. package/dist/components/table-contract.d.ts +12 -1
  231. package/dist/components/task-action.svelte.d.ts +13 -0
  232. package/dist/components/task-action.svelte.js +73 -0
  233. package/dist/components/ui/DesignSystemShowcase.svelte +164 -0
  234. package/dist/components/ui/DesignSystemShowcase.svelte.d.ts +3 -0
  235. package/dist/components/ui/badge/badge-variants.d.ts +3 -2
  236. package/dist/components/ui/badge/badge-variants.js +2 -1
  237. package/dist/components/ui/badge/badge.svelte +3 -0
  238. package/dist/components/ui/badge/badge.svelte.d.ts +1 -0
  239. package/dist/components/ui/button/button-variants.d.ts +5 -4
  240. package/dist/components/ui/button/button-variants.js +7 -2
  241. package/dist/components/ui/checkbox/checkbox.svelte +5 -1
  242. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +5 -1
  243. package/dist/components/ui/input/input.svelte +8 -6
  244. package/dist/components/ui/input/input.svelte.d.ts +4 -1
  245. package/dist/components/ui/select/select.svelte +4 -1
  246. package/dist/components/ui/select/select.svelte.d.ts +2 -1
  247. package/dist/components/ui/textarea/textarea.svelte +2 -1
  248. package/dist/components.css +3110 -0
  249. package/dist/date-input-policy.d.ts +4 -0
  250. package/dist/date-input-policy.js +35 -0
  251. package/dist/design-contract.d.ts +13 -0
  252. package/dist/design-contract.js +11 -0
  253. package/dist/design-system-components.d.ts +100 -0
  254. package/dist/design-system-components.js +101 -0
  255. package/dist/design-system.d.ts +15 -0
  256. package/dist/design-system.js +7 -0
  257. package/dist/devtools-bridge.d.ts +80 -0
  258. package/dist/devtools-bridge.js +92 -0
  259. package/dist/index.d.ts +50 -1
  260. package/dist/index.js +32 -2
  261. package/dist/page-chrome.css +12 -49
  262. package/dist/recipes.d.ts +960 -0
  263. package/dist/recipes.js +264 -0
  264. package/dist/rendering/index.d.ts +87 -0
  265. package/dist/rendering/index.js +117 -0
  266. package/dist/styles/aliases.css +49 -0
  267. package/dist/styles/compatibility.epilogue.css +384 -0
  268. package/dist/styles/compatibility.prelude.css +5513 -0
  269. package/dist/styles/conditional-states.css +28 -0
  270. package/dist/styles/conditional-utilities.css +22 -0
  271. package/dist/tree-table-model.d.ts +24 -0
  272. package/dist/tree-table-model.js +111 -0
  273. package/dist/utils.d.ts +1 -1
  274. package/dist/utils.js +1 -1
  275. package/package.json +40 -10
  276. package/styles-compatibility.json +12 -0
@@ -0,0 +1,38 @@
1
+ export interface SegmentedControlOption<T extends string = string> {
2
+ value: T;
3
+ label: string;
4
+ disabled?: boolean;
5
+ }
6
+ interface Props<T extends string = string> {
7
+ options: readonly SegmentedControlOption<T>[];
8
+ value?: T;
9
+ disabled?: boolean;
10
+ ariaLabel: string;
11
+ dir?: 'ltr' | 'rtl';
12
+ class?: string;
13
+ onchange?: (value: T) => void;
14
+ }
15
+ declare function $$render<T extends string>(): {
16
+ props: Props<T>;
17
+ exports: {};
18
+ bindings: "value";
19
+ slots: {};
20
+ events: {};
21
+ };
22
+ declare class __sveltets_Render<T extends string> {
23
+ props(): ReturnType<typeof $$render<T>>['props'];
24
+ events(): ReturnType<typeof $$render<T>>['events'];
25
+ slots(): ReturnType<typeof $$render<T>>['slots'];
26
+ bindings(): "value";
27
+ exports(): {};
28
+ }
29
+ interface $$IsomorphicComponent {
30
+ new <T extends string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
31
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
32
+ } & ReturnType<__sveltets_Render<T>['exports']>;
33
+ <T extends string>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
34
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
35
+ }
36
+ declare const SegmentedControl: $$IsomorphicComponent;
37
+ type SegmentedControl<T extends string> = InstanceType<typeof SegmentedControl<T>>;
38
+ export default SegmentedControl;
@@ -30,6 +30,7 @@
30
30
  }
31
31
 
32
32
  interface Props {
33
+ preferencesProvider?: import('./NotificationsSettings.svelte').NotificationPreferencesProvider;
33
34
  customSections?: SettingsSection[];
34
35
  profile?: Snippet;
35
36
  appearance?: Snippet;
@@ -44,6 +45,7 @@
44
45
  }
45
46
 
46
47
  let {
48
+ preferencesProvider,
47
49
  customSections,
48
50
  profile,
49
51
  appearance,
@@ -197,7 +199,7 @@
197
199
  {:else if activeKey === "integrations"}
198
200
  {#if integrations}{@render integrations()}{:else}<IntegrationsSettings />{/if}
199
201
  {:else if activeKey === "notifications"}
200
- {#if notifications}{@render notifications()}{:else}<NotificationsSettings />{/if}
202
+ {#if notifications}{@render notifications()}{:else}<NotificationsSettings {...preferencesProvider ? { preferencesProvider } : {}} />{/if}
201
203
  {:else if activeKey === "api"}
202
204
  {#if api}{@render api()}{:else}<ApiSettings />{/if}
203
205
  {:else if activeKey === "audit"}
@@ -10,6 +10,7 @@ interface SettingsSection {
10
10
  items: SettingsItem[];
11
11
  }
12
12
  interface Props {
13
+ preferencesProvider?: import('./NotificationsSettings.svelte').NotificationPreferencesProvider;
13
14
  customSections?: SettingsSection[];
14
15
  profile?: Snippet;
15
16
  appearance?: Snippet;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import type { ResourceRendering } from '../rendering/index.js';
2
3
  // ShowInferencer renders a detail page from the resource definition with no page-specific configuration.
3
4
  // The :id parameter is extracted from the URL automatically.
4
5
  import ShowPage from './ShowPage.svelte';
@@ -6,16 +7,17 @@
6
7
 
7
8
  interface Props {
8
9
  resourceName: string;
10
+ rendering?: ResourceRendering | undefined;
9
11
  /** Optional explicit id; defaults to the value parsed from the URL. */
10
12
  id?: string | number;
11
13
  class?: string;
12
14
  }
13
15
 
14
- let { resourceName, id, class: className = '' }: Props = $props();
16
+ let { resourceName, rendering, id, class: className = '' }: Props = $props();
15
17
  const parsed = useParsed();
16
18
  const resolvedId = $derived(id ?? parsed.id ?? '');
17
19
  </script>
18
20
 
19
21
  {#if resolvedId}
20
- <ShowPage {resourceName} id={resolvedId} class={className} />
22
+ <ShowPage {rendering} {resourceName} id={resolvedId} class={className} />
21
23
  {/if}
@@ -1,5 +1,7 @@
1
+ import type { ResourceRendering } from '../rendering/index.js';
1
2
  interface Props {
2
3
  resourceName: string;
4
+ rendering?: ResourceRendering | undefined;
3
5
  /** Optional explicit id; defaults to the value parsed from the URL. */
4
6
  id?: string | number;
5
7
  class?: string;
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
- import { useNavigation } from '@svadmin/core';
2
+ import type { ResourceRendering } from '../rendering/index.js';
3
+ import { captureAdminContext, useNavigation } from '@svadmin/core';
3
4
  import { useRecordDetail } from './record-detail.svelte';
4
5
  import { useTranslation } from '@svadmin/core/i18n';
5
6
  import type { Snippet } from 'svelte';
@@ -17,6 +18,7 @@
17
18
 
18
19
  interface Props {
19
20
  resourceName: string;
21
+ rendering?: ResourceRendering | undefined;
20
22
  id: string | number;
21
23
  density?: 'compact' | 'comfortable';
22
24
  layout?: 'list' | 'grid';
@@ -25,10 +27,14 @@
25
27
  headerActions?: Snippet;
26
28
  children?: Snippet;
27
29
  class?: string;
30
+ /** 宿主明确提供来源时优先使用,拒绝外部地址。 */
31
+ returnTo?: string;
32
+ onBack?: () => void;
28
33
  }
29
34
 
30
35
  let {
31
36
  resourceName,
37
+ rendering,
32
38
  id,
33
39
  density = 'comfortable',
34
40
  layout = 'list',
@@ -37,12 +43,25 @@
37
43
  headerActions,
38
44
  children,
39
45
  class: className = '',
46
+ returnTo,
47
+ onBack,
40
48
  }: Props = $props();
41
49
 
42
50
  const navigation = useNavigation();
51
+ const context = captureAdminContext();
52
+ function goBack() {
53
+ if (onBack) { onBack(); return; }
54
+ const target = returnTo ?? context.routerProvider?.parse().params['returnTo'];
55
+ if (target?.startsWith('/') && !target.startsWith('//') && !/[\\\r\n]/.test(target)) {
56
+ navigation.push(target);
57
+ return;
58
+ }
59
+ navigation.list(resourceName);
60
+ }
43
61
  const isCompact = $derived(density === 'compact');
44
62
 
45
- const detail = useRecordDetail(() => ({ resourceName, id }));
63
+ const detail = useRecordDetail(() => ({ resourceName, id, rendering }));
64
+ const activeRendering = $derived(detail.rendering);
46
65
  const resource = $derived(detail.resource);
47
66
  const showFields = $derived(detail.fields);
48
67
  const query = detail.query;
@@ -57,12 +76,12 @@
57
76
  });
58
77
  </script>
59
78
 
60
- <div class="{isCompact ? 'svadmin-u-6ed543e2fbbb' : 'svadmin-u-3e7ce58d64fa'} {className}">
79
+ <div data-svadmin-rendering-resource={activeRendering?.resource.name} data-svadmin-rendering-kind={activeRendering ? 'show' : undefined} class="{isCompact ? 'svadmin-u-6ed543e2fbbb' : 'svadmin-u-3e7ce58d64fa'} {className}">
61
80
  <PageHeader
62
81
  title="{resource.label} {i18n.t('common.detail')} #{id}"
63
82
  {density}
64
- onBack={() => navigation.list(resourceName)}
65
- backLabel={i18n.t('common.backToList')}
83
+ onBack={goBack}
84
+ backLabel={i18n.t('common.back')}
66
85
  >
67
86
  {#snippet actions()}
68
87
  {#if detail.canRead && query.isSuccess && resource.canEdit !== false}
@@ -107,7 +126,7 @@
107
126
  </Button>
108
127
  </div>
109
128
  {:else if query.isSuccess}
110
- {@const record = query.data.data}
129
+ {@const record = activeRendering ? activeRendering.record(query.data.data) : query.data.data}
111
130
  {#if layout === 'grid'}
112
131
  <Card.Root class="svadmin-u-2cd02d11d1af svadmin-u-6ee2d41e2d2d svadmin-u-438b2237b8d6">
113
132
  <Card.Content class="svadmin-u-8a539c7fe216">
@@ -1,6 +1,8 @@
1
+ import type { ResourceRendering } from '../rendering/index.js';
1
2
  import type { Snippet } from 'svelte';
2
3
  interface Props {
3
4
  resourceName: string;
5
+ rendering?: ResourceRendering | undefined;
4
6
  id: string | number;
5
7
  density?: 'compact' | 'comfortable';
6
8
  layout?: 'list' | 'grid';
@@ -9,6 +11,9 @@ interface Props {
9
11
  headerActions?: Snippet;
10
12
  children?: Snippet;
11
13
  class?: string;
14
+ /** 宿主明确提供来源时优先使用,拒绝外部地址。 */
15
+ returnTo?: string;
16
+ onBack?: () => void;
12
17
  }
13
18
  declare const ShowPage: import("svelte").Component<Props, {}, "">;
14
19
  type ShowPage = ReturnType<typeof ShowPage>;
@@ -309,10 +309,10 @@
309
309
  aria-label="Sidebar navigation"
310
310
  class="svadmin-u-7bc555991dba svadmin-u-5f89f14a26db svadmin-u-c78facc7a0a6 svadmin-u-0f2fff0ae96e svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-0fe7d7d814d0 svadmin-u-7890552ecd63"
311
311
  style="background-color: var(--sidebar);"
312
- class:w-[252px]={!collapsed}
313
- class:w-[70px]={collapsed}
312
+ class:svadmin-sidebar-expanded={!collapsed}
313
+ class:svadmin-sidebar-collapsed={collapsed}
314
314
  >
315
- <div class="svadmin-u-60fbb7713999 svadmin-u-07017cde3e97 svadmin-u-3960ffc248d9 svadmin-u-012fbd121f37" class:px-5={!collapsed} class:justify-center={collapsed}>
315
+ <div class="svadmin-u-60fbb7713999 svadmin-u-07017cde3e97 svadmin-u-3960ffc248d9 svadmin-u-012fbd121f37" class:svadmin-u-d139dd09e38d={!collapsed} class:svadmin-u-86843cf1e227={collapsed}>
316
316
  {#if !collapsed}
317
317
  <a href={formatSidebarLink('/')} class="group svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-7e9a2a250cc3" onclick={(e) => { e.preventDefault(); adminContext.navigate('/'); }}>
318
318
  <SvadminLogo />
@@ -331,7 +331,7 @@
331
331
  </div>
332
332
 
333
333
  <ScrollArea class="svadmin-u-36e579c0b41c sidebar-scroll">
334
- <nav aria-label="Main menu" class="svadmin-u-9fcd8a13827e" class:px-[10px]={!collapsed} class:px-2={collapsed}>
334
+ <nav aria-label="Main menu" class="svadmin-u-9fcd8a13827e" class:svadmin-u-7597e11b4d4b={!collapsed} class:svadmin-u-d5eab218aa34={collapsed}>
335
335
  {#if menu && menu.length > 0}
336
336
  <div class="svadmin-u-a26339f4b89e">
337
337
  {#each customMenuItems as item (item.name)}
@@ -511,7 +511,7 @@
511
511
  <Tooltip.Root>
512
512
  <Tooltip.Trigger>
513
513
  {#snippet child({ props }: { props: Record<string, unknown> })}
514
- <Button {...props} variant="ghost" size="icon" onclick={onToggle} class="svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179 svadmin-u-421ac2be5045 svadmin-u-68d55a736ff4 svadmin-u-55d1f8b9d318 svadmin-u-646e10356266">
514
+ <Button {...props} aria-label={i18n.t('common.toggleSidebar')} variant="ghost" size="icon" onclick={onToggle} class="svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179 svadmin-u-421ac2be5045 svadmin-u-68d55a736ff4 svadmin-u-55d1f8b9d318 svadmin-u-646e10356266">
515
515
  <ChevronRight class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
516
516
  </Button>
517
517
  {/snippet}
@@ -0,0 +1,100 @@
1
+ <script lang="ts">
2
+ import { cn } from '../utils.js';
3
+
4
+ interface Props {
5
+ value?: number;
6
+ min?: number;
7
+ max?: number;
8
+ step?: number;
9
+ id?: string;
10
+ name?: string;
11
+ disabled?: boolean;
12
+ required?: boolean;
13
+ invalid?: boolean;
14
+ describedby?: string;
15
+ ariaLabel?: string;
16
+ showValue?: boolean;
17
+ class?: string;
18
+ onchange?: (value: number) => void;
19
+ }
20
+
21
+ let {
22
+ value = $bindable(0),
23
+ min = 0,
24
+ max = 100,
25
+ step = 1,
26
+ id,
27
+ name,
28
+ disabled = false,
29
+ required = false,
30
+ invalid = false,
31
+ describedby,
32
+ ariaLabel,
33
+ showValue = false,
34
+ class: className = '',
35
+ onchange,
36
+ }: Props = $props();
37
+
38
+ const boundsValid = $derived(
39
+ Number.isFinite(min) && Number.isFinite(max) && min < max
40
+ && Number.isFinite(step) && step > 0,
41
+ );
42
+ const normalizedValue = $derived(
43
+ boundsValid ? Math.min(max, Math.max(min, Number.isFinite(value) ? value : min)) : min,
44
+ );
45
+
46
+ function handleInput(event: Event): void {
47
+ const input = event.currentTarget;
48
+ if (!(input instanceof HTMLInputElement) || disabled || !boundsValid) return;
49
+ const next = Number(input.value);
50
+ if (!Number.isFinite(next)) return;
51
+ value = next;
52
+ onchange?.(next);
53
+ }
54
+ </script>
55
+
56
+ <div class={cn('svadmin-slider', className)} data-invalid={invalid ? 'true' : undefined}>
57
+ <input
58
+ {id}
59
+ {name}
60
+ type="range"
61
+ value={normalizedValue}
62
+ {min}
63
+ {max}
64
+ {step}
65
+ {disabled}
66
+ {required}
67
+ aria-label={ariaLabel}
68
+ aria-invalid={invalid || undefined}
69
+ aria-describedby={describedby}
70
+ aria-valuetext={showValue ? String(normalizedValue) : undefined}
71
+ oninput={handleInput}
72
+ />
73
+ {#if showValue}<output for={id}>{normalizedValue}</output>{/if}
74
+ </div>
75
+
76
+ <style>
77
+ .svadmin-slider {
78
+ display: flex;
79
+ align-items: center;
80
+ gap: 8px;
81
+ inline-size: 100%;
82
+ }
83
+
84
+ .svadmin-slider input {
85
+ min-inline-size: 0;
86
+ flex: 1 1 auto;
87
+ accent-color: var(--primary);
88
+ }
89
+
90
+ .svadmin-slider output {
91
+ min-inline-size: 3ch;
92
+ color: var(--muted-foreground);
93
+ text-align: end;
94
+ font-variant-numeric: tabular-nums;
95
+ }
96
+
97
+ .svadmin-slider[data-invalid='true'] input {
98
+ accent-color: var(--destructive);
99
+ }
100
+ </style>
@@ -0,0 +1,19 @@
1
+ interface Props {
2
+ value?: number;
3
+ min?: number;
4
+ max?: number;
5
+ step?: number;
6
+ id?: string;
7
+ name?: string;
8
+ disabled?: boolean;
9
+ required?: boolean;
10
+ invalid?: boolean;
11
+ describedby?: string;
12
+ ariaLabel?: string;
13
+ showValue?: boolean;
14
+ class?: string;
15
+ onchange?: (value: number) => void;
16
+ }
17
+ declare const Slider: import("svelte").Component<Props, {}, "value">;
18
+ type Slider = ReturnType<typeof Slider>;
19
+ export default Slider;