@svadmin/ui 0.29.1 → 0.29.3

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 (224) hide show
  1. package/package.json +20 -9
  2. package/src/README.md +0 -18
  3. package/src/actions.ts +0 -110
  4. package/src/app.css +0 -673
  5. package/src/component-registry.svelte.ts +0 -60
  6. package/src/components/AICommandBar.svelte +0 -180
  7. package/src/components/AboutSettings.svelte +0 -106
  8. package/src/components/AdminApp.svelte +0 -199
  9. package/src/components/AnimatedCounter.svelte +0 -46
  10. package/src/components/AnomalyBadge.svelte +0 -65
  11. package/src/components/AppearanceSettings.svelte +0 -183
  12. package/src/components/AuditLogDrawer.svelte +0 -93
  13. package/src/components/AuditLogViewer.svelte +0 -226
  14. package/src/components/Authenticated.svelte +0 -51
  15. package/src/components/AutoForm.svelte +0 -242
  16. package/src/components/AutoSaveIndicator.svelte +0 -35
  17. package/src/components/AutoTable.svelte +0 -839
  18. package/src/components/Breadcrumbs.svelte +0 -58
  19. package/src/components/CanAccess.svelte +0 -23
  20. package/src/components/CatchAllNavigate.svelte +0 -21
  21. package/src/components/ChatDialog.svelte +0 -535
  22. package/src/components/ComboboxField.svelte +0 -129
  23. package/src/components/CommandPalette.svelte +0 -135
  24. package/src/components/ConfigErrorScreen.svelte +0 -126
  25. package/src/components/ConfirmDialog.svelte +0 -53
  26. package/src/components/CopilotPanel.svelte +0 -163
  27. package/src/components/CreatePage.svelte +0 -39
  28. package/src/components/DevTools.svelte +0 -149
  29. package/src/components/DraggableGrid.svelte +0 -86
  30. package/src/components/DraggableHeader.svelte +0 -112
  31. package/src/components/DrawerForm.svelte +0 -35
  32. package/src/components/EditPage.svelte +0 -52
  33. package/src/components/EmptyState.svelte +0 -31
  34. package/src/components/ErrorBoundary.svelte +0 -49
  35. package/src/components/ErrorComponent.svelte +0 -36
  36. package/src/components/FieldRenderer.svelte +0 -357
  37. package/src/components/ForgotPasswordPage.svelte +0 -112
  38. package/src/components/Header.svelte +0 -94
  39. package/src/components/InferencerPanel.svelte +0 -192
  40. package/src/components/InfiniteList.svelte +0 -93
  41. package/src/components/InlineEdit.svelte +0 -88
  42. package/src/components/InsightCard.svelte +0 -98
  43. package/src/components/KeyboardShortcuts.svelte +0 -61
  44. package/src/components/Layout.svelte +0 -167
  45. package/src/components/ListPage.svelte +0 -71
  46. package/src/components/LiveIndicator.svelte +0 -58
  47. package/src/components/LoginPage.svelte +0 -163
  48. package/src/components/MarkdownRenderer.svelte +0 -127
  49. package/src/components/ModalForm.svelte +0 -38
  50. package/src/components/NavigateToResource.svelte +0 -20
  51. package/src/components/PageHeader.svelte +0 -39
  52. package/src/components/PageSkeleton.svelte +0 -71
  53. package/src/components/PasswordInput.svelte +0 -96
  54. package/src/components/PermissionMatrix.svelte +0 -185
  55. package/src/components/ProfilePage.svelte +0 -284
  56. package/src/components/RegisterPage.svelte +0 -112
  57. package/src/components/RolesSettings.svelte +0 -146
  58. package/src/components/SettingsPage.svelte +0 -113
  59. package/src/components/ShowPage.svelte +0 -73
  60. package/src/components/Sidebar.svelte +0 -417
  61. package/src/components/SidebarItem.svelte +0 -129
  62. package/src/components/SmartSuggest.svelte +0 -158
  63. package/src/components/StatsCard.svelte +0 -79
  64. package/src/components/StepsForm.svelte +0 -192
  65. package/src/components/TaskQueueDrawer.svelte +0 -158
  66. package/src/components/TenantSwitcher.svelte +0 -84
  67. package/src/components/ThemedTitle.svelte +0 -32
  68. package/src/components/Toast.svelte +0 -46
  69. package/src/components/TooltipButton.svelte +0 -42
  70. package/src/components/UndoableNotification.svelte +0 -69
  71. package/src/components/UpdatePasswordPage.svelte +0 -89
  72. package/src/components/VirtualTable.svelte +0 -76
  73. package/src/components/VoiceInput.svelte +0 -120
  74. package/src/components/buttons/CloneButton.svelte +0 -30
  75. package/src/components/buttons/CreateButton.svelte +0 -29
  76. package/src/components/buttons/DeleteButton.svelte +0 -59
  77. package/src/components/buttons/EditButton.svelte +0 -30
  78. package/src/components/buttons/ExportButton.svelte +0 -30
  79. package/src/components/buttons/ImportButton.svelte +0 -56
  80. package/src/components/buttons/ListButton.svelte +0 -23
  81. package/src/components/buttons/RefreshButton.svelte +0 -36
  82. package/src/components/buttons/SaveButton.svelte +0 -27
  83. package/src/components/buttons/ShowButton.svelte +0 -31
  84. package/src/components/buttons/index.ts +0 -10
  85. package/src/components/charts/BarChart.svelte +0 -69
  86. package/src/components/charts/LineChart.svelte +0 -115
  87. package/src/components/charts/PieChart.svelte +0 -95
  88. package/src/components/charts/index.ts +0 -3
  89. package/src/components/fieldComponentMap.ts +0 -79
  90. package/src/components/fields/ArrayField.svelte +0 -86
  91. package/src/components/fields/BooleanField.svelte +0 -13
  92. package/src/components/fields/DateField.svelte +0 -6
  93. package/src/components/fields/EmailField.svelte +0 -9
  94. package/src/components/fields/FileField.svelte +0 -14
  95. package/src/components/fields/ImageField.svelte +0 -9
  96. package/src/components/fields/JsonField.svelte +0 -72
  97. package/src/components/fields/MarkdownField.svelte +0 -9
  98. package/src/components/fields/MultiSelectField.svelte +0 -21
  99. package/src/components/fields/NumberField.svelte +0 -6
  100. package/src/components/fields/RelationField.svelte +0 -24
  101. package/src/components/fields/RichTextField.svelte +0 -35
  102. package/src/components/fields/SelectField.svelte +0 -14
  103. package/src/components/fields/TagField.svelte +0 -12
  104. package/src/components/fields/TextField.svelte +0 -11
  105. package/src/components/fields/UrlField.svelte +0 -14
  106. package/src/components/ui/alert/alert-description.svelte +0 -17
  107. package/src/components/ui/alert/alert-title.svelte +0 -17
  108. package/src/components/ui/alert/alert.svelte +0 -44
  109. package/src/components/ui/alert/index.ts +0 -15
  110. package/src/components/ui/alert-dialog/alert-dialog-content.svelte +0 -29
  111. package/src/components/ui/alert-dialog/alert-dialog-description.svelte +0 -16
  112. package/src/components/ui/alert-dialog/alert-dialog-footer.svelte +0 -11
  113. package/src/components/ui/alert-dialog/alert-dialog-header.svelte +0 -11
  114. package/src/components/ui/alert-dialog/alert-dialog-overlay.svelte +0 -16
  115. package/src/components/ui/alert-dialog/alert-dialog-portal.svelte +0 -6
  116. package/src/components/ui/alert-dialog/alert-dialog-title.svelte +0 -16
  117. package/src/components/ui/alert-dialog/index.ts +0 -20
  118. package/src/components/ui/avatar/avatar.svelte +0 -63
  119. package/src/components/ui/avatar/index.ts +0 -2
  120. package/src/components/ui/badge/badge.svelte +0 -49
  121. package/src/components/ui/badge/index.ts +0 -3
  122. package/src/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +0 -18
  123. package/src/components/ui/breadcrumb/breadcrumb-item.svelte +0 -15
  124. package/src/components/ui/breadcrumb/breadcrumb-link.svelte +0 -15
  125. package/src/components/ui/breadcrumb/breadcrumb-list.svelte +0 -15
  126. package/src/components/ui/breadcrumb/breadcrumb-page.svelte +0 -18
  127. package/src/components/ui/breadcrumb/breadcrumb-separator.svelte +0 -22
  128. package/src/components/ui/breadcrumb/breadcrumb.svelte +0 -11
  129. package/src/components/ui/breadcrumb/index.ts +0 -7
  130. package/src/components/ui/button/button.svelte +0 -90
  131. package/src/components/ui/button/index.ts +0 -18
  132. package/src/components/ui/card/card-action.svelte +0 -23
  133. package/src/components/ui/card/card-content.svelte +0 -20
  134. package/src/components/ui/card/card-description.svelte +0 -20
  135. package/src/components/ui/card/card-footer.svelte +0 -20
  136. package/src/components/ui/card/card-header.svelte +0 -23
  137. package/src/components/ui/card/card-title.svelte +0 -15
  138. package/src/components/ui/card/card.svelte +0 -22
  139. package/src/components/ui/card/index.ts +0 -25
  140. package/src/components/ui/checkbox/checkbox.svelte +0 -39
  141. package/src/components/ui/checkbox/index.ts +0 -6
  142. package/src/components/ui/collapsible/index.ts +0 -7
  143. package/src/components/ui/command/command-dialog.svelte +0 -31
  144. package/src/components/ui/command/index.ts +0 -2
  145. package/src/components/ui/context-menu/index.ts +0 -11
  146. package/src/components/ui/dialog/dialog-close.svelte +0 -11
  147. package/src/components/ui/dialog/dialog-content.svelte +0 -48
  148. package/src/components/ui/dialog/dialog-description.svelte +0 -17
  149. package/src/components/ui/dialog/dialog-footer.svelte +0 -32
  150. package/src/components/ui/dialog/dialog-header.svelte +0 -20
  151. package/src/components/ui/dialog/dialog-overlay.svelte +0 -17
  152. package/src/components/ui/dialog/dialog-portal.svelte +0 -7
  153. package/src/components/ui/dialog/dialog-title.svelte +0 -17
  154. package/src/components/ui/dialog/dialog-trigger.svelte +0 -11
  155. package/src/components/ui/dialog/dialog.svelte +0 -7
  156. package/src/components/ui/dialog/index.ts +0 -34
  157. package/src/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -43
  158. package/src/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -35
  159. package/src/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -36
  160. package/src/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -10
  161. package/src/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -27
  162. package/src/components/ui/dropdown-menu/dropdown-menu.svelte +0 -45
  163. package/src/components/ui/dropdown-menu/index.ts +0 -21
  164. package/src/components/ui/input/index.ts +0 -7
  165. package/src/components/ui/input/input.svelte +0 -48
  166. package/src/components/ui/label/index.ts +0 -1
  167. package/src/components/ui/label/label.svelte +0 -18
  168. package/src/components/ui/pagination/index.ts +0 -7
  169. package/src/components/ui/pagination/pagination-content.svelte +0 -11
  170. package/src/components/ui/pagination/pagination-ellipsis.svelte +0 -12
  171. package/src/components/ui/pagination/pagination-item.svelte +0 -11
  172. package/src/components/ui/pagination/pagination-link.svelte +0 -26
  173. package/src/components/ui/pagination/pagination-next.svelte +0 -22
  174. package/src/components/ui/pagination/pagination-previous.svelte +0 -22
  175. package/src/components/ui/pagination/pagination.svelte +0 -11
  176. package/src/components/ui/popover/index.ts +0 -12
  177. package/src/components/ui/popover/popover-content.svelte +0 -25
  178. package/src/components/ui/progress/index.ts +0 -1
  179. package/src/components/ui/progress/progress.svelte +0 -22
  180. package/src/components/ui/scroll-area/index.ts +0 -1
  181. package/src/components/ui/scroll-area/scroll-area.svelte +0 -20
  182. package/src/components/ui/select/index.ts +0 -2
  183. package/src/components/ui/select/select.svelte +0 -36
  184. package/src/components/ui/separator/index.ts +0 -7
  185. package/src/components/ui/separator/separator.svelte +0 -23
  186. package/src/components/ui/sheet/index.ts +0 -16
  187. package/src/components/ui/sheet/sheet-content.svelte +0 -28
  188. package/src/components/ui/sheet/sheet-description.svelte +0 -22
  189. package/src/components/ui/sheet/sheet-footer.svelte +0 -22
  190. package/src/components/ui/sheet/sheet-header.svelte +0 -22
  191. package/src/components/ui/sheet/sheet-title.svelte +0 -22
  192. package/src/components/ui/sheet/sheet.svelte +0 -78
  193. package/src/components/ui/skeleton/index.ts +0 -2
  194. package/src/components/ui/skeleton/skeleton.svelte +0 -21
  195. package/src/components/ui/switch/index.ts +0 -2
  196. package/src/components/ui/switch/switch.svelte +0 -49
  197. package/src/components/ui/table/index.ts +0 -28
  198. package/src/components/ui/table/table-body.svelte +0 -15
  199. package/src/components/ui/table/table-caption.svelte +0 -20
  200. package/src/components/ui/table/table-cell.svelte +0 -15
  201. package/src/components/ui/table/table-footer.svelte +0 -20
  202. package/src/components/ui/table/table-head.svelte +0 -15
  203. package/src/components/ui/table/table-header.svelte +0 -20
  204. package/src/components/ui/table/table-row.svelte +0 -15
  205. package/src/components/ui/table/table.svelte +0 -17
  206. package/src/components/ui/tabs/index.ts +0 -15
  207. package/src/components/ui/tabs/tabs-content.svelte +0 -30
  208. package/src/components/ui/tabs/tabs-list.svelte +0 -26
  209. package/src/components/ui/tabs/tabs-trigger.svelte +0 -37
  210. package/src/components/ui/tabs/tabs.svelte +0 -27
  211. package/src/components/ui/textarea/index.ts +0 -2
  212. package/src/components/ui/textarea/textarea.svelte +0 -24
  213. package/src/components/ui/tooltip/index.ts +0 -19
  214. package/src/components/ui/tooltip/tooltip-content.svelte +0 -52
  215. package/src/components/ui/tooltip/tooltip-portal.svelte +0 -7
  216. package/src/components/ui/tooltip/tooltip-provider.svelte +0 -7
  217. package/src/components/ui/tooltip/tooltip-trigger.svelte +0 -7
  218. package/src/components/ui/tooltip/tooltip.svelte +0 -10
  219. package/src/editor-config.svelte.ts +0 -23
  220. package/src/index.ts +0 -155
  221. package/src/markdown-deps.d.ts +0 -21
  222. package/src/router-state.svelte.ts +0 -65
  223. package/src/types.ts +0 -33
  224. package/src/utils.ts +0 -28
