@rimelight/ui 0.0.42 → 0.0.44

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 (434) hide show
  1. package/README.md +18 -26
  2. package/package.json +24 -37
  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 +11 -39
  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 +24 -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 +114 -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 +13 -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 +159 -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 +11 -18
  39. package/src/components/callout/callout.theme.ts +55 -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 +45 -13
  46. package/src/components/carousel/carousel.theme.ts +28 -32
  47. package/src/components/chart/RLAChart.astro +6 -12
  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 +3 -17
  69. package/src/components/checkbox/RLSCheckbox.tsx +65 -0
  70. package/src/components/checkbox/checkbox.theme.ts +31 -46
  71. package/src/components/checkbox/checkbox.ts +1 -1
  72. package/src/components/chip/RLAChip.astro +33 -56
  73. package/src/components/chip/chip.theme.ts +62 -72
  74. package/src/components/chip/chip.ts +3 -1
  75. package/src/components/collapsible/RLACollapsible.astro +3 -13
  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 +3 -13
  79. package/src/components/color-area/color-area.theme.ts +16 -32
  80. package/src/components/color-area/color-area.ts +1 -1
  81. package/src/components/color-field/RLAColorField.astro +4 -14
  82. package/src/components/color-field/color-field.theme.ts +15 -31
  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 +3 -13
  87. package/src/components/color-slider/color-slider.theme.ts +17 -33
  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 +15 -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 +25 -12
  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 +122 -21
  119. package/src/components/dashboard-sidebar/dashboard-sidebar.theme.ts +41 -11
  120. package/src/components/dashboard-sidebar/dashboard-sidebar.ts +8 -6
  121. package/src/components/dashboard-sidebar-collapse/RLADashboardSidebarCollapse.astro +25 -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/editor.theme.ts +9 -12
  140. package/src/components/empty/RLAEmpty.astro +86 -20
  141. package/src/components/empty/empty.theme.ts +79 -11
  142. package/src/components/empty/empty.ts +59 -2
  143. package/src/components/error/RLAError.astro +9 -20
  144. package/src/components/error/error.theme.ts +9 -12
  145. package/src/components/field-group/RLAFieldGroup.astro +2 -11
  146. package/src/components/field-group/field-group.theme.ts +18 -22
  147. package/src/components/fieldset/RLAFieldset.astro +9 -20
  148. package/src/components/fieldset/fieldset.theme.ts +9 -12
  149. package/src/components/file-upload/RLAFileUpload.astro +4 -13
  150. package/src/components/file-upload/file-upload.theme.ts +19 -22
  151. package/src/components/file-upload/file-upload.ts +1 -1
  152. package/src/components/floating-action/RLAFloatingAction.astro +9 -20
  153. package/src/components/floating-action/floating-action.theme.ts +9 -12
  154. package/src/components/footer/RLAFooter.astro +34 -38
  155. package/src/components/footer/footer.theme.ts +24 -27
  156. package/src/components/footer/footer.ts +4 -0
  157. package/src/components/form/RLAForm.astro +9 -20
  158. package/src/components/form/form.theme.ts +9 -12
  159. package/src/components/form-field/RLAFormField.astro +5 -12
  160. package/src/components/form-field/RLSFormField.tsx +71 -0
  161. package/src/components/form-field/RLVFormField.vue +5 -14
  162. package/src/components/form-field/form-field.theme.ts +19 -22
  163. package/src/components/form-field/form-field.ts +1 -0
  164. package/src/components/gallery/RLAGallery.astro +9 -20
  165. package/src/components/gallery/gallery.theme.ts +9 -12
  166. package/src/components/gamepad/RLAGamepad.astro +1 -1
  167. package/src/components/grid/RLAGrid.astro +2 -15
  168. package/src/components/grid/grid.theme.ts +31 -34
  169. package/src/components/head/UIHead.astro +297 -0
  170. package/src/components/head/head.theme.ts +9 -12
  171. package/src/components/header/HeaderLayer.astro +63 -0
  172. package/src/components/header/RLAHeader.astro +29 -48
  173. package/src/components/header/header.theme.ts +37 -40
  174. package/src/components/header/header.ts +4 -0
  175. package/src/{utils → components/header}/headerStack.ts +30 -22
  176. package/src/components/hover-card/RLAHoverCard.astro +24 -35
  177. package/src/components/hover-card/hover-card.theme.ts +23 -27
  178. package/src/components/icon/RLAIcon.astro +26 -36
  179. package/src/components/icon/RLSIcon.tsx +8 -9
  180. package/src/components/icon/RLVIcon.vue +23 -12
  181. package/src/components/icon/icon.theme.ts +18 -28
  182. package/src/components/image/RLAImage.astro +20 -23
  183. package/src/components/image/image.theme.ts +29 -32
  184. package/src/components/input/RLAInput.astro +7 -21
  185. package/src/components/input/RLSInput.tsx +101 -0
  186. package/src/components/input/RLVInput.vue +11 -20
  187. package/src/components/input/input.theme.ts +37 -44
  188. package/src/components/input/input.ts +1 -1
  189. package/src/components/input-date/RLAInputDate.astro +9 -20
  190. package/src/components/input-date/input-date.theme.ts +9 -12
  191. package/src/components/input-menu/RLAInputMenu.astro +4 -14
  192. package/src/components/input-menu/input-menu.theme.ts +29 -32
  193. package/src/components/input-menu/input-menu.ts +1 -1
  194. package/src/components/input-number/RLAInputNumber.astro +9 -20
  195. package/src/components/input-number/input-number.theme.ts +9 -12
  196. package/src/components/input-pin/RLAInputPin.astro +9 -22
  197. package/src/components/input-pin/input-pin.theme.ts +9 -13
  198. package/src/components/input-rating/RLAInputRating.astro +2 -23
  199. package/src/components/input-rating/input-rating.theme.ts +64 -76
  200. package/src/components/input-rating/input-rating.ts +1 -1
  201. package/src/components/input-tags/RLAInputTags.astro +174 -21
  202. package/src/components/input-tags/input-tags.theme.ts +37 -12
  203. package/src/components/input-tags/input-tags.ts +50 -0
  204. package/src/components/input-time/RLAInputTime.astro +9 -20
  205. package/src/components/input-time/input-time.theme.ts +9 -12
  206. package/src/components/kbd/RLAKbd.astro +18 -32
  207. package/src/components/kbd/kbd.theme.ts +45 -91
  208. package/src/components/kbd/kbd.ts +3 -0
  209. package/src/components/keyboard/RLAKeyboard.astro +1 -1
  210. package/src/components/knob/RLAKnob.astro +9 -20
  211. package/src/components/knob/knob.theme.ts +9 -12
  212. package/src/components/label/RLALabel.astro +16 -27
  213. package/src/components/label/label.theme.ts +16 -20
  214. package/src/components/layout-grid/RLALayoutGrid.astro +5 -11
  215. package/src/components/layout-grid/layout-grid.theme.ts +12 -15
  216. package/src/components/link/RLALink.astro +7 -20
  217. package/src/components/link/RLSLink.tsx +8 -16
  218. package/src/components/link/RLVLink.vue +7 -16
  219. package/src/components/link/link.theme.ts +33 -37
  220. package/src/components/link/link.ts +5 -5
  221. package/src/components/link-group/RLALinkGroup.astro +8 -45
  222. package/src/components/link-group/link-group.theme.ts +13 -27
  223. package/src/components/link-group/link-group.ts +5 -16
  224. package/src/components/listbox/RLAListbox.astro +9 -20
  225. package/src/components/listbox/listbox.theme.ts +9 -12
  226. package/src/components/locale-selector/RLALocaleSelector.astro +12 -52
  227. package/src/components/locale-selector/locale-selector.theme.ts +42 -45
  228. package/src/components/locale-selector/locale-selector.ts +4 -0
  229. package/src/components/logo/RLALogo.astro +13 -27
  230. package/src/components/logo/logo.theme.ts +9 -12
  231. package/src/components/main/RLAMain.astro +31 -36
  232. package/src/components/main/main.theme.ts +9 -12
  233. package/src/components/marquee/RLAMarquee.astro +62 -43
  234. package/src/components/marquee/marquee.theme.ts +22 -26
  235. package/src/components/meter/RLAMeter.astro +9 -20
  236. package/src/components/meter/meter.theme.ts +9 -12
  237. package/src/components/modal/RLAModal.astro +71 -73
  238. package/src/components/modal/RLSModal.tsx +156 -0
  239. package/src/components/modal/RLVModal.vue +5 -6
  240. package/src/components/modal/modal.theme.ts +42 -46
  241. package/src/components/modal/modal.ts +1 -0
  242. package/src/components/navigation-menu/RLANavigationMenu.astro +22 -31
  243. package/src/components/navigation-menu/navigation-menu.theme.ts +33 -40
  244. package/src/components/navigation-menu/navigation-menu.ts +19 -18
  245. package/src/components/page/RLAPage.astro +9 -20
  246. package/src/components/page/page.theme.ts +9 -12
  247. package/src/components/page-aside/RLAPageAside.astro +9 -20
  248. package/src/components/page-aside/page-aside.theme.ts +9 -12
  249. package/src/components/page-body/RLAPageBody.astro +9 -20
  250. package/src/components/page-body/page-body.theme.ts +9 -12
  251. package/src/components/page-header/RLAPageHeader.astro +9 -20
  252. package/src/components/page-header/page-header.theme.ts +9 -12
  253. package/src/components/page-section/RLAPageSection.astro +11 -15
  254. package/src/components/page-section/page-section.theme.ts +193 -176
  255. package/src/components/pagination/RLAPagination.astro +91 -97
  256. package/src/components/pagination/pagination.theme.ts +22 -26
  257. package/src/components/password/RLAPassword.astro +9 -20
  258. package/src/components/password/password.theme.ts +9 -12
  259. package/src/components/phone-mockup/RLAPhoneMockup.astro +9 -20
  260. package/src/components/phone-mockup/phone-mockup.theme.ts +9 -12
  261. package/src/components/placeholder/RLAPlaceholder.astro +32 -43
  262. package/src/components/placeholder/placeholder.theme.ts +11 -14
  263. package/src/components/popover/RLAPopover.astro +241 -129
  264. package/src/components/popover/popover.theme.ts +23 -27
  265. package/src/components/post/RLAPost.astro +2 -10
  266. package/src/components/post/post.theme.ts +45 -48
  267. package/src/components/pricing-plan/RLAPricingPlan.astro +9 -20
  268. package/src/components/pricing-plan/pricing-plan.theme.ts +9 -12
  269. package/src/components/pricing-table/RLAPricingTable.astro +9 -20
  270. package/src/components/pricing-table/pricing-table.theme.ts +9 -12
  271. package/src/components/progress/RLAProgress.astro +3 -16
  272. package/src/components/progress/progress.theme.ts +19 -35
  273. package/src/components/progress/progress.ts +1 -1
  274. package/src/components/prose/RLAProse.astro +9 -20
  275. package/src/components/prose/prose.theme.ts +9 -12
  276. package/src/components/qr-code/RLAQrCode.astro +9 -20
  277. package/src/components/qr-code/qr-code.theme.ts +9 -12
  278. package/src/components/quote/quote.theme.ts +9 -12
  279. package/src/components/radio-group/RLARadioGroup.astro +9 -20
  280. package/src/components/radio-group/radio-group.theme.ts +9 -12
  281. package/src/components/rating/RLARating.astro +9 -20
  282. package/src/components/rating/rating.theme.ts +9 -12
  283. package/src/components/scroll-area/RLAScrollArea.astro +2 -10
  284. package/src/components/scroll-area/scroll-area.theme.ts +21 -24
  285. package/src/components/scroll-to-top/RLAScrollToTop.astro +70 -45
  286. package/src/components/scroll-to-top/RLVScrollToTop.vue +13 -17
  287. package/src/components/scroll-to-top/scroll-to-top.theme.ts +28 -46
  288. package/src/components/scroll-to-top/scroll-to-top.ts +1 -1
  289. package/src/{utils → components/scroll-to-top}/scroll.ts +19 -6
  290. package/src/components/search/RLASearch.astro +6 -12
  291. package/src/components/search/search.theme.ts +60 -63
  292. package/src/components/select/RLASelect.astro +101 -132
  293. package/src/components/select/RLSSelect.tsx +180 -0
  294. package/src/components/select/RLVSelect.vue +64 -15
  295. package/src/components/select/select.theme.ts +21 -27
  296. package/src/components/select/select.ts +58 -36
  297. package/src/components/separator/RLASeparator.astro +62 -83
  298. package/src/components/separator/separator.theme.ts +135 -138
  299. package/src/components/separator/separator.ts +4 -0
  300. package/src/components/shortcuts/RLAShortcuts.astro +11 -12
  301. package/src/components/sidebar/RLASidebar.astro +14 -24
  302. package/src/components/sidebar/sidebar.theme.ts +39 -42
  303. package/src/components/sidebar/sidebar.ts +2 -0
  304. package/src/components/skeleton/RLASkeleton.astro +13 -22
  305. package/src/components/skeleton/skeleton.theme.ts +16 -19
  306. package/src/components/slideover/RLASlideover.astro +3 -13
  307. package/src/components/slideover/slideover.theme.ts +51 -55
  308. package/src/components/slider/RLASlider.astro +3 -15
  309. package/src/components/slider/slider.theme.ts +17 -34
  310. package/src/components/slider/slider.ts +1 -1
  311. package/src/components/speed-dial/RLASpeedDial.astro +9 -20
  312. package/src/components/speed-dial/speed-dial.theme.ts +9 -12
  313. package/src/components/spinner/RLASpinner.astro +3 -17
  314. package/src/components/spinner/spinner.theme.ts +25 -30
  315. package/src/components/spinner/spinner.ts +1 -1
  316. package/src/components/splitter/RLASplitter.astro +3 -11
  317. package/src/components/splitter/splitter.theme.ts +18 -21
  318. package/src/components/spoiler/RLASpoiler.astro +9 -20
  319. package/src/components/spoiler/spoiler.theme.ts +9 -12
  320. package/src/components/stepper/RLAStepper.astro +300 -21
  321. package/src/components/stepper/stepper.theme.ts +213 -12
  322. package/src/components/stepper/stepper.ts +23 -6
  323. package/src/components/steps/RLASteps.astro +5 -11
  324. package/src/components/steps/steps.theme.ts +9 -12
  325. package/src/components/sticky-surface/RLAStickySurface.astro +67 -38
  326. package/src/components/sticky-surface/sticky-surface.theme.ts +7 -11
  327. package/src/components/sticky-surface/sticky-surface.ts +1 -0
  328. package/src/components/surround/RLASurround.astro +5 -5
  329. package/src/components/switch/RLASwitch.astro +3 -18
  330. package/src/components/switch/switch.theme.ts +46 -61
  331. package/src/components/switch/switch.ts +1 -1
  332. package/src/components/table/RLATable.astro +566 -50
  333. package/src/components/table/table.theme.ts +112 -31
  334. package/src/components/table/table.ts +207 -6
  335. package/src/components/table-of-contents/RLATableOfContents.astro +12 -17
  336. package/src/components/table-of-contents/table-of-contents.theme.ts +60 -63
  337. package/src/components/tabs/RLATabs.astro +195 -51
  338. package/src/components/tabs/tabs.theme.ts +81 -84
  339. package/src/components/tabs/tabs.ts +18 -1
  340. package/src/components/textarea/RLATextarea.astro +16 -13
  341. package/src/components/textarea/RLSTextarea.tsx +69 -0
  342. package/src/components/textarea/RLVTextarea.vue +8 -16
  343. package/src/components/textarea/textarea.theme.ts +21 -24
  344. package/src/components/textarea/textarea.ts +2 -1
  345. package/src/components/theme-selector/RLAThemeSelector.astro +21 -27
  346. package/src/components/theme-selector/theme-selector.theme.ts +11 -14
  347. package/src/components/timeline/RLATimeline.astro +24 -44
  348. package/src/components/timeline/timeline.theme.ts +302 -307
  349. package/src/components/toast/RLAToast.astro +50 -24
  350. package/src/components/toast/store.ts +97 -0
  351. package/src/components/toast/toast.theme.ts +31 -34
  352. package/src/components/toast/toast.ts +1 -1
  353. package/src/components/toaster/RLAToaster.astro +76 -6
  354. package/src/components/tooltip/RLATooltip.astro +136 -33
  355. package/src/components/tooltip/tooltip.theme.ts +23 -26
  356. package/src/components/tour/RLATour.astro +9 -20
  357. package/src/components/tour/tour.theme.ts +9 -12
  358. package/src/components/tree/RLATree.astro +9 -20
  359. package/src/components/tree/tree.theme.ts +9 -12
  360. package/src/components/user/RLAUser.astro +9 -20
  361. package/src/components/user/user.theme.ts +9 -12
  362. package/src/components/video/RLAVideo.astro +5 -10
  363. package/src/components/video/video.theme.ts +13 -16
  364. package/src/components/watermark/RLAWatermark.astro +9 -20
  365. package/src/components/watermark/watermark.theme.ts +9 -12
  366. package/src/components/window-mockup/RLAWindowMockup.astro +9 -20
  367. package/src/components/window-mockup/window-mockup.theme.ts +9 -12
  368. package/src/icons.raw.ts +67 -0
  369. package/src/icons.ts +35 -0
  370. package/src/index.ts +32 -0
  371. package/src/preset.ts +148 -0
  372. package/src/resolver.ts +132 -0
  373. package/src/shortcuts.ts +191 -0
  374. package/src/stores.ts +22 -0
  375. package/src/types.ts +75 -0
  376. package/src/virtual.d.ts +4 -0
  377. package/src/components/editor/PageEditor.vue +0 -459
  378. package/src/components/editor/PageMention.vue +0 -87
  379. package/src/components/editor/PagePropertiesEditor.vue +0 -358
  380. package/src/components/editor/PagePropertiesRenderer.vue +0 -285
  381. package/src/components/editor/PageRenderer.vue +0 -155
  382. package/src/components/editor/PageSurround.vue +0 -130
  383. package/src/components/editor/PageVersionSelector.vue +0 -371
  384. package/src/components/editor/blocks/AddBlockModal.vue +0 -196
  385. package/src/components/editor/blocks/Block.vue +0 -141
  386. package/src/components/editor/blocks/BlockEditRenderer.vue +0 -26
  387. package/src/components/editor/blocks/BlockEditor.vue +0 -141
  388. package/src/components/editor/blocks/BlockViewRenderer.vue +0 -65
  389. package/src/components/editor/blocks/TextRenderer.vue +0 -31
  390. package/src/components/editor/blocks/editor/CalloutBlockEditor.vue +0 -53
  391. package/src/components/editor/blocks/editor/ImageBlockEditor.vue +0 -55
  392. package/src/components/editor/blocks/editor/ParagraphBlockEditor.vue +0 -31
  393. package/src/components/editor/blocks/editor/SectionBlockEditor.vue +0 -65
  394. package/src/components/editor/blocks/nodes/LinkNode.vue +0 -28
  395. package/src/components/editor/blocks/nodes/TextNode.vue +0 -22
  396. package/src/components/editor/blocks/renderer/CalloutBlockRenderer.vue +0 -66
  397. package/src/components/editor/blocks/renderer/ImageBlockRenderer.vue +0 -20
  398. package/src/components/editor/blocks/renderer/ParagraphBlockRenderer.vue +0 -21
  399. package/src/components/editor/blocks/renderer/SectionBlockRenderer.vue +0 -55
  400. package/src/components/editor/composables/injectionKeys.ts +0 -3
  401. package/src/components/editor/composables/useBlockEditor.ts +0 -261
  402. package/src/components/editor/composables/usePageEditor.ts +0 -97
  403. package/src/components/editor/modals/CreatePageModal.vue +0 -160
  404. package/src/components/editor/modals/DeletePageModal.vue +0 -116
  405. package/src/components/editor/modals/PageTreeModal.vue +0 -275
  406. package/src/components/editor/types/blocks.ts +0 -100
  407. package/src/components/editor/types/pages.ts +0 -89
  408. package/src/components/editor/types/schemas.ts +0 -36
  409. package/src/components/editor/utils/blocks.ts +0 -42
  410. package/src/components/editor/utils/editorHelpers.ts +0 -24
  411. package/src/components/editor/utils/page.ts +0 -219
  412. package/src/components/editor/utils/richTextHelpers.ts +0 -35
  413. package/src/components/editor/views/PageEditView.vue +0 -195
  414. package/src/components/editor/views/PageLiveView.vue +0 -90
  415. package/src/components/editor/views/PageReviewView.vue +0 -308
  416. package/src/components/head/RLAHead.astro +0 -528
  417. package/src/components/icon/resolver.ts +0 -37
  418. package/src/config/color.config.ts +0 -300
  419. package/src/config/site.config.ts +0 -28
  420. package/src/config/ui.config.ts +0 -89
  421. package/src/env.d.ts +0 -23
  422. package/src/icons/defaults.ts +0 -44
  423. package/src/presets/index.ts +0 -577
  424. package/src/stores/toast.ts +0 -24
  425. package/src/themes.ts +0 -26
  426. package/src/types/component.ts +0 -28
  427. package/src/ui.ts +0 -159
  428. package/src/utils/defineTheme.ts +0 -5
  429. package/src/utils/merge.ts +0 -62
  430. package/src/utils/resolveClasses.ts +0 -39
  431. package/src/utils/resolveTheme.ts +0 -13
  432. package/src/utils/shortcuts.ts +0 -322
  433. package/src/utils/toast.ts +0 -36
  434. package/src/utils/useUi.ts +0 -33
