@svadmin/ui 0.68.0 → 0.69.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 (315) hide show
  1. package/README.md +52 -0
  2. package/dist/app.css +7627 -853
  3. package/dist/app.theme.css +7676 -850
  4. package/dist/components/AboutSettings.svelte +8 -8
  5. package/dist/components/ActivityFeed.svelte +25 -40
  6. package/dist/components/AdminApp.svelte +14 -14
  7. package/dist/components/AnomalyBadge.svelte +6 -5
  8. package/dist/components/ApiSettings.svelte +8 -8
  9. package/dist/components/AppearanceSettings.svelte +13 -13
  10. package/dist/components/ApprovalActionCard.svelte +35 -35
  11. package/dist/components/AuditLogDrawer.svelte +17 -17
  12. package/dist/components/AuditLogViewer.svelte +42 -42
  13. package/dist/components/AuthPageShell.svelte +11 -11
  14. package/dist/components/AutoForm.svelte +28 -28
  15. package/dist/components/AutoSaveIndicator.svelte +8 -8
  16. package/dist/components/AutoTable.svelte +141 -141
  17. package/dist/components/BatchActionBar.svelte +15 -15
  18. package/dist/components/Breadcrumbs.svelte +4 -4
  19. package/dist/components/CancelTaskButton.svelte +2 -2
  20. package/dist/components/CanvasAnnotation.svelte +27 -27
  21. package/dist/components/Cascader.svelte +20 -20
  22. package/dist/components/CatchAllNavigate.svelte +2 -2
  23. package/dist/components/ColumnHeaderFilter.svelte +21 -21
  24. package/dist/components/ColumnSettings.svelte +20 -20
  25. package/dist/components/ComboboxField.svelte +17 -17
  26. package/dist/components/CommandPalette.svelte +23 -23
  27. package/dist/components/ConfigErrorScreen.svelte +27 -27
  28. package/dist/components/ConfirmDialog.svelte +1 -1
  29. package/dist/components/CreateInferencer.svelte +1 -1
  30. package/dist/components/CreatePage.svelte +1 -1
  31. package/dist/components/DecisionTable.svelte +39 -39
  32. package/dist/components/DetailDrawer.svelte +9 -9
  33. package/dist/components/DevTools.svelte +96 -96
  34. package/dist/components/DraggableGrid.svelte +6 -6
  35. package/dist/components/DraggableHeader.svelte +1 -1
  36. package/dist/components/DraggableRowTable.svelte +13 -13
  37. package/dist/components/DrawerForm.svelte +10 -10
  38. package/dist/components/DynamicFormList.svelte +19 -19
  39. package/dist/components/EditInferencer.svelte +3 -3
  40. package/dist/components/EditInferencer.svelte.d.ts +1 -1
  41. package/dist/components/EditPage.svelte +1 -1
  42. package/dist/components/EditableTable.svelte +30 -30
  43. package/dist/components/EmptyState.svelte +6 -6
  44. package/dist/components/ErrorBoundary.svelte +8 -8
  45. package/dist/components/ErrorComponent.svelte +5 -5
  46. package/dist/components/FieldRenderer.svelte +30 -30
  47. package/dist/components/FilterBuilder.svelte +31 -31
  48. package/dist/components/FilterDropdown.svelte +26 -26
  49. package/dist/components/ForgotPasswordPage.svelte +14 -14
  50. package/dist/components/GanttChart.svelte +30 -30
  51. package/dist/components/Header.svelte +13 -13
  52. package/dist/components/ImageCropper.svelte +21 -21
  53. package/dist/components/ImportWizard.svelte +49 -49
  54. package/dist/components/InferencerPanel.svelte +35 -35
  55. package/dist/components/InfiniteList.svelte +8 -8
  56. package/dist/components/InlineEdit.svelte +5 -5
  57. package/dist/components/IntegrationsSettings.svelte +5 -5
  58. package/dist/components/JsonSchemaForm.svelte +18 -18
  59. package/dist/components/KanbanBoard.svelte +30 -30
  60. package/dist/components/KeyboardShortcuts.svelte +8 -8
  61. package/dist/components/Layout.svelte +22 -22
  62. package/dist/components/LazyPage.svelte +4 -4
  63. package/dist/components/ListInferencer.svelte +2 -2
  64. package/dist/components/ListPage.svelte +1 -1
  65. package/dist/components/LiveIndicator.svelte +11 -11
  66. package/dist/components/LoginPage.svelte +27 -27
  67. package/dist/components/MasterDetailView.svelte +24 -24
  68. package/dist/components/MediaLibraryModal.svelte +37 -37
  69. package/dist/components/MentionsInput.svelte +11 -11
  70. package/dist/components/MetricStrip.svelte +18 -58
  71. package/dist/components/ModalForm.svelte +8 -8
  72. package/dist/components/MultiTabKeepAlive.svelte +14 -14
  73. package/dist/components/NavigateToResource.svelte +3 -3
  74. package/dist/components/NotificationsSettings.svelte +4 -4
  75. package/dist/components/OfflineSyncBanner.svelte +28 -28
  76. package/dist/components/PageHeader.svelte +12 -13
  77. package/dist/components/PageSkeleton.svelte +26 -26
  78. package/dist/components/PasswordInput.svelte +11 -11
  79. package/dist/components/PdfDocumentViewer.svelte +45 -45
  80. package/dist/components/PermissionMatrix.svelte +48 -48
  81. package/dist/components/PivotTable.svelte +21 -21
  82. package/dist/components/PresenceAvatarGroup.svelte +11 -11
  83. package/dist/components/PrintableBill.svelte +43 -43
  84. package/dist/components/ProfilePage.svelte +34 -34
  85. package/dist/components/RecordDetailDrawer.svelte +15 -15
  86. package/dist/components/RegisterPage.svelte +9 -9
  87. package/dist/components/ResourceInferencer.svelte +3 -3
  88. package/dist/components/ResourceOperationsPage.svelte +44 -44
  89. package/dist/components/RetryTaskButton.svelte +2 -2
  90. package/dist/components/RolesSettings.svelte +4 -4
  91. package/dist/components/RowActions.svelte +10 -10
  92. package/dist/components/SecuritySettings.svelte +8 -8
  93. package/dist/components/SensitiveDataMask.svelte +8 -8
  94. package/dist/components/SettingsPage.svelte +17 -17
  95. package/dist/components/ShowInferencer.svelte +3 -3
  96. package/dist/components/ShowInferencer.svelte.d.ts +1 -1
  97. package/dist/components/ShowPage.svelte +24 -24
  98. package/dist/components/Sidebar.svelte +63 -63
  99. package/dist/components/SidebarItem.svelte +35 -35
  100. package/dist/components/SignaturePad.svelte +16 -16
  101. package/dist/components/SplitPaneLayout.svelte +10 -10
  102. package/dist/components/SpreadsheetView.svelte +35 -35
  103. package/dist/components/StatsCard.svelte +12 -25
  104. package/dist/components/StepForm.svelte +23 -23
  105. package/dist/components/StepsForm.svelte +17 -17
  106. package/dist/components/SvadminLogo.svelte +1 -1
  107. package/dist/components/SystemPageShell.svelte +6 -6
  108. package/dist/components/TableSummary.svelte +8 -8
  109. package/dist/components/TaskDetails.svelte +29 -29
  110. package/dist/components/TaskList.svelte +17 -17
  111. package/dist/components/TaskProgressBar.svelte +4 -4
  112. package/dist/components/TaskQueueDrawer.svelte +44 -44
  113. package/dist/components/TaskStatusBadge.svelte +5 -5
  114. package/dist/components/TenantSwitcher.svelte +17 -17
  115. package/dist/components/ThemedTitle.svelte +4 -4
  116. package/dist/components/Toast.svelte +2 -2
  117. package/dist/components/Transfer.svelte +40 -40
  118. package/dist/components/TreeSelect.svelte +32 -32
  119. package/dist/components/TreeTable.svelte +28 -28
  120. package/dist/components/TwoFactorAuthPage.svelte +15 -15
  121. package/dist/components/UndoableNotification.svelte +10 -10
  122. package/dist/components/UpdatePasswordPage.svelte +6 -6
  123. package/dist/components/VersionDiffViewer.svelte +38 -38
  124. package/dist/components/VirtualTable.svelte +9 -9
  125. package/dist/components/Watermark.svelte +2 -2
  126. package/dist/components/account/CompanyProfilePage.svelte +4 -4
  127. package/dist/components/account/GetStartedPage.svelte +19 -19
  128. package/dist/components/account/ImportMembersPage.svelte +42 -42
  129. package/dist/components/account/MembersStarterPage.svelte +18 -18
  130. package/dist/components/account/SecurityLogPage.svelte +1 -1
  131. package/dist/components/account/SettingsEnterprisePage.svelte +7 -7
  132. package/dist/components/account/SettingsPlainPage.svelte +3 -3
  133. package/dist/components/account/SettingsSidebarPage.svelte +5 -5
  134. package/dist/components/account/TeamMembersPage.svelte +2 -2
  135. package/dist/components/account/UserProfilePage.svelte +3 -3
  136. package/dist/components/buttons/CloneButton.svelte +2 -2
  137. package/dist/components/buttons/CreateButton.svelte +2 -2
  138. package/dist/components/buttons/DeleteButton.svelte +4 -4
  139. package/dist/components/buttons/EditButton.svelte +2 -2
  140. package/dist/components/buttons/ExportButton.svelte +2 -2
  141. package/dist/components/buttons/ImportButton.svelte +3 -3
  142. package/dist/components/buttons/ListButton.svelte +2 -2
  143. package/dist/components/buttons/RefreshButton.svelte +2 -2
  144. package/dist/components/buttons/SaveButton.svelte +3 -3
  145. package/dist/components/buttons/ShowButton.svelte +2 -2
  146. package/dist/components/charts/BarChart.svelte +3 -3
  147. package/dist/components/charts/LineChart.svelte +3 -3
  148. package/dist/components/charts/PieChart.svelte +7 -7
  149. package/dist/components/content/ApiKeyList.svelte +12 -12
  150. package/dist/components/content/AuditTimeline.svelte +18 -18
  151. package/dist/components/content/ContentPageHeader.svelte +9 -9
  152. package/dist/components/content/ContentPageShell.svelte +2 -2
  153. package/dist/components/content/DataState.svelte +8 -8
  154. package/dist/components/content/DescriptionList.svelte +25 -25
  155. package/dist/components/content/FeedbackNotice.svelte +11 -11
  156. package/dist/components/content/FileList.svelte +2 -2
  157. package/dist/components/content/FilterToolbar.svelte +15 -15
  158. package/dist/components/content/ImportDropzone.svelte +6 -6
  159. package/dist/components/content/IntegrationCard.svelte +4 -4
  160. package/dist/components/content/MediaThumbnail.svelte +16 -16
  161. package/dist/components/content/MemberList.svelte +2 -2
  162. package/dist/components/content/MetricBlock.svelte +7 -7
  163. package/dist/components/content/NetworkTable.svelte +1 -1
  164. package/dist/components/content/NetworkUserCard.svelte +12 -12
  165. package/dist/components/content/OtpInput.svelte +2 -2
  166. package/dist/components/content/PageToolbar.svelte +3 -3
  167. package/dist/components/content/ProjectCard.svelte +11 -11
  168. package/dist/components/content/SectionHeader.svelte +5 -5
  169. package/dist/components/content/SecurityEventTable.svelte +2 -2
  170. package/dist/components/content/SettingsFieldRow.svelte +5 -5
  171. package/dist/components/content/SettingsGroup.svelte +7 -7
  172. package/dist/components/content/StatusBadge.svelte +6 -6
  173. package/dist/components/content/StatusTabs.svelte +28 -28
  174. package/dist/components/content/SystemErrorState.svelte +2 -2
  175. package/dist/components/content/TeamCard.svelte +6 -6
  176. package/dist/components/content/TwoFactorStepper.svelte +3 -3
  177. package/dist/components/content/WorkspaceActionBar.svelte +12 -12
  178. package/dist/components/content/WorkspaceInspector.svelte +11 -11
  179. package/dist/components/content/WorkspaceLayout.svelte +5 -5
  180. package/dist/components/content/WorkspaceSplitPane.svelte +4 -4
  181. package/dist/components/content/WorkspaceStageStepper.svelte +16 -16
  182. package/dist/components/content/WorkspaceTabBar.svelte +16 -16
  183. package/dist/components/fields/ArrayField.svelte +12 -12
  184. package/dist/components/fields/AvatarField.svelte +15 -15
  185. package/dist/components/fields/BooleanField.svelte +14 -14
  186. package/dist/components/fields/CodeField.svelte +10 -10
  187. package/dist/components/fields/CopyField.svelte +6 -6
  188. package/dist/components/fields/CurrencyField.svelte +6 -6
  189. package/dist/components/fields/DateField.svelte +1 -1
  190. package/dist/components/fields/DateRangeField.svelte +2 -2
  191. package/dist/components/fields/EmailField.svelte +2 -2
  192. package/dist/components/fields/FileField.svelte +3 -3
  193. package/dist/components/fields/ImageField.svelte +1 -1
  194. package/dist/components/fields/JsonField.svelte +11 -11
  195. package/dist/components/fields/MarkdownField.svelte +2 -2
  196. package/dist/components/fields/MultiSelectField.svelte +3 -3
  197. package/dist/components/fields/NumberField.svelte +1 -1
  198. package/dist/components/fields/PercentField.svelte +9 -9
  199. package/dist/components/fields/PhoneField.svelte +8 -8
  200. package/dist/components/fields/RatingField.svelte +10 -10
  201. package/dist/components/fields/RelationField.svelte +3 -3
  202. package/dist/components/fields/RichTextField.svelte +4 -4
  203. package/dist/components/fields/TagField.svelte +11 -11
  204. package/dist/components/fields/TextField.svelte +2 -2
  205. package/dist/components/fields/UrlField.svelte +3 -3
  206. package/dist/components/network/TeamCrewTablePage.svelte +2 -2
  207. package/dist/components/network/UserCardsNFTPage.svelte +1 -1
  208. package/dist/components/profile/ActivityTimeline.svelte +8 -8
  209. package/dist/components/profile/ProfileCard.svelte +47 -47
  210. package/dist/components/profile/ProfileVariantSections.svelte +158 -158
  211. package/dist/components/profile/ProjectsGrid.svelte +6 -6
  212. package/dist/components/profile/PublicProfilePage.svelte +6 -6
  213. package/dist/components/profile/TeamsShowcase.svelte +3 -3
  214. package/dist/components/ui/alert/alert-description.svelte +1 -1
  215. package/dist/components/ui/alert/alert-title.svelte +1 -1
  216. package/dist/components/ui/alert/alert-variants.d.ts +7 -0
  217. package/dist/components/ui/alert/alert-variants.js +2 -0
  218. package/dist/components/ui/alert/alert.svelte +4 -15
  219. package/dist/components/ui/alert/alert.svelte.d.ts +7 -24
  220. package/dist/components/ui/alert-dialog/alert-dialog-content.svelte +2 -2
  221. package/dist/components/ui/alert-dialog/alert-dialog-description.svelte +1 -1
  222. package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte +1 -1
  223. package/dist/components/ui/alert-dialog/alert-dialog-header.svelte +1 -1
  224. package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte +1 -1
  225. package/dist/components/ui/alert-dialog/alert-dialog-title.svelte +1 -1
  226. package/dist/components/ui/avatar/avatar-variants.d.ts +7 -0
  227. package/dist/components/ui/avatar/avatar-variants.js +2 -0
  228. package/dist/components/ui/avatar/avatar.svelte +11 -20
  229. package/dist/components/ui/avatar/avatar.svelte.d.ts +12 -28
  230. package/dist/components/ui/badge/badge-variants.d.ts +7 -0
  231. package/dist/components/ui/badge/badge-variants.js +2 -0
  232. package/dist/components/ui/badge/badge.svelte +4 -24
  233. package/dist/components/ui/badge/badge.svelte.d.ts +7 -45
  234. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +3 -3
  235. package/dist/components/ui/breadcrumb/breadcrumb-item.svelte +1 -1
  236. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +1 -1
  237. package/dist/components/ui/breadcrumb/breadcrumb-list.svelte +1 -1
  238. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +1 -1
  239. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +2 -2
  240. package/dist/components/ui/button/button-variants.d.ts +9 -0
  241. package/dist/components/ui/button/button-variants.js +3 -0
  242. package/dist/components/ui/button/button.svelte +12 -31
  243. package/dist/components/ui/button/button.svelte.d.ts +9 -61
  244. package/dist/components/ui/card/card-action.svelte +1 -4
  245. package/dist/components/ui/card/card-content.svelte +1 -1
  246. package/dist/components/ui/card/card-description.svelte +1 -1
  247. package/dist/components/ui/card/card-footer.svelte +1 -1
  248. package/dist/components/ui/card/card-header.svelte +1 -4
  249. package/dist/components/ui/card/card-title.svelte +1 -1
  250. package/dist/components/ui/card/card.svelte +1 -1
  251. package/dist/components/ui/checkbox/checkbox.svelte +2 -5
  252. package/dist/components/ui/command/command-dialog.svelte +3 -3
  253. package/dist/components/ui/command/command-empty.svelte +1 -1
  254. package/dist/components/ui/command/command-group.svelte +2 -2
  255. package/dist/components/ui/command/command-input.svelte +1 -4
  256. package/dist/components/ui/command/command-item.svelte +1 -4
  257. package/dist/components/ui/command/command-list.svelte +1 -1
  258. package/dist/components/ui/command/command-separator.svelte +1 -1
  259. package/dist/components/ui/command/command.svelte +1 -4
  260. package/dist/components/ui/dialog/dialog-content.svelte +3 -3
  261. package/dist/components/ui/dialog/dialog-description.svelte +1 -1
  262. package/dist/components/ui/dialog/dialog-footer.svelte +1 -1
  263. package/dist/components/ui/dialog/dialog-header.svelte +1 -1
  264. package/dist/components/ui/dialog/dialog-overlay.svelte +1 -1
  265. package/dist/components/ui/dialog/dialog-title.svelte +1 -1
  266. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +2 -5
  267. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -6
  268. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +3 -9
  269. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +1 -1
  270. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +1 -1
  271. package/dist/components/ui/input/input.svelte +3 -2
  272. package/dist/components/ui/label/label.svelte +1 -4
  273. package/dist/components/ui/navigation-menu/navigation-menu-content.svelte +1 -5
  274. package/dist/components/ui/navigation-menu/navigation-menu-indicator.svelte +2 -5
  275. package/dist/components/ui/navigation-menu/navigation-menu-item.svelte +1 -1
  276. package/dist/components/ui/navigation-menu/navigation-menu-link.svelte +1 -4
  277. package/dist/components/ui/navigation-menu/navigation-menu-list.svelte +1 -1
  278. package/dist/components/ui/navigation-menu/navigation-menu-trigger.svelte +2 -5
  279. package/dist/components/ui/navigation-menu/navigation-menu-viewport.svelte +2 -5
  280. package/dist/components/ui/navigation-menu/navigation-menu.svelte +1 -1
  281. package/dist/components/ui/pagination/pagination-content.svelte +1 -1
  282. package/dist/components/ui/pagination/pagination-ellipsis.svelte +3 -3
  283. package/dist/components/ui/pagination/pagination-link.svelte +3 -0
  284. package/dist/components/ui/pagination/pagination-next.svelte +5 -2
  285. package/dist/components/ui/pagination/pagination-previous.svelte +5 -2
  286. package/dist/components/ui/pagination/pagination.svelte +1 -1
  287. package/dist/components/ui/popover/popover-content.svelte +1 -4
  288. package/dist/components/ui/progress/progress.svelte +2 -2
  289. package/dist/components/ui/scroll-area/scroll-area.svelte +3 -4
  290. package/dist/components/ui/select/select.svelte +1 -2
  291. package/dist/components/ui/separator/separator.svelte +1 -6
  292. package/dist/components/ui/sheet/sheet-content.svelte +1 -4
  293. package/dist/components/ui/sheet/sheet-description.svelte +1 -1
  294. package/dist/components/ui/sheet/sheet-footer.svelte +1 -1
  295. package/dist/components/ui/sheet/sheet-header.svelte +1 -1
  296. package/dist/components/ui/sheet/sheet-title.svelte +1 -1
  297. package/dist/components/ui/sheet/sheet.svelte +5 -10
  298. package/dist/components/ui/skeleton/skeleton.svelte +1 -1
  299. package/dist/components/ui/switch/switch.svelte +2 -9
  300. package/dist/components/ui/table/table-caption.svelte +1 -1
  301. package/dist/components/ui/table/table-cell.svelte +8 -11
  302. package/dist/components/ui/table/table-footer.svelte +1 -1
  303. package/dist/components/ui/table/table-head.svelte +1 -11
  304. package/dist/components/ui/table/table-header.svelte +1 -1
  305. package/dist/components/ui/table/table-row.svelte +2 -2
  306. package/dist/components/ui/table/table-row.svelte.d.ts +1 -1
  307. package/dist/components/ui/table/table.svelte +2 -2
  308. package/dist/components/ui/tabs/tabs-content.svelte +1 -1
  309. package/dist/components/ui/tabs/tabs-list.svelte +1 -4
  310. package/dist/components/ui/tabs/tabs-trigger.svelte +1 -7
  311. package/dist/components/ui/tabs/tabs.svelte +1 -1
  312. package/dist/components/ui/textarea/textarea.svelte +1 -4
  313. package/dist/components/ui/tooltip/tooltip-content.svelte +1 -1
  314. package/dist/page-chrome.css +228 -0
  315. package/package.json +14 -9
