@rimelight/ui 0.0.33 → 0.0.35

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 (389) hide show
  1. package/README.md +158 -157
  2. package/package.json +100 -105
  3. package/src/components/astro/RLAAccordion.astro +94 -18
  4. package/src/components/astro/RLAAspectRatio.astro +2 -2
  5. package/src/components/astro/RLAAvatar.astro +135 -68
  6. package/src/components/astro/RLABadge.astro +4 -2
  7. package/src/components/astro/RLABanner.astro +138 -23
  8. package/src/components/astro/RLABreadcrumb.astro +13 -0
  9. package/src/components/astro/RLAButton.astro +145 -139
  10. package/src/components/astro/RLACallout.astro +112 -0
  11. package/src/components/astro/RLACard.astro +6 -5
  12. package/src/components/astro/RLACarousel.astro +104 -75
  13. package/src/components/astro/RLAChart.astro +23 -35
  14. package/src/components/astro/RLAChip.astro +11 -5
  15. package/src/components/astro/RLACollapsible.astro +4 -1
  16. package/src/components/astro/RLAColorArea.astro +432 -0
  17. package/src/components/astro/RLAColorField.astro +300 -0
  18. package/src/components/astro/RLAColorSlider.astro +413 -0
  19. package/src/components/astro/RLAConfirm.astro +13 -11
  20. package/src/components/astro/RLACopyMarkdown.astro +78 -0
  21. package/src/components/astro/RLADate.astro +30 -0
  22. package/src/components/astro/RLADrawer.astro +50 -3
  23. package/src/components/astro/RLADropdownMenu.astro +78 -51
  24. package/src/components/astro/RLAFieldGroup.astro +4 -1
  25. package/src/components/astro/RLAFileUpload.astro +114 -100
  26. package/src/components/astro/RLAFooter.astro +2 -1
  27. package/src/components/astro/RLAFormField.astro +10 -6
  28. package/src/components/astro/RLAGrid.astro +31 -39
  29. package/src/components/astro/RLAHead.astro +528 -197
  30. package/src/components/astro/RLAHeader.astro +67 -59
  31. package/src/components/astro/RLAImage.astro +274 -209
  32. package/src/components/astro/RLAInput.astro +14 -9
  33. package/src/components/astro/RLAInputMenu.astro +119 -83
  34. package/src/components/astro/RLAKbd.astro +5 -5
  35. package/src/components/astro/RLALayoutGrid.astro +395 -0
  36. package/src/components/astro/RLALink.astro +44 -23
  37. package/src/components/astro/RLALinkGroup.astro +99 -37
  38. package/src/components/astro/RLALocaleSelector.astro +130 -113
  39. package/src/components/astro/RLALogo.astro +117 -90
  40. package/src/components/astro/RLAMain.astro +8 -3
  41. package/src/components/astro/RLAMarquee.astro +9 -2
  42. package/src/components/astro/RLAModal.astro +48 -18
  43. package/src/components/astro/RLANavigationMenu.astro +381 -137
  44. package/src/components/astro/{RLADocsPackageManagers.astro → RLAPackageManagers.astro} +81 -87
  45. package/src/components/astro/RLAPageSection.astro +4 -2
  46. package/src/components/astro/RLAPagination.astro +2 -4
  47. package/src/components/astro/RLAPopover.astro +4 -3
  48. package/src/components/astro/RLAPost.astro +11 -2
  49. package/src/components/astro/RLAProgress.astro +8 -2
  50. package/src/components/astro/RLAScrollArea.astro +4 -1
  51. package/src/components/astro/RLAScrollToTop.astro +200 -172
  52. package/src/components/astro/RLASearch.astro +282 -0
  53. package/src/components/astro/RLASelect.astro +101 -64
  54. package/src/components/astro/RLASeparator.astro +11 -6
  55. package/src/components/astro/RLAShare.astro +60 -0
  56. package/src/components/astro/RLAShortcuts.astro +429 -0
  57. package/src/components/astro/RLASidebar.astro +158 -212
  58. package/src/components/astro/RLASlideover.astro +99 -4
  59. package/src/components/astro/RLASlider.astro +14 -14
  60. package/src/components/astro/RLASplitter.astro +207 -142
  61. package/src/components/astro/RLASteps.astro +118 -71
  62. package/src/components/astro/RLAStickySurface.astro +9 -2
  63. package/src/components/astro/RLASurround.astro +39 -0
  64. package/src/components/astro/RLATable.astro +4 -1
  65. package/src/components/astro/RLATableOfContents.astro +109 -23
  66. package/src/components/astro/RLATabs.astro +147 -133
  67. package/src/components/astro/RLATextarea.astro +4 -1
  68. package/src/components/astro/RLAThemeSelector.astro +105 -76
  69. package/src/components/astro/RLAToast.astro +35 -21
  70. package/src/components/vue/RLVBanner.vue +230 -0
  71. package/src/components/vue/RLVButton.vue +3 -2
  72. package/src/components/vue/RLVCheckbox.vue +70 -68
  73. package/src/components/vue/RLVFooter.vue +3 -2
  74. package/src/components/vue/RLVForm.vue +44 -44
  75. package/src/components/vue/RLVFormField.vue +58 -58
  76. package/src/components/vue/RLVHeader.vue +3 -2
  77. package/src/components/vue/RLVIcon.vue +4 -2
  78. package/src/components/vue/RLVInput.vue +94 -93
  79. package/src/components/vue/RLVLogo.vue +25 -3
  80. package/src/components/vue/RLVPlaceholder.vue +3 -2
  81. package/src/components/vue/RLVPost.vue +69 -63
  82. package/src/components/vue/RLVPosts.vue +21 -21
  83. package/src/components/vue/RLVProgress.vue +60 -0
  84. package/src/components/vue/RLVScrollToTop.vue +65 -52
  85. package/src/components/vue/RLVSection.vue +14 -13
  86. package/src/components/vue/RLVToast.vue +81 -68
  87. package/src/components/vue/RLVToaster.vue +29 -29
  88. package/src/composables/index.ts +4 -3
  89. package/src/composables/useHeaderStore.ts +14 -14
  90. package/src/composables/useScrollToTop.ts +62 -62
  91. package/src/composables/useShortcuts.ts +11 -0
  92. package/src/composables/useToast.ts +43 -42
  93. package/src/config/index.ts +1 -0
  94. package/src/config/security.ts +227 -0
  95. package/src/config/site.config.ts +1 -0
  96. package/src/docs/components/ApiChangelog.astro +147 -0
  97. package/src/{plugins/starlightDocsApi → docs}/components/ApiEmits.astro +4 -4
  98. package/src/{plugins/starlightDocsApi → docs}/components/ApiProps.astro +4 -4
  99. package/src/{plugins/starlightDocsApi → docs}/components/ApiSlots.astro +4 -4
  100. package/src/docs/components/ApiTheme.astro +100 -0
  101. package/src/docs/extractAll.ts +94 -0
  102. package/src/docs/extractors/extractAstro.ts +69 -0
  103. package/src/docs/extractors/extractTheme.ts +56 -0
  104. package/src/{plugins/starlightDocsApi/extract-vue.ts → docs/extractors/extractVue.ts} +164 -15
  105. package/src/{plugins/starlightDocsApi → docs}/utils.ts +1 -2
  106. package/src/env.d.ts +0 -12
  107. package/src/integrations/ui.ts +215 -199
  108. package/src/middleware/security.ts +145 -29
  109. package/src/presets/defaults.ts +297 -297
  110. package/src/presets/index.ts +508 -637
  111. package/src/styles/index.css +158 -160
  112. package/src/themes/3d-hover.theme.ts +13 -13
  113. package/src/themes/accordion.theme.ts +39 -13
  114. package/src/themes/app.theme.ts +13 -13
  115. package/src/themes/aspect-ratio.theme.ts +1 -1
  116. package/src/themes/audio.theme.ts +13 -13
  117. package/src/themes/avatar-group.theme.ts +1 -1
  118. package/src/themes/avatar.theme.ts +84 -84
  119. package/src/themes/badge.theme.ts +168 -163
  120. package/src/themes/banner.theme.ts +49 -13
  121. package/src/themes/breadcrumb.theme.ts +1 -1
  122. package/src/themes/browser-mockup.theme.ts +13 -13
  123. package/src/themes/button.theme.ts +223 -202
  124. package/src/themes/calendar.theme.ts +13 -13
  125. package/src/themes/{alert.theme.ts → callout.theme.ts} +104 -125
  126. package/src/themes/card.theme.ts +50 -42
  127. package/src/themes/carousel.theme.ts +1 -1
  128. package/src/themes/chart.theme.ts +22 -22
  129. package/src/themes/chat-message.theme.ts +13 -13
  130. package/src/themes/chat-messages.theme.ts +13 -13
  131. package/src/themes/chat-palette.theme.ts +13 -13
  132. package/src/themes/chat-prompt-submit.theme.ts +13 -13
  133. package/src/themes/chat-prompt.theme.ts +13 -13
  134. package/src/themes/chat-reasoning.theme.ts +13 -13
  135. package/src/themes/chat-shimmer.theme.ts +13 -13
  136. package/src/themes/chat-tool.theme.ts +13 -13
  137. package/src/themes/chat.theme.ts +13 -13
  138. package/src/themes/checkbox.theme.ts +49 -50
  139. package/src/themes/chip.theme.ts +73 -74
  140. package/src/themes/color-area.theme.ts +33 -0
  141. package/src/themes/color-field.theme.ts +32 -0
  142. package/src/themes/color-picker.theme.ts +13 -13
  143. package/src/themes/color-slider.theme.ts +34 -0
  144. package/src/themes/command-palette.theme.ts +13 -13
  145. package/src/themes/compare.theme.ts +13 -13
  146. package/src/themes/confirm.theme.ts +48 -48
  147. package/src/themes/container.theme.ts +13 -13
  148. package/src/themes/context-menu.theme.ts +13 -13
  149. package/src/themes/dashboard-group.theme.ts +13 -13
  150. package/src/themes/dashboard-navbar.theme.ts +13 -13
  151. package/src/themes/dashboard-panel.theme.ts +13 -13
  152. package/src/themes/dashboard-resize-handle.theme.ts +13 -13
  153. package/src/themes/dashboard-search-button.theme.ts +13 -13
  154. package/src/themes/dashboard-search.theme.ts +13 -13
  155. package/src/themes/dashboard-sidebar-collapse.theme.ts +13 -13
  156. package/src/themes/dashboard-sidebar-toggle.theme.ts +13 -13
  157. package/src/themes/dashboard-sidebar.theme.ts +13 -13
  158. package/src/themes/dashboard-toolbar.theme.ts +13 -13
  159. package/src/themes/dock.theme.ts +13 -13
  160. package/src/themes/drawer.theme.ts +61 -61
  161. package/src/themes/dropdown-menu.theme.ts +29 -29
  162. package/src/themes/editor.theme.ts +13 -13
  163. package/src/themes/empty.theme.ts +13 -13
  164. package/src/themes/error.theme.ts +13 -13
  165. package/src/themes/field-group.theme.ts +24 -24
  166. package/src/themes/fieldset.theme.ts +13 -13
  167. package/src/themes/floating-action.theme.ts +13 -13
  168. package/src/themes/footer.theme.ts +30 -30
  169. package/src/themes/form.theme.ts +13 -13
  170. package/src/themes/gallery.theme.ts +13 -13
  171. package/src/themes/grid.theme.ts +38 -0
  172. package/src/themes/head.theme.ts +13 -13
  173. package/src/themes/header.theme.ts +46 -46
  174. package/src/themes/hover-card.theme.ts +1 -1
  175. package/src/themes/icon.theme.ts +23 -23
  176. package/src/themes/image.theme.ts +33 -19
  177. package/src/themes/input-date.theme.ts +13 -13
  178. package/src/themes/input-menu.theme.ts +35 -35
  179. package/src/themes/input-number.theme.ts +13 -13
  180. package/src/themes/input-tags.theme.ts +13 -13
  181. package/src/themes/input-time.theme.ts +13 -13
  182. package/src/themes/input.theme.ts +48 -42
  183. package/src/themes/kbd.theme.ts +94 -89
  184. package/src/themes/knob.theme.ts +13 -13
  185. package/src/themes/label.theme.ts +1 -1
  186. package/src/themes/layout-grid.theme.ts +16 -0
  187. package/src/themes/link-group.theme.ts +28 -32
  188. package/src/themes/link.theme.ts +13 -13
  189. package/src/themes/listbox.theme.ts +13 -13
  190. package/src/themes/locale-selector.theme.ts +49 -49
  191. package/src/themes/logo.theme.ts +13 -13
  192. package/src/themes/main.theme.ts +13 -13
  193. package/src/themes/marquee.theme.ts +1 -1
  194. package/src/themes/meter.theme.ts +13 -13
  195. package/src/themes/modal.theme.ts +1 -1
  196. package/src/themes/navigation-menu.theme.ts +44 -27
  197. package/src/themes/page-aside.theme.ts +13 -13
  198. package/src/themes/page-body.theme.ts +13 -13
  199. package/src/themes/page-header.theme.ts +13 -13
  200. package/src/themes/page-section.theme.ts +189 -187
  201. package/src/themes/page.theme.ts +13 -13
  202. package/src/themes/pagination.theme.ts +1 -1
  203. package/src/themes/password.theme.ts +13 -13
  204. package/src/themes/phone-mockup.theme.ts +13 -13
  205. package/src/themes/pin-input.theme.ts +1 -1
  206. package/src/themes/placeholder.theme.ts +15 -15
  207. package/src/themes/popover.theme.ts +1 -1
  208. package/src/themes/post.theme.ts +53 -33
  209. package/src/themes/pricing-plan.theme.ts +13 -13
  210. package/src/themes/pricing-table.theme.ts +13 -13
  211. package/src/themes/progress.theme.ts +37 -38
  212. package/src/themes/prose.theme.ts +13 -13
  213. package/src/themes/qr-code.theme.ts +13 -13
  214. package/src/themes/quote.theme.ts +13 -13
  215. package/src/themes/radio-group.theme.ts +13 -13
  216. package/src/themes/rating.theme.ts +13 -13
  217. package/src/themes/scroll-area.theme.ts +26 -26
  218. package/src/themes/scroll-to-top.theme.ts +51 -52
  219. package/src/themes/search.theme.ts +64 -0
  220. package/src/themes/select.theme.ts +29 -29
  221. package/src/themes/separator.theme.ts +147 -147
  222. package/src/themes/sidebar.theme.ts +38 -38
  223. package/src/themes/skeleton.theme.ts +21 -21
  224. package/src/themes/slideover.theme.ts +5 -5
  225. package/src/themes/slider.theme.ts +35 -36
  226. package/src/themes/speed-dial.theme.ts +13 -13
  227. package/src/themes/spinner.theme.ts +33 -34
  228. package/src/themes/splitter.theme.ts +23 -23
  229. package/src/themes/spoiler.theme.ts +13 -13
  230. package/src/themes/stepper.theme.ts +13 -13
  231. package/src/themes/{megamenu.theme.ts → steps.theme.ts} +13 -13
  232. package/src/themes/sticky-surface.theme.ts +1 -1
  233. package/src/themes/switch.theme.ts +66 -67
  234. package/src/themes/table-of-contents.theme.ts +67 -48
  235. package/src/themes/tabs.theme.ts +52 -52
  236. package/src/themes/textarea.theme.ts +27 -27
  237. package/src/themes/theme-selector.theme.ts +15 -15
  238. package/src/themes/timeline.theme.ts +18 -13
  239. package/src/themes/toast.theme.ts +31 -31
  240. package/src/themes/tooltip.theme.ts +28 -28
  241. package/src/themes/tour.theme.ts +13 -13
  242. package/src/themes/tree.theme.ts +13 -13
  243. package/src/themes/user.theme.ts +13 -13
  244. package/src/themes/video.theme.ts +17 -17
  245. package/src/themes/watermark.theme.ts +13 -13
  246. package/src/themes/window-mockup.theme.ts +13 -13
  247. package/src/types/components/3d-hover.ts +11 -11
  248. package/src/types/components/accordion.ts +35 -2
  249. package/src/types/components/app.ts +11 -11
  250. package/src/types/components/audio.ts +11 -11
  251. package/src/types/components/avatar-group.ts +11 -11
  252. package/src/types/components/avatar.ts +76 -60
  253. package/src/types/components/badge.ts +2 -2
  254. package/src/types/components/banner.ts +53 -11
  255. package/src/types/components/browser-mockup.ts +11 -11
  256. package/src/types/components/button.ts +73 -81
  257. package/src/types/components/calendar.ts +11 -11
  258. package/src/types/components/{alert.ts → callout.ts} +8 -8
  259. package/src/types/components/changelog.ts +11 -11
  260. package/src/types/components/chart.ts +2 -1
  261. package/src/types/components/chat-message.ts +11 -11
  262. package/src/types/components/chat-messages.ts +11 -11
  263. package/src/types/components/chat-palette.ts +11 -11
  264. package/src/types/components/chat-prompt-submit.ts +11 -11
  265. package/src/types/components/chat-prompt.ts +11 -11
  266. package/src/types/components/chat-reasoning.ts +11 -11
  267. package/src/types/components/chat-shimmer.ts +11 -11
  268. package/src/types/components/chat-tool.ts +11 -11
  269. package/src/types/components/chat.ts +11 -11
  270. package/src/types/components/checkbox.ts +2 -2
  271. package/src/types/components/chip.ts +17 -17
  272. package/src/types/components/collapsible.ts +2 -1
  273. package/src/types/components/color-area.ts +19 -0
  274. package/src/types/components/color-field.ts +21 -0
  275. package/src/types/components/color-picker.ts +11 -11
  276. package/src/types/components/color-slider.ts +20 -0
  277. package/src/types/components/command-palette.ts +11 -11
  278. package/src/types/components/compare.ts +11 -11
  279. package/src/types/components/container.ts +17 -17
  280. package/src/types/components/context-menu.ts +11 -11
  281. package/src/types/components/dashboard-group.ts +11 -11
  282. package/src/types/components/dashboard-navbar.ts +11 -11
  283. package/src/types/components/dashboard-panel.ts +11 -11
  284. package/src/types/components/dashboard-resize-handle.ts +11 -11
  285. package/src/types/components/dashboard-search-button.ts +11 -11
  286. package/src/types/components/dashboard-search.ts +11 -11
  287. package/src/types/components/dashboard-sidebar-collapse.ts +11 -11
  288. package/src/types/components/dashboard-sidebar-toggle.ts +11 -11
  289. package/src/types/components/dashboard-sidebar.ts +11 -11
  290. package/src/types/components/dashboard-toolbar.ts +11 -11
  291. package/src/types/components/dock.ts +11 -11
  292. package/src/types/components/dropdown-menu.ts +2 -1
  293. package/src/types/components/editor.ts +11 -11
  294. package/src/types/components/empty.ts +11 -11
  295. package/src/types/components/error.ts +11 -11
  296. package/src/types/components/fieldset.ts +11 -11
  297. package/src/types/components/file-upload.ts +2 -1
  298. package/src/types/components/floating-action.ts +11 -11
  299. package/src/types/components/form.ts +19 -19
  300. package/src/types/components/gallery.ts +11 -11
  301. package/src/types/components/grid.ts +23 -0
  302. package/src/types/components/icon.ts +19 -19
  303. package/src/types/components/image.ts +32 -28
  304. package/src/types/components/input-date.ts +11 -11
  305. package/src/types/components/input-menu.ts +44 -43
  306. package/src/types/components/input-number.ts +11 -11
  307. package/src/types/components/input-pin.ts +36 -35
  308. package/src/types/components/input-tags.ts +11 -11
  309. package/src/types/components/input-time.ts +11 -11
  310. package/src/types/components/input.ts +6 -2
  311. package/src/types/components/knob.ts +11 -11
  312. package/src/types/components/layout-grid.ts +145 -0
  313. package/src/types/components/link-group.ts +47 -23
  314. package/src/types/components/link.ts +19 -0
  315. package/src/types/components/listbox.ts +11 -11
  316. package/src/types/components/locale-selector.ts +33 -33
  317. package/src/types/components/logo.ts +32 -31
  318. package/src/types/components/main.ts +17 -17
  319. package/src/types/components/meter.ts +11 -11
  320. package/src/types/components/modal.ts +39 -39
  321. package/src/types/components/navigation-menu.ts +59 -54
  322. package/src/types/components/page-aside.ts +11 -11
  323. package/src/types/components/page-body.ts +11 -11
  324. package/src/types/components/page-header.ts +11 -11
  325. package/src/types/components/page.ts +11 -11
  326. package/src/types/components/password.ts +11 -11
  327. package/src/types/components/phone-mockup.ts +5 -5
  328. package/src/types/components/pin-input.ts +11 -11
  329. package/src/types/components/popover.ts +23 -23
  330. package/src/types/components/post.ts +47 -35
  331. package/src/types/components/pricing-plan.ts +11 -11
  332. package/src/types/components/pricing-table.ts +11 -11
  333. package/src/types/components/progress.ts +33 -33
  334. package/src/types/components/prose.ts +11 -11
  335. package/src/types/components/qr-code.ts +11 -11
  336. package/src/types/components/radio-group.ts +11 -11
  337. package/src/types/components/rating.ts +11 -11
  338. package/src/types/components/scroll-area.ts +23 -23
  339. package/src/types/components/scroll-to-top.ts +2 -2
  340. package/src/types/components/search.ts +29 -0
  341. package/src/types/components/select.ts +2 -1
  342. package/src/types/components/separator.ts +19 -19
  343. package/src/types/components/sidebar.ts +83 -72
  344. package/src/types/components/slideover.ts +31 -31
  345. package/src/types/components/slider.ts +2 -2
  346. package/src/types/components/speed-dial.ts +11 -11
  347. package/src/types/components/spinner.ts +25 -25
  348. package/src/types/components/splitter.ts +19 -19
  349. package/src/types/components/spoiler.ts +11 -11
  350. package/src/types/components/stepper.ts +11 -11
  351. package/src/types/components/{megamenu.ts → steps.ts} +17 -11
  352. package/src/types/components/sticky-surface.ts +19 -19
  353. package/src/types/components/switch.ts +41 -41
  354. package/src/types/components/table-of-contents.ts +39 -17
  355. package/src/types/components/tabs.ts +2 -1
  356. package/src/types/components/textarea.ts +2 -1
  357. package/src/types/components/theme-selector.ts +15 -15
  358. package/src/types/components/timeline.ts +11 -11
  359. package/src/types/components/toast.ts +6 -1
  360. package/src/types/components/tooltip.ts +23 -23
  361. package/src/types/components/tour.ts +11 -11
  362. package/src/types/components/tree.ts +11 -11
  363. package/src/types/components/user.ts +11 -11
  364. package/src/types/components/watermark.ts +11 -11
  365. package/src/types/components/window-mockup.ts +11 -11
  366. package/src/types/docs.ts +40 -0
  367. package/src/types/index.ts +151 -1
  368. package/src/types/theme.ts +11 -1
  369. package/src/utils/color.ts +165 -0
  370. package/src/utils/docs.ts +365 -189
  371. package/src/utils/headerStack.ts +115 -95
  372. package/src/utils/index.ts +7 -5
  373. package/src/utils/shortcuts.ts +322 -0
  374. package/src/components/TableOfContents.astro +0 -107
  375. package/src/components/astro/RLAAlert.astro +0 -93
  376. package/src/components/astro/RLABlogPost.astro +0 -7
  377. package/src/components/astro/RLABlogPosts.astro +0 -9
  378. package/src/components/astro/RLAChangelog.astro +0 -23
  379. package/src/components/astro/RLAMegamenu.astro +0 -23
  380. package/src/components/astro/RLAPosts.astro +0 -23
  381. package/src/plugins/index.ts +0 -2
  382. package/src/plugins/starlightDocsApi/components/ApiTheme.astro +0 -27
  383. package/src/plugins/starlightDocsApi/index.ts +0 -272
  384. package/src/styles/prism.css +0 -42
  385. package/src/themes/changelog.theme.ts +0 -13
  386. package/src/themes/posts.theme.ts +0 -13
  387. package/src/types/components/index.ts +0 -135
  388. package/src/types/components/posts.ts +0 -11
  389. /package/src/{plugins/starlightDocsApi → docs}/types.ts +0 -0
