@rimelight/ui 0.0.34 → 0.0.36

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 (185) hide show
  1. package/README.md +1 -0
  2. package/package.json +19 -24
  3. package/src/components/astro/RLAAccordion.astro +94 -18
  4. package/src/components/astro/RLAAvatar.astro +135 -68
  5. package/src/components/astro/RLABadge.astro +4 -2
  6. package/src/components/astro/RLABanner.astro +138 -23
  7. package/src/components/astro/RLABreadcrumb.astro +13 -0
  8. package/src/components/astro/RLAButton.astro +8 -4
  9. package/src/components/astro/RLACallout.astro +112 -0
  10. package/src/components/astro/RLACard.astro +6 -5
  11. package/src/components/astro/RLACarousel.astro +104 -75
  12. package/src/components/astro/RLAChart.astro +4 -1
  13. package/src/components/astro/RLAChip.astro +11 -5
  14. package/src/components/astro/RLACollapsible.astro +4 -1
  15. package/src/components/astro/RLAColorArea.astro +432 -0
  16. package/src/components/astro/RLAColorField.astro +300 -0
  17. package/src/components/astro/RLAColorSlider.astro +413 -0
  18. package/src/components/astro/RLAConfirm.astro +13 -11
  19. package/src/components/astro/RLACopyMarkdown.astro +78 -0
  20. package/src/components/astro/RLADate.astro +30 -0
  21. package/src/components/astro/RLADrawer.astro +50 -3
  22. package/src/components/astro/RLADropdownMenu.astro +78 -51
  23. package/src/components/astro/RLAFieldGroup.astro +4 -1
  24. package/src/components/astro/RLAFileUpload.astro +114 -100
  25. package/src/components/astro/RLAFooter.astro +2 -1
  26. package/src/components/astro/RLAFormField.astro +10 -6
  27. package/src/components/astro/RLAGrid.astro +31 -39
  28. package/src/components/astro/RLAHead.astro +139 -39
  29. package/src/components/astro/RLAHeader.astro +2 -1
  30. package/src/components/astro/RLAImage.astro +274 -251
  31. package/src/components/astro/RLAInput.astro +14 -9
  32. package/src/components/astro/RLAInputMenu.astro +119 -83
  33. package/src/components/astro/RLAKbd.astro +5 -5
  34. package/src/components/astro/RLALayoutGrid.astro +395 -0
  35. package/src/components/astro/RLALink.astro +23 -1
  36. package/src/components/astro/RLALinkGroup.astro +99 -99
  37. package/src/components/astro/RLALocaleSelector.astro +34 -41
  38. package/src/components/astro/RLALogo.astro +117 -90
  39. package/src/components/astro/RLAModal.astro +48 -18
  40. package/src/components/astro/RLANavigationMenu.astro +381 -326
  41. package/src/components/astro/{RLADocsPackageManagers.astro → RLAPackageManagers.astro} +81 -87
  42. package/src/components/astro/RLAPageSection.astro +4 -2
  43. package/src/components/astro/RLAPopover.astro +4 -3
  44. package/src/components/astro/RLAPost.astro +11 -2
  45. package/src/components/astro/RLAScrollArea.astro +4 -1
  46. package/src/components/astro/RLAScrollToTop.astro +200 -172
  47. package/src/components/astro/RLASearch.astro +282 -0
  48. package/src/components/astro/RLASelect.astro +78 -55
  49. package/src/components/astro/RLASeparator.astro +11 -6
  50. package/src/components/astro/RLAShare.astro +60 -0
  51. package/src/components/astro/RLAShortcuts.astro +429 -0
  52. package/src/components/astro/RLASidebar.astro +158 -212
  53. package/src/components/astro/RLASlideover.astro +47 -17
  54. package/src/components/astro/RLASplitter.astro +194 -141
  55. package/src/components/astro/RLASteps.astro +118 -71
  56. package/src/components/astro/RLASurround.astro +39 -0
  57. package/src/components/astro/RLATable.astro +4 -1
  58. package/src/components/astro/RLATableOfContents.astro +109 -23
  59. package/src/components/astro/RLATabs.astro +147 -133
  60. package/src/components/astro/RLATextarea.astro +4 -1
  61. package/src/components/astro/RLAThemeSelector.astro +105 -76
  62. package/src/components/astro/RLAToast.astro +35 -21
  63. package/src/components/vue/RLVBanner.vue +230 -0
  64. package/src/components/vue/RLVButton.vue +3 -2
  65. package/src/components/vue/RLVCheckbox.vue +4 -2
  66. package/src/components/vue/RLVFooter.vue +3 -2
  67. package/src/components/vue/RLVHeader.vue +3 -2
  68. package/src/components/vue/RLVIcon.vue +4 -2
  69. package/src/components/vue/RLVInput.vue +5 -4
  70. package/src/components/vue/RLVLogo.vue +25 -3
  71. package/src/components/vue/RLVPlaceholder.vue +3 -2
  72. package/src/components/vue/RLVPost.vue +8 -2
  73. package/src/components/vue/RLVProgress.vue +60 -0
  74. package/src/components/vue/RLVScrollToTop.vue +65 -52
  75. package/src/components/vue/RLVSection.vue +14 -13
  76. package/src/components/vue/RLVToast.vue +17 -4
  77. package/src/composables/index.ts +1 -0
  78. package/src/composables/useHeaderStore.ts +1 -0
  79. package/src/composables/useShortcuts.ts +11 -0
  80. package/src/config/security.ts +43 -36
  81. package/src/config/site.config.ts +1 -0
  82. package/src/docs/components/ApiChangelog.astro +147 -0
  83. package/src/{plugins/starlightDocsApi → docs}/components/ApiEmits.astro +4 -4
  84. package/src/{plugins/starlightDocsApi → docs}/components/ApiProps.astro +4 -4
  85. package/src/{plugins/starlightDocsApi → docs}/components/ApiSlots.astro +4 -4
  86. package/src/docs/components/ApiTheme.astro +100 -0
  87. package/src/docs/extractAll.ts +94 -0
  88. package/src/docs/extractors/extractAstro.ts +69 -0
  89. package/src/docs/extractors/extractTheme.ts +56 -0
  90. package/src/{plugins/starlightDocsApi/extract-vue.ts → docs/extractors/extractVue.ts} +164 -15
  91. package/src/{plugins/starlightDocsApi → docs}/utils.ts +1 -2
  92. package/src/env.d.ts +0 -12
  93. package/src/integrations/ui.ts +35 -19
  94. package/src/middleware/security.ts +75 -19
  95. package/src/presets/index.ts +118 -293
  96. package/src/styles/index.css +0 -2
  97. package/src/themes/accordion.theme.ts +29 -3
  98. package/src/themes/aspect-ratio.theme.ts +1 -1
  99. package/src/themes/avatar-group.theme.ts +1 -1
  100. package/src/themes/avatar.theme.ts +2 -2
  101. package/src/themes/badge.theme.ts +2 -3
  102. package/src/themes/banner.theme.ts +40 -4
  103. package/src/themes/breadcrumb.theme.ts +1 -1
  104. package/src/themes/button.theme.ts +21 -22
  105. package/src/themes/{alert.theme.ts → callout.theme.ts} +12 -39
  106. package/src/themes/card.theme.ts +17 -9
  107. package/src/themes/carousel.theme.ts +1 -1
  108. package/src/themes/checkbox.theme.ts +1 -2
  109. package/src/themes/chip.theme.ts +2 -3
  110. package/src/themes/color-area.theme.ts +33 -0
  111. package/src/themes/color-field.theme.ts +32 -0
  112. package/src/themes/color-slider.theme.ts +34 -0
  113. package/src/themes/confirm.theme.ts +1 -1
  114. package/src/themes/container.theme.ts +1 -1
  115. package/src/themes/drawer.theme.ts +1 -1
  116. package/src/themes/footer.theme.ts +2 -2
  117. package/src/themes/grid.theme.ts +38 -0
  118. package/src/themes/header.theme.ts +4 -3
  119. package/src/themes/hover-card.theme.ts +1 -1
  120. package/src/themes/image.theme.ts +11 -1
  121. package/src/themes/input.theme.ts +7 -1
  122. package/src/themes/kbd.theme.ts +2 -3
  123. package/src/themes/label.theme.ts +1 -1
  124. package/src/themes/layout-grid.theme.ts +16 -0
  125. package/src/themes/link-group.theme.ts +0 -4
  126. package/src/themes/marquee.theme.ts +1 -1
  127. package/src/themes/modal.theme.ts +1 -1
  128. package/src/themes/navigation-menu.theme.ts +2 -2
  129. package/src/themes/page-section.theme.ts +4 -2
  130. package/src/themes/pagination.theme.ts +1 -1
  131. package/src/themes/pin-input.theme.ts +1 -1
  132. package/src/themes/popover.theme.ts +1 -1
  133. package/src/themes/post.theme.ts +23 -3
  134. package/src/themes/progress.theme.ts +1 -2
  135. package/src/themes/scroll-to-top.theme.ts +2 -3
  136. package/src/themes/search.theme.ts +64 -0
  137. package/src/themes/separator.theme.ts +1 -1
  138. package/src/themes/slideover.theme.ts +1 -1
  139. package/src/themes/slider.theme.ts +1 -2
  140. package/src/themes/spinner.theme.ts +1 -2
  141. package/src/themes/{megamenu.theme.ts → steps.theme.ts} +3 -3
  142. package/src/themes/sticky-surface.theme.ts +1 -1
  143. package/src/themes/switch.theme.ts +1 -2
  144. package/src/themes/table-of-contents.theme.ts +21 -2
  145. package/src/themes/timeline.theme.ts +7 -2
  146. package/src/themes/toast.theme.ts +1 -1
  147. package/src/types/components/accordion.ts +35 -2
  148. package/src/types/components/avatar.ts +16 -0
  149. package/src/types/components/banner.ts +42 -0
  150. package/src/types/components/button.ts +3 -4
  151. package/src/types/components/{alert.ts → callout.ts} +6 -6
  152. package/src/types/components/color-area.ts +19 -0
  153. package/src/types/components/color-field.ts +21 -0
  154. package/src/types/components/color-slider.ts +20 -0
  155. package/src/types/components/grid.ts +23 -0
  156. package/src/types/components/input.ts +4 -0
  157. package/src/types/components/layout-grid.ts +145 -0
  158. package/src/types/components/link-group.ts +4 -2
  159. package/src/types/components/link.ts +15 -0
  160. package/src/types/components/logo.ts +3 -3
  161. package/src/types/components/post.ts +12 -0
  162. package/src/types/components/search.ts +29 -0
  163. package/src/types/components/sidebar.ts +2 -6
  164. package/src/types/components/{megamenu.ts → steps.ts} +7 -1
  165. package/src/types/components/table-of-contents.ts +22 -0
  166. package/src/types/components/toast.ts +4 -0
  167. package/src/types/docs.ts +40 -0
  168. package/src/types/index.ts +151 -1
  169. package/src/types/theme.ts +6 -6
  170. package/src/utils/color.ts +165 -0
  171. package/src/utils/docs.ts +260 -110
  172. package/src/utils/headerStack.ts +24 -4
  173. package/src/utils/index.ts +2 -0
  174. package/src/utils/shortcuts.ts +322 -0
  175. package/src/components/TableOfContents.astro +0 -107
  176. package/src/components/astro/RLAAlert.astro +0 -93
  177. package/src/components/astro/RLAChangelog.astro +0 -23
  178. package/src/components/astro/RLAMegamenu.astro +0 -23
  179. package/src/plugins/index.ts +0 -2
  180. package/src/plugins/starlightDocsApi/components/ApiTheme.astro +0 -27
  181. package/src/plugins/starlightDocsApi/index.ts +0 -272
  182. package/src/styles/prism.css +0 -42
  183. package/src/themes/changelog.theme.ts +0 -13
  184. package/src/types/components/index.ts +0 -134
  185. /package/src/{plugins/starlightDocsApi → docs}/types.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createKbdTheme = (colors: string[] = defaultColors) =>
