@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
@@ -0,0 +1,112 @@
1
+ ---
2
+ import { scv, cx } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { CalloutProps } from "../../types"
5
+ import calloutThemeDefault, { createCalloutTheme } from "../../themes/callout.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+ import RLAAvatar from "./RLAAvatar.astro"
8
+
9
+ const uiConfig = getUIConfig()
10
+ const calloutTheme = uiConfig.colors ? createCalloutTheme(uiConfig.colors) : calloutThemeDefault
11
+ const callout = scv(calloutTheme)
12
+
13
+ const {
14
+ variant = "solid",
15
+ color = "primary",
16
+ title,
17
+ description,
18
+ icon,
19
+ avatar,
20
+ actions,
21
+ close,
22
+ theme,
23
+ ui: uiProp,
24
+ class: className,
25
+ ...rest
26
+ } = Astro.props as CalloutProps
27
+
28
+ const colorToIcon: Record<string, string | undefined> = {
29
+ error: "i-lucide-circle-x",
30
+ warning: "i-lucide-triangle-alert",
31
+ info: "i-lucide-info",
32
+ success: "i-lucide-circle-check",
33
+ primary: undefined,
34
+ secondary: undefined,
35
+ commentary: undefined,
36
+ ideation: undefined,
37
+ source: undefined,
38
+ neutral: undefined
39
+ }
40
+
41
+ const resolvedColor = (variant === "destructive") ? "error" : color
42
+ const resolvedVariant = (variant === "solid" || variant === "outline" || variant === "soft" || variant === "subtle") ? variant : "solid"
43
+ const resolvedIcon = icon ?? colorToIcon[resolvedColor]
44
+ const hasTitleRow = !!(title || Astro.slots.has("title") || Astro.slots.has("header") || avatar || close || Astro.slots.has("close"))
45
+
46
+ const classes = resolveClasses(callout, {
47
+ variant: resolvedVariant,
48
+ color: resolvedColor as any,
49
+ theme
50
+ }, useUi("callout", uiProp), className)
51
+ ---
52
+ <div
53
+ class={classes.root}
54
+ data-slot="root"
55
+ role="alert"
56
+ {...rest}
57
+ >
58
+ <slot name="icon">
59
+ {resolvedIcon && (
60
+ <span class={classes.icon} data-slot="icon">
61
+ <span class={cx(resolvedIcon)} aria-hidden="true" />
62
+ </span>
63
+ )}
64
+ </slot>
65
+
66
+ <div class={classes.body} data-slot="body">
67
+ {hasTitleRow && (
68
+ <div class="flex items-center gap-2.5">
69
+ <slot name="avatar" {...{ ui: classes }}>
70
+ {avatar && (
71
+ <RLAAvatar
72
+ {...(typeof avatar === 'string' ? { src: avatar } : avatar)}
73
+ size={classes.avatarSize as any}
74
+ class={classes.avatar}
75
+ data-slot="avatar"
76
+ />
77
+ )}
78
+ </slot>
79
+
80
+ {(title || Astro.slots.has("title")) && (
81
+ <h5 class={classes.title} data-slot="title">
82
+ {title}
83
+ <slot name="title" />
84
+ </h5>
85
+ )}
86
+
87
+ <slot name="header" />
88
+
89
+ <slot name="close">
90
+ {close && (
91
+ <button class={classes.close} data-slot="close">
92
+ <span class="i-lucide-x size-4" />
93
+ </button>
94
+ )}
95
+ </slot>
96
+ </div>
97
+ )}
98
+
99
+ {(description || Astro.slots.has("default")) && (
100
+ <div class={classes.content} data-slot="content">
101
+ {description}
102
+ <slot />
103
+ </div>
104
+ )}
105
+
106
+ {(actions || Astro.slots.has("actions")) && (
107
+ <div class={classes.actions} data-slot="actions">
108
+ <slot name="actions" />
109
+ </div>
110
+ )}
111
+ </div>
112
+ </div>
@@ -32,6 +32,7 @@ const Tag = href ? "a" : "div"
32
32
  class={classes.root}
33
33
  data-slot="card-root"
