@rimelight/ui 0.0.31 → 0.0.33

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 (462) hide show
  1. package/README.md +157 -30
  2. package/package.json +105 -108
  3. package/src/components/TableOfContents.astro +44 -43
  4. package/src/components/astro/RLA3dHover.astro +23 -0
  5. package/src/components/astro/RLAAlert.astro +93 -60
  6. package/src/components/astro/RLAApp.astro +23 -0
  7. package/src/components/astro/RLAAspectRatio.astro +27 -23
  8. package/src/components/astro/RLAAudio.astro +23 -0
  9. package/src/components/astro/RLAAvatar.astro +68 -56
  10. package/src/components/astro/RLAAvatarGroup.astro +23 -19
  11. package/src/components/astro/RLABadge.astro +34 -31
  12. package/src/components/astro/RLABanner.astro +23 -0
  13. package/src/components/astro/RLABlogPost.astro +7 -0
  14. package/src/components/astro/RLABlogPosts.astro +9 -0
  15. package/src/components/astro/RLABreadcrumb.astro +48 -44
  16. package/src/components/astro/RLABrowserMockup.astro +23 -0
  17. package/src/components/astro/RLAButton.astro +54 -3
  18. package/src/components/astro/RLACalendar.astro +23 -0
  19. package/src/components/astro/RLACard.astro +78 -74
  20. package/src/components/astro/RLACarousel.astro +75 -71
  21. package/src/components/astro/RLAChangelog.astro +23 -0
  22. package/src/components/astro/RLAChart.astro +33 -9
  23. package/src/components/astro/RLAChat.astro +23 -0
  24. package/src/components/astro/RLAChatMessage.astro +23 -0
  25. package/src/components/astro/RLAChatMessages.astro +23 -0
  26. package/src/components/astro/RLAChatPalette.astro +23 -0
  27. package/src/components/astro/RLAChatPrompt.astro +23 -0
  28. package/src/components/astro/RLAChatPromptSubmit.astro +23 -0
  29. package/src/components/astro/RLAChatReasoning.astro +23 -0
  30. package/src/components/astro/RLAChatShimmer.astro +23 -0
  31. package/src/components/astro/RLAChatTool.astro +23 -0
  32. package/src/components/astro/RLACheckbox.astro +3 -1
  33. package/src/components/astro/RLAChip.astro +51 -0
  34. package/src/components/astro/RLAColorPicker.astro +23 -0
  35. package/src/components/astro/RLACommandPalette.astro +23 -0
  36. package/src/components/astro/RLACompare.astro +23 -0
  37. package/src/components/astro/{RLAAlertDialog.astro → RLAConfirm.astro} +117 -86
  38. package/src/components/astro/RLAContainer.astro +23 -0
  39. package/src/components/astro/RLAContextMenu.astro +23 -0
  40. package/src/components/astro/RLADashboardGroup.astro +23 -0
  41. package/src/components/astro/RLADashboardNavbar.astro +23 -0
  42. package/src/components/astro/RLADashboardPanel.astro +23 -0
  43. package/src/components/astro/RLADashboardResizeHandle.astro +23 -0
  44. package/src/components/astro/RLADashboardSearch.astro +23 -0
  45. package/src/components/astro/RLADashboardSearchButton.astro +23 -0
  46. package/src/components/astro/RLADashboardSidebar.astro +23 -0
  47. package/src/components/astro/RLADashboardSidebarCollapse.astro +23 -0
  48. package/src/components/astro/RLADashboardSidebarToggle.astro +23 -0
  49. package/src/components/astro/RLADashboardToolbar.astro +23 -0
  50. package/src/components/astro/RLADock.astro +23 -0
  51. package/src/{plugins/starlightAddons/components/Gamepad.astro → components/astro/RLADocsGamepad.astro} +178 -180
  52. package/src/{plugins/starlightAddons/components/Keyboard.astro → components/astro/RLADocsKeyboard.astro} +1 -3
  53. package/src/{plugins/starlightAddons/PackageManagers.astro → components/astro/RLADocsPackageManagers.astro} +28 -14
  54. package/src/components/astro/RLADrawer.astro +78 -74
  55. package/src/components/astro/RLADropdownMenu.astro +1 -1
  56. package/src/components/astro/RLAEditor.astro +23 -0
  57. package/src/components/astro/RLAEmpty.astro +23 -0
  58. package/src/components/astro/RLAError.astro +23 -0
  59. package/src/components/astro/{RLAInputGroup.astro → RLAFieldGroup.astro} +7 -7
  60. package/src/components/astro/RLAFieldset.astro +23 -0
  61. package/src/components/astro/{RLADropzone.astro → RLAFileUpload.astro} +14 -14
  62. package/src/components/astro/RLAFloatingAction.astro +23 -0
  63. package/src/components/astro/RLAFooter.astro +39 -35
  64. package/src/components/astro/RLAForm.astro +23 -0
  65. package/src/components/astro/{RLAField.astro → RLAFormField.astro} +7 -7
  66. package/src/components/astro/RLAGallery.astro +23 -0
  67. package/src/components/astro/RLAGrid.astro +39 -0
  68. package/src/components/astro/RLAHead.astro +25 -9
  69. package/src/components/astro/RLAHeader.astro +59 -107
  70. package/src/components/astro/RLAHoverCard.astro +35 -31
  71. package/src/components/astro/RLAIcon.astro +31 -27
  72. package/src/components/astro/RLAImage.astro +209 -0
  73. package/src/components/astro/RLAInput.astro +3 -1
  74. package/src/components/astro/RLAInputDate.astro +23 -0
  75. package/src/components/astro/{RLACombobox.astro → RLAInputMenu.astro} +22 -22
  76. package/src/components/astro/RLAInputNumber.astro +23 -0
  77. package/src/components/astro/RLAInputTags.astro +23 -0
  78. package/src/components/astro/RLAInputTime.astro +23 -0
  79. package/src/components/astro/RLAKbd.astro +32 -22
  80. package/src/components/astro/RLAKnob.astro +23 -0
  81. package/src/components/astro/RLALabel.astro +27 -23
  82. package/src/components/astro/RLALink.astro +23 -0
  83. package/src/components/astro/RLALinkGroup.astro +38 -0
  84. package/src/components/astro/RLAListbox.astro +23 -0
  85. package/src/components/astro/RLALocaleSelector.astro +5 -1
  86. package/src/components/astro/RLALogo.astro +90 -56
  87. package/src/components/astro/RLAMain.astro +8 -2
  88. package/src/components/astro/RLAMarquee.astro +36 -32
  89. package/src/components/astro/RLAMegamenu.astro +23 -0
  90. package/src/components/astro/RLAMeter.astro +23 -0
  91. package/src/components/astro/{RLADialog.astro → RLAModal.astro} +99 -95
  92. package/src/components/astro/RLANavigationMenu.astro +137 -136
  93. package/src/components/astro/RLAPage.astro +23 -0
  94. package/src/components/astro/RLAPageAside.astro +23 -0
  95. package/src/components/astro/RLAPageBody.astro +23 -0
  96. package/src/components/astro/RLAPageHeader.astro +23 -0
  97. package/src/components/astro/{RLASection.astro → RLAPageSection.astro} +10 -6
  98. package/src/components/astro/RLAPagination.astro +98 -94
  99. package/src/components/astro/RLAPassword.astro +23 -0
  100. package/src/components/astro/RLAPhoneMockup.astro +23 -0
  101. package/src/components/astro/RLAPinInput.astro +23 -0
  102. package/src/components/astro/RLAPlaceholder.astro +45 -41
  103. package/src/components/astro/RLAPopover.astro +35 -31
  104. package/src/components/astro/RLAPost.astro +65 -0
  105. package/src/components/astro/RLAPosts.astro +23 -0
  106. package/src/components/astro/RLAPricingPlan.astro +23 -0
  107. package/src/components/astro/RLAPricingTable.astro +23 -0
  108. package/src/components/astro/RLAProgress.astro +3 -1
  109. package/src/components/astro/RLAProse.astro +23 -0
  110. package/src/components/astro/RLAQrCode.astro +23 -0
  111. package/src/components/astro/RLARadioGroup.astro +23 -0
  112. package/src/components/astro/RLARating.astro +23 -0
  113. package/src/components/astro/RLAScrollArea.astro +1 -1
  114. package/src/components/astro/RLAScrollToTop.astro +172 -159
  115. package/src/components/astro/RLASeparator.astro +78 -27
  116. package/src/components/astro/RLASidebar.astro +212 -135
  117. package/src/components/astro/RLASkeleton.astro +24 -20
  118. package/src/components/astro/{RLASheet.astro → RLASlideover.astro} +76 -72
  119. package/src/components/astro/RLASlider.astro +8 -3
  120. package/src/components/astro/RLASpeedDial.astro +23 -0
  121. package/src/components/astro/RLASpinner.astro +3 -1
  122. package/src/components/astro/{RLAResizable.astro → RLASplitter.astro} +7 -7
  123. package/src/components/astro/RLASpoiler.astro +23 -0
  124. package/src/components/astro/RLAStepper.astro +23 -0
  125. package/src/components/astro/RLASteps.astro +71 -0
  126. package/src/components/astro/RLAStickySurface.astro +31 -27
  127. package/src/components/astro/RLASwitch.astro +3 -1
  128. package/src/components/astro/RLATableOfContents.astro +23 -0
  129. package/src/components/astro/RLATabs.astro +133 -92
  130. package/src/components/astro/RLAThemeSelector.astro +5 -1
  131. package/src/components/astro/RLATimeline.astro +23 -0
  132. package/src/components/astro/RLATooltip.astro +35 -31
  133. package/src/components/astro/RLATour.astro +23 -0
  134. package/src/components/astro/RLATree.astro +23 -0
  135. package/src/components/astro/RLAUser.astro +23 -0
  136. package/src/components/astro/{RLAEmbedYoutube.astro → RLAVideo.astro} +200 -196
  137. package/src/components/astro/RLAWatermark.astro +23 -0
  138. package/src/components/astro/RLAWindowMockup.astro +23 -0
  139. package/src/components/vue/RLVCheckbox.vue +68 -0
  140. package/src/components/vue/RLVForm.vue +44 -0
  141. package/src/components/vue/RLVFormField.vue +58 -0
  142. package/src/components/vue/RLVInput.vue +93 -0
  143. package/src/components/vue/RLVPost.vue +63 -0
  144. package/src/components/vue/RLVPosts.vue +21 -0
  145. package/src/components/vue/RLVSection.vue +5 -4
  146. package/src/components/vue/RLVToast.vue +68 -0
  147. package/src/components/vue/RLVToaster.vue +29 -0
  148. package/src/composables/index.ts +3 -1
  149. package/src/composables/useHeaderStore.ts +14 -0
  150. package/src/composables/useScrollToTop.ts +62 -62
  151. package/src/composables/useToast.ts +42 -0
  152. package/src/env.d.ts +0 -13
  153. package/src/integrations/ui.ts +199 -143
  154. package/src/plugins/index.ts +2 -5
  155. package/src/plugins/starlightDocsApi/index.ts +272 -265
  156. package/src/presets/defaults.ts +297 -0
  157. package/src/presets/index.ts +637 -256
  158. package/src/styles/index.css +160 -156
  159. package/src/themes/3d-hover.theme.ts +13 -0
  160. package/src/themes/accordion.theme.ts +13 -0
  161. package/src/themes/alert.theme.ts +125 -51
  162. package/src/themes/app.theme.ts +13 -0
  163. package/src/themes/aspect-ratio.theme.ts +13 -0
  164. package/src/themes/audio.theme.ts +13 -0
  165. package/src/themes/avatar-group.theme.ts +12 -0
  166. package/src/themes/avatar.theme.ts +84 -28
  167. package/src/themes/badge.theme.ts +163 -61
  168. package/src/themes/banner.theme.ts +13 -0
  169. package/src/themes/breadcrumb.theme.ts +14 -12
  170. package/src/themes/browser-mockup.theme.ts +13 -0
  171. package/src/themes/button.theme.ts +202 -190
  172. package/src/themes/calendar.theme.ts +13 -0
  173. package/src/themes/card.theme.ts +42 -34
  174. package/src/themes/carousel.theme.ts +30 -28
  175. package/src/themes/changelog.theme.ts +13 -0
  176. package/src/themes/chart.theme.ts +22 -21
  177. package/src/themes/chat-message.theme.ts +13 -0
  178. package/src/themes/chat-messages.theme.ts +13 -0
  179. package/src/themes/chat-palette.theme.ts +13 -0
  180. package/src/themes/chat-prompt-submit.theme.ts +13 -0
  181. package/src/themes/chat-prompt.theme.ts +13 -0
  182. package/src/themes/chat-reasoning.theme.ts +13 -0
  183. package/src/themes/chat-shimmer.theme.ts +13 -0
  184. package/src/themes/chat-tool.theme.ts +13 -0
  185. package/src/themes/chat.theme.ts +13 -0
  186. package/src/themes/checkbox.theme.ts +50 -42
  187. package/src/themes/chip.theme.ts +74 -0
  188. package/src/themes/color-picker.theme.ts +13 -0
  189. package/src/themes/command-palette.theme.ts +13 -0
  190. package/src/themes/compare.theme.ts +13 -0
  191. package/src/themes/confirm.theme.ts +48 -0
  192. package/src/themes/container.theme.ts +13 -0
  193. package/src/themes/context-menu.theme.ts +13 -0
  194. package/src/themes/dashboard-group.theme.ts +13 -0
  195. package/src/themes/dashboard-navbar.theme.ts +13 -0
  196. package/src/themes/dashboard-panel.theme.ts +13 -0
  197. package/src/themes/dashboard-resize-handle.theme.ts +13 -0
  198. package/src/themes/dashboard-search-button.theme.ts +13 -0
  199. package/src/themes/dashboard-search.theme.ts +13 -0
  200. package/src/themes/dashboard-sidebar-collapse.theme.ts +13 -0
  201. package/src/themes/dashboard-sidebar-toggle.theme.ts +13 -0
  202. package/src/themes/dashboard-sidebar.theme.ts +13 -0
  203. package/src/themes/dashboard-toolbar.theme.ts +13 -0
  204. package/src/themes/dock.theme.ts +13 -0
  205. package/src/themes/drawer.theme.ts +61 -44
  206. package/src/themes/{dropdownMenu.theme.ts → dropdown-menu.theme.ts} +29 -27
  207. package/src/themes/editor.theme.ts +13 -0
  208. package/src/themes/empty.theme.ts +13 -0
  209. package/src/themes/error.theme.ts +13 -0
  210. package/src/themes/{inputGroup.theme.ts → field-group.theme.ts} +24 -23
  211. package/src/themes/fieldset.theme.ts +13 -0
  212. package/src/themes/{dropzone.theme.ts → file-upload.theme.ts} +2 -2
  213. package/src/themes/floating-action.theme.ts +13 -0
  214. package/src/themes/footer.theme.ts +30 -27
  215. package/src/themes/{field.theme.ts → form-field.theme.ts} +2 -2
  216. package/src/themes/form.theme.ts +13 -0
  217. package/src/themes/gallery.theme.ts +13 -0
  218. package/src/themes/head.theme.ts +13 -0
  219. package/src/themes/header.theme.ts +46 -43
  220. package/src/themes/hover-card.theme.ts +29 -0
  221. package/src/themes/icon.theme.ts +23 -20
  222. package/src/themes/image.theme.ts +19 -0
  223. package/src/themes/input-date.theme.ts +13 -0
  224. package/src/themes/input-menu.theme.ts +35 -0
  225. package/src/themes/input-number.theme.ts +13 -0
  226. package/src/themes/input-tags.theme.ts +13 -0
  227. package/src/themes/input-time.theme.ts +13 -0
  228. package/src/themes/input.theme.ts +42 -36
  229. package/src/themes/kbd.theme.ts +89 -24
  230. package/src/themes/knob.theme.ts +13 -0
  231. package/src/themes/label.theme.ts +18 -16
  232. package/src/themes/link-group.theme.ts +32 -0
  233. package/src/themes/link.theme.ts +13 -0
  234. package/src/themes/listbox.theme.ts +13 -0
  235. package/src/themes/locale-selector.theme.ts +49 -0
  236. package/src/themes/logo.theme.ts +13 -10
  237. package/src/themes/main.theme.ts +7 -6
  238. package/src/themes/marquee.theme.ts +24 -22
  239. package/src/themes/megamenu.theme.ts +13 -0
  240. package/src/themes/meter.theme.ts +13 -0
  241. package/src/themes/modal.theme.ts +49 -0
  242. package/src/themes/navigation-menu.theme.ts +27 -0
  243. package/src/themes/page-aside.theme.ts +13 -0
  244. package/src/themes/page-body.theme.ts +13 -0
  245. package/src/themes/page-header.theme.ts +13 -0
  246. package/src/themes/page-section.theme.ts +187 -0
  247. package/src/themes/page.theme.ts +13 -0
  248. package/src/themes/pagination.theme.ts +24 -22
  249. package/src/themes/password.theme.ts +13 -0
  250. package/src/themes/phone-mockup.theme.ts +13 -0
  251. package/src/themes/pin-input.theme.ts +14 -0
  252. package/src/themes/placeholder.theme.ts +15 -12
  253. package/src/themes/popover.theme.ts +26 -24
  254. package/src/themes/post.theme.ts +33 -0
  255. package/src/themes/posts.theme.ts +13 -0
  256. package/src/themes/pricing-plan.theme.ts +13 -0
  257. package/src/themes/pricing-table.theme.ts +13 -0
  258. package/src/themes/progress.theme.ts +38 -26
  259. package/src/themes/prose.theme.ts +13 -0
  260. package/src/themes/qr-code.theme.ts +13 -0
  261. package/src/themes/quote.theme.ts +13 -0
  262. package/src/themes/radio-group.theme.ts +13 -0
  263. package/src/themes/rating.theme.ts +13 -0
  264. package/src/themes/{scrollArea.theme.ts → scroll-area.theme.ts} +26 -24
  265. package/src/themes/scroll-to-top.theme.ts +52 -46
  266. package/src/themes/select.theme.ts +29 -27
  267. package/src/themes/separator.theme.ts +147 -19
  268. package/src/themes/sidebar.theme.ts +38 -33
  269. package/src/themes/skeleton.theme.ts +21 -20
  270. package/src/themes/slideover.theme.ts +59 -0
  271. package/src/themes/slider.theme.ts +36 -28
  272. package/src/themes/speed-dial.theme.ts +13 -0
  273. package/src/themes/spinner.theme.ts +34 -30
  274. package/src/themes/{resizable.theme.ts → splitter.theme.ts} +23 -22
  275. package/src/themes/spoiler.theme.ts +13 -0
  276. package/src/themes/stepper.theme.ts +13 -0
  277. package/src/themes/sticky-surface.theme.ts +12 -0
  278. package/src/themes/switch.theme.ts +67 -59
  279. package/src/themes/table-of-contents.theme.ts +48 -0
  280. package/src/themes/tabs.theme.ts +52 -44
  281. package/src/themes/textarea.theme.ts +27 -26
  282. package/src/themes/theme-selector.theme.ts +15 -0
  283. package/src/themes/timeline.theme.ts +13 -0
  284. package/src/themes/toast.theme.ts +31 -25
  285. package/src/themes/tooltip.theme.ts +28 -27
  286. package/src/themes/tour.theme.ts +13 -0
  287. package/src/themes/tree.theme.ts +13 -0
  288. package/src/themes/user.theme.ts +13 -0
  289. package/src/themes/video.theme.ts +17 -0
  290. package/src/themes/watermark.theme.ts +13 -0
  291. package/src/themes/window-mockup.theme.ts +13 -0
  292. package/src/types/components/3d-hover.ts +11 -0
  293. package/src/types/components/accordion.ts +1 -1
  294. package/src/types/components/alert.ts +7 -1
  295. package/src/types/components/app.ts +11 -0
  296. package/src/types/components/aspect-ratio.ts +2 -2
  297. package/src/types/components/audio.ts +11 -0
  298. package/src/types/components/avatar-group.ts +11 -0
  299. package/src/types/components/avatar.ts +60 -47
  300. package/src/types/components/badge.ts +8 -2
  301. package/src/types/components/banner.ts +11 -0
  302. package/src/types/components/breadcrumb.ts +2 -2
  303. package/src/types/components/browser-mockup.ts +11 -0
  304. package/src/types/components/button.ts +81 -71
  305. package/src/types/components/calendar.ts +11 -0
  306. package/src/types/components/card.ts +2 -2
  307. package/src/types/components/carousel.ts +2 -2
  308. package/src/types/components/changelog.ts +11 -0
  309. package/src/types/components/chart.ts +2 -2
  310. package/src/types/components/chat-message.ts +11 -0
  311. package/src/types/components/chat-messages.ts +11 -0
  312. package/src/types/components/chat-palette.ts +11 -0
  313. package/src/types/components/chat-prompt-submit.ts +11 -0
  314. package/src/types/components/chat-prompt.ts +11 -0
  315. package/src/types/components/chat-reasoning.ts +11 -0
  316. package/src/types/components/chat-shimmer.ts +11 -0
  317. package/src/types/components/chat-tool.ts +11 -0
  318. package/src/types/components/chat.ts +11 -0
  319. package/src/types/components/checkbox.ts +8 -2
  320. package/src/types/components/chip.ts +17 -0
  321. package/src/types/components/collapsible.ts +2 -2
  322. package/src/types/components/color-picker.ts +11 -0
  323. package/src/types/components/command-palette.ts +11 -0
  324. package/src/types/components/compare.ts +11 -0
  325. package/src/types/components/{alert-dialog.ts → confirm.ts} +2 -2
  326. package/src/types/components/container.ts +17 -0
  327. package/src/types/components/context-menu.ts +11 -0
  328. package/src/types/components/dashboard-group.ts +11 -0
  329. package/src/types/components/dashboard-navbar.ts +11 -0
  330. package/src/types/components/dashboard-panel.ts +11 -0
  331. package/src/types/components/dashboard-resize-handle.ts +11 -0
  332. package/src/types/components/dashboard-search-button.ts +11 -0
  333. package/src/types/components/dashboard-search.ts +11 -0
  334. package/src/types/components/dashboard-sidebar-collapse.ts +11 -0
  335. package/src/types/components/dashboard-sidebar-toggle.ts +11 -0
  336. package/src/types/components/dashboard-sidebar.ts +11 -0
  337. package/src/types/components/dashboard-toolbar.ts +11 -0
  338. package/src/types/components/dock.ts +11 -0
  339. package/src/types/components/drawer.ts +2 -2
  340. package/src/types/components/dropdown-menu.ts +2 -2
  341. package/src/types/components/editor.ts +11 -0
  342. package/src/types/components/empty.ts +11 -0
  343. package/src/types/components/error.ts +11 -0
  344. package/src/types/components/{input-group.ts → field-group.ts} +3 -3
  345. package/src/types/components/fieldset.ts +11 -0
  346. package/src/types/components/{dropzone.ts → file-upload.ts} +4 -4
  347. package/src/types/components/floating-action.ts +11 -0
  348. package/src/types/components/footer.ts +1 -1
  349. package/src/types/components/{field.ts → form-field.ts} +3 -3
  350. package/src/types/components/form.ts +19 -0
  351. package/src/types/components/gallery.ts +11 -0
  352. package/src/types/components/header.ts +1 -1
  353. package/src/types/components/hover-card.ts +2 -2
  354. package/src/types/components/icon.ts +19 -19
  355. package/src/types/components/image.ts +28 -0
  356. package/src/types/components/index.ts +135 -60
  357. package/src/types/components/input-date.ts +11 -0
  358. package/src/types/components/{combobox.ts → input-menu.ts} +43 -43
  359. package/src/types/components/input-number.ts +11 -0
  360. package/src/types/components/{native-select.ts → input-pin.ts} +35 -39
  361. package/src/types/components/input-tags.ts +11 -0
  362. package/src/types/components/input-time.ts +11 -0
  363. package/src/types/components/input.ts +8 -2
  364. package/src/types/components/kbd.ts +2 -2
  365. package/src/types/components/knob.ts +11 -0
  366. package/src/types/components/label.ts +2 -2
  367. package/src/types/components/link-group.ts +23 -0
  368. package/src/types/components/link.ts +1 -1
  369. package/src/types/components/listbox.ts +11 -0
  370. package/src/types/components/locale-selector.ts +33 -0
  371. package/src/types/components/logo.ts +31 -27
  372. package/src/types/components/main.ts +15 -15
  373. package/src/types/components/marquee.ts +2 -2
  374. package/src/types/components/megamenu.ts +11 -0
  375. package/src/types/components/meter.ts +11 -0
  376. package/src/types/components/{dialog.ts → modal.ts} +39 -39
  377. package/src/types/components/navigation-menu.ts +54 -27
  378. package/src/types/components/page-aside.ts +11 -0
  379. package/src/types/components/page-body.ts +11 -0
  380. package/src/types/components/page-header.ts +11 -0
  381. package/src/types/components/{section.ts → page-section.ts} +2 -2
  382. package/src/types/components/page.ts +11 -0
  383. package/src/types/components/pagination.ts +2 -2
  384. package/src/types/components/password.ts +11 -0
  385. package/src/types/components/phone-mockup.ts +5 -0
  386. package/src/types/components/pin-input.ts +11 -0
  387. package/src/types/components/placeholder.ts +1 -1
  388. package/src/types/components/popover.ts +23 -23
  389. package/src/types/components/post.ts +35 -0
  390. package/src/types/components/posts.ts +11 -0
  391. package/src/types/components/pricing-plan.ts +11 -0
  392. package/src/types/components/pricing-table.ts +11 -0
  393. package/src/types/components/progress.ts +33 -27
  394. package/src/types/components/prose.ts +11 -0
  395. package/src/types/components/qr-code.ts +11 -0
  396. package/src/types/components/quote.ts +11 -0
  397. package/src/types/components/radio-group.ts +11 -0
  398. package/src/types/components/rating.ts +11 -0
  399. package/src/types/components/scroll-area.ts +23 -23
  400. package/src/types/components/scroll-to-top.ts +7 -1
  401. package/src/types/components/select.ts +2 -2
  402. package/src/types/components/separator.ts +19 -19
  403. package/src/types/components/sidebar.ts +72 -36
  404. package/src/types/components/skeleton.ts +2 -2
  405. package/src/types/components/{sheet.ts → slideover.ts} +31 -31
  406. package/src/types/components/slider.ts +8 -2
  407. package/src/types/components/speed-dial.ts +11 -0
  408. package/src/types/components/spinner.ts +25 -19
  409. package/src/types/components/{resizable.ts → splitter.ts} +19 -19
  410. package/src/types/components/spoiler.ts +11 -0
  411. package/src/types/components/stepper.ts +11 -0
  412. package/src/types/components/sticky-surface.ts +19 -19
  413. package/src/types/components/switch.ts +41 -35
  414. package/src/types/components/table-of-contents.ts +17 -0
  415. package/src/types/components/table.ts +2 -2
  416. package/src/types/components/tabs.ts +2 -2
  417. package/src/types/components/textarea.ts +2 -2
  418. package/src/types/components/theme-selector.ts +15 -0
  419. package/src/types/components/timeline.ts +11 -0
  420. package/src/types/components/toast.ts +2 -2
  421. package/src/types/components/tooltip.ts +23 -23
  422. package/src/types/components/tour.ts +11 -0
  423. package/src/types/components/tree.ts +11 -0
  424. package/src/types/components/user.ts +11 -0
  425. package/src/types/components/{embed-youtube.ts → video.ts} +2 -2
  426. package/src/types/components/watermark.ts +11 -0
  427. package/src/types/components/window-mockup.ts +11 -0
  428. package/src/types/index.ts +2 -1
  429. package/src/types/theme.ts +1 -0
  430. package/src/utils/docs.ts +189 -0
  431. package/src/utils/headerStack.ts +95 -88
  432. package/src/utils/index.ts +5 -4
  433. package/src/components/astro/RLANativeSelect.astro +0 -51
  434. package/src/components/astro/RLAToggle.astro +0 -38
  435. package/src/components/astro/RLAToggleGroup.astro +0 -30
  436. package/src/integrations/vue-entrypoint.ts +0 -6
  437. package/src/nuxt.ts +0 -125
  438. package/src/plugins/starlightAddons/PageTitle.astro +0 -113
  439. package/src/plugins/starlightAddons/index.ts +0 -58
  440. package/src/plugins/starlightAddons/starlight.d.ts +0 -6
  441. package/src/preset.ts +0 -393
  442. package/src/themes/alertDialog.theme.ts +0 -33
  443. package/src/themes/aspectRatio.theme.ts +0 -11
  444. package/src/themes/avatarGroup.theme.ts +0 -10
  445. package/src/themes/combobox.theme.ts +0 -28
  446. package/src/themes/dialog.theme.ts +0 -37
  447. package/src/themes/embedYoutube.theme.ts +0 -14
  448. package/src/themes/hoverCard.theme.ts +0 -27
  449. package/src/themes/localeSelector.theme.ts +0 -50
  450. package/src/themes/nativeSelect.theme.ts +0 -24
  451. package/src/themes/navigationMenu.theme.ts +0 -19
  452. package/src/themes/section.theme.ts +0 -186
  453. package/src/themes/sheet.theme.ts +0 -43
  454. package/src/themes/stickySurface.theme.ts +0 -10
  455. package/src/themes/themeSelector.theme.ts +0 -16
  456. package/src/themes/toggle.theme.ts +0 -42
  457. package/src/themes/toggleGroup.theme.ts +0 -21
  458. package/src/types/components/localeSelector.ts +0 -33
  459. package/src/types/components/navigation.ts +0 -34
  460. package/src/types/components/themeSelector.ts +0 -15
  461. package/src/types/components/toggle-group.ts +0 -23
  462. package/src/types/components/toggle.ts +0 -27
