@rimelight/ui 0.0.41 → 0.0.43

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 (400) hide show
  1. package/README.md +4 -14
  2. package/package.json +20 -30
  3. package/src/components/3d-hover/3d-hover.theme.ts +9 -12
  4. package/src/components/3d-hover/RLA3dHover.astro +9 -20
  5. package/src/components/accordion/RLAAccordion.astro +5 -14
  6. package/src/components/accordion/accordion.theme.ts +34 -37
  7. package/src/components/app/RLAApp.astro +9 -20
  8. package/src/components/app/app.theme.ts +9 -12
  9. package/src/components/aspect-ratio/RLAAspectRatio.astro +19 -27
  10. package/src/components/aspect-ratio/aspect-ratio.theme.ts +8 -12
  11. package/src/components/audio/RLAAudio.astro +3 -14
  12. package/src/components/audio/audio.theme.ts +9 -12
  13. package/src/components/avatar/RLAAvatar.astro +9 -29
  14. package/src/components/avatar/avatar.theme.ts +66 -77
  15. package/src/components/avatar/avatar.ts +6 -11
  16. package/src/components/avatar-group/RLAAvatarGroup.astro +188 -23
  17. package/src/components/avatar-group/avatar-group.theme.ts +12 -11
  18. package/src/components/avatar-group/avatar-group.ts +41 -0
  19. package/src/components/badge/RLABadge.astro +23 -36
  20. package/src/components/badge/RLSBadge.tsx +41 -0
  21. package/src/components/badge/RLVBadge.vue +8 -16
  22. package/src/components/badge/badge.theme.ts +118 -160
  23. package/src/components/badge/badge.ts +2 -1
  24. package/src/components/banner/RLABanner.astro +88 -103
  25. package/src/components/banner/banner.theme.ts +40 -43
  26. package/src/components/breadcrumb/RLABreadcrumb.astro +241 -62
  27. package/src/components/breadcrumb/breadcrumb.theme.ts +12 -16
  28. package/src/components/breadcrumb/breadcrumb.ts +19 -0
  29. package/src/components/browser-mockup/RLABrowserMockup.astro +9 -20
  30. package/src/components/browser-mockup/browser-mockup.theme.ts +9 -12
  31. package/src/components/button/RLAButton.astro +10 -30
  32. package/src/components/button/RLSButton.tsx +169 -0
  33. package/src/components/button/RLVButton.vue +13 -26
  34. package/src/components/button/button.theme.ts +163 -220
  35. package/src/components/button/button.ts +1 -1
  36. package/src/components/calendar/RLACalendar.astro +9 -20
  37. package/src/components/calendar/calendar.theme.ts +9 -12
  38. package/src/components/callout/RLACallout.astro +5 -14
  39. package/src/components/callout/callout.theme.ts +59 -101
  40. package/src/components/callout/callout.ts +1 -1
  41. package/src/components/card/RLACard.astro +71 -77
  42. package/src/components/card/RLSCard.tsx +116 -0
  43. package/src/components/card/RLVCard.vue +6 -14
  44. package/src/components/card/card.theme.ts +41 -44
  45. package/src/components/carousel/RLACarousel.astro +43 -11
  46. package/src/components/carousel/carousel.theme.ts +28 -32
  47. package/src/components/chart/RLAChart.astro +5 -11
  48. package/src/components/chart/chart.theme.ts +18 -21
  49. package/src/components/chart/chart.ts +1 -1
  50. package/src/components/chat/RLAChat.astro +9 -20
  51. package/src/components/chat/chat.theme.ts +9 -12
  52. package/src/components/chat-message/RLAChatMessage.astro +9 -20
  53. package/src/components/chat-message/chat-message.theme.ts +9 -12
  54. package/src/components/chat-messages/RLAChatMessages.astro +9 -20
  55. package/src/components/chat-messages/chat-messages.theme.ts +9 -12
  56. package/src/components/chat-palette/RLAChatPalette.astro +9 -20
  57. package/src/components/chat-palette/chat-palette.theme.ts +9 -12
  58. package/src/components/chat-prompt/RLAChatPrompt.astro +9 -20
  59. package/src/components/chat-prompt/chat-prompt.theme.ts +9 -12
  60. package/src/components/chat-prompt-submit/RLAChatPromptSubmit.astro +9 -20
  61. package/src/components/chat-prompt-submit/chat-prompt-submit.theme.ts +9 -12
  62. package/src/components/chat-reasoning/RLAChatReasoning.astro +9 -20
  63. package/src/components/chat-reasoning/chat-reasoning.theme.ts +9 -12
  64. package/src/components/chat-shimmer/RLAChatShimmer.astro +9 -20
  65. package/src/components/chat-shimmer/chat-shimmer.theme.ts +9 -12
  66. package/src/components/chat-tool/RLAChatTool.astro +9 -20
  67. package/src/components/chat-tool/chat-tool.theme.ts +9 -12
  68. package/src/components/checkbox/RLACheckbox.astro +2 -17
  69. package/src/components/checkbox/RLSCheckbox.tsx +65 -0
  70. package/src/components/checkbox/checkbox.theme.ts +34 -45
  71. package/src/components/checkbox/checkbox.ts +1 -1
  72. package/src/components/chip/RLAChip.astro +32 -56
  73. package/src/components/chip/chip.theme.ts +66 -72
  74. package/src/components/chip/chip.ts +3 -1
  75. package/src/components/collapsible/RLACollapsible.astro +2 -12
  76. package/src/components/collapsible/collapsible.theme.ts +17 -20
  77. package/src/components/collapsible/collapsible.ts +1 -1
  78. package/src/components/color-area/RLAColorArea.astro +2 -13
  79. package/src/components/color-area/color-area.theme.ts +19 -31
  80. package/src/components/color-area/color-area.ts +1 -1
  81. package/src/components/color-field/RLAColorField.astro +3 -14
  82. package/src/components/color-field/color-field.theme.ts +18 -30
  83. package/src/components/color-field/color-field.ts +1 -1
  84. package/src/components/color-picker/RLAColorPicker.astro +9 -20
  85. package/src/components/color-picker/color-picker.theme.ts +9 -12
  86. package/src/components/color-slider/RLAColorSlider.astro +2 -13
  87. package/src/components/color-slider/color-slider.theme.ts +20 -32
  88. package/src/components/color-slider/color-slider.ts +1 -1
  89. package/src/components/command-palette/RLACommandPalette.astro +9 -20
  90. package/src/components/command-palette/command-palette.theme.ts +9 -12
  91. package/src/components/compare/RLACompare.astro +9 -20
  92. package/src/components/compare/compare.theme.ts +9 -12
  93. package/src/components/confirm/RLAConfirm.astro +114 -122
  94. package/src/components/confirm/confirm.theme.ts +40 -44
  95. package/src/components/confirm/confirm.ts +1 -0
  96. package/src/components/container/RLAContainer.astro +9 -20
  97. package/src/components/container/container.theme.ts +9 -12
  98. package/src/components/context-menu/RLAContextMenu.astro +9 -20
  99. package/src/components/context-menu/context-menu.theme.ts +9 -12
  100. package/src/components/dashboard-group/RLADashboardGroup.astro +17 -21
  101. package/src/components/dashboard-group/dashboard-group.theme.ts +9 -12
  102. package/src/components/dashboard-group/dashboard-group.ts +1 -6
  103. package/src/components/dashboard-navbar/RLADashboardNavbar.astro +61 -21
  104. package/src/components/dashboard-navbar/dashboard-navbar.theme.ts +26 -12
  105. package/src/components/dashboard-navbar/dashboard-navbar.ts +5 -6
  106. package/src/components/dashboard-panel/RLADashboardPanel.astro +35 -21
  107. package/src/components/dashboard-panel/dashboard-panel.theme.ts +22 -12
  108. package/src/components/dashboard-panel/dashboard-panel.ts +4 -6
  109. package/src/components/dashboard-resize-handle/RLADashboardResizeHandle.astro +21 -21
  110. package/src/components/dashboard-resize-handle/dashboard-resize-handle.theme.ts +9 -12
  111. package/src/components/dashboard-resize-handle/dashboard-resize-handle.ts +1 -6
  112. package/src/components/dashboard-search/RLADashboardSearch.astro +100 -21
  113. package/src/components/dashboard-search/dashboard-search.theme.ts +24 -11
  114. package/src/components/dashboard-search/dashboard-search.ts +2 -6
  115. package/src/components/dashboard-search-button/RLADashboardSearchButton.astro +45 -21
  116. package/src/components/dashboard-search-button/dashboard-search-button.theme.ts +20 -12
  117. package/src/components/dashboard-search-button/dashboard-search-button.ts +4 -6
  118. package/src/components/dashboard-sidebar/RLADashboardSidebar.astro +119 -21
  119. package/src/components/dashboard-sidebar/dashboard-sidebar.theme.ts +40 -11
  120. package/src/components/dashboard-sidebar/dashboard-sidebar.ts +8 -6
  121. package/src/components/dashboard-sidebar-collapse/RLADashboardSidebarCollapse.astro +24 -21
  122. package/src/components/dashboard-sidebar-collapse/dashboard-sidebar-collapse.theme.ts +16 -12
  123. package/src/components/dashboard-sidebar-collapse/dashboard-sidebar-collapse.ts +2 -6
  124. package/src/components/dashboard-sidebar-toggle/RLADashboardSidebarToggle.astro +23 -21
  125. package/src/components/dashboard-sidebar-toggle/dashboard-sidebar-toggle.theme.ts +16 -12
  126. package/src/components/dashboard-sidebar-toggle/dashboard-sidebar-toggle.ts +2 -6
  127. package/src/components/dashboard-toolbar/RLADashboardToolbar.astro +25 -21
  128. package/src/components/dashboard-toolbar/dashboard-toolbar.theme.ts +11 -12
  129. package/src/components/dashboard-toolbar/dashboard-toolbar.ts +1 -6
  130. package/src/components/dock/RLADock.astro +9 -20
  131. package/src/components/dock/dock.theme.ts +9 -12
  132. package/src/components/drawer/RLADrawer.astro +115 -126
  133. package/src/components/drawer/drawer.theme.ts +53 -57
  134. package/src/components/dropdown-menu/RLADropdownMenu.astro +180 -47
  135. package/src/components/dropdown-menu/RLSDropdownMenu.tsx +196 -0
  136. package/src/components/dropdown-menu/dropdown-menu.theme.ts +51 -27
  137. package/src/components/dropdown-menu/dropdown-menu.ts +47 -9
  138. package/src/components/editor/RLAEditor.astro +9 -20
  139. package/src/components/editor/blocks/AddBlockModal.vue +3 -3
  140. package/src/components/editor/blocks/Block.vue +4 -3
  141. package/src/components/editor/blocks/BlockEditor.vue +3 -3
  142. package/src/components/editor/blocks/BlockViewRenderer.vue +8 -2
  143. package/src/components/editor/blocks/editor/CalloutBlockEditor.vue +2 -2
  144. package/src/components/editor/blocks/editor/ParagraphBlockEditor.vue +1 -1
  145. package/src/components/editor/blocks/editor/SectionBlockEditor.vue +3 -3
  146. package/src/components/editor/blocks/renderer/CalloutBlockRenderer.vue +2 -3
  147. package/src/components/editor/blocks/renderer/SectionBlockRenderer.vue +2 -2
  148. package/src/components/editor/editor.theme.ts +9 -12
  149. package/src/components/empty/RLAEmpty.astro +86 -20
  150. package/src/components/empty/empty.theme.ts +79 -11
  151. package/src/components/empty/empty.ts +59 -2
  152. package/src/components/error/RLAError.astro +9 -20
  153. package/src/components/error/error.theme.ts +9 -12
  154. package/src/components/field-group/RLAFieldGroup.astro +2 -11
  155. package/src/components/field-group/field-group.theme.ts +18 -22
  156. package/src/components/fieldset/RLAFieldset.astro +9 -20
  157. package/src/components/fieldset/fieldset.theme.ts +9 -12
  158. package/src/components/file-upload/RLAFileUpload.astro +4 -13
  159. package/src/components/file-upload/file-upload.theme.ts +19 -22
  160. package/src/components/file-upload/file-upload.ts +1 -1
  161. package/src/components/floating-action/RLAFloatingAction.astro +9 -20
  162. package/src/components/floating-action/floating-action.theme.ts +9 -12
  163. package/src/components/footer/RLAFooter.astro +32 -38
  164. package/src/components/footer/footer.theme.ts +31 -26
  165. package/src/components/footer/footer.ts +4 -0
  166. package/src/components/form/RLAForm.astro +9 -20
  167. package/src/components/form/form.theme.ts +9 -12
  168. package/src/components/form-field/RLAFormField.astro +5 -12
  169. package/src/components/form-field/RLSFormField.tsx +71 -0
  170. package/src/components/form-field/RLVFormField.vue +5 -14
  171. package/src/components/form-field/form-field.theme.ts +19 -22
  172. package/src/components/form-field/form-field.ts +1 -0
  173. package/src/components/gallery/RLAGallery.astro +9 -20
  174. package/src/components/gallery/gallery.theme.ts +9 -12
  175. package/src/components/grid/RLAGrid.astro +2 -15
  176. package/src/components/grid/grid.theme.ts +31 -34
  177. package/src/components/head/UIHead.astro +298 -0
  178. package/src/components/head/head.theme.ts +9 -12
  179. package/src/components/header/HeaderLayer.astro +63 -0
  180. package/src/components/header/RLAHeader.astro +29 -48
  181. package/src/components/header/header.theme.ts +37 -40
  182. package/src/components/header/header.ts +4 -0
  183. package/src/{utils → components/header}/headerStack.ts +30 -22
  184. package/src/components/hover-card/RLAHoverCard.astro +24 -35
  185. package/src/components/hover-card/hover-card.theme.ts +23 -27
  186. package/src/components/icon/RLAIcon.astro +29 -36
  187. package/src/components/icon/RLSIcon.tsx +6 -7
  188. package/src/components/icon/RLVIcon.vue +5 -6
  189. package/src/components/icon/icon.theme.ts +18 -28
  190. package/src/components/icon/resolver.ts +15 -29
  191. package/src/components/image/RLAImage.astro +20 -23
  192. package/src/components/image/image.theme.ts +29 -32
  193. package/src/components/input/RLAInput.astro +6 -21
  194. package/src/components/input/RLSInput.tsx +101 -0
  195. package/src/components/input/RLVInput.vue +11 -20
  196. package/src/components/input/input.theme.ts +41 -44
  197. package/src/components/input/input.ts +1 -1
  198. package/src/components/input-date/RLAInputDate.astro +9 -20
  199. package/src/components/input-date/input-date.theme.ts +9 -12
  200. package/src/components/input-menu/RLAInputMenu.astro +2 -12
  201. package/src/components/input-menu/input-menu.theme.ts +29 -32
  202. package/src/components/input-menu/input-menu.ts +1 -1
  203. package/src/components/input-number/RLAInputNumber.astro +9 -20
  204. package/src/components/input-number/input-number.theme.ts +9 -12
  205. package/src/components/input-pin/RLAInputPin.astro +9 -22
  206. package/src/components/input-pin/input-pin.theme.ts +9 -13
  207. package/src/components/input-rating/RLAInputRating.astro +2 -23
  208. package/src/components/input-rating/input-rating.theme.ts +64 -76
  209. package/src/components/input-rating/input-rating.ts +1 -1
  210. package/src/components/input-tags/RLAInputTags.astro +174 -21
  211. package/src/components/input-tags/input-tags.theme.ts +37 -12
  212. package/src/components/input-tags/input-tags.ts +50 -0
  213. package/src/components/input-time/RLAInputTime.astro +9 -20
  214. package/src/components/input-time/input-time.theme.ts +9 -12
  215. package/src/components/kbd/RLAKbd.astro +17 -32
  216. package/src/components/kbd/kbd.theme.ts +49 -91
  217. package/src/components/kbd/kbd.ts +3 -0
  218. package/src/components/knob/RLAKnob.astro +9 -20
  219. package/src/components/knob/knob.theme.ts +9 -12
  220. package/src/components/label/RLALabel.astro +16 -27
  221. package/src/components/label/label.theme.ts +16 -20
  222. package/src/components/layout-grid/RLALayoutGrid.astro +5 -11
  223. package/src/components/layout-grid/layout-grid.theme.ts +12 -15
  224. package/src/components/link/RLALink.astro +6 -20
  225. package/src/components/link/RLSLink.tsx +8 -16
  226. package/src/components/link/RLVLink.vue +7 -16
  227. package/src/components/link/link.theme.ts +37 -37
  228. package/src/components/link/link.ts +5 -5
  229. package/src/components/link-group/RLALinkGroup.astro +7 -44
  230. package/src/components/link-group/link-group.theme.ts +21 -26
  231. package/src/components/link-group/link-group.ts +5 -16
  232. package/src/components/listbox/RLAListbox.astro +9 -20
  233. package/src/components/listbox/listbox.theme.ts +9 -12
  234. package/src/components/locale-selector/RLALocaleSelector.astro +13 -21
  235. package/src/components/locale-selector/locale-selector.theme.ts +49 -44
  236. package/src/components/locale-selector/locale-selector.ts +4 -0
  237. package/src/components/logo/RLALogo.astro +13 -26
  238. package/src/components/logo/logo.theme.ts +9 -12
  239. package/src/components/main/RLAMain.astro +31 -36
  240. package/src/components/main/main.theme.ts +9 -12
  241. package/src/components/marquee/RLAMarquee.astro +62 -43
  242. package/src/components/marquee/marquee.theme.ts +22 -26
  243. package/src/components/meter/RLAMeter.astro +9 -20
  244. package/src/components/meter/meter.theme.ts +9 -12
  245. package/src/components/modal/RLAModal.astro +70 -72
  246. package/src/components/modal/RLSModal.tsx +156 -0
  247. package/src/components/modal/RLVModal.vue +5 -6
  248. package/src/components/modal/modal.theme.ts +42 -46
  249. package/src/components/modal/modal.ts +1 -0
  250. package/src/components/navigation-menu/RLANavigationMenu.astro +7 -12
  251. package/src/components/navigation-menu/navigation-menu.theme.ts +36 -39
  252. package/src/components/navigation-menu/navigation-menu.ts +19 -18
  253. package/src/components/page/RLAPage.astro +9 -20
  254. package/src/components/page/page.theme.ts +9 -12
  255. package/src/components/page-aside/RLAPageAside.astro +9 -20
  256. package/src/components/page-aside/page-aside.theme.ts +9 -12
  257. package/src/components/page-body/RLAPageBody.astro +9 -20
  258. package/src/components/page-body/page-body.theme.ts +9 -12
  259. package/src/components/page-header/RLAPageHeader.astro +9 -20
  260. package/src/components/page-header/page-header.theme.ts +9 -12
  261. package/src/components/page-section/RLAPageSection.astro +11 -15
  262. package/src/components/page-section/page-section.theme.ts +193 -176
  263. package/src/components/pagination/RLAPagination.astro +91 -97
  264. package/src/components/pagination/pagination.theme.ts +22 -26
  265. package/src/components/password/RLAPassword.astro +9 -20
  266. package/src/components/password/password.theme.ts +9 -12
  267. package/src/components/phone-mockup/RLAPhoneMockup.astro +9 -20
  268. package/src/components/phone-mockup/phone-mockup.theme.ts +9 -12
  269. package/src/components/placeholder/RLAPlaceholder.astro +32 -43
  270. package/src/components/placeholder/placeholder.theme.ts +11 -14
  271. package/src/components/popover/RLAPopover.astro +205 -132
  272. package/src/components/popover/popover.theme.ts +23 -27
  273. package/src/components/post/RLAPost.astro +2 -10
  274. package/src/components/post/post.theme.ts +45 -48
  275. package/src/components/pricing-plan/RLAPricingPlan.astro +9 -20
  276. package/src/components/pricing-plan/pricing-plan.theme.ts +9 -12
  277. package/src/components/pricing-table/RLAPricingTable.astro +9 -20
  278. package/src/components/pricing-table/pricing-table.theme.ts +9 -12
  279. package/src/components/progress/RLAProgress.astro +2 -17
  280. package/src/components/progress/progress.theme.ts +22 -34
  281. package/src/components/progress/progress.ts +1 -1
  282. package/src/components/prose/RLAProse.astro +9 -20
  283. package/src/components/prose/prose.theme.ts +9 -12
  284. package/src/components/qr-code/RLAQrCode.astro +9 -20
  285. package/src/components/qr-code/qr-code.theme.ts +9 -12
  286. package/src/components/quote/quote.theme.ts +9 -12
  287. package/src/components/radio-group/RLARadioGroup.astro +9 -20
  288. package/src/components/radio-group/radio-group.theme.ts +9 -12
  289. package/src/components/rating/RLARating.astro +9 -20
  290. package/src/components/rating/rating.theme.ts +9 -12
  291. package/src/components/scroll-area/RLAScrollArea.astro +2 -10
  292. package/src/components/scroll-area/scroll-area.theme.ts +21 -24
  293. package/src/components/scroll-to-top/RLAScrollToTop.astro +67 -43
  294. package/src/components/scroll-to-top/RLVScrollToTop.vue +6 -10
  295. package/src/components/scroll-to-top/scroll-to-top.theme.ts +32 -46
  296. package/src/components/scroll-to-top/scroll-to-top.ts +1 -1
  297. package/src/{utils → components/scroll-to-top}/scroll.ts +19 -6
  298. package/src/components/search/RLASearch.astro +3 -9
  299. package/src/components/search/search.theme.ts +60 -63
  300. package/src/components/select/RLASelect.astro +514 -113
  301. package/src/components/select/RLSSelect.tsx +126 -0
  302. package/src/components/select/RLVSelect.vue +7 -15
  303. package/src/components/select/select.theme.ts +104 -25
  304. package/src/components/select/select.ts +58 -36
  305. package/src/components/separator/RLASeparator.astro +62 -83
  306. package/src/components/separator/separator.theme.ts +135 -138
  307. package/src/components/separator/separator.ts +4 -0
  308. package/src/components/shortcuts/RLAShortcuts.astro +3 -4
  309. package/src/components/sidebar/RLASidebar.astro +11 -21
  310. package/src/components/sidebar/sidebar.theme.ts +39 -42
  311. package/src/components/sidebar/sidebar.ts +2 -0
  312. package/src/components/skeleton/RLASkeleton.astro +13 -22
  313. package/src/components/skeleton/skeleton.theme.ts +16 -19
  314. package/src/components/slideover/RLASlideover.astro +2 -12
  315. package/src/components/slideover/slideover.theme.ts +51 -55
  316. package/src/components/slider/RLASlider.astro +2 -15
  317. package/src/components/slider/slider.theme.ts +20 -33
  318. package/src/components/slider/slider.ts +1 -1
  319. package/src/components/speed-dial/RLASpeedDial.astro +9 -20
  320. package/src/components/speed-dial/speed-dial.theme.ts +9 -12
  321. package/src/components/spinner/RLASpinner.astro +2 -17
  322. package/src/components/spinner/spinner.theme.ts +29 -30
  323. package/src/components/spinner/spinner.ts +1 -1
  324. package/src/components/splitter/RLASplitter.astro +3 -11
  325. package/src/components/splitter/splitter.theme.ts +18 -21
  326. package/src/components/spoiler/RLASpoiler.astro +9 -20
  327. package/src/components/spoiler/spoiler.theme.ts +9 -12
  328. package/src/components/stepper/RLAStepper.astro +300 -21
  329. package/src/components/stepper/stepper.theme.ts +214 -12
  330. package/src/components/stepper/stepper.ts +23 -6
  331. package/src/components/steps/RLASteps.astro +2 -8
  332. package/src/components/steps/steps.theme.ts +9 -12
  333. package/src/components/sticky-surface/RLAStickySurface.astro +67 -38
  334. package/src/components/sticky-surface/sticky-surface.theme.ts +7 -11
  335. package/src/components/sticky-surface/sticky-surface.ts +1 -0
  336. package/src/components/surround/RLASurround.astro +5 -5
  337. package/src/components/switch/RLASwitch.astro +2 -18
  338. package/src/components/switch/switch.theme.ts +50 -61
  339. package/src/components/switch/switch.ts +1 -1
  340. package/src/components/table/RLATable.astro +566 -50
  341. package/src/components/table/table.theme.ts +112 -31
  342. package/src/components/table/table.ts +207 -6
  343. package/src/components/table-of-contents/RLATableOfContents.astro +8 -13
  344. package/src/components/table-of-contents/table-of-contents.theme.ts +60 -63
  345. package/src/components/tabs/RLATabs.astro +195 -51
  346. package/src/components/tabs/tabs.theme.ts +81 -84
  347. package/src/components/tabs/tabs.ts +18 -1
  348. package/src/components/textarea/RLATextarea.astro +16 -13
  349. package/src/components/textarea/RLSTextarea.tsx +69 -0
  350. package/src/components/textarea/RLVTextarea.vue +8 -16
  351. package/src/components/textarea/textarea.theme.ts +21 -24
  352. package/src/components/textarea/textarea.ts +2 -1
  353. package/src/components/theme-selector/RLAThemeSelector.astro +5 -13
  354. package/src/components/theme-selector/theme-selector.theme.ts +11 -14
  355. package/src/components/timeline/RLATimeline.astro +24 -44
  356. package/src/components/timeline/timeline.theme.ts +302 -307
  357. package/src/components/toast/RLAToast.astro +44 -18
  358. package/src/components/toast/store.ts +97 -0
  359. package/src/components/toast/toast.theme.ts +31 -34
  360. package/src/components/toast/toast.ts +1 -1
  361. package/src/components/toaster/RLAToaster.astro +76 -6
  362. package/src/components/tooltip/RLATooltip.astro +136 -33
  363. package/src/components/tooltip/tooltip.theme.ts +23 -26
  364. package/src/components/tour/RLATour.astro +9 -20
  365. package/src/components/tour/tour.theme.ts +9 -12
  366. package/src/components/tree/RLATree.astro +9 -20
  367. package/src/components/tree/tree.theme.ts +9 -12
  368. package/src/components/user/RLAUser.astro +9 -20
  369. package/src/components/user/user.theme.ts +9 -12
  370. package/src/components/video/RLAVideo.astro +5 -10
  371. package/src/components/video/video.theme.ts +13 -16
  372. package/src/components/watermark/RLAWatermark.astro +9 -20
  373. package/src/components/watermark/watermark.theme.ts +9 -12
  374. package/src/components/window-mockup/RLAWindowMockup.astro +9 -20
  375. package/src/components/window-mockup/window-mockup.theme.ts +9 -12
  376. package/src/icons.ts +68 -0
  377. package/src/index.ts +31 -0
  378. package/src/preset.ts +146 -0
  379. package/src/resolver.ts +20 -0
  380. package/src/shortcuts.ts +172 -0
  381. package/src/types.ts +57 -0
  382. package/LICENSE +0 -21
  383. package/src/components/head/RLAHead.astro +0 -528
  384. package/src/config/color.config.ts +0 -300
  385. package/src/config/site.config.ts +0 -28
  386. package/src/config/ui.config.ts +0 -89
  387. package/src/env.d.ts +0 -23
  388. package/src/icons/defaults.ts +0 -44
  389. package/src/presets/index.ts +0 -577
  390. package/src/stores/toast.ts +0 -24
  391. package/src/themes.ts +0 -26
  392. package/src/types/component.ts +0 -28
  393. package/src/ui.ts +0 -159
  394. package/src/utils/defineTheme.ts +0 -5
  395. package/src/utils/merge.ts +0 -62
  396. package/src/utils/resolveClasses.ts +0 -39
  397. package/src/utils/resolveTheme.ts +0 -13
  398. package/src/utils/shortcuts.ts +0 -322
  399. package/src/utils/toast.ts +0 -36
  400. package/src/utils/useUi.ts +0 -33