@@ -1,11 +1,10 @@
1
1
  export interface DashboardNavbarProps {
2
- /**
3
- * Slot-specific CSS class overrides.
4
- */
2
+ as?: any
3
+ icon?: string
4
+ title?: string
5
+ toggle?: boolean
6
+ toggleSide?: "left" | "right"
5
7
  ui?: any
6
- /**
7
- * Additional CSS classes to apply to the root element.
8
- */
9
8
  class?: any
10
9
  [key: string]: unknown
11
10
  }
@@ -1,23 +1,36 @@
1
1
  ---
2
- import { scv } from "css-variants"
3
- import { useUi } from "../../utils/useUi"
4
- import { resolveClasses } from "../../utils/resolveClasses"
5
2
  import type { DashboardPanelProps } from "./dashboard-panel"
6
- import dashboardPanelTheme from "./dashboard-panel.theme"
3
+ import { dashboardPanelTheme } from "./dashboard-panel.theme"
7
4
 
8
5
 
9
- const dashboardPanel = scv(dashboardPanelTheme)
10
-
11
6
  const {
12
- ui: uiProp,
7
+ resizable = false,
13
8
  class: className,
14
9
  ...rest
15
10
  } = Astro.props as DashboardPanelProps
16
11
 
17
- const classes = resolveClasses(dashboardPanel, {}, useUi("dashboardPanel", uiProp), className);
12
+ const classes = dashboardPanelTheme({
13
+ ...Astro.props,
14
+ size: false
15
+ });
18
16
  ---
