@svadmin/lite 0.16.11 → 0.22.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 (263) hide show
  1. package/README.md +71 -2
  2. package/dist/components/LiteActivityFeed.svelte +31 -9
  3. package/dist/components/LiteActivityFeed.svelte.d.ts +6 -0
  4. package/dist/components/LiteAffix.svelte +29 -0
  5. package/dist/components/LiteAffix.svelte.d.ts +13 -0
  6. package/dist/components/LiteAnchor.svelte +38 -0
  7. package/dist/components/LiteAnchor.svelte.d.ts +14 -0
  8. package/dist/components/LiteApprovalActionCard.svelte +8 -5
  9. package/dist/components/LiteApprovalActionCard.svelte.d.ts +2 -0
  10. package/dist/components/LiteAuditLog.svelte +9 -9
  11. package/dist/components/LiteAutoComplete.svelte +41 -0
  12. package/dist/components/LiteAutoComplete.svelte.d.ts +13 -0
  13. package/dist/components/LiteBackTop.svelte +16 -0
  14. package/dist/components/LiteBackTop.svelte.d.ts +8 -0
  15. package/dist/components/LiteBreadcrumbs.svelte +4 -1
  16. package/dist/components/LiteBreadcrumbs.svelte.d.ts +2 -0
  17. package/dist/components/LiteCalendar.svelte +124 -0
  18. package/dist/components/LiteCalendar.svelte.d.ts +20 -0
  19. package/dist/components/LiteCanvasAnnotation.svelte +13 -13
  20. package/dist/components/LiteCarousel.svelte +72 -0
  21. package/dist/components/LiteCarousel.svelte.d.ts +14 -0
  22. package/dist/components/LiteChatDialog.svelte +8 -8
  23. package/dist/components/LiteCollapse.svelte +49 -0
  24. package/dist/components/LiteCollapse.svelte.d.ts +15 -0
  25. package/dist/components/LiteColumnHeaderFilter.svelte +4 -1
  26. package/dist/components/LiteColumnHeaderFilter.svelte.d.ts +2 -0
  27. package/dist/components/LiteColumnSettings.svelte +7 -4
  28. package/dist/components/LiteColumnSettings.svelte.d.ts +2 -0
  29. package/dist/components/LiteCommentThread.svelte +113 -0
  30. package/dist/components/LiteCommentThread.svelte.d.ts +26 -0
  31. package/dist/components/LiteConfirmDialog.svelte +2 -2
  32. package/dist/components/LiteCountdown.svelte +49 -0
  33. package/dist/components/LiteCountdown.svelte.d.ts +10 -0
  34. package/dist/components/LiteDecisionTable.svelte +14 -14
  35. package/dist/components/LiteDetailDrawer.svelte +45 -0
  36. package/dist/components/LiteDetailDrawer.svelte.d.ts +14 -0
  37. package/dist/components/LiteDraggableRowTable.svelte +5 -2
  38. package/dist/components/LiteDraggableRowTable.svelte.d.ts +2 -0
  39. package/dist/components/LiteDrawerForm.svelte +11 -8
  40. package/dist/components/LiteDrawerForm.svelte.d.ts +2 -0
  41. package/dist/components/LiteDynamicFormList.svelte +5 -5
  42. package/dist/components/LiteEditableTable.svelte +5 -2
  43. package/dist/components/LiteEditableTable.svelte.d.ts +2 -0
  44. package/dist/components/LiteEmptyState.svelte +11 -4
  45. package/dist/components/LiteEmptyState.svelte.d.ts +3 -0
  46. package/dist/components/LiteFilterBuilder.svelte +8 -5
  47. package/dist/components/LiteFilterBuilder.svelte.d.ts +2 -0
  48. package/dist/components/LiteFloatButton.svelte +54 -0
  49. package/dist/components/LiteFloatButton.svelte.d.ts +15 -0
  50. package/dist/components/LiteGanttChart.svelte +20 -20
  51. package/dist/components/LiteGrid.svelte +34 -0
  52. package/dist/components/LiteGrid.svelte.d.ts +11 -0
  53. package/dist/components/LiteImage.svelte +54 -0
  54. package/dist/components/LiteImage.svelte.d.ts +14 -0
  55. package/dist/components/LiteImageCropper.svelte +7 -4
  56. package/dist/components/LiteImageCropper.svelte.d.ts +2 -0
  57. package/dist/components/LiteImagePreview.svelte +36 -0
  58. package/dist/components/LiteImagePreview.svelte.d.ts +13 -0
  59. package/dist/components/LiteImportWizard.svelte +7 -7
  60. package/dist/components/LiteItemList.svelte +50 -0
  61. package/dist/components/LiteItemList.svelte.d.ts +15 -0
  62. package/dist/components/LiteJsonSchemaForm.svelte +10 -7
  63. package/dist/components/LiteJsonSchemaForm.svelte.d.ts +2 -0
  64. package/dist/components/LiteKanbanBoard.svelte +19 -19
  65. package/dist/components/LiteLayout.svelte +18 -6
  66. package/dist/components/LiteLayout.svelte.d.ts +8 -0
  67. package/dist/components/LiteLink.svelte +32 -0
  68. package/dist/components/LiteLink.svelte.d.ts +11 -0
  69. package/dist/components/LiteLogin.svelte +9 -2
  70. package/dist/components/LiteLogin.svelte.d.ts +2 -0
  71. package/dist/components/LiteMasterDetailView.svelte +13 -10
  72. package/dist/components/LiteMasterDetailView.svelte.d.ts +2 -0
  73. package/dist/components/LiteMediaLibraryModal.svelte +8 -5
  74. package/dist/components/LiteMediaLibraryModal.svelte.d.ts +2 -0
  75. package/dist/components/LiteMediaThumbnail.svelte +3 -3
  76. package/dist/components/LiteMentionsInput.svelte +9 -9
  77. package/dist/components/LiteMenu.svelte +22 -0
  78. package/dist/components/LiteMenu.svelte.d.ts +12 -0
  79. package/dist/components/LiteMenuList.svelte +55 -0
  80. package/dist/components/LiteMenuList.svelte.d.ts +17 -0
  81. package/dist/components/LiteModalForm.svelte +9 -6
  82. package/dist/components/LiteModalForm.svelte.d.ts +2 -0
  83. package/dist/components/LiteMultiTabKeepAlive.svelte +6 -6
  84. package/dist/components/LiteNotificationCenter.svelte +85 -0
  85. package/dist/components/LiteNotificationCenter.svelte.d.ts +22 -0
  86. package/dist/components/LiteOfflineSyncBanner.svelte +6 -6
  87. package/dist/components/LiteOtpInput.svelte +50 -0
  88. package/dist/components/LiteOtpInput.svelte.d.ts +15 -0
  89. package/dist/components/LitePageHeader.svelte +34 -0
  90. package/dist/components/LitePageHeader.svelte.d.ts +13 -0
  91. package/dist/components/LitePagination.svelte +10 -2
  92. package/dist/components/LitePagination.svelte.d.ts +2 -0
  93. package/dist/components/LitePdfDocumentViewer.svelte +14 -14
  94. package/dist/components/LitePermissionMatrix.svelte +8 -8
  95. package/dist/components/LitePivotTable.svelte +11 -11
  96. package/dist/components/LitePopconfirm.svelte +49 -0
  97. package/dist/components/LitePopconfirm.svelte.d.ts +14 -0
  98. package/dist/components/LitePresenceAvatarGroup.svelte +8 -5
  99. package/dist/components/LitePresenceAvatarGroup.svelte.d.ts +2 -0
  100. package/dist/components/LitePrintableBill.svelte +12 -9
  101. package/dist/components/LitePrintableBill.svelte.d.ts +2 -0
  102. package/dist/components/LiteProgress.svelte +46 -0
  103. package/dist/components/LiteProgress.svelte.d.ts +12 -0
  104. package/dist/components/LiteQRCode.svelte +62 -0
  105. package/dist/components/LiteQRCode.svelte.d.ts +14 -0
  106. package/dist/components/LiteResizeBox.svelte +34 -0
  107. package/dist/components/LiteResizeBox.svelte.d.ts +12 -0
  108. package/dist/components/LiteResult.svelte +52 -0
  109. package/dist/components/LiteResult.svelte.d.ts +14 -0
  110. package/dist/components/LiteRowActions.svelte +36 -0
  111. package/dist/components/LiteRowActions.svelte.d.ts +17 -0
  112. package/dist/components/LiteSensitiveDataMask.svelte +4 -1
  113. package/dist/components/LiteSensitiveDataMask.svelte.d.ts +2 -0
  114. package/dist/components/LiteShow.svelte +1 -1
  115. package/dist/components/LiteShowField.svelte +2 -2
  116. package/dist/components/LiteSignaturePad.svelte +9 -9
  117. package/dist/components/LiteSkeleton.svelte +100 -0
  118. package/dist/components/LiteSkeleton.svelte.d.ts +19 -0
  119. package/dist/components/LiteSpace.svelte +31 -0
  120. package/dist/components/LiteSpace.svelte.d.ts +12 -0
  121. package/dist/components/LiteSpin.svelte +27 -0
  122. package/dist/components/LiteSpin.svelte.d.ts +10 -0
  123. package/dist/components/LiteSplitPaneLayout.svelte +18 -6
  124. package/dist/components/LiteSplitPaneLayout.svelte.d.ts +8 -0
  125. package/dist/components/LiteSpreadsheetView.svelte +8 -8
  126. package/dist/components/LiteStatistic.svelte +63 -0
  127. package/dist/components/LiteStatistic.svelte.d.ts +15 -0
  128. package/dist/components/LiteStatsCard.svelte +5 -2
  129. package/dist/components/LiteStatsCard.svelte.d.ts +2 -0
  130. package/dist/components/LiteStatusBadge.svelte +33 -0
  131. package/dist/components/LiteStatusBadge.svelte.d.ts +12 -0
  132. package/dist/components/LiteStatusTabs.svelte +35 -0
  133. package/dist/components/LiteStatusTabs.svelte.d.ts +14 -0
  134. package/dist/components/LiteStepForm.svelte +14 -11
  135. package/dist/components/LiteStepForm.svelte.d.ts +2 -0
  136. package/dist/components/LiteSteps.svelte +64 -0
  137. package/dist/components/LiteSteps.svelte.d.ts +18 -0
  138. package/dist/components/LiteTable.svelte +5 -2
  139. package/dist/components/LiteTable.svelte.d.ts +2 -0
  140. package/dist/components/LiteTableSummary.svelte +8 -5
  141. package/dist/components/LiteTableSummary.svelte.d.ts +2 -0
  142. package/dist/components/LiteTabs.svelte +30 -20
  143. package/dist/components/LiteTabs.svelte.d.ts +11 -2
  144. package/dist/components/LiteTag.svelte +31 -0
  145. package/dist/components/LiteTag.svelte.d.ts +13 -0
  146. package/dist/components/LiteTimeline.svelte +48 -0
  147. package/dist/components/LiteTimeline.svelte.d.ts +17 -0
  148. package/dist/components/LiteTour.svelte +54 -0
  149. package/dist/components/LiteTour.svelte.d.ts +15 -0
  150. package/dist/components/LiteTransfer.svelte +9 -6
  151. package/dist/components/LiteTransfer.svelte.d.ts +2 -0
  152. package/dist/components/LiteTree.svelte +48 -0
  153. package/dist/components/LiteTree.svelte.d.ts +17 -0
  154. package/dist/components/LiteTreeTable.svelte +1 -1
  155. package/dist/components/LiteTwoFactorStepper.svelte +53 -0
  156. package/dist/components/LiteTwoFactorStepper.svelte.d.ts +16 -0
  157. package/dist/components/LiteVersionDiffViewer.svelte +16 -13
  158. package/dist/components/LiteVersionDiffViewer.svelte.d.ts +2 -0
  159. package/dist/components/LiteVideoPlayer.svelte +67 -0
  160. package/dist/components/LiteVideoPlayer.svelte.d.ts +22 -0
  161. package/dist/components/LiteVirtualTable.svelte +1 -1
  162. package/dist/components/advanced/LiteAutoSaveIndicator.svelte +42 -13
  163. package/dist/components/advanced/LiteAutoSaveIndicator.svelte.d.ts +10 -4
  164. package/dist/components/advanced/LiteDraggableHeader.svelte +2 -2
  165. package/dist/components/advanced/LiteDrawerForm.svelte +4 -1
  166. package/dist/components/advanced/LiteDrawerForm.svelte.d.ts +2 -0
  167. package/dist/components/advanced/LiteInlineEdit.svelte +1 -1
  168. package/dist/components/advanced/LiteModalForm.svelte +4 -1
  169. package/dist/components/advanced/LiteModalForm.svelte.d.ts +2 -0
  170. package/dist/components/advanced/LiteToast.svelte +3 -3
  171. package/dist/components/advanced/LiteUndoableNotification.svelte +1 -1
  172. package/dist/components/compatibility/LiteRealtimeStatus.svelte +41 -2
  173. package/dist/components/compatibility/LiteRealtimeStatus.svelte.d.ts +15 -0
  174. package/dist/components/fields/LiteBooleanField.svelte +4 -2
  175. package/dist/components/fields/LiteBooleanField.svelte.d.ts +2 -0
  176. package/dist/components/fields/LiteCascader.svelte +5 -2
  177. package/dist/components/fields/LiteCascader.svelte.d.ts +2 -0
  178. package/dist/components/fields/LiteDateField.svelte +39 -9
  179. package/dist/components/fields/LiteDateField.svelte.d.ts +2 -0
  180. package/dist/components/fields/LiteDateRangeField.svelte +1 -1
  181. package/dist/components/fields/LiteImageField.svelte +6 -2
  182. package/dist/components/fields/LiteImageField.svelte.d.ts +2 -0
  183. package/dist/components/fields/LiteJsonField.svelte +1 -1
  184. package/dist/components/fields/LiteMarkdownField.svelte +49 -3
  185. package/dist/components/fields/LiteMarkdownField.svelte.d.ts +5 -0
  186. package/dist/components/fields/LiteNumberField.svelte +5 -3
  187. package/dist/components/fields/LiteNumberField.svelte.d.ts +2 -0
  188. package/dist/components/fields/LiteRichTextField.svelte +49 -12
  189. package/dist/components/fields/LiteRichTextField.svelte.d.ts +3 -0
  190. package/dist/components/fields/LiteSelectField.svelte +5 -3
  191. package/dist/components/fields/LiteSelectField.svelte.d.ts +2 -0
  192. package/dist/components/fields/LiteTagField.svelte +38 -15
  193. package/dist/components/fields/LiteTagField.svelte.d.ts +2 -0
  194. package/dist/components/fields/LiteTextField.svelte +26 -5
  195. package/dist/components/fields/LiteTextField.svelte.d.ts +2 -0
  196. package/dist/components/fields/LiteTreeSelect.svelte +5 -2
  197. package/dist/components/fields/LiteTreeSelect.svelte.d.ts +2 -0
  198. package/dist/components/fields/LiteUrlField.svelte +5 -3
  199. package/dist/components/fields/LiteUrlField.svelte.d.ts +2 -0
  200. package/dist/components/layout/LiteAuthenticated.svelte +2 -2
  201. package/dist/components/layout/LiteCanAccess.svelte +1 -1
  202. package/dist/components/layout/LiteErrorComponent.svelte +4 -4
  203. package/dist/components/layout/LiteHeader.svelte +2 -2
  204. package/dist/components/layout/LiteSidebar.svelte +6 -3
  205. package/dist/components/layout/LiteSidebar.svelte.d.ts +2 -0
  206. package/dist/components/pages/LiteCreatePage.svelte +4 -1
  207. package/dist/components/pages/LiteCreatePage.svelte.d.ts +2 -0
  208. package/dist/components/pages/LiteEditPage.svelte +4 -1
  209. package/dist/components/pages/LiteEditPage.svelte.d.ts +2 -0
  210. package/dist/components/pages/LiteForgotPasswordPage.svelte +7 -7
  211. package/dist/components/pages/LiteListPage.svelte +6 -3
  212. package/dist/components/pages/LiteListPage.svelte.d.ts +2 -0
  213. package/dist/components/pages/LiteProfilePage.svelte +2 -2
  214. package/dist/components/pages/LiteRegisterPage.svelte +6 -6
  215. package/dist/components/pages/LiteShowPage.svelte +6 -3
  216. package/dist/components/pages/LiteShowPage.svelte.d.ts +2 -0
  217. package/dist/components/pages/LiteUpdatePasswordPage.svelte +4 -4
  218. package/dist/components/widgets/LiteAnomalyBadge.svelte +6 -3
  219. package/dist/components/widgets/LiteAnomalyBadge.svelte.d.ts +2 -0
  220. package/dist/components/widgets/LiteAreaChart.svelte +20 -0
  221. package/dist/components/widgets/LiteAreaChart.svelte.d.ts +10 -0
  222. package/dist/components/widgets/LiteBarChart.svelte +6 -6
  223. package/dist/components/widgets/LiteChartSvg.svelte +102 -0
  224. package/dist/components/widgets/LiteChartSvg.svelte.d.ts +10 -0
  225. package/dist/components/widgets/LiteChartTable.svelte +44 -0
  226. package/dist/components/widgets/LiteChartTable.svelte.d.ts +10 -0
  227. package/dist/components/widgets/LiteDonutChart.svelte +20 -0
  228. package/dist/components/widgets/LiteDonutChart.svelte.d.ts +10 -0
  229. package/dist/components/widgets/LiteFunnelChart.svelte +20 -0
  230. package/dist/components/widgets/LiteFunnelChart.svelte.d.ts +10 -0
  231. package/dist/components/widgets/LiteGaugeChart.svelte +20 -0
  232. package/dist/components/widgets/LiteGaugeChart.svelte.d.ts +10 -0
  233. package/dist/components/widgets/LiteHeatmapChart.svelte +20 -0
  234. package/dist/components/widgets/LiteHeatmapChart.svelte.d.ts +10 -0
  235. package/dist/components/widgets/LiteInsightCard.svelte +35 -13
  236. package/dist/components/widgets/LiteInsightCard.svelte.d.ts +7 -4
  237. package/dist/components/widgets/LiteLineChart.svelte +13 -10
  238. package/dist/components/widgets/LiteLineChart.svelte.d.ts +0 -5
  239. package/dist/components/widgets/LitePieChart.svelte +11 -9
  240. package/dist/components/widgets/LitePieChart.svelte.d.ts +0 -5
  241. package/dist/components/widgets/LiteRadarChart.svelte +20 -0
  242. package/dist/components/widgets/LiteRadarChart.svelte.d.ts +10 -0
  243. package/dist/components/widgets/LiteRoseChart.svelte +20 -0
  244. package/dist/components/widgets/LiteRoseChart.svelte.d.ts +10 -0
  245. package/dist/components/widgets/LiteScatterChart.svelte +20 -0
  246. package/dist/components/widgets/LiteScatterChart.svelte.d.ts +10 -0
  247. package/dist/components/widgets/LiteWaterfallChart.svelte +20 -0
  248. package/dist/components/widgets/LiteWaterfallChart.svelte.d.ts +10 -0
  249. package/dist/components/widgets/chart-geometry.d.ts +65 -0
  250. package/dist/components/widgets/chart-geometry.js +229 -0
  251. package/dist/components/widgets/index.d.ts +10 -0
  252. package/dist/components/widgets/index.js +10 -0
  253. package/dist/index.d.ts +40 -0
  254. package/dist/index.js +47 -0
  255. package/dist/lite-code-theme.css +139 -0
  256. package/dist/lite.css +234 -127
  257. package/dist/rich-content.d.ts +47 -0
  258. package/dist/rich-content.js +498 -0
  259. package/dist/schema-generator.js +3 -1
  260. package/dist/server-adapter.js +6 -11
  261. package/dist/value-normalization.d.ts +4 -0
  262. package/dist/value-normalization.js +13 -0
  263. package/package.json +18 -4
