@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 TourStep {
3
+ title: string;
4
+ description?: string;
5
+ href?: string;
6
+ }
7
+
8
+ interface Props {
9
+ steps: TourStep[];
10
+ title?: string;
11
+ current?: number;
12
+ dismissHref?: string;
13
+ label?: string;
14
+ }
15
+
16
+ let { steps, title = 'Guided tour', current = 0, dismissHref, label = 'Guided tour' }: Props = $props();
17
+ </script>
18
+
19
+ <section class="lite-tour lite-card" aria-label={label}>
20
+ <header>
21
+ <h2>{title}</h2>
22
+ {#if dismissHref}<a href={dismissHref} aria-label="Dismiss tour">×</a>{/if}
23
+ </header>
24
+ <ol>
25
+ {#each steps as step, index (step.title)}
26
+ <li data-active={index === current || undefined}>
27
+ <span>{index + 1}</span>
28
+ <div>
29
+ <strong>{step.title}</strong>
30
+ {#if step.description}<p>{step.description}</p>{/if}
31
+ {#if step.href}<a href={step.href}>View step</a>{/if}
32
+ </div>
33
+ </li>
34
+ {/each}
35
+ </ol>
36
+ </section>
37
+
38
+ <style>
39
+ .lite-tour { display: block; }
40
+ .lite-tour header { display: flex; align-items: baseline; justify-content: space-between; }
41
+ .lite-tour h2 { margin: 0; color: #1D2129; font-size: 14px; }
42
+ .lite-tour header a { color: #4E5969; font-size: 20px; line-height: 1; text-decoration: none; }
43
+ .lite-tour ol { display: block; margin: 0; padding: 0; list-style: none; }
44
+ .lite-tour li { display: flex; padding: 8px; border: 1px solid #F2F3F5; border-radius: 6px; }
45
+ .lite-tour li[data-active] { border-color: #165DFF; background: #F7F8FA; }
46
+ .lite-tour li > span { display: inline-grid; flex: 0 0 24px; place-items: center; width: 24px; height: 24px; border-radius: 999px; background: #E8F3FF; color: #165DFF; font-size: 12px; font-weight: 600; }
47
+ .lite-tour li strong { color: #1D2129; font-size: 13px; }
48
+ .lite-tour li p { margin: 2px 0 0; color: #4E5969; font-size: 12px; line-height: 1.5; }
49
+ .lite-tour li a { color: #165DFF; font-size: 12px; }
50
+
51
+ .lite-tour > * + * { margin-top: 12px; }
52
+ .lite-tour li + li { margin-top: 8px; }
53
+ .lite-tour li > span { margin-right: 10px; }
54
+ </style>
@@ -0,0 +1,15 @@
1
+ interface TourStep {
2
+ title: string;
3
+ description?: string;
4
+ href?: string;
5
+ }
6
+ interface Props {
7
+ steps: TourStep[];
8
+ title?: string;
9
+ current?: number;
10
+ dismissHref?: string;
11
+ label?: string;
12
+ }
13
+ declare const LiteTour: import("svelte").Component<Props, {}, "">;
14
+ type LiteTour = ReturnType<typeof LiteTour>;
15
+ export default LiteTour;
@@ -16,6 +16,8 @@
16
16
  disabled?: boolean;
17
17
  label?: string;
18
18
  description?: string;
19
+ /** Caller class merged with the built-in class list. */
20
+ class?: string;
19
21
  }
20
22
 
21
23
  let {
@@ -26,6 +28,7 @@
26
28
  disabled = false,
27
29
  label,
28
30
  description,
31
+ class: className = ''
29
32
  }: Props = $props();
30
33
 
31
34
  const targetKeySet = $derived(new Set(targetKeys.map(String)));
@@ -33,7 +36,7 @@
33
36
  const targetItems = $derived(dataSource.filter((item) => targetKeySet.has(String(item.key))));
34
37
  </script>
35
38
 
36
- <div class="lite-transfer-container lite-form-group">
39
+ <div class="lite-transfer-container lite-form-group {className}">
37
40
  {#if label}
38
41
  <span class="lite-label">{label}</span>
39
42
  {/if}
@@ -129,7 +132,7 @@
129
132
  }
130
133
  .lite-transfer-panel {
131
134
  flex: 1;
132
- border: 1px solid #cbd5e1;
135
+ border: 1px solid #E5E6EB;
133
136
  border-radius: 6px;
134
137
  background: #ffffff;
135
138
  min-height: 180px;
@@ -142,8 +145,8 @@
142
145
  justify-content: space-between;
143
146
  align-items: center;
144
147
  padding: 8px 12px;
145
- background: #f8fafc;
146
- border-bottom: 1px solid #e2e8f0;
148
+ background: #F7F8FA;
149
+ border-bottom: 1px solid #E5E6EB;
147
150
  font-size: 13px;
148
151
  }
149
152
  .lite-transfer-body {
@@ -160,7 +163,7 @@
160
163
  font-size: 13px;
161
164
  }
162
165
  .lite-transfer-item:hover {
163
- background: #f1f5f9;
166
+ background: #F2F3F5;
164
167
  }
165
168
  .lite-transfer-item input {
166
169
  margin-right: 8px;
@@ -179,7 +182,7 @@
179
182
  .lite-transfer-empty {
180
183
  text-align: center;
181
184
  padding: 30px 10px;
182
- color: #94a3b8;
185
+ color: #86909C;
183
186
  font-size: 12px;
184
187
  }
185
188
  </style>
@@ -12,6 +12,8 @@ interface Props {
12
12
  disabled?: boolean;
13
13
  label?: string;
14
14
  description?: string;
15
+ /** Caller class merged with the built-in class list. */
16
+ class?: string;
15
17
  }
16
18
  declare const LiteTransfer: import("svelte").Component<Props, {}, "">;
17
19
  type LiteTransfer = ReturnType<typeof LiteTransfer>;
@@ -0,0 +1,48 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ interface TreeNode {
5
+ id: string;
6
+ label: string;
7
+ href?: string;
8
+ disabled?: boolean;
9
+ children?: TreeNode[];
10
+ }
11
+
12
+ interface Props {
13
+ nodes: TreeNode[];
14
+ label?: string;
15
+ selected?: string;
16
+ children?: Snippet<[TreeNode]>;
17
+ }
18
+
19
+ let { nodes, label = 'Tree', selected, children }: Props = $props();
20
+ </script>
21
+
22
+ {#snippet branch(items: TreeNode[], depth: number)}
23
+ <ul class="lite-tree__list" role={depth === 0 ? 'tree' : 'group'} aria-label={depth === 0 ? label : undefined}>
24
+ {#each items as node (node.id)}
25
+ <li role="treeitem" aria-selected={selected === node.id} aria-disabled={node.disabled || undefined}>
26
+ {#if node.href && !node.disabled}
27
+ <a href={node.href} class:active={selected === node.id}>{node.label}</a>
28
+ {:else}
29
+ <span class:active={selected === node.id}>{node.label}</span>
30
+ {/if}
31
+ {#if node.children?.length}{@render branch(node.children, depth + 1)}{/if}
32
+ {#if children}{@render children(node)}{/if}
33
+ </li>
34
+ {/each}
35
+ </ul>
36
+ {/snippet}
37
+
38
+ <nav class="lite-tree" aria-label={label}>
39
+ {@render branch(nodes, 0)}
40
+ </nav>
41
+
42
+ <style>
43
+ .lite-tree__list { margin: 0; padding-left: 16px; list-style: none; }
44
+ .lite-tree > .lite-tree__list { padding-left: 0; }
45
+ .lite-tree__list li { padding: 2px 0; color: #1D2129; font-size: 13px; }
46
+ .lite-tree__list a, .lite-tree__list span { display: inline-block; padding: 4px 8px; border-radius: 4px; color: #1D2129; text-decoration: none; }
47
+ .lite-tree__list a:hover, .lite-tree__list .active { background: #E8F3FF; color: #165DFF; }
48
+ </style>
@@ -0,0 +1,17 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface TreeNode {
3
+ id: string;
4
+ label: string;
5
+ href?: string;
6
+ disabled?: boolean;
7
+ children?: TreeNode[];
8
+ }
9
+ interface Props {
10
+ nodes: TreeNode[];
11
+ label?: string;
12
+ selected?: string;
13
+ children?: Snippet<[TreeNode]>;
14
+ }
15
+ declare const LiteTree: import("svelte").Component<Props, {}, "">;
16
+ type LiteTree = ReturnType<typeof LiteTree>;
17
+ export default LiteTree;
@@ -69,7 +69,7 @@
69
69
  </tr>
70
70
  {:else}
71
71
  <tr>
72
- <td colspan={columns.length} style="text-align: center; color: #94a3b8; padding: 24px;">
72
+ <td colspan={columns.length} style="text-align: center; color: #86909C; padding: 24px;">
73
73
  No tree data
74
74
  </td>
75
75
  </tr>
@@ -0,0 +1,53 @@
1
+ <script lang="ts">
2
+ import type { HTMLFormAttributes } from 'svelte/elements';
3
+ import LiteSteps from './LiteSteps.svelte';
4
+ import LiteOtpInput from './LiteOtpInput.svelte';
5
+
6
+ interface Props {
7
+ current?: number;
8
+ /** Step labels; mirrors the reference `steps` prop. */
9
+ steps?: string[];
10
+ action: string;
11
+ method?: HTMLFormAttributes['method'];
12
+ codeName?: string;
13
+ submitLabel?: string;
14
+ title?: string;
15
+ /** Applied to the step list, matching the reference component. */
16
+ class?: string;
17
+ }
18
+
19
+ let {
20
+ current = 1,
21
+ steps = ['Password verified', 'Enter verification code', 'Access granted'],
22
+ action,
23
+ method = 'POST',
24
+ codeName = 'code',
25
+ submitLabel = 'Verify',
26
+ title = 'Two-factor authentication',
27
+ class: className = '',
28
+ }: Props = $props();
29
+ </script>
30
+
31
+ <section class="lite-card lite-two-factor" aria-label={title}>
32
+ <h2>{title}</h2>
33
+ <LiteSteps
34
+ current={current}
35
+ label="Progress"
36
+ class={className}
37
+ items={steps.map((step) => ({ title: step }))}
38
+ />
39
+ <form {method} {action} class="lite-two-factor__form">
40
+ <LiteOtpInput name={codeName} />
41
+ <button class="lite-btn lite-btn-primary" type="submit">{submitLabel}</button>
42
+ </form>
43
+ <p class="lite-muted">Recovery codes can be used once if the authenticator is unavailable.</p>
44
+ </section>
45
+
46
+ <style>
47
+ .lite-two-factor { display: block; }
48
+ .lite-two-factor h2 { margin: 0; color: #1D2129; font-size: 18px; }
49
+ .lite-two-factor__form { display: block; justify-items: start; }
50
+
51
+ .lite-two-factor > * + * { margin-top: 16px; }
52
+ .lite-two-factor__form > * + * { margin-top: 12px; }
53
+ </style>
@@ -0,0 +1,16 @@
1
+ import type { HTMLFormAttributes } from 'svelte/elements';
2
+ interface Props {
3
+ current?: number;
4
+ /** Step labels; mirrors the reference `steps` prop. */
5
+ steps?: string[];
6
+ action: string;
7
+ method?: HTMLFormAttributes['method'];
8
+ codeName?: string;
9
+ submitLabel?: string;
10
+ title?: string;
11
+ /** Applied to the step list, matching the reference component. */
12
+ class?: string;
13
+ }
14
+ declare const LiteTwoFactorStepper: import("svelte").Component<Props, {}, "">;
15
+ type LiteTwoFactorStepper = ReturnType<typeof LiteTwoFactorStepper>;
16
+ export default LiteTwoFactorStepper;
@@ -5,6 +5,8 @@
5
5
  oldTitle?: string;
6
6
  newTitle?: string;
7
7
  fieldLabels?: Record<string, string>;
8
+ /** Caller class merged with the built-in class list. */
9
+ class?: string;
8
10
  }
9
11
 
10
12
  let {
@@ -13,6 +15,7 @@
13
15
  oldTitle = 'Previous Version',
14
16
  newTitle = 'Current Version',
15
17
  fieldLabels = {},
18
+ class: className = '',
16
19
  }: Props = $props();
17
20
 
18
21
  const allKeys = $derived(
@@ -35,7 +38,7 @@
35
38
  }
36
39
  </script>
37
40
 
38
- <div class="lite-diff-viewer">
41
+ <div class="lite-diff-viewer {className}">
39
42
  <div class="lite-diff-header">
40
43
  <strong>Record Comparison</strong>
41
44
  </div>
@@ -55,7 +58,7 @@
55
58
  <td>
56
59
  <strong>{fieldLabels[key] || key}</strong>
57
60
  {#if status !== 'unchanged'}
58
- <span class="lite-badge lite-badge-{status}">[{status.toUpperCase()}]</span>
61
+ <span class="lite-badge lite-badge-{status}">[{status}]</span>
59
62
  {/if}
60
63
  </td>
61
64
  <td class="lite-diff-old">
@@ -83,14 +86,14 @@
83
86
  <style>
84
87
  .lite-diff-viewer {
85
88
  background: #ffffff;
86
- border: 1px solid #cbd5e1;
89
+ border: 1px solid #E5E6EB;
87
90
  border-radius: 6px;
88
91
  margin-bottom: 16px;
89
92
  }
90
93
  .lite-diff-header {
91
94
  padding: 10px 12px;
92
- background: #f8fafc;
93
- border-bottom: 1px solid #e2e8f0;
95
+ background: #F7F8FA;
96
+ border-bottom: 1px solid #E5E6EB;
94
97
  font-size: 13px;
95
98
  }
96
99
  .lite-diff-table {
@@ -99,31 +102,31 @@
99
102
  font-size: 12px;
100
103
  }
101
104
  .lite-diff-table th {
102
- background: #f1f5f9;
105
+ background: #F2F3F5;
103
106
  padding: 8px 12px;
104
107
  text-align: left;
105
108
  }
106
109
  .lite-diff-table td {
107
110
  padding: 8px 12px;
108
- border-top: 1px solid #e2e8f0;
111
+ border-top: 1px solid #E5E6EB;
109
112
  }
110
113
  .lite-diff-added {
111
- background: #ecfdf5;
114
+ background: #E8FFEA;
112
115
  }
113
116
  .lite-diff-removed {
114
- background: #fef2f2;
117
+ background: #FFECE8;
115
118
  }
116
119
  .lite-diff-modified {
117
- background: #fffbeb;
120
+ background: #FFF7E8;
118
121
  }
119
122
  .lite-diff-old del {
120
- color: #ef4444;
123
+ color: #F53F3F;
121
124
  }
122
125
  .lite-diff-new ins {
123
- color: #10b981;
126
+ color: #00B42A;
124
127
  text-decoration: none;
125
128
  }
126
129
  .lite-diff-new strong {
127
- color: #f59e0b;
130
+ color: #FF7D00;
128
131
  }
129
132
  </style>
@@ -4,6 +4,8 @@ interface Props {
4
4
  oldTitle?: string;
5
5
  newTitle?: string;
6
6
  fieldLabels?: Record<string, string>;
7
+ /** Caller class merged with the built-in class list. */
8
+ class?: string;
7
9
  }
8
10
  declare const LiteVersionDiffViewer: import("svelte").Component<Props, {}, "">;
9
11
  type LiteVersionDiffViewer = ReturnType<typeof LiteVersionDiffViewer>;
@@ -0,0 +1,67 @@
1
+ <script lang="ts">
2
+ interface VideoTrack {
3
+ src: string;
4
+ kind: 'subtitles' | 'captions' | 'chapters' | 'metadata' | 'descriptions';
5
+ label?: string;
6
+ language?: string;
7
+ default?: boolean;
8
+ }
9
+
10
+ interface Props {
11
+ src: string;
12
+ poster?: string;
13
+ title?: string;
14
+ media?: 'video' | 'audio';
15
+ autoplay?: boolean;
16
+ muted?: boolean;
17
+ loop?: boolean;
18
+ playsinline?: boolean;
19
+ tracks?: VideoTrack[];
20
+ downloadLabel?: string;
21
+ }
22
+
23
+ let {
24
+ src,
25
+ poster,
26
+ title,
27
+ media = 'video',
28
+ autoplay = false,
29
+ muted = false,
30
+ loop = false,
31
+ playsinline = true,
32
+ tracks = [],
33
+ downloadLabel = 'Download media',
34
+ }: Props = $props();
35
+ </script>
36
+
37
+ <figure class="lite-video-player">
38
+ {#if title}<figcaption class="lite-video-player__title">{title}</figcaption>{/if}
39
+ {#if media === 'audio'}
40
+ <audio controls preload="metadata" {autoplay} {muted} {loop} aria-label={title ?? 'Audio player'}>
41
+ <source {src} />
42
+ {#each tracks as track (track.src)}
43
+ <track src={track.src} kind={track.kind} label={track.label} srclang={track.language} default={track.default} />
44
+ {/each}
45
+ <a href={src}>{downloadLabel}</a>
46
+ </audio>
47
+ {:else}
48
+ <video controls preload="metadata" {poster} {autoplay} {muted} {loop} {playsinline} aria-label={title ?? 'Video player'}>
49
+ <source {src} />
50
+ {#each tracks as track (track.src)}
51
+ <track src={track.src} kind={track.kind} label={track.label} srclang={track.language} default={track.default} />
52
+ {/each}
53
+ <a href={src}>{downloadLabel}</a>
54
+ </video>
55
+ {/if}
56
+ <a class="lite-video-player__download" href={src} download>{downloadLabel}</a>
57
+ </figure>
58
+
59
+ <style>
60
+ .lite-video-player { display: block; margin: 0; padding: 12px; border: 1px solid #E5E6EB; border-radius: 8px; background: #fff; }
61
+ .lite-video-player__title { color: #1D2129; font-size: 14px; font-weight: 600; }
62
+ .lite-video-player video { display: block; width: 100%; max-height: 70vh; background: #000; }
63
+ .lite-video-player audio { display: block; width: 100%; }
64
+ .lite-video-player__download { justify-self: start; color: #165DFF; font-size: 12px; }
65
+
66
+ .lite-video-player > * + * { margin-top: 8px; }
67
+ </style>
@@ -0,0 +1,22 @@
1
+ interface VideoTrack {
2
+ src: string;
3
+ kind: 'subtitles' | 'captions' | 'chapters' | 'metadata' | 'descriptions';
4
+ label?: string;
5
+ language?: string;
6
+ default?: boolean;
7
+ }
8
+ interface Props {
9
+ src: string;
10
+ poster?: string;
11
+ title?: string;
12
+ media?: 'video' | 'audio';
13
+ autoplay?: boolean;
14
+ muted?: boolean;
15
+ loop?: boolean;
16
+ playsinline?: boolean;
17
+ tracks?: VideoTrack[];
18
+ downloadLabel?: string;
19
+ }
20
+ declare const LiteVideoPlayer: import("svelte").Component<Props, {}, "">;
21
+ type LiteVideoPlayer = ReturnType<typeof LiteVideoPlayer>;
22
+ export default LiteVideoPlayer;
@@ -42,7 +42,7 @@
42
42
  {/each}
43
43
  {#if items.length === 0}
44
44
  <tr>
45
- <td colspan={columns.length} style="text-align: center; color: #94a3b8; padding: 24px;">
45
+ <td colspan={columns.length} style="text-align: center; color: #86909C; padding: 24px;">
46
46
  No records to display
47
47
  </td>
48
48
  </tr>
@@ -1,26 +1,55 @@
1
1
  <script lang="ts">
2
2
  /**
3
- * SSR AutoSaveIndicator — Degraded to a static status label.
4
- * Without JS, there is no auto-save. This component simply renders
5
- * the last known save status passed from the server.
3
+ * SSR AutoSaveIndicator — renders the last known save state passed from the
4
+ * server. There is no auto-save loop without JS, but the state machine itself
5
+ * (idle / loading / success / error) is fully expressible in server HTML.
6
6
  */
7
+ type SaveStatus = 'idle' | 'loading' | 'success' | 'error';
8
+
7
9
  interface Props {
8
- status?: 'idle' | 'saved' | 'error';
10
+ status?: SaveStatus | 'saved';
11
+ /** Error detail, exposed as the accessible title on the error label. */
12
+ error?: string;
13
+ /** Overrides the built-in label for the current status. */
9
14
  message?: string;
15
+ /** Caller class merged with the built-in class list. */
16
+ class?: string;
10
17
  }
11
18
 
12
- let { status = 'idle', message }: Props = $props();
19
+ let { status = 'idle', error, message, class: className = '' }: Props = $props();
20
+
21
+ // `saved` was the old spelling of `success`; keep it working.
22
+ const normalized = $derived<SaveStatus>(status === 'saved' ? 'success' : status);
13
23
 
14
- const statusConfig: Record<NonNullable<Props['status']>, { icon: string; color: string; text: string }> = {
15
- idle: { icon: '☁', color: '#64748b', text: 'All changes saved' },
16
- saved: { icon: '✓', color: '#10b981', text: 'Saved' },
17
- error: { icon: '✕', color: '#ef4444', text: 'Save failed' },
24
+ const statusConfig: Record<SaveStatus, { icon: string; tone: string; text: string; label: string }> = {
25
+ idle: { icon: '☁', tone: 'idle', text: 'All changes saved', label: 'All changes saved' },
26
+ loading: { icon: '◌', tone: 'loading', text: 'Saving…', label: 'Saving' },
27
+ success: { icon: '✓', tone: 'success', text: 'Saved', label: 'Saved' },
28
+ error: { icon: '✕', tone: 'error', text: 'Save failed', label: 'Save failed' },
18
29
  };
19
30
 
20
- const cfg = $derived(statusConfig[status] ?? statusConfig['idle']);
31
+ const cfg = $derived(statusConfig[normalized] ?? statusConfig.idle);
21
32
  </script>
22
33
 
23
- <span class="lite-inline-sm" style="display: inline-flex; align-items: center; font-size: 13px; color: {cfg.color};">
24
- <span>{cfg.icon}</span>
25
- <span>{message ?? cfg.text}</span>
34
+ <span
35
+ class={`lite-auto-save lite-auto-save--${cfg.tone} ${className}`.trim()}
36
+ role="status"
37
+ aria-live="polite"
38
+ aria-label={cfg.label}
39
+ title={normalized === 'error' ? error : undefined}
40
+ >
41
+ <span aria-hidden="true">{cfg.icon}</span>
42
+ <span class="lite-auto-save__text">{message ?? cfg.text}</span>
43
+ {#if normalized === 'error' && error}
44
+ <span class="lite-auto-save__error">{error}</span>
45
+ {/if}
26
46
  </span>
47
+
48
+ <style>
49
+ .lite-auto-save { display: inline-flex; align-items: center; font-size: 13px; color: #4E5969; }
50
+ .lite-auto-save > * + * { margin-left: 6px; }
51
+ .lite-auto-save--loading { color: #165DFF; }
52
+ .lite-auto-save--success { color: #00B42A; }
53
+ .lite-auto-save--error { color: #F53F3F; }
54
+ .lite-auto-save__error { color: #86909C; font-size: 12px; }
55
+ </style>
@@ -1,11 +1,17 @@
1
1
  /**
2
- * SSR AutoSaveIndicator — Degraded to a static status label.
3
- * Without JS, there is no auto-save. This component simply renders
4
- * the last known save status passed from the server.
2
+ * SSR AutoSaveIndicator — renders the last known save state passed from the
3
+ * server. There is no auto-save loop without JS, but the state machine itself
4
+ * (idle / loading / success / error) is fully expressible in server HTML.
5
5
  */
6
+ type SaveStatus = 'idle' | 'loading' | 'success' | 'error';
6
7
  interface Props {
7
- status?: 'idle' | 'saved' | 'error';
8
+ status?: SaveStatus | 'saved';
9
+ /** Error detail, exposed as the accessible title on the error label. */
10
+ error?: string;
11
+ /** Overrides the built-in label for the current status. */
8
12
  message?: string;
13
+ /** Caller class merged with the built-in class list. */
14
+ class?: string;
9
15
  }
10
16
  declare const LiteAutoSaveIndicator: import("svelte").Component<Props, {}, "">;
11
17
  type LiteAutoSaveIndicator = ReturnType<typeof LiteAutoSaveIndicator>;
@@ -18,9 +18,9 @@
18
18
 
19
19
  <tr>
20
20
  {#each fields as field, _i (_i)}
21
- <th style="padding: 10px 12px; text-align: left; font-weight: 600; font-size: 13px; color: #475569; white-space: nowrap;">
21
+ <th style="padding: 10px 12px; text-align: left; font-weight: 600; font-size: 13px; color: #4E5969; white-space: nowrap;">
22
22
  {#if currentSort === field.key}
23
- <a href="?sort={field.key}&order={currentOrder === 'asc' ? 'desc' : 'asc'}" style="color: #0f172a; text-decoration: none;">
23
+ <a href="?sort={field.key}&order={currentOrder === 'asc' ? 'desc' : 'asc'}" style="color: #1D2129; text-decoration: none;">
24
24
  {field.label} {currentOrder === 'asc' ? '↑' : '↓'}
25
25
  </a>
26
26
  {:else}
@@ -13,6 +13,8 @@
13
13
  recordId?: string | number;
14
14
  basePath?: string;
15
15
  label?: string;
16
+ /** Caller class merged with the built-in class list. */
17
+ class?: string;
16
18
  }
17
19
 
18
20
  let {
@@ -21,6 +23,7 @@
21
23
  recordId,
22
24
  basePath = '/lite',
23
25
  label,
26
+ class: className = '',
24
27
  }: Props = $props();
25
28
 
26
29
  const href = $derived(
@@ -37,6 +40,6 @@
37
40
  );
38
41
  </script>
39
42
 
40
- <a href={href} class="lite-btn lite-btn-outline">
43
+ <a href={href} class="lite-btn lite-btn-outline {className}">
41
44
  {buttonLabel}
42
45
  </a>
@@ -10,6 +10,8 @@ interface Props {
10
10
  recordId?: string | number;
11
11
  basePath?: string;
12
12
  label?: string;
13
+ /** Caller class merged with the built-in class list. */
14
+ class?: string;
13
15
  }
14
16
  declare const LiteDrawerForm: import("svelte").Component<Props, {}, "">;
15
17
  type LiteDrawerForm = ReturnType<typeof LiteDrawerForm>;
@@ -25,7 +25,7 @@
25
25
  {#if editUrl}
26
26
  <a
27
27
  href={editUrl}
28
- style="font-size: 11px; color: #6366f1; text-decoration: none;"
28
+ style="font-size: 11px; color: #165DFF; text-decoration: none;"
29
29
  title="Edit {field.label}"
30
30
  >✎</a>
31
31
  {/if}
@@ -14,6 +14,8 @@
14
14
  recordId?: string | number;
15
15
  basePath?: string;
16
16
  label?: string;
17
+ /** Caller class merged with the built-in class list. */
18
+ class?: string;
17
19
  }
18
20
 
19
21
  let {
@@ -22,6 +24,7 @@
22
24
  recordId,
23
25
  basePath = '/lite',
24
26
  label,
27
+ class: className = '',
25
28
  }: Props = $props();
26
29
 
27
30
  const href = $derived(
@@ -39,6 +42,6 @@
39
42
  </script>
40
43
 
41
44
  <!-- In lite mode, modals degrade to a full-page navigation -->
42
- <a href={href} class="lite-btn lite-btn-primary">
45
+ <a href={href} class="lite-btn lite-btn-primary {className}">
43
46
  {buttonLabel}
44
47
  </a>