19
- <div class={classes.root} data-slot="root" {...rest}>
17
+ <div class={classes.root} data-slot="root" style="flex: 1 1 0%; min-width: 0;" {...rest}>
20
18
  <slot name="header" />
21
- <slot name="body" />
22
- <slot />
23
- </div>
19
+
20
+ <div data-slot="body" class={classes.body}>
21
+ <slot name="body">
22
+ <slot />
23
+ </slot>
24
+ </div>
25
+
26
+ <slot name="footer" />
27
+ </div>
28
+
29
+ {resizable && (
30
+ <slot name="resize-handle">
31
+ <div
32
+ data-slot="handle"
33
+ class={classes.handle + " hidden lg:block touch-none select-none cursor-ew-resize relative before:absolute before:inset-y-0 before:-left-1.5 before:-right-1.5 before:z-1"}
34
+ />
35
+ </slot>
36
+ )}
@@ -1,13 +1,23 @@
1
- import { defineTheme } from "../../utils/defineTheme"
1
+ import { defineTheme } from "../../resolver"
2
2
 
3
- export const createDashboardPanelTheme = () =>
4
- defineTheme({
5
- slots: ["root"],
6
- base: {
7
- root: ""
8
- },
9
- variants: {},
10
- defaultVariants: {}
11
- })
12
-
13
- export default createDashboardPanelTheme()
3
+ export const dashboardPanelTheme = defineTheme("dashboard-panel", {
4
+ slots: ["root", "body", "handle"],
5
+ base: {
6
+ root: "relative flex flex-col min-w-0 h-full min-h-0 lg:not-last:border-e lg:not-last:border-default shrink-0 flex-1",
7
+ body: "flex flex-col gap-4 sm:gap-6 flex-1 overflow-y-auto p-4 sm:p-6",
8
+ handle: ""
9
+ },
10
+ variants: {
11
+ size: {
12
+ true: {
13
+ root: "w-full lg:w-[var(--width,16rem)]"
14
+ },
15
+ false: {
16
+ root: "flex-1"
17
+ }
18
+ }
19
+ },
20
+ defaultVariants: {
21
+ size: false
22
+ }
23
+ })
@@ -1,11 +1,9 @@
1
1
  export interface DashboardPanelProps {
2
- /**
3
- * Slot-specific CSS class overrides.
4
- */
2
+ resizable?: boolean
3
+ defaultSize?: number
4
+ minSize?: number
5
+ maxSize?: number
5
6
  ui?: any
6
- /**
7
- * Additional CSS classes to apply to the root element.
8
- */
9
7
  class?: any
10
8
  [key: string]: unknown
11
9
  }