@@ -7,6 +7,8 @@
7
7
  idKey?: string;
8
8
  titleKey?: string;
9
9
  detailSnippet?: Snippet<[Record<string, unknown>]>;
10
+ /** Caller class merged with the built-in class list. */
11
+ class?: string;
10
12
  }
11
13
 
12
14
  let {
@@ -15,6 +17,7 @@
15
17
  idKey = 'id',
16
18
  titleKey = 'title',
17
19
  detailSnippet,
20
+ class: className = '',
18
21
  }: Props = $props();
19
22
 
20
23
  const activeItem = $derived(
@@ -22,7 +25,7 @@
22
25
  );
23
26
  </script>
24
27
 
25
- <div class="lite-master-detail-card">
28
+ <div class="lite-master-detail-card {className}">
26
29
  <!-- Left Master List -->
27
30
  <div class="lite-master-list">
28
31
  <div class="lite-master-header">
@@ -52,7 +55,7 @@
52
55
  <tbody>
53
56
  {#each Object.entries(activeItem) as [k, v] (k)}
54
57
  <tr>
55
- <th style="width: 30%; text-align: left; background: #f8fafc;">{k}</th>
58
+ <th style="width: 30%; text-align: left; background: #F7F8FA;">{k}</th>
56
59
  <td>{typeof v === 'object' ? JSON.stringify(v) : String(v ?? '—')}</td>
57
60
  </tr>
58
61
  {/each}
@@ -61,7 +64,7 @@
61
64
  </div>
62
65
  {/if}
63
66
  {:else}
64
- <div style="color: #94a3b8; padding: 24px; text-align: center;">
67
+ <div style="color: #86909C; padding: 24px; text-align: center;">
65
68
  Select an item to view details
66
69
  </div>
67
70
  {/if}
@@ -72,19 +75,19 @@
72
75
  .lite-master-detail-card {
73
76
  display: flex;
74
77
  background: #ffffff;
75
- border: 1px solid #cbd5e1;
78
+ border: 1px solid #E5E6EB;
76
79
  border-radius: 6px;
77
80
  margin-bottom: 16px;
78
81
  min-height: 320px;
79
82
  }
80
83
  .lite-master-list {
81
84
  flex: 0 0 240px;
82
- border-right: 1px solid #e2e8f0;
83
- background: #f8fafc;
85
+ border-right: 1px solid #E5E6EB;
86
+ background: #F7F8FA;
84
87
  }
85
88
  .lite-master-header {
86
89
  padding: 10px 12px;
87
- border-bottom: 1px solid #e2e8f0;
90
+ border-bottom: 1px solid #E5E6EB;
88
91
  font-size: 12px;
89
92
  }
90
93
  .lite-master-items {
@@ -93,16 +96,16 @@
93
96
  margin: 0;
94
97
  }
95
98
  .lite-master-item {
96
- border-bottom: 1px solid #f1f5f9;
99
+ border-bottom: 1px solid #F2F3F5;
97
100
  }
98
101
  .lite-master-item-active {
99
- background: #e0e7ff;
102
+ background: #E8F3FF;
100
103
  font-weight: bold;
101
104
  }
102
105
  .lite-master-link {
103
106
  display: block;
104
107
  padding: 8px 12px;
105
- color: #1e293b;
108
+ color: #1D2129;
106
109
  text-decoration: none;
107
110
  font-size: 12px;
108
111
  }
@@ -5,6 +5,8 @@ interface Props {
5
5
  idKey?: string;
6
6
  titleKey?: string;
7
7
  detailSnippet?: Snippet<[Record<string, unknown>]>;
8
+ /** Caller class merged with the built-in class list. */
9
+ class?: string;
8
10
  }
9
11
  declare const LiteMasterDetailView: import("svelte").Component<Props, {}, "">;
10
12
  type LiteMasterDetailView = ReturnType<typeof LiteMasterDetailView>;
@@ -16,6 +16,8 @@
16
16
  mediaItems?: LiteMediaItem[];
17
17
  action?: string;
18
18
  method?: 'get' | 'post' | 'dialog' | 'GET' | 'POST' | 'DIALOG' | null;
19
+ /** Caller class merged with the built-in class list. */
20
+ class?: string;
19
21
  }
20
22
 
21
23
  let {
@@ -24,10 +26,11 @@
24
26
  mediaItems = [],
25
27
  action = '',
26
28
  method = 'POST',
29
+ class: className = '',
27
30
  }: Props = $props();
28
31
  </script>
29
32
 
30
- <div class="lite-media-library-card">
33
+ <div class="lite-media-library-card {className}">
31
34
  <div class="lite-media-header">
32
35
  <strong>{title}</strong>
33
36
  </div>
@@ -71,7 +74,7 @@
71
74
  {/each}
72
75
  {#if mediaItems.length === 0}
73
76
  <tr>
74
- <td colspan="5" style="text-align: center; color: #94a3b8; padding: 24px;">No media files available</td>
77
+ <td colspan="5" style="text-align: center; color: #86909C; padding: 24px;">No media files available</td>
75
78
  </tr>
76
79
  {/if}
77
80
  </tbody>
@@ -88,21 +91,21 @@
88
91
  <style>
89
92
  .lite-media-library-card {
90
93
  background: #ffffff;
91
- border: 1px solid #cbd5e1;
94
+ border: 1px solid #E5E6EB;
92
95
  border-radius: 6px;
93
96
  padding: 16px;
94
97
  margin-bottom: 16px;
95
98
  }
96
99
  .lite-media-header {
97
100
  padding-bottom: 10px;
98
- border-bottom: 1px solid #e2e8f0;
101
+ border-bottom: 1px solid #E5E6EB;
99
102
  margin-bottom: 12px;
100
103
  font-size: 14px;
101
104
  }
102
105
  .lite-media-upload-row {
103
106
  margin-bottom: 12px;
104
107
  padding: 8px;
105
- background: #f8fafc;
108
+ background: #F7F8FA;
106
109
  border-radius: 4px;
107
110
  }
108
111
  .lite-media-footer {
@@ -11,6 +11,8 @@ interface Props {
11
11
  mediaItems?: LiteMediaItem[];
12
12
  action?: string;
13
13
  method?: 'get' | 'post' | 'dialog' | 'GET' | 'POST' | 'DIALOG' | null;
14
+ /** Caller class merged with the built-in class list. */
15
+ class?: string;
14
16
  }
15
17
  declare const LiteMediaLibraryModal: import("svelte").Component<Props, {}, "">;
16
18
  type LiteMediaLibraryModal = ReturnType<typeof LiteMediaLibraryModal>;
@@ -27,9 +27,9 @@
27
27
  {/if}
28
28
 
29
29
  <style>
30
- .lite-media-thumbnail { position: relative; display: inline-flex; max-width: 300px; align-items: center; justify-content: center; overflow: hidden; border: 1px solid #e2e8f0; border-radius: 6px; background: #f8fafc; }
30
+ .lite-media-thumbnail { position: relative; display: inline-flex; max-width: 300px; align-items: center; justify-content: center; overflow: hidden; border: 1px solid #E5E6EB; border-radius: 6px; background: #F7F8FA; }
31
31
  .lite-media-thumbnail img { display: block; width: auto; max-width: 100%; height: 100%; object-fit: contain; }
32
32
  .lite-media-hidden { visibility: hidden; }
33
- .lite-media-status { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 8px; color: #64748b; font-size: 12px; text-align: center; }
34
- .lite-media-empty { color: #64748b; font-size: 12px; }
33
+ .lite-media-status { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 8px; color: #4E5969; font-size: 12px; text-align: center; }
34
+ .lite-media-empty { color: #4E5969; font-size: 12px; }
35
35
  </style>
@@ -61,24 +61,24 @@
61
61
  .sv-lite-textarea {
62
62
  width: 100%;
63
63
  padding: 8px;
64
- border: 1px solid #cbd5e1;
64
+ border: 1px solid #E5E6EB;
65
65
  border-radius: 4px;
66
66
  font-size: 12px;
67
67
  font-family: inherit;
68
68
  box-sizing: border-box;
69
69
  background-color: #ffffff;
70
- color: #0f172a;
70
+ color: #1D2129;
71
71
  }
72
72
  .sv-lite-mentions-hints {
73
73
  margin-top: 6px;
74
74
  padding: 4px 6px;
75
- background-color: #f8fafc;
76
- border: 1px solid #e2e8f0;
75
+ background-color: #F7F8FA;
76
+ border: 1px solid #E5E6EB;
77
77
  border-radius: 4px;
78
78
  }
79
79
  .sv-lite-hints-title {
80
80
  font-weight: 600;
81
- color: #64748b;
81
+ color: #4E5969;
82
82
  margin-right: 6px;
83
83
  }
84
84
  .sv-lite-mention-badge {
@@ -86,13 +86,13 @@
86
86
  padding: 2px 6px;
87
87
  margin-right: 4px;
88
88
  margin-bottom: 2px;
89
- background-color: #e0e7ff;
90
- color: #4338ca;
89
+ background-color: #E8F3FF;
90
+ color: #0E42D2;
91
91
  border-radius: 3px;
92
92
  font-size: 11px;
93
93
  }
94
94
  .sv-lite-tag {
95
- background-color: #f1f5f9;
96
- color: #475569;
95
+ background-color: #F2F3F5;
96
+ color: #4E5969;
97
97
  }
98
98
  </style>
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ import LiteMenuList, { type MenuEntry } from './LiteMenuList.svelte';
3
+
4
+ interface Props {
5
+ items: MenuEntry[];
6
+ mode?: 'vertical' | 'horizontal';
7
+ selected?: string;
8
+ label?: string;
9
+ /** Caller class merged with the built-in class list. */
10
+ class?: string;
11
+ }
12
+
13
+ let { items, mode = 'vertical', selected, label = 'Menu', class: className = '' }: Props = $props();
14
+ </script>
15
+
16
+ <nav class="lite-menu {className}" data-mode={mode} aria-label={label}>
17
+ <LiteMenuList {items} {selected} {mode} />
18
+ </nav>
19
+
20
+ <style>
21
+ .lite-menu { border: 1px solid #E5E6EB; border-radius: 8px; background: #fff; }
22
+ </style>
@@ -0,0 +1,12 @@
1
+ import { type MenuEntry } from './LiteMenuList.svelte';
2
+ interface Props {
3
+ items: MenuEntry[];
4
+ mode?: 'vertical' | 'horizontal';
5
+ selected?: string;
6
+ label?: string;
7
+ /** Caller class merged with the built-in class list. */
8
+ class?: string;
9
+ }
10
+ declare const LiteMenu: import("svelte").Component<Props, {}, "">;
11
+ type LiteMenu = ReturnType<typeof LiteMenu>;
12
+ export default LiteMenu;
@@ -0,0 +1,55 @@
1
+ <script lang="ts">
2
+ export interface MenuEntry {
3
+ id: string;
4
+ label: string;
5
+ href?: string;
6
+ disabled?: boolean;
7
+ badge?: string | number;
8
+ children?: MenuEntry[];
9
+ }
10
+
11
+ interface Props {
12
+ items: MenuEntry[];
13
+ selected?: string;
14
+ depth?: number;
15
+ mode?: 'vertical' | 'horizontal';
16
+ }
17
+
18
+ let { items, selected, depth = 0, mode = 'vertical' }: Props = $props();
19
+
20
+ </script>
21
+
22
+ {#snippet branch(list: MenuEntry[], level: number, listMode: 'vertical' | 'horizontal')}
23
+ <ul class="lite-menu__list" data-mode={level === 0 ? listMode : 'vertical'} role={level === 0 ? 'menu' : 'group'}>
24
+ {#each list as item (item.id)}
25
+ <li role="none" class:active={selected === item.id} data-disabled={item.disabled || undefined}>
26
+ {#if item.href && !item.disabled}
27
+ <a role="menuitem" href={item.href} aria-current={selected === item.id ? 'page' : undefined}>
28
+ <span>{item.label}</span>
29
+ {#if item.badge !== undefined}<span class="lite-badge lite-badge-secondary">{item.badge}</span>{/if}
30
+ </a>
31
+ {:else}
32
+ <span role="menuitem" aria-disabled={item.disabled || undefined}>
33
+ <span>{item.label}</span>
34
+ {#if item.badge !== undefined}<span class="lite-badge lite-badge-secondary">{item.badge}</span>{/if}
35
+ </span>
36
+ {/if}
37
+ {#if item.children?.length}
38
+ {@render branch(item.children, level + 1, 'vertical')}
39
+ {/if}
40
+ </li>
41
+ {/each}
42
+ </ul>
43
+ {/snippet}
44
+
45
+ {@render branch(items, depth, mode)}
46
+
47
+ <style>
48
+ .lite-menu__list { margin: 0; padding: 4px; list-style: none; }
49
+ .lite-menu__list[data-mode='horizontal'] { display: flex; flex-wrap: wrap; }
50
+ .lite-menu__list li > a, .lite-menu__list li > span { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px; border-radius: 4px; color: #1D2129; font-size: 13px; text-decoration: none; }
51
+ .lite-menu__list li > a:hover, .lite-menu__list li.active > a { background: #E8F3FF; color: #165DFF; text-decoration: none; }
52
+ .lite-menu__list li[data-disabled] > span { color: #C9CDD4; }
53
+ .lite-menu__list li > a > span + span, .lite-menu__list li > span > span + span { margin-left: 8px; }
54
+ .lite-menu__list .lite-menu__list { padding-left: 16px; }
55
+ </style>
@@ -0,0 +1,17 @@
1
+ export interface MenuEntry {
2
+ id: string;
3
+ label: string;
4
+ href?: string;
5
+ disabled?: boolean;
6
+ badge?: string | number;
7
+ children?: MenuEntry[];
8
+ }
9
+ interface Props {
10
+ items: MenuEntry[];
11
+ selected?: string;
12
+ depth?: number;
13
+ mode?: 'vertical' | 'horizontal';
14
+ }
15
+ declare const LiteMenuList: import("svelte").Component<Props, {}, "">;
16
+ type LiteMenuList = ReturnType<typeof LiteMenuList>;
17
+ export default LiteMenuList;
@@ -9,6 +9,8 @@
9
9
  submitText?: string;
10
10
  cancelText?: string;
11
11
  children?: Snippet;
12
+ /** Caller class merged with the built-in class list. */
13
+ class?: string;
12
14
  }
13
15
 
14
16
  let {
@@ -19,10 +21,11 @@
19
21
  submitText = 'Confirm',
20
22
  cancelText = 'Cancel',
21
23
  children,
24
+ class: className = '',
22
25
  }: Props = $props();
23
26
  </script>
24
27
 
25
- <div class="lite-modal-card">
28
+ <div class="lite-modal-card {className}">
26
29
  <div class="lite-modal-header">
27
30
  <h3 class="lite-modal-title">{title}</h3>
28
31
  {#if description}
@@ -52,24 +55,24 @@
52
55
  .lite-modal-card {
53
56
  padding: 16px;
54
57
  background: #ffffff;
55
- border: 1px solid #cbd5e1;
58
+ border: 1px solid #E5E6EB;
56
59
  border-radius: 6px;
57
60
  margin-bottom: 16px;
58
61
  }
59
62
  .lite-modal-header {
60
63
  padding-bottom: 10px;
61
- border-bottom: 1px solid #e2e8f0;
64
+ border-bottom: 1px solid #E5E6EB;
62
65
  margin-bottom: 12px;
63
66
  }
64
67
  .lite-modal-title {
65
68
  margin: 0;
66
69
  font-size: 14px;
67
- color: #1e293b;
70
+ color: #1D2129;
68
71
  }
69
72
  .lite-modal-desc {
70
73
  margin: 4px 0 0 0;
71
74
  font-size: 12px;
72
- color: #64748b;
75
+ color: #4E5969;
73
76
  }
74
77
  .lite-modal-body {
75
78
  margin-bottom: 16px;
@@ -79,6 +82,6 @@
79
82
  display: flex;
80
83
  justify-content: flex-end;
81
84
  padding-top: 12px;
82
- border-top: 1px solid #e2e8f0;
85
+ border-top: 1px solid #E5E6EB;
83
86
  }
84
87
  </style>
@@ -7,6 +7,8 @@ interface Props {
7
7
  submitText?: string;
8
8
  cancelText?: string;
9
9
  children?: Snippet;
10
+ /** Caller class merged with the built-in class list. */
11
+ class?: string;
10
12
  }
11
13
  declare const LiteModalForm: import("svelte").Component<Props, {}, "">;
12
14
  type LiteModalForm = ReturnType<typeof LiteModalForm>;
@@ -40,8 +40,8 @@
40
40
  <style>
41
41
  .sv-lite-tab-bar {
42
42
  display: block;
43
- background-color: #f1f5f9;
44
- border-bottom: 1px solid #cbd5e1;
43
+ background-color: #F2F3F5;
44
+ border-bottom: 1px solid #E5E6EB;
45
45
  padding: 4px 8px 0 8px;
46
46
  font-size: 12px;
47
47
  }
@@ -53,18 +53,18 @@
53
53
  display: inline-block;
54
54
  padding: 6px 12px;
55
55
  margin-right: 4px;
56
- background-color: #e2e8f0;
57
- color: #475569;
56
+ background-color: #E5E6EB;
57
+ color: #4E5969;
58
58
  text-decoration: none;
59
59
  border-top-left-radius: 4px;
60
60
  border-top-right-radius: 4px;
61
- border: 1px solid #cbd5e1;
61
+ border: 1px solid #E5E6EB;
62
62
  border-bottom: none;
63
63
  font-weight: 500;
64
64
  }
65
65
  .sv-lite-tab-active {
66
66
  background-color: #ffffff;
67
- color: #0f172a;
67
+ color: #1D2129;
68
68
  font-weight: 600;
69
69
  border-bottom: 1px solid #ffffff;
70
70
  margin-bottom: -1px;
@@ -0,0 +1,85 @@
1
+ <script lang="ts">
2
+ import { renderRichContent, type MarkdownRenderOptions } from '../rich-content.js';
3
+
4
+ interface NotificationItem {
5
+ id: string;
6
+ title: string;
7
+ description?: string;
8
+ time?: string;
9
+ href?: string;
10
+ read?: boolean;
11
+ tone?: 'info' | 'success' | 'warning' | 'danger';
12
+ }
13
+
14
+ interface Props {
15
+ items: NotificationItem[];
16
+ title?: string;
17
+ emptyText?: string;
18
+ markAllHref?: string;
19
+ /** Render item descriptions as Markdown/allowlisted HTML. Defaults to plain text. */
20
+ richContent?: boolean;
21
+ richContentOptions?: MarkdownRenderOptions;
22
+ }
23
+
24
+ let {
25
+ items,
26
+ title = 'Notifications',
27
+ emptyText = 'No notifications',
28
+ markAllHref,
29
+ richContent = false,
30
+ richContentOptions,
31
+ }: Props = $props();
32
+
33
+ function body(value: string): string {
34
+ return renderRichContent(value, richContentOptions);
35
+ }
36
+ </script>
37
+
38
+ <section class="lite-notification-center lite-card" aria-label={title}>
39
+ <header>
40
+ <h2>{title}</h2>
41
+ {#if markAllHref}<a href={markAllHref}>Mark all read</a>{/if}
42
+ </header>
43
+ {#if items.length === 0}
44
+ <p class="lite-muted">{emptyText}</p>
45
+ {:else}
46
+ <ul>
47
+ {#each items as item (item.id)}
48
+ <li data-read={item.read || undefined} data-tone={item.tone ?? 'info'}>
49
+ <span class="lite-notification-center__dot" aria-hidden="true"></span>
50
+ {#if item.href}<a href={item.href}>{item.title}</a>{:else}<strong>{item.title}</strong>{/if}
51
+ {#if item.description}
52
+ {#if richContent}
53
+ <!-- eslint-disable-next-line svelte/no-at-html-tags -- 内容由 renderRichContent 转义或白名单过滤,高亮回调仅允许可信服务端实现。 -->
54
+ <div class="lite-notification-center__rich">{@html body(item.description)}</div>
55
+ {:else}
56
+ <p>{item.description}</p>
57
+ {/if}
58
+ {/if}
59
+ {#if item.time}<time>{item.time}</time>{/if}
60
+ </li>
61
+ {/each}
62
+ </ul>
63
+ {/if}
64
+ </section>
65
+
66
+ <style>
67
+ .lite-notification-center { padding: 0; overflow: hidden; }
68
+ .lite-notification-center header { display: flex; align-items: baseline; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid #E5E6EB; }
69
+ .lite-notification-center h2 { margin: 0; color: #1D2129; font-size: 14px; }
70
+ .lite-notification-center header a { color: #165DFF; font-size: 12px; }
71
+ .lite-notification-center ul { margin: 0; padding: 0; list-style: none; }
72
+ .lite-notification-center li { position: relative; display: block; padding: 12px 16px 12px 30px; border-bottom: 1px solid #F2F3F5; }
73
+ .lite-notification-center li:last-child { border-bottom: 0; }
74
+ .lite-notification-center li[data-read] { opacity: 0.65; }
75
+ .lite-notification-center__dot { position: absolute; top: 16px; left: 16px; width: 7px; height: 7px; border-radius: 999px; background: #165DFF; }
76
+ .lite-notification-center li[data-tone='success'] .lite-notification-center__dot { background: #00B42A; }
77
+ .lite-notification-center li[data-tone='warning'] .lite-notification-center__dot { background: #FF7D00; }
78
+ .lite-notification-center li[data-tone='danger'] .lite-notification-center__dot { background: #F53F3F; }
79
+ .lite-notification-center li a, .lite-notification-center li strong { color: #1D2129; font-size: 13px; }
80
+ .lite-notification-center li p { margin: 0; color: #4E5969; font-size: 12px; line-height: 1.5; }
81
+ .lite-notification-center li time { color: #86909C; font-size: 11px; }
82
+ .lite-notification-center__rich :global(p) { margin: 0; }
83
+ .lite-notification-center__rich :global(a) { color: #165DFF; }
84
+ .lite-notification-center__rich :global(code) { padding: 1px 4px; border-radius: 3px; background: #F2F3F5; font-family: monospace; font-size: 12px; }
85
+ </style>
@@ -0,0 +1,22 @@
1
+ import { type MarkdownRenderOptions } from '../rich-content.js';
2
+ interface NotificationItem {
3
+ id: string;
4
+ title: string;
5
+ description?: string;
6
+ time?: string;
7
+ href?: string;
8
+ read?: boolean;
9
+ tone?: 'info' | 'success' | 'warning' | 'danger';
10
+ }
11
+ interface Props {
12
+ items: NotificationItem[];
13
+ title?: string;
14
+ emptyText?: string;
15
+ markAllHref?: string;
16
+ /** Render item descriptions as Markdown/allowlisted HTML. Defaults to plain text. */
17
+ richContent?: boolean;
18
+ richContentOptions?: MarkdownRenderOptions;
19
+ }
20
+ declare const LiteNotificationCenter: import("svelte").Component<Props, {}, "">;
21
+ type LiteNotificationCenter = ReturnType<typeof LiteNotificationCenter>;
22
+ export default LiteNotificationCenter;
@@ -49,13 +49,13 @@
49
49
  }
50
50
  .sv-lite-sync-offline {
51
51
  background-color: #fef3c7;
52
- border: 1px solid #fde68a;
53
- color: #92400e;
52
+ border: 1px solid #FFE4BA;
53
+ color: #D25F00;
54
54
  }
55
55
  .sv-lite-sync-online {
56
- background-color: #f1f5f9;
57
- border: 1px solid #cbd5e1;
58
- color: #334155;
56
+ background-color: #F2F3F5;
57
+ border: 1px solid #E5E6EB;
58
+ color: #1D2129;
59
59
  }
60
60
  .sv-lite-sync-title {
61
61
  display: inline-block;
@@ -66,7 +66,7 @@
66
66
  .sv-lite-sync-btn {
67
67
  padding: 3px 8px;
68
68
  font-size: 11px;
69
- background-color: #4f46e5;
69
+ background-color: #165DFF;
70
70
  color: #ffffff;
71
71
  border: none;
72
72
  border-radius: 3px;
@@ -0,0 +1,50 @@
1
+ <script lang="ts">
2
+ import type { HTMLInputAttributes } from 'svelte/elements';
3
+
4
+ interface Props {
5
+ /** Caller class merged with the built-in class list. */
6
+ class?: string;
7
+ name?: string;
8
+ label?: string;
9
+ length?: number;
10
+ value?: string;
11
+ disabled?: boolean;
12
+ required?: boolean;
13
+ autocomplete?: HTMLInputAttributes['autocomplete'];
14
+ }
15
+
16
+ let {
17
+ name = 'code',
18
+ label = 'Verification code',
19
+ length = 6,
20
+ value = '',
21
+ disabled = false,
22
+ required = true,
23
+ autocomplete = 'one-time-code',
24
+ class: className = '',
25
+ }: Props = $props();
26
+ </script>
27
+
28
+ <label class="lite-form-group lite-otp-input {className}">
29
+ <span>{label}</span>
30
+ <input
31
+ class="lite-input"
32
+ type="text"
33
+ {name}
34
+ {value}
35
+ {disabled}
36
+ {required}
37
+ {autocomplete}
38
+ inputmode="numeric"
39
+ pattern={`[0-9]{${length}}`}
40
+ maxlength={length}
41
+ placeholder={Array.from({ length }, () => '0').join('')}
42
+ aria-describedby={`${name}-hint`}
43
+ />
44
+ <small id={`${name}-hint`}>{length}-digit code</small>
45
+ </label>
46
+
47
+ <style>
48
+ .lite-otp-input input { max-width: 14rem; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 18px; letter-spacing: 0.35em; }
49
+ .lite-otp-input small { color: #86909C; font-size: 12px; }
50
+ </style>
@@ -0,0 +1,15 @@
1
+ import type { HTMLInputAttributes } from 'svelte/elements';
2
+ interface Props {
3
+ /** Caller class merged with the built-in class list. */
4
+ class?: string;
5
+ name?: string;
6
+ label?: string;
7
+ length?: number;
8
+ value?: string;
9
+ disabled?: boolean;
10
+ required?: boolean;
11
+ autocomplete?: HTMLInputAttributes['autocomplete'];
12
+ }
13
+ declare const LiteOtpInput: import("svelte").Component<Props, {}, "">;
14
+ type LiteOtpInput = ReturnType<typeof LiteOtpInput>;
15
+ export default LiteOtpInput;
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ interface Props {
5
+ title: string;
6
+ description?: string;
7
+ eyebrow?: string;
8
+ actions?: Snippet;
9
+ children?: Snippet;
10
+ /** Caller class merged with the built-in class list. */
11
+ class?: string;
12
+ }
13
+
14
+ let { title, description, eyebrow, actions, children, class: className = '' }: Props = $props();
15
+ </script>
16
+
17
+ <header class="lite-page-header lite-page-header-rich {className}">
18
+ <div>
19
+ {#if eyebrow}<p class="lite-page-header__eyebrow">{eyebrow}</p>{/if}
20
+ <h1 class="lite-page-title">{title}</h1>
21
+ {#if description}<p class="lite-page-header__description">{description}</p>{/if}
22
+ {@render children?.()}
23
+ </div>
24
+ {#if actions}<div class="lite-page-header__actions">{@render actions()}</div>{/if}
25
+ </header>
26
+
27
+ <style>
28
+ .lite-page-header-rich { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; }
29
+ .lite-page-header__eyebrow { margin: 0 0 4px; color: #86909C; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }
30
+ .lite-page-header__description { margin: 6px 0 0; color: #4E5969; font-size: 13px; line-height: 1.6; }
31
+ .lite-page-header__actions { display: flex; flex-wrap: wrap; align-items: center; }
32
+
33
+ .lite-page-header__actions > * + * { margin-left: 8px; }
34
+ </style>