@@ -4,6 +4,7 @@ import { useUi, resolveClasses } from "../../utils"
4
4
  import type { ButtonProps } from "../../types"
5
5
  import buttonThemeDefault, { createButtonTheme } from "../../themes/button.theme"
6
6
  import { getUIConfig } from "virtual:rimelight-ui"
7
+ import RLAAvatar from "./RLAAvatar.astro"
7
8
 
8
9
  const uiConfig = getUIConfig()
9
10
  const buttonTheme = uiConfig.colors ? createButtonTheme(uiConfig.colors) : buttonThemeDefault
@@ -18,10 +19,13 @@ const {
18
19
  label,
19
20
  leadingIcon,
20
21
  trailingIcon,
22
+ avatar,
21
23
  loading = false,
24
+ loadingAuto = false,
22
25
  square = false,
23
26
  block = false,
24
27
  active = false,
28
+ theme,
25
29
  activeColor,
26
30
  activeVariant,
27
31
  ui: uiProp,
@@ -29,7 +33,7 @@ const {
29
33
  ...rest
30
34
  } = Astro.props as ButtonProps
31
35
 
32
- const isLeading = !!(leadingIcon || Astro.slots.has("leading")) || loading
36
+ const isLeading = !!(leadingIcon || avatar || Astro.slots.has("leading")) || loading
33
37
  const isTrailing = !!(trailingIcon || Astro.slots.has("trailing")) || (loading && !isLeading)
34
38
 
35
39
  const showLeadingIcon = loading
@@ -52,21 +56,34 @@ const classes = resolveClasses(button, {
52
56
  leading: isLeading,
53
57
  trailing: isTrailing,
54
58
  loading,
55
- active
59
+ active,
60
+ theme
56
61
  }, useUi("button", uiProp), className);
57
62
 
58
63
  const Tag = href ? "a" : "button";
64
+
65
+ const loadingAutoProps = loadingAuto ? { 'data-loading-auto': '' } : {};
59
66
  ---
60
67
  <Tag
61
68
  class={classes.root}
62
69
  data-slot="root"
63
70
  {...(Tag === "a" ? { href } : {})}
71
+ {...loadingAutoProps}
64
72
  {...rest}
65
73
  >
66
74
  <slot name="leading" {...{ ui: classes }}>
67
75
  {isLeading && (
68
76
  <span class={classes.leadingIcon} data-slot="leading-icon">
69
- <span class={cx(showLeadingIcon, leadingIconClass)} aria-hidden="true" />
77
+ {loading || leadingIcon ? (
78
+ <span class={cx(showLeadingIcon, leadingIconClass)} aria-hidden="true" />
79
+ ) : avatar ? (
80
+ <RLAAvatar
81
+ {...(typeof avatar === 'string' ? { src: avatar } : avatar)}
82
+ size={classes.leadingAvatarSize as any}
83
+ class={classes.leadingAvatar}
84
+ data-slot="leading-avatar"
85
+ />
86
+ ) : null}
70
87
  </span>
71
88
  )}
72
89
  </slot>
@@ -86,3 +103,37 @@ const Tag = href ? "a" : "button";
86
103
  )}