@@ -1,21 +1,21 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi } from "../../utils/useUi"
4
- import { resolveClasses } from "../../utils/resolveClasses"
5
- import type { DashboardResizeHandleProps } from "./dashboard-resize-handle"
6
- import dashboardResizeHandleTheme from "./dashboard-resize-handle.theme"
7
-
8
-
9
- const dashboardResizeHandle = scv(dashboardResizeHandleTheme)
10
-
11
- const {
12
- ui: uiProp,
13
- class: className,
14
- ...rest
15
- } = Astro.props as DashboardResizeHandleProps
16
-
17
- const classes = resolveClasses(dashboardResizeHandle, {}, useUi("dashboardResizeHandle", uiProp), className);
18
- ---
19
- <div class={classes.root} data-slot="root" {...rest}>
20
- <slot />
21
- </div>
1
+ ---
2
+ import type { DashboardResizeHandleProps } from "./dashboard-resize-handle"
3
+ import { dashboardResizeHandleTheme } from "./dashboard-resize-handle.theme"
4
+
5
+
6
+ const {
7
+ as: Tag = "div",
8
+ ...rest
9
+ } = Astro.props as DashboardResizeHandleProps
10
+
11
+
12
+
13
+ const classes = dashboardResizeHandleTheme(Astro.props);
14
+ ---
15
+ <Tag
16
+ data-slot="root"
17
+ class={classes.root}
18
+ {...({ role: "separator", ...rest } as any)}
19
+ >
20
+ <slot />
21
+ </Tag>
@@ -1,13 +1,10 @@
1
- import { defineTheme } from "../../utils/defineTheme"
1
+ import { defineTheme } from "../../resolver"
2
2
 
