@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
@@ -54,76 +54,76 @@
54
54
  });
55
55
  </script>
56
56
 
57
- <div class="h-full flex flex-col pt-2">
57
+ <div class="svadmin-u-668b21aa5409 svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-f46b61a9b310">
58
58
  <!-- Header Title -->
59
- <div class="mb-6 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between">
59
+ <div class="svadmin-u-b6777c6db914 svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-1004c0c3954c svadmin-u-020ba687fa12 svadmin-u-64cac80d2e9a svadmin-u-3b9871a0bf93">
60
60
  <div>
61
- <h1 class="text-2xl font-bold text-foreground flex items-center gap-2">
62
- <Shield class="w-6 h-6 text-primary" />
61
+ <h1 class="svadmin-u-3febee094e85 svadmin-u-69450ef1487e svadmin-u-d4108abe6359 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">
62
+ <Shield class="svadmin-u-7ec10f86d9b1 svadmin-u-f6fe902450dc svadmin-u-20aaf08a7ed1" />
63
63
  {i18n.t('permissions.title') || 'Permission Matrix'}
64
64
  </h1>
65
- <p class="text-muted-foreground mt-1 text-sm">{i18n.t('permissions.description') || 'Configure authorization rules for system modules and roles.'}</p>
65
+ <p class="svadmin-u-bfa603190748 svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb">{i18n.t('permissions.description') || 'Configure authorization rules for system modules and roles.'}</p>
66
66
  </div>
67
67
 
68
68
  <!-- Toast Feedback -->