@@ -1,62 +1,241 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi } from "../../utils/useUi"
4
- import { resolveClasses } from "../../utils/resolveClasses"
5
- import type { BreadcrumbProps } from "./breadcrumb"
6
- import { resolveTheme } from "../../utils/resolveTheme"
7
- import breadcrumbThemeDefault, { createBreadcrumbTheme } from "./breadcrumb.theme"
8
- const breadcrumbTheme = resolveTheme(breadcrumbThemeDefault, createBreadcrumbTheme)
9
- import RLAIcon from "../icon/RLAIcon.astro"
10
-
11
-
12
- const breadcrumb = scv(breadcrumbTheme)
13
-
14
- const {
15
- items,
16
- separatorIcon = "chevronRight",
17
- ui: uiProp,
18
- class: className,
19
- ...rest
20
- } = Astro.props as BreadcrumbProps
21
-
22
- const classes = resolveClasses(breadcrumb, {}, useUi("breadcrumb", uiProp), className)
23
- ---
24
- <nav class={classes.root} data-slot="breadcrumb-root" {...rest}>
25
- <ol class={classes.list} data-slot="list">
26
- {items ? (
27
- items.map((item, idx) => (
28
- <li class={classes.item} data-slot="item">
29
- {item.href ? (
30
- <a href={item.href} class={classes.link} data-slot="link">
31
- {item.label}
32
- </a>
33
- ) : (
34
- <span class={classes.page} data-slot="page">
35
- {item.label}
36
- </span>
37
- )}
38
- {idx < items.length - 1 && (
39
- <span class={classes.separator} data-slot="separator" aria-hidden="true">
40
- <RLAIcon name={separatorIcon} />
41
- </span>
42
- )}
43
- </li>
44
- ))
45
- ) : (
46
- <slot />
47
- )}
48
- </ol>
49
- </nav>
50
-
51
- {items && (
52
- <script type="application/ld+json" is:inline set:html={JSON.stringify({
53
- "@context": "https://schema.org",
54
- "@type": "BreadcrumbList",
55
- "itemListElement": items.map((item, idx) => ({
56
- "@type": "ListItem",
57
- "position": idx + 1,
58
- "name": item.label,
59
- "item": item.href ? new URL(item.href, Astro.site || "https://starter.rimelight.com").toString() : undefined
60
- }))
61
- })} />
62
- )}
1
+ ---
2
+ import type { BreadcrumbProps } from "./breadcrumb"
3
+ import { breadcrumbTheme } from "./breadcrumb.theme"
4
+ import RLAIcon from "../icon/RLAIcon.astro"
5
+
6
+
7
+
8
+ const {
9
+ items,
10
+ maxVisible,
11
+ estimatedItemWidth = 120,
12
+ separatorIcon = "chevronRight",
13
+ ...rest
14
+ } = Astro.props as BreadcrumbProps
15
+
16
+ const classes = breadcrumbTheme(Astro.props)
17
+
18
+ // ─── Responsive CSS Item Counter ─────────────────────────────────────────────
19
+ //
20
+ // Breadcrumb-specific adaptation of the CSS counter technique:
21
+ //
22
+ // • First and last items are ALWAYS visible.
23
+ // • Middle items (everything between first and last) get `.hidable` class.
24
+ // • Server-side: if `maxVisible` is set, excess middle items are pre-hidden
25
+ // (not rendered) and counted in --base-hidden.
26
+ // • Client-side: container queries progressively hide rendered middle items
27
+ // from left to right (oldest ancestors first), updating --hidden-items.
28
+ // • The overflow `<li>` always lives in the DOM between the first item and
29
+ // the first middle item. CSS shows/hides it based on whether any items
30
+ // are hidden.
31
+ // • CSS counter: "…+N" = counter-reset: calc(--base-hidden + --hidden-items).
32
+ //
33
+ // ─────────────────────────────────────────────────────────────────────────────
34
+
35
+ const uid = Math.random().toString(36).substring(2, 9)
36
+ const cName = `rla-bc-${uid}`
37
+
38
+ // Restructure items into: first | midItems | last
39
+ const allItems = items ?? []
40
+ const firstItem = allItems[0]
41
+ const lastItem = allItems.length > 1 ? allItems[allItems.length - 1] : null
42
+ const allMidItems = allItems.length > 2 ? allItems.slice(1, allItems.length - 1) : []
43
+
44
+ // If maxVisible is provided, pre-truncate middle items:
45
+ // always keep the last (maxVisible - 2) mid items (closest to current page).
46
+ // The rest are base-hidden.
47
+ const effectiveMaxMid = maxVisible !== undefined
48
+ ? Math.max(0, maxVisible - 2) // -2 for first + last
49
+ : allMidItems.length // show all at full width
50
+
51
+ // Keep mid items closest to the last page (most recent ancestors)
52
+ const renderedMidItems = allMidItems.slice(allMidItems.length - effectiveMaxMid)
53
+ const baseHiddenCount = Math.max(0, allMidItems.length - effectiveMaxMid)
54
+
55
+ // We show the overflow indicator when:
56
+ // a) There are already pre-hidden items (base-hidden > 0), OR
57
+ // b) There are rendered mid items that could be collapsed by container queries
58
+ const hasMidItems = renderedMidItems.length > 0
59
+ const needsOverflow = allItems.length > 2 // need both first AND last to have a middle
60
+
61
+ // ── Generate per-instance container-query CSS ─────────────────────────────────
62
+ //
63
+ // DOM layout (positions):
64
+ // 1 = first item
65
+ // 2 = overflow indicator (always in DOM)
66
+ // 3..N = rendered mid items (hidable, starting from leftmost = oldest ancestor)
67
+ // N+1 = last item
68
+ //
69
+ // We hide mid items from left to right (oldest ancestor first), so breakpoints
70
+ // target nth-child(3), then nth-child(4), etc.
71
+ // ─────────────────────────────────────────────────────────────────────────────
72
+ let instanceCss = ""
73
+ if (needsOverflow && hasMidItems) {
74
+ for (let i = 0; i < renderedMidItems.length; i++) {
75
+ const hiddenItems = i + 1
76
+ // Visible items after hiding: first + (midItems - hiddenItems) + last
77
+ const visibleMids = renderedMidItems.length - hiddenItems
78
+ const visibleTotal = 2 + visibleMids // first + last always shown
79
+ // Min container width for the visible breadcrumb items
80
+ const maxWidth = visibleTotal * estimatedItemWidth + 60 // 60px for overflow indicator
81
+ // The mid item to newly hide at this breakpoint (nth-child position):
82
+ // overflow indicator is at position 2, mids start at position 3
83
+ // we hide from the leftmost (position 3) first
84
+ const hideNthChild = 3 + i
85
+
86
+ instanceCss += `\n@container ${cName} (max-width: ${maxWidth}px) {`
87
+ instanceCss += `\n [data-bc="${uid}"] { --hidden-items: ${hiddenItems}; }`
88
+ instanceCss += `\n [data-bc="${uid}"] > li.hidable:nth-child(${hideNthChild}) { display: none; }`
89
+ // Always show the overflow indicator when any mid item is hidden
90
+ instanceCss += `\n [data-bc="${uid}"] > .rla-bc-overflow { display: flex; }`
91
+ instanceCss += `\n}`
92
+ }
93
+ }
94
+ ---
95
+
96
+ <nav class={classes.root} data-slot="breadcrumb-root" {...rest}>
97
+ {items ? (
98
+ <div
99
+ class="rla-bc-host"
100
+ style={`container-type: inline-size; container-name: ${cName};`}
101
+ >
102
+ <ol
103
+ class={classes.list}
104
+ data-slot="list"
105
+ data-bc={uid}
106
+ style={`--base-hidden: ${baseHiddenCount}; --hidden-items: 0;`}
107
+ >
108
+ {/* ── First item (always visible) ─────────────────────────────── */}
109
+ {firstItem && (
110
+ <li class={classes.item} data-slot="item">
111
+ {firstItem.href ? (
112
+ <a href={firstItem.href} class={classes.link} data-slot="link">
113
+ {firstItem.label}
114
+ </a>
115
+ ) : (
116
+ <span class={classes.page} data-slot="page">{firstItem.label}</span>
117
+ )}
118
+ {(hasMidItems || lastItem) && (
119
+ <span class={classes.separator} data-slot="separator" aria-hidden="true">
120
+ <RLAIcon name={separatorIcon} />
121
+ </span>
122
+ )}
123
+ </li>
124
+ )}
125
+
126
+ {/* ── Overflow indicator (always in DOM; shown by CSS when items are hidden) */}
127
+ {needsOverflow && (
128
+ <li
129
+ class:list={[
130
+ "rla-bc-overflow",
131
+ // Shown by default only when there are pre-hidden base items
132
+ baseHiddenCount === 0 && "rla-bc-overflow-hidden"
133
+ ]}
134
+ aria-hidden="true"
135
+ data-slot="overflow"
136
+ >
137
+ <span class="rla-bc-ellipsis">…</span>
138
+ <span class="rla-bc-more-count" />
139
+ <span class={classes.separator} data-slot="separator" aria-hidden="true">
140
+ <RLAIcon name={separatorIcon} />
141
+ </span>
142
+ </li>
143
+ )}
144
+
145
+ {/* ── Middle items (hidable — oldest ancestors first) ─────────── */}
146
+ {renderedMidItems.map((item) => (
147
+ <li class:list={[classes.item, "hidable"]} data-slot="item">
148
+ {item.href ? (
149
+ <a href={item.href} class={classes.link} data-slot="link">
150
+ {item.label}
151
+ </a>
152
+ ) : (
153
+ <span class={classes.page} data-slot="page">{item.label}</span>
154
+ )}
155
+ <span class={classes.separator} data-slot="separator" aria-hidden="true">
156
+ <RLAIcon name={separatorIcon} />
157
+ </span>
158
+ </li>
159
+ ))}
160
+
161
+ {/* ── Last item (always visible, current page) ─────────────────── */}
162
+ {lastItem && (
163
+ <li class={classes.item} data-slot="item">
164
+ <span class={classes.page} data-slot="page" aria-current="page">
165
+ {lastItem.label}
166
+ </span>
167
+ </li>
168
+ )}
169
+ </ol>
170
+ </div>
171
+ ) : (
172
+ <ol class={classes.list} data-slot="list">
173
+ <slot />
174
+ </ol>
175
+ )}
176
+ </nav>
177
+
178
+ <!-- Per-instance container-query CSS scoped via data-bc attribute -->
179
+ <style is:inline set:html={instanceCss} />
180
+
181
+ <style>
182
+ .rla-bc-host {
183
+ display: block;
184
+ width: 100%;
185
+ }
186
+
187
+ /* Overflow indicator: shown by CSS, hidden by default when base-hidden is 0 */
188
+ .rla-bc-overflow {
189
+ display: flex;
190
+ align-items: center;
191
+ gap: 0.25rem;
192
+ list-style: none;
193
+ flex-shrink: 0;
194
+ }
195
+
196
+ /* When base-hidden is 0 AND no container query has fired yet */
197
+ .rla-bc-overflow-hidden {
198
+ display: none;
199
+ }
200
+
201
+ .rla-bc-ellipsis {
202
+ color: var(--color-muted-foreground, currentColor);
203
+ letter-spacing: 0.05em;
204
+ font-weight: 500;
205
+ }
206
+
207
+ /*
208
+ * CSS Counter — sums --base-hidden (render-time, from maxVisible prop) +
209
+ * --hidden-items (set by container queries as width shrinks).
210
+ *
211
+ * Shows nothing when the count is 0.
212
+ * Shows "+N" when N > 0.
213
+ */
214
+ .rla-bc-more-count::after {
215
+ counter-reset: rla-bc-cnt calc(var(--base-hidden, 0) + var(--hidden-items, 0));
216
+ content: "+" counter(rla-bc-cnt);
217
+ /* Hide the "+0" case by using color:transparent when counter is 0.
218
+ CSS cannot conditionally suppress content based on counter value,
219
+ so we rely on the counter never being 0 when this element is visible
220
+ (the overflow li is only shown when --base-hidden > 0 or a container
221
+ query is active). */
222
+ color: var(--color-muted-foreground, currentColor);
223
+ font-size: 0.6875rem;
224
+ font-weight: 600;
225
+ vertical-align: super;
226
+ line-height: 1;
227
+ }
228
+ </style>
229
+
230
+ {items && (
231
+ <script type="application/ld+json" is:inline set:html={JSON.stringify({
232
+ "@context": "https://schema.org",
233
+ "@type": "BreadcrumbList",
234
+ "itemListElement": items.map((item, idx) => ({
235
+ "@type": "ListItem",
236
+ "position": idx + 1,
237
+ "name": item.label,
238
+ "item": item.href ? new URL(item.href, Astro.site || "https://starter.rimelight.com").toString() : undefined
239
+ }))
240
+ })} />
241
+ )}
@@ -1,17 +1,13 @@
1
- import { colorConfig } from "../../config/color.config"
2
- import { defineTheme } from "../../utils/defineTheme"
1
+ import { defineTheme } from "../../resolver"
3
2
 