3
- export const createDashboardResizeHandleTheme = () =>
4
- defineTheme({
5
- slots: ["root"],
6
- base: {
7
- root: ""
8
- },
9
- variants: {},
10
- defaultVariants: {}
11
- })
12
-
13
- export default createDashboardResizeHandleTheme()
3
+ export const dashboardResizeHandleTheme = defineTheme("dashboard-resize-handle", {
4
+ slots: ["root"],
5
+ base: {
6
+ root: "hidden lg:block touch-none select-none cursor-ew-resize relative before:absolute before:inset-y-0 before:-left-1.5 before:-right-1.5 before:z-1"
7
+ },
8
+ variants: {},
9
+ defaultVariants: {}
10
+ })
@@ -1,11 +1,6 @@
1
1
  export interface DashboardResizeHandleProps {
2
- /**
3
- * Slot-specific CSS class overrides.
4
- */
2
+ as?: string
5
3
  ui?: any
6
- /**
7
- * Additional CSS classes to apply to the root element.
8
- */
9
4
  class?: any
10
5
  [key: string]: unknown
11
6
  }
@@ -1,21 +1,100 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi } from "../../utils/useUi"
4
- import { resolveClasses } from "../../utils/resolveClasses"
5
- import type { DashboardSearchProps } from "./dashboard-search"
6
- import dashboardSearchTheme from "./dashboard-search.theme"
7
-
8
-
9
- const dashboardSearch = scv(dashboardSearchTheme)
10
-
11
- const {
12
- ui: uiProp,
13
- class: className,
14
- ...rest
15
- } = Astro.props as DashboardSearchProps
16
-
17
- const classes = resolveClasses(dashboardSearch, {}, useUi("dashboardSearch", uiProp), className);
18
- ---
19
- <div class={classes.root} data-slot="root" {...rest}>
20
- <slot />
21
- </div>
1
+ ---
2
+ import type { DashboardSearchProps } from "./dashboard-search"
3
+ import { dashboardSearchTheme } from "./dashboard-search.theme"
4
+ import RLAIcon from "../icon/RLAIcon.astro"
5
+
6
+
7
+ const props = Astro.props as DashboardSearchProps
8
+
9
+ const classes = dashboardSearchTheme({
10
+ ...Astro.props,
11
+ ...props,
12
+ fullscreen: false,
13
+ size: "md"
14
+ })
15
+ ---
16
+
17
+ <template id="dashboard-search-template">
18
+ <div data-dashboard-search data-slot="modal" class={classes.modal + " fixed inset-0 z-50 flex items-start justify-center sm:pt-16"} style="display:none">
19
+ <div class="fixed inset-0 bg-default/80 backdrop-blur-sm" data-dashboard-search-close></div>
20
+ <div class:list={["relative w-full bg-default border border-default sm:rounded-xl shadow-2xl overflow-hidden", classes.modal]}>
21
+ <div class="flex items-center gap-2 border-b border-default px-4">
22
+ <RLAIcon name="search" class="size-5 shrink-0 text-muted" />
23
+ <input
24
+ type="text"
25
+ data-dashboard-search-input
26
+ placeholder="Search..."
27
+ class="flex-1 h-12 bg-transparent border-0 outline-none text-default placeholder:text-muted"
28
+ />
29
+ <button type="button" data-dashboard-search-close class="shrink-0 size-8 flex items-center justify-center rounded-md hover:bg-muted text-muted">
30
+ <RLAIcon name="close" class="size-4" />
31
+ </button>
32
+ </div>
33
+ <div class="p-4 text-sm text-muted text-center">
34
+ Type to search...
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </template>
39
+
40
+ <div data-dashboard-search-target>
41
+ <slot />
42
+ </div>
43
+
44
+ <script>
45
+ (function() {
46
+ const template = document.getElementById('dashboard-search-template') as HTMLTemplateElement | null;
47
+ if (!template) return;
48
+
49
+ let searchEl: HTMLElement | null = null;
50
+ const shortcutKey = 'k';
51
+
52
+ const open = () => {
53
+ if (searchEl) return;
54
+ const clone = template.content.cloneNode(true) as DocumentFragment;
55
+ searchEl = clone.firstElementChild as HTMLElement | null;
56
+ if (!searchEl) return;
57
+ document.body.appendChild(searchEl);
58
+
59
+ const input = searchEl.querySelector<HTMLInputElement>('[data-dashboard-search-input]');
60
+ const closeBtns = searchEl.querySelectorAll('[data-dashboard-search-close]');
61
+
62
+ setTimeout(() => input?.focus(), 50);
63
+
64
+ closeBtns.forEach(btn => {
65
+ btn.addEventListener('click', close);
66
+ });
67
+
68
+ searchEl.addEventListener('click', (e: MouseEvent) => {
69
+ if (e.target === searchEl) close();
70
+ });
71
+ };
72
+
73
+ const close = () => {
74
+ if (searchEl) {
75
+ searchEl.remove();
76
+ searchEl = null;
77
+ }
78
+ };
79
+
80
+ const toggle = () => {
81
+ if (searchEl) close();
82
+ else open();
83
+ };
84
+
85
+ document.addEventListener('keydown', (e) => {
86
+ if ((e.metaKey || e.ctrlKey) && e.key === shortcutKey) {
87
+ e.preventDefault();
88
+ toggle();
89
+ }
90
+ });
91
+
92
+ document.addEventListener('click', (e: MouseEvent) => {
93
+ const target = e.target as Element | null;
94
+ const btn = target?.closest('[data-dashboard-search-button]');
95
+ if (btn) toggle();
96
+ });
97
+
98
+ (window as any).dashboardSearch = { open, close, toggle };
99
+ })();
100
+ </script>
@@ -1,13 +1,26 @@
1
- import { defineTheme } from "../../utils/defineTheme"
1
+ import { defineTheme } from "../../resolver"
2
2
 
