@rimelight/ui 0.0.43 → 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 (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -12
  3. package/package.json +11 -14
  4. package/src/components/avatar/RLAAvatar.astro +4 -12
  5. package/src/components/badge/RLABadge.astro +2 -1
  6. package/src/components/badge/badge.theme.ts +0 -4
  7. package/src/components/banner/RLABanner.astro +1 -1
  8. package/src/components/banner/banner.theme.ts +1 -1
  9. package/src/components/breadcrumb/RLABreadcrumb.astro +2 -2
  10. package/src/components/button/RLAButton.astro +4 -1
  11. package/src/components/button/button.theme.ts +1 -5
  12. package/src/components/callout/RLACallout.astro +7 -5
  13. package/src/components/callout/callout.theme.ts +1 -5
  14. package/src/components/card/card.theme.ts +3 -3
  15. package/src/components/carousel/RLACarousel.astro +2 -2
  16. package/src/components/carousel/carousel.theme.ts +2 -2
  17. package/src/components/chart/RLAChart.astro +1 -1
  18. package/src/components/checkbox/RLACheckbox.astro +2 -1
  19. package/src/components/checkbox/checkbox.theme.ts +0 -4
  20. package/src/components/chip/RLAChip.astro +2 -1
  21. package/src/components/chip/chip.theme.ts +0 -4
  22. package/src/components/collapsible/RLACollapsible.astro +1 -1
  23. package/src/components/color-area/RLAColorArea.astro +1 -0
  24. package/src/components/color-area/color-area.theme.ts +1 -5
  25. package/src/components/color-field/RLAColorField.astro +1 -0
  26. package/src/components/color-field/color-field.theme.ts +1 -5
  27. package/src/components/color-slider/RLAColorSlider.astro +1 -0
  28. package/src/components/color-slider/color-slider.theme.ts +1 -5
  29. package/src/components/dashboard-group/RLADashboardGroup.astro +5 -7
  30. package/src/components/dashboard-group/dashboard-group.theme.ts +1 -1
  31. package/src/components/dashboard-group/dashboard-group.ts +1 -1
  32. package/src/components/dashboard-navbar/RLADashboardNavbar.astro +4 -4
  33. package/src/components/dashboard-navbar/dashboard-navbar.theme.ts +3 -3
  34. package/src/components/dashboard-navbar/dashboard-navbar.ts +1 -1
  35. package/src/components/dashboard-panel/RLADashboardPanel.astro +9 -8
  36. package/src/components/dashboard-panel/dashboard-panel.theme.ts +1 -1
  37. package/src/components/dashboard-sidebar/RLADashboardSidebar.astro +7 -4
  38. package/src/components/dashboard-sidebar/dashboard-sidebar.theme.ts +6 -5
  39. package/src/components/dashboard-sidebar-collapse/RLADashboardSidebarCollapse.astro +1 -0
  40. package/src/components/drawer/RLADrawer.astro +1 -1
  41. package/src/components/dropdown-menu/dropdown-menu.theme.ts +2 -2
  42. package/src/components/footer/RLAFooter.astro +2 -0
  43. package/src/components/footer/footer.theme.ts +0 -8
  44. package/src/components/gamepad/RLAGamepad.astro +1 -1
  45. package/src/components/head/UIHead.astro +1 -2
  46. package/src/components/header/header.theme.ts +1 -1
  47. package/src/components/icon/RLAIcon.astro +2 -5
  48. package/src/components/icon/RLSIcon.tsx +2 -2
  49. package/src/components/icon/RLVIcon.vue +18 -6
  50. package/src/components/icon/icon.theme.ts +1 -1
  51. package/src/components/image/image.theme.ts +1 -1
  52. package/src/components/input/RLAInput.astro +2 -1
  53. package/src/components/input/input.theme.ts +0 -4
  54. package/src/components/input-menu/RLAInputMenu.astro +2 -2
  55. package/src/components/input-menu/input-menu.theme.ts +1 -1
  56. package/src/components/input-rating/input-rating.theme.ts +2 -2
  57. package/src/components/kbd/RLAKbd.astro +2 -1
  58. package/src/components/kbd/kbd.theme.ts +0 -4
  59. package/src/components/keyboard/RLAKeyboard.astro +1 -1
  60. package/src/components/link/RLALink.astro +1 -0
  61. package/src/components/link/link.theme.ts +0 -4
  62. package/src/components/link-group/RLALinkGroup.astro +1 -1
  63. package/src/components/link-group/link-group.theme.ts +1 -10
  64. package/src/components/locale-selector/RLALocaleSelector.astro +4 -36
  65. package/src/components/locale-selector/locale-selector.theme.ts +3 -11
  66. package/src/components/logo/RLALogo.astro +1 -2
  67. package/src/components/modal/RLAModal.astro +1 -1
  68. package/src/components/modal/RLSModal.tsx +2 -2
  69. package/src/components/navigation-menu/RLANavigationMenu.astro +17 -21
  70. package/src/components/navigation-menu/navigation-menu.theme.ts +3 -7
  71. package/src/components/pagination/RLAPagination.astro +2 -2
  72. package/src/components/pagination/pagination.theme.ts +1 -1
  73. package/src/components/popover/RLAPopover.astro +39 -0
  74. package/src/components/progress/RLAProgress.astro +2 -0
  75. package/src/components/progress/progress.theme.ts +0 -4
  76. package/src/components/scroll-area/scroll-area.theme.ts +1 -1
  77. package/src/components/scroll-to-top/RLAScrollToTop.astro +6 -5
  78. package/src/components/scroll-to-top/RLVScrollToTop.vue +7 -7
  79. package/src/components/scroll-to-top/scroll-to-top.theme.ts +3 -7
  80. package/src/components/search/RLASearch.astro +3 -3
  81. package/src/components/select/RLASelect.astro +96 -528
  82. package/src/components/select/RLSSelect.tsx +68 -14
  83. package/src/components/select/RLVSelect.vue +57 -0
  84. package/src/components/select/select.theme.ts +11 -96
  85. package/src/components/shortcuts/RLAShortcuts.astro +9 -9
  86. package/src/components/sidebar/RLASidebar.astro +3 -3
  87. package/src/components/slideover/RLASlideover.astro +1 -1
  88. package/src/components/slider/RLASlider.astro +2 -1
  89. package/src/components/slider/slider.theme.ts +1 -5
  90. package/src/components/spinner/RLASpinner.astro +2 -1
  91. package/src/components/spinner/spinner.theme.ts +1 -5
  92. package/src/components/splitter/splitter.theme.ts +1 -1
  93. package/src/components/stepper/RLAStepper.astro +8 -8
  94. package/src/components/stepper/stepper.theme.ts +6 -7
  95. package/src/components/steps/RLASteps.astro +3 -3
  96. package/src/components/switch/RLASwitch.astro +2 -1
  97. package/src/components/switch/switch.theme.ts +0 -4
  98. package/src/components/table/table.theme.ts +1 -1
  99. package/src/components/table-of-contents/RLATableOfContents.astro +5 -5
  100. package/src/components/theme-selector/RLAThemeSelector.astro +16 -14
  101. package/src/components/theme-selector/theme-selector.theme.ts +2 -2
  102. package/src/components/toast/RLAToast.astro +6 -6
  103. package/src/components/toast/store.ts +1 -1
  104. package/src/components/tooltip/tooltip.theme.ts +1 -1
  105. package/src/icons.raw.ts +67 -0
  106. package/src/icons.ts +31 -64
  107. package/src/index.ts +19 -18
  108. package/src/preset.ts +110 -108
  109. package/src/resolver.ts +127 -15
  110. package/src/shortcuts.ts +103 -84
  111. package/src/stores.ts +22 -0
  112. package/src/types.ts +27 -9
  113. package/src/virtual.d.ts +4 -0
  114. package/src/components/editor/PageEditor.vue +0 -459
  115. package/src/components/editor/PageMention.vue +0 -87
  116. package/src/components/editor/PagePropertiesEditor.vue +0 -358
  117. package/src/components/editor/PagePropertiesRenderer.vue +0 -285
  118. package/src/components/editor/PageRenderer.vue +0 -155
  119. package/src/components/editor/PageSurround.vue +0 -130
  120. package/src/components/editor/PageVersionSelector.vue +0 -371
  121. package/src/components/editor/blocks/AddBlockModal.vue +0 -196
  122. package/src/components/editor/blocks/Block.vue +0 -142
  123. package/src/components/editor/blocks/BlockEditRenderer.vue +0 -26
  124. package/src/components/editor/blocks/BlockEditor.vue +0 -141
  125. package/src/components/editor/blocks/BlockViewRenderer.vue +0 -71
  126. package/src/components/editor/blocks/TextRenderer.vue +0 -31
  127. package/src/components/editor/blocks/editor/CalloutBlockEditor.vue +0 -53
  128. package/src/components/editor/blocks/editor/ImageBlockEditor.vue +0 -55
  129. package/src/components/editor/blocks/editor/ParagraphBlockEditor.vue +0 -31
  130. package/src/components/editor/blocks/editor/SectionBlockEditor.vue +0 -65
  131. package/src/components/editor/blocks/nodes/LinkNode.vue +0 -28
  132. package/src/components/editor/blocks/nodes/TextNode.vue +0 -22
  133. package/src/components/editor/blocks/renderer/CalloutBlockRenderer.vue +0 -65
  134. package/src/components/editor/blocks/renderer/ImageBlockRenderer.vue +0 -20
  135. package/src/components/editor/blocks/renderer/ParagraphBlockRenderer.vue +0 -21
  136. package/src/components/editor/blocks/renderer/SectionBlockRenderer.vue +0 -55
  137. package/src/components/editor/composables/injectionKeys.ts +0 -3
  138. package/src/components/editor/composables/useBlockEditor.ts +0 -261
  139. package/src/components/editor/composables/usePageEditor.ts +0 -97
  140. package/src/components/editor/modals/CreatePageModal.vue +0 -160
  141. package/src/components/editor/modals/DeletePageModal.vue +0 -116
  142. package/src/components/editor/modals/PageTreeModal.vue +0 -275
  143. package/src/components/editor/types/blocks.ts +0 -100
  144. package/src/components/editor/types/pages.ts +0 -89
  145. package/src/components/editor/types/schemas.ts +0 -36
  146. package/src/components/editor/utils/blocks.ts +0 -42
  147. package/src/components/editor/utils/editorHelpers.ts +0 -24
  148. package/src/components/editor/utils/page.ts +0 -219
  149. package/src/components/editor/utils/richTextHelpers.ts +0 -35
  150. package/src/components/editor/views/PageEditView.vue +0 -195
  151. package/src/components/editor/views/PageLiveView.vue +0 -90
  152. package/src/components/editor/views/PageReviewView.vue +0 -308
  153. package/src/components/icon/resolver.ts +0 -23
@@ -7,6 +7,7 @@ const {
7
7
  side = "left",
8
8
  collapsible = false,
9
9
  collapsed = false,
10
+ class: className,
10
11
  ...rest
11
12
  } = Astro.props as DashboardSidebarProps
12
13
 
@@ -27,9 +28,9 @@ const defaultWidth = "16rem";
27
28
  data-slot="root"
28
29
  class={classes.root}
29
30
  {...rest}
30
- style={`--width: ${defaultWidth}; --collapsed-width: ${collapsedWidth}`}
31
+ style={`width: ${collapsible && collapsed ? collapsedWidth : defaultWidth}; min-width: ${collapsible && collapsed ? collapsedWidth : defaultWidth}; flex-shrink: 0; --width: ${defaultWidth}; --collapsed-width: ${collapsedWidth}`}
31
32
  >
32
- <div data-slot="header" class={classes.header}>
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;">
33
34
  <slot name="header" />
34
35
  </div>
35
36
 
@@ -79,8 +80,10 @@ const defaultWidth = "16rem";
79
80
  const collapseSidebar = (val?: boolean) => {
80
81
  if (!collapsible) return;
81
82
  const isCollapsed = val !== undefined ? val : sidebar.dataset.collapsed !== 'true';
82
- sidebar.dataset.collapsed = isCollapsed ? 'true' : 'false';
83
- sidebar.style.setProperty('--width', isCollapsed ? '4rem' : '16rem');
83
+ const w = isCollapsed ? '4rem' : '16rem';
84
+ sidebar.style.width = w;
85
+ sidebar.style.minWidth = w;
86
+ sidebar.style.setProperty('--width', w);
84
87
 
85
88
  document.querySelectorAll('[data-dashboard-toggle="collapse"]').forEach(btn => {
86
89
  btn.querySelectorAll('[data-dashboard-collapse-icon]').forEach(el => {
@@ -3,11 +3,12 @@ import { defineTheme } from "../../resolver"
3
3
  export const dashboardSidebarTheme = defineTheme("dashboard-sidebar", {
4
4
  slots: ["root", "header", "body", "footer", "toggle", "handle", "content", "overlay"],
5
5
  base: {
6
- root: "group relative hidden lg:flex flex-col h-full min-h-0 min-w-16 w-(--width) shrink-0 transition-[width] duration-300",
6
+ root: "group relative flex flex-col h-full min-h-0 min-w-16 w-64 shrink-0 transition-[width] duration-300",
7
7
  header:
8
- "h-(--rl-header-height) shrink-0 flex items-center gap-1.5 px-3 group-data-[collapsed=true]:justify-center group-data-[collapsed=true]:gap-0 group-data-[collapsed=true]:px-0",
9
- body: "flex flex-col gap-1 flex-1 overflow-y-auto px-3 py-2",
10
- footer: "shrink-0 flex items-center gap-1.5 px-3 py-2 group-data-[collapsed=true]:px-0",
8
+ "h-16 min-h-16 shrink-0 flex items-center gap-3 px-6 py-4 border-b border-default group-data-[collapsed=true]:justify-center group-data-[collapsed=true]:gap-0 group-data-[collapsed=true]:px-0",
9
+ body: "flex flex-col gap-1 flex-1 overflow-y-auto px-3 py-3",
10
+ footer:
11
+ "shrink-0 flex items-center gap-1.5 px-3 py-3 group-data-[collapsed=true]:px-0 border-t border-default/40",
11
12
  toggle: "",
12
13
  handle: "",
13
14
  content: "lg:hidden",
@@ -31,7 +32,7 @@ export const dashboardSidebarTheme = defineTheme("dashboard-sidebar", {
31
32
  },
32
33
  collapsed: {
33
34
  true: {
34
- root: "w-(--collapsed-width) overflow-hidden",
35
+ root: "w-16 w-[var(--collapsed-width,4rem)] overflow-hidden",
35
36
  body: "overflow-hidden"
36
37
  }
37
38
  }
@@ -6,6 +6,7 @@ import RLAIcon from "../icon/RLAIcon.astro"
6
6
 
7
7
  const {
8
8
  icon = "i-lucide-panel-left",
9
+ class: className,
9
10
  ...rest
10
11
  } = Astro.props as DashboardSidebarCollapseProps
11
12
 
@@ -48,7 +48,7 @@ const dialogId = `rla-drawer-${Math.random().toString(36).substring(2, 9)}`
48
48
  data-dialog-close={dialogId}
49
49
  aria-label="Close drawer"
50
50
  >
51
- <RLAIcon name="close" class="size-4" aria-hidden="true" />
51
+ <RLAIcon name="i-rl-close" class="size-4" aria-hidden="true" />
52
52
  </button>
53
53
 
54
54
  <div class={classes.header} data-slot="header">
@@ -26,7 +26,7 @@ export const dropdownMenuTheme = defineTheme("dropdown-menu", {
26
26
  "absolute z-50 mt-1 min-w-32 rounded-md border border-default bg-elevated p-1 text-highlighted shadow-md ring-1 ring-black/5 focus:outline-none flex flex-col gap-0.5",
27
27
  viewport: "flex flex-col gap-0.5",
28
28
  group: "p-0.5 isolate flex flex-col gap-0.5",
29
- item: "group relative flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground cursor-pointer disabled:pointer-events-none disabled:opacity-50 select-none transition-colors",
29
+ item: "group relative flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-accented hover:text-highlighted cursor-pointer disabled:pointer-events-none disabled:opacity-50 select-none transition-colors",
30
30
  itemLeadingIcon: "shrink-0 size-4 text-muted group-hover:text-highlighted",
31
31
  itemLeadingAvatar: "shrink-0 size-4 rounded-full object-cover",
32
32
  itemLabel: "truncate flex-1 text-left",
@@ -34,7 +34,7 @@ export const dropdownMenuTheme = defineTheme("dropdown-menu", {
34
34
  itemTrailingKbds:
35
35
  "hidden lg:inline-flex items-center gap-0.5 text-[10px] font-mono opacity-70 bg-muted px-1 rounded border border-default",
36
36
  shortcut: "ml-auto text-xs tracking-widest text-muted",
37
- separator: "-mx-1 my-1 h-px bg-border",
37
+ separator: "-mx-1 my-1 h-px bg-neutral-200",
38
38
  label: "px-2 py-1.5 text-xs font-semibold tracking-wider text-muted uppercase",
39
39
  arrow: "absolute -top-1.5 left-4 size-3 rotate-45 border-l border-t border-default bg-elevated"
40
40
  },
@@ -6,6 +6,7 @@ import { footerTheme } from "./footer.theme"
6
6
 
7
7
  const {
8
8
  contain = false,
9
+ theme,
9
10
  ...rest
10
11
  } = Astro.props as FooterProps
11
12
 
@@ -16,6 +17,7 @@ const classes = footerTheme(Astro.props)
16
17
  class:list={[classes.root]}
17
18
  data-slot="root"
18
19
  data-contain={contain ? "true" : "false"}
20
+ data-theme={theme}
19
21
  {...rest}
20
22
  >
21
23
  <div class:list={[classes.container]} data-slot="container">
@@ -19,14 +19,6 @@ export const footerTheme = defineTheme("footer", {
19
19
  false: {
20
20
  container: "w-full"
21
21
  }
22
- },
23
- theme: {
24
- dark: {
25
- root: "rl-dark"
26
- },
27
- light: {
28
- root: "rl-light"
29
- }
30
22
  }
31
23
  },
32
24
  defaultVariants: {
@@ -15,7 +15,7 @@ interface Props {
15
15
  const {
16
16
  highlightedButtons = [],
17
17
  groups = [],
18
- highlightColor = 'var(--color-primary-500, #00c16a)',
18
+ highlightColor = 'var(--rl-primary-500)',
19
19
  backgroundColor = 'transparent'
20
20
  } = Astro.props
21
21
 
@@ -22,8 +22,7 @@ const {
22
22
 
23
23
  function applyTheme(doc: any) {
24
24
  var pref = getThemePreference();
25
- doc.documentElement.classList.toggle('dark', pref === 'dark');
26
- doc.documentElement.classList.toggle('light', pref === 'light');
25
+ doc.documentElement.setAttribute('data-theme', pref);
27
26
  }
28
27
 
29
28
  applyTheme(document);
@@ -6,7 +6,7 @@ export const headerTheme = defineTheme("header", {
6
6
  root: "w-full",
7
7
  content: "w-full",
8
8
  container:
9
- "flex flex-row items-center justify-between gap-4xs h-16 md:h-18 px-xs sm:px-md md:px-xl lg:px-xl",
9
+ "flex flex-row items-center justify-between gap-xs h-16 md:h-18 px-xs sm:px-md md:px-xl lg:px-xl",
10
10
  left: "flex-1 min-w-0 flex items-center justify-start",
11
11
  center: "flex-none flex items-center justify-center mx-4",
12
12
  right: "flex-1 min-w-0 flex items-center justify-end"
@@ -1,10 +1,8 @@
1
1
  ---
2
- import { resolveIcon } from "./resolver"
2
+ import { resolveIcon } from "../../icons"
3
3
  import type { IconProps } from "./icon"
4
4
  import { iconTheme } from "./icon.theme"
5
5
 
6
-
7
-
8
6
  const {
9
7
  name,
10
8
  ...rest
@@ -21,8 +19,7 @@ const resolved = resolveIcon(name)
21
19
  {...rest}
22
20
  >
23
21
  {resolved.isClass ? (
24
- <span class={resolved.content} />
25
- ) : (
22
+ <span class:list={[resolved.content, "block size-full"]} /> ) : (
26
23
  <Fragment set:html={resolved.content} />
27
24
  )}
28
25
  </span>
@@ -1,5 +1,5 @@
1
1
  import { createMemo, splitProps, type Component } from "solid-js"
2
- import { resolveIcon } from "./resolver"
2
+ import { resolveIcon } from "../../icons"
3
3
  import type { IconProps } from "./icon"
4
4
  import { iconTheme } from "./icon.theme"
5
5
 
@@ -16,7 +16,7 @@ const RLSIcon: Component<IconProps> = (allProps) => {
16
16
  return (
17
17
  <span class={classes().root} data-slot="icon" aria-hidden="true" {...rest}>
18
18
  {resolved().isClass ? (
19
- <span class={resolved().content} />
19
+ <span class={`${resolved().content} size-full`} />
20
20
  ) : (
21
21
  <span innerHTML={resolved().content} />
22
22
  )}
@@ -1,10 +1,10 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, useAttrs } from "vue"
3
- import { resolveIcon } from "./resolver"
3
+ import { resolveIcon } from "../../icons"
4
4
  import type { IconProps } from "./icon"
5
5
  import { iconTheme } from "./icon.theme"
6
6
 
7
- defineOptions({ name: "RLVIcon" })
7
+ defineOptions({ name: "RLVIcon", inheritAttrs: false })
8
8
 
9
9
  const attrs = useAttrs()
10
10
 
@@ -23,8 +23,20 @@ const resolved = computed(() => resolveIcon(props.name))
23
23
  </script>
24
24
 
25
25
  <template>
26
- <span v-bind="attrs" :class="resolvedClasses.root" data-slot="icon" aria-hidden="true">
27
- <span v-if="resolved.isClass" :class="resolved.content" />
28
- <span v-else v-html="resolved.content" />
29
- </span>
26
+ <span
27
+ v-if="resolved.isClass"
28
+ v-bind="attrs"
29
+ :class="resolvedClasses.root"
30
+ data-slot="icon"
31
+ aria-hidden="true"
32
+ ><span :class="[resolved.content, 'size-full']"
33
+ /></span>
34
+ <span
35
+ v-else
36
+ v-bind="attrs"
37
+ :class="resolvedClasses.root"
38
+ data-slot="icon"
39
+ aria-hidden="true"
40
+ v-html="resolved.content"
41
+ />
30
42
  </template>
@@ -3,7 +3,7 @@ import { defineTheme } from "../../resolver"
3
3
  export const iconTheme = defineTheme("icon", {
4
4
  slots: ["root"],
5
5
  base: {
6
- root: "shrink-0 inline-flex items-center justify-center align-middle leading-none"
6
+ root: "shrink-0 inline-block align-middle leading-none"
7
7
  },
8
8
  variants: {
9
9
  size: {
@@ -23,7 +23,7 @@ export const imageTheme = defineTheme("image", {
23
23
  download:
24
24
  "inline-flex items-center justify-center rounded-md font-medium transition-colors outline-none h-9 px-4 py-2 text-sm gap-2 text-primary-500 hover:bg-primary-500/10 active:bg-primary-500/10",
25
25
  closeButton:
26
- "inline-flex items-center justify-center size-8 rounded-full bg-default/80 hover:bg-accent text-muted hover:text-highlighted transition-colors"
26
+ "inline-flex items-center justify-center size-8 rounded-full bg-default/80 hover:bg-accented text-muted hover:text-highlighted transition-colors"
27
27
  },
28
28
  variants: {},
29
29
  defaultVariants: {}
@@ -15,6 +15,7 @@ const {
15
15
  error = false,
16
16
  leadingIcon,
17
17
  trailingIcon,
18
+ theme,
18
19
  ...rest
19
20
  } = Astro.props as InputProps
20
21
 
@@ -25,7 +26,7 @@ const classes = inputTheme({
25
26
  error: !!error
26
27
  });
27
28
  ---
28
- <div class={classes.root} data-slot="root">
29
+ <div class={classes.root} data-slot="root" data-theme={theme}>
29
30
  {(leadingIcon || Astro.slots.has("leading")) && (
30
31
  <span class={classes.leading} data-slot="leading">
31
32
  {leadingIcon ? <span class={leadingIcon} /> : <slot name="leading" />}
@@ -29,10 +29,6 @@ export const inputTheme = defineTheme("input", {
29
29
  },
30
30
  error: {
31
31
  true: { root: "border-error-500 focus-within:ring-error-500/50" }
32
- },
33
- theme: {
34
- light: { root: "rl-light" },
35
- dark: { root: "rl-dark" }
36
32
  }
37
33
  },
38
34
  defaultVariants: {
@@ -40,7 +40,7 @@ const initialLabel = selectedItem ? selectedItem.label : ""
40
40
  data-inputMenu-trigger
41
41
  >
42
42
  <span data-inputMenu-value>{initialLabel || placeholder}</span>
43
- <RLAIcon name="chevronsUpDown" class="opacity-50" />
43
+ <RLAIcon name="i-rl-chevronsUpDown" class="opacity-50" />
44
44
  </button>
45
45
 
46
46
  <div class={classes.content + " hidden"} data-inputMenu-dropdown data-slot="content">
@@ -60,7 +60,7 @@ const initialLabel = selectedItem ? selectedItem.label : ""
60
60
  data-inputMenu-item
61
61
  >
62
62
  <span class={classes.itemText}>{item.label}</span>
63
- <RLAIcon name="check" class={classes.itemIcon + " hidden"} data-check-icon />
63
+ <RLAIcon name="i-rl-check" class={classes.itemIcon + " hidden"} data-check-icon />
64
64
  </div>
65
65
  ))}
66
66
  </div>
@@ -11,7 +11,7 @@ export const inputMenuTheme = defineTheme("input-menu", {
11
11
  "flex h-9 w-full rounded-md border border-default bg-transparent px-3 py-1 text-sm shadow-sm transition-all placeholder:text-muted focus:outline-none focus:ring-2 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
12
12
  content:
13
13
  "absolute z-50 min-w-[8rem] overflow-hidden rounded-md border bg-elevated p-1 text-highlighted shadow-md transition-all w-full mt-1 max-h-60 overflow-y-auto",
14
- item: "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 px-2 text-sm outline-none hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
14
+ item: "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 px-2 text-sm outline-none hover:bg-accented hover:text-highlighted data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
15
15
  itemText: "truncate",
16
16
  itemIcon: "ml-auto size-4"
17
17
  },
@@ -5,7 +5,7 @@ export const inputRatingTheme = defineTheme("input-rating", {
5
5
  base: {
6
6
  root: "inline-flex select-none",
7
7
  item: [
8
- "relative inline-block cursor-pointer select-none rounded-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--rl-ring)]",
8
+ "relative inline-block cursor-pointer select-none rounded-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--rl-ring)]",
9
9
  "transition-all duration-150"
10
10
  ],
11
11
  indicator:
@@ -58,7 +58,7 @@ export const inputRatingTheme = defineTheme("input-rating", {
58
58
  color: "neutral",
59
59
  classNames: {
60
60
  indicator: "text-highlighted",
61
- item: "focus-visible:outline-inverted"
61
+ item: "focus-visible:ring-inverted"
62
62
  }
63
63
  },
64
64
  {
@@ -5,6 +5,7 @@ import { kbdTheme } from "./kbd.theme"
5
5
 
6
6
 
7
7
  const {
8
+ theme,
8
9
  ...rest
9
10
  } = Astro.props as KbdProps
10
11
 
@@ -12,6 +13,6 @@ const {
12
13
 
13
14
  const classes = kbdTheme(Astro.props)
14
15
  ---
15
- <kbd class={classes.root} data-slot="root" {...rest}>
16
+ <kbd class={classes.root} data-slot="root" data-theme={theme} {...rest}>
16
17
  <slot />
17
18
  </kbd>
@@ -19,10 +19,6 @@ export const kbdTheme = defineTheme("kbd", {
19
19
  sm: { root: "h-4 min-w-[16px] text-[10px]" },
20
20
  md: { root: "h-5 min-w-[20px] text-[11px]" },
21
21
  lg: { root: "h-6 min-w-[24px] text-[12px]" }
22
- },
23
- theme: {
24
- light: { root: "rl-light" },
25
- dark: { root: "rl-dark" }
26
22
  }
27
23
  },
28
24
  compoundVariants: [
@@ -25,7 +25,7 @@ const {
25
25
  keySize = 40,
26
26
  variant = 'full',
27
27
  os = 'windows',
28
- highlightColor = 'var(--color-primary-500, #00c16a)',
28
+ highlightColor = 'var(--rl-primary-500)',
29
29
  backgroundColor = 'transparent'
30
30
  } = Astro.props
31
31
 
@@ -43,6 +43,7 @@ const classes = raw
43
43
  aria-current={attrs.ariaCurrent}
44
44
  aria-disabled={attrs.ariaDisabled}
45
45
  data-astro-prefetch={attrs.prefetchAttr}
46
+ data-theme={theme}
46
47
  {...rest}
47
48
  >
48
49
  <slot name="leading">
@@ -16,10 +16,6 @@ export const linkTheme = defineTheme("link", {
16
16
  disabled: {
17
17
  true: { root: "cursor-not-allowed opacity-75" },
18
18
  false: {}
19
- },
20
- theme: {
21
- light: { root: "rl-light" },
22
- dark: { root: "rl-dark" }
23
19
  }
24
20
  },
25
21
  compoundVariants: [
@@ -23,7 +23,7 @@ const classes = linkGroupTheme(Astro.props);
23
23
 
24
24
  const normalizedLinks = Array.isArray(links) ? links : [links];
25
25
  ---
26
- <div class={classes.root} data-slot="root" {...rest}>
26
+ <div class={classes.root} data-slot="root" data-theme={theme} {...rest}>
27
27
  {headingLabel && (
28
28
  <h4 class={classes.title} data-slot="title">
29
29
  {headingHref ? (
@@ -9,15 +9,6 @@ export const linkGroupTheme = defineTheme("link-group", {
9
9
  item: "",
10
10
  link: "text-sm text-muted hover:text-highlighted transition-colors"
11
11
  },
12
- variants: {
13
- theme: {
14
- dark: {
15
- root: "rl-dark"
16
- },
17
- light: {
18
- root: "rl-light"
19
- }
20
- }
21
- },
12
+ variants: {},
22
13
  defaultVariants: {}
23
14
  })
@@ -4,8 +4,6 @@ import { localeSelectorTheme } from "./locale-selector.theme"
4
4
  import { getRelativeLocaleUrlList, getRelativeLocaleUrl } from "astro:i18n"
5
5
  import RLASelect from "../select/RLASelect.astro"
6
6
 
7
-
8
-
9
7
  const {
10
8
  locales,
11
9
  currentLocale: currentLocaleProp,
@@ -61,38 +59,9 @@ const items = processedLocales.map((item) => {
61
59
  });
62
60
 
63
61
  const currentLocaleUrl = items.find(item => item.code === currentLocale)?.value || "";
64
-
65
- // Prefix utility classes in classes.select with `!` to cleanly override conflicting styles in RLASelect's base trigger
66
- // Also remove `pr-` classes which were meant for absolute positioned native select icons
67
- const overrideTriggerClass = classes.select
68
- ? classes.select
69
- .split(" ")
70
- .map(cls => {
71
- if (!cls) return "";
72
- if (cls.startsWith("pr-") || cls.startsWith("!pr-")) return ""; // Strip padding-right
73
- if (cls.includes(":")) {
74
- const parts = cls.split(":");
75
- const state = parts.slice(0, -1).join(":");
76
- const baseCls = parts[parts.length - 1];
77
- return `${state}:!${baseCls}`;
78
- }
79
- return `!${cls}`;
80
- })
81
- .filter(Boolean)
82
- .join(" ")
83
- : "";
84
-
85
- const gapClass = size === "sm" ? "gap-1.5" : size === "lg" ? "gap-3" : "gap-2";
86
-
87
- const selectUi = {
88
- root: "!w-fit !inline-flex",
89
- trigger: `flex items-center justify-between !w-fit ${gapClass} ${overrideTriggerClass}`,
90
- content: "!min-w-0 !w-full !bg-default !border-default !text-default",
91
- item: "!text-default hover:!bg-muted hover:!text-highlighted"
92
- }
93
62
  ---
94
63
 
95
- <rla-locale-selector {...rest}>
64
+ <rla-locale-selector data-theme={theme} {...rest}>
96
65
  <div class:list={[classes.root]} data-locale-selector>
97
66
  {Astro.slots.has("label") && (
98
67
  <label class:list={[classes.label]}>
@@ -106,7 +75,6 @@ const selectUi = {
106
75
  value={currentLocaleUrl}
107
76
  size={size}
108
77
  theme={theme}
109
- ui={selectUi}
110
78
  />
111
79
  </div>
112
80
  </div>
@@ -117,8 +85,8 @@ const selectUi = {
117
85
  connectedCallback() {
118
86
  this.style.display = 'contents';
119
87
  this.addEventListener('change', (event) => {
120
- const target = event.target as HTMLInputElement;
121
- if (target && target.hasAttribute('data-select-hidden-input')) {
88
+ const target = event.target as HTMLSelectElement;
89
+ if (target && target.tagName === 'SELECT') {
122
90
  const targetUrl = target.value;
123
91
  if (targetUrl) {
124
92
  window.location.href = targetUrl;
@@ -131,4 +99,4 @@ const selectUi = {
131
99
  if (!customElements.get('rla-locale-selector')) {
132
100
  customElements.define('rla-locale-selector', RLALocaleSelector);
133
101
  }
134
- </script>
102
+ </script>
@@ -13,23 +13,15 @@ export const localeSelectorTheme = defineTheme("locale-selector", {
13
13
  "pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-current group-hover:text-default"
14
14
  },
15
15
  variants: {
16
- theme: {
17
- dark: {
18
- root: "rl-dark"
19
- },
20
- light: {
21
- root: "rl-light"
22
- }
23
- },
24
16
  variant: {
25
17
  default: {
26
- select: "bg-default text-default hover:bg-accent/50 border border-default"
18
+ select: "bg-default text-default hover:bg-accented/50 border border-default"
27
19
  },
28
20
  outline: {
29
- select: "bg-transparent border border-default text-default hover:bg-accent/50"
21
+ select: "bg-transparent border border-default text-default hover:bg-accented/50"
30
22
  },
31
23
  ghost: {
32
- select: "bg-transparent border border-transparent text-default hover:bg-accent/50"
24
+ select: "bg-transparent border border-transparent text-default hover:bg-accented/50"
33
25
  }
34
26
  },
35
27
  size: {
@@ -1,8 +1,7 @@
1
1
  ---
2
2
  import type { LogoProps } from "./logo"
3
3
  import { logoTheme } from "./logo.theme"
4
- import { uiConfig } from "../../resolver"
5
-
4
+ import uiConfig from "virtual:rimelight/ui"
6
5
 
7
6
  const {
8
7
  variant = "logomark",
@@ -56,7 +56,7 @@ const modalId = `rla-modal-${Math.random().toString(36).substring(2, 9)}`
56
56
  data-dialog-close={modalId}
57
57
  aria-label="Close modal"
58
58
  >
59
- <RLAIcon name="close" class="size-4" aria-hidden="true" />
59
+ <RLAIcon name="i-rl-close" class="size-4" aria-hidden="true" />
60
60
  </button>
61
61
 
62
62
  <div class={classes.header} data-slot="header">
@@ -94,7 +94,7 @@ const RLSModal: Component<RLSModalProps> = (allProps) => {
94
94
  <Show when={props.open || !props.unmountOnHide}>
95
95
  <dialog
96
96
  ref={(el) => (dialogRef = el)}
97
- class={`w-full rounded-xl border border-default bg-default p-6 shadow-xl outline-none flex flex-col max-h-[90vh] overflow-y-auto text-foreground backdrop:bg-black/60 backdrop:backdrop-blur-sm ${
97
+ class={`w-full rounded-xl border border-default bg-default p-6 shadow-xl outline-none flex flex-col max-h-[90vh] overflow-y-auto text-highlighted backdrop:bg-black/60 backdrop:backdrop-blur-sm ${
98
98
  resolvedClasses().content || ""
99
99
  } ${props.class || ""}`}
100
100
  data-slot="content"
@@ -102,7 +102,7 @@ const RLSModal: Component<RLSModalProps> = (allProps) => {
102
102
  >
103
103
  <button
104
104
  type="button"
105
- class="absolute right-4 top-4 rounded-md p-1 text-muted-foreground hover:text-foreground hover:bg-neutral-100 dark:hover:bg-neutral-800 transition cursor-pointer border-none bg-transparent"
105
+ class="absolute right-4 top-4 rounded-md p-1 text-muted hover:text-highlighted hover:bg-neutral-100 dark:hover:bg-neutral-800 transition cursor-pointer border-none bg-transparent"
106
106
  data-slot="close-button"
107
107
  aria-label="Close modal"
108
108
  onClick={handleClose}