4
+ export const createKbdTheme = (colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root"],
7
7
  base: {
@@ -11,7 +11,7 @@ export const createKbdTheme = (colors: string[] = defaultColors) =>
11
11
  color: {
12
12
  ...Object.fromEntries(colors.map((color) => [color, { root: "" }])),
13
13
  neutral: { root: "" }
14
- },
14
+ } as Record<string, { root: string }>,
15
15
  variant: {
16
16
  solid: { root: "" },
17
17
  outline: { root: "" },
@@ -24,7 +24,6 @@ export const createKbdTheme = (colors: string[] = defaultColors) =>
24
24
  lg: { root: "h-6 min-w-[24px] text-[12px]" }
25
25
  },
26
26
  theme: {
27
- flat: { root: "rl-flat" },
28
27
  light: { root: "rl-light" },
29
28
  dark: { root: "rl-dark" }
30
29
  }
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createLabelTheme = (colors: string[] = defaultColors) =>
4
+ export const createLabelTheme = (_colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root"],
7
7
  base: {
@@ -0,0 +1,16 @@
1
+ import { defineTheme } from "../utils/defineTheme"
2
+
3
+ export const createLayoutGridTheme = () =>
4
+ defineTheme({
5
+ slots: ["root", "overlay", "container", "columns"],
6
+ base: {
7
+ root: "",
8
+ overlay: "fixed top-0 left-0 w-full h-full pointer-events-none",
9
+ container: "h-full mx-auto",
10
+ columns: "grid h-full"
11
+ },
12
+ variants: {},
13
+ defaultVariants: {}
14
+ })
15
+
16
+ export default createLayoutGridTheme()
@@ -12,10 +12,6 @@ export const createLinkGroupTheme = () =>
12
12
  },
13
13
  variants: {
14
14
  theme: {
15
- flat: {
16
- link: "text-white hover:text-accent-foreground",
17
- title: "text-white"
18
- },
19
15
  dark: {
20
16
  link: "text-white hover:text-accent-foreground",
21
17
  title: "text-white"
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createMarqueeTheme = (colors: string[] = defaultColors) =>
4
+ export const createMarqueeTheme = (_colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root", "track"],
7
7
  base: {
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createModalTheme = (colors: string[] = defaultColors) =>
4
+ export const createModalTheme = (_colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: [
7
7
  "root",
@@ -13,11 +13,11 @@ export const createNavigationMenuTheme = () =>
13
13
  content:
14
14
  "absolute left-0 top-full z-50 mt-1.5 w-56 rounded-md border bg-popover p-1 text-popover-foreground shadow-md origin-top-left",
15
15
  viewportWrapper: "absolute left-0 top-full flex justify-center w-full",
16
- viewport: "relative mt-1.5 h-auto w-full origin-[top_center] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90"
16
+ viewport:
17
+ "relative mt-1.5 h-auto w-full origin-[top_center] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90"
17
18
  },
18
19
  variants: {
19
20
  theme: {
20
- flat: { link: "rl-flat", trigger: "rl-flat" },
21
21
  light: { link: "rl-light", trigger: "rl-light" },
22
22
  dark: { link: "rl-dark", trigger: "rl-dark" }
23
23
  },
@@ -20,7 +20,8 @@ export const createPageSectionTheme = () =>
20
20
  base: {
21
21
  root: "relative isolate",
22
22
  background: "absolute inset-0 -z-1 overflow-hidden",
23
- container: "mx-auto w-full max-w-90rem px-md flex flex-col lg:grid",
23
+ container:
24
+ "mx-auto w-full max-w-[1440px] px-xs sm:px-md md:px-xl lg:px-xl flex flex-col lg:grid",
24
25
  wrapper: "",
25
26
  header: "",
26
27
  leading: "flex items-center mb-6",
@@ -55,7 +56,8 @@ export const createPageSectionTheme = () =>
55
56
  },
56
57
  cta: {
57
58
  root: "rounded-xl overflow-hidden",
58
- container: "lg:grid px-6 py-12 sm:px-12 sm:py-24 lg:px-16 lg:py-24 gap-8 sm:gap-16",
59
+ container:
60
+ "mx-auto w-full max-w-[1440px] px-xs sm:px-md md:px-xl lg:px-xl lg:grid py-12 sm:py-24 lg:py-24 gap-8 sm:gap-16",
59
61
  title: "text-3xl sm:text-4xl",
60
62
  description: "text-base sm:text-lg",
61
63
  body: "mt-8",
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createPaginationTheme = (colors: string[] = defaultColors) =>
4
+ export const createPaginationTheme = (_colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root", "list", "item", "link", "ellipsis"],
7
7
  base: {
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createPinInputTheme = (colors: string[] = defaultColors) =>
4
+ export const createPinInputTheme = (_colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root"],
7
7
  base: {
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createPopoverTheme = (colors: string[] = defaultColors) =>
4
+ export const createPopoverTheme = (_colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root", "trigger", "content"],
7
7
  base: {
@@ -2,11 +2,21 @@ import { defineTheme } from "../utils/defineTheme"
2
2
 
3
3
  export const createPostTheme = () =>
4
4
  defineTheme({
5
- slots: ["root", "imageWrapper", "image", "content", "title", "description", "date", "footer"],
5
+ slots: [
6
+ "root",
7
+ "imageWrapper",
8
+ "image",
9
+ "content",
10
+ "title",
11
+ "description",
12
+ "badge",
13
+ "date",
14
+ "footer"
15
+ ],
6
16
  base: {
7
- root: "group relative flex flex-col overflow-hidden transition-all duration-300",
17
+ root: "group relative flex overflow-hidden transition-all duration-300",
8
18
  imageWrapper: "relative overflow-hidden aspect-video",
9
- image: "w-full h-full object-cover transition-transform duration-500",
19
+ image: "absolute inset-0 w-full h-full object-cover transition-transform duration-500",
10
20
  content: "flex-1 p-4",
11
21
  title: "font-bold text-xl line-clamp-2",
12
22
  description: "text-neutral-500 text-sm mt-1 line-clamp-3",
@@ -14,6 +24,15 @@ export const createPostTheme = () =>
14
24
  footer: "p-4 border-t border-neutral-100"
15
25
  },
16
26
  variants: {
27
+ orientation: {
28
+ vertical: {
29
+ root: "flex-col"
30
+ },
31
+ horizontal: {
32
+ root: "flex-col md:flex-row",
33
+ imageWrapper: "w-full md:w-80 md:shrink-0 md:aspect-auto"
34
+ }
35
+ },
17
36
  variant: {
18
37
  soft: {
19
38
  root: "bg-white rounded-2xl shadow-xl hover:shadow-2xl border border-neutral-100",
@@ -26,6 +45,7 @@ export const createPostTheme = () =>
26
45
  }
27
46
  },
28
47
  defaultVariants: {
48
+ orientation: "vertical",
29
49
  variant: "soft"
30
50
  }
31
51
  })
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createProgressTheme = (colors: string[] = defaultColors) =>
4
+ export const createProgressTheme = (colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root", "indicator"],
7
7
  base: {
@@ -24,7 +24,6 @@ export const createProgressTheme = (colors: string[] = defaultColors) =>
24
24
  lg: { root: "h-5" }
25
25
  },
26
26
  theme: {
27
- flat: { root: "rl-flat" },
28
27
  light: { root: "rl-light" },
29
28
  dark: { root: "rl-dark" }
30
29
  }
@@ -1,11 +1,11 @@
1
1
  import { defineTheme } from "../utils/defineTheme"
2
2
 
3
- export const createScrollToTopTheme = (colors: string[] = ["primary", "secondary"]) =>
3
+ export const createScrollToTopTheme = (colors: readonly string[] = ["primary", "secondary"]) =>
4
4
  defineTheme({
5
5
  slots: ["root", "button", "progressBase", "svg", "iconContainer", "icon"],
6
6
  base: {
7
7
  root: "fixed bottom-6 right-6 z-50",
8
- button: "size-14 lg:size-12 p-0 rounded-full",
8
+ button: "size-14 lg:size-12 p-0 rounded-full bg-black/85",
9
9
  progressBase: "progress-circle-base size-full",
10
10
  svg: "size-full",
11
11
  iconContainer: "absolute inset-0 flex items-center justify-center text-center",
@@ -25,7 +25,6 @@ export const createScrollToTopTheme = (colors: string[] = ["primary", "secondary
25
25
  ])
26
26
  ),
27
27
  theme: {
28
- flat: { root: "rl-flat" },
29
28
  light: { root: "rl-light" },
30
29
  dark: { root: "rl-dark" }
31
30
  }
@@ -0,0 +1,64 @@
1
+ import { defineTheme } from "../utils/defineTheme"
2
+
3
+ export const createSearchTheme = () =>
4
+ defineTheme({
5
+ slots: [
6
+ "root",
7
+ "trigger",
8
+ "triggerIcon",
9
+ "triggerLabel",
10
+ "triggerKbd",
11
+ "modal",
12
+ "dialog",
13
+ "header",
14
+ "headerIcon",
15
+ "input",
16
+ "close",
17
+ "closeIcon",
18
+ "results",
19
+ "resultItem",
20
+ "resultHeader",
21
+ "resultTitle",
22
+ "resultBadge",
23
+ "resultSnippet",
24
+ "empty",
25
+ "footer",
26
+ "footerHint"
27
+ ],
28
+ base: {
29
+ root: "relative inline-block",
30
+ trigger:
31
+ "flex items-center gap-xs text-neutral-400 hover:text-white transition-colors bg-neutral-900 border border-neutral-800 rounded-full px-3 py-1.5 text-sm cursor-pointer",
32
+ triggerIcon: "i-lucide-search w-4 h-4",
33
+ triggerLabel: "hidden lg:inline text-xs opacity-60",
34
+ triggerKbd:
35
+ "hidden lg:inline-flex items-center gap-0.5 text-[10px] bg-neutral-800 border border-neutral-700 px-1.5 py-0.5 rounded font-sans text-neutral-400",
36
+ modal:
37
+ "fixed inset-0 z-[1000] hidden items-start justify-center pt-[10vh] px-4 bg-black/70 backdrop-blur-sm",
38
+ dialog:
39
+ "bg-neutral-900 border border-neutral-800 rounded-xl w-full max-w-xl shadow-2xl overflow-hidden flex flex-col",
40
+ header: "flex items-center border-b border-neutral-800 px-4 py-3",
41
+ headerIcon: "i-lucide-search text-neutral-400 w-5 h-5 mr-3",
42
+ input:
43
+ "bg-transparent text-white placeholder-neutral-500 focus:outline-none flex-1 text-base border-none p-0",
44
+ close:
45
+ "text-neutral-400 hover:text-white transition-colors bg-transparent border-0 cursor-pointer p-0 flex items-center justify-center",
46
+ closeIcon: "i-lucide-x w-5 h-5",
47
+ results: "max-h-[350px] overflow-y-auto p-2 empty:hidden flex flex-col gap-1",
48
+ resultItem:
49
+ "flex flex-col gap-1 p-3 hover:bg-neutral-800 rounded-lg transition-colors border border-transparent hover:border-neutral-700 text-left decoration-none",
50
+ resultHeader: "flex items-center justify-between",
51
+ resultTitle: "text-sm font-semibold text-white",
52
+ resultBadge:
53
+ "text-[10px] uppercase tracking-wider px-1.5 py-0.5 rounded bg-neutral-800 text-neutral-400 font-mono",
54
+ resultSnippet: "text-xs text-neutral-400 line-clamp-2 m-0",
55
+ empty: "p-6 text-center text-neutral-500 text-sm hidden",
56
+ footer:
57
+ "bg-neutral-950 border-t border-neutral-800 px-4 py-2 flex items-center justify-between text-[11px] text-neutral-500",
58
+ footerHint: "flex items-center gap-1"
59
+ },
60
+ variants: {},
61
+ defaultVariants: {}
62
+ })
63
+
64
+ export default createSearchTheme()
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createSeparatorTheme = (colors: string[] = defaultColors) =>
4
+ export const createSeparatorTheme = (colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root", "border", "container", "icon", "avatar", "avatarSize", "label"],
7
7
  base: {
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createSlideoverTheme = (colors: string[] = defaultColors) =>
4
+ export const createSlideoverTheme = (_colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: [
7
7
  "root",
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createSliderTheme = (colors: string[] = defaultColors) =>
4
+ export const createSliderTheme = (colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root", "track", "range", "thumb"],
7
7
  base: {
@@ -23,7 +23,6 @@ export const createSliderTheme = (colors: string[] = defaultColors) =>
23
23
  ])
24
24
  ),
25
25
  theme: {
26
- flat: { root: "rl-flat" },
27
26
  light: { root: "rl-light" },
28
27
  dark: { root: "rl-dark" }
29
28
  }
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createSpinnerTheme = (colors: string[] = defaultColors) =>
4
+ export const createSpinnerTheme = (colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root"],
7
7
  base: {
@@ -20,7 +20,6 @@ export const createSpinnerTheme = (colors: string[] = defaultColors) =>
20
20
  ...colors.map((color) => [color, { root: "rl-color-" + color + " text-[var(--rl-text)]" }])
21
21
  ]),
22
22
  theme: {
23
- flat: { root: "rl-flat" },
24
23
  light: { root: "rl-light" },
25
24
  dark: { root: "rl-dark" }
26
25
  }
@@ -1,13 +1,13 @@
1
1
  import { defineTheme } from "../utils/defineTheme"
2
2
 
3
- export const createMegamenuTheme = () =>
3
+ export const createStepsTheme = () =>
4
4
  defineTheme({
5
5
  slots: ["root"],
6
6
  base: {
7
- root: ""
7
+ root: "w-full"
8
8
  },
9
9
  variants: {},
10
10
  defaultVariants: {}
11
11
  })
12
12
 
13
- export default createMegamenuTheme()
13
+ export default createStepsTheme()
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createStickySurfaceTheme = (colors: string[] = defaultColors) =>
4
+ export const createStickySurfaceTheme = (_colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root"],
7
7
  base: {
@@ -1,7 +1,7 @@
1
1
  import { defaultColors } from "../presets/defaults"
2
2
  import { defineTheme } from "../utils/defineTheme"
3
3
 
4
- export const createSwitchTheme = (colors: string[] = defaultColors) =>
4
+ export const createSwitchTheme = (colors: readonly string[] = defaultColors) =>
5
5
  defineTheme({
6
6
  slots: ["root", "input", "track", "thumb", "label"],
7
7
  base: {
@@ -35,7 +35,6 @@ export const createSwitchTheme = (colors: string[] = defaultColors) =>
35
35
  false: { thumb: "translate-x-0" }
36
36
  },
37
37
  theme: {
38
- flat: { root: "rl-flat" },
39
38
  light: { root: "rl-light" },
40
39
  dark: { root: "rl-dark" }
41
40
  }
@@ -2,9 +2,28 @@ import { defineTheme } from "../utils/defineTheme"
2
2
 
3
3
  export const createTableOfContentsTheme = () =>
4
4
  defineTheme({
5
- slots: ["root", "media", "header", "title", "description", "content", "footer", "overlay"],
5
+ slots: [
6
+ "root",
7
+ "container",
8
+ "top",
9
+ "bottom",
10
+ "trigger",
11
+ "title",
12
+ "trailing",
13
+ "trailingIcon",
14
+ "content",
15
+ "list",
16
+ "listWithChildren",
17
+ "item",
18
+ "itemWithChildren",
19
+ "link",
20
+ "linkText",
21
+ "indicator",
22
+ "indicatorLine",
23
+ "indicatorActive"
24
+ ],
6
25
  base: {
7
- root: "sticky top-(--ui-header-height) z-10 bg-default/75 lg:bg-[initial] backdrop-blur -mx-4 px-4 sm:px-6 sm:-mx-6 lg:ms-0 overflow-y-auto max-h-[calc(100vh-var(--ui-header-height))]",
26
+ root: "sticky top-(--ui-header-height) z-10 bg-default/75 lg:bg-[initial] backdrop-blur -mx-4 px-4 sm:px-6 sm:-mx-6 lg:ms-0 xl:mx-0 overflow-y-auto overflow-x-hidden max-h-[calc(100vh-var(--ui-header-height))]",
8
27
  container:
9
28
  "pt-4 sm:pt-6 pb-2.5 sm:pb-4.5 lg:py-8 border-b border-dashed border-default lg:border-0 flex flex-col",
10
29
  top: "",
@@ -2,9 +2,14 @@ import { defineTheme } from "../utils/defineTheme"
2
2
 
3
3
  export const createTimelineTheme = () =>
4
4
  defineTheme({
5
- slots: ["root"],
5
+ slots: ["root", "node", "dot", "dotInner", "header", "content"],
6
6
  base: {
7
- root: ""
7
+ root: "relative flex flex-col pl-6 border-l-2 border-gray-800 ml-2 py-2",
8
+ node: "relative timeline-node",
9
+ dot: "absolute -left-[33px] top-[2px] flex h-4 w-4 items-center justify-center rounded-full bg-gray-950 ring-2 ring-gray-800",
10
+ dotInner: "h-2 w-2 rounded-full bg-primary-500",
11
+ header: "flex items-center justify-between gap-4 mb-3",
12
+ content: "space-y-2 text-sm text-gray-400"
8
13
  },
9
14
  variants: {},
10
15
  defaultVariants: {}
@@ -4,7 +4,7 @@ export const createToastTheme = () =>
4
4
  defineTheme({
5
5
  slots: ["root", "title", "description", "action", "close"],
6
6
  base: {
7
- root: "group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all border-border bg-background text-foreground",
7
+ root: "group pointer-events-auto relative flex w-full items-start justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all border-border bg-background text-foreground",
8
8
  title: "text-sm font-semibold",
9
9
  description: "text-xs opacity-90",
10
10
  action:
@@ -1,8 +1,37 @@
1
+ export interface AccordionItem {
2
+ label?: string
3
+ icon?: string
4
+ trailingIcon?: string
5
+ content?: string
6
+ disabled?: boolean
7
+ slot?: string
8
+ class?: any
9
+ ui?: any
10
+ [key: string]: unknown
11
+ }
12
+
1
13
  export interface AccordionProps {
2
14
  /**
3
- * The summary text displayed when the accordion is collapsed.
15
+ * An array of accordion items to render.
16
+ */
17
+ items?: AccordionItem[]
18
+ /**
19
+ * The summary text displayed when the accordion is collapsed (for single-item usage).
20
+ */
21
+ summary?: string
22
+ /**
23
+ * Determines whether multiple items can be open at the same time. If false, uses HTML5 details
24
+ * 'name' attribute to group them. Defaults to false (single open at a time).
25
+ */
26
+ multiple?: boolean
27
+ /**
28
+ * The icon displayed on the right side of the trigger. Defaults to 'i-lucide-chevron-down'.
4
29
  */
5
- summary: string
30
+ trailingIcon?: string
31
+ /**
32
+ * When true, prevents user interaction with all items.
33
+ */
34
+ disabled?: boolean
6
35
  /**
7
36
  * Slot-specific CSS class overrides.
8
37
  */
@@ -11,5 +40,9 @@ export interface AccordionProps {
11
40
  * Additional CSS classes to apply to the root element.
12
41
  */
13
42
  class?: any
43
+ /**
44
+ * A unique name to group accordion items when multiple is false.
45
+ */
46
+ name?: string
14
47
  [key: string]: unknown
15
48
  }
@@ -48,6 +48,22 @@ export interface AvatarProps {
48
48
  sizes?: string
49
49
  srcset?: string
50
50
  usemap?: string
51
+ /**
52
+ * Compact initials displayed inside the avatar circle (alias for fallback)
53
+ */
54
+ initials?: string
55
+ /**
56
+ * Display name rendered adjacent to the avatar (e.g. "Daniel Marchi")
57
+ */
58
+ title?: string
59
+ /**
60
+ * Secondary description rendered below the title (e.g. "Lead Developer")
61
+ */
62
+ subtitle?: string
63
+ /**
64
+ * Accessible aria-label fallback for screen readers when avatar is purely visual
65
+ */
66
+ label?: string
51
67
  /**
52
68
  * Slot-specific CSS class overrides.
53
69
  */
@@ -1,4 +1,46 @@
1
+ export interface BannerAction {
2
+ label: string
3
+ href?: string
4
+ variant?: string
5
+ color?: string
6
+ size?: string
7
+ class?: string
8
+ [key: string]: unknown
9
+ }
10
+
1
11
  export interface BannerProps {
12
+ /**
13
+ * Whether to contain the banner content within a max-width container.
14
+ */
15
+ contain?: boolean
16
+ /**
17
+ * Whether the banner should be sticky at the top of the viewport.
18
+ */
19
+ sticky?: boolean
20
+ /**
21
+ * Whether the banner should be fixed at the top of the viewport.
22
+ */
23
+ fixed?: boolean
24
+ /**
25
+ * The z-index stack position of the banner.
26
+ */
27
+ stackIndex?: number
28
+ /**
29
+ * Whether to hide the banner when scrolling down and show it when scrolling up.
30
+ */
31
+ hideOnScroll?: boolean
32
+ /**
33
+ * Whether the banner can be closed by the user. Closes permanently via localStorage.
34
+ */
35
+ dismissable?: boolean
36
+ /**
37
+ * Key used for localStorage dismissal persistence. Defaults to auto-generated id.
38
+ */
39
+ dismissId?: string
40
+ /**
41
+ * List of action buttons to render in the banner.
42
+ */
43
+ actions?: BannerAction[]
2
44
  /**
3
45
  * Slot-specific CSS class overrides.
4
46
  */
@@ -4,7 +4,7 @@ export interface ButtonProps {
4
4
  /**
5
5
  * The visual style variant of the button
6
6
  */
7
- variant?: "solid" | "outline" | "ghost" | "link" | "soft"
7
+ variant?: "solid" | "outline" | "soft" | "subtle" | "ghost" | "link"
8
8
  /**
9
9
  * The color scheme applied to the button
10
10
  */
@@ -52,12 +52,11 @@ export interface ButtonProps {
52
52
  /**
53
53
  * Color used when button is in active state
54
54
  */
55
- activeColor?:
56
- | ThemeColor
55
+ activeColor?: ThemeColor
57
56
  /**
58
57
  * Variant used when button is in active state
59
58
  */
60
- activeVariant?: "solid" | "outline" | "ghost" | "link" | "soft"
59
+ activeVariant?: "solid" | "outline" | "soft" | "subtle" | "ghost" | "link"
61
60
  /**
62
61
  * Theme mode override — pins colors to flat, light, or dark mode.
63
62
  */
@@ -1,20 +1,20 @@
1
1
  import type { Theme, ThemeColor } from "../theme"
2
2
 
3
- export interface AlertProps {
3
+ export interface CalloutProps {
4
4
  /**
5
- * The visual variant of the alert.
5
+ * The visual variant of the callout.
6
6
  */
7
- variant?: "default" | "destructive" | "outline" | "solid"
7
+ variant?: "default" | "destructive" | "outline" | "solid" | "soft" | "subtle"
8
8
  /**
9
- * The color scheme of the alert.
9
+ * The color scheme of the callout.
10
10
  */
11
11
  color?: ThemeColor
12
12
  /**
13
- * The main title text of the alert.
13
+ * The main title text of the callout.
14
14
  */
15
15
  title?: string
16
16
  /**
17
- * The secondary description text of the alert.
17
+ * The secondary description text of the callout.
18
18
  */
19
19
  description?: string
20
20
  /**