3
- export const createDashboardSearchTheme = () =>
4
- defineTheme({
5
- slots: ["root"],
6
- base: {
7
- root: ""
3
+ export const dashboardSearchTheme = defineTheme("dashboard-search", {
4
+ slots: ["modal", "input"],
5
+ base: {
6
+ modal: "",
7
+ input: ""
8
+ },
9
+ variants: {
10
+ fullscreen: {
11
+ false: {
12
+ modal: "sm:max-w-3xl h-full sm:h-[28rem]"
13
+ }
8
14
  },
9
- variants: {},
10
- defaultVariants: {}
11
- })
12
-
13
- export default createDashboardSearchTheme()
15
+ size: {
16
+ xs: {},
17
+ sm: {},
18
+ md: {},
19
+ lg: {},
20
+ xl: {}
21
+ }
22
+ },
23
+ defaultVariants: {
24
+ size: "md"
25
+ }
26
+ })
@@ -1,11 +1,7 @@
1
1
  export interface DashboardSearchProps {
2
- /**
3
- * Slot-specific CSS class overrides.
4
- */
2
+ open?: boolean
3
+ shortcut?: string
5
4
  ui?: any
6
- /**
7
- * Additional CSS classes to apply to the root element.
8
- */
9
5
  class?: any
10
6
  [key: string]: unknown
11
7
  }
@@ -1,21 +1,45 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi } from "../../utils/useUi"
4
- import { resolveClasses } from "../../utils/resolveClasses"
5
- import type { DashboardSearchButtonProps } from "./dashboard-search-button"
6
- import dashboardSearchButtonTheme from "./dashboard-search-button.theme"
7
-
8
-
9
- const dashboardSearchButton = scv(dashboardSearchButtonTheme)
10
-
11
- const {
12
- ui: uiProp,
13
- class: className,
14
- ...rest
15
- } = Astro.props as DashboardSearchButtonProps
16
-
17
- const classes = resolveClasses(dashboardSearchButton, {}, useUi("dashboardSearchButton", uiProp), className);
18
- ---
19
- <div class={classes.root} data-slot="root" {...rest}>
20
- <slot />
21
- </div>
1
+ ---
2
+ import type { DashboardSearchButtonProps } from "./dashboard-search-button"
3
+ import { dashboardSearchButtonTheme } from "./dashboard-search-button.theme"
4
+ import RLAIcon from "../icon/RLAIcon.astro"
5
+
6
+
7
+ const {
8
+ icon,
9
+ label = "Search",
10
+ kbds = [{ value: "meta" }, { value: "k" }],
11
+ ...rest
12
+ } = Astro.props as DashboardSearchButtonProps
13
+
14
+ const classes = dashboardSearchButtonTheme(Astro.props);
15
+ ---
16
+
17
+ <button
18
+ type="button"
19
+ data-dashboard-search-button
20
+ class={classes.base}
21
+ data-slot="root"
22
+ {...rest}
23
+ >
24
+ {icon !== false && (
25
+ <RLAIcon name={typeof icon === 'string' ? icon : 'search'} class="size-5 shrink-0 text-muted" />
26
+ )}
27
+
28
+ <span data-slot="label" class={classes.label}>
29
+ {label}
30
+ </span>
31
+
32
+ <span data-slot="trailing" class={classes.trailing}>
33
+ <slot name="trailing">
34
+ {kbds && kbds.length > 0 && (
35
+ <span class="flex items-center gap-0.5">
36
+ {kbds.map((kbd) => {
37
+ const value = typeof kbd === 'string' ? kbd : kbd.value;
38
+ const label = value === 'meta' ? '⌘' : value === 'k' ? 'K' : value;
39
+ return <kbd class="inline-flex items-center justify-center rounded border border-default bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted min-w-[20px] h-5">{label}</kbd>;
40
+ })}
41
+ </span>
42
+ )}
43
+ </slot>
44
+ </span>
45
+ </button>
@@ -1,13 +1,21 @@
1
- import { defineTheme } from "../../utils/defineTheme"
1
+ import { defineTheme } from "../../resolver"
2
2
 
