@svadmin/ui 0.30.2 → 0.31.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.
@@ -87,6 +87,15 @@
87
87
  const resolvedRouter = $derived(routerProvider ?? createHashRouterProvider());
88
88
  const resolvedRouteMode = $derived(routeMode ?? (routerProvider ? 'auto' : 'hash'));
89
89
 
90
+ // Set up initial context synchronously so children can access resources immediately during first render
91
+ setDataProvider(dataProvider);
92
+ if (authProvider) setAuthProvider(authProvider);
93
+ setResources(resources);
94
+ setRouterProvider(resolvedRouter);
95
+ if (locale) setLocale(locale);
96
+ if (userThemeConfig) configureTheme(userThemeConfig);
97
+ if (defaultTheme) setTheme(defaultTheme);
98
+
90
99
  // Set up context — use $effect so prop changes are tracked
91
100
  $effect.pre(() => {
92
101
  setDataProvider(dataProvider);
@@ -104,7 +113,8 @@
104
113
  },
105
114
  });
106
115
 
107
- // Initialize router with provider
116
+ // Initialize router with provider synchronously
117
+ initRouter(resolvedRouter);
108
118
  $effect.pre(() => {
109
119
  initRouter(resolvedRouter);
110
120
  });
@@ -27,7 +27,7 @@
27
27
  }>();
28
28
 
29
29
  // Retrieve optional component overrides from registry
30
- const registry = getComponentRegistry();
30
+ const registry = getComponentRegistry() || {} as any;
31
31
  const CustomBreadcrumbs = registry.Breadcrumbs;
32
32
  const CustomThemeToggle = registry.ThemeToggle;
33
33
  const CustomUserMenu = registry.UserMenu;
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { cn, type WithElementRef } from "../../../utils.js";
3
3
  import type { HTMLButtonAttributes } from "svelte/elements";
4
+ import { getContext } from "svelte";
4
5
 
5
6
  type Props = WithElementRef<HTMLButtonAttributes, HTMLButtonElement>;
6
7
 
@@ -11,16 +12,25 @@
11
12
  child,
12
13
  ...restProps
13
14
  }: Props & { child?: import("svelte").Snippet<[{ props: Record<string, unknown> }]> } = $props();
15
+
16
+ const toggle = getContext<() => void>("svadmin-dropdown-toggle");
17
+
18
+ function handleClick(e: MouseEvent) {
19
+ e.stopPropagation();
20
+ toggle?.();
21
+ restProps.onclick?.(e as any);
22
+ }
14
23
  </script>
15
24
 
16
25
  {#if child}
17
- {@render child({ props: { ...restProps, class: cn(className), "data-slot": "dropdown-menu-trigger" } })}
26
+ {@render child({ props: { ...restProps, class: cn(className), "data-slot": "dropdown-menu-trigger", onclick: handleClick } })}
18
27
  {:else}
19
28
  <button
20
29
  bind:this={ref}
21
30
  data-slot="dropdown-menu-trigger"
22
31
  class={cn(className)}
23
32
  {...restProps}
33
+ onclick={handleClick}
24
34
  >
25
35
  {@render children?.()}
26
36
  </button>
@@ -26,6 +26,10 @@
26
26
  }
27
27
 
28
28
  setContext("svadmin-dropdown-open", () => open);
29
+ setContext("svadmin-dropdown-toggle", () => {
30
+ open = !open;
31
+ onOpenChange?.(open);
32
+ });
29
33
 
