@allbluecn/admin-app 0.2.6 → 0.3.1
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/package.json +16 -12
- package/src/components/admin/admin-user-menu.tsx +2 -4
- package/src/components/admin/developer-log.tsx +3 -5
- package/src/components/ai-memory/memory-facts-panel.tsx +383 -0
- package/src/components/ai-prompts/preview-panel.tsx +165 -0
- package/src/components/ai-prompts/prompt-editor.tsx +328 -0
- package/src/components/ai-prompts/prompt-table.tsx +141 -0
- package/src/components/ai-prompts/prompt-utils.ts +124 -0
- package/src/components/ai-prompts/section-editor.tsx +135 -0
- package/src/components/ai-prompts/variable-panel.tsx +128 -0
- package/src/components/ai-prompts/version-history.tsx +157 -0
- package/src/components/ai-provider/provider-form.tsx +6 -10
- package/src/components/ai-provider/provider-table.tsx +33 -13
- package/src/components/auth/admin-login-form.tsx +1 -1
- package/src/components/component/component-form-dialog.tsx +4 -4
- package/src/components/component/component-import-dialog.tsx +2 -2
- package/src/components/dependency/changelog-dialog.tsx +2 -4
- package/src/components/dependency/columns.tsx +4 -8
- package/src/components/dependency/dependency-table.tsx +2 -2
- package/src/components/dependency/edit-dialog.tsx +7 -11
- package/src/components/invitations/invitations-page.tsx +4 -8
- package/src/components/knowledge-public/bookmark-form-dialog.tsx +1 -1
- package/src/components/knowledge-public/compliance-form-dialog.tsx +1 -1
- package/src/components/knowledge-public/legal-form-dialog.tsx +2 -2
- package/src/components/layout/sidebar-02/app-sidebar.tsx +17 -9
- package/src/components/layout/sidebar-02/nav-main.tsx +6 -14
- package/src/components/layout/sidebar-02/nav-notifications.tsx +3 -7
- package/src/components/magicui/rainbow-button.tsx +2 -2
- package/src/components/market/columns.tsx +2 -4
- package/src/components/market/market-app-form.tsx +2 -2
- package/src/components/market/market-app-list.tsx +1 -1
- package/src/components/oauth-providers/provider-page.tsx +1 -1
- package/src/components/ui/alert-dialog.tsx +28 -57
- package/src/components/ui/alert.tsx +3 -4
- package/src/components/ui/avatar.tsx +5 -28
- package/src/components/ui/badge.tsx +19 -34
- package/src/components/ui/button.tsx +14 -41
- package/src/components/ui/card.tsx +6 -24
- package/src/components/ui/checkbox.tsx +4 -26
- package/src/components/ui/collapsible.tsx +6 -37
- package/src/components/ui/dialog.tsx +30 -60
- package/src/components/ui/dropdown-menu.tsx +118 -137
- package/src/components/ui/field.tsx +8 -27
- package/src/components/ui/input-group.tsx +13 -26
- package/src/components/ui/input.tsx +4 -21
- package/src/components/ui/label.tsx +3 -27
- package/src/components/ui/pagination.tsx +17 -31
- package/src/components/ui/select.tsx +101 -76
- package/src/components/ui/separator.tsx +4 -27
- package/src/components/ui/sheet.tsx +29 -58
- package/src/components/ui/sidebar.tsx +119 -117
- package/src/components/ui/skeleton.tsx +1 -18
- package/src/components/ui/switch.tsx +5 -24
- package/src/components/ui/table.tsx +1 -19
- package/src/components/ui/textarea.tsx +2 -20
- package/src/components/ui/toast.tsx +282 -0
- package/src/components/ui/tooltip.tsx +34 -45
- package/src/components/user/settings-activity-log.tsx +1 -1
- package/src/components/user/user-create-dialog.tsx +2 -2
- package/src/components/user/user-filters.tsx +2 -2
- package/src/hooks/use-mobile.ts +0 -17
- package/src/lib/pacer.ts +21 -0
- package/src/lib/utils.ts +1 -23
- package/src/paraglide/README.md +1 -1
- package/src/paraglide/messages/_index.js +95 -0
- package/src/paraglide/messages/admin_ai_memory_action_clearuser1.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_action_query.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_clear_cancel.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_clear_confirm_action.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_clear_confirm_description.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_clear_confirm_title.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_columns_actions.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_columns_content.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_columns_createdat1.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_columns_threadid1.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_delete_cancel.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_delete_confirm_action.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_delete_confirm_description.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_delete_confirm_title.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_empty.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_emptyhint1.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_error_nouserid2.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_error_query.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_error_title.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_form_user.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_page_description.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_page_title.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_placeholder_user.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_stat_count.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_stat_lastwrite1.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_toast_cleared.js +30 -0
- package/src/paraglide/messages/admin_ai_memory_toast_deleted.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_active.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_back.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_badge_protected.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_cache_hint.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_columns_active.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_columns_key.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_columns_name.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_columns_protected.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_columns_updatedat1.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_columns_version.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_description.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_description_placeholder.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_edit.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_name.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_name_placeholder.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_note_placeholder.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_page_description.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_page_title.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_preview_empty.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_preview_generating.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_preview_hint.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_preview_nocontent1.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_preview_placeholder.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_preview_section.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_preview_title.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_protected_hint.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_rollback.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_rollback_confirm_action.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_rollback_confirm_description.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_rollback_confirm_title.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_save.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_section_add.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_section_id.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_section_movedown1.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_section_moveup1.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_section_order.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_section_remove.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_section_template_placeholder.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_sections_empty.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_sections_hint.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_sections_title.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_toast_activated.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_toast_failed.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_toast_protected_locked.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_toast_rolled_back.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_toast_save_failed.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_toast_saved.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_variable_add.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_variable_declarehint1.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_variable_description_placeholder.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_variable_name_placeholder.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_variable_remove.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_variable_undeclared.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_variables_empty.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_variables_title.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_versions_current.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_versions_empty.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_versions_hint.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_versions_nonote1.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_versions_title.js +30 -0
- package/src/paraglide/messages/admin_ai_prompts_versions_unknowncreator1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_seedfromseed2.js +30 -0
- package/src/paraglide/messages/admin_ai_table_toast_seedcreated1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_toast_seedfailed1.js +30 -0
- package/src/paraglide/messages/admin_ai_table_toast_seednonew2.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_sandbox1.js +30 -0
- package/src/paraglide/messages/common_monitoring_aiusage_sandboxvalue2.js +30 -0
- package/src/paraglide/messages/common_nav_aiprompts1.js +30 -0
- package/src/routeTree.gen.ts +101 -0
- package/src/routes/__root.tsx +2 -2
- package/src/{components/ui/sonner.tsx → routes/_nav/ai-memory/route.lazy.tsx} +24 -16
- package/src/routes/_nav/ai-memory/route.tsx +31 -0
- package/src/routes/_nav/ai-prompts/$key/route.lazy.tsx +32 -0
- package/src/routes/_nav/ai-prompts/$key/route.tsx +37 -0
- package/src/routes/_nav/ai-prompts/index/route.lazy.tsx +47 -0
- package/src/routes/_nav/ai-prompts/route.lazy.tsx +26 -0
- package/src/routes/_nav/ai-prompts/route.tsx +31 -0
- package/src/routes/_nav/compliance/route.lazy.tsx +2 -4
- package/src/routes/_nav/components/route.lazy.tsx +1 -1
- package/src/routes/_nav/knowledge-public/bookmarks/route.lazy.tsx +1 -1
- package/src/routes/_nav/knowledge-public/compliance/route.lazy.tsx +1 -1
- package/src/routes/_nav/knowledge-public/legal/route.lazy.tsx +1 -1
- package/src/routes/_nav/licenses/$licenseId/route.lazy.tsx +1 -1
- package/src/routes/_nav/monitoring/ai-usage/route.lazy.tsx +10 -1
- package/src/routes/_nav/monitoring/errors/route.lazy.tsx +1 -1
- package/src/routes/_nav/monitoring/health/route.lazy.tsx +1 -1
- package/src/routes/_nav/monitoring/logs/route.lazy.tsx +1 -1
- package/src/routes/_nav/monitoring/metrics/route.lazy.tsx +1 -1
- package/src/routes/_nav/monitoring/sentry/route.lazy.tsx +1 -1
- package/src/routes/_nav/permissions/route.lazy.tsx +2 -2
- package/src/routes/_nav/sso/route.lazy.tsx +1 -1
- package/src/routes/_nav/users/$userId/route.lazy.tsx +3 -3
- package/src/routes/setup/route.lazy.tsx +1 -1
- package/src/server/__tests__/prompt-defaults.test.ts +139 -0
- package/src/server/admin-ai-usage.ts +22 -4
- package/src/server/ai-memory/store.ts +103 -0
- package/src/server/serverFns/ai-memory/clear.ts +31 -0
- package/src/server/serverFns/ai-memory/delete.ts +31 -0
- package/src/server/serverFns/ai-memory/list-users.ts +40 -0
- package/src/server/serverFns/ai-memory/list.ts +54 -0
- package/src/server/serverFns/ai-prompts/activate.ts +53 -0
- package/src/server/serverFns/ai-prompts/get.ts +74 -0
- package/src/server/serverFns/ai-prompts/list.ts +55 -0
- package/src/server/serverFns/ai-prompts/preview.ts +66 -0
- package/src/server/serverFns/ai-prompts/prompt-defaults.ts +63 -0
- package/src/server/serverFns/ai-prompts/prompt-schemas.ts +47 -0
- package/src/server/serverFns/ai-prompts/rollback.ts +86 -0
- package/src/server/serverFns/ai-prompts/save.ts +129 -0
- package/src/server/serverFns/ai-provider/seed-from-seed.ts +64 -0
- package/src/styles/globals.css +92 -77
- package/src/components/layout/sidebar-02/logo.tsx +0 -40
- package/src/components/layout/sidebar-02/team-switcher.tsx +0 -106
- package/src/components/providers/theme-toggle.tsx +0 -59
package/src/styles/globals.css
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
|
|
4
4
|
@import "tailwindcss";
|
|
5
5
|
|
|
6
|
+
@import "tw-animate-css";
|
|
7
|
+
|
|
8
|
+
@import "shadcn/tailwind.css";
|
|
9
|
+
|
|
10
|
+
@import "@fontsource-variable/inter";
|
|
11
|
+
|
|
6
12
|
@custom-variant dark (&:is(.dark *));
|
|
7
13
|
|
|
8
14
|
@theme inline {
|
|
@@ -54,126 +60,132 @@
|
|
|
54
60
|
--color-chart-4: var(--chart-4);
|
|
55
61
|
--color-chart-5: var(--chart-5);
|
|
56
62
|
|
|
57
|
-
--color-1: var(--color-1);
|
|
58
|
-
--color-2: var(--color-2);
|
|
59
|
-
--color-3: var(--color-3);
|
|
60
|
-
--color-4: var(--color-4);
|
|
61
|
-
--color-5: var(--color-5);
|
|
63
|
+
--color-accent-1: var(--color-accent-1);
|
|
64
|
+
--color-accent-2: var(--color-accent-2);
|
|
65
|
+
--color-accent-3: var(--color-accent-3);
|
|
66
|
+
--color-accent-4: var(--color-accent-4);
|
|
67
|
+
--color-accent-5: var(--color-accent-5);
|
|
62
68
|
|
|
63
69
|
--animate-rainbow: rainbow 5s linear infinite;
|
|
64
70
|
@keyframes rainbow {
|
|
65
71
|
0% { background-position: 0%; }
|
|
66
72
|
100% { background-position: 200%; }
|
|
67
73
|
}
|
|
74
|
+
--font-heading: var(--font-sans);
|
|
75
|
+
--font-sans: 'Inter Variable', sans-serif;
|
|
76
|
+
--radius-2xl: calc(var(--radius) * 1.8);
|
|
77
|
+
--radius-3xl: calc(var(--radius) * 2.2);
|
|
78
|
+
--radius-4xl: calc(var(--radius) * 2.6)
|
|
68
79
|
}
|
|
69
80
|
|
|
70
81
|
:root {
|
|
71
82
|
--radius: 0.625rem;
|
|
72
83
|
--background: oklch(1 0 0);
|
|
73
|
-
--foreground: oklch(0.
|
|
84
|
+
--foreground: oklch(0.153 0.006 107.1);
|
|
74
85
|
|
|
75
|
-
--sidebar: oklch(0.
|
|
76
|
-
--sidebar-foreground: oklch(0.
|
|
77
|
-
--sidebar-primary: oklch(0.
|
|
78
|
-
--sidebar-primary-foreground: oklch(0.
|
|
79
|
-
--sidebar-accent: oklch(0.
|
|
80
|
-
--sidebar-accent-foreground: oklch(0.
|
|
81
|
-
--sidebar-ring: oklch(0.
|
|
82
|
-
--sidebar-border: oklch(0.
|
|
86
|
+
--sidebar: oklch(0.988 0.003 106.5);
|
|
87
|
+
--sidebar-foreground: oklch(0.153 0.006 107.1);
|
|
88
|
+
--sidebar-primary: oklch(0.228 0.013 107.4);
|
|
89
|
+
--sidebar-primary-foreground: oklch(0.988 0.003 106.5);
|
|
90
|
+
--sidebar-accent: oklch(0.966 0.005 106.5);
|
|
91
|
+
--sidebar-accent-foreground: oklch(0.228 0.013 107.4);
|
|
92
|
+
--sidebar-ring: oklch(0.737 0.021 106.9);
|
|
93
|
+
--sidebar-border: oklch(0.93 0.007 106.5);
|
|
83
94
|
|
|
84
95
|
--card: oklch(1 0 0);
|
|
85
|
-
--card-foreground: oklch(0.
|
|
96
|
+
--card-foreground: oklch(0.153 0.006 107.1);
|
|
86
97
|
|
|
87
98
|
--popover: oklch(1 0 0);
|
|
88
|
-
--popover-foreground: oklch(0.
|
|
99
|
+
--popover-foreground: oklch(0.153 0.006 107.1);
|
|
89
100
|
|
|
90
|
-
--primary: oklch(0.
|
|
91
|
-
--primary-foreground: oklch(0.
|
|
101
|
+
--primary: oklch(0.228 0.013 107.4);
|
|
102
|
+
--primary-foreground: oklch(0.988 0.003 106.5);
|
|
92
103
|
|
|
93
|
-
--secondary: oklch(0.
|
|
94
|
-
--secondary-foreground: oklch(0.
|
|
104
|
+
--secondary: oklch(0.966 0.005 106.5);
|
|
105
|
+
--secondary-foreground: oklch(0.228 0.013 107.4);
|
|
95
106
|
|
|
96
|
-
--muted: oklch(0.
|
|
97
|
-
--muted-foreground: oklch(0.
|
|
107
|
+
--muted: oklch(0.966 0.005 106.5);
|
|
108
|
+
--muted-foreground: oklch(0.58 0.031 107.3);
|
|
98
109
|
|
|
99
|
-
--accent: oklch(0.
|
|
100
|
-
--accent-foreground: oklch(0.
|
|
110
|
+
--accent: oklch(0.966 0.005 106.5);
|
|
111
|
+
--accent-foreground: oklch(0.228 0.013 107.4);
|
|
101
112
|
|
|
102
113
|
--destructive: oklch(0.577 0.245 27.325);
|
|
103
114
|
--destructive-foreground: oklch(0.985 0 0);
|
|
104
115
|
|
|
105
|
-
--border: oklch(0.
|
|
106
|
-
--input: oklch(0.
|
|
107
|
-
--ring: oklch(0.
|
|
108
|
-
|
|
109
|
-
--chart-1: oklch(0.
|
|
110
|
-
--chart-2: oklch(0.
|
|
111
|
-
--chart-3: oklch(0.
|
|
112
|
-
--chart-4: oklch(0.
|
|
113
|
-
--chart-5: oklch(0.
|
|
114
|
-
|
|
115
|
-
--color-1: oklch(66.2% 0.225 25.9);
|
|
116
|
-
--color-2: oklch(60.4% 0.26 302);
|
|
117
|
-
--color-3: oklch(69.6% 0.165 251);
|
|
118
|
-
--color-4: oklch(80.2% 0.134 225);
|
|
119
|
-
--color-5: oklch(90.7% 0.231 133);
|
|
116
|
+
--border: oklch(0.93 0.007 106.5);
|
|
117
|
+
--input: oklch(0.93 0.007 106.5);
|
|
118
|
+
--ring: oklch(0.737 0.021 106.9);
|
|
119
|
+
|
|
120
|
+
--chart-1: oklch(0.88 0.011 106.6);
|
|
121
|
+
--chart-2: oklch(0.58 0.031 107.3);
|
|
122
|
+
--chart-3: oklch(0.466 0.025 107.3);
|
|
123
|
+
--chart-4: oklch(0.394 0.023 107.4);
|
|
124
|
+
--chart-5: oklch(0.286 0.016 107.4);
|
|
125
|
+
|
|
126
|
+
--color-accent-1: oklch(66.2% 0.225 25.9);
|
|
127
|
+
--color-accent-2: oklch(60.4% 0.26 302);
|
|
128
|
+
--color-accent-3: oklch(69.6% 0.165 251);
|
|
129
|
+
--color-accent-4: oklch(80.2% 0.134 225);
|
|
130
|
+
--color-accent-5: oklch(90.7% 0.231 133);
|
|
120
131
|
}
|
|
121
132
|
|
|
122
133
|
.dark {
|
|
123
|
-
--background: oklch(0.
|
|
124
|
-
--foreground: oklch(0.
|
|
134
|
+
--background: oklch(0.153 0.006 107.1);
|
|
135
|
+
--foreground: oklch(0.988 0.003 106.5);
|
|
125
136
|
|
|
126
|
-
--sidebar: oklch(0.
|
|
127
|
-
--sidebar-foreground: oklch(0.
|
|
128
|
-
--sidebar-primary: oklch(0.
|
|
129
|
-
--sidebar-primary-foreground: oklch(0.
|
|
130
|
-
--sidebar-accent: oklch(0.
|
|
131
|
-
--sidebar-accent-foreground: oklch(0.
|
|
132
|
-
--sidebar-ring: oklch(0.
|
|
133
|
-
--sidebar-border: oklch(0
|
|
137
|
+
--sidebar: oklch(0.228 0.013 107.4);
|
|
138
|
+
--sidebar-foreground: oklch(0.988 0.003 106.5);
|
|
139
|
+
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
140
|
+
--sidebar-primary-foreground: oklch(0.988 0.003 106.5);
|
|
141
|
+
--sidebar-accent: oklch(0.286 0.016 107.4);
|
|
142
|
+
--sidebar-accent-foreground: oklch(0.988 0.003 106.5);
|
|
143
|
+
--sidebar-ring: oklch(0.58 0.031 107.3);
|
|
144
|
+
--sidebar-border: oklch(1 0 0 / 10%);
|
|
134
145
|
|
|
135
|
-
--card: oklch(0.
|
|
136
|
-
--card-foreground: oklch(0.
|
|
146
|
+
--card: oklch(0.228 0.013 107.4);
|
|
147
|
+
--card-foreground: oklch(0.988 0.003 106.5);
|
|
137
148
|
|
|
138
|
-
--popover: oklch(0.
|
|
139
|
-
--popover-foreground: oklch(0.
|
|
149
|
+
--popover: oklch(0.228 0.013 107.4);
|
|
150
|
+
--popover-foreground: oklch(0.988 0.003 106.5);
|
|
140
151
|
|
|
141
|
-
--primary: oklch(
|
|
142
|
-
--primary-foreground: oklch(0.
|
|
152
|
+
--primary: oklch(0.93 0.007 106.5);
|
|
153
|
+
--primary-foreground: oklch(0.228 0.013 107.4);
|
|
143
154
|
|
|
144
|
-
--secondary: oklch(0.
|
|
145
|
-
--secondary-foreground: oklch(0.
|
|
155
|
+
--secondary: oklch(0.286 0.016 107.4);
|
|
156
|
+
--secondary-foreground: oklch(0.988 0.003 106.5);
|
|
146
157
|
|
|
147
|
-
--muted: oklch(0.
|
|
148
|
-
--muted-foreground: oklch(0.
|
|
158
|
+
--muted: oklch(0.286 0.016 107.4);
|
|
159
|
+
--muted-foreground: oklch(0.737 0.021 106.9);
|
|
149
160
|
|
|
150
|
-
--accent: oklch(0.
|
|
151
|
-
--accent-foreground: oklch(0.
|
|
161
|
+
--accent: oklch(0.286 0.016 107.4);
|
|
162
|
+
--accent-foreground: oklch(0.988 0.003 106.5);
|
|
152
163
|
|
|
153
164
|
--destructive: oklch(0.704 0.191 22.216);
|
|
154
165
|
--destructive-foreground: oklch(0.985 0 0);
|
|
155
166
|
|
|
156
|
-
--border: oklch(0
|
|
157
|
-
--input: oklch(0
|
|
158
|
-
--ring: oklch(0.
|
|
159
|
-
|
|
160
|
-
--chart-1: oklch(0.
|
|
161
|
-
--chart-2: oklch(0.
|
|
162
|
-
--chart-3: oklch(0.
|
|
163
|
-
--chart-4: oklch(0.
|
|
164
|
-
--chart-5: oklch(0.
|
|
165
|
-
|
|
166
|
-
--color-1: oklch(66.2% 0.225 25.9);
|
|
167
|
-
--color-2: oklch(60.4% 0.26 302);
|
|
168
|
-
--color-3: oklch(69.6% 0.165 251);
|
|
169
|
-
--color-4: oklch(80.2% 0.134 225);
|
|
170
|
-
--color-5: oklch(90.7% 0.231 133);
|
|
167
|
+
--border: oklch(1 0 0 / 10%);
|
|
168
|
+
--input: oklch(1 0 0 / 15%);
|
|
169
|
+
--ring: oklch(0.58 0.031 107.3);
|
|
170
|
+
|
|
171
|
+
--chart-1: oklch(0.88 0.011 106.6);
|
|
172
|
+
--chart-2: oklch(0.58 0.031 107.3);
|
|
173
|
+
--chart-3: oklch(0.466 0.025 107.3);
|
|
174
|
+
--chart-4: oklch(0.394 0.023 107.4);
|
|
175
|
+
--chart-5: oklch(0.286 0.016 107.4);
|
|
176
|
+
|
|
177
|
+
--color-accent-1: oklch(66.2% 0.225 25.9);
|
|
178
|
+
--color-accent-2: oklch(60.4% 0.26 302);
|
|
179
|
+
--color-accent-3: oklch(69.6% 0.165 251);
|
|
180
|
+
--color-accent-4: oklch(80.2% 0.134 225);
|
|
181
|
+
--color-accent-5: oklch(90.7% 0.231 133);
|
|
171
182
|
}
|
|
172
183
|
|
|
173
184
|
@layer base {
|
|
174
185
|
* {
|
|
175
186
|
border-color: var(--color-border);
|
|
176
187
|
box-sizing: border-box;
|
|
188
|
+
@apply border-border outline-ring/50;
|
|
177
189
|
}
|
|
178
190
|
|
|
179
191
|
html, body {
|
|
@@ -185,7 +197,10 @@
|
|
|
185
197
|
body {
|
|
186
198
|
background-color: var(--color-background);
|
|
187
199
|
color: var(--color-foreground);
|
|
200
|
+
@apply bg-background text-foreground;
|
|
188
201
|
}
|
|
202
|
+
html {
|
|
203
|
+
@apply font-sans;}
|
|
189
204
|
}
|
|
190
205
|
|
|
191
206
|
::view-transition-old(root), ::view-transition-new(root) {
|
|
@@ -197,4 +212,4 @@
|
|
|
197
212
|
将 new snapshot 锁定在 collapsed 状态,避免瞬显闪烁。 */
|
|
198
213
|
[data-magicui-theme-vt="active"]::view-transition-new(root) {
|
|
199
214
|
clip-path: var(--magicui-theme-vt-clip-from);
|
|
200
|
-
}
|
|
215
|
+
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// AllBlue - 理想之海
|
|
3
|
-
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
-
//
|
|
5
|
-
// This program is free software: you can redistribute it and/or modify
|
|
6
|
-
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
-
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
// (at your option) any later version.
|
|
9
|
-
//
|
|
10
|
-
// This program is distributed in the hope that it will be useful,
|
|
11
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
// GNU Affero General Public License for more details.
|
|
14
|
-
//
|
|
15
|
-
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
-
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
-
|
|
18
|
-
import { SVGProps } from "react";
|
|
19
|
-
|
|
20
|
-
export const Logo = (props: SVGProps<SVGSVGElement>) => (
|
|
21
|
-
<svg
|
|
22
|
-
fill="currentColor"
|
|
23
|
-
height="48"
|
|
24
|
-
viewBox="0 0 40 48"
|
|
25
|
-
width="40"
|
|
26
|
-
{...props}
|
|
27
|
-
>
|
|
28
|
-
<clipPath id="a">
|
|
29
|
-
<path d="m0 0h40v48h-40z" />
|
|
30
|
-
</clipPath>
|
|
31
|
-
<g clipPath="url(#a)">
|
|
32
|
-
<path d="m25.0887 5.05386-3.933-1.05386-3.3145 12.3696-2.9923-11.16736-3.9331 1.05386 3.233 12.0655-8.05262-8.0526-2.87919 2.8792 8.83271 8.8328-10.99975-2.9474-1.05385625 3.933 12.01860625 3.2204c-.1376-.5935-.2104-1.2119-.2104-1.8473 0-4.4976 3.646-8.1436 8.1437-8.1436 4.4976 0 8.1436 3.646 8.1436 8.1436 0 .6313-.0719 1.2459-.2078 1.8359l10.9227 2.9267 1.0538-3.933-12.0664-3.2332 11.0005-2.9476-1.0539-3.933-12.0659 3.233 8.0526-8.0526-2.8792-2.87916-8.7102 8.71026z" />
|
|
33
|
-
<path d="m27.8723 26.2214c-.3372 1.4256-1.0491 2.7063-2.0259 3.7324l7.913 7.9131 2.8792-2.8792z" />
|
|
34
|
-
<path d="m25.7665 30.0366c-.9886 1.0097-2.2379 1.7632-3.6389 2.1515l2.8794 10.746 3.933-1.0539z" />
|
|
35
|
-
<path d="m21.9807 32.2274c-.65.1671-1.3313.2559-2.0334.2559-.7522 0-1.4806-.102-2.1721-.2929l-2.882 10.7558 3.933 1.0538z" />
|
|
36
|
-
<path d="m17.6361 32.1507c-1.3796-.4076-2.6067-1.1707-3.5751-2.1833l-7.9325 7.9325 2.87919 2.8792z" />
|
|
37
|
-
<path d="m13.9956 29.8973c-.9518-1.019-1.6451-2.2826-1.9751-3.6862l-10.95836 2.9363 1.05385 3.933z" />
|
|
38
|
-
</g>
|
|
39
|
-
</svg>
|
|
40
|
-
);
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// AllBlue - 理想之海
|
|
3
|
-
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
-
//
|
|
5
|
-
// This program is free software: you can redistribute it and/or modify
|
|
6
|
-
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
-
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
// (at your option) any later version.
|
|
9
|
-
//
|
|
10
|
-
// This program is distributed in the hope that it will be useful,
|
|
11
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
// GNU Affero General Public License for more details.
|
|
14
|
-
//
|
|
15
|
-
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
-
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import {
|
|
20
|
-
DropdownMenu,
|
|
21
|
-
DropdownMenuContent,
|
|
22
|
-
DropdownMenuItem,
|
|
23
|
-
DropdownMenuLabel,
|
|
24
|
-
DropdownMenuSeparator,
|
|
25
|
-
DropdownMenuShortcut,
|
|
26
|
-
DropdownMenuTrigger,
|
|
27
|
-
} from "@/components/ui/dropdown-menu";
|
|
28
|
-
import {
|
|
29
|
-
SidebarMenu,
|
|
30
|
-
SidebarMenuButton,
|
|
31
|
-
SidebarMenuItem,
|
|
32
|
-
useSidebar,
|
|
33
|
-
} from "@/components/ui/sidebar";
|
|
34
|
-
import { ChevronsUpDown, Plus } from "lucide-react";
|
|
35
|
-
import * as React from "react";
|
|
36
|
-
|
|
37
|
-
type Team = {
|
|
38
|
-
name: string;
|
|
39
|
-
logo: React.ElementType;
|
|
40
|
-
plan: string;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export function TeamSwitcher({ teams }: { teams: Team[] }) {
|
|
44
|
-
const { isMobile } = useSidebar();
|
|
45
|
-
const [activeTeam, setActiveTeam] = React.useState(teams[0]);
|
|
46
|
-
|
|
47
|
-
if (!activeTeam) return null;
|
|
48
|
-
|
|
49
|
-
const Logo = activeTeam.logo;
|
|
50
|
-
|
|
51
|
-
return (
|
|
52
|
-
<SidebarMenu>
|
|
53
|
-
<SidebarMenuItem>
|
|
54
|
-
<DropdownMenu>
|
|
55
|
-
<DropdownMenuTrigger asChild>
|
|
56
|
-
<SidebarMenuButton
|
|
57
|
-
size="lg"
|
|
58
|
-
className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
|
|
59
|
-
>
|
|
60
|
-
<div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-background text-foreground">
|
|
61
|
-
<Logo className="size-4" />
|
|
62
|
-
</div>
|
|
63
|
-
<div className="grid flex-1 text-left text-sm leading-tight">
|
|
64
|
-
<span className="truncate font-semibold">
|
|
65
|
-
{activeTeam.name}
|
|
66
|
-
</span>
|
|
67
|
-
<span className="truncate text-xs">{activeTeam.plan}</span>
|
|
68
|
-
</div>
|
|
69
|
-
<ChevronsUpDown className="ml-auto" />
|
|
70
|
-
</SidebarMenuButton>
|
|
71
|
-
</DropdownMenuTrigger>
|
|
72
|
-
<DropdownMenuContent
|
|
73
|
-
className="w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg mb-4"
|
|
74
|
-
align="start"
|
|
75
|
-
side={isMobile ? "bottom" : "right"}
|
|
76
|
-
sideOffset={4}
|
|
77
|
-
>
|
|
78
|
-
<DropdownMenuLabel className="text-xs text-muted-foreground">
|
|
79
|
-
Teams
|
|
80
|
-
</DropdownMenuLabel>
|
|
81
|
-
{teams.map((team, index) => (
|
|
82
|
-
<DropdownMenuItem
|
|
83
|
-
key={team.name}
|
|
84
|
-
onClick={() => setActiveTeam(team)}
|
|
85
|
-
className="gap-2 p-2"
|
|
86
|
-
>
|
|
87
|
-
<div className="flex size-6 items-center justify-center rounded-sm border">
|
|
88
|
-
<team.logo className="size-4 shrink-0" />
|
|
89
|
-
</div>
|
|
90
|
-
{team.name}
|
|
91
|
-
<DropdownMenuShortcut>⌘{index + 1}</DropdownMenuShortcut>
|
|
92
|
-
</DropdownMenuItem>
|
|
93
|
-
))}
|
|
94
|
-
<DropdownMenuSeparator />
|
|
95
|
-
<DropdownMenuItem className="gap-2 p-2">
|
|
96
|
-
<div className="flex size-6 items-center justify-center rounded-md border bg-background">
|
|
97
|
-
<Plus className="size-4" />
|
|
98
|
-
</div>
|
|
99
|
-
<div className="font-medium text-muted-foreground">Add team</div>
|
|
100
|
-
</DropdownMenuItem>
|
|
101
|
-
</DropdownMenuContent>
|
|
102
|
-
</DropdownMenu>
|
|
103
|
-
</SidebarMenuItem>
|
|
104
|
-
</SidebarMenu>
|
|
105
|
-
);
|
|
106
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// AllBlue - 理想之海
|
|
3
|
-
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
-
//
|
|
5
|
-
// This program is free software: you can redistribute it and/or modify
|
|
6
|
-
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
-
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
// (at your option) any later version.
|
|
9
|
-
//
|
|
10
|
-
// This program is distributed in the hope that it will be useful,
|
|
11
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
// GNU Affero General Public License for more details.
|
|
14
|
-
//
|
|
15
|
-
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
-
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import { useTheme } from "next-themes";
|
|
20
|
-
import { Moon, Sun } from "lucide-react";
|
|
21
|
-
import { Button } from "@/components/ui/button";
|
|
22
|
-
import { useEffect, useState } from "react";
|
|
23
|
-
|
|
24
|
-
export function ThemeToggle() {
|
|
25
|
-
const { theme, setTheme } = useTheme();
|
|
26
|
-
const [mounted, setMounted] = useState(false);
|
|
27
|
-
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
setMounted(true);
|
|
30
|
-
}, []);
|
|
31
|
-
|
|
32
|
-
if (!mounted) {
|
|
33
|
-
return (
|
|
34
|
-
<Button variant="ghost" size="icon" className="h-8 w-8 rounded-full">
|
|
35
|
-
<Sun className="h-4 w-4" />
|
|
36
|
-
</Button>
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const toggleTheme = () => {
|
|
41
|
-
setTheme(theme === "dark" ? "light" : "dark");
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<Button
|
|
46
|
-
variant="ghost"
|
|
47
|
-
size="icon"
|
|
48
|
-
className="h-8 w-8 rounded-full"
|
|
49
|
-
onClick={toggleTheme}
|
|
50
|
-
>
|
|
51
|
-
{theme === "dark" ? (
|
|
52
|
-
<Moon className="size-5" />
|
|
53
|
-
) : (
|
|
54
|
-
<Sun className="size-5" />
|
|
55
|
-
)}
|
|
56
|
-
<span className="sr-only">Toggle theme</span>
|
|
57
|
-
</Button>
|
|
58
|
-
);
|
|
59
|
-
}
|