@@ -77,26 +77,26 @@
77
77
  </script>
78
78
 
79
79
  <Dialog.Root bind:open>
80
- <Dialog.Content class={cn('sm:max-w-3xl max-h-[85vh] flex flex-col p-0 overflow-hidden text-xs', className)}>
80
+ <Dialog.Content class={cn('svadmin-u-a02aa8a60111 svadmin-u-c3c9f24b386b svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-8a539c7fe216 svadmin-u-2cd02d11d1af svadmin-u-359090c2d529', className)}>
81
81
  <!-- Header -->
82
- <Dialog.Header class="p-4 border-b border-border/60">
83
- <Dialog.Title class="flex items-center gap-2">
84
- <ImageIcon class="h-4 w-4 text-primary" />
82
+ <Dialog.Header class="svadmin-u-8e63407b5ceb svadmin-u-65fdbade2025 svadmin-u-05faf5c801ff">
83
+ <Dialog.Title class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">
84
+ <ImageIcon class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3 svadmin-u-20aaf08a7ed1" />
85
85
  <span>{title}</span>
86
86
  </Dialog.Title>
87
87
  </Dialog.Header>
88
88
 
89
89
  <!-- Toolbar: Search & Categories -->
90
- <div class="flex flex-wrap items-center justify-between gap-3 p-3 bg-muted/20 border-b border-border/60">
91
- <div class="flex items-center gap-1.5 overflow-x-auto">
90
+ <div class="svadmin-u-60fbb7713999 svadmin-u-1eb5c6df38c1 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-eb6e8b881acd svadmin-u-967d113a1451 svadmin-u-65fdbade2025 svadmin-u-05faf5c801ff">
91
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-58284b4ea568 svadmin-u-1384f66f41d0">
92
92
  {#each categories as cat (cat)}
93
93
  <button
94
94
  type="button"
95
95
  class={cn(
96
- 'px-2.5 py-1 rounded-md text-xs font-medium transition-colors cursor-pointer border-0',
96
+ 'svadmin-u-0b91436debbd svadmin-u-660d2effb880 svadmin-u-421ac2be5045 svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-ceb69a6b0e5f svadmin-u-34516836730d svadmin-u-119b2aa0b8f6',
97
97
  activeCategory === cat
98
- ? 'bg-primary text-primary-foreground'
99
- : 'bg-card text-muted-foreground hover:text-foreground hover:bg-muted/60'
98
+ ? 'svadmin-u-75b1bec3ea0e svadmin-u-30ca335ae9c2'
99
+ : 'svadmin-u-cd0ad9a56558 svadmin-u-bfa603190748 svadmin-u-ea7b2e9e070e svadmin-u-68646cdcc246'
100
100
  )}
101
101
  onclick={() => { activeCategory = cat; }}
102
102
  >
@@ -105,21 +105,21 @@
105
105
  {/each}
106
106
  </div>
107
107
 
108
- <div class="flex items-center gap-2">
109
- <div class="relative w-48">
110
- <Search class="absolute left-2.5 top-2 h-3.5 w-3.5 text-muted-foreground" />
108
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">
109
+ <div class="svadmin-u-d89972fe17d6 svadmin-u-74b2435a1d40">
110
+ <Search class="svadmin-u-da4dbfbc4fdc svadmin-u-ecfeb742a3f3 svadmin-u-9a2db8f949b6 svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c svadmin-u-bfa603190748" />
111
111
  <input
112
112
  type="text"
113
113
  bind:value={searchQuery}
114
114
  placeholder="Search media..."
115
- class="h-7.5 w-full rounded-md border border-input bg-background pl-7.5 pr-2 text-xs focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
115
+ class="svadmin-u-d1c57777d8b6 svadmin-u-6da6a3c3f741 svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-e5795dad4d22 svadmin-u-e6f9e383a762 svadmin-u-d2d2d97dd0c8 svadmin-u-aa2c13a5e1b4 svadmin-u-359090c2d529 svadmin-u-f10f771f87e9 svadmin-u-3e94a98e1466 svadmin-u-9c1295a6914a"
116
116
  />
117
117
  </div>
118
118
 
119
- <label class="inline-flex">
120
- <input type="file" multiple class="hidden" onchange={handleFileInput} />
121
- <span class="inline-flex items-center gap-1 h-7.5 px-2.5 rounded-md bg-secondary text-secondary-foreground text-xs font-medium hover:bg-secondary/80 cursor-pointer">
122
- <Upload class="h-3.5 w-3.5" />
119
+ <label class="svadmin-u-52083e7da442">
120
+ <input type="file" multiple class="svadmin-u-99d72c7fc3e2" onchange={handleFileInput} />
121
+ <span class="svadmin-u-52083e7da442 svadmin-u-3960ffc248d9 svadmin-u-44ee8ba0a421 svadmin-u-d1c57777d8b6 svadmin-u-0b91436debbd svadmin-u-421ac2be5045 svadmin-u-ba939ea82d8b svadmin-u-5064267f78e3 svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-35b680bc2a46 svadmin-u-34516836730d">
122
+ <Upload class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
123
123
  Upload
124
124
  </span>
125
125
  </label>
@@ -127,43 +127,43 @@
127
127
  </div>
128
128
 
129
129
  <!-- Media Grid -->
130
- <div class="flex-1 overflow-y-auto p-4 min-h-64">
131
- <div class="grid grid-cols-2 sm:grid-cols-4 gap-3">
130
+ <div class="svadmin-u-36e579c0b41c svadmin-u-92bf82f493b1 svadmin-u-8e63407b5ceb svadmin-u-c7f14f00a474">
131
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-8e75e3db482b svadmin-u-898c0bcba480 svadmin-u-1004c0c3954c">
132
132
  {#each filteredMedia as item (item.id)}
133
133
  {@const isChosen = localSelected.includes(item.url)}
134
134
  <button
135
135
  type="button"
136
136
  class={cn(
137
- 'group relative flex flex-col rounded-lg border text-left overflow-hidden transition-all cursor-pointer p-0 bg-card',
137
+ 'group svadmin-u-d89972fe17d6 svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-2eba0d65d059 svadmin-u-2cd02d11d1af svadmin-u-0fe7d7d814d0 svadmin-u-34516836730d svadmin-u-8a539c7fe216 svadmin-u-cd0ad9a56558',
138
138
  isChosen
139
- ? 'border-primary ring-2 ring-primary/30 shadow-xs'
140
- : 'border-border/60 hover:border-border hover:shadow-xs'
139
+ ? 'svadmin-u-6cbc84dd9e1a svadmin-u-16b1efa5875e svadmin-u-d07ac033ff8d svadmin-u-cef5b893cf23'
140
+ : 'svadmin-u-05faf5c801ff svadmin-u-512e82e6a68f svadmin-u-f0372faffc6a'
141
141
  )}
142
142
  onclick={() => toggleSelect(item.url)}
143
143
  >
144
144
  <!-- Thumbnail preview -->
145
- <div class="relative h-28 w-full bg-muted/40 flex items-center justify-center overflow-hidden">
145
+ <div class="svadmin-u-d89972fe17d6 svadmin-u-e836f6e0a16f svadmin-u-6da6a3c3f741 svadmin-u-b00f43c30c2b svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-2cd02d11d1af">
146
146
  {#if item.type?.startsWith('image') || item.url.match(/\.(jpeg|jpg|gif|png|webp|svg)$/i)}
147
- <img src={item.url} alt={item.name} class="h-full w-full object-cover group-hover:scale-105 transition-transform duration-200" />
147
+ <img src={item.url} alt={item.name} class="svadmin-u-668b21aa5409 svadmin-u-6da6a3c3f741 svadmin-u-7d85d0c21a32 svadmin-u-1a9195e1d901 svadmin-u-eadef238231e svadmin-u-625a4c3fbeb2" />
148
148
  {:else}
149
- <Folder class="h-8 w-8 text-muted-foreground/60" />
149
+ <Folder class="svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179 svadmin-u-7be4d67a6256" />
150
150
  {/if}
151
151
 
152
152
  <!-- Select Checkmark Badge -->
153
153
  {#if isChosen}
154
- <div class="absolute top-1.5 right-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-xs">
155
- <Check class="h-3 w-3" />
154
+ <div class="svadmin-u-da4dbfbc4fdc svadmin-u-b1044d8600a8 svadmin-u-62925abe316b svadmin-u-60fbb7713999 svadmin-u-cd0d9c512cdc svadmin-u-72470489ff4e svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-ac204c108886 svadmin-u-75b1bec3ea0e svadmin-u-30ca335ae9c2 svadmin-u-cef5b893cf23">
155
+ <Check class="svadmin-u-6a60c09e6aaa svadmin-u-9cea05671a29" />
156
156
  </div>
157
157
  {/if}
158
158
  </div>
159
159
 
160
160
  <!-- Metadata Info -->
161
- <div class="p-2 space-y-0.5">
162
- <div class="font-medium text-foreground truncate">{item.name}</div>
163
- <div class="flex items-center justify-between text-[10px] text-muted-foreground">
161
+ <div class="svadmin-u-7660b450905a svadmin-u-e2eedc5718f0">
162
+ <div class="svadmin-u-2689f3958069 svadmin-u-d4108abe6359 svadmin-u-f283ea9bea0e">{item.name}</div>
163
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1dc571a3609f svadmin-u-bfa603190748">
164
164
  <span>{item.size ?? '—'}</span>
165
165
  {#if item.category}
166
- <Badge variant="secondary" class="text-[9px] px-1 py-0">{item.category}</Badge>
166
+ <Badge variant="secondary" class="svadmin-u-e09880869d1f svadmin-u-d8e0e382c67b svadmin-u-68ecb30dbec6">{item.category}</Badge>
167
167
  {/if}
168
168
  </div>
169
169
  </div>
@@ -172,19 +172,19 @@
172
172
  </div>
173
173
 
174
174
  {#if filteredMedia.length === 0}
175
- <div class="flex flex-col items-center justify-center py-16 text-muted-foreground text-center space-y-2">
176
- <ImageIcon class="h-8 w-8 opacity-40" />
175
+ <div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-02cafd385619 svadmin-u-bfa603190748 svadmin-u-ca6bf63030aa svadmin-u-6f7e013d6499">
176
+ <ImageIcon class="svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179 svadmin-u-2a2db4667b27" />
177
177
  <p>No media files found</p>
178
178
  </div>
179
179
  {/if}
180
180
  </div>
181
181
 
182
182
  <!-- Footer -->
183
- <Dialog.Footer class="p-3 border-t border-border/60 bg-muted/20 flex items-center justify-between">
184
- <div class="text-muted-foreground">
185
- Selected <strong class="text-foreground">{localSelected.length}</strong> file(s)
183
+ <Dialog.Footer class="svadmin-u-eb6e8b881acd svadmin-u-b950dda299d3 svadmin-u-05faf5c801ff svadmin-u-967d113a1451 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc">
184
+ <div class="svadmin-u-bfa603190748">
185
+ Selected <strong class="svadmin-u-d4108abe6359">{localSelected.length}</strong> file(s)
186
186
  </div>
187
- <div class="flex items-center gap-2">
187
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">
188
188
  <Button variant="outline" size="sm" onclick={() => { open = false; }}>Cancel</Button>
189
189
  <Button size="sm" disabled={localSelected.length === 0} onclick={handleConfirm}>
190
190
  Insert Selected
@@ -127,45 +127,45 @@
127
127
  }
128
128
  </script>
129
129
 
130
- <div class={cn('relative w-full text-xs', className)}>
130
+ <div class={cn('svadmin-u-d89972fe17d6 svadmin-u-6da6a3c3f741 svadmin-u-359090c2d529', className)}>
131
131
  <textarea
132
132
  bind:this={textareaEl}
133
133
  {value}
134
134
  {placeholder}
135
135
  {rows}
136
136
  {disabled}
137
- class="w-full rounded-md border border-input bg-background p-2.5 text-xs text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 resize-y"
137
+ class="svadmin-u-6da6a3c3f741 svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-e5795dad4d22 svadmin-u-e6f9e383a762 svadmin-u-9fe52d5d506c svadmin-u-359090c2d529 svadmin-u-d4108abe6359 svadmin-u-9c24ab70af61 svadmin-u-f10f771f87e9 svadmin-u-3e94a98e1466 svadmin-u-9c1295a6914a svadmin-u-5f533b3a7de7 svadmin-u-b29d8adbad2e svadmin-u-5bd7b080992c"
138
138
  oninput={handleInput}
139
139
  onkeydown={handleKeyDown}
140
140
  ></textarea>
141
141
 
142
142
  {#if showDropdown && activeOptions.length > 0}
143
143
  <div
144
- class="absolute left-0 top-full mt-1 z-50 min-w-48 max-h-56 overflow-y-auto rounded-lg border border-border bg-popover text-popover-foreground shadow-md p-1 animate-in fade-in-0 zoom-in-95"
144
+ class="svadmin-u-da4dbfbc4fdc svadmin-u-c78facc7a0a6 svadmin-u-5e8a03e061f9 svadmin-u-b6b02c0ebef6 svadmin-u-181b286668b5 svadmin-u-4bdb6700d16a svadmin-u-520bb7118c41 svadmin-u-92bf82f493b1 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-e541d86d1ec8 svadmin-u-9b13e8ae5c9c svadmin-u-febc34e471df svadmin-u-eb6a3cef9686 svadmin-u-40137e897961 fade-in-0 zoom-in-95"
145
145
  >
146
- <div class="px-2 py-1 text-[10px] font-semibold text-muted-foreground uppercase tracking-wider">
146
+ <div class="svadmin-u-d5eab218aa34 svadmin-u-660d2effb880 svadmin-u-1dc571a3609f svadmin-u-e83a7042bc91 svadmin-u-bfa603190748 uppercase svadmin-u-09ace3a4d9f5">
147
147
  {activeTrigger === '#' ? 'Select Tag' : 'Mention Member'}
148
148
  </div>
149
149
  {#each activeOptions as opt, idx (opt.id)}
150
150
  <button
151
151
  type="button"
152
152
  class={cn(
153
- 'w-full flex items-center justify-between gap-2 px-2 py-1.5 rounded-md text-left text-xs transition-colors cursor-pointer border-0',
154
- idx === selectedIndex ? 'bg-accent text-accent-foreground font-medium' : 'bg-transparent text-foreground hover:bg-muted/60'
153
+ 'svadmin-u-6da6a3c3f741 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4 svadmin-u-d5eab218aa34 svadmin-u-ec0091ee009b svadmin-u-421ac2be5045 svadmin-u-2eba0d65d059 svadmin-u-359090c2d529 svadmin-u-ceb69a6b0e5f svadmin-u-34516836730d svadmin-u-119b2aa0b8f6',
154
+ idx === selectedIndex ? 'svadmin-u-f1669c2d7424 svadmin-u-6032d46445ba svadmin-u-2689f3958069' : 'svadmin-u-7f19cdf4c5bb svadmin-u-d4108abe6359 svadmin-u-68646cdcc246'
155
155
  )}
156
156
  onclick={() => insertMention(opt)}
157
157
  >
158
- <div class="flex items-center gap-2 truncate">
158
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4 svadmin-u-f283ea9bea0e">
159
159
  {#if activeTrigger === '#'}
160
- <Hash class="h-3.5 w-3.5 text-primary shrink-0" />
160
+ <Hash class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c svadmin-u-20aaf08a7ed1 svadmin-u-012fbd121f37" />
161
161
  {:else}
162
- <User class="h-3.5 w-3.5 text-primary shrink-0" />
162
+ <User class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c svadmin-u-20aaf08a7ed1 svadmin-u-012fbd121f37" />
163
163
  {/if}
164
- <span class="truncate">{opt.label}</span>
164
+ <span class="svadmin-u-f283ea9bea0e">{opt.label}</span>
165
165
  </div>
166
166
 
167
167
  {#if opt.subtitle}
168
- <Badge variant="secondary" class="text-[10px] px-1 py-0">{opt.subtitle}</Badge>
168
+ <Badge variant="secondary" class="svadmin-u-1dc571a3609f svadmin-u-d8e0e382c67b svadmin-u-68ecb30dbec6">{opt.subtitle}</Badge>
169
169
  {/if}
170
170
  </button>
171
171
  {/each}
@@ -40,44 +40,13 @@
40
40
  children,
41
41
  }: Props = $props();
42
42
 
43
- const columnClassMap = {
44
- 2: 'grid-cols-1 sm:grid-cols-2',
45
- 3: 'grid-cols-1 sm:grid-cols-3',
46
- 4: 'grid-cols-2 sm:grid-cols-4',
47
- 5: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-5',
48
- 6: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-6',
49
- auto: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-6',
50
- };
51
-
52
- const toneValueColorMap: Record<MetricTone, string> = {
53
- default: 'text-foreground',
54
- primary: 'text-primary',
55
- success: 'text-success',
56
- warning: 'text-warning',
57
- danger: 'text-destructive',
58
- info: 'text-info',
59
- };
60
-
61
- const badgeToneMap: Record<
62
- NonNullable<NonNullable<MetricStripItem['badge']>['tone']>,
63
- string
64
- > = {
65
- default: 'bg-muted text-muted-foreground border-border',
66
- success: 'bg-success/10 text-success border-success/20',
67
- warning: 'bg-warning/10 text-warning border-warning/20',
68
- danger: 'bg-destructive/10 text-destructive border-destructive/20',
69
- info: 'bg-info/10 text-info border-info/20',
70
- };
71
43
  </script>
72
44
 
73
45
  <div
74
46
  role="region"
75
47
  aria-label={ariaLabel}
76
- class={cn(
77
- 'grid gap-px overflow-hidden rounded-lg border border-border bg-border shadow-xs',
78
- columnClassMap[columns] || columnClassMap.auto,
79
- className
80
- )}
48
+ data-columns={columns}
49
+ class={cn('svadmin-metric-strip', className)}
81
50
  >
82
51
  {#if children}
83
52
  {@render children()}
@@ -87,57 +56,48 @@
87
56
  <svelte:element
88
57
  this={isInteractive ? 'a' : 'div'}
89
58
  href={item.href}
90
- class={cn(
91
- 'group relative flex flex-col justify-between gap-1 bg-card p-3.5 text-left transition-colors duration-150 sm:p-4',
92
- isInteractive && 'cursor-pointer text-inherit no-underline hover:bg-muted/40',
93
- item.class
94
- )}
59
+ data-interactive={isInteractive ? 'true' : undefined}
60
+ data-tone={item.tone || 'default'}
61
+ class={cn('svadmin-metric-item', item.class)}
95
62
  >
96
- <div class="flex items-center justify-between gap-2">
97
- <span class="truncate text-xs font-semibold text-muted-foreground">{item.label}</span>
63
+ <div class="svadmin-metric-heading">
64
+ <span class="svadmin-metric-label">{item.label}</span>
98
65
  {#if item.icon}
99
- <span class="shrink-0 text-muted-foreground/70">
100
- <item.icon class="h-3.5 w-3.5" />
66
+ <span class="svadmin-metric-icon">
67
+ <item.icon />
101
68
  </span>
102
69
  {/if}
103
70
  </div>
104
71
 
105
72
  {#if item.loading}
106
- <div class="mt-1 flex items-center justify-between">
107
- <Skeleton class="h-6 w-16" />
73
+ <div class="svadmin-metric-loading">
74
+ <Skeleton class="svadmin-metric-skeleton" />
108
75
  </div>
109
76
  {:else}
110
- <div class="mt-0.5 flex items-baseline justify-between gap-2">
77
+ <div class="svadmin-metric-value-row">
111
78
  <strong
112
- class={cn(
113
- 'text-xl font-bold tracking-tight tabular-nums sm:text-2xl',
114
- toneValueColorMap[item.tone || 'default']
115
- )}
79
+ class="svadmin-metric-value"
116
80
  >
117
81
  {item.value}
118
82
  </strong>
119
83
 
120
84
  {#if item.badge}
121
85
  <span
122
- class={cn(
123
- 'inline-flex items-center rounded-full border px-1.5 py-0.5 text-[11px] font-semibold',
124
- badgeToneMap[item.badge.tone || 'default']
125
- )}
86
+ data-tone={item.badge.tone || 'default'}
87
+ class="svadmin-metric-badge"
126
88
  >
127
89
  {item.badge.text}
128
90
  </span>
129
91
  {:else if item.trend}
130
92
  <span
131
- class={cn(
132
- 'inline-flex items-center gap-0.5 text-xs font-medium tabular-nums',
133
- item.trend.value >= 0 ? 'text-success' : 'text-destructive'
134
- )}
93
+ data-direction={item.trend.value >= 0 ? 'up' : 'down'}
94
+ class="svadmin-metric-trend"
135
95
  aria-label="{item.trend.value >= 0 ? '上升' : '下降'} {Math.abs(item.trend.value)}%"
136
96
  >
137
97
  <span aria-hidden="true">{item.trend.value >= 0 ? '↑' : '↓'}</span>
138
98
  <span>{Math.abs(item.trend.value)}%</span>
139
99
  {#if item.trend.label}
140
- <span class="ml-0.5 text-muted-foreground">{item.trend.label}</span>
100
+ <span class="svadmin-metric-trend-label">{item.trend.label}</span>
141
101
  {/if}
142
102
  </span>
143
103
  {/if}
@@ -33,7 +33,7 @@
33
33
  triggerSize = 'sm',
34
34
  submitText = 'Confirm',
35
35
  cancelText = 'Cancel',
36
- widthClass = 'sm:max-w-lg',
36
+ widthClass = 'svadmin-u-a09a722d3ce4',
37
37
  isSubmitting = false,
38
38
  disabled = false,
39
39
  onsubmit,
@@ -66,7 +66,7 @@
66
66
  {#if triggerSnippet}
67
67
  <Dialog.Trigger>
68
68
  {#snippet child({ props })}
69
- <div {...props} class="inline-flex">
69
+ <div {...props} class="svadmin-u-52083e7da442">
70
70
  {@render triggerSnippet()}
71
71
  </div>
72
72
  {/snippet}
@@ -81,8 +81,8 @@
81
81
  </Dialog.Trigger>
82
82
  {/if}
83
83
 
84
- <Dialog.Content class={cn(widthClass, 'max-h-[90vh] overflow-y-auto', className)}>
85
- <form onsubmit={handleSubmit} class="space-y-4">
84
+ <Dialog.Content class={cn(widthClass, 'svadmin-u-b4168890eac6 svadmin-u-92bf82f493b1', className)}>
85
+ <form onsubmit={handleSubmit} class="svadmin-u-3e7ce58d64fa">
86
86
  <Dialog.Header>
87
87
  <Dialog.Title>{title}</Dialog.Title>
88
88
  {#if description}
@@ -90,13 +90,13 @@
90
90
  {/if}
91
91
  </Dialog.Header>
92
92
 
93
- <div class="py-2 text-sm text-foreground">
93
+ <div class="svadmin-u-03b4dd7f172b svadmin-u-fc7473ca09eb svadmin-u-d4108abe6359">
94
94
  {#if children}
95
95
  {@render children()}
96
96
  {/if}
97
97
  </div>
98
98
 
99
- <Dialog.Footer class="gap-2 pt-2 border-t border-border/50">
99
+ <Dialog.Footer class="svadmin-u-77a2a20e90d4 svadmin-u-f46b61a9b310 svadmin-u-b950dda299d3 svadmin-u-591f378e24a1">
100
100
  <Button
101
101
  type="button"
102
102
  variant="outline"
@@ -110,10 +110,10 @@
110
110
  type="submit"
111
111
  size="sm"
112
112
  disabled={loading || isSubmitting || disabled}
113
- class="gap-1.5 min-w-20"
113
+ class="svadmin-u-58284b4ea568 svadmin-u-2e7a6d18a20d"
114
114
  >
115
115
  {#if loading || isSubmitting}
116
- <Loader2 class="h-4 w-4 animate-spin" />
116
+ <Loader2 class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3 svadmin-u-afbdd13a380e" />
117
117
  {/if}
118
118
  {submitText}
119
119
  </Button>
@@ -76,37 +76,37 @@
76
76
  }
77
77
  </script>
78
78
 
79
- <div class={cn('flex items-center justify-between border-b border-border/80 bg-muted/30 px-2 text-xs select-none', className)}>
79
+ <div class={cn('svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-c9ed8c5f79ae svadmin-u-2859c861d7de svadmin-u-d5eab218aa34 svadmin-u-359090c2d529 svadmin-u-7f6912283f11', className)}>
80
80
  <!-- Tabs list -->
81
- <div class="flex items-center gap-1 overflow-x-auto py-1 scrollbar-none">
81
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-44ee8ba0a421 svadmin-u-1384f66f41d0 svadmin-u-660d2effb880 scrollbar-none">
82
82
  {#each tabs as tab (tab.id)}
83
83
  {@const isActive = tab.id === activeTabId}
84
84
  <div
85
85
  role="button"
86
86
  tabindex="0"
87
87
  class={cn(
88
- 'group relative flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-all cursor-pointer border',
88
+ 'group svadmin-u-d89972fe17d6 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-58284b4ea568 svadmin-u-0e17f2bd9074 svadmin-u-ec0091ee009b svadmin-u-421ac2be5045 svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-0fe7d7d814d0 svadmin-u-34516836730d svadmin-u-ca6bcd4b6f3f',
89
89
  isActive
90
- ? 'bg-card text-foreground border-border shadow-xs'
91
- : 'bg-transparent text-muted-foreground border-transparent hover:bg-muted/60 hover:text-foreground'
90
+ ? 'svadmin-u-cd0ad9a56558 svadmin-u-d4108abe6359 svadmin-u-18049387f0af svadmin-u-cef5b893cf23'
91
+ : 'svadmin-u-7f19cdf4c5bb svadmin-u-bfa603190748 svadmin-u-521fa0c7c407 svadmin-u-68646cdcc246 svadmin-u-ea7b2e9e070e'
92
92
  )}
93
93
  onclick={() => handleSelect(tab)}
94
94
  onkeydown={(e) => { if (e.key === 'Enter') handleSelect(tab); }}
95
95
  oncontextmenu={(e) => handleContextMenu(e, tab.id)}
96
96
  >
97
97
  {#if tab.pinned}
98
- <Pin class="h-3 w-3 text-primary shrink-0 rotate-45" />
98
+ <Pin class="svadmin-u-6a60c09e6aaa svadmin-u-9cea05671a29 svadmin-u-20aaf08a7ed1 svadmin-u-012fbd121f37 svadmin-u-c74901da6f6c" />
99
99
  {/if}
100
100
 
101
- <span class="truncate max-w-32">{tab.title}</span>
101
+ <span class="svadmin-u-f283ea9bea0e svadmin-u-1d274d2422d8">{tab.title}</span>
102
102
 
103
103
  {#if tab.closable !== false && !tab.pinned}
104
104
  <button
105
105
  type="button"
106
- class="flex h-3.5 w-3.5 items-center justify-center rounded-full text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive transition-colors p-0 border-0 cursor-pointer"
106
+ class="svadmin-u-60fbb7713999 svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-ac204c108886 svadmin-u-7be4d67a6256 svadmin-u-8db899b4e072 svadmin-u-51e95020d6f2 svadmin-u-ceb69a6b0e5f svadmin-u-8a539c7fe216 svadmin-u-119b2aa0b8f6 svadmin-u-34516836730d"
107
107
  onclick={(e) => handleClose(e, tab.id)}
108
108
  >
109
- <X class="h-2.5 w-2.5" />
109
+ <X class="svadmin-u-9b3d0721b628 svadmin-u-650758f4572a" />
110
110
  </button>
111
111
  {/if}
112
112
  </div>
@@ -114,17 +114,17 @@
114
114
  </div>
115
115
 
116
116
  <!-- Actions (Close All / Refresh) -->
117
- <div class="flex items-center gap-1 pl-2 shrink-0">
117
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-44ee8ba0a421 svadmin-u-989541ad4512 svadmin-u-012fbd121f37">
118
118
  {#if onrefresh}
119
119
  {@const curTab = tabs.find((t) => t.id === activeTabId)}
120
120
  {#if curTab}
121
121
  <Button
122
122
  variant="ghost"
123
123
  size="sm"
124
- class="h-7 w-7 p-0 text-muted-foreground hover:text-foreground"
124
+ class="svadmin-u-d0a52b312f7d svadmin-u-cbbf90f9a828 svadmin-u-8a539c7fe216 svadmin-u-bfa603190748 svadmin-u-ea7b2e9e070e"
125
125
  onclick={() => onrefresh(curTab)}
126
126
  >
127
- <RefreshCw class="h-3 w-3" />
127
+ <RefreshCw class="svadmin-u-6a60c09e6aaa svadmin-u-9cea05671a29" />
128
128
  </Button>
129
129
  {/if}
130
130
  {/if}
@@ -133,10 +133,10 @@
133
133
  <Button
134
134
  variant="ghost"
135
135
  size="sm"
136
- class="h-7 w-7 p-0 text-muted-foreground hover:text-destructive"
136
+ class="svadmin-u-d0a52b312f7d svadmin-u-cbbf90f9a828 svadmin-u-8a539c7fe216 svadmin-u-bfa603190748 svadmin-u-51e95020d6f2"
137
137
  onclick={handleCloseAll}
138
138
  >
139
- <XCircle class="h-3.5 w-3.5" />
139
+ <XCircle class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
140
140
  </Button>
141
141
  {/if}
142
142
  </div>
@@ -14,9 +14,9 @@
14
14
  });
15
15
  </script>
16
16
 
17
- <div class="flex h-screen w-screen items-center justify-center p-4 text-muted-foreground">
18
- <div class="text-center">
19
- <div class="mb-4 inline-block h-8 w-8 animate-spin rounded-full border-4 border-primary border-r-transparent"></div>
17
+ <div class="svadmin-u-60fbb7713999 svadmin-u-ef114b5f5ad1 svadmin-u-71ec51c9997d svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-8e63407b5ceb svadmin-u-bfa603190748">
18
+ <div class="svadmin-u-ca6bf63030aa">
19
+ <div class="svadmin-u-da019856f2cc svadmin-u-bb0c4bfc52bd svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179 svadmin-u-afbdd13a380e svadmin-u-ac204c108886 svadmin-u-b485ae1c3b47 svadmin-u-6cbc84dd9e1a svadmin-u-980d09f1c472"></div>
20
20
  <p>Navigating to default resource...</p>
21
21
  </div>
22
22
  </div>
@@ -14,17 +14,17 @@
14
14
  function saveSettings() { notification.success(i18n.t('common.autoSaved'), 3000); }
15
15
  </script>
16
16
 
17
- <div class="space-y-6">
18
- <div class="flex flex-col justify-between gap-3 sm:flex-row sm:items-start"><div><h2 class="text-xl font-semibold text-foreground">{i18n.t('settings.notifications')}</h2><p class="mt-1 text-sm text-muted-foreground">{i18n.t('settings.notificationsDescription')}</p></div><Button onclick={saveSettings}>{i18n.t('common.save')}</Button></div>
17
+ <div class="svadmin-u-b3542e058833">
18
+ <div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-020ba687fa12 svadmin-u-64cac80d2e9a"><div><h2 class="svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{i18n.t('settings.notifications')}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{i18n.t('settings.notificationsDescription')}</p></div><Button onclick={saveSettings}>{i18n.t('common.save')}</Button></div>
19
19
  <SettingsGroup title={i18n.t('notifications.emailTitle')} description={i18n.t('notifications.emailDescription')}>
20
- <div class="divide-y divide-border">
20
+ <div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">
21
21
  <SettingsFieldRow label={i18n.t('notifications.securityAlerts')} description={i18n.t('notifications.securityAlertsDesc')}>{#snippet control()}<Switch id="email-security" bind:checked={emailAlerts.security} />{/snippet}</SettingsFieldRow>
22
22
  <SettingsFieldRow label={i18n.t('notifications.activityLogs')} description={i18n.t('notifications.activityLogsDesc')}>{#snippet control()}<Switch id="email-activity" bind:checked={emailAlerts.activity} />{/snippet}</SettingsFieldRow>
23
23
  <SettingsFieldRow label={i18n.t('notifications.systemAlerts')} description={i18n.t('notifications.systemAlertsDesc')}>{#snippet control()}<Switch id="email-reports" bind:checked={emailAlerts.reports} />{/snippet}</SettingsFieldRow>
24
24
  </div>
25
25
  </SettingsGroup>
26
26
  <SettingsGroup title={i18n.t('notifications.pushTitle')} description={i18n.t('notifications.pushDescription')}>
27
- <div class="divide-y divide-border">
27
+ <div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">
28
28
  <SettingsFieldRow label={i18n.t('notifications.securityAlerts')} description={i18n.t('notifications.securityPushDesc')}>{#snippet control()}<Switch id="push-security" bind:checked={pushAlerts.security} />{/snippet}</SettingsFieldRow>
29
29
  <SettingsFieldRow label={i18n.t('notifications.activityLogs')} description={i18n.t('notifications.activityPushDesc')}>{#snippet control()}<Switch id="push-activity" bind:checked={pushAlerts.activity} />{/snippet}</SettingsFieldRow>
30
30
  <SettingsFieldRow label={i18n.t('notifications.systemAlerts')} description={i18n.t('notifications.systemPushDesc')}>{#snippet control()}<Switch id="push-reports" bind:checked={pushAlerts.reports} />{/snippet}</SettingsFieldRow>