@svadmin/lite 0.17.0 → 0.22.1

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 (226) hide show
  1. package/README.md +71 -2
  2. package/dist/components/LiteActivityFeed.svelte +24 -2
  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 +4 -1
  9. package/dist/components/LiteApprovalActionCard.svelte.d.ts +2 -0
  10. package/dist/components/LiteAutoComplete.svelte +41 -0
  11. package/dist/components/LiteAutoComplete.svelte.d.ts +13 -0
  12. package/dist/components/LiteBackTop.svelte +16 -0
  13. package/dist/components/LiteBackTop.svelte.d.ts +8 -0
  14. package/dist/components/LiteBreadcrumbs.svelte +4 -1
  15. package/dist/components/LiteBreadcrumbs.svelte.d.ts +2 -0
  16. package/dist/components/LiteCalendar.svelte +124 -0
  17. package/dist/components/LiteCalendar.svelte.d.ts +20 -0
  18. package/dist/components/LiteCarousel.svelte +72 -0
  19. package/dist/components/LiteCarousel.svelte.d.ts +14 -0
  20. package/dist/components/LiteCollapse.svelte +49 -0
  21. package/dist/components/LiteCollapse.svelte.d.ts +15 -0
  22. package/dist/components/LiteColumnHeaderFilter.svelte +4 -1
  23. package/dist/components/LiteColumnHeaderFilter.svelte.d.ts +2 -0
  24. package/dist/components/LiteColumnSettings.svelte +4 -1
  25. package/dist/components/LiteColumnSettings.svelte.d.ts +2 -0
  26. package/dist/components/LiteCommentThread.svelte +113 -0
  27. package/dist/components/LiteCommentThread.svelte.d.ts +26 -0
  28. package/dist/components/LiteCountdown.svelte +49 -0
  29. package/dist/components/LiteCountdown.svelte.d.ts +10 -0
  30. package/dist/components/LiteDetailDrawer.svelte +45 -0
  31. package/dist/components/LiteDetailDrawer.svelte.d.ts +14 -0
  32. package/dist/components/LiteDraggableRowTable.svelte +4 -1
  33. package/dist/components/LiteDraggableRowTable.svelte.d.ts +2 -0
  34. package/dist/components/LiteDrawerForm.svelte +4 -1
  35. package/dist/components/LiteDrawerForm.svelte.d.ts +2 -0
  36. package/dist/components/LiteEditableTable.svelte +4 -1
  37. package/dist/components/LiteEditableTable.svelte.d.ts +2 -0
  38. package/dist/components/LiteEmptyState.svelte +8 -1
  39. package/dist/components/LiteEmptyState.svelte.d.ts +3 -0
  40. package/dist/components/LiteFilterBuilder.svelte +4 -1
  41. package/dist/components/LiteFilterBuilder.svelte.d.ts +2 -0
  42. package/dist/components/LiteFloatButton.svelte +54 -0
  43. package/dist/components/LiteFloatButton.svelte.d.ts +15 -0
  44. package/dist/components/LiteGrid.svelte +34 -0
  45. package/dist/components/LiteGrid.svelte.d.ts +11 -0
  46. package/dist/components/LiteImage.svelte +54 -0
  47. package/dist/components/LiteImage.svelte.d.ts +14 -0
  48. package/dist/components/LiteImageCropper.svelte +4 -1
  49. package/dist/components/LiteImageCropper.svelte.d.ts +2 -0
  50. package/dist/components/LiteImagePreview.svelte +36 -0
  51. package/dist/components/LiteImagePreview.svelte.d.ts +13 -0
  52. package/dist/components/LiteItemList.svelte +50 -0
  53. package/dist/components/LiteItemList.svelte.d.ts +15 -0
  54. package/dist/components/LiteJsonSchemaForm.svelte +4 -1
  55. package/dist/components/LiteJsonSchemaForm.svelte.d.ts +2 -0
  56. package/dist/components/LiteLayout.svelte +16 -4
  57. package/dist/components/LiteLayout.svelte.d.ts +8 -0
  58. package/dist/components/LiteLink.svelte +32 -0
  59. package/dist/components/LiteLink.svelte.d.ts +11 -0
  60. package/dist/components/LiteLogin.svelte +9 -2
  61. package/dist/components/LiteLogin.svelte.d.ts +2 -0
  62. package/dist/components/LiteMasterDetailView.svelte +4 -1
  63. package/dist/components/LiteMasterDetailView.svelte.d.ts +2 -0
  64. package/dist/components/LiteMediaLibraryModal.svelte +4 -1
  65. package/dist/components/LiteMediaLibraryModal.svelte.d.ts +2 -0
  66. package/dist/components/LiteMenu.svelte +22 -0
  67. package/dist/components/LiteMenu.svelte.d.ts +12 -0
  68. package/dist/components/LiteMenuList.svelte +55 -0
  69. package/dist/components/LiteMenuList.svelte.d.ts +17 -0
  70. package/dist/components/LiteModalForm.svelte +4 -1
  71. package/dist/components/LiteModalForm.svelte.d.ts +2 -0
  72. package/dist/components/LiteNotificationCenter.svelte +85 -0
  73. package/dist/components/LiteNotificationCenter.svelte.d.ts +22 -0
  74. package/dist/components/LiteOtpInput.svelte +50 -0
  75. package/dist/components/LiteOtpInput.svelte.d.ts +15 -0
  76. package/dist/components/LitePageHeader.svelte +34 -0
  77. package/dist/components/LitePageHeader.svelte.d.ts +13 -0
  78. package/dist/components/LitePagination.svelte +10 -2
  79. package/dist/components/LitePagination.svelte.d.ts +2 -0
  80. package/dist/components/LitePopconfirm.svelte +49 -0
  81. package/dist/components/LitePopconfirm.svelte.d.ts +14 -0
  82. package/dist/components/LitePresenceAvatarGroup.svelte +4 -1
  83. package/dist/components/LitePresenceAvatarGroup.svelte.d.ts +2 -0
  84. package/dist/components/LitePrintableBill.svelte +4 -1
  85. package/dist/components/LitePrintableBill.svelte.d.ts +2 -0
  86. package/dist/components/LiteProgress.svelte +46 -0
  87. package/dist/components/LiteProgress.svelte.d.ts +12 -0
  88. package/dist/components/LiteQRCode.svelte +62 -0
  89. package/dist/components/LiteQRCode.svelte.d.ts +14 -0
  90. package/dist/components/LiteResizeBox.svelte +34 -0
  91. package/dist/components/LiteResizeBox.svelte.d.ts +12 -0
  92. package/dist/components/LiteResult.svelte +52 -0
  93. package/dist/components/LiteResult.svelte.d.ts +14 -0
  94. package/dist/components/LiteRowActions.svelte +36 -0
  95. package/dist/components/LiteRowActions.svelte.d.ts +17 -0
  96. package/dist/components/LiteSensitiveDataMask.svelte +4 -1
  97. package/dist/components/LiteSensitiveDataMask.svelte.d.ts +2 -0
  98. package/dist/components/LiteSkeleton.svelte +100 -0
  99. package/dist/components/LiteSkeleton.svelte.d.ts +19 -0
  100. package/dist/components/LiteSpace.svelte +31 -0
  101. package/dist/components/LiteSpace.svelte.d.ts +12 -0
  102. package/dist/components/LiteSpin.svelte +27 -0
  103. package/dist/components/LiteSpin.svelte.d.ts +10 -0
  104. package/dist/components/LiteSplitPaneLayout.svelte +16 -4
  105. package/dist/components/LiteSplitPaneLayout.svelte.d.ts +8 -0
  106. package/dist/components/LiteStatistic.svelte +63 -0
  107. package/dist/components/LiteStatistic.svelte.d.ts +15 -0
  108. package/dist/components/LiteStatsCard.svelte +5 -2
  109. package/dist/components/LiteStatsCard.svelte.d.ts +2 -0
  110. package/dist/components/LiteStatusBadge.svelte +33 -0
  111. package/dist/components/LiteStatusBadge.svelte.d.ts +12 -0
  112. package/dist/components/LiteStatusTabs.svelte +35 -0
  113. package/dist/components/LiteStatusTabs.svelte.d.ts +14 -0
  114. package/dist/components/LiteStepForm.svelte +4 -1
  115. package/dist/components/LiteStepForm.svelte.d.ts +2 -0
  116. package/dist/components/LiteSteps.svelte +64 -0
  117. package/dist/components/LiteSteps.svelte.d.ts +18 -0
  118. package/dist/components/LiteTable.svelte +4 -1
  119. package/dist/components/LiteTable.svelte.d.ts +2 -0
  120. package/dist/components/LiteTableSummary.svelte +4 -1
  121. package/dist/components/LiteTableSummary.svelte.d.ts +2 -0
  122. package/dist/components/LiteTabs.svelte +28 -18
  123. package/dist/components/LiteTabs.svelte.d.ts +11 -2
  124. package/dist/components/LiteTag.svelte +31 -0
  125. package/dist/components/LiteTag.svelte.d.ts +13 -0
  126. package/dist/components/LiteTimeline.svelte +48 -0
  127. package/dist/components/LiteTimeline.svelte.d.ts +17 -0
  128. package/dist/components/LiteTour.svelte +54 -0
  129. package/dist/components/LiteTour.svelte.d.ts +15 -0
  130. package/dist/components/LiteTransfer.svelte +4 -1
  131. package/dist/components/LiteTransfer.svelte.d.ts +2 -0
  132. package/dist/components/LiteTree.svelte +48 -0
  133. package/dist/components/LiteTree.svelte.d.ts +17 -0
  134. package/dist/components/LiteTwoFactorStepper.svelte +53 -0
  135. package/dist/components/LiteTwoFactorStepper.svelte.d.ts +16 -0
  136. package/dist/components/LiteVersionDiffViewer.svelte +4 -1
  137. package/dist/components/LiteVersionDiffViewer.svelte.d.ts +2 -0
  138. package/dist/components/LiteVideoPlayer.svelte +67 -0
  139. package/dist/components/LiteVideoPlayer.svelte.d.ts +22 -0
  140. package/dist/components/advanced/LiteAutoSaveIndicator.svelte +42 -13
  141. package/dist/components/advanced/LiteAutoSaveIndicator.svelte.d.ts +10 -4
  142. package/dist/components/advanced/LiteDrawerForm.svelte +4 -1
  143. package/dist/components/advanced/LiteDrawerForm.svelte.d.ts +2 -0
  144. package/dist/components/advanced/LiteModalForm.svelte +4 -1
  145. package/dist/components/advanced/LiteModalForm.svelte.d.ts +2 -0
  146. package/dist/components/compatibility/LiteRealtimeStatus.svelte +41 -2
  147. package/dist/components/compatibility/LiteRealtimeStatus.svelte.d.ts +15 -0
  148. package/dist/components/fields/LiteBooleanField.svelte +4 -2
  149. package/dist/components/fields/LiteBooleanField.svelte.d.ts +2 -0
  150. package/dist/components/fields/LiteCascader.svelte +5 -2
  151. package/dist/components/fields/LiteCascader.svelte.d.ts +2 -0
  152. package/dist/components/fields/LiteDateField.svelte +39 -9
  153. package/dist/components/fields/LiteDateField.svelte.d.ts +2 -0
  154. package/dist/components/fields/LiteImageField.svelte +6 -2
  155. package/dist/components/fields/LiteImageField.svelte.d.ts +2 -0
  156. package/dist/components/fields/LiteMarkdownField.svelte +49 -3
  157. package/dist/components/fields/LiteMarkdownField.svelte.d.ts +5 -0
  158. package/dist/components/fields/LiteNumberField.svelte +5 -3
  159. package/dist/components/fields/LiteNumberField.svelte.d.ts +2 -0
  160. package/dist/components/fields/LiteRichTextField.svelte +45 -8
  161. package/dist/components/fields/LiteRichTextField.svelte.d.ts +3 -0
  162. package/dist/components/fields/LiteSelectField.svelte +5 -3
  163. package/dist/components/fields/LiteSelectField.svelte.d.ts +2 -0
  164. package/dist/components/fields/LiteTagField.svelte +38 -15
  165. package/dist/components/fields/LiteTagField.svelte.d.ts +2 -0
  166. package/dist/components/fields/LiteTextField.svelte +26 -5
  167. package/dist/components/fields/LiteTextField.svelte.d.ts +2 -0
  168. package/dist/components/fields/LiteTreeSelect.svelte +5 -2
  169. package/dist/components/fields/LiteTreeSelect.svelte.d.ts +2 -0
  170. package/dist/components/fields/LiteUrlField.svelte +5 -3
  171. package/dist/components/fields/LiteUrlField.svelte.d.ts +2 -0
  172. package/dist/components/layout/LiteSidebar.svelte +4 -1
  173. package/dist/components/layout/LiteSidebar.svelte.d.ts +2 -0
  174. package/dist/components/pages/LiteCreatePage.svelte +4 -1
  175. package/dist/components/pages/LiteCreatePage.svelte.d.ts +2 -0
  176. package/dist/components/pages/LiteEditPage.svelte +4 -1
  177. package/dist/components/pages/LiteEditPage.svelte.d.ts +2 -0
  178. package/dist/components/pages/LiteListPage.svelte +4 -1
  179. package/dist/components/pages/LiteListPage.svelte.d.ts +2 -0
  180. package/dist/components/pages/LiteShowPage.svelte +4 -1
  181. package/dist/components/pages/LiteShowPage.svelte.d.ts +2 -0
  182. package/dist/components/widgets/LiteAnomalyBadge.svelte +5 -2
  183. package/dist/components/widgets/LiteAnomalyBadge.svelte.d.ts +2 -0
  184. package/dist/components/widgets/LiteAreaChart.svelte +20 -0
  185. package/dist/components/widgets/LiteAreaChart.svelte.d.ts +10 -0
  186. package/dist/components/widgets/LiteChartSvg.svelte +102 -0
  187. package/dist/components/widgets/LiteChartSvg.svelte.d.ts +10 -0
  188. package/dist/components/widgets/LiteChartTable.svelte +44 -0
  189. package/dist/components/widgets/LiteChartTable.svelte.d.ts +10 -0
  190. package/dist/components/widgets/LiteDonutChart.svelte +20 -0
  191. package/dist/components/widgets/LiteDonutChart.svelte.d.ts +10 -0
  192. package/dist/components/widgets/LiteFunnelChart.svelte +20 -0
  193. package/dist/components/widgets/LiteFunnelChart.svelte.d.ts +10 -0
  194. package/dist/components/widgets/LiteGaugeChart.svelte +20 -0
  195. package/dist/components/widgets/LiteGaugeChart.svelte.d.ts +10 -0
  196. package/dist/components/widgets/LiteHeatmapChart.svelte +20 -0
  197. package/dist/components/widgets/LiteHeatmapChart.svelte.d.ts +10 -0
  198. package/dist/components/widgets/LiteInsightCard.svelte +34 -12
  199. package/dist/components/widgets/LiteInsightCard.svelte.d.ts +7 -4
  200. package/dist/components/widgets/LiteLineChart.svelte +6 -3
  201. package/dist/components/widgets/LiteLineChart.svelte.d.ts +0 -5
  202. package/dist/components/widgets/LitePieChart.svelte +5 -3
  203. package/dist/components/widgets/LitePieChart.svelte.d.ts +0 -5
  204. package/dist/components/widgets/LiteRadarChart.svelte +20 -0
  205. package/dist/components/widgets/LiteRadarChart.svelte.d.ts +10 -0
  206. package/dist/components/widgets/LiteRoseChart.svelte +20 -0
  207. package/dist/components/widgets/LiteRoseChart.svelte.d.ts +10 -0
  208. package/dist/components/widgets/LiteScatterChart.svelte +20 -0
  209. package/dist/components/widgets/LiteScatterChart.svelte.d.ts +10 -0
  210. package/dist/components/widgets/LiteWaterfallChart.svelte +20 -0
  211. package/dist/components/widgets/LiteWaterfallChart.svelte.d.ts +10 -0
  212. package/dist/components/widgets/chart-geometry.d.ts +65 -0
  213. package/dist/components/widgets/chart-geometry.js +229 -0
  214. package/dist/components/widgets/index.d.ts +10 -0
  215. package/dist/components/widgets/index.js +10 -0
  216. package/dist/index.d.ts +40 -0
  217. package/dist/index.js +47 -0
  218. package/dist/lite-code-theme.css +139 -0
  219. package/dist/lite.css +108 -1
  220. package/dist/rich-content.d.ts +47 -0
  221. package/dist/rich-content.js +498 -0
  222. package/dist/schema-generator.js +3 -1
  223. package/dist/server-adapter.js +6 -11
  224. package/dist/value-normalization.d.ts +4 -0
  225. package/dist/value-normalization.js +13 -0
  226. package/package.json +18 -4