4
- export const createBreadcrumbTheme = (_colors: readonly string[] = colorConfig.colors) =>
5
- defineTheme({
6
- slots: ["root", "list", "item", "link", "separator", "page"],
7
- base: {
8
- root: "aria-label='breadcrumb'",
9
- list: "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",
10
- item: "flex items-center gap-1.5",
11
- link: "transition-colors hover:text-foreground cursor-pointer decoration-none text-current",
12
- separator: "flex size-3.5 items-center justify-center [&_svg]:size-3.5 opacity-60",
13
- page: "font-normal text-foreground"
14
- }
15
- })
16
-
17
- export default createBreadcrumbTheme()
3
+ export const breadcrumbTheme = defineTheme("breadcrumb", {
4
+ slots: ["root", "list", "item", "link", "separator", "page"],
5
+ base: {
6
+ root: "aria-label='breadcrumb'",
7
+ list: "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted sm:gap-2.5",
8
+ item: "flex items-center gap-1.5",
9
+ link: "transition-colors hover:text-highlighted cursor-pointer decoration-none text-current",
10
+ separator: "flex size-3.5 items-center justify-center [&_svg]:size-3.5 opacity-60",
11
+ page: "font-normal text-highlighted"
12
+ }
13
+ })
@@ -8,6 +8,25 @@ export interface BreadcrumbProps {
8
8
  * Quick-prop array to render breadcrumb items automatically.
9
9
  */
10
10
  items?: BreadcrumbItem[]
11
+ /**
12
+ * Maximum number of items to show at full container width (including first and last which are
13
+ * always visible). Middle items beyond this cap are pre-hidden server-side and counted in the
14
+ * "…+N" overflow indicator.
15
+ *
16
+ * Example: 7 items, maxVisible=4 → shows [Home, …+3, Current]. At a narrow container the count
17
+ * increases further via CSS queries.
18
+ *
19
+ * When undefined, all items are shown at full width and only container queries produce the
20
+ * responsive collapse.
21
+ */
22
+ maxVisible?: number
23
+ /**
24
+ * Approximate width in pixels of each breadcrumb item (text + separator). Used to compute
25
+ * container-query breakpoints for the responsive collapse. Increase for longer labels.
26
+ *
27
+ * @default 120
28
+ */
29
+ estimatedItemWidth?: number
11
30
  /**
12
31
  * The icon separating the breadcrumbs.
13
32
  */
@@ -1,21 +1,10 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi } from "../../utils/useUi"
4
- import { resolveClasses } from "../../utils/resolveClasses"
5
- import type { BrowserMockupProps } from "./browser-mockup"
6
- import browserMockupTheme from "./browser-mockup.theme"
7
-
8
-
9
- const browserMockup = scv(browserMockupTheme)
10
-
11
- const {
12
- ui: uiProp,
13
- class: className,
14
- ...rest
15
- } = Astro.props as BrowserMockupProps
16
-
17
- const classes = resolveClasses(browserMockup, {}, useUi("browserMockup", uiProp), className);
18
- ---
19
- <div class={classes.root} data-slot="root" {...rest}>
20
- <slot />
1
+ ---
2
+ import { browserMockupTheme } from "./browser-mockup.theme"
3
+
4
+
5
+
6
+ const classes = browserMockupTheme(Astro.props)
7
+ ---
8
+ <div class={classes.root} data-slot="root" {...Astro.props}>
9
+ <slot />
21
10
  </div>