34
34
  {...(Tag === "a" ? { href } : {})}
35
+ {...(Tag === "a" ? { style: "text-decoration: none" } : {})}
35
36
  {...rest}
36
37
  >
37
38
  <slot name="media">
@@ -44,8 +45,8 @@ const Tag = href ? "a" : "div"
44
45
 
45
46
  {overlay ? (
46
47
  <div class={classes.overlay} data-slot="overlay">
47
- {title && <h3 class={classes.title} data-slot="title">{title}</h3>}
48
- {description && <p class={classes.description} data-slot="description">{description}</p>}
48
+ {title && <div class={classes.title} data-slot="title">{title}</div>}
49
+ {description && <div class={classes.description} data-slot="description">{description}</div>}
49
50
  <slot />
50
51
  </div>
51
52
  ) : (
@@ -53,17 +54,17 @@ const Tag = href ? "a" : "div"
53
54
  <slot name="header">
54
55
  {(title || description || Astro.slots.has("title") || Astro.slots.has("description")) && (
55
56
  <div class={classes.header} data-slot="header">
56
- {title && <h3 class={classes.title} data-slot="title">{title}</h3>}
57
+ {title && <div class={classes.title} data-slot="title">{title}</div>}
57
58
  <slot name="title" />
58
59
 
59
- {description && <p class={classes.description} data-slot="description">{description}</p>}
60
+ {description && <div class={classes.description} data-slot="description">{description}</div>}
60
61
  <slot name="description" />
61
62
  </div>
62
63
  )}
63
64
  </slot>
64
65
 
65
66
  {Astro.slots.has("default") && (
66
- <div class={classes.content} data-slot="content">
67
+ <div class={classes.body} data-slot="body">
67
68
  <slot />
68
69
  </div>
69
70
  )}
@@ -1,75 +1,104 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi, resolveClasses } from "../../utils"
4
- import type { CarouselProps } from "../../types"
5
- import carouselThemeDefault, { createCarouselTheme } from "../../themes/carousel.theme"
6
- import { getUIConfig } from "virtual:rimelight-ui"
7
-
8
- const uiConfig = getUIConfig()
9
- const carouselTheme = uiConfig.colors ? createCarouselTheme() : carouselThemeDefault
10
-
11
- const carousel = scv(carouselTheme)
12
-
13
- const {
14
- slides,
15
- autoplay = false,
16
- ui: uiProp,
17
- class: className,
18
- ...rest
19
- } = Astro.props as CarouselProps
20
-
21
- const classes = resolveClasses(carousel, {}, useUi("carousel", uiProp), className)
22
- const carouselId = `rla-carousel-${Math.random().toString(36).substring(2, 9)}`
23
- ---
24
- <div id={carouselId} class={classes.root} data-slot="carousel-root" data-autoplay={autoplay ? "true" : "false"} {...rest}>
25
- <div class={classes.viewport} data-slot="viewport">
26
- <div class={classes.container} data-slot="container">
27
- {slides ? (
28
- slides.map((slide) => (
29
- <div class={classes.slide} data-slot="slide">
30
- {slide.imageSrc && <img src={slide.imageSrc} alt={slide.title || ""} class="w-full aspect-video object-cover rounded-lg" />}
31
- {(slide.title || slide.description) && (
32
- <div class="absolute bottom-4 left-4 right-4 p-4 rounded-lg bg-black/60 backdrop-blur-sm text-white">
33
- {slide.title && <h4 class="text-sm font-semibold">{slide.title}</h4>}
34
- {slide.description && <p class="text-xs opacity-95 mt-1">{slide.description}</p>}
35
- </div>
36
- )}
37
- </div>
38
- ))
39
- ) : (
40
- <slot />
41
- )}
42
- </div>
43
- </div>
44
-
45
- <button class={classes.buttonPrev} data-slot="prev-button" type="button" aria-label="Previous slide">
46
- <span class="i-lucide-chevron-left size-5" aria-hidden="true" />
47
- </button>
48
- <button class={classes.buttonNext} data-slot="next-button" type="button" aria-label="Next slide">
49
- <span class="i-lucide-chevron-right size-5" aria-hidden="true" />
50
- </button>
51
- </div>
52
-
53
- <script>
54
- import EmblaCarousel from "embla-carousel"
55
-
56
- document.querySelectorAll('[data-slot="carousel-root"]').forEach((carouselEl) => {
57
- const viewport = carouselEl.querySelector('[data-slot="viewport"]') as HTMLElement
58
- const prevBtn = carouselEl.querySelector('[data-slot="prev-button"]') as HTMLButtonElement
59
- const nextBtn = carouselEl.querySelector('[data-slot="next-button"]') as HTMLButtonElement
60
-
61
- if (!viewport) return
62
-
63
- const embla = EmblaCarousel(viewport, { loop: true })
64
-
65
- if (prevBtn) prevBtn.addEventListener("click", () => embla.scrollPrev())
66
- if (nextBtn) nextBtn.addEventListener("click", () => embla.scrollNext())
67
-
68
- const autoplay = carouselEl.getAttribute("data-autoplay") === "true"
69
- if (autoplay) {
70
- setInterval(() => {
71
- if (embla) embla.scrollNext()
72
- }, 4000)
73
- }
74
- })
75
- </script>
1
+ ---
2
+ import { scv } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { CarouselProps } from "../../types"
5
+ import carouselThemeDefault, { createCarouselTheme } from "../../themes/carousel.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+
8
+ const uiConfig = getUIConfig()
9
+ const carouselTheme = uiConfig.colors ? createCarouselTheme() : carouselThemeDefault
10
+
11
+ const carousel = scv(carouselTheme)
12
+
13
+ const {
14
+ slides,
15
+ autoplay = false,
16
+ ui: uiProp,
17
+ class: className,
18
+ ...rest
19
+ } = Astro.props as CarouselProps
20
+
21
+ const classes = resolveClasses(carousel, {}, useUi("carousel", uiProp), className)
22
+ const carouselId = `rla-carousel-${Math.random().toString(36).substring(2, 9)}`
23
+ ---
24
+ <rla-carousel data-autoplay={autoplay ? "true" : "false"} {...rest}>
25
+ <div id={carouselId} class={classes.root} data-slot="carousel-root">
26
+ <div class={classes.viewport} data-slot="viewport">
27
+ <div class={classes.container} data-slot="container">
28
+ {slides ? (
29
+ slides.map((slide) => (
30
+ <div class={classes.slide} data-slot="slide">
31
+ {slide.imageSrc && <img src={slide.imageSrc} alt={slide.title || ""} class="w-full aspect-video object-cover rounded-lg" />}
32
+ {(slide.title || slide.description) && (
33
+ <div class="absolute bottom-4 left-4 right-4 p-4 rounded-lg bg-black/60 backdrop-blur-sm text-white">
34
+ {slide.title && <h4 class="text-sm font-semibold">{slide.title}</h4>}
35
+ {slide.description && <p class="text-xs opacity-95 mt-1">{slide.description}</p>}
36
+ </div>
37
+ )}
38
+ </div>
39
+ ))
40
+ ) : (
41
+ <slot />
42
+ )}
43
+ </div>
44
+ </div>
45
+
46
+ <button class={classes.buttonPrev} data-slot="prev-button" type="button" aria-label="Previous slide">
47
+ <span class="i-lucide-chevron-left size-5" aria-hidden="true" />
48
+ </button>
49
+ <button class={classes.buttonNext} data-slot="next-button" type="button" aria-label="Next slide">
50
+ <span class="i-lucide-chevron-right size-5" aria-hidden="true" />
51
+ </button>
52
+ </div>
53
+ </rla-carousel>
54
+
55
+ <script>
56
+ import EmblaCarousel from "embla-carousel"
57
+
58
+ class RLACarousel extends HTMLElement {
59
+ private emblaCleanup: (() => void) | null = null;
60
+
61
+ connectedCallback() {
62
+ this.style.display = 'contents';
63
+ const autoplay = this.getAttribute("data-autoplay") === "true";
64
+ const viewport = this.querySelector('[data-slot="viewport"]') as HTMLElement;
65
+ const prevBtn = this.querySelector('[data-slot="prev-button"]') as HTMLButtonElement;
66
+ const nextBtn = this.querySelector('[data-slot="next-button"]') as HTMLButtonElement;
67
+
68
+ if (!viewport) return;
69
+
70
+ const embla = EmblaCarousel(viewport, { loop: true });
71
+
72
+ const onPrevClick = () => embla.scrollPrev();
73
+ const onNextClick = () => embla.scrollNext();
74
+
75
+ if (prevBtn) prevBtn.addEventListener("click", onPrevClick);
76
+ if (nextBtn) nextBtn.addEventListener("click", onNextClick);
77
+
78
+ let intervalId: any = null;
79
+ if (autoplay) {
80
+ intervalId = setInterval(() => {
81
+ embla.scrollNext();
82
+ }, 4000);
83
+ }
84
+
85
+ this.emblaCleanup = () => {
86
+ if (prevBtn) prevBtn.removeEventListener("click", onPrevClick);
87
+ if (nextBtn) nextBtn.removeEventListener("click", onNextClick);
88
+ if (intervalId) clearInterval(intervalId);
89
+ embla.destroy();
90
+ };
91
+ }
92
+
93
+ disconnectedCallback() {
94
+ if (this.emblaCleanup) {
95
+ this.emblaCleanup();
96
+ this.emblaCleanup = null;
97
+ }
98
+ }
99
+ }
100
+
101
+ if (!customElements.get('rla-carousel')) {
102
+ customElements.define('rla-carousel', RLACarousel);
103
+ }
104
+ </script>
@@ -4,7 +4,10 @@ import { useUi, resolveClasses } from "../../utils"
4
4
  import type { ChartProps, ChartDataPoint } from "../../types"
5
5
  import chartThemeDefault, { createChartTheme } from "../../themes/chart.theme"
6
6
 
7
- const chartTheme = chartThemeDefault
7
+ import { getUIConfig } from "virtual:rimelight-ui"
8
+
9
+ const uiConfig = getUIConfig()
10
+ const chartTheme = uiConfig.colors ? createChartTheme() : chartThemeDefault
8
11
  const chart = scv(chartTheme)
9
12
 
10
13
  const {
@@ -6,7 +6,7 @@ import chipThemeDefault, { createChipTheme } from "../../themes/chip.theme"
6
6
  import { getUIConfig } from "virtual:rimelight-ui"
7
7
 
8
8
  const uiConfig = getUIConfig()
9
- const chipTheme = uiConfig.colors ? createChipTheme() : chipThemeDefault
9
+ const chipTheme = uiConfig.colors ? createChipTheme(uiConfig.colors) : chipThemeDefault
10
10
 
11
11
  const chip = scv(chipTheme)
12
12
 
@@ -22,12 +22,18 @@ const {
22
22
  ui: uiProp,
23
23
  class: className,
24
24
  ...rest
25
- } = Astro.props as ChipProps
25
+ } = Astro.props as ChipProps & {
26
+ color?: string
27
+ size?: "3xs" | "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl"
28
+ position?: "top-right" | "bottom-right" | "top-left" | "bottom-left"
29
+ inset?: boolean
30
+ standalone?: boolean
31
+ }
26
32
 
27
33
  const classes = resolveClasses(chip, {
28
- color,
29
- size,
30
- position,
34
+ color: color as "neutral",
35
+ size: size as "md",
36
+ position: position as "top-right",
31
37
  inset,
32
38
  standalone,
33
39
  theme
@@ -4,7 +4,10 @@ import { useUi, resolveClasses } from "../../utils"
4
4
  import type { CollapsibleProps } from "../../types"
5
5
  import collapsibleThemeDefault, { createCollapsibleTheme } from "../../themes/collapsible.theme"
6
6
 
7
- const collapsibleTheme = collapsibleThemeDefault
7
+ import { getUIConfig } from "virtual:rimelight-ui"
8
+
9
+ const uiConfig = getUIConfig()
10
+ const collapsibleTheme = uiConfig.colors ? createCollapsibleTheme() : collapsibleThemeDefault
8
11
  const collapsible = scv(collapsibleTheme)
9
12
 
10
13
  const {