@@ -0,0 +1,36 @@
1
+ <script lang="ts">
2
+ import type { HTMLFormAttributes } from 'svelte/elements';
3
+
4
+ interface RowAction {
5
+ id: string;
6
+ label: string;
7
+ href?: string;
8
+ action?: string;
9
+ method?: HTMLFormAttributes['method'];
10
+ danger?: boolean;
11
+ disabled?: boolean;
12
+ }
13
+
14
+ interface Props {
15
+ actions: RowAction[];
16
+ label?: string;
17
+ }
18
+
19
+ let { actions, label = 'Row actions' }: Props = $props();
20
+ </script>
21
+
22
+ <div class="lite-inline-xs" role="group" aria-label={label}>
23
+ {#each actions as action (action.id)}
24
+ {#if action.disabled}
25
+ <span class="lite-btn lite-btn-sm" aria-disabled="true">{action.label}</span>
26
+ {:else if action.href}
27
+ <a class="lite-btn lite-btn-sm" class:lite-btn-danger={action.danger} href={action.href}>{action.label}</a>
28
+ {:else if action.action}
29
+ <form method={action.method ?? 'POST'} action={action.action}>
30
+ <button class="lite-btn lite-btn-sm" class:lite-btn-danger={action.danger} type="submit">{action.label}</button>
31
+ </form>
32
+ {:else}
33
+ <span class="lite-muted">{action.label}</span>
34
+ {/if}
35
+ {/each}
36
+ </div>
@@ -0,0 +1,17 @@
1
+ import type { HTMLFormAttributes } from 'svelte/elements';
2
+ interface RowAction {
3
+ id: string;
4
+ label: string;
5
+ href?: string;
6
+ action?: string;
7
+ method?: HTMLFormAttributes['method'];
8
+ danger?: boolean;
9
+ disabled?: boolean;
10
+ }
11
+ interface Props {
12
+ actions: RowAction[];
13
+ label?: string;
14
+ }
15
+ declare const LiteRowActions: import("svelte").Component<Props, {}, "">;
16
+ type LiteRowActions = ReturnType<typeof LiteRowActions>;
17
+ export default LiteRowActions;
@@ -2,11 +2,14 @@
2
2
  interface Props {
3
3
  value?: string | number | null;
4
4
  type?: 'phone' | 'id-card' | 'email' | 'bank-card' | 'secret' | 'custom';
5
+ /** Caller class merged with the built-in class list. */
6
+ class?: string;
5
7
  }
6
8
 
7
9
  let {
8
10
  value = '',
9
11
  type = 'phone',
12
+ class: className = '',
10
13
  }: Props = $props();
11
14
 
12
15
  const rawString = $derived(String(value ?? ''));
@@ -31,6 +34,6 @@
31
34
  const masked = $derived(mask(rawString, type));
32
35
  </script>
33
36
 
34
- <span class="lite-sensitive-mask" style="font-family: monospace; font-size: 12px;">
37
+ <span class="lite-sensitive-mask {className}" style="font-family: monospace; font-size: 12px;">
35
38
  {masked}
36
39
  </span>
@@ -1,6 +1,8 @@
1
1
  interface Props {
2
2
  value?: string | number | null;
3
3
  type?: 'phone' | 'id-card' | 'email' | 'bank-card' | 'secret' | 'custom';
4
+ /** Caller class merged with the built-in class list. */
5
+ class?: string;
4
6
  }
5
7
  declare const LiteSensitiveDataMask: import("svelte").Component<Props, {}, "">;
6
8
  type LiteSensitiveDataMask = ReturnType<typeof LiteSensitiveDataMask>;
@@ -0,0 +1,100 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ lines?: number;
4
+ width?: string;
5
+ height?: string;
6
+ circle?: boolean;
7
+ label?: string;
8
+ /**
9
+ * Page-level skeleton layout, mirroring the reference PageSkeleton: header,
10
+ * then `rows` blocks of the requested shape. `text` keeps the plain lines.
11
+ */
12
+ variant?: 'text' | 'list' | 'show' | 'form';
13
+ /** Number of body rows/blocks for the page variants. */
14
+ rows?: number;
15
+ /** Caller class merged with the built-in class list. */
16
+ class?: string;
17
+ }
18
+
19
+ let {
20
+ lines = 3,
21
+ width = '100%',
22
+ height = '14px',
23
+ circle = false,
24
+ label = 'Loading',
25
+ variant = 'text',
26
+ rows = 5,
27
+ class: className = '',
28
+ }: Props = $props();
29
+
30
+ const blockCount = $derived(Math.max(1, rows));
31
+ </script>
32
+
33
+ <div
34
+ class={`lite-skeleton lite-skeleton--${variant} ${className}`.trim()}
35
+ role="status"
36
+ aria-label={label}
37
+ aria-busy="true"
38
+ data-variant={variant}
39
+ >
40
+ {#if variant !== 'text'}
41
+ <!-- Page-level skeleton: same structure as the reference, generated from props. -->
42
+ <div class="lite-skeleton__header" aria-hidden="true">
43
+ <span class="lite-skeleton__line" style="width:200px;height:32px"></span>
44
+ <span class="lite-skeleton__line" style="width:300px"></span>
45
+ {#if variant === 'list'}<span class="lite-skeleton__line" style="width:120px;height:40px"></span>{/if}
46
+ </div>
47
+ <div class="lite-skeleton__panel" aria-hidden="true">
48
+ {#each Array.from({ length: blockCount }, (_, index) => index) as index (index)}
49
+ <div class="lite-skeleton__block" data-shape={variant}>
50
+ {#if variant === 'list'}
51
+ <span class="lite-skeleton__line" style="flex:1;height:24px"></span>
52
+ <span class="lite-skeleton__line" style="flex:1;height:24px"></span>
53
+ <span class="lite-skeleton__line" style="flex:1;height:24px"></span>
54
+ <span class="lite-skeleton__line" style="flex:1;height:24px"></span>
55
+ {:else if variant === 'show'}
56
+ <span class="lite-skeleton__line" style="width:100px"></span>
57
+ <span class="lite-skeleton__line" style="width:250px;height:24px"></span>
58
+ {:else}
59
+ <span class="lite-skeleton__line" style="width:100px"></span>
60
+ <span class="lite-skeleton__line" style="width:100%;max-width:420px;height:40px"></span>
61
+ {/if}
62
+ </div>
63
+ {/each}
64
+ {#if variant === 'form'}
65
+ <div class="lite-skeleton__block" data-shape="actions">
66
+ <span class="lite-skeleton__line" style="width:100px;height:40px"></span>
67
+ <span class="lite-skeleton__line" style="width:100px;height:40px"></span>
68
+ </div>
69
+ {/if}
70
+ </div>
71
+ {:else if circle}
72
+ <span class="lite-skeleton__circle" aria-hidden="true"></span>
73
+ {:else}
74
+ {#each Array.from({ length: Math.max(1, lines) }, (_, index) => index) as index (index)}
75
+ <span class="lite-skeleton__line" style={`width:${index === lines - 1 && lines > 1 ? '65%' : width};height:${height}`} aria-hidden="true"></span>
76
+ {/each}
77
+ {/if}
78
+ <span class="lite-skeleton__sr">{label}</span>
79
+ </div>
80
+
81
+ <style>
82
+ .lite-skeleton { display: block; }
83
+ .lite-skeleton__line, .lite-skeleton__circle { display: block; background: #F2F3F5; animation: lite-skeleton-pulse 1.4s ease-in-out infinite; }
84
+ .lite-skeleton__line { border-radius: 4px; }
85
+ .lite-skeleton__circle { width: 40px; height: 40px; border-radius: 999px; }
86
+ .lite-skeleton__sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
87
+ @keyframes lite-skeleton-pulse { 50% { opacity: 0.5; } }
88
+
89
+ .lite-skeleton__line + .lite-skeleton__line { margin-top: 8px; }
90
+
91
+ .lite-skeleton__header { display: flex; flex-wrap: wrap; }
92
+ .lite-skeleton__header > * + * { margin-left: 8px; }
93
+ .lite-skeleton__header > :first-child { flex: 0 0 auto; }
94
+ .lite-skeleton__panel { margin-top: 24px; padding: 16px; border: 1px solid #E5E6EB; border-radius: 6px; }
95
+ .lite-skeleton__block + .lite-skeleton__block { margin-top: 16px; }
96
+ .lite-skeleton__block[data-shape='list'] { display: flex; }
97
+ .lite-skeleton__block[data-shape='list'] > * + * { margin-left: 16px; }
98
+ .lite-skeleton__block[data-shape='actions'] { display: flex; }
99
+ .lite-skeleton__block[data-shape='actions'] > * + * { margin-left: 8px; }
100
+ </style>
@@ -0,0 +1,19 @@
1
+ interface Props {
2
+ lines?: number;
3
+ width?: string;
4
+ height?: string;
5
+ circle?: boolean;
6
+ label?: string;
7
+ /**
8
+ * Page-level skeleton layout, mirroring the reference PageSkeleton: header,
9
+ * then `rows` blocks of the requested shape. `text` keeps the plain lines.
10
+ */
11
+ variant?: 'text' | 'list' | 'show' | 'form';
12
+ /** Number of body rows/blocks for the page variants. */
13
+ rows?: number;
14
+ /** Caller class merged with the built-in class list. */
15
+ class?: string;
16
+ }
17
+ declare const LiteSkeleton: import("svelte").Component<Props, {}, "">;
18
+ type LiteSkeleton = ReturnType<typeof LiteSkeleton>;
19
+ export default LiteSkeleton;
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ interface Props {
5
+ direction?: 'horizontal' | 'vertical';
6
+ size?: 'sm' | 'md' | 'lg';
7
+ wrap?: boolean;
8
+ /** Caller class merged with the built-in class list. */
9
+ class?: string;
10
+ children: Snippet;
11
+ }
12
+
13
+ let { direction = 'horizontal', size = 'md', wrap = false, class: className = '', children }: Props = $props();
14
+ </script>
15
+
16
+ <div class="lite-space {className}" data-direction={direction} data-size={size} data-wrap={wrap || undefined}>
17
+ {@render children()}
18
+ </div>
19
+
20
+ <style>
21
+ .lite-space { display: flex; }
22
+ .lite-space[data-direction='horizontal'] { flex-direction: row; }
23
+ .lite-space[data-direction='vertical'] { flex-direction: column; }
24
+ .lite-space[data-wrap] { flex-wrap: wrap; }
25
+ .lite-space[data-direction='horizontal'] > * + * { margin-left: 8px; }
26
+ .lite-space[data-direction='vertical'] > * + * { margin-top: 8px; }
27
+ .lite-space[data-size='sm'][data-direction='horizontal'] > * + * { margin-left: 4px; }
28
+ .lite-space[data-size='sm'][data-direction='vertical'] > * + * { margin-top: 4px; }
29
+ .lite-space[data-size='lg'][data-direction='horizontal'] > * + * { margin-left: 16px; }
30
+ .lite-space[data-size='lg'][data-direction='vertical'] > * + * { margin-top: 16px; }
31
+ </style>
@@ -0,0 +1,12 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ direction?: 'horizontal' | 'vertical';
4
+ size?: 'sm' | 'md' | 'lg';
5
+ wrap?: boolean;
6
+ /** Caller class merged with the built-in class list. */
7
+ class?: string;
8
+ children: Snippet;
9
+ }
10
+ declare const LiteSpace: import("svelte").Component<Props, {}, "">;
11
+ type LiteSpace = ReturnType<typeof LiteSpace>;
12
+ export default LiteSpace;
@@ -0,0 +1,27 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ interface Props {
5
+ spinning?: boolean;
6
+ size?: 'sm' | 'md' | 'lg';
7
+ label?: string;
8
+ children?: Snippet;
9
+ }
10
+
11
+ let { spinning = true, size = 'md', label = 'Loading', children }: Props = $props();
12
+ const px = $derived(size === 'sm' ? 16 : size === 'lg' ? 36 : 24);
13
+ </script>
14
+
15
+ <div class="lite-spin" aria-busy={spinning || undefined}>
16
+ {#if spinning}
17
+ <span class="lite-spin__indicator" style={`width:${px}px;height:${px}px`} role="status" aria-label={label}></span>
18
+ {/if}
19
+ {#if children}{@render children()}{/if}
20
+ </div>
21
+
22
+ <style>
23
+ .lite-spin { display: inline-flex; align-items: center; }
24
+ .lite-spin__indicator { display: inline-block; border: 2px solid #E5E6EB; border-top-color: #165DFF; border-radius: 999px; animation: lite-spin 0.8s linear infinite; }
25
+ @keyframes lite-spin { to { transform: rotate(360deg); } }
26
+ @media (prefers-reduced-motion: reduce) { .lite-spin__indicator { animation: none; } }
27
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ spinning?: boolean;
4
+ size?: 'sm' | 'md' | 'lg';
5
+ label?: string;
6
+ children?: Snippet;
7
+ }
8
+ declare const LiteSpin: import("svelte").Component<Props, {}, "">;
9
+ type LiteSpin = ReturnType<typeof LiteSpin>;
10
+ export default LiteSpin;
@@ -5,25 +5,37 @@
5
5
  direction?: 'horizontal' | 'vertical';
6
6
  pane1?: Snippet;
7
7
  pane2?: Snippet;
8
+ /** Caller class for the outer split container. */
9
+ class?: string;
10
+ /** Caller class for the first pane. */
11
+ classPane1?: string;
12
+ /** Caller class for the divider. */
13
+ classDivider?: string;
14
+ /** Caller class for the second pane. */
15
+ classPane2?: string;
8
16
  }
9
17
 
10
18
  let {
11
19
  direction = 'horizontal',
12
20
  pane1,
13
21
  pane2,
22
+ class: className = '',
23
+ classPane1 = '',
24
+ classDivider = '',
25
+ classPane2 = '',
14
26
  }: Props = $props();
15
27
  </script>
16
28
 
17
- <div class="lite-split-layout lite-split-{direction}">
18
- <div class="lite-split-pane-1">
29
+ <div class={`lite-split-layout lite-split-${direction} ${className}`.trim()}>
30
+ <div class={`lite-split-pane-1 ${classPane1}`.trim()}>
19
31
  {#if pane1}
20
32
  {@render pane1()}
21
33
  {/if}
22
34
  </div>
23
35
 
24
- <div class="lite-split-divider"></div>
36
+ <div class={`lite-split-divider ${classDivider}`.trim()}></div>
25
37
 
26
- <div class="lite-split-pane-2">
38
+ <div class={`lite-split-pane-2 ${classPane2}`.trim()}>
27
39
  {#if pane2}
28
40
  {@render pane2()}
29
41
  {/if}
@@ -3,6 +3,14 @@ interface Props {
3
3
  direction?: 'horizontal' | 'vertical';
4
4
  pane1?: Snippet;
5
5
  pane2?: Snippet;
6
+ /** Caller class for the outer split container. */
7
+ class?: string;
8
+ /** Caller class for the first pane. */
9
+ classPane1?: string;
10
+ /** Caller class for the divider. */
11
+ classDivider?: string;
12
+ /** Caller class for the second pane. */
13
+ classPane2?: string;
6
14
  }
7
15
  declare const LiteSplitPaneLayout: import("svelte").Component<Props, {}, "">;
8
16
  type LiteSplitPaneLayout = ReturnType<typeof LiteSplitPaneLayout>;
@@ -0,0 +1,63 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ title?: string;
4
+ value: number | string;
5
+ precision?: number;
6
+ prefix?: string;
7
+ suffix?: string;
8
+ trend?: 'up' | 'down' | 'neutral';
9
+ trendLabel?: string;
10
+ loading?: boolean;
11
+ /** Caller class merged with the built-in class list. */
12
+ class?: string;
13
+ }
14
+
15
+ let {
16
+ title,
17
+ value,
18
+ precision = 0,
19
+ prefix,
20
+ suffix,
21
+ trend,
22
+ trendLabel,
23
+ loading = false,
24
+ class: className = '',
25
+ }: Props = $props();
26
+
27
+ const display = $derived(
28
+ typeof value === 'number'
29
+ ? new Intl.NumberFormat(undefined, { minimumFractionDigits: precision, maximumFractionDigits: precision }).format(value)
30
+ : value,
31
+ );
32
+ </script>
33
+
34
+ <div class="lite-statistic {className}" aria-busy={loading || undefined}>
35
+ {#if title}<p class="lite-statistic__title">{title}</p>{/if}
36
+ <p class="lite-statistic__value">
37
+ {#if prefix}<span>{prefix}</span>{/if}
38
+ {#if loading}<span class="lite-statistic__skeleton" aria-hidden="true"></span><span class="lite-statistic__sr">{display}</span>{:else}{display}{/if}
39
+ {#if suffix}<span>{suffix}</span>{/if}
40
+ </p>
41
+ {#if trend || trendLabel}
42
+ <p class="lite-statistic__trend" data-trend={trend ?? 'neutral'}>
43
+ {#if trend === 'up'}↑{:else if trend === 'down'}↓{:else}→{/if}
44
+ {#if trendLabel}<span>{trendLabel}</span>{/if}
45
+ </p>
46
+ {/if}
47
+ </div>
48
+
49
+ <style>
50
+ .lite-statistic { display: block; min-width: 0; }
51
+ .lite-statistic__title { margin: 0; color: #86909C; font-size: 13px; }
52
+ .lite-statistic__value { display: flex; align-items: baseline; margin: 0; color: #1D2129; font-size: 24px; font-weight: 650; line-height: 1.2; }
53
+ .lite-statistic__value > span:first-child, .lite-statistic__value > span:last-child { color: #86909C; font-size: 13px; font-weight: 500; }
54
+ .lite-statistic__trend { display: flex; margin: 0; color: #86909C; font-size: 12px; }
55
+ .lite-statistic__trend[data-trend='up'] { color: #009A29; }
56
+ .lite-statistic__trend[data-trend='down'] { color: #F53F3F; }
57
+ .lite-statistic__skeleton { display: inline-block; width: 72px; height: 22px; border-radius: 4px; background: #F2F3F5; animation: lite-statistic-pulse 1.4s ease-in-out infinite; }
58
+ .lite-statistic__sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
59
+ @keyframes lite-statistic-pulse { 50% { opacity: 0.5; } }
60
+
61
+ .lite-statistic__value > * + * { margin-left: 4px; }
62
+ .lite-statistic__trend > * + * { margin-left: 4px; }
63
+ </style>
@@ -0,0 +1,15 @@
1
+ interface Props {
2
+ title?: string;
3
+ value: number | string;
4
+ precision?: number;
5
+ prefix?: string;
6
+ suffix?: string;
7
+ trend?: 'up' | 'down' | 'neutral';
8
+ trendLabel?: string;
9
+ loading?: boolean;
10
+ /** Caller class merged with the built-in class list. */
11
+ class?: string;
12
+ }
13
+ declare const LiteStatistic: import("svelte").Component<Props, {}, "">;
14
+ type LiteStatistic = ReturnType<typeof LiteStatistic>;
15
+ export default LiteStatistic;
@@ -20,6 +20,8 @@
20
20
  icon?: string;
21
21
  /** Link to detail page */
22
22
  href?: string;
23
+ /** Caller class merged with the built-in class list. */
24
+ class?: string;
23
25
  }
24
26
 
25
27
  let {
@@ -30,11 +32,12 @@
30
32
  trendValue,
31
33
  icon,
32
34
  href,
35
+ class: className = '',
33
36
  }: Props = $props();
34
37
  </script>
35
38
 
36
39
  {#if href}
37
- <a href={href} class="lite-stats-card lite-card" style="text-decoration:none;display:block;">
40
+ <a href={href} class="lite-stats-card lite-card {className}" style="text-decoration:none;display:block;">
38
41
  {#if icon}
39
42
  <div class="lite-stats-icon">{icon}</div>
40
43
  {/if}
@@ -51,7 +54,7 @@
51
54
  {/if}
52
55
  </a>
53
56
  {:else}
54
- <div class="lite-stats-card lite-card">
57
+ <div class="lite-stats-card lite-card {className}">
55
58
  {#if icon}
56
59
  <div class="lite-stats-icon">{icon}</div>
57
60
  {/if}
@@ -18,6 +18,8 @@ interface Props {
18
18
  icon?: string;
19
19
  /** Link to detail page */
20
20
  href?: string;
21
+ /** Caller class merged with the built-in class list. */
22
+ class?: string;
21
23
  }
22
24
  declare const LiteStatsCard: import("svelte").Component<Props, {}, "">;
23
25
  type LiteStatsCard = ReturnType<typeof LiteStatsCard>;
@@ -0,0 +1,33 @@
1
+ <script lang="ts">
2
+ import LiteBadge, { type LiteBadgeVariant } from './LiteBadge.svelte';
3
+
4
+ interface Props {
5
+ status: string;
6
+ tone?: LiteBadgeVariant;
7
+ label?: string;
8
+ href?: string;
9
+ /** Caller class merged with the built-in class list. */
10
+ class?: string;
11
+ }
12
+
13
+ let { status, tone, label, href, class: className = '' }: Props = $props();
14
+
15
+ const normalized = $derived(status.toLowerCase().replace(/[\s_]+/g, '-'));
16
+ const resolvedTone = $derived(tone ?? (
17
+ ['active', 'success', 'completed', 'approved', 'online', 'enabled'].includes(normalized) ? 'success'
18
+ : ['error', 'failed', 'rejected', 'danger', 'offline', 'disabled'].includes(normalized) ? 'destructive'
19
+ : ['warning', 'pending', 'review', 'processing'].includes(normalized) ? 'warning'
20
+ : ['info', 'new', 'draft'].includes(normalized) ? 'info'
21
+ : 'secondary'
22
+ ));
23
+ </script>
24
+
25
+ {#if href}
26
+ <a href={href} class="lite-status-badge {className}"><LiteBadge variant={resolvedTone}>{label ?? status}</LiteBadge></a>
27
+ {:else}
28
+ <span class="lite-status-badge {className}"><LiteBadge variant={resolvedTone}>{label ?? status}</LiteBadge></span>
29
+ {/if}
30
+
31
+ <style>
32
+ .lite-status-badge { display: inline-flex; text-decoration: none; }
33
+ </style>
@@ -0,0 +1,12 @@
1
+ import { type LiteBadgeVariant } from './LiteBadge.svelte';
2
+ interface Props {
3
+ status: string;
4
+ tone?: LiteBadgeVariant;
5
+ label?: string;
6
+ href?: string;
7
+ /** Caller class merged with the built-in class list. */
8
+ class?: string;
9
+ }
10
+ declare const LiteStatusBadge: import("svelte").Component<Props, {}, "">;
11
+ type LiteStatusBadge = ReturnType<typeof LiteStatusBadge>;
12
+ export default LiteStatusBadge;
@@ -0,0 +1,35 @@
1
+ <script lang="ts">
2
+ interface StatusTab {
3
+ id: string;
4
+ label: string;
5
+ count?: number;
6
+ href: string;
7
+ active?: boolean;
8
+ }
9
+
10
+ interface Props {
11
+ tabs: StatusTab[];
12
+ label?: string;
13
+ }
14
+
15
+ let { tabs, label = 'Status tabs' }: Props = $props();
16
+ </script>
17
+
18
+ <nav class="lite-status-tabs" aria-label={label}>
19
+ {#each tabs as tab (tab.id)}
20
+ <a href={tab.href} class:active={tab.active} aria-current={tab.active ? 'page' : undefined}>
21
+ {tab.label}
22
+ {#if tab.count !== undefined}<span class="lite-badge lite-badge-secondary">{tab.count}</span>{/if}
23
+ </a>
24
+ {/each}
25
+ </nav>
26
+
27
+ <style>
28
+ .lite-status-tabs { display: flex; flex-wrap: wrap; border-bottom: 1px solid #E5E6EB; }
29
+ .lite-status-tabs a { display: inline-flex; align-items: center; padding: 8px 12px; border-bottom: 2px solid transparent; color: #4E5969; font-size: 13px; text-decoration: none; }
30
+ .lite-status-tabs a:hover { color: #165DFF; text-decoration: none; }
31
+ .lite-status-tabs a.active { border-bottom-color: #165DFF; color: #165DFF; font-weight: 600; }
32
+
33
+ .lite-status-tabs a + a { margin-left: 4px; }
34
+ .lite-status-tabs a > * + * { margin-left: 6px; }
35
+ </style>
@@ -0,0 +1,14 @@
1
+ interface StatusTab {
2
+ id: string;
3
+ label: string;
4
+ count?: number;
5
+ href: string;
6
+ active?: boolean;
7
+ }
8
+ interface Props {
9
+ tabs: StatusTab[];
10
+ label?: string;
11
+ }
12
+ declare const LiteStatusTabs: import("svelte").Component<Props, {}, "">;
13
+ type LiteStatusTabs = ReturnType<typeof LiteStatusTabs>;
14
+ export default LiteStatusTabs;
@@ -15,6 +15,8 @@
15
15
  nextText?: string;
16
16
  prevText?: string;
17
17
  children?: Snippet;
18
+ /** Caller class merged with the built-in class list. */
19
+ class?: string;
18
20
  }
19
21
 
20
22
  let {
@@ -26,10 +28,11 @@
26
28
  nextText = 'Next Step',
27
29
  prevText = 'Previous Step',
28
30
  children,
31
+ class: className = '',
29
32
  }: Props = $props();
30
33
  </script>
31
34
 
32
- <div class="lite-step-form-card">
35
+ <div class="lite-step-form-card {className}">
33
36
  <!-- Step Indicators -->
34
37
  <div class="lite-step-header">
35
38
  {#each steps as step, index (index)}
@@ -12,6 +12,8 @@ interface Props {
12
12
  nextText?: string;
13
13
  prevText?: string;
14
14
  children?: Snippet;
15
+ /** Caller class merged with the built-in class list. */
16
+ class?: string;
15
17
  }
16
18
  declare const LiteStepForm: import("svelte").Component<Props, {}, "">;
17
19
  type LiteStepForm = ReturnType<typeof LiteStepForm>;