@@ -1,13 +1,10 @@
1
- import { defineTheme } from "../../utils/defineTheme"
1
+ import { defineTheme } from "../../resolver"
2
2
 
3
- export const createBrowserMockupTheme = () =>
4
- defineTheme({
5
- slots: ["root"],
6
- base: {
7
- root: ""
8
- },
9
- variants: {},
10
- defaultVariants: {}
11
- })
12
-
13
- export default createBrowserMockupTheme()
3
+ export const browserMockupTheme = defineTheme("browser-mockup", {
4
+ slots: ["root"],
5
+ base: {
6
+ root: ""
7
+ },
8
+ variants: {},
9
+ defaultVariants: {}
10
+ })
@@ -1,18 +1,11 @@
1
1
  ---
2
- import { scv } from "css-variants"
3
- import { useUi } from "../../utils/useUi"
4
- import { resolveClasses } from "../../utils/resolveClasses"
5
2
  import type { ButtonProps } from "./button"
6
- import { resolveTheme } from "../../utils/resolveTheme"
7
- import buttonThemeDefault, { createButtonTheme } from "./button.theme"
8
- const buttonTheme = resolveTheme(buttonThemeDefault, createButtonTheme)
3
+ import { buttonTheme } from "./button.theme"
9
4
  import RLAAvatar from "../avatar/RLAAvatar.astro"