69
69
  {#if message}
70
- <div class={`px-4 py-2 rounded-lg text-sm font-medium shadow-sm transition-all flex items-center gap-2 ${messageType === 'success' ? 'bg-success/10 text-success ring-1 ring-success/20' : 'bg-destructive/10 text-destructive ring-1 ring-destructive/20'}`}>
70
+ <div class={`svadmin-u-f0faeb26d656 svadmin-u-03b4dd7f172b svadmin-u-5f22e64f2282 svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-438b2237b8d6 svadmin-u-0fe7d7d814d0 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4 ${messageType === 'success' ? 'svadmin-u-17a9f7af2265 svadmin-u-76747e5e02ff svadmin-u-3daca9af0861 svadmin-u-be62e835b692' : 'svadmin-u-43928fcc832f svadmin-u-811148b13d1e svadmin-u-3daca9af0861 svadmin-u-5b92fd698365'}`}>
71
71
  {#if messageType === 'success'}
72
- <Check class="w-4 h-4" />
72
+ <Check class="svadmin-u-dc7972ebf3f3 svadmin-u-11e59c6d5f6b" />
73
73
  {:else}
74
- <AlertCircle class="w-4 h-4" />
74
+ <AlertCircle class="svadmin-u-dc7972ebf3f3 svadmin-u-11e59c6d5f6b" />
75
75
  {/if}
76
76
  {message}
77
77
  </div>
78
78
  {/if}
79
79
  </div>
80
80
 
81
- <div class="flex flex-col lg:flex-row gap-6 flex-1 min-h-[500px]">
82
- <div class="w-full rounded-lg border border-border bg-card p-4 shadow-sm lg:hidden">
83
- <label for="permission-role-select" class="mb-2 block text-sm font-medium text-foreground">{i18n.t('permissions.roles') || 'Roles'}</label>
84
- <select id="permission-role-select" bind:value={selectedRole} class="h-9 w-full rounded-md border border-input bg-background px-3 text-sm ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2" disabled={roles.length === 0}>
81
+ <div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-2adea12c41f3 svadmin-u-0d304f904cb0 svadmin-u-36e579c0b41c svadmin-u-243d62579c55">
82
+ <div class="svadmin-u-6da6a3c3f741 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb svadmin-u-438b2237b8d6 svadmin-u-a327049cac5b">
83
+ <label for="permission-role-select" class="svadmin-u-a77ed4d908c0 svadmin-u-0214b4b355d1 svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{i18n.t('permissions.roles') || 'Roles'}</label>
84
+ <select id="permission-role-select" bind:value={selectedRole} class="svadmin-u-e7a768f922d2 svadmin-u-6da6a3c3f741 svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-e5795dad4d22 svadmin-u-e6f9e383a762 svadmin-u-0e17f2bd9074 svadmin-u-fc7473ca09eb svadmin-u-582e6ef4b245 svadmin-u-55d048ebfb1c svadmin-u-608dd26cd5ba svadmin-u-80b9d0ae125f svadmin-u-6b22a22a9752" disabled={roles.length === 0}>
85
85
  {#each roles as role (role.code)}<option value={role.code}>{role.name}</option>{/each}
86
86
  </select>
87
- {#if roles.length === 0}<p class="mt-2 text-sm text-muted-foreground">{i18n.t('permissions.noRoles') || 'No roles available'}</p>{/if}
88
- {#if sidebarExtra}<div class="mt-4 border-t border-border pt-4">{@render sidebarExtra()}</div>{/if}
87
+ {#if roles.length === 0}<p class="svadmin-u-50d0d216a2f8 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{i18n.t('permissions.noRoles') || 'No roles available'}</p>{/if}
88
+ {#if sidebarExtra}<div class="svadmin-u-0ab8667228fd svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-173fa8f06789">{@render sidebarExtra()}</div>{/if}
89
89
  </div>
90
90
 
91
91
  <!-- Left: Role Selector Sidebar -->
92
- <div class="hidden w-full flex-shrink-0 flex-col rounded-lg border border-border bg-card p-4 shadow-sm lg:flex lg:w-64">
93
- <h2 class="mb-4 px-2 text-sm font-semibold text-muted-foreground">{i18n.t('permissions.roles') || 'Roles'}</h2>
94
- <div class="space-y-1 flex-1 overflow-y-auto">
92
+ <div class="svadmin-u-99d72c7fc3e2 svadmin-u-6da6a3c3f741 svadmin-u-2074a75bf2e7 svadmin-u-8dddea0773ed svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb svadmin-u-438b2237b8d6 svadmin-u-3eb153dc198f svadmin-u-c9c45f3d5d06">
93
+ <h2 class="svadmin-u-da019856f2cc svadmin-u-d5eab218aa34 svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-bfa603190748">{i18n.t('permissions.roles') || 'Roles'}</h2>
94
+ <div class="svadmin-u-da7c36cd8867 svadmin-u-36e579c0b41c svadmin-u-92bf82f493b1">
95
95
  {#each roles as role, _i (_i)}
96
96
  <button
97
97
  onclick={() => selectedRole = role.code}
98
- class="w-full text-left px-3 py-2.5 rounded-lg text-sm transition-all duration-200 {selectedRole === role.code ? 'bg-primary/10 text-primary font-medium shadow-sm ring-1 ring-primary/20' : 'text-foreground hover:bg-muted'}"
98
+ class="svadmin-u-6da6a3c3f741 svadmin-u-2eba0d65d059 svadmin-u-0e17f2bd9074 svadmin-u-e7ee55ac7ffe svadmin-u-5f22e64f2282 svadmin-u-fc7473ca09eb svadmin-u-0fe7d7d814d0 svadmin-u-625a4c3fbeb2 {selectedRole === role.code ? 'svadmin-u-375dc44df6e9 svadmin-u-20aaf08a7ed1 svadmin-u-2689f3958069 svadmin-u-438b2237b8d6 svadmin-u-3daca9af0861 svadmin-u-2b6f77ad4036' : 'svadmin-u-d4108abe6359 svadmin-u-8e551981c8d7'}"
99
99
  >
100
100
  {role.name}
101
- <div class="mt-0.5 font-mono text-[10px] opacity-60">{role.code}</div>
101
+ <div class="svadmin-u-15e1b1f444fe svadmin-u-0e65706bcccd svadmin-u-1dc571a3609f svadmin-u-f2868c227fcd">{role.code}</div>
102
102
  </button>
103
103
  {/each}
104
104
  {#if roles.length === 0}
105
- <p class="text-center text-muted-foreground text-sm p-4">{i18n.t('permissions.noRoles') || 'No roles available'}</p>
105
+ <p class="svadmin-u-ca6bf63030aa svadmin-u-bfa603190748 svadmin-u-fc7473ca09eb svadmin-u-8e63407b5ceb">{i18n.t('permissions.noRoles') || 'No roles available'}</p>
106
106
  {/if}
107
107
  </div>
108
108
 
109
109
  <!-- Slot for Upper Logic inject (e.g. Org Switcher, Security Level Filter) -->
110
110
  {#if sidebarExtra}
111
- <div class="mt-4 pt-4 border-t border-border">
111
+ <div class="svadmin-u-0ab8667228fd svadmin-u-173fa8f06789 svadmin-u-b950dda299d3 svadmin-u-18049387f0af">
112
112
  {@render sidebarExtra()}
113
113
  </div>
114
114
  {/if}
115
115
  </div>
116
116
 
117
117
  <!-- Right: Matrix Grid -->
118
- <div class="flex-1 bg-card rounded-lg shadow-sm border border-border overflow-hidden flex flex-col">
118
+ <div class="svadmin-u-36e579c0b41c svadmin-u-cd0ad9a56558 svadmin-u-5f22e64f2282 svadmin-u-438b2237b8d6 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-2cd02d11d1af svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed">
119
119
  <!-- Matrix Header -->
120
- <div class="p-5 border-b border-border bg-muted/30 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between">
121
- <div class="flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center sm:gap-4">
120
+ <div class="svadmin-u-c07e54fd1439 svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-2859c861d7de svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-1004c0c3954c svadmin-u-020ba687fa12 svadmin-u-64cac80d2e9a svadmin-u-3b9871a0bf93">
121
+ <div class="svadmin-u-60fbb7713999 svadmin-u-7e0b7cdf1a94 svadmin-u-8dddea0773ed svadmin-u-1004c0c3954c svadmin-u-020ba687fa12 svadmin-u-9f76a62f4f44 svadmin-u-cdaa0b7ef445">
122
122
  <div>
123
- <h2 class="text-lg font-bold text-foreground">{i18n.t('permissions.currentRole') || 'Current role'}:
124
- <span class="text-primary">{roles.find(r => r.code === selectedRole)?.name || (i18n.t('permissions.noneSelected') || 'None selected')}</span>
123
+ <h2 class="svadmin-u-42536e69e639 svadmin-u-69450ef1487e svadmin-u-d4108abe6359">{i18n.t('permissions.currentRole') || 'Current role'}:
124
+ <span class="svadmin-u-20aaf08a7ed1">{roles.find(r => r.code === selectedRole)?.name || (i18n.t('permissions.noneSelected') || 'None selected')}</span>
125
125
  </h2>
126
- <p class="text-xs text-muted-foreground mt-1">{i18n.t('permissions.toggleHint') || 'Toggle checkboxes to grant or revoke permissions'}</p>
126
+ <p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748 svadmin-u-b6b02c0ebef6">{i18n.t('permissions.toggleHint') || 'Toggle checkboxes to grant or revoke permissions'}</p>
127
127
  </div>
128
128
 
129
129
  <!-- Slot for header extra logic -->
@@ -133,60 +133,60 @@
133
133
  </div>
134
134
 
135
135
  {#if conflictCount > 0}
136
- <div class="px-3 py-1.5 bg-destructive/10 text-destructive rounded-lg text-xs font-medium ring-1 ring-destructive/20 flex items-center gap-1.5">
137
- <AlertCircle class="w-4 h-4" /> {conflictCount} {i18n.t('permissions.conflicts') || 'conflicting rules'}
136
+ <div class="svadmin-u-0e17f2bd9074 svadmin-u-ec0091ee009b svadmin-u-43928fcc832f svadmin-u-811148b13d1e svadmin-u-5f22e64f2282 svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-3daca9af0861 svadmin-u-5b92fd698365 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-58284b4ea568">
137
+ <AlertCircle class="svadmin-u-dc7972ebf3f3 svadmin-u-11e59c6d5f6b" /> {conflictCount} {i18n.t('permissions.conflicts') || 'conflicting rules'}
138
138
  </div>
139
139
  {/if}
140
140
  </div>
141
141
 
142
142
  <!-- Table Area -->
143
- <div class="flex-1 overflow-auto p-4">
144
- <table class="min-w-full rounded-lg overflow-hidden shadow-sm ring-1 ring-border/10">
145
- <thead class="bg-muted/50">
143
+ <div class="svadmin-u-36e579c0b41c svadmin-u-73fc3fb18ceb svadmin-u-8e63407b5ceb">
144
+ <table class="svadmin-u-a1e7a8069878 svadmin-u-5f22e64f2282 svadmin-u-2cd02d11d1af svadmin-u-438b2237b8d6 svadmin-u-3daca9af0861 svadmin-u-a10fdd7667ee">
145
+ <thead class="svadmin-u-358af0b65a31">
146
146
  <tr>
147
- <th scope="col" class="py-3 pr-3 pl-4 text-left text-sm font-semibold text-foreground w-48">{i18n.t('permissions.resources') || 'Resources'}</th>
147
+ <th scope="col" class="svadmin-u-1b2d54a3fd12 svadmin-u-fafb9e0bfb6a svadmin-u-fdb4af3ae0bc svadmin-u-2eba0d65d059 svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359 svadmin-u-74b2435a1d40">{i18n.t('permissions.resources') || 'Resources'}</th>
148
148
  {#each actions as action, _i (_i)}
149
- <th scope="col" class="px-2 py-3 text-center text-sm font-semibold text-foreground">
150
- <div class="flex flex-col items-center">
149
+ <th scope="col" class="svadmin-u-d5eab218aa34 svadmin-u-1b2d54a3fd12 svadmin-u-ca6bf63030aa svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">
150
+ <div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-3960ffc248d9">
151
151
  <span>{action.name}</span>
152
- <span class="text-[10px] text-muted-foreground font-mono">{action.code}</span>
152
+ <span class="svadmin-u-1dc571a3609f svadmin-u-bfa603190748 svadmin-u-0e65706bcccd">{action.code}</span>
153
153
  </div>
154
154
  </th>
155
155
  {/each}
156
156
  </tr>
157
157
  </thead>
158
- <tbody class="bg-card">
158
+ <tbody class="svadmin-u-cd0ad9a56558">
159
159
  {#if resources.length === 0}
160
160
  <tr>
161
- <td colspan={actions.length + 1} class="py-10 text-center text-muted-foreground">{i18n.t('permissions.noResources') || 'No resources available'}</td>
161
+ <td colspan={actions.length + 1} class="svadmin-u-1100bef66e60 svadmin-u-ca6bf63030aa svadmin-u-bfa603190748">{i18n.t('permissions.noResources') || 'No resources available'}</td>
162
162
  </tr>
163
163
  {/if}
164
164
  {#each resources as resource, i (i)}
165
165
  <!-- Section Grouping Header -->
166
166
  {#if resource.section && (i === 0 || resource.section !== resources[i-1].section)}
167
- <tr class="bg-primary/5">
168
- <td colspan="{actions.length + 1}" class="px-4 py-2 text-xs font-bold text-primary">{resource.section}</td>
167
+ <tr class="svadmin-u-989c466fdbe7">
168
+ <td colspan="{actions.length + 1}" class="svadmin-u-f0faeb26d656 svadmin-u-03b4dd7f172b svadmin-u-359090c2d529 svadmin-u-69450ef1487e svadmin-u-20aaf08a7ed1">{resource.section}</td>
169
169
  </tr>
170
170
  {/if}
171
171
 
172
- <tr class="even:bg-muted/30 hover:bg-muted/50 transition-colors">
173
- <td class="whitespace-nowrap py-3 pl-4 pr-3 text-sm">
174
- <div class="font-medium text-foreground">{resource.name}</div>
175
- <div class="text-xs text-muted-foreground font-mono">{resource.code}</div>
172
+ <tr class="svadmin-u-a951c7ab6715 svadmin-u-39f703dbe296 svadmin-u-ceb69a6b0e5f">
173
+ <td class="svadmin-u-e82ae8be04aa svadmin-u-1b2d54a3fd12 svadmin-u-fdb4af3ae0bc svadmin-u-fafb9e0bfb6a svadmin-u-fc7473ca09eb">
174
+ <div class="svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{resource.name}</div>
175
+ <div class="svadmin-u-359090c2d529 svadmin-u-bfa603190748 svadmin-u-0e65706bcccd">{resource.code}</div>
176
176
  </td>
177
177
 
178
178
  <!-- Action Checkboxes -->
179
179
  {#each actions as action, _i (_i)}
180
180
  {@const granted = selectedRole ? isGranted(selectedRole, resource.code, action.code) : false}
181
- <td class="whitespace-nowrap px-3 py-3 text-center">
182
- <div class="flex items-center justify-center">
181
+ <td class="svadmin-u-e82ae8be04aa svadmin-u-0e17f2bd9074 svadmin-u-1b2d54a3fd12 svadmin-u-ca6bf63030aa">
182
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227">
183
183
  <button
184
184
  disabled={loading || !selectedRole}
185
185
  aria-label="Toggle {action.name}"
186
186
  onclick={() => onToggle(selectedRole as string, resource.code, action.code, !granted)}
187
- class="w-6 h-6 rounded border flex items-center justify-center transition-all focus:outline-none focus:ring-2 focus:ring-primary/50 {granted ? 'bg-primary border-primary text-primary-foreground' : 'border-input bg-background hover:bg-accent'} {loading || !selectedRole ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}"
187
+ class="svadmin-u-7ec10f86d9b1 svadmin-u-f6fe902450dc svadmin-u-07389a777c1f svadmin-u-ca6bcd4b6f3f svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-0fe7d7d814d0 svadmin-u-55d048ebfb1c svadmin-u-608dd26cd5ba svadmin-u-094cedcfedfd {granted ? 'svadmin-u-75b1bec3ea0e svadmin-u-6cbc84dd9e1a svadmin-u-30ca335ae9c2' : 'svadmin-u-e5795dad4d22 svadmin-u-e6f9e383a762 svadmin-u-0557b88819cd'} {loading || !selectedRole ? 'svadmin-u-0b8c506a0596 svadmin-u-29b733e4c162' : 'svadmin-u-34516836730d'}"
188
188
  >
189
- <svg class="w-3.5 h-3.5 {granted ? 'block' : 'hidden'}" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="3">
189
+ <svg class="svadmin-u-bf600f8e029c svadmin-u-7fc7f732bf7e {granted ? 'svadmin-u-0214b4b355d1' : 'svadmin-u-99d72c7fc3e2'}" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="3">
190
190
  <path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" />
191
191
  </svg>
192
192
  </button>
@@ -89,50 +89,50 @@
89
89
  );
90
90
  </script>
91
91
 
92
- <div class={cn('rounded-xl border border-border bg-card p-4 shadow-xs text-xs space-y-3', className)}>
93
- <div class="flex items-center justify-between gap-2 pb-2 border-b border-border/60">
94
- <div class="font-semibold text-foreground">
95
- Pivot Analysis <span class="text-muted-foreground font-normal">({rowLabel} × {columnLabel})</span>
92
+ <div class={cn('svadmin-u-a217b4eaa918 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb svadmin-u-cef5b893cf23 svadmin-u-359090c2d529 svadmin-u-6ed543e2fbbb', className)}>
93
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4 svadmin-u-f4cc511ff0c1 svadmin-u-65fdbade2025 svadmin-u-05faf5c801ff">
94
+ <div class="svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">
95
+ Pivot Analysis <span class="svadmin-u-bfa603190748 svadmin-u-8ecebc9f80e6">({rowLabel} × {columnLabel})</span>
96
96
  </div>
97
- <div class="text-muted-foreground">
98
- Aggregator: <strong class="text-primary uppercase">{aggregator}</strong> ({valueLabel})
97
+ <div class="svadmin-u-bfa603190748">
98
+ Aggregator: <strong class="svadmin-u-20aaf08a7ed1 uppercase">{aggregator}</strong> ({valueLabel})
99
99
  </div>
100
100
  </div>
101
101
 
102
- <div class="overflow-x-auto rounded-lg border border-border/60">
103
- <table class="w-full text-right border-collapse">
104
- <thead class="bg-muted/40 font-semibold text-muted-foreground border-b border-border/60">
102
+ <div class="svadmin-u-1384f66f41d0 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-05faf5c801ff">
103
+ <table class="svadmin-u-6da6a3c3f741 svadmin-u-308fc069e46e svadmin-u-4583f90cd9bd">
104
+ <thead class="svadmin-u-b00f43c30c2b svadmin-u-e83a7042bc91 svadmin-u-bfa603190748 svadmin-u-65fdbade2025 svadmin-u-05faf5c801ff">
105
105
  <tr>
106
- <th class="px-3 py-2.5 text-left bg-muted/60">{rowLabel} \ {columnLabel}</th>
106
+ <th class="svadmin-u-0e17f2bd9074 svadmin-u-e7ee55ac7ffe svadmin-u-2eba0d65d059 svadmin-u-706701550477">{rowLabel} \ {columnLabel}</th>
107
107
  {#each distinctColValues as col (col)}
108
- <th class="px-3 py-2.5 font-semibold text-foreground">{col}</th>
108
+ <th class="svadmin-u-0e17f2bd9074 svadmin-u-e7ee55ac7ffe svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{col}</th>
109
109
  {/each}
110
- <th class="px-3 py-2.5 bg-muted/60 font-semibold text-foreground">Total</th>
110
+ <th class="svadmin-u-0e17f2bd9074 svadmin-u-e7ee55ac7ffe svadmin-u-706701550477 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">Total</th>
111
111
  </tr>
112
112
  </thead>
113
- <tbody class="divide-y divide-border/40 font-mono">
113
+ <tbody class="svadmin-u-fa6acbf81d74 svadmin-u-08b5607c7258 svadmin-u-0e65706bcccd">
114
114
  {#each distinctRowValues as row (row)}
115
- <tr class="hover:bg-muted/20 transition-colors">
116
- <td class="px-3 py-2 text-left font-medium text-foreground bg-muted/20 font-sans">{row}</td>
115
+ <tr class="svadmin-u-c4b5eaba40e3 svadmin-u-ceb69a6b0e5f">
116
+ <td class="svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-2eba0d65d059 svadmin-u-2689f3958069 svadmin-u-d4108abe6359 svadmin-u-967d113a1451 svadmin-u-79bf1259388b">{row}</td>
117
117
  {#each distinctColValues as col (col)}
118
118
  {@const val = getCellValue(row, col)}
119
- <td class={cn('px-3 py-2', val === 0 ? 'text-muted-foreground/40' : 'text-foreground')}>
119
+ <td class={cn('svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b', val === 0 ? 'svadmin-u-52183a1cca53' : 'svadmin-u-d4108abe6359')}>
120
120
  {formatValue(val)}
121
121
  </td>
122
122
  {/each}
123
- <td class="px-3 py-2 font-semibold text-foreground bg-muted/20">
123
+ <td class="svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359 svadmin-u-967d113a1451">
124
124
  {formatValue(getRowTotal(row))}
125
125
  </td>
126
126
  </tr>
127
127
  {/each}
128
128
  </tbody>
129
- <tfoot class="bg-muted/60 font-semibold font-mono border-t-2 border-border text-foreground">
129
+ <tfoot class="svadmin-u-706701550477 svadmin-u-e83a7042bc91 svadmin-u-0e65706bcccd svadmin-u-bee68af349c9 svadmin-u-18049387f0af svadmin-u-d4108abe6359">
130
130
  <tr>
131
- <td class="px-3 py-2.5 text-left font-sans">Grand Total</td>
131
+ <td class="svadmin-u-0e17f2bd9074 svadmin-u-e7ee55ac7ffe svadmin-u-2eba0d65d059 svadmin-u-79bf1259388b">Grand Total</td>
132
132
  {#each distinctColValues as col (col)}
133
- <td class="px-3 py-2.5">{formatValue(getColTotal(col))}</td>
133
+ <td class="svadmin-u-0e17f2bd9074 svadmin-u-e7ee55ac7ffe">{formatValue(getColTotal(col))}</td>
134
134
  {/each}
135
- <td class="px-3 py-2.5 text-primary">{formatValue(grandTotal)}</td>
135
+ <td class="svadmin-u-0e17f2bd9074 svadmin-u-e7ee55ac7ffe svadmin-u-20aaf08a7ed1">{formatValue(grandTotal)}</td>
136
136
  </tr>
137
137
  </tfoot>
138
138
  </table>
@@ -38,31 +38,31 @@
38
38
  function getStatusIndicator(status?: PresenceUser['status']) {
39
39
  switch (status) {
40
40
  case 'editing':
41
- return 'bg-warning ring-warning/30 animate-pulse';
41
+ return 'svadmin-u-a486cacb3a15 svadmin-u-8e7bba3352f0 svadmin-u-d59b97947485';
42
42
  case 'idle':
43
- return 'bg-muted-foreground ring-muted-foreground/30';
43
+ return 'svadmin-u-43ed7af3fc8a svadmin-u-ffe6499f370c';
44
44
  default:
45
- return 'bg-success ring-success/30';
45
+ return 'svadmin-u-3355648fe22b svadmin-u-0a0bdc193a65';
46
46
  }
47
47
  }
48
48
  </script>
49
49
 
50
- <div class={cn('inline-flex items-center gap-2 text-xs select-none', className)}>
50
+ <div class={cn('svadmin-u-52083e7da442 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4 svadmin-u-359090c2d529 svadmin-u-7f6912283f11', className)}>
51
51
  {#if label}
52
- <span class="text-muted-foreground flex items-center gap-1">
53
- <Users class="h-3.5 w-3.5" />
52
+ <span class="svadmin-u-bfa603190748 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-44ee8ba0a421">
53
+ <Users class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
54
54
  {label}:
55
55
  </span>
56
56
  {/if}
57
57
 
58
- <div class="flex items-center -space-x-2 overflow-hidden py-1">
58
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-9f6ccfe3205a svadmin-u-2cd02d11d1af svadmin-u-660d2effb880">
59
59
  {#each visibleUsers as user (user.id)}
60
60
  <div
61
- class="relative inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full border-2 border-background bg-muted text-[11px] font-semibold text-foreground shadow-xs transition-transform hover:z-10 hover:scale-110"
61
+ class="svadmin-u-d89972fe17d6 svadmin-u-52083e7da442 svadmin-u-d0a52b312f7d svadmin-u-cbbf90f9a828 svadmin-u-012fbd121f37 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-ac204c108886 svadmin-u-65935df577ba svadmin-u-4c1e8d12f3db svadmin-u-2ef11f1cb219 svadmin-u-d058ca6de60f svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359 svadmin-u-cef5b893cf23 svadmin-u-eadef238231e svadmin-u-d5254d26307d svadmin-u-7abf679f0725"
62
62
  title="{user.name} ({user.status ?? 'online'})"
63
63
  >
64
64
  {#if user.avatar}
65
- <img src={user.avatar} alt={user.name} class="h-full w-full rounded-full object-cover" />
65
+ <img src={user.avatar} alt={user.name} class="svadmin-u-668b21aa5409 svadmin-u-6da6a3c3f741 svadmin-u-ac204c108886 svadmin-u-7d85d0c21a32" />
66
66
  {:else}
67
67
  <span>{getInitials(user.name)}</span>
68
68
  {/if}
@@ -70,7 +70,7 @@
70
70
  <!-- Status Dot Indicator -->
71
71
  <span
72
72
  class={cn(
73
- 'absolute bottom-0 right-0 h-2 w-2 rounded-full ring-2 ring-background',
73
+ 'svadmin-u-da4dbfbc4fdc svadmin-u-189f036c335c svadmin-u-d8cdcad240d1 svadmin-u-2f2a842e50fa svadmin-u-940924b6e2d9 svadmin-u-ac204c108886 svadmin-u-16b1efa5875e svadmin-u-85399de17097',
74
74
  getStatusIndicator(user.status)
75
75
  )}
76
76
  ></span>
@@ -79,7 +79,7 @@
79
79
 
80
80
  {#if hiddenCount > 0}
81
81
  <div
82
- class="relative inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full border-2 border-background bg-secondary text-[10px] font-medium text-secondary-foreground shadow-xs"
82
+ class="svadmin-u-d89972fe17d6 svadmin-u-52083e7da442 svadmin-u-d0a52b312f7d svadmin-u-cbbf90f9a828 svadmin-u-012fbd121f37 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-ac204c108886 svadmin-u-65935df577ba svadmin-u-4c1e8d12f3db svadmin-u-ba939ea82d8b svadmin-u-1dc571a3609f svadmin-u-2689f3958069 svadmin-u-5064267f78e3 svadmin-u-cef5b893cf23"
83
83
  title="{hiddenCount} more users"
84
84
  >
85
85
  +{hiddenCount}
@@ -54,95 +54,95 @@
54
54
  }
55
55
  </script>
56
56
 
57
- <div class={cn('space-y-4 text-xs', className)}>
57
+ <div class={cn('svadmin-u-3e7ce58d64fa svadmin-u-359090c2d529', className)}>
58
58
  <!-- Print Trigger Bar (Hidden during actual print) -->
59
- <div class="flex items-center justify-between p-3 rounded-xl border border-border bg-card shadow-xs print:hidden">
60
- <div class="text-muted-foreground">
61
- Document Ready: <strong class="text-foreground">{billNumber}</strong>
59
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-eb6e8b881acd svadmin-u-a217b4eaa918 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-cef5b893cf23 svadmin-u-38a2a10339a0">
60
+ <div class="svadmin-u-bfa603190748">
61
+ Document Ready: <strong class="svadmin-u-d4108abe6359">{billNumber}</strong>
62
62
  </div>
63
- <Button size="sm" class="h-8 text-xs gap-1.5" onclick={handlePrint}>
64
- <Printer class="h-3.5 w-3.5" />
63
+ <Button size="sm" class="svadmin-u-ed8a5df7b2fb svadmin-u-359090c2d529 svadmin-u-58284b4ea568" onclick={handlePrint}>
64
+ <Printer class="svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
65
65
  Print Document
66
66
  </Button>
67
67
  </div>
68
68
 
69
69
  <!-- Printable A4 Paper Container -->
70
- <div class="rounded-xl border border-border bg-card p-8 shadow-xs max-w-3xl mx-auto space-y-6 print:border-none print:shadow-none print:p-0 print:m-0">
70
+ <div class="svadmin-u-a217b4eaa918 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-845f53365c8d svadmin-u-cef5b893cf23 svadmin-u-fa3f7111e53b svadmin-u-0e12dc7de920 svadmin-u-b3542e058833 svadmin-u-952dfef04298 svadmin-u-a9436de0cd55 svadmin-u-d0dfe7e6acb2 svadmin-u-3d50bc090e79">
71
71
  <!-- Header -->
72
- <div class="flex items-start justify-between border-b-2 border-primary/40 pb-4">
72
+ <div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-65ac0c49a5d5 svadmin-u-f5583b2907be svadmin-u-9fcd8a13827e">
73
73
  <div>
74
- <h2 class="text-xl font-bold text-foreground tracking-tight">{title}</h2>
75
- <p class="text-muted-foreground font-mono mt-0.5">No: {billNumber}</p>
74
+ <h2 class="svadmin-u-d5c9b0001e7e svadmin-u-69450ef1487e svadmin-u-d4108abe6359 svadmin-u-1d7f28b046ad">{title}</h2>
75
+ <p class="svadmin-u-bfa603190748 svadmin-u-0e65706bcccd svadmin-u-15e1b1f444fe">No: {billNumber}</p>
76
76
  </div>
77
- <div class="text-right space-y-0.5">
78
- <h3 class="font-semibold text-foreground">{companyName}</h3>
77
+ <div class="svadmin-u-308fc069e46e svadmin-u-e2eedc5718f0">
78
+ <h3 class="svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{companyName}</h3>
79
79
  {#if companyAddress}
80
- <p class="text-muted-foreground text-[11px]">{companyAddress}</p>
80
+ <p class="svadmin-u-bfa603190748 svadmin-u-d058ca6de60f">{companyAddress}</p>
81
81
  {/if}
82
- <p class="text-muted-foreground text-[11px]">Date: {date}</p>
82
+ <p class="svadmin-u-bfa603190748 svadmin-u-d058ca6de60f">Date: {date}</p>
83
83
  </div>
84
84
  </div>
85
85
 
86
86
  <!-- Customer Info -->
87
- <div class="p-3 rounded-lg bg-muted/20 border border-border/40 space-y-1">
88
- <span class="text-muted-foreground font-semibold uppercase text-[10px] block">Bill To</span>
89
- <div class="font-semibold text-foreground">{customerName}</div>
87
+ <div class="svadmin-u-eb6e8b881acd svadmin-u-5f22e64f2282 svadmin-u-967d113a1451 svadmin-u-ca6bcd4b6f3f svadmin-u-6ee2d41e2d2d svadmin-u-da7c36cd8867">
88
+ <span class="svadmin-u-bfa603190748 svadmin-u-e83a7042bc91 uppercase svadmin-u-1dc571a3609f svadmin-u-0214b4b355d1">Bill To</span>
89
+ <div class="svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{customerName}</div>
90
90
  {#if customerAddress}
91
- <div class="text-muted-foreground text-[11px]">{customerAddress}</div>
91
+ <div class="svadmin-u-bfa603190748 svadmin-u-d058ca6de60f">{customerAddress}</div>
92
92
  {/if}
93
93
  </div>
94
94
 
95
95
  <!-- Items Table -->
96
- <table class="w-full text-left border-collapse border border-border/60">
97
- <thead class="bg-muted/40 font-semibold text-foreground border-b border-border/60">
96
+ <table class="svadmin-u-6da6a3c3f741 svadmin-u-2eba0d65d059 svadmin-u-4583f90cd9bd svadmin-u-ca6bcd4b6f3f svadmin-u-05faf5c801ff">
97
+ <thead class="svadmin-u-b00f43c30c2b svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359 svadmin-u-65fdbade2025 svadmin-u-05faf5c801ff">
98
98
  <tr>
99
- <th class="p-2 border-r border-border/40 w-12 text-center">#</th>
100
- <th class="p-2 border-r border-border/40">Item Description</th>
101
- <th class="p-2 border-r border-border/40 text-center w-20">Qty</th>
102
- <th class="p-2 border-r border-border/40 text-right w-24">Unit Price</th>
103
- <th class="p-2 text-right w-28">Amount</th>
99
+ <th class="svadmin-u-7660b450905a svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-e7e371071bc5 svadmin-u-ca6bf63030aa">#</th>
100
+ <th class="svadmin-u-7660b450905a svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d">Item Description</th>
101
+ <th class="svadmin-u-7660b450905a svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-ca6bf63030aa svadmin-u-ed831a4dff32">Qty</th>
102
+ <th class="svadmin-u-7660b450905a svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-308fc069e46e svadmin-u-69da7e4ff95d">Unit Price</th>
103
+ <th class="svadmin-u-7660b450905a svadmin-u-308fc069e46e svadmin-u-b67ee2eeca37">Amount</th>
104
104
  </tr>
105
105
  </thead>
106
- <tbody class="divide-y divide-border/40">
106
+ <tbody class="svadmin-u-fa6acbf81d74 svadmin-u-08b5607c7258">
107
107
  {#each items as item, index (index)}
108
108
  {@const rowTotal = item.total ?? item.quantity * item.unitPrice}
109
109
  <tr>
110
- <td class="p-2 border-r border-border/40 text-center text-muted-foreground">{index + 1}</td>
111
- <td class="p-2 border-r border-border/40 font-medium text-foreground">
110
+ <td class="svadmin-u-7660b450905a svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-ca6bf63030aa svadmin-u-bfa603190748">{index + 1}</td>
111
+ <td class="svadmin-u-7660b450905a svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-2689f3958069 svadmin-u-d4108abe6359">
112
112
  {item.name}
113
113
  {#if item.spec}
114
- <span class="block text-[11px] text-muted-foreground">{item.spec}</span>
114
+ <span class="svadmin-u-0214b4b355d1 svadmin-u-d058ca6de60f svadmin-u-bfa603190748">{item.spec}</span>
115
115
  {/if}
116
116
  </td>
117
- <td class="p-2 border-r border-border/40 text-center tabular-nums">{item.quantity}</td>
118
- <td class="p-2 border-r border-border/40 text-right tabular-nums">¥{item.unitPrice.toFixed(2)}</td>
119
- <td class="p-2 text-right tabular-nums font-semibold text-foreground">¥{rowTotal.toFixed(2)}</td>
117
+ <td class="svadmin-u-7660b450905a svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-ca6bf63030aa svadmin-u-3032cae0badb">{item.quantity}</td>
118
+ <td class="svadmin-u-7660b450905a svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d svadmin-u-308fc069e46e svadmin-u-3032cae0badb">¥{item.unitPrice.toFixed(2)}</td>
119
+ <td class="svadmin-u-7660b450905a svadmin-u-308fc069e46e svadmin-u-3032cae0badb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">¥{rowTotal.toFixed(2)}</td>
120
120
  </tr>
121
121
  {/each}
122
122
  </tbody>
123
- <tfoot class="border-t-2 border-border font-semibold text-foreground bg-muted/20">
123
+ <tfoot class="svadmin-u-bee68af349c9 svadmin-u-18049387f0af svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359 svadmin-u-967d113a1451">
124
124
  <tr>
125
- <td colspan="4" class="p-2.5 text-right border-r border-border/40">Total Summary:</td>
126
- <td class="p-2.5 text-right text-sm tabular-nums text-primary font-bold">¥{subtotal.toFixed(2)}</td>
125
+ <td colspan="4" class="svadmin-u-9fe52d5d506c svadmin-u-308fc069e46e svadmin-u-5ceb636bd9f3 svadmin-u-6ee2d41e2d2d">Total Summary:</td>
126
+ <td class="svadmin-u-9fe52d5d506c svadmin-u-308fc069e46e svadmin-u-fc7473ca09eb svadmin-u-3032cae0badb svadmin-u-20aaf08a7ed1 svadmin-u-69450ef1487e">¥{subtotal.toFixed(2)}</td>
127
127
  </tr>
128
128
  </tfoot>
129
129
  </table>
130
130
 
131
131
  <!-- Footer Notes & Signatures -->
132
- <div class="flex items-end justify-between pt-4 border-t border-border/40 text-xs">
133
- <div class="space-y-1 max-w-sm">
132
+ <div class="svadmin-u-60fbb7713999 svadmin-u-6f27f4f79e55 svadmin-u-8ef2268efbbc svadmin-u-173fa8f06789 svadmin-u-b950dda299d3 svadmin-u-6ee2d41e2d2d svadmin-u-359090c2d529">
133
+ <div class="svadmin-u-da7c36cd8867 svadmin-u-2472e9b81a97">
134
134
  {#if notes}
135
- <span class="font-semibold text-muted-foreground block text-[11px]">Notes:</span>
136
- <p class="text-muted-foreground">{notes}</p>
135
+ <span class="svadmin-u-e83a7042bc91 svadmin-u-bfa603190748 svadmin-u-0214b4b355d1 svadmin-u-d058ca6de60f">Notes:</span>
136
+ <p class="svadmin-u-bfa603190748">{notes}</p>
137
137
  {/if}
138
138
  </div>
139
139
 
140
- <div class="text-right space-y-4">
140
+ <div class="svadmin-u-308fc069e46e svadmin-u-3e7ce58d64fa">
141
141
  {#if issuer}
142
- <p class="text-muted-foreground">Issued By: <strong class="text-foreground">{issuer}</strong></p>
142
+ <p class="svadmin-u-bfa603190748">Issued By: <strong class="svadmin-u-d4108abe6359">{issuer}</strong></p>
143
143
  {/if}
144
- <div class="w-40 border-b border-foreground/40 pt-6"></div>
145
- <p class="text-[10px] text-muted-foreground text-center">Authorized Signature & Stamp</p>
144
+ <div class="svadmin-u-84789e8a20cd svadmin-u-65fdbade2025 svadmin-u-a4fe7d4d1e07 svadmin-u-30c1d058f0db"></div>
145
+ <p class="svadmin-u-1dc571a3609f svadmin-u-bfa603190748 svadmin-u-ca6bf63030aa">Authorized Signature & Stamp</p>
146
146
  </div>
147
147
  </div>
148
148
  </div>