3
- export const createDashboardSearchButtonTheme = () =>
4
- defineTheme({
5
- slots: ["root"],
6
- base: {
7
- root: ""
8
- },
9
- variants: {},
10
- defaultVariants: {}
11
- })
12
-
13
- export default createDashboardSearchButtonTheme()
3
+ export const dashboardSearchButtonTheme = defineTheme("dashboard-search-button", {
4
+ slots: ["base", "label", "trailing"],
5
+ base: {
6
+ base: "group flex items-center gap-2 w-full rounded-md border border-default px-3 py-2 text-sm text-muted hover:text-default hover:bg-muted transition-colors cursor-pointer",
7
+ label: "flex-1 text-start truncate",
8
+ trailing: "hidden lg:flex items-center gap-0.5 ms-auto"
9
+ },
10
+ variants: {
11
+ collapsed: {
12
+ true: {
13
+ label: "hidden",
14
+ trailing: "lg:hidden"
15
+ }
16
+ }
17
+ },
18
+ defaultVariants: {
19
+ collapsed: false
20
+ }
21
+ })
@@ -1,11 +1,9 @@
1
1
  export interface DashboardSearchButtonProps {
2
- /**
3
- * Slot-specific CSS class overrides.
4
- */
2
+ icon?: string | false
3
+ label?: string
4
+ collapsed?: boolean
5
+ kbds?: Array<string | { value: string; variant?: string }>
5
6
  ui?: any
6
- /**
7
- * Additional CSS classes to apply to the root element.
8
- */
9
7
  class?: any
10
8
  [key: string]: unknown
11
9
  }