30
34
  $effect(() => {
31
35
  if (open) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@svadmin/ui",
3
- "version": "0.30.2",
3
+ "version": "0.31.0",
4
4
  "description": "Pre-built admin UI components — AdminApp, AutoTable, AutoForm, Sidebar, Layout",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -9,22 +9,23 @@
9
9
  "files": [
10
10
  "dist"
11
11
  ],
12
- "main": "src/index.ts",
13
- "types": "src/index.ts",
12
+ "main": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
14
  "exports": {
15
15
  ".": {
16
- "types": "./src/index.ts",
17
- "svelte": "./src/index.ts",
18
- "default": "./src/index.ts"
16
+ "types": "./dist/index.d.ts",
17
+ "default": "./dist/index.js",
18
+ "svelte": "./dist/index.js"
19
19
  },
20
20
  "./app.css": {
21
- "style": "./src/app.css",
22
- "default": "./src/app.css"
21
+ "style": "./dist/app.css",
22
+ "default": "./dist/app.css",
23
+ "svelte": "./dist/app.css"
23
24
  },
24
25
  "./components/*": "./dist/components/*"
25
26
  },
26
27
  "peerDependencies": {
27
- "@svadmin/core": "^0.21.2",
28
+ "@svadmin/core": "^0.22.0",
28
29
  "@tanstack/svelte-query": "^6.0.0",
29
30
  "highlight.js": "^11.11.1",
30
31
  "isomorphic-dompurify": "^3.7.1",
@@ -51,8 +52,7 @@
51
52
  },
52
53
  "dependencies": {
53
54
  "@lucide/svelte": "^1.7.0",
54
- "@tanstack/svelte-table": "9.0.0-alpha.32",
55
- "@tanstack/table-core": "9.0.0-alpha.32",
55
+ "@tanstack/svelte-table": "^9.0.0-alpha.10",
56
56
  "bits-ui": "^2.17.1",
57
57
  "clsx": "^2.1.1",
58
58
  "cmdk-sv": "^0.0.19",
@@ -71,7 +71,9 @@
71
71
  "bugs": {
72
72
  "url": "https://github.com/zuohuadong/svadmin/issues"
73
73
  },
74
- "devDependencies": {},
74
+ "devDependencies": {
75
+ "@tanstack/table-core": "8.21.3"
76
+ },
75
77
  "scripts": {
76
78
  "build": "svelte-package -i src -o dist"
77
79
  }
package/src/index.ts DELETED
@@ -1,155 +0,0 @@
1
- // @svadmin/ui — Pre-built admin UI components
2
-
3
- // Entry component
4
- export { default as AdminApp } from './components/AdminApp.svelte';
5
-
6
- // Admin components
7
- export { default as AutoTable } from './components/AutoTable.svelte';
8
- export { default as AutoForm } from './components/AutoForm.svelte';
9
- export { default as ShowPage } from './components/ShowPage.svelte';
10
- export { default as ConfirmDialog } from './components/ConfirmDialog.svelte';
11
- export { default as Sidebar } from './components/Sidebar.svelte';
12
- export { default as Layout } from './components/Layout.svelte';
13
- export { default as Header } from './components/Header.svelte';
14
- export { default as ErrorBoundary } from './components/ErrorBoundary.svelte';
15
- export { default as Toast } from './components/Toast.svelte';
16
- export { default as Breadcrumbs } from './components/Breadcrumbs.svelte';
17
- export { default as FieldRenderer } from './components/FieldRenderer.svelte';
18
- export { default as EmptyState } from './components/EmptyState.svelte';
19
- export { default as StatsCard } from './components/StatsCard.svelte';
20
- export { default as PageHeader } from './components/PageHeader.svelte';
21
- export { default as LoginPage } from './components/LoginPage.svelte';
22
- export { default as RegisterPage } from './components/RegisterPage.svelte';
23
- export { default as ForgotPasswordPage } from './components/ForgotPasswordPage.svelte';
24
- export { default as CanAccess } from './components/CanAccess.svelte';
25
- export { default as Can } from './components/CanAccess.svelte';
26
- export { default as UndoableNotification } from './components/UndoableNotification.svelte';
27
- export { default as ModalForm } from './components/ModalForm.svelte';
28
- export { default as DrawerForm } from './components/DrawerForm.svelte';
29
- export { default as DevTools } from './components/DevTools.svelte';
30
- export { default as Authenticated } from './components/Authenticated.svelte';
31
- export { default as UpdatePasswordPage } from './components/UpdatePasswordPage.svelte';
32
- export { default as ProfilePage } from './components/ProfilePage.svelte';
33
- export { default as ConfigErrorScreen } from './components/ConfigErrorScreen.svelte';
34
- export { default as InferencerPanel } from './components/InferencerPanel.svelte';
35
- export { default as LiveIndicator } from './components/LiveIndicator.svelte';
36
- export { default as ListPage } from './components/ListPage.svelte';
37
- export { default as CreatePage } from './components/CreatePage.svelte';
38
- export { default as EditPage } from './components/EditPage.svelte';
39
- export { default as AutoSaveIndicator } from './components/AutoSaveIndicator.svelte';
40
- export { default as ErrorComponent } from './components/ErrorComponent.svelte';
41
- export { default as PageSkeleton } from './components/PageSkeleton.svelte';
42
- export { default as NavigateToResource } from './components/NavigateToResource.svelte';
43
- export { default as CatchAllNavigate } from './components/CatchAllNavigate.svelte';
44
- export { default as ThemedTitle } from './components/ThemedTitle.svelte';
45
- export { default as CommandPalette } from './components/CommandPalette.svelte';
46
- export { default as StepsForm } from './components/StepsForm.svelte';
47
- export { default as InfiniteList } from './components/InfiniteList.svelte';
48
- export { default as ComboboxField } from './components/ComboboxField.svelte';
49
- export { default as PasswordInput } from './components/PasswordInput.svelte';
50
- export { default as ChatDialog } from "./components/ChatDialog.svelte";
51
- export { default as MarkdownRenderer } from "./components/MarkdownRenderer.svelte";
52
- export { default as SmartSuggest } from "./components/SmartSuggest.svelte";
53
- export { default as AICommandBar } from "./components/AICommandBar.svelte";
54
- export { default as CopilotPanel } from "./components/CopilotPanel.svelte";
55
- export { default as InsightCard } from "./components/InsightCard.svelte";
56
- export { default as AnomalyBadge } from "./components/AnomalyBadge.svelte";
57
- export { default as VoiceInput } from "./components/VoiceInput.svelte";
58
- export { default as AnimatedCounter } from "./components/AnimatedCounter.svelte";
59
- export { default as KeyboardShortcuts } from "./components/KeyboardShortcuts.svelte";
60
- export { default as InlineEdit } from "./components/InlineEdit.svelte";
61
- export { default as VirtualTable } from "./components/VirtualTable.svelte";
62
- export { default as DraggableHeader } from "./components/DraggableHeader.svelte";
63
- export { default as SettingsPage } from "./components/SettingsPage.svelte";
64
-
65
- // Editor Registry
66
- export { setRichTextEditor, getRichTextEditor } from "./editor-config.svelte.js";
67
-
68
- // Settings & Preferences
69
- export { default as AppearanceSettings } from "./components/AppearanceSettings.svelte";
70
- export { default as AboutSettings } from "./components/AboutSettings.svelte";
71
- export { default as PermissionMatrix } from "./components/PermissionMatrix.svelte";
72
- export type { RoleInfo, ResourceInfo, ActionInfo } from "./types.js";
73
- export { default as RolesSettings } from "./components/RolesSettings.svelte";
74
- export { default as AuditLogViewer } from "./components/AuditLogViewer.svelte";
75
- export { default as TenantSwitcher } from "./components/TenantSwitcher.svelte";
76
- export type { Tenant } from "./types.js";
77
- export { default as TaskQueueDrawer } from "./components/TaskQueueDrawer.svelte";
78
- export type { BackgroundTask, TaskStatus } from "./types.js";
79
- export { default as DraggableGrid } from "./components/DraggableGrid.svelte";
80
- export type { GridModule } from "./types.js";
81
-
82
- // Dashboard Charts (zero-dependency SVG)
83
- export { BarChart, LineChart, PieChart } from './components/charts/index.js';
84
- // Field display components
85
- export { default as NumberField } from './components/fields/NumberField.svelte';
86
- export { default as DateField } from './components/fields/DateField.svelte';
87
- export { default as EmailField } from './components/fields/EmailField.svelte';
88
- export { default as UrlField } from './components/fields/UrlField.svelte';
89
- export { default as BooleanField } from './components/fields/BooleanField.svelte';
90
- export { default as TagField } from './components/fields/TagField.svelte';
91
- export { default as FileField } from './components/fields/FileField.svelte';
92
- export { default as MarkdownField } from './components/fields/MarkdownField.svelte';
93
- export { default as TextField } from './components/fields/TextField.svelte';
94
- export { default as ImageField } from './components/fields/ImageField.svelte';
95
- export { default as SelectField } from './components/fields/SelectField.svelte';
96
- export { default as MultiSelectField } from './components/fields/MultiSelectField.svelte';
97
- export { default as RelationField } from './components/fields/RelationField.svelte';
98
- export { default as JsonField } from './components/fields/JsonField.svelte';
99
- export { default as RichTextField } from './components/fields/RichTextField.svelte';
100
-
101
- // Rich text editor (requires @svadmin/editor) as a direct import in consumer app
102
-
103
- // CRUD Buttons
104
- export {
105
- CreateButton, EditButton, DeleteButton, ShowButton, ListButton,
106
- RefreshButton, ExportButton, ImportButton, SaveButton, CloneButton,
107
- } from './components/buttons/index.js';
108
-
109
- // Base UI components (shadcn-svelte)
110
- export { Button, buttonVariants } from './components/ui/button/index.js';
111
- export { Input } from './components/ui/input/index.js';
112
- export { Textarea } from './components/ui/textarea/index.js';
113
- export { Select } from './components/ui/select/index.js';
114
- export { Switch } from './components/ui/switch/index.js';
115
- export { Checkbox } from './components/ui/checkbox/index.js';
116
- export { Badge } from './components/ui/badge/index.js';
117
- export { Separator } from './components/ui/separator/index.js';
118
- export { Avatar } from './components/ui/avatar/index.js';
119
- export { Skeleton } from './components/ui/skeleton/index.js';
120
- export * as Sheet from './components/ui/sheet/index.js';
121
- export * as Alert from './components/ui/alert/index.js';
122
- export * as Card from './components/ui/card/index.js';
123
- export * as Dialog from './components/ui/dialog/index.js';
124
- export * as Table from './components/ui/table/index.js';
125
- export * as Tabs from './components/ui/tabs/index.js';
126
- export * as Tooltip from './components/ui/tooltip/index.js';
127
- export * as DropdownMenu from './components/ui/dropdown-menu/index.js';
128
-
129
- // Additional shadcn components
130
- export * as Breadcrumb from './components/ui/breadcrumb/index.js';
131
- export * as Pagination from './components/ui/pagination/index.js';
132
- export * as ContextMenu from './components/ui/context-menu/index.js';
133
-
134
- export * as Collapsible from './components/ui/collapsible/index.js';
135
- export { Label } from './components/ui/label/index.js';
136
- export { Command } from './components/ui/command/index.js';
137
-
138
- // Utils
139
- export { cn } from './utils';
140
-
141
- // Component Registry (DI)
142
- export {
143
- setComponentRegistry, getComponentRegistry, useComponent,
144
- type ComponentRegistry,
145
- } from './component-registry.svelte';
146
-
147
- // Field component registry
148
- export {
149
- builtinDisplayComponents, registerDisplayComponent,
150
- getDisplayComponent, hasDisplayComponent,
151
- } from './components/fieldComponentMap';
152
- export type { FieldComponentMap } from './components/fieldComponentMap';
153
-
154
- // Svelte Actions
155
- export { clickOutside, shortcut, intersect, copyOnClick } from './actions';