10
5
  import RLALink from "../link/RLALink.astro"
11
6
  import RLAIcon from "../icon/RLAIcon.astro"
12
7
 
13
8
 
14
- const button = scv(buttonTheme)
15
-
16
9
  const {
17
10
  variant = "solid",
18
11
  color = "primary",
@@ -26,21 +19,14 @@ const {
26
19
  loading = false,
27
20
  loadingAuto = false,
28
21
  square = false,
29
- rounded = false,
30
- block = false,
31
22
  justify = "center",
32
23
  active = false,
33
- theme,
34
24
  activeColor,
35
25
  activeVariant,
36
- ui: uiProp,
37
- class: className,
38
26
  ...rest
39
- } = Astro.props as ButtonProps & {
40
- rounded?: boolean
41
- activeColor?: string
42
- activeVariant?: string
43
- }
27
+ } = Astro.props as ButtonProps
28
+
29
+
44
30
 
45
31
  const isLeading = !!(leadingIcon || avatar || Astro.slots.has("leading") || loading)
46
32
  const isTrailing = !!(trailingIcon || Astro.slots.has("trailing")) || (loading && !isLeading)
@@ -56,20 +42,14 @@ const showTrailingIcon = loading
56
42
  const leadingIconClass = loading ? "animate-spin" : ""