package/src/app.css DELETED
@@ -1,673 +0,0 @@
1
- /* Typography — Inter font for clean, modern look */
2
-
3
- /* @svadmin/ui — Design Tokens (Elygate-inspired)
4
- * Auto-imported by AdminApp. Can be overridden by consumer's CSS.
5
- *
6
- * Based on Elygate dashboard style: Indigo primary, light glassmorphism,
7
- * professional admin aesthetic with subtle depth.
8
- */
9
-
10
- @layer base {
11
- /* Global border-color reset — ensures Tailwind border utilities
12
- * (border-r, border-t, etc.) use the theme color instead of currentColor */
13
- *,
14
- ::after,
15
- ::before {
16
- border-color: var(--border);
17
- }
18
-
19
- :root {
20
- --radius: 0.5rem;
21
- --background: oklch(0.98 0.002 264);
22
- --foreground: oklch(0.13 0.02 265);
23
- --card: oklch(1 0 0);
24
- --card-foreground: oklch(0.13 0.02 265);
25
- --popover: oklch(1 0 0);
26
- --popover-foreground: oklch(0.13 0.02 265);
27
- --primary: oklch(0.488 0.243 264.376);
28
- --primary-foreground: oklch(0.985 0 0);
29
- --secondary: oklch(0.955 0.008 264);
30
- --secondary-foreground: oklch(0.2 0.04 265);
31
- --muted: oklch(0.955 0.005 264);
32
- --muted-foreground: oklch(0.45 0.03 260);
33
- --accent: oklch(0.955 0.008 264);
34
- --accent-foreground: oklch(0.2 0.04 265);
35
- --destructive: oklch(0.577 0.245 27.325);
36
- --destructive-foreground: oklch(0.985 0 0);
37
- --border: oklch(0.935 0.005 264);
38
- --input: oklch(0.935 0.005 264);
39
- --ring: oklch(0.488 0.243 264.376);
40
- --chart-1: oklch(0.488 0.243 264.376);
41
- --chart-2: oklch(0.6 0.118 184.704);
42
- --chart-3: oklch(0.398 0.07 227.392);
43
- --chart-4: oklch(0.828 0.189 84.429);
44
- --chart-5: oklch(0.769 0.188 70.08);
45
- --success: oklch(0.6 0.2 145);
46
- --success-foreground: oklch(0.985 0 0);
47
- --warning: oklch(0.75 0.18 85);
48
- --warning-foreground: oklch(0.3 0.08 60);
49
- --info: oklch(0.6 0.15 250);
50
- --info-foreground: oklch(0.985 0 0);
51
- --sidebar: oklch(1 0 0 / 80%);
52
- --sidebar-foreground: oklch(0.13 0.02 265);
53
- --sidebar-primary: oklch(0.488 0.243 264.376);
54
- --sidebar-primary-foreground: oklch(0.985 0 0);
55
- --sidebar-accent: oklch(0.94 0.025 264);
56
- --sidebar-accent-foreground: oklch(0.33 0.17 264);
57
- --sidebar-border: oklch(0.935 0.005 264);
58
- --sidebar-ring: oklch(0.488 0.243 264.376);
59
- }
60
-
61
- .dark {
62
- --background: oklch(0.13 0.015 265);
63
- --foreground: oklch(0.985 0 0);
64
- --card: oklch(0.16 0.015 265);
65
- --card-foreground: oklch(0.985 0 0);
66
- --popover: oklch(0.16 0.015 265);
67
- --popover-foreground: oklch(0.985 0 0);
68
- --primary: oklch(0.585 0.233 264);
69
- --primary-foreground: oklch(0.15 0.04 265);
70
- --secondary: oklch(0.23 0.025 265);
71
- --secondary-foreground: oklch(0.985 0 0);
72
- --muted: oklch(0.23 0.025 265);
73
- --muted-foreground: oklch(0.7 0.02 260);
74
- --accent: oklch(0.23 0.025 265);
75
- --accent-foreground: oklch(0.985 0 0);
76
- --destructive: oklch(0.704 0.191 22.216);
77
- --destructive-foreground: oklch(0.985 0 0);
78
- --border: oklch(0.27 0.02 265);
79
- --input: oklch(0.27 0.02 265);
80
- --ring: oklch(0.55 0.18 264);
81
- --chart-1: oklch(0.585 0.233 264);
82
- --chart-2: oklch(0.696 0.17 162.48);
83
- --chart-3: oklch(0.769 0.188 70.08);
84
- --chart-4: oklch(0.627 0.265 303.9);
85
- --chart-5: oklch(0.645 0.246 16.439);
86
- --success: oklch(0.65 0.2 150);
87
- --success-foreground: oklch(0.985 0 0);
88
- --warning: oklch(0.8 0.15 85);
89
- --warning-foreground: oklch(0.25 0.05 60);
90
- --info: oklch(0.65 0.15 250);
91
- --info-foreground: oklch(0.985 0 0);
92
- --sidebar: oklch(0.16 0.015 265 / 80%);
93
- --sidebar-foreground: oklch(0.985 0 0);
94
- --sidebar-primary: oklch(0.585 0.233 264);
95
- --sidebar-primary-foreground: oklch(0.985 0 0);
96
- --sidebar-accent: oklch(0.488 0.243 264.376 / 10%);
97
- --sidebar-accent-foreground: oklch(0.7 0.15 264);
98
- --sidebar-border: oklch(0.27 0.02 265);
99
- --sidebar-ring: oklch(0.55 0.18 264);
100
- }
101
-
102
- /* ── Color Theme Overrides ──────────────────────────────
103
- * Each [data-theme] selector overrides the primary-related
104
- * CSS variables for both light and dark mode.
105
- * Values match builtinPresets in @svadmin/core/theme.
106
- * This CSS-level fallback prevents FOUC before JS inits.
107
- */
108
-
109
- /* Neutral */
110
- [data-theme="neutral"] {
111
- --primary: oklch(0.205 0.006 286);
112
- --primary-foreground: oklch(0.985 0 0);
113
- --ring: oklch(0.205 0.006 286);
114
- --sidebar-primary: oklch(0.205 0.006 286);
115
- --sidebar-primary-foreground: oklch(0.985 0 0);
116
- --sidebar-ring: oklch(0.205 0.006 286);
117
- --chart-1: oklch(0.488 0.243 264.376);
118
- }
119
- .dark[data-theme="neutral"],
120
- .dark [data-theme="neutral"] {
121
- --primary: oklch(0.922 0.004 286);
122
- --primary-foreground: oklch(0.205 0.006 286);
123
- --ring: oklch(0.556 0.004 286);
124
- --sidebar-primary: oklch(0.922 0.004 286);
125
- --sidebar-primary-foreground: oklch(0.205 0.006 286);
126
- --sidebar-ring: oklch(0.556 0.004 286);
127
- --chart-1: oklch(0.585 0.233 264);
128
- }
129
-
130
- /* Indigo (default) */
131
- [data-theme="indigo"] {
132
- --primary: oklch(0.488 0.243 264.376);
133
- --primary-foreground: oklch(0.985 0 0);
134
- --ring: oklch(0.488 0.243 264.376);
135
- --sidebar-primary: oklch(0.488 0.243 264.376);
136
- --sidebar-primary-foreground: oklch(0.985 0 0);
137
- --sidebar-ring: oklch(0.488 0.243 264.376);
138
- --chart-1: oklch(0.488 0.243 264.376);
139
- }
140
- .dark[data-theme="indigo"],
141
- .dark [data-theme="indigo"] {
142
- --primary: oklch(0.585 0.233 264);
143
- --primary-foreground: oklch(0.15 0.04 265);
144
- --ring: oklch(0.55 0.18 264);
145
- --sidebar-primary: oklch(0.585 0.233 264);
146
- --sidebar-primary-foreground: oklch(0.985 0 0);
147
- --sidebar-ring: oklch(0.55 0.18 264);
148
- --chart-1: oklch(0.585 0.233 264);
149
- }
150
-
151
- /* Blue */
152
- [data-theme="blue"] {
153
- --primary: oklch(0.546 0.245 262.881);
154
- --primary-foreground: oklch(0.985 0 0);
155
- --ring: oklch(0.546 0.245 262.881);
156
- --sidebar-primary: oklch(0.546 0.245 262.881);
157
- --sidebar-primary-foreground: oklch(0.985 0 0);
158
- --sidebar-ring: oklch(0.546 0.245 262.881);
159
- --chart-1: oklch(0.546 0.245 262.881);
160
- }
161
- .dark[data-theme="blue"],
162
- .dark [data-theme="blue"] {
163
- --primary: oklch(0.623 0.214 259.815);
164
- --primary-foreground: oklch(0.15 0.04 265);
165
- --ring: oklch(0.546 0.245 262.881);
166
- --sidebar-primary: oklch(0.623 0.214 259.815);
167
- --sidebar-primary-foreground: oklch(0.985 0 0);
168
- --sidebar-ring: oklch(0.546 0.245 262.881);
169
- --chart-1: oklch(0.623 0.214 259.815);
170
- }
171
-
172
- /* Green */
173
- [data-theme="green"] {
174
- --primary: oklch(0.527 0.185 150.069);
175
- --primary-foreground: oklch(0.985 0 0);
176
- --ring: oklch(0.527 0.185 150.069);
177
- --sidebar-primary: oklch(0.527 0.185 150.069);
178
- --sidebar-primary-foreground: oklch(0.985 0 0);
179
- --sidebar-ring: oklch(0.527 0.185 150.069);
180
- --chart-1: oklch(0.527 0.185 150.069);
181
- }
182
- .dark[data-theme="green"],
183
- .dark [data-theme="green"] {
184
- --primary: oklch(0.627 0.194 149.214);
185
- --primary-foreground: oklch(0.15 0.05 150);
186
- --ring: oklch(0.527 0.185 150.069);
187
- --sidebar-primary: oklch(0.627 0.194 149.214);
188
- --sidebar-primary-foreground: oklch(0.985 0 0);
189
- --sidebar-ring: oklch(0.527 0.185 150.069);
190
- --chart-1: oklch(0.627 0.194 149.214);
191
- }
192
-
193
- /* Rose */
194
- [data-theme="rose"] {
195
- --primary: oklch(0.577 0.245 27.325);
196
- --primary-foreground: oklch(0.985 0 0);
197
- --ring: oklch(0.577 0.245 27.325);
198
- --sidebar-primary: oklch(0.577 0.245 27.325);
199
- --sidebar-primary-foreground: oklch(0.985 0 0);
200
- --sidebar-ring: oklch(0.577 0.245 27.325);
201
- --chart-1: oklch(0.577 0.245 27.325);
202
- }
203
- .dark[data-theme="rose"],
204
- .dark [data-theme="rose"] {
205
- --primary: oklch(0.577 0.245 27.325);
206
- --primary-foreground: oklch(0.985 0 0);
207
- --ring: oklch(0.577 0.245 27.325);
208
- --sidebar-primary: oklch(0.577 0.245 27.325);
209
- --sidebar-primary-foreground: oklch(0.985 0 0);
210
- --sidebar-ring: oklch(0.577 0.245 27.325);
211
- --chart-1: oklch(0.577 0.245 27.325);
212
- }
213
-
214
- /* Orange */
215
- [data-theme="orange"] {
216
- --primary: oklch(0.646 0.222 41.116);
217
- --primary-foreground: oklch(0.985 0 0);
218
- --ring: oklch(0.646 0.222 41.116);
219
- --sidebar-primary: oklch(0.646 0.222 41.116);
220
- --sidebar-primary-foreground: oklch(0.985 0 0);
221
- --sidebar-ring: oklch(0.646 0.222 41.116);
222
- --chart-1: oklch(0.646 0.222 41.116);
223
- }
224
- .dark[data-theme="orange"],
225
- .dark [data-theme="orange"] {
226
- --primary: oklch(0.646 0.222 41.116);
227
- --primary-foreground: oklch(0.985 0 0);
228
- --ring: oklch(0.646 0.222 41.116);
229
- --sidebar-primary: oklch(0.646 0.222 41.116);
230
- --sidebar-primary-foreground: oklch(0.985 0 0);
231
- --sidebar-ring: oklch(0.646 0.222 41.116);
232
- --chart-1: oklch(0.646 0.222 41.116);
233
- }
234
-
235
- /* Violet */
236
- [data-theme="violet"] {
237
- --primary: oklch(0.541 0.281 293.009);
238
- --primary-foreground: oklch(0.985 0 0);
239
- --ring: oklch(0.541 0.281 293.009);
240
- --sidebar-primary: oklch(0.541 0.281 293.009);
241
- --sidebar-primary-foreground: oklch(0.985 0 0);
242
- --sidebar-ring: oklch(0.541 0.281 293.009);
243
- --chart-1: oklch(0.541 0.281 293.009);
244
- }
245
- .dark[data-theme="violet"],
246
- .dark [data-theme="violet"] {
247
- --primary: oklch(0.541 0.281 293.009);
248
- --primary-foreground: oklch(0.985 0 0);
249
- --ring: oklch(0.541 0.281 293.009);
250
- --sidebar-primary: oklch(0.541 0.281 293.009);
251
- --sidebar-primary-foreground: oklch(0.985 0 0);
252
- --sidebar-ring: oklch(0.541 0.281 293.009);
253
- --chart-1: oklch(0.541 0.281 293.009);
254
- }
255
-
256
- /* Stripe-inspired Soft Shadows — premium, multi-layered depth */
257
- [data-slot="button"],
258
- [data-slot="input"],
259
- [data-slot="select-trigger"],
260
- [data-slot="select"],
261
- [data-slot="textarea"] {
262
- /* Subtle interaction shadow */
263
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.04), 0 0 0 1px rgb(0 0 0 / 0.02);
264
- }
265
-
266
- /* Stripe-style: form inputs use card background instead of transparent */
267
- [data-slot="input"],
268
- [data-slot="textarea"],
269
- [data-slot="select"] {
270
- background-color: var(--card);
271
- }
272
-
273
- [data-slot="card"] {
274
- /* Classic Stripe soft shadow: faint ambient + directional drop */
275
- box-shadow: 0 2px 8px -2px rgb(0 0 0 / 0.05), 0 4px 16px -4px rgb(0 0 0 / 0.02);
276
- }
277
-
278
- [data-slot="dialog-content"],
279
- [data-slot="sheet-content"] {
280
- /* Deep floating layer for modals */
281
- box-shadow: 0 10px 30px -5px rgb(0 0 0 / 0.08), 0 20px 40px -10px rgb(0 0 0 / 0.04);
282
- }
283
- }
284
-
285
- body {
286
- font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
287
- -webkit-font-smoothing: antialiased;
288
- -moz-osx-font-smoothing: grayscale;
289
- }
290
-
291
- /* Premium Typography Refinements */
292
- h1, h2, h3 {
293
- letter-spacing: -0.025em;
294
- font-weight: 600;
295
- }
296
- h4, h5, h6 {
297
- letter-spacing: -0.01em;
298
- }
299
-
300
- /* Micro-interactions: Linear/Apple ecosystem click scales */
301
- [data-slot="button"],
302
- button {
303
- transition: transform 0.1s cubic-bezier(0.16, 1, 0.3, 1), background-color 0.15s ease, box-shadow 0.15s ease;
304
- }
305
- [data-slot="button"]:active:not(:disabled),
306
- button:active:not(:disabled) {
307
- transform: scale(0.97);
308
- }
309
-
310
- /* Subtle glowing focus ring for inputs */
311
- [data-slot="input"]:focus-visible,
312
- [data-slot="textarea"]:focus-visible,
313
- [data-slot="select-trigger"]:focus-visible {
314
- box-shadow: 0 0 0 1px var(--color-background), 0 0 0 3px color-mix(in oklch, var(--color-primary) 30%, transparent) !important;
315
- border-color: var(--color-primary);
316
- }
317
-
318
- /* Base scrollbar styling (Firefox + Standard) */
319
- * {
320
- scrollbar-width: thin;
321
- scrollbar-color: oklch(0.8 0 0) transparent;
322
- }
323
- .dark * {
324
- scrollbar-color: oklch(0.35 0 0) transparent;
325
- }
326
-
327
- /* Scrollbar styling (Webkit) */
328
- ::-webkit-scrollbar { width: 6px; height: 6px; }
329
- ::-webkit-scrollbar-track { background: transparent; }
330
- ::-webkit-scrollbar-thumb { background: oklch(0.8 0 0); border-radius: 3px; }
331
- ::-webkit-scrollbar-thumb:hover { background: oklch(0.65 0 0); }
332
- .dark ::-webkit-scrollbar-thumb { background: oklch(0.35 0 0); }
333
- .dark ::-webkit-scrollbar-thumb:hover { background: oklch(0.45 0 0); }
334
-
335
- /* ① Card Hover Elevation Lift — Stripe-style float on hover */
336
- [data-slot="card"] {
337
- transition: box-shadow 0.2s ease, transform 0.2s ease;
338
- }
339
- @media (hover: hover) {
340
- [data-slot="card"]:hover {
341
- box-shadow: 0 4px 12px -2px rgb(0 0 0 / 0.08), 0 8px 24px -6px rgb(0 0 0 / 0.04);
342
- transform: translateY(-1px);
343
- }
344
- }
345
-
346
- /* ② Table Row Hover — primary color tint instead of plain gray */
347
- [data-slot="table-row"]:hover {
348
- background-color: color-mix(in oklch, var(--primary) 4%, var(--background)) !important;
349
- }
350
- [data-slot="table-row"] {
351
- transition: background-color 0.15s ease;
352
- }
353
-
354
- /* ③ Sidebar Active Indicator — Linear-style left accent bar */
355
- .sidebar-nav-active {
356
- position: relative;
357
- }
358
- .sidebar-nav-active::before {
359
- content: '';
360
- position: absolute;
361
- left: 0;
362
- top: 50%;
363
- transform: translateY(-50%);
364
- width: 3px;
365
- height: 60%;
366
- border-radius: 0 3px 3px 0;
367
- background: var(--primary);
368
- opacity: 1;
369
- transition: opacity 0.2s ease;
370
- }
371
-
372
- /* ④ Skeleton Shimmer — metallic light sweep instead of static pulse */
373
- @keyframes svadmin-shimmer {
374
- 0% { background-position: -200% 0; }
375
- 100% { background-position: 200% 0; }
376
- }
377
- [data-slot="skeleton"] {
378
- animation: svadmin-shimmer 1.5s ease-in-out infinite !important;
379
- background: linear-gradient(90deg, var(--muted) 25%, color-mix(in oklch, var(--muted) 60%, white) 50%, var(--muted) 75%) !important;
380
- background-size: 200% 100% !important;
381
- }
382
- .dark [data-slot="skeleton"] {
383
- background: linear-gradient(90deg, var(--muted) 25%, color-mix(in oklch, var(--muted) 60%, var(--foreground)) 50%, var(--muted) 75%) !important;
384
- }
385
-
386
- /* ⑤ Route Page Transition — fade + subtle slide-up */
387
- @keyframes svadmin-page-enter {
388
- from {
389
- opacity: 0;
390
- transform: translateY(6px);
391
- }
392
- to {
393
- opacity: 1;
394
- transform: translateY(0);
395
- }
396
- }
397
- .svadmin-page-enter {
398
- animation: svadmin-page-enter 0.25s ease-out;
399
- }
400
-
401
- /* ⑥ Toast slide-in refinement (sonner-svelte) — tighter timing */
402
- [data-sonner-toaster] [data-sonner-toast] {
403
- transition-duration: 200ms !important;
404
- transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1) !important;
405
- }
406
-
407
- /* ⑦ Gradient Top Border on Cards — Vercel dashboard style */
408
- [data-slot="card"]::before {
409
- content: '';
410
- position: absolute;
411
- top: 0;
412
- left: 0;
413
- right: 0;
414
- height: 1px;
415
- background: linear-gradient(90deg, transparent, color-mix(in oklch, var(--primary) 20%, transparent), transparent);
416
- border-radius: inherit;
417
- pointer-events: none;
418
- }
419
- [data-slot="card"] {
420
- position: relative;
421
- overflow: hidden;
422
- }
423
-
424
- /* ⑧ Dark Mode Primary Glow — Linear-style neon accents */
425
- .dark [data-slot="button"][data-variant="default"],
426
- .dark [data-slot="badge"][data-variant="default"] {
427
- box-shadow: 0 0 12px -3px color-mix(in oklch, var(--primary) 40%, transparent);
428
- }
429
-
430
- /* ⑨ Form Validation Shake Animation */
431
- @keyframes svadmin-shake {
432
- 0%, 100% { transform: translateX(0); }
433
- 20% { transform: translateX(-6px); }
434
- 40% { transform: translateX(5px); }
435
- 60% { transform: translateX(-4px); }
436
- 80% { transform: translateX(2px); }
437
- }
438
- .svadmin-shake {
439
- animation: svadmin-shake 0.4s ease-out;
440
- }
441
-
442
- /* ⑩ Table Row Staggered Entrance */
443
- @keyframes svadmin-row-enter {
444
- from {
445
- opacity: 0;
446
- transform: translateY(4px);
447
- }
448
- to {
449
- opacity: 1;
450
- transform: translateY(0);
451
- }
452
- }
453
- [data-slot="table-body"] [data-slot="table-row"] {
454
- animation: svadmin-row-enter 0.3s ease-out both;
455
- }
456
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(1) { animation-delay: 0s; }
457
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(2) { animation-delay: 0.03s; }
458
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(3) { animation-delay: 0.06s; }
459
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(4) { animation-delay: 0.09s; }
460
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(5) { animation-delay: 0.12s; }
461
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(6) { animation-delay: 0.15s; }
462
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(7) { animation-delay: 0.18s; }
463
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(8) { animation-delay: 0.21s; }
464
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(9) { animation-delay: 0.24s; }
465
- [data-slot="table-body"] [data-slot="table-row"]:nth-child(10) { animation-delay: 0.27s; }
466
-
467
- /* ⑪ Accessibility: Respect reduced motion preferences */
468
- @media (prefers-reduced-motion: reduce) {
469
- *, *::before, *::after {
470
- animation-duration: 0.01ms !important;
471
- animation-iteration-count: 1 !important;
472
- transition-duration: 0.01ms !important;
473
- scroll-behavior: auto !important;
474
- }
475
- }
476
-
477
- /* ⑫b Safe Area Inset — iPhone notch / Home Bar support */
478
- @supports (padding-bottom: env(safe-area-inset-bottom)) {
479
- main {
480
- padding-bottom: env(safe-area-inset-bottom);
481
- }
482
- }
483
-
484
- /* ⑫ Optimistic Delete — row fade-out visual feedback */
485
- @keyframes svadmin-row-delete {
486
- from {
487
- opacity: 1;
488
- transform: translateX(0);
489
- }
490
- to {
491
- opacity: 0;
492
- transform: translateX(20px);
493
- height: 0;
494
- padding: 0;
495
- margin: 0;
496
- }
497
- }
498
- .svadmin-deleting {
499
- animation: svadmin-row-delete 0.3s ease-out forwards;
500
- pointer-events: none;
501
- }
502
-
503
- /* ⑬ Popover & Dropdown — frosted glass backdrop + spring entrance */
504
- [data-slot="popover-content"],
505
- [data-slot="dropdown-menu-content"],
506
- [data-slot="context-menu-content"] {
507
- backdrop-filter: blur(8px);
508
- -webkit-backdrop-filter: blur(8px);
509
- }
510
-
511
- /* ⑭ Tooltip spring entrance */
512
- [data-slot="tooltip-content"] {
513
- animation: svadmin-tooltip-enter 0.15s cubic-bezier(0.16, 1, 0.3, 1);
514
- }
515
- @keyframes svadmin-tooltip-enter {
516
- from {
517
- opacity: 0;
518
- transform: scale(0.96);
519
- }
520
- to {
521
- opacity: 1;
522
- transform: scale(1);
523
- }
524
- }
525
-
526
- /* ⑮ Smooth scrolling for content areas */
527
- main {
528
- scroll-behavior: smooth;
529
- }
530
-
531
- /* ⑯ RTL (Right-to-Left) Language Support */
532
- [dir="rtl"] {
533
- direction: rtl;
534
- }
535
- [dir="rtl"] aside {
536
- left: auto;
537
- right: 0;
538
- }
539
- [dir="rtl"] .sidebar-nav-active::before {
540
- left: auto;
541
- right: 0;
542
- border-radius: 3px 0 0 3px;
543
- }
544
- /* Mirror sidebar margins for RTL */
545
- [dir="rtl"] .md\:ml-64 {
546
- margin-left: 0;
547
- margin-right: 16rem;
548
- }
549
- [dir="rtl"] .md\:ml-16 {
550
- margin-left: 0;
551
- margin-right: 4rem;
552
- }
553
-
554
- /* ⑰ Accessibility Minimum Touch Target — Apple HIG 44px minimum */
555
- @media (max-width: 640px) and (pointer: coarse) {
556
- [data-slot="button"] {
557
- position: relative;
558
- }
559
- [data-slot="button"]::after {
560
- content: '';
561
- position: absolute;
562
- top: 50%;
563
- left: 50%;
564
- transform: translate(-50%, -50%);
565
- min-width: 44px;
566
- min-height: 44px;
567
- width: 100%;
568
- height: 100%;
569
- z-index: 1;
570
- }
571
- }
572
-
573
- /* Tailwind CSS v4 — Map design tokens to utility classes */
574
- @theme {
575
- --color-background: var(--background);
576
- --color-foreground: var(--foreground);
577
- --color-card: var(--card);
578
- --color-card-foreground: var(--card-foreground);
579
- --color-popover: var(--popover);
580
- --color-popover-foreground: var(--popover-foreground);
581
- --color-primary: var(--primary);
582
- --color-primary-foreground: var(--primary-foreground);
583
- --color-secondary: var(--secondary);
584
- --color-secondary-foreground: var(--secondary-foreground);
585
- --color-muted: var(--muted);
586
- --color-muted-foreground: var(--muted-foreground);
587
- --color-accent: var(--accent);
588
- --color-accent-foreground: var(--accent-foreground);
589
- --color-destructive: var(--destructive);
590
- --color-destructive-foreground: var(--destructive-foreground);
591
- --color-border: var(--border);
592
- --color-input: var(--input);
593
- --color-ring: var(--ring);
594
- --color-chart-1: var(--chart-1);
595
- --color-chart-2: var(--chart-2);
596
- --color-chart-3: var(--chart-3);
597
- --color-chart-4: var(--chart-4);
598
- --color-chart-5: var(--chart-5);
599
- --color-sidebar: var(--sidebar);
600
- --color-sidebar-foreground: var(--sidebar-foreground);
601
- --color-sidebar-primary: var(--sidebar-primary);
602
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
603
- --color-sidebar-accent: var(--sidebar-accent);
604
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
605
- --color-sidebar-border: var(--sidebar-border);
606
- --color-sidebar-ring: var(--sidebar-ring);
607
- --color-success: var(--success);
608
- --color-success-foreground: var(--success-foreground);
609
- --color-warning: var(--warning);
610
- --color-warning-foreground: var(--warning-foreground);
611
- --color-info: var(--info);
612
- --color-info-foreground: var(--info-foreground);
613
- --radius-sm: calc(var(--radius) - 4px);
614
- --radius-md: calc(var(--radius) - 2px);
615
- --radius-lg: var(--radius);
616
- --radius-xl: calc(var(--radius) + 4px);
617
- }
618
-
619
- /* ─── svadmin UI Components CSS ─────────────────────────────── */
620
- /* These rules were moved from .svelte files to eliminate <style> tags */
621
-
622
- /* MarkdownRenderer Styles */
623
- .prose {
624
- line-height: 1.6;
625
- }
626
- .prose p {
627
- margin-top: 0.5em;
628
- margin-bottom: 0.5em;
629
- }
630
-
631
- /* Streaming cursor effect */
632
- .streaming > *:last-child::after {
633
- content: '▋';
634
- display: inline-block;
635
- animation: svadmin-blink 1s step-start infinite;
636
- margin-left: 2px;
637
- vertical-align: baseline;
638
- color: currentColor;
639
- }
640
-
641
- @keyframes svadmin-blink {
642
- 50% { opacity: 0; }
643
- }
644
-
645
- /* Handle copied state for dynamically injected buttons */
646
- .copy-btn[data-copied-id] {
647
- color: #10b981; /* Tailwind emerald-500 */
648
- }
649
- .copy-btn[data-copied-id] svg {
650
- /* Swap to Check icon */
651
- content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="%2310b981" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>');
652
- }
653
-
654
- /* ChatDialog Styles */
655
- .chat-markdown pre.chat-code-block {
656
- background: var(--color-muted, hsl(var(--muted)));
657
- border-radius: 0.5rem;
658
- padding: 0.75rem;
659
- margin: 0.5rem 0;
660
- overflow-x: auto;
661
- font-size: 0.75rem;
662
- line-height: 1.5;
663
- }
664
- .chat-markdown code.chat-inline-code {
665
- background: var(--color-muted, hsl(var(--muted)));
666
- padding: 0.125rem 0.375rem;
667
- border-radius: 0.25rem;
668
- font-size: 0.8125em;
669
- font-family: ui-monospace, monospace;
670
- }
671
- .chat-markdown strong {
672
- font-weight: 600;
673
- }