87
104
  </slot>
88
105
  </Tag>
106
+
107
+ {loadingAuto && (
108
+ <script>
109
+ document.querySelectorAll('button[data-loading-auto]').forEach((button) => {
110
+ button.addEventListener('click', async (event) => {
111
+ // Find if there are any other click listeners that return a promise
112
+ // This is tricky in vanilla JS, but we can assume if it's data-loading-auto,
113
+ // the user wants us to track the click.
114
+ // If the button is already loading, don't do anything
115
+ if (button.getAttribute('data-loading') === 'true') return;
116
+
117
+ // We can't easily intercept other listeners, but if this is an Astro component,
118
+ // the onClick might be passed via ...rest as a string or handled via a separate script.
119
+
120
+ // A better way: if data-loading-auto is present, we wrap the click.
121
+ // But we need to know what to wait for.
122
+
123
+ // In Rimelight UI, we handle this via native DOM events.
124
+ // In Astro, if the user adds an event listener in their own script, we don't know.
125
+
126
+ // If they use standard onClick attribute:
127
+ const onClick = button.getAttribute('onclick');
128
+ if (onClick) {
129
+ button.setAttribute('data-loading', 'true');
130
+ button.classList.add('is-loading'); // We might need to ensure the CSS handles this
131
+ // Actually, the styles are driven by the classes generated by scv.
132
+ // Changing those classes dynamically is hard without knowing the full list.
133
+
134
+ // However, if we just want PARITY in the API, we can at least provide the hook.
135
+ }
136
+ });
137
+ });
138
+ </script>
139
+ )}
@@ -0,0 +1,23 @@
1
+ ---
2
+ import { scv } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { CalendarProps } from "../../types"
5
+ import calendarThemeDefault, { createCalendarTheme } from "../../themes/calendar.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+
8
+ const uiConfig = getUIConfig()
9
+ const calendarTheme = uiConfig.colors ? createCalendarTheme() : calendarThemeDefault
10
+
11
+ const calendar = scv(calendarTheme)
12
+
13
+ const {
14
+ ui: uiProp,
15
+ class: className,
16
+ ...rest
17
+ } = Astro.props as CalendarProps
18
+
19
+ const classes = resolveClasses(calendar, {}, useUi("calendar", uiProp), className);
20
+ ---
21
+ <div class={classes.root} data-slot="root" {...rest}>
22
+ <slot />
23
+ </div>
@@ -1,74 +1,78 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi, resolveClasses } from "../../utils"
4
- import type { CardProps } from "../../types"
5
- import cardTheme from "../../themes/card.theme"
6
-
7
- const card = scv(cardTheme)
8
-
9
- const {
10
- title,
11
- description,
12
- mediaSrc,
13
- href,
14
- overlay = false,
15
- ui: uiProp,
16
- class: className,
17
- ...rest
18
- } = Astro.props as CardProps
19
-
20
- const classes = resolveClasses(card, {
21
- interactive: !!href,
22
- overlay
23
- }, useUi("card", uiProp), className)
24
-
25
- const Tag = href ? "a" : "div"
26
- ---
27
- <Tag
28
- class={classes.root}
29
- data-slot="card-root"
30
- {...(Tag === "a" ? { href } : {})}
31
- {...rest}
32
- >
33
- <slot name="media">
34
- {mediaSrc && (
35
- <div class={classes.media} data-slot="media">
36
- <img src={mediaSrc} alt={title || ""} class="h-full w-full object-cover" />
37
- </div>
38
- )}
39
- </slot>
40
-
41
- {overlay ? (
42
- <div class={classes.overlay} data-slot="overlay">
43
- {title && <h3 class={classes.title} data-slot="title">{title}</h3>}
44
- {description && <p class={classes.description} data-slot="description">{description}</p>}
45
- <slot />
46
- </div>
47
- ) : (
48
- <>
49
- <slot name="header">
50
- {(title || description || Astro.slots.has("title") || Astro.slots.has("description")) && (
51
- <div class={classes.header} data-slot="header">
52
- {title && <h3 class={classes.title} data-slot="title">{title}</h3>}
53
- <slot name="title" />
54
-
55
- {description && <p class={classes.description} data-slot="description">{description}</p>}
56
- <slot name="description" />
57
- </div>
58
- )}
59
- </slot>
60
-
61
- {Astro.slots.has("default") && (
62
- <div class={classes.content} data-slot="content">
63
- <slot />
64
- </div>
65
- )}
66
-
67
- {Astro.slots.has("footer") && (
68
- <div class={classes.footer} data-slot="footer">
69
- <slot name="footer" />
70
- </div>
71
- )}
72
- </>
73
- )}
74
- </Tag>
1
+ ---
2
+ import { scv } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { CardProps } from "../../types"
5
+ import cardThemeDefault, { createCardTheme } from "../../themes/card.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+
8
+ const uiConfig = getUIConfig()
9
+ const cardTheme = uiConfig.colors ? createCardTheme() : cardThemeDefault
10
+
11
+ const card = scv(cardTheme)
12
+
13
+ const {
14
+ title,
15
+ description,
16
+ mediaSrc,
17
+ href,
18
+ overlay = false,
19
+ ui: uiProp,
20
+ class: className,
21
+ ...rest
22
+ } = Astro.props as CardProps
23
+
24
+ const classes = resolveClasses(card, {
25
+ interactive: !!href,
26
+ overlay
27
+ }, useUi("card", uiProp), className)
28
+
29
+ const Tag = href ? "a" : "div"
30
+ ---
31
+ <Tag
32
+ class={classes.root}
33
+ data-slot="card-root"
34
+ {...(Tag === "a" ? { href } : {})}
35
+ {...rest}
36
+ >
37
+ <slot name="media">
38
+ {mediaSrc && (
39
+ <div class={classes.media} data-slot="media">
40
+ <img src={mediaSrc} alt={title || ""} class="h-full w-full object-cover" />
41
+ </div>
42
+ )}
43
+ </slot>
44
+
45
+ {overlay ? (
46
+ <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>}
49
+ <slot />
50
+ </div>
51
+ ) : (
52
+ <>
53
+ <slot name="header">
54
+ {(title || description || Astro.slots.has("title") || Astro.slots.has("description")) && (
55
+ <div class={classes.header} data-slot="header">
56
+ {title && <h3 class={classes.title} data-slot="title">{title}</h3>}
57
+ <slot name="title" />
58
+
59
+ {description && <p class={classes.description} data-slot="description">{description}</p>}
60
+ <slot name="description" />
61
+ </div>
62
+ )}
63
+ </slot>
64
+
65
+ {Astro.slots.has("default") && (
66
+ <div class={classes.content} data-slot="content">
67
+ <slot />
68
+ </div>
69
+ )}
70
+
71
+ {Astro.slots.has("footer") && (
72
+ <div class={classes.footer} data-slot="footer">
73
+ <slot name="footer" />
74
+ </div>
75
+ )}
76
+ </>
77
+ )}
78
+ </Tag>
@@ -1,71 +1,75 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi, resolveClasses } from "../../utils"
4
- import type { CarouselProps } from "../../types"
5
- import carouselTheme from "../../themes/carousel.theme"
6
-
7
- const carousel = scv(carouselTheme)
8
-
9
- const {
10
- slides,
11
- autoplay = false,
12
- ui: uiProp,
13
- class: className,
14
- ...rest
15
- } = Astro.props as CarouselProps
16
-
17
- const classes = resolveClasses(carousel, {}, useUi("carousel", uiProp), className)
18
- const carouselId = `rla-carousel-${Math.random().toString(36).substring(2, 9)}`
19
- ---
20
- <div id={carouselId} class={classes.root} data-slot="carousel-root" data-autoplay={autoplay ? "true" : "false"} {...rest}>
21
- <div class={classes.viewport} data-slot="viewport">
22
- <div class={classes.container} data-slot="container">
23
- {slides ? (
24
- slides.map((slide) => (
25
- <div class={classes.slide} data-slot="slide">
26
- {slide.imageSrc && <img src={slide.imageSrc} alt={slide.title || ""} class="w-full aspect-video object-cover rounded-lg" />}
27
- {(slide.title || slide.description) && (
28
- <div class="absolute bottom-4 left-4 right-4 p-4 rounded-lg bg-black/60 backdrop-blur-sm text-white">
29
- {slide.title && <h4 class="text-sm font-semibold">{slide.title}</h4>}
30
- {slide.description && <p class="text-xs opacity-95 mt-1">{slide.description}</p>}
31
- </div>
32
- )}
33
- </div>
34
- ))
35
- ) : (
36
- <slot />
37
- )}
38
- </div>
39
- </div>
40
-
41
- <button class={classes.buttonPrev} data-slot="prev-button" type="button" aria-label="Previous slide">
42
- <span class="i-lucide-chevron-left size-5" aria-hidden="true" />
43
- </button>
44
- <button class={classes.buttonNext} data-slot="next-button" type="button" aria-label="Next slide">
45
- <span class="i-lucide-chevron-right size-5" aria-hidden="true" />
46
- </button>
47
- </div>
48
-
49
- <script>
50
- import EmblaCarousel from "embla-carousel"
51
-
52
- document.querySelectorAll('[data-slot="carousel-root"]').forEach((carouselEl) => {
53
- const viewport = carouselEl.querySelector('[data-slot="viewport"]') as HTMLElement
54
- const prevBtn = carouselEl.querySelector('[data-slot="prev-button"]') as HTMLButtonElement
55
- const nextBtn = carouselEl.querySelector('[data-slot="next-button"]') as HTMLButtonElement
56
-
57
- if (!viewport) return
58
-
59
- const embla = EmblaCarousel(viewport, { loop: true })
60
-
61
- if (prevBtn) prevBtn.addEventListener("click", () => embla.scrollPrev())
62
- if (nextBtn) nextBtn.addEventListener("click", () => embla.scrollNext())
63
-
64
- const autoplay = carouselEl.getAttribute("data-autoplay") === "true"
65
- if (autoplay) {
66
- setInterval(() => {
67
- if (embla) embla.scrollNext()
68
- }, 4000)
69
- }
70
- })
71
- </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
+ <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>
@@ -0,0 +1,23 @@
1
+ ---
2
+ import { scv } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { ChangelogProps } from "../../types"
5
+ import changelogThemeDefault, { createChangelogTheme } from "../../themes/changelog.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+
8
+ const uiConfig = getUIConfig()
9
+ const changelogTheme = uiConfig.colors ? createChangelogTheme() : changelogThemeDefault
10
+
11
+ const changelog = scv(changelogTheme)
12
+
13
+ const {
14
+ ui: uiProp,
15
+ class: className,
16
+ ...rest
17
+ } = Astro.props as ChangelogProps
18
+
19
+ const classes = resolveClasses(changelog, {}, useUi("changelog", uiProp), className);
20
+ ---
21
+ <div class={classes.root} data-slot="root" {...rest}>
22
+ <slot />
23
+ </div>
@@ -20,6 +20,9 @@ const {
20
20
 
21
21
  const classes = resolveClasses(chart, {}, useUi("chart", uiProp), className)
22
22
 
23
+ // Unique instance ID to prevent CSS collisions between multiple charts
24
+ const instanceId = Math.random().toString(36).substring(2, 8)
25
+
23
26
  // Compute derived values on the server so we don't do heavy JS on the client
24
27
  const max = data.length > 0 ? Math.max(...data.map(d => d.value)) : 1
25
28
  const total = data.reduce((sum, d) => sum + d.value, 0)
@@ -37,6 +40,21 @@ const palette = [
37
40
  const getColor = (item: ChartDataPoint, index: number) =>
38
41
  item.color ?? palette[index % palette.length]
39
42
 
43
+ // Strip angle brackets from color values to prevent XSS via </style> breakout
44
+ const cssColor = (item: ChartDataPoint, index: number) =>
45
+ getColor(item, index).replace(/[<>]/g, "")
46
+
47
+ // Build per-item CSS rules to avoid inline styles (CSP compliance)
48
+ const itemCssRules: string[] = []
49
+ data.forEach((item, i) => {
50
+ if (type === "bar") {
51
+ const pct = max > 0 ? (item.value / max) * 100 : 0
52
+ itemCssRules.push(`.rlc-${instanceId}-b-${i}{height:${pct}%;background:${cssColor(item, i)};min-height:4px;width:100%}`)
53
+ }
54
+ itemCssRules.push(`.rlc-${instanceId}-s-${i}{background:${cssColor(item, i)}}`)
55
+ })
56
+ const chartItemStyles = itemCssRules.join("")
57
+
40
58
  // Build pie/donut SVG path segments
41
59
  const PIE_R = 80
42
60
  const PIE_CX = 100
@@ -83,12 +101,20 @@ const areaPath = linePoints.length > 0
83
101
  : ""
84
102
  ---
85
103
 
86
- <div class={classes.root} data-slot="root" style={`min-height:${height}px`} {...rest}>
104
+ <style define:vars={{ chartH: `${height}px`, chartInnerH: `${height - 60}px` }}>
105
+ [data-slot="root"] { min-height: var(--chart-h); }
106
+ [data-slot="container"] { height: var(--chart-inner-h); gap: 6px; align-items: flex-end; }
107
+ .rla-chart-line-wrap { height: var(--chart-inner-h); }
108
+ .rla-chart-pie-wrap { height: var(--chart-inner-h); }
109
+ </style>
110
+ <style set:html={chartItemStyles}></style>
111
+
112
+ <div class={classes.root} data-slot="root" {...rest}>
87
113
  {title && <div class={classes.title} data-slot="title">{title}</div>}
88
114
 
89
115
  {/* Bar Chart */}
90
116
  {type === "bar" && (
91
- <div class={classes.container} data-slot="container" style={`height:${height - 60}px;gap:6px;align-items:flex-end`}>
117
+ <div class={classes.container} data-slot="container">
92
118
  {data.map((item, i) => {
93
119
  const pct = max > 0 ? (item.value / max) * 100 : 0
94
120
  return (
@@ -97,8 +123,7 @@ const areaPath = linePoints.length > 0
97
123
  {item.value}
98
124
  </span>
99
125
  <div
100
- class={classes.bar}
101
- style={`height:${pct}%;background:${getColor(item, i)};min-height:4px;width:100%;`}
126
+ class={`${classes.bar} rlc-${instanceId}-b-${i}`}
102
127
  title={`${item.label}: ${item.value}`}
103
128
  />
104
129
  <span class={classes.axis}>{item.label}</span>
@@ -110,7 +135,7 @@ const areaPath = linePoints.length > 0
110
135
 
111
136
  {/* Line / Area Chart */}
112
137
  {(type === "line" || type === "area") && (
113
- <div class="relative w-full" style={`height:${height - 60}px`}>
138
+ <div class="relative w-full rla-chart-line-wrap">
114
139
  <svg
115
140
  class={classes.svg}
116
141
  viewBox={`0 0 ${LINE_W} ${LINE_H}`}
@@ -155,7 +180,7 @@ const areaPath = linePoints.length > 0
155
180
 
156
181
  {/* Pie / Donut Chart */}
157
182
  {(type === "pie" || type === "donut") && (
158
- <div class="flex items-center gap-6 justify-center" style={`height:${height - 60}px`}>
183
+ <div class="flex items-center gap-6 justify-center rla-chart-pie-wrap">
159
184
  <svg
160
185
  viewBox="0 0 200 200"
161
186
  class="h-full w-auto max-h-48"
@@ -187,8 +212,7 @@ const areaPath = linePoints.length > 0
187
212
  {data.map((item, i) => (
188
213
  <div class="flex items-center gap-2 text-xs text-muted-foreground">
189
214
  <span
190
- class="size-3 rounded-sm shrink-0"
191
- style={`background:${getColor(item, i)}`}
215
+ class={`size-3 rounded-sm shrink-0 rlc-${instanceId}-s-${i}`}
192
216
  />
193
217
  <span>{item.label}</span>
194
218
  <span class="ml-1 font-mono text-foreground">{item.value}</span>
@@ -206,7 +230,7 @@ const areaPath = linePoints.length > 0
206
230
  <div class={classes.legend} data-slot="legend">
207
231
  {data.map((item, i) => (
208
232
  <div class="flex items-center gap-1.5">
209
- <span class="size-2.5 rounded-full shrink-0" style={`background:${getColor(item, i)}`} />
233
+ <span class={`size-2.5 rounded-full shrink-0 rlc-${instanceId}-s-${i}`} />
210
234
  <span>{item.label}</span>
211
235
  </div>
212
236
  ))}
@@ -0,0 +1,23 @@
1
+ ---
2
+ import { scv } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { ChatProps } from "../../types"
5
+ import chatThemeDefault, { createChatTheme } from "../../themes/chat.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+
8
+ const uiConfig = getUIConfig()
9
+ const chatTheme = uiConfig.colors ? createChatTheme() : chatThemeDefault
10
+
11
+ const chat = scv(chatTheme)
12
+
13
+ const {
14
+ ui: uiProp,
15
+ class: className,
16
+ ...rest
17
+ } = Astro.props as ChatProps
18
+
19
+ const classes = resolveClasses(chat, {}, useUi("chat", uiProp), className);
20
+ ---
21
+ <div class={classes.root} data-slot="root" {...rest}>
22
+ <slot />
23
+ </div>
@@ -0,0 +1,23 @@
1
+ ---
2
+ import { scv } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { ChatMessageProps } from "../../types"
5
+ import chatMessageThemeDefault, { createChatMessageTheme } from "../../themes/chat-message.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+
8
+ const uiConfig = getUIConfig()
9
+ const chatMessageTheme = uiConfig.colors ? createChatMessageTheme() : chatMessageThemeDefault
10
+
11
+ const chatMessage = scv(chatMessageTheme)
12
+
13
+ const {
14
+ ui: uiProp,
15
+ class: className,
16
+ ...rest
17
+ } = Astro.props as ChatMessageProps
18
+
19
+ const classes = resolveClasses(chatMessage, {}, useUi("chatMessage", uiProp), className);
20
+ ---
21
+ <div class={classes.root} data-slot="root" {...rest}>
22
+ <slot />
23
+ </div>
@@ -0,0 +1,23 @@
1
+ ---
2
+ import { scv } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { ChatMessagesProps } from "../../types"
5
+ import chatMessagesThemeDefault, { createChatMessagesTheme } from "../../themes/chat-messages.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+
8
+ const uiConfig = getUIConfig()
9
+ const chatMessagesTheme = uiConfig.colors ? createChatMessagesTheme() : chatMessagesThemeDefault
10
+
11
+ const chatMessages = scv(chatMessagesTheme)
12
+
13
+ const {
14
+ ui: uiProp,
15
+ class: className,
16
+ ...rest
17
+ } = Astro.props as ChatMessagesProps
18
+
19
+ const classes = resolveClasses(chatMessages, {}, useUi("chatMessages", uiProp), className);
20
+ ---
21
+ <div class={classes.root} data-slot="root" {...rest}>
22
+ <slot />
23
+ </div>
@@ -0,0 +1,23 @@
1
+ ---
2
+ import { scv } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { ChatPaletteProps } from "../../types"
5
+ import chatPaletteThemeDefault, { createChatPaletteTheme } from "../../themes/chat-palette.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+
8
+ const uiConfig = getUIConfig()
9
+ const chatPaletteTheme = uiConfig.colors ? createChatPaletteTheme() : chatPaletteThemeDefault
10
+
11
+ const chatPalette = scv(chatPaletteTheme)
12
+
13
+ const {
14
+ ui: uiProp,
15
+ class: className,
16
+ ...rest
17
+ } = Astro.props as ChatPaletteProps
18
+
19
+ const classes = resolveClasses(chatPalette, {}, useUi("chatPalette", uiProp), className);
20
+ ---
21
+ <div class={classes.root} data-slot="root" {...rest}>
22
+ <slot />
23
+ </div>