57
43
  const trailingIconClass = loading ? "animate-spin" : ""
58
44
 
59
- const classes = resolveClasses(button, {
45
+ const classes = buttonTheme({
46
+ ...Astro.props,
60
47
  variant: (active && activeVariant ? activeVariant : variant) as "solid",
61
48
  color: (active && activeColor ? activeColor : color) as "neutral",
62
- size,
63
- block,
64
- justify,
65
49
  square: square || (!label && !Astro.slots.has("default")),
66
- rounded,
67
50
  leading: isLeading,
68
- trailing: isTrailing,
69
- loading,
70
- active,
71
- theme
72
- }, useUi("button", uiProp), className);
51
+ trailing: isTrailing
52
+ });
73
53
 
74
54
  const Tag = (href || to) ? RLALink : "button";
75
55
 
@@ -78,7 +58,7 @@ const loadingAutoProps = loadingAuto ? { 'data-loading-auto': '' } : {};
78
58
  <Tag
79
59
  class={classes.root}
80
60
  data-slot="root"
81
- {...(Tag === RLALink ? { href, to, noExternalIcon: true } : {})}
61
+ {...(Tag === RLALink ? { href, to, noExternalIcon: true, raw: true } : {})}
82
62
  {...loadingAutoProps}
83
63
  {...rest}