@@ -1,139 +1,145 @@
1
- ---
2
- import { scv, cx } from "css-variants"
3
- import { useUi, resolveClasses } from "../../utils"
4
- import type { ButtonProps } from "../../types"
5
- import buttonThemeDefault, { createButtonTheme } from "../../themes/button.theme"
6
- import { getUIConfig } from "virtual:rimelight-ui"
7
- import RLAAvatar from "./RLAAvatar.astro"
8
-
9
- const uiConfig = getUIConfig()
10
- const buttonTheme = uiConfig.colors ? createButtonTheme(uiConfig.colors) : buttonThemeDefault
11
-
12
- const button = scv(buttonTheme)
13
-
14
- const {
15
- variant = "solid",
16
- color = "primary",
17
- size = "md",
18
- href,
19
- label,
20
- leadingIcon,
21
- trailingIcon,
22
- avatar,
23
- loading = false,
24
- loadingAuto = false,
25
- square = false,
26
- block = false,
27
- active = false,
28
- theme,
29
- activeColor,
30
- activeVariant,
31
- ui: uiProp,
32
- class: className,
33
- ...rest
34
- } = Astro.props as ButtonProps
35
-
36
- const isLeading = !!(leadingIcon || avatar || Astro.slots.has("leading")) || loading
37
- const isTrailing = !!(trailingIcon || Astro.slots.has("trailing")) || (loading && !isLeading)
38
-
39
- const showLeadingIcon = loading
40
- ? "i-lucide-loader-circle"
41
- : leadingIcon
42
-
43
- const showTrailingIcon = loading
44
- ? "i-lucide-loader-circle"
45
- : trailingIcon
46
-
47
- const leadingIconClass = loading ? "animate-spin" : ""
48
- const trailingIconClass = loading ? "animate-spin" : ""
49
-
50
- const classes = resolveClasses(button, {
51
- variant: active && activeVariant ? activeVariant : variant,
52
- color: active && activeColor ? activeColor : color,
53
- size,
54
- block,
55
- square: square || (!label && !Astro.slots.has("default")),
56
- leading: isLeading,
57
- trailing: isTrailing,
58
- loading,
59
- active,
60
- theme
61
- }, useUi("button", uiProp), className);
62
-
63
- const Tag = href ? "a" : "button";
64
-
65
- const loadingAutoProps = loadingAuto ? { 'data-loading-auto': '' } : {};
66
- ---
67
- <Tag
68
- class={classes.root}
69
- data-slot="root"
70
- {...(Tag === "a" ? { href } : {})}
71
- {...loadingAutoProps}
72
- {...rest}
73
- >
74
- <slot name="leading" {...{ ui: classes }}>
75
- {isLeading && (
76
- <span class={classes.leadingIcon} data-slot="leading-icon">
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}
87
- </span>
88
- )}
89
- </slot>
90
-
91
- {label !== undefined && label !== null && (
92
- <span class={classes.label} data-slot="label">
93
- {label}
94
- </span>
95
- )}
96
- {!label && <slot />}
97
-
98
- <slot name="trailing" {...{ ui: classes }}>
99
- {isTrailing && (
100
- <span class={classes.trailingIcon} data-slot="trailing-icon">
101
- <span class={cx(showTrailingIcon, trailingIconClass)} aria-hidden="true" />
102
- </span>
103
- )}
104
- </slot>
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
- )}
1
+ ---
2
+ import { scv, cx } from "css-variants"
3
+ import { useUi, resolveClasses } from "../../utils"
4
+ import type { ButtonProps } from "../../types"
5
+ import buttonThemeDefault, { createButtonTheme } from "../../themes/button.theme"
6
+ import { getUIConfig } from "virtual:rimelight-ui"
7
+ import RLAAvatar from "./RLAAvatar.astro"
8
+
9
+ const uiConfig = getUIConfig()
10
+ const buttonTheme = uiConfig.colors ? createButtonTheme(uiConfig.colors) : buttonThemeDefault
11
+
12
+ const button = scv(buttonTheme)
13
+
14
+ const {
15
+ variant = "solid",
16
+ color = "primary",
17
+ size = "md",
18
+ href,
19
+ label,
20
+ leadingIcon,
21
+ trailingIcon,
22
+ avatar,
23
+ loading = false,
24
+ loadingAuto = false,
25
+ square = false,
26
+ rounded = false,
27
+ block = false,
28
+ active = false,
29
+ theme,
30
+ activeColor,
31
+ activeVariant,
32
+ ui: uiProp,
33
+ class: className,
34
+ ...rest
35
+ } = Astro.props as ButtonProps & {
36
+ rounded?: boolean
37
+ activeColor?: string
38
+ activeVariant?: string
39
+ }
40
+
41
+ const isLeading = !!(leadingIcon || avatar || Astro.slots.has("leading")) || loading
42
+ const isTrailing = !!(trailingIcon || Astro.slots.has("trailing")) || (loading && !isLeading)
43
+
44
+ const showLeadingIcon = loading
45
+ ? "i-lucide-loader-circle"
46
+ : leadingIcon
47
+
48
+ const showTrailingIcon = loading
49
+ ? "i-lucide-loader-circle"
50
+ : trailingIcon
51
+
52
+ const leadingIconClass = loading ? "animate-spin" : ""
53
+ const trailingIconClass = loading ? "animate-spin" : ""
54
+
55
+ const classes = resolveClasses(button, {
56
+ variant: (active && activeVariant ? activeVariant : variant) as "solid",
57
+ color: (active && activeColor ? activeColor : color) as "neutral",
58
+ size,
59
+ block,
60
+ square: square || (!label && !Astro.slots.has("default")),
61
+ rounded,
62
+ leading: isLeading,
63
+ trailing: isTrailing,
64
+ loading,
65
+ active,
66
+ theme
67
+ }, useUi("button", uiProp), className);
68
+
69
+ const Tag = href ? "a" : "button";
70
+
71
+ const loadingAutoProps = loadingAuto ? { 'data-loading-auto': '' } : {};
72
+ ---
73
+ <Tag
74
+ class={classes.root}
75
+ data-slot="root"
76
+ {...(Tag === "a" ? { href } : {})}
77
+ {...loadingAutoProps}
78
+ {...rest}
79
+ >
80
+ <slot name="leading" {...{ ui: classes }}>
81
+ {isLeading && (
82
+ <span class={classes.leadingIcon} data-slot="leading-icon">
83
+ {loading || leadingIcon ? (
84
+ <span class={cx(showLeadingIcon, leadingIconClass)} aria-hidden="true" />
85
+ ) : avatar ? (
86
+ <RLAAvatar
87
+ {...(typeof avatar === 'string' ? { src: avatar } : avatar)}
88
+ size={classes.leadingAvatarSize as any}
89
+ class={classes.leadingAvatar}
90
+ data-slot="leading-avatar"
91
+ />
92
+ ) : null}
93
+ </span>
94
+ )}
95
+ </slot>
96
+
97
+ {label !== undefined && label !== null && (
98
+ <span class={classes.label} data-slot="label">
99
+ {label}
100
+ </span>
101
+ )}
102
+ {!label && <slot />}
103
+
104
+ <slot name="trailing" {...{ ui: classes }}>
105
+ {isTrailing && (
106
+ <span class={classes.trailingIcon} data-slot="trailing-icon">
107
+ <span class={cx(showTrailingIcon, trailingIconClass)} aria-hidden="true" />
108
+ </span>
109
+ )}
110
+ </slot>
111
+ </Tag>
112
+
113
+ {loadingAuto && (
114
+ <script>
115
+ document.querySelectorAll('button[data-loading-auto]').forEach((button) => {
116
+ button.addEventListener('click', async (_event) => {
117
+ // Find if there are any other click listeners that return a promise
118
+ // This is tricky in vanilla JS, but we can assume if it's data-loading-auto,
119
+ // the user wants us to track the click.
120
+ // If the button is already loading, don't do anything
121
+ if (button.getAttribute('data-loading') === 'true') return;
122
+
123
+ // We can't easily intercept other listeners, but if this is an Astro component,
124
+ // the onClick might be passed via ...rest as a string or handled via a separate script.
125
+
126
+ // A better way: if data-loading-auto is present, we wrap the click.
127
+ // But we need to know what to wait for.
128
+
129
+ // In Rimelight UI, we handle this via native DOM events.
130
+ // In Astro, if the user adds an event listener in their own script, we don't know.
131
+
132
+ // If they use standard onClick attribute:
133
+ const onClick = button.getAttribute('onclick');
134
+ if (onClick) {
135
+ button.setAttribute('data-loading', 'true');
136
+ button.classList.add('is-loading'); // We might need to ensure the CSS handles this
137
+ // Actually, the styles are driven by the classes generated by scv.
138
+ // Changing those classes dynamically is hard without knowing the full list.
139
+
140
+ // However, if we just want PARITY in the API, we can at least provide the hook.
141
+ }
142
+ });
143
+ });
144
+ </script>
145
+ )}
@@ -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>