@@ -1,21 +1,122 @@
1
- ---
2
- import { scv } from "css-variants"
3
- import { useUi } from "../../utils/useUi"
4
- import { resolveClasses } from "../../utils/resolveClasses"
5
- import type { DashboardSidebarProps } from "./dashboard-sidebar"
6
- import dashboardSidebarTheme from "./dashboard-sidebar.theme"
7
-
8
-
9
- const dashboardSidebar = scv(dashboardSidebarTheme)
10
-
11
- const {
12
- ui: uiProp,
13
- class: className,
14
- ...rest
15
- } = Astro.props as DashboardSidebarProps
16
-
17
- const classes = resolveClasses(dashboardSidebar, {}, useUi("dashboardSidebar", uiProp), className);
18
- ---
19
- <div class={classes.root} data-slot="root" {...rest}>
20
- <slot />
21
- </div>
1
+ ---
2
+ import type { DashboardSidebarProps } from "./dashboard-sidebar"
3
+ import { dashboardSidebarTheme } from "./dashboard-sidebar.theme"
4
+
5
+
6
+ const {
7
+ side = "left",
8
+ collapsible = false,
9
+ collapsed = false,
10
+ class: className,
11
+ ...rest
12
+ } = Astro.props as DashboardSidebarProps
13
+
14
+ const classes = dashboardSidebarTheme({
15
+ ...Astro.props,
16
+ collapsed: collapsible && collapsed
17
+ });
18
+
19
+ const collapsedWidth = "4rem";
20
+ const defaultWidth = "16rem";
21
+ ---
22
+
23
+ <div
24
+ data-dashboard-sidebar
25
+ data-side={side}
26
+ data-collapsible={collapsible ? "true" : "false"}
27
+ data-collapsed={collapsible && collapsed ? "true" : "false"}
28
+ data-slot="root"
29
+ class={classes.root}
30
+ {...rest}
31
+ style={`width: ${collapsible && collapsed ? collapsedWidth : defaultWidth}; min-width: ${collapsible && collapsed ? collapsedWidth : defaultWidth}; flex-shrink: 0; --width: ${defaultWidth}; --collapsed-width: ${collapsedWidth}`}
32
+ >
33
+ <div data-slot="header" class={classes.header} style="height: 4rem; min-height: 4rem; padding: 1rem 1.5rem; display: flex; align-items: center; gap: 0.75rem; box-sizing: border-box;">
34
+ <slot name="header" />
35
+ </div>
36
+
37
+ <div data-slot="body" class={classes.body}>
38
+ <slot />
39
+ </div>
40
+
41
+ <div data-slot="footer" class={classes.footer}>
42
+ <slot name="footer" />
43
+ </div>
44
+ </div>
45
+
46
+ <div data-dashboard-sidebar-overlay data-slot="overlay" class={classes.overlay + " fixed inset-0 z-40 bg-default/80 backdrop-blur-sm transition-opacity duration-300 hidden"} />
47
+
48
+ <div
49
+ data-dashboard-sidebar-mobile
50
+ data-slot="content"
51
+ class={classes.content + " fixed inset-y-0 left-0 z-50 w-64 bg-default shadow-xl border-e border-default transform -translate-x-full transition-transform duration-300"}
52
+ >
53
+ <div data-slot="header" class={classes.header + " " + "sm:px-6"} data-menu>
54
+ <slot name="header" />
55
+ </div>
56
+ <div data-slot="body" class={classes.body + " " + "sm:px-6"} data-menu>
57
+ <slot />
58
+ </div>
59
+ <div data-slot="footer" class={classes.footer + " " + "sm:px-6"} data-menu>
60
+ <slot name="footer" />
61
+ </div>
62
+ </div>
63
+
64
+ <script>
65
+ (function() {
66
+ const sidebar = document.querySelector<HTMLElement>('[data-dashboard-sidebar]');
67
+ if (!sidebar) return;
68
+
69
+ const collapsible = sidebar.dataset.collapsible === 'true';
70
+ const mobilePanel = document.querySelector<HTMLElement>('[data-dashboard-sidebar-mobile]');
71
+ const overlay = document.querySelector<HTMLElement>('[data-dashboard-sidebar-overlay]');
72
+
73
+ const toggleMobile = () => {
74
+ if (!mobilePanel || !overlay) return;
75
+ const isOpen = mobilePanel.classList.toggle('translate-x-0');
76
+ mobilePanel.classList.toggle('-translate-x-full', !isOpen);
77
+ overlay.classList.toggle('hidden', !isOpen);
78
+ };
79
+
80
+ const collapseSidebar = (val?: boolean) => {
81
+ if (!collapsible) return;
82
+ const isCollapsed = val !== undefined ? val : sidebar.dataset.collapsed !== 'true';
83
+ const w = isCollapsed ? '4rem' : '16rem';
84
+ sidebar.style.width = w;
85
+ sidebar.style.minWidth = w;
86
+ sidebar.style.setProperty('--width', w);
87
+
88
+ document.querySelectorAll('[data-dashboard-toggle="collapse"]').forEach(btn => {
89
+ btn.querySelectorAll('[data-dashboard-collapse-icon]').forEach(el => {
90
+ el.classList.toggle('hidden', el.matches(isCollapsed ? '[data-expanded]' : '[data-collapsed]'));
91
+ });
92
+ });
93
+ };
94
+
95
+ document.addEventListener('click', (e: MouseEvent) => {
96
+ const target = e.target as Element | null;
97
+ const toggle = target?.closest<HTMLElement>('[data-dashboard-toggle]');
98
+ if (toggle) {
99
+ const side = toggle.dataset.dashboardToggle;
100
+ if (side === 'mobile') toggleMobile();
101
+ if (side === 'collapse') collapseSidebar();
102
+ }
103
+
104
+ const navItem = target?.closest<HTMLElement>('[data-dashboard-nav]');
105
+ if (navItem) {
106
+ const container = navItem.closest('[data-dashboard-nav-container]');
107
+ if (container) {
108
+ container.querySelectorAll('[data-dashboard-nav]').forEach((item: Element) => {
109
+ item.classList.remove('bg-muted', 'text-highlighted');
110
+ item.classList.add('text-default', 'hover:text-highlighted', 'hover:bg-muted');
111
+ });
112
+ navItem.classList.remove('text-default', 'hover:text-highlighted', 'hover:bg-muted');
113
+ navItem.classList.add('bg-muted', 'text-highlighted');
114
+ }
115
+ }
116
+ });
117
+
118
+ overlay?.addEventListener('click', toggleMobile);
119
+
120
+ (window as any).dashboardSidebar = { toggleMobile, collapseSidebar };
121
+ })();
122
+ </script>