84
64
  >
@@ -134,7 +114,7 @@ const loadingAutoProps = loadingAuto ? { 'data-loading-auto': '' } : {};
134
114
  try {
135
115
  button.setAttribute('data-loading', 'true');
136
116
  button.setAttribute('disabled', 'true');
137
-
117
+
138
118
  // To spin the icon dynamically:
139
119
  let leadingIconSpan = button.querySelector('[data-slot="leading-icon"]');
140
120
  let origHTML = '';
@@ -0,0 +1,169 @@
1
+ import { createMemo, splitProps, type Component, type JSX } from "solid-js"
2
+ import type { ButtonProps } from "./button"
3
+ import { buttonTheme } from "./button.theme"
4
+ import RLSIcon from "../icon/RLSIcon"
5
+
6
+ export interface RLSButtonProps extends ButtonProps {
7
+ children?: JSX.Element
8
+ leading?: JSX.Element
9
+ trailing?: JSX.Element
10
+ onClick?: (e: MouseEvent) => void
11
+ type?: "button" | "submit" | "reset"
12
+ }
13
+
14
+ const RLSButton: Component<RLSButtonProps> = (allProps) => {
15
+ const [props, rest] = splitProps(allProps, [
16
+ "variant",
17
+ "color",
18
+ "size",
19
+ "href",
20
+ "label",
21
+ "leadingIcon",
22
+ "trailingIcon",
23
+ "loading",
24
+ "loadingAuto",
25
+ "square",
26
+ "block",
27
+ "justify",
28
+ "active",
29
+ "activeColor",
30
+ "activeVariant",
31
+ "rounded",
32
+ "theme",
33
+ "ui",
34
+ "class",
35
+ "disabled",
36
+ "children",
37
+ "leading",
38
+ "trailing",
39
+ "onClick",
40
+ "type",
41
+ "external",
42
+ "externalIcon",
43
+ "noExternalIcon",
44
+ "target",
45
+ "rel",
46
+ "prefetch",
47
+ "raw",
48
+ "ariaLabel",
49
+ "ariaCurrentValue"
50
+ ])
51
+
52
+ const isLeading = () => !!(props.leadingIcon || props.leading) || !!props.loading
53
+ const isTrailing = () =>
54
+ !!(props.trailingIcon || props.trailing) || (!!props.loading && !isLeading())
55
+
56
+ const showLeadingIcon = () => {
57
+ if (props.loading) return "loaderCircle"
58
+ return props.leadingIcon
59
+ }
60
+
61
+ const showTrailingIcon = () => {
62
+ if (props.loading) return "loaderCircle"
63
+ return props.trailingIcon
64
+ }
65
+
66
+ const leadingIconClass = () => (props.loading && isLeading() ? "animate-spin" : "")
67
+ const trailingIconClass = () => (props.loading && isTrailing() ? "animate-spin" : "")
68
+
69
+ const classes = createMemo<Record<string, string>>(() =>
70
+ buttonTheme({
71
+ variant:
72
+ props.active && props.activeVariant ? props.activeVariant : (props.variant ?? "solid"),
73
+ color: props.active && props.activeColor ? props.activeColor : (props.color ?? "primary"),
74
+ size: props.size ?? "md",
75
+ justify: props.justify,
76
+ block: props.block,
77
+ square: props.square !== undefined ? props.square : !props.label && !props.children,
78
+ rounded: props.rounded,
79
+ leading: isLeading(),
80
+ trailing: isTrailing(),
81
+ loading: props.loading,
82
+ active: props.active,
83
+ theme: props.theme,
84
+ ui: props.ui,
85
+ class: props.class
86
+ })
87
+ )
88
+
89
+ if (props.href) {
90
+ return (
91
+ <a
92
+ href={props.href}
93
+ target={props.target}
94
+ rel={props.rel || undefined}
95
+ class={classes().root}
96
+ data-slot="root"
97
+ aria-label={props.ariaLabel}
98
+ aria-disabled={props.disabled ? "true" : undefined}
99
+ onClick={props.onClick}
100
+ {...rest}
101
+ >
102
+ {props.leading ? (
103
+ props.leading
104
+ ) : isLeading() && showLeadingIcon() ? (
105
+ <span class={`${classes().leadingIcon} ${leadingIconClass()}`} data-slot="leading-icon">
106
+ <RLSIcon name={showLeadingIcon()!} size={props.size ?? "md"} aria-hidden="true" />
107
+ </span>
108
+ ) : null}
109
+
110
+ {props.children !== undefined && props.children !== null ? (
111
+ props.children
112
+ ) : props.label !== undefined && props.label !== null ? (
113
+ <span class={classes().label} data-slot="label">
114
+ {props.label}
115
+ </span>
116
+ ) : null}
117
+
118
+ {props.trailing ? (
119
+ props.trailing
120
+ ) : isTrailing() && showTrailingIcon() ? (
121
+ <span
122
+ class={`${classes().trailingIcon} ${trailingIconClass()}`}
123
+ data-slot="trailing-icon"
124
+ >
125
+ <RLSIcon name={showTrailingIcon()!} size={props.size ?? "md"} aria-hidden="true" />
126
+ </span>
127
+ ) : null}
128
+ </a>
129
+ )
130
+ }
131
+
132
+ return (
133
+ <button
134
+ type={props.type || "button"}
135
+ disabled={props.disabled}
136
+ class={classes().root}
137
+ data-slot="root"
138
+ aria-label={props.ariaLabel}
139
+ onClick={props.onClick}
140
+ {...rest}
141
+ >
142
+ {props.leading ? (
143
+ props.leading
144
+ ) : isLeading() && showLeadingIcon() ? (
145
+ <span class={`${classes().leadingIcon} ${leadingIconClass()}`} data-slot="leading-icon">
146
+ <RLSIcon name={showLeadingIcon()!} size={props.size ?? "md"} aria-hidden="true" />
147
+ </span>
148
+ ) : null}
149
+
150
+ {props.children !== undefined && props.children !== null ? (
151
+ props.children
152
+ ) : props.label !== undefined && props.label !== null ? (
153
+ <span class={classes().label} data-slot="label">
154
+ {props.label}
155
+ </span>
156
+ ) : null}
157
+
158
+ {props.trailing ? (
159
+ props.trailing
160
+ ) : isTrailing() && showTrailingIcon() ? (
161
+ <span class={`${classes().trailingIcon} ${trailingIconClass()}`} data-slot="trailing-icon">
162
+ <RLSIcon name={showTrailingIcon()!} size={props.size ?? "md"} aria-hidden="true" />
163
+ </span>
164
+ ) : null}
165
+ </button>
166
+ )
167
+ }
168
+
169
+ export default RLSButton