@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
@@ -0,0 +1,54 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ src?: string;
4
+ alt?: string;
5
+ width?: string | number;
6
+ height?: string | number;
7
+ fit?: 'cover' | 'contain' | 'fill' | 'none';
8
+ rounded?: boolean;
9
+ fallback?: string;
10
+ href?: string;
11
+ caption?: string;
12
+ }
13
+
14
+ let {
15
+ src,
16
+ alt = '',
17
+ width,
18
+ height,
19
+ fit = 'cover',
20
+ rounded = false,
21
+ fallback = 'Image unavailable',
22
+ href,
23
+ caption,
24
+ }: Props = $props();
25
+
26
+ const sizeStyle = $derived([
27
+ width === undefined ? undefined : `width:${typeof width === 'number' ? `${width}px` : width}`,
28
+ height === undefined ? undefined : `height:${typeof height === 'number' ? `${height}px` : height}`,
29
+ ].filter(Boolean).join(';'));
30
+ </script>
31
+
32
+ <figure class="lite-image" class:lite-image-rounded={rounded} style={sizeStyle || undefined}>
33
+ {#if src}
34
+ {#if href}
35
+ <a href={href} aria-label={alt ? `Open ${alt}` : 'Open image'}>
36
+ <img {src} {alt} loading="lazy" decoding="async" style={`object-fit:${fit}`} />
37
+ </a>
38
+ {:else}
39
+ <img {src} {alt} loading="lazy" decoding="async" style={`object-fit:${fit}`} />
40
+ {/if}
41
+ {:else}
42
+ <span class="lite-image-fallback" role="img" aria-label={fallback}>{fallback}</span>
43
+ {/if}
44
+ {#if caption}<figcaption>{caption}</figcaption>{/if}
45
+ </figure>
46
+
47
+ <style>
48
+ .lite-image { display: block; place-items: center; min-width: 0; max-width: 100%; margin: 0; overflow: hidden; border: 1px solid #E5E6EB; background: #F2F3F5; color: #4E5969; }
49
+ .lite-image-rounded { border-radius: 8px; }
50
+ .lite-image a { display: block; max-width: 100%; }
51
+ .lite-image img { display: block; max-width: 100%; height: auto; }
52
+ .lite-image-fallback { display: inline-block; padding: 24px 16px; font-size: 13px; text-align: center; }
53
+ .lite-image figcaption { width: 100%; padding: 8px 12px; border-top: 1px solid #E5E6EB; background: #fff; color: #4E5969; font-size: 12px; }
54
+ </style>
@@ -0,0 +1,14 @@
1
+ interface Props {
2
+ src?: string;
3
+ alt?: string;
4
+ width?: string | number;
5
+ height?: string | number;
6
+ fit?: 'cover' | 'contain' | 'fill' | 'none';
7
+ rounded?: boolean;
8
+ fallback?: string;
9
+ href?: string;
10
+ caption?: string;
11
+ }
12
+ declare const LiteImage: import("svelte").Component<Props, {}, "">;
13
+ type LiteImage = ReturnType<typeof LiteImage>;
14
+ export default LiteImage;
@@ -4,6 +4,8 @@
4
4
  aspectRatio?: number;
5
5
  action?: string;
6
6
  method?: 'get' | 'post' | 'dialog' | 'GET' | 'POST' | 'DIALOG' | null;
7
+ /** Caller class merged with the built-in class list. */
8
+ class?: string;
7
9
  }
8
10
 
9
11
  let {
@@ -11,10 +13,11 @@
11
13
  aspectRatio = 1,
12
14
  action = '',
13
15
  method = 'POST',
16
+ class: className = ''
14
17
  }: Props = $props();
15
18
  </script>
16
19
 
17
- <div class="lite-cropper-card">
20
+ <div class="lite-cropper-card {className}">
18
21
  <div class="lite-cropper-header">
19
22
  <strong>Image Crop (Aspect Ratio: {aspectRatio}:1)</strong>
20
23
  </div>
@@ -48,7 +51,7 @@
48
51
  <style>
49
52
  .lite-cropper-card {
50
53
  background: #ffffff;
51
- border: 1px solid #cbd5e1;
54
+ border: 1px solid #E5E6EB;
52
55
  border-radius: 6px;
53
56
  padding: 16px;
54
57
  margin-bottom: 16px;
@@ -56,13 +59,13 @@
56
59
  }
57
60
  .lite-cropper-header {
58
61
  padding-bottom: 8px;
59
- border-bottom: 1px solid #e2e8f0;
62
+ border-bottom: 1px solid #E5E6EB;
60
63
  margin-bottom: 12px;
61
64
  font-size: 13px;
62
65
  }
63
66
  .lite-cropper-preview {
64
67
  text-align: center;
65
- background: #f1f5f9;
68
+ background: #F2F3F5;
66
69
  padding: 12px;
67
70
  border-radius: 4px;
68
71
  margin-bottom: 12px;
@@ -3,6 +3,8 @@ interface Props {
3
3
  aspectRatio?: number;
4
4
  action?: string;
5
5
  method?: 'get' | 'post' | 'dialog' | 'GET' | 'POST' | 'DIALOG' | null;
6
+ /** Caller class merged with the built-in class list. */
7
+ class?: string;
6
8
  }
7
9
  declare const LiteImageCropper: import("svelte").Component<Props, {}, "">;
8
10
  type LiteImageCropper = ReturnType<typeof LiteImageCropper>;
@@ -0,0 +1,36 @@
1
+ <script lang="ts">
2
+ interface PreviewImage {
3
+ src: string;
4
+ alt: string;
5
+ }
6
+
7
+ interface Props {
8
+ src: string;
9
+ alt?: string;
10
+ images?: PreviewImage[];
11
+ downloadLabel?: string;
12
+ }
13
+
14
+ let { src, alt = '', images = [], downloadLabel = 'Download image' }: Props = $props();
15
+ const gallery = $derived(images.length > 0 ? images : [{ src, alt }]);
16
+ </script>
17
+
18
+ <div class="lite-image-preview" role="group" aria-label="Image gallery">
19
+ {#each gallery as image, index (image.src)}
20
+ <a class="lite-image-preview__item" href={image.src} target="_blank" rel="noreferrer" aria-label={`Open ${image.alt || alt || `image ${index + 1}`}`}>
21
+ <img src={image.src} alt={image.alt || alt} loading="lazy" decoding="async" />
22
+ <span>{image.alt || alt || `Image ${index + 1}`}</span>
23
+ </a>
24
+ {/each}
25
+ <a class="lite-btn lite-btn-sm" href={src} download={alt || 'image'}>{downloadLabel}</a>
26
+ </div>
27
+
28
+ <style>
29
+ .lite-image-preview { display: flex; flex-wrap: wrap; align-items: flex-start; }
30
+ .lite-image-preview__item { display: block; width: 160px; max-width: 100%; overflow: hidden; border: 1px solid #E5E6EB; border-radius: 8px; background: #fff; color: #1D2129; text-decoration: none; }
31
+ .lite-image-preview__item:hover { border-color: #165DFF; text-decoration: none; }
32
+ .lite-image-preview__item img { display: block; width: 100%; height: 110px; object-fit: cover; }
33
+ .lite-image-preview__item span { display: block; padding: 6px 8px; overflow: hidden; color: #4E5969; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
34
+
35
+ .lite-image-preview > * { margin: 0 12px 12px 0; }
36
+ </style>
@@ -0,0 +1,13 @@
1
+ interface PreviewImage {
2
+ src: string;
3
+ alt: string;
4
+ }
5
+ interface Props {
6
+ src: string;
7
+ alt?: string;
8
+ images?: PreviewImage[];
9
+ downloadLabel?: string;
10
+ }
11
+ declare const LiteImagePreview: import("svelte").Component<Props, {}, "">;
12
+ type LiteImagePreview = ReturnType<typeof LiteImagePreview>;
13
+ export default LiteImagePreview;
@@ -51,14 +51,14 @@
51
51
  <style>
52
52
  .lite-import-wizard {
53
53
  padding: 12px;
54
- background: #f8fafc;
55
- border: 1px solid #cbd5e1;
54
+ background: #F7F8FA;
55
+ border: 1px solid #E5E6EB;
56
56
  border-radius: 6px;
57
57
  margin-bottom: 16px;
58
58
  }
59
59
  .lite-import-title {
60
60
  font-size: 13px;
61
- color: #334155;
61
+ color: #1D2129;
62
62
  margin-bottom: 8px;
63
63
  }
64
64
  .lite-file-row {
@@ -67,13 +67,13 @@
67
67
  .lite-label {
68
68
  display: block;
69
69
  font-size: 12px;
70
- color: #475569;
70
+ color: #4E5969;
71
71
  margin-bottom: 4px;
72
72
  }
73
73
  .lite-field-mapping-hints {
74
74
  margin-bottom: 12px;
75
75
  font-size: 11px;
76
- color: #64748b;
76
+ color: #4E5969;
77
77
  }
78
78
  .lite-hint-title {
79
79
  display: block;
@@ -86,8 +86,8 @@
86
86
  }
87
87
  .lite-badge {
88
88
  display: inline-block;
89
- background: #e2e8f0;
90
- color: #334155;
89
+ background: #E5E6EB;
90
+ color: #1D2129;
91
91
  padding: 2px 6px;
92
92
  border-radius: 3px;
93
93
  margin-right: 6px;
@@ -0,0 +1,50 @@
1
+ <script lang="ts">
2
+ interface ListItem {
3
+ id: string;
4
+ title: string;
5
+ description?: string;
6
+ href?: string;
7
+ meta?: string;
8
+ }
9
+
10
+ interface Props {
11
+ items: ListItem[];
12
+ title?: string;
13
+ emptyText?: string;
14
+ }
15
+
16
+ let { items, title, emptyText = 'No items' }: Props = $props();
17
+ </script>
18
+
19
+ <section class="lite-item-list lite-card">
20
+ {#if title}<h2>{title}</h2>{/if}
21
+ {#if items.length === 0}
22
+ <p class="lite-muted">{emptyText}</p>
23
+ {:else}
24
+ <ul>
25
+ {#each items as item (item.id)}
26
+ <li>
27
+ <div>
28
+ {#if item.href}<a href={item.href}>{item.title}</a>{:else}<strong>{item.title}</strong>{/if}
29
+ {#if item.description}<p>{item.description}</p>{/if}
30
+ </div>
31
+ {#if item.meta}<span>{item.meta}</span>{/if}
32
+ </li>
33
+ {/each}
34
+ </ul>
35
+ {/if}
36
+ </section>
37
+
38
+ <style>
39
+ .lite-item-list { padding: 0; overflow: hidden; }
40
+ .lite-item-list h2 { margin: 0; padding: 12px 16px; border-bottom: 1px solid #E5E6EB; color: #1D2129; font-size: 14px; }
41
+ .lite-item-list > p { margin: 0; padding: 16px; }
42
+ .lite-item-list ul { margin: 0; padding: 0; list-style: none; }
43
+ .lite-item-list li { display: flex; align-items: flex-start; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid #F2F3F5; }
44
+ .lite-item-list li:last-child { border-bottom: 0; }
45
+ .lite-item-list a, .lite-item-list strong { color: #1D2129; font-size: 13px; }
46
+ .lite-item-list p { margin: 4px 0 0; color: #4E5969; font-size: 12px; line-height: 1.5; }
47
+ .lite-item-list li > span { color: #86909C; font-size: 12px; white-space: nowrap; }
48
+
49
+ .lite-item-list li > * + * { margin-left: 12px; }
50
+ </style>
@@ -0,0 +1,15 @@
1
+ interface ListItem {
2
+ id: string;
3
+ title: string;
4
+ description?: string;
5
+ href?: string;
6
+ meta?: string;
7
+ }
8
+ interface Props {
9
+ items: ListItem[];
10
+ title?: string;
11
+ emptyText?: string;
12
+ }
13
+ declare const LiteItemList: import("svelte").Component<Props, {}, "">;
14
+ type LiteItemList = ReturnType<typeof LiteItemList>;
15
+ export default LiteItemList;
@@ -9,6 +9,8 @@
9
9
  action?: string;
10
10
  method?: 'get' | 'post' | 'dialog' | 'GET' | 'POST' | 'DIALOG' | null;
11
11
  submitText?: string;
12
+ /** Caller class merged with the built-in class list. */
13
+ class?: string;
12
14
  }
13
15
 
14
16
  let {
@@ -17,6 +19,7 @@
17
19
  action = '',
18
20
  method = 'POST',
19
21
  submitText = 'Submit Form',
22
+ class: className = ''
20
23
  }: Props = $props();
21
24
  const instanceId = $props.id();
22
25
  const i18n = useTranslation();
@@ -119,7 +122,7 @@
119
122
  }
120
123
  </script>
121
124
 
122
- <div class="lite-schema-form-card">
125
+ <div class="lite-schema-form-card {className}">
123
126
  {#if schema.title}<div class="lite-schema-form-header"><strong>{schema.title}</strong></div>{/if}
124
127
  {#if schema.description}<p class="lite-schema-description">{schema.description}</p>{/if}
125
128
 
@@ -201,14 +204,14 @@
201
204
  </div>
202
205
 
203
206
  <style>
204
- .lite-schema-form-card { background: #fff; border: 1px solid #cbd5e1; border-radius: 6px; padding: 16px; margin-bottom: 16px; }
205
- .lite-schema-form-header { padding-bottom: 8px; border-bottom: 1px solid #e2e8f0; margin-bottom: 12px; font-size: 14px; }
206
- .lite-schema-fieldset { border: 1px solid #e2e8f0; border-radius: 4px; padding: 12px; margin: 0 0 12px; }
207
+ .lite-schema-form-card { background: #fff; border: 1px solid #E5E6EB; border-radius: 6px; padding: 16px; margin-bottom: 16px; }
208
+ .lite-schema-form-header { padding-bottom: 8px; border-bottom: 1px solid #E5E6EB; margin-bottom: 12px; font-size: 14px; }
209
+ .lite-schema-fieldset { border: 1px solid #E5E6EB; border-radius: 4px; padding: 12px; margin: 0 0 12px; }
207
210
  .lite-schema-field { margin-bottom: 12px; }
208
211
  .lite-schema-fieldset > .lite-schema-field:last-child { margin-bottom: 0; }
209
- .lite-schema-footer { display: flex; justify-content: flex-end; padding-top: 12px; border-top: 1px solid #e2e8f0; }
210
- .lite-label { display: block; font-size: 12px; color: #475569; margin-bottom: 4px; }
211
- .lite-schema-description, .lite-hint { font-size: 12px; color: #64748b; }
212
+ .lite-schema-footer { display: flex; justify-content: flex-end; padding-top: 12px; border-top: 1px solid #E5E6EB; }
213
+ .lite-label { display: block; font-size: 12px; color: #4E5969; margin-bottom: 4px; }
214
+ .lite-schema-description, .lite-hint { font-size: 12px; color: #4E5969; }
212
215
  .lite-input, .lite-select { width: 100%; }
213
216
  .lite-btn { margin-right: 6px; }
214
217
  </style>
@@ -5,6 +5,8 @@ interface Props {
5
5
  action?: string;
6
6
  method?: 'get' | 'post' | 'dialog' | 'GET' | 'POST' | 'DIALOG' | null;
7
7
  submitText?: string;
8
+ /** Caller class merged with the built-in class list. */
9
+ class?: string;
8
10
  }
9
11
  declare const LiteJsonSchemaForm: import("svelte").Component<Props, {}, "value">;
10
12
  type LiteJsonSchemaForm = ReturnType<typeof LiteJsonSchemaForm>;
@@ -128,8 +128,8 @@
128
128
  vertical-align: top;
129
129
  width: 260px;
130
130
  margin-right: 12px;
131
- background-color: #f8fafc;
132
- border: 1px solid #e2e8f0;
131
+ background-color: #F7F8FA;
132
+ border: 1px solid #E5E6EB;
133
133
  border-radius: 6px;
134
134
  padding: 10px;
135
135
  white-space: normal;
@@ -138,60 +138,60 @@
138
138
  .sv-lite-column-header {
139
139
  font-weight: bold;
140
140
  padding-bottom: 8px;
141
- border-bottom: 1px solid #cbd5e1;
142
- color: #1e293b;
141
+ border-bottom: 1px solid #E5E6EB;
142
+ color: #1D2129;
143
143
  margin-bottom: 8px;
144
144
  }
145
145
  .sv-lite-column-count {
146
- color: #64748b;
146
+ color: #4E5969;
147
147
  font-weight: normal;
148
148
  font-size: 11px;
149
149
  margin-left: 4px;
150
150
  }
151
151
  .sv-lite-kanban-card {
152
152
  background-color: #ffffff;
153
- border: 1px solid #cbd5e1;
153
+ border: 1px solid #E5E6EB;
154
154
  border-radius: 4px;
155
155
  padding: 8px;
156
156
  margin-bottom: 8px;
157
157
  }
158
158
  .sv-lite-card-title {
159
159
  font-weight: 600;
160
- color: #0f172a;
160
+ color: #1D2129;
161
161
  margin-bottom: 4px;
162
162
  }
163
163
  .sv-lite-card-desc {
164
- color: #64748b;
164
+ color: #4E5969;
165
165
  font-size: 11px;
166
166
  margin-bottom: 6px;
167
167
  }
168
168
  .sv-lite-card-meta {
169
169
  padding-top: 4px;
170
- border-top: 1px solid #f1f5f9;
170
+ border-top: 1px solid #F2F3F5;
171
171
  }
172
172
  .sv-lite-priority-badge {
173
173
  display: inline-block;
174
174
  padding: 1px 4px;
175
175
  font-size: 10px;
176
176
  border-radius: 2px;
177
- text-transform: uppercase;
177
+ text-transform: none;
178
178
  margin-right: 4px;
179
179
  }
180
180
  .sv-lite-urgent, .sv-lite-high {
181
- background-color: #fee2e2;
182
- color: #991b1b;
181
+ background-color: #FFECE8;
182
+ color: #CB272D;
183
183
  }
184
184
  .sv-lite-medium {
185
- background-color: #e0e7ff;
186
- color: #3730a3;
185
+ background-color: #E8F3FF;
186
+ color: #0E42D2;
187
187
  }
188
188
  .sv-lite-low {
189
- background-color: #f1f5f9;
190
- color: #475569;
189
+ background-color: #F2F3F5;
190
+ color: #4E5969;
191
191
  }
192
192
  .sv-lite-tag-badge {
193
193
  display: inline-block;
194
- color: #64748b;
194
+ color: #4E5969;
195
195
  font-size: 10px;
196
196
  margin-right: 4px;
197
197
  }
@@ -202,13 +202,13 @@
202
202
  width: 170px;
203
203
  padding: 4px 6px;
204
204
  font-size: 11px;
205
- border: 1px solid #cbd5e1;
205
+ border: 1px solid #E5E6EB;
206
206
  border-radius: 3px;
207
207
  }
208
208
  .sv-lite-card-btn {
209
209
  padding: 4px 8px;
210
210
  font-size: 11px;
211
- background-color: #4f46e5;
211
+ background-color: #165DFF;
212
212
  color: #ffffff;
213
213
  border: none;
214
214
  border-radius: 3px;
@@ -19,6 +19,14 @@
19
19
  /** Optional server-computed permission check for menu metadata. */
20
20
  canAccess?: (resource: string, action: string) => boolean;
21
21
  children: Snippet;
22
+ /** Caller class for the layout wrapper. */
23
+ class?: string;
24
+ /** Caller class for the desktop sidebar. */
25
+ classSidebar?: string;
26
+ /** Caller class for the mobile navigation. */
27
+ classMobileNav?: string;
28
+ /** Caller class for the main region. */
29
+ classMain?: string;
22
30
  }
23
31
 
24
32
  let {
@@ -30,6 +38,10 @@
30
38
  menu,
31
39
  canAccess,
32
40
  children,
41
+ class: className = '',
42
+ classSidebar = '',
43
+ classMobileNav = '',
44
+ classMain = '',
33
45
  }: Props = $props();
34
46
 
35
47
  const menuResources = $derived(filterVisibleResources(resources, canAccess));
@@ -63,9 +75,9 @@
63
75
  }
64
76
  </script>
65
77
 
66
- <div class="lite-wrapper">
78
+ <div class={`lite-wrapper ${className}`.trim()}>
67
79
  <!-- Sidebar -->
68
- <nav class="lite-sidebar">
80
+ <nav class={`lite-sidebar ${classSidebar}`.trim()}>
69
81
  <div class="lite-sidebar-brand">{brandName}</div>
70
82
  {#if hasCustomMenu}
71
83
  <LiteMenuList items={visibleMenu} {basePath} {currentResource} />
@@ -80,16 +92,16 @@
80
92
  {/each}
81
93
  {/if}
82
94
  {#if userName}
83
- <div style="position:absolute;bottom:0;left:0;right:0;padding:12px 16px;border-top:1px solid #334155;font-size:12px;color:#94a3b8;">
95
+ <div style="position:absolute;bottom:0;left:0;right:0;padding:12px 16px;border-top:1px solid #1D2129;font-size:12px;color:#86909C;">
84
96
  {userName}
85
97
  <form method="POST" action={`${basePath}/login?/logout`} style="display:inline;margin-left:8px;">
86
- <button type="submit" class="lite-btn lite-btn-sm" style="color:#94a3b8;border-color:#475569;background:transparent;">Logout</button>
98
+ <button type="submit" class="lite-btn lite-btn-sm" style="color:#86909C;border-color:#4E5969;background:transparent;">Logout</button>
87
99
  </form>
88
100
  </div>
89
101
  {/if}
90
102
  </nav>
91
103
 
92
- <nav class="lite-mobile-nav" aria-label="Mobile navigation">
104
+ <nav class={`lite-mobile-nav ${classMobileNav}`.trim()} aria-label="Mobile navigation">
93
105
  <div class="lite-mobile-nav-brand">{brandName}</div>
94
106
  <div class="lite-mobile-nav-links">
95
107
  {#each mobileItems as item (item.name)}
@@ -112,7 +124,7 @@
112
124
  </nav>
113
125
 
114
126
  <!-- Main Content -->
115
- <main class="lite-main">
127
+ <main class={`lite-main ${classMain}`.trim()}>
116
128
  {@render children()}
117
129
  </main>
118
130
  </div>
@@ -15,6 +15,14 @@ interface Props {
15
15
  /** Optional server-computed permission check for menu metadata. */
16
16
  canAccess?: (resource: string, action: string) => boolean;
17
17
  children: Snippet;
18
+ /** Caller class for the layout wrapper. */
19
+ class?: string;
20
+ /** Caller class for the desktop sidebar. */
21
+ classSidebar?: string;
22
+ /** Caller class for the mobile navigation. */
23
+ classMobileNav?: string;
24
+ /** Caller class for the main region. */
25
+ classMain?: string;
18
26
  }
19
27
  declare const LiteLayout: import("svelte").Component<Props, {}, "">;
20
28
  type LiteLayout = ReturnType<typeof LiteLayout>;
@@ -0,0 +1,32 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ interface Props {
5
+ href: string;
6
+ external?: boolean;
7
+ underline?: boolean;
8
+ disabled?: boolean;
9
+ children: Snippet;
10
+ }
11
+
12
+ let { href, external = false, underline = false, disabled = false, children }: Props = $props();
13
+ </script>
14
+
15
+ {#if disabled}
16
+ <span class="lite-link" aria-disabled="true">{@render children()}</span>
17
+ {:else}
18
+ <a
19
+ class="lite-link"
20
+ class:lite-link-underline={underline}
21
+ {href}
22
+ target={external ? '_blank' : undefined}
23
+ rel={external ? 'noreferrer' : undefined}
24
+ >{@render children()}</a>
25
+ {/if}
26
+
27
+ <style>
28
+ .lite-link { color: #165DFF; text-decoration: none; }
29
+ .lite-link:hover { text-decoration: underline; }
30
+ .lite-link-underline { text-decoration: underline; }
31
+ .lite-link[aria-disabled='true'] { color: #C9CDD4; cursor: not-allowed; }
32
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ href: string;
4
+ external?: boolean;
5
+ underline?: boolean;
6
+ disabled?: boolean;
7
+ children: Snippet;
8
+ }
9
+ declare const LiteLink: import("svelte").Component<Props, {}, "">;
10
+ type LiteLink = ReturnType<typeof LiteLink>;
11
+ export default LiteLink;
@@ -9,12 +9,19 @@
9
9
  error?: string;
10
10
  brandName?: string;
11
11
  action?: string;
12
+ /** Caller class merged with the built-in class list. */
13
+ class?: string;
12
14
  }
13
15
 
14
- let { error, brandName = 'Admin', action = '?/login' }: Props = $props();
16
+ let {
17
+ error,
18
+ brandName = 'Admin',
19
+ action = '?/login',
20
+ class: className = '',
21
+ }: Props = $props();
15
22
  </script>
16
23
 
17
- <div class="lite-login-wrapper">
24
+ <div class="lite-login-wrapper {className}">
18
25
  <div class="lite-login-card">
19
26
  <div class="lite-card">
20
27
  <h2 style="text-align:center;margin:0 0 20px;font-size:20px;font-weight:600;">{brandName}</h2>
@@ -2,6 +2,8 @@ interface Props {
2
2
  error?: string;
3
3
  brandName?: string;
4
4
  action?: string;
5
+ /** Caller class merged with the built-in class list. */
6
+ class?: string;
5
7
  }
6
8
  declare const LiteLogin: import("svelte").Component<Props, {}, "">;
7
9
  type LiteLogin = ReturnType<typeof LiteLogin>;