@rimelight/ui 0.0.33 → 0.0.34

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 (282) hide show
  1. package/README.md +157 -157
  2. package/package.json +105 -105
  3. package/src/components/astro/RLAAspectRatio.astro +2 -2
  4. package/src/components/astro/RLAButton.astro +141 -139
  5. package/src/components/astro/RLAChart.astro +19 -34
  6. package/src/components/astro/RLAHead.astro +427 -196
  7. package/src/components/astro/RLAHeader.astro +66 -59
  8. package/src/components/astro/RLAImage.astro +61 -19
  9. package/src/components/astro/RLALink.astro +22 -23
  10. package/src/components/astro/RLALinkGroup.astro +66 -4
  11. package/src/components/astro/RLALocaleSelector.astro +136 -113
  12. package/src/components/astro/RLAMain.astro +8 -3
  13. package/src/components/astro/RLAMarquee.astro +9 -2
  14. package/src/components/astro/RLANavigationMenu.astro +245 -56
  15. package/src/components/astro/RLAPagination.astro +2 -4
  16. package/src/components/astro/RLAProgress.astro +8 -2
  17. package/src/components/astro/RLASelect.astro +38 -24
  18. package/src/components/astro/RLASlideover.astro +66 -1
  19. package/src/components/astro/RLASlider.astro +14 -14
  20. package/src/components/astro/RLASplitter.astro +14 -2
  21. package/src/components/astro/RLAStickySurface.astro +9 -2
  22. package/src/components/vue/RLVCheckbox.vue +68 -68
  23. package/src/components/vue/RLVForm.vue +44 -44
  24. package/src/components/vue/RLVFormField.vue +58 -58
  25. package/src/components/vue/RLVInput.vue +93 -93
  26. package/src/components/vue/RLVPost.vue +63 -63
  27. package/src/components/vue/RLVPosts.vue +21 -21
  28. package/src/components/vue/RLVToast.vue +68 -68
  29. package/src/components/vue/RLVToaster.vue +29 -29
  30. package/src/composables/index.ts +3 -3
  31. package/src/composables/useHeaderStore.ts +13 -14
  32. package/src/composables/useScrollToTop.ts +62 -62
  33. package/src/composables/useToast.ts +43 -42
  34. package/src/config/index.ts +1 -0
  35. package/src/config/security.ts +220 -0
  36. package/src/integrations/ui.ts +199 -199
  37. package/src/middleware/security.ts +75 -15
  38. package/src/plugins/index.ts +2 -2
  39. package/src/plugins/starlightDocsApi/index.ts +272 -272
  40. package/src/presets/defaults.ts +297 -297
  41. package/src/presets/index.ts +683 -637
  42. package/src/styles/index.css +160 -160
  43. package/src/themes/3d-hover.theme.ts +13 -13
  44. package/src/themes/accordion.theme.ts +13 -13
  45. package/src/themes/alert.theme.ts +131 -125
  46. package/src/themes/app.theme.ts +13 -13
  47. package/src/themes/audio.theme.ts +13 -13
  48. package/src/themes/avatar.theme.ts +84 -84
  49. package/src/themes/badge.theme.ts +169 -163
  50. package/src/themes/banner.theme.ts +13 -13
  51. package/src/themes/browser-mockup.theme.ts +13 -13
  52. package/src/themes/button.theme.ts +224 -202
  53. package/src/themes/calendar.theme.ts +13 -13
  54. package/src/themes/card.theme.ts +42 -42
  55. package/src/themes/changelog.theme.ts +13 -13
  56. package/src/themes/chart.theme.ts +22 -22
  57. package/src/themes/chat-message.theme.ts +13 -13
  58. package/src/themes/chat-messages.theme.ts +13 -13
  59. package/src/themes/chat-palette.theme.ts +13 -13
  60. package/src/themes/chat-prompt-submit.theme.ts +13 -13
  61. package/src/themes/chat-prompt.theme.ts +13 -13
  62. package/src/themes/chat-reasoning.theme.ts +13 -13
  63. package/src/themes/chat-shimmer.theme.ts +13 -13
  64. package/src/themes/chat-tool.theme.ts +13 -13
  65. package/src/themes/chat.theme.ts +13 -13
  66. package/src/themes/checkbox.theme.ts +50 -50
  67. package/src/themes/chip.theme.ts +74 -74
  68. package/src/themes/color-picker.theme.ts +13 -13
  69. package/src/themes/command-palette.theme.ts +13 -13
  70. package/src/themes/compare.theme.ts +13 -13
  71. package/src/themes/confirm.theme.ts +48 -48
  72. package/src/themes/container.theme.ts +13 -13
  73. package/src/themes/context-menu.theme.ts +13 -13
  74. package/src/themes/dashboard-group.theme.ts +13 -13
  75. package/src/themes/dashboard-navbar.theme.ts +13 -13
  76. package/src/themes/dashboard-panel.theme.ts +13 -13
  77. package/src/themes/dashboard-resize-handle.theme.ts +13 -13
  78. package/src/themes/dashboard-search-button.theme.ts +13 -13
  79. package/src/themes/dashboard-search.theme.ts +13 -13
  80. package/src/themes/dashboard-sidebar-collapse.theme.ts +13 -13
  81. package/src/themes/dashboard-sidebar-toggle.theme.ts +13 -13
  82. package/src/themes/dashboard-sidebar.theme.ts +13 -13
  83. package/src/themes/dashboard-toolbar.theme.ts +13 -13
  84. package/src/themes/dock.theme.ts +13 -13
  85. package/src/themes/drawer.theme.ts +61 -61
  86. package/src/themes/dropdown-menu.theme.ts +29 -29
  87. package/src/themes/editor.theme.ts +13 -13
  88. package/src/themes/empty.theme.ts +13 -13
  89. package/src/themes/error.theme.ts +13 -13
  90. package/src/themes/field-group.theme.ts +24 -24
  91. package/src/themes/fieldset.theme.ts +13 -13
  92. package/src/themes/floating-action.theme.ts +13 -13
  93. package/src/themes/footer.theme.ts +30 -30
  94. package/src/themes/form.theme.ts +13 -13
  95. package/src/themes/gallery.theme.ts +13 -13
  96. package/src/themes/head.theme.ts +13 -13
  97. package/src/themes/header.theme.ts +45 -46
  98. package/src/themes/icon.theme.ts +23 -23
  99. package/src/themes/image.theme.ts +23 -19
  100. package/src/themes/input-date.theme.ts +13 -13
  101. package/src/themes/input-menu.theme.ts +35 -35
  102. package/src/themes/input-number.theme.ts +13 -13
  103. package/src/themes/input-tags.theme.ts +13 -13
  104. package/src/themes/input-time.theme.ts +13 -13
  105. package/src/themes/input.theme.ts +42 -42
  106. package/src/themes/kbd.theme.ts +95 -89
  107. package/src/themes/knob.theme.ts +13 -13
  108. package/src/themes/link-group.theme.ts +32 -32
  109. package/src/themes/link.theme.ts +13 -13
  110. package/src/themes/listbox.theme.ts +13 -13
  111. package/src/themes/locale-selector.theme.ts +49 -49
  112. package/src/themes/logo.theme.ts +13 -13
  113. package/src/themes/main.theme.ts +13 -13
  114. package/src/themes/megamenu.theme.ts +13 -13
  115. package/src/themes/meter.theme.ts +13 -13
  116. package/src/themes/navigation-menu.theme.ts +44 -27
  117. package/src/themes/page-aside.theme.ts +13 -13
  118. package/src/themes/page-body.theme.ts +13 -13
  119. package/src/themes/page-header.theme.ts +13 -13
  120. package/src/themes/page-section.theme.ts +187 -187
  121. package/src/themes/page.theme.ts +13 -13
  122. package/src/themes/password.theme.ts +13 -13
  123. package/src/themes/phone-mockup.theme.ts +13 -13
  124. package/src/themes/placeholder.theme.ts +15 -15
  125. package/src/themes/post.theme.ts +33 -33
  126. package/src/themes/pricing-plan.theme.ts +13 -13
  127. package/src/themes/pricing-table.theme.ts +13 -13
  128. package/src/themes/progress.theme.ts +38 -38
  129. package/src/themes/prose.theme.ts +13 -13
  130. package/src/themes/qr-code.theme.ts +13 -13
  131. package/src/themes/quote.theme.ts +13 -13
  132. package/src/themes/radio-group.theme.ts +13 -13
  133. package/src/themes/rating.theme.ts +13 -13
  134. package/src/themes/scroll-area.theme.ts +26 -26
  135. package/src/themes/scroll-to-top.theme.ts +52 -52
  136. package/src/themes/select.theme.ts +29 -29
  137. package/src/themes/separator.theme.ts +147 -147
  138. package/src/themes/sidebar.theme.ts +38 -38
  139. package/src/themes/skeleton.theme.ts +21 -21
  140. package/src/themes/slideover.theme.ts +4 -4
  141. package/src/themes/slider.theme.ts +36 -36
  142. package/src/themes/speed-dial.theme.ts +13 -13
  143. package/src/themes/spinner.theme.ts +34 -34
  144. package/src/themes/splitter.theme.ts +23 -23
  145. package/src/themes/spoiler.theme.ts +13 -13
  146. package/src/themes/stepper.theme.ts +13 -13
  147. package/src/themes/switch.theme.ts +67 -67
  148. package/src/themes/table-of-contents.theme.ts +48 -48
  149. package/src/themes/tabs.theme.ts +52 -52
  150. package/src/themes/textarea.theme.ts +27 -27
  151. package/src/themes/theme-selector.theme.ts +15 -15
  152. package/src/themes/timeline.theme.ts +13 -13
  153. package/src/themes/toast.theme.ts +31 -31
  154. package/src/themes/tooltip.theme.ts +28 -28
  155. package/src/themes/tour.theme.ts +13 -13
  156. package/src/themes/tree.theme.ts +13 -13
  157. package/src/themes/user.theme.ts +13 -13
  158. package/src/themes/video.theme.ts +17 -17
  159. package/src/themes/watermark.theme.ts +13 -13
  160. package/src/themes/window-mockup.theme.ts +13 -13
  161. package/src/types/components/3d-hover.ts +11 -11
  162. package/src/types/components/alert.ts +2 -2
  163. package/src/types/components/app.ts +11 -11
  164. package/src/types/components/audio.ts +11 -11
  165. package/src/types/components/avatar-group.ts +11 -11
  166. package/src/types/components/avatar.ts +60 -60
  167. package/src/types/components/badge.ts +2 -2
  168. package/src/types/components/banner.ts +11 -11
  169. package/src/types/components/browser-mockup.ts +11 -11
  170. package/src/types/components/button.ts +74 -81
  171. package/src/types/components/calendar.ts +11 -11
  172. package/src/types/components/changelog.ts +11 -11
  173. package/src/types/components/chart.ts +2 -1
  174. package/src/types/components/chat-message.ts +11 -11
  175. package/src/types/components/chat-messages.ts +11 -11
  176. package/src/types/components/chat-palette.ts +11 -11
  177. package/src/types/components/chat-prompt-submit.ts +11 -11
  178. package/src/types/components/chat-prompt.ts +11 -11
  179. package/src/types/components/chat-reasoning.ts +11 -11
  180. package/src/types/components/chat-shimmer.ts +11 -11
  181. package/src/types/components/chat-tool.ts +11 -11
  182. package/src/types/components/chat.ts +11 -11
  183. package/src/types/components/checkbox.ts +2 -2
  184. package/src/types/components/chip.ts +17 -17
  185. package/src/types/components/collapsible.ts +2 -1
  186. package/src/types/components/color-picker.ts +11 -11
  187. package/src/types/components/command-palette.ts +11 -11
  188. package/src/types/components/compare.ts +11 -11
  189. package/src/types/components/container.ts +17 -17
  190. package/src/types/components/context-menu.ts +11 -11
  191. package/src/types/components/dashboard-group.ts +11 -11
  192. package/src/types/components/dashboard-navbar.ts +11 -11
  193. package/src/types/components/dashboard-panel.ts +11 -11
  194. package/src/types/components/dashboard-resize-handle.ts +11 -11
  195. package/src/types/components/dashboard-search-button.ts +11 -11
  196. package/src/types/components/dashboard-search.ts +11 -11
  197. package/src/types/components/dashboard-sidebar-collapse.ts +11 -11
  198. package/src/types/components/dashboard-sidebar-toggle.ts +11 -11
  199. package/src/types/components/dashboard-sidebar.ts +11 -11
  200. package/src/types/components/dashboard-toolbar.ts +11 -11
  201. package/src/types/components/dock.ts +11 -11
  202. package/src/types/components/dropdown-menu.ts +2 -1
  203. package/src/types/components/editor.ts +11 -11
  204. package/src/types/components/empty.ts +11 -11
  205. package/src/types/components/error.ts +11 -11
  206. package/src/types/components/fieldset.ts +11 -11
  207. package/src/types/components/file-upload.ts +2 -1
  208. package/src/types/components/floating-action.ts +11 -11
  209. package/src/types/components/form.ts +19 -19
  210. package/src/types/components/gallery.ts +11 -11
  211. package/src/types/components/icon.ts +19 -19
  212. package/src/types/components/image.ts +32 -28
  213. package/src/types/components/index.ts +134 -135
  214. package/src/types/components/input-date.ts +11 -11
  215. package/src/types/components/input-menu.ts +44 -43
  216. package/src/types/components/input-number.ts +11 -11
  217. package/src/types/components/input-pin.ts +36 -35
  218. package/src/types/components/input-tags.ts +11 -11
  219. package/src/types/components/input-time.ts +11 -11
  220. package/src/types/components/input.ts +2 -2
  221. package/src/types/components/knob.ts +11 -11
  222. package/src/types/components/link-group.ts +45 -23
  223. package/src/types/components/link.ts +4 -0
  224. package/src/types/components/listbox.ts +11 -11
  225. package/src/types/components/locale-selector.ts +33 -33
  226. package/src/types/components/logo.ts +32 -31
  227. package/src/types/components/main.ts +17 -17
  228. package/src/types/components/megamenu.ts +11 -11
  229. package/src/types/components/meter.ts +11 -11
  230. package/src/types/components/modal.ts +39 -39
  231. package/src/types/components/navigation-menu.ts +59 -54
  232. package/src/types/components/page-aside.ts +11 -11
  233. package/src/types/components/page-body.ts +11 -11
  234. package/src/types/components/page-header.ts +11 -11
  235. package/src/types/components/page.ts +11 -11
  236. package/src/types/components/password.ts +11 -11
  237. package/src/types/components/phone-mockup.ts +5 -5
  238. package/src/types/components/pin-input.ts +11 -11
  239. package/src/types/components/popover.ts +23 -23
  240. package/src/types/components/post.ts +35 -35
  241. package/src/types/components/pricing-plan.ts +11 -11
  242. package/src/types/components/pricing-table.ts +11 -11
  243. package/src/types/components/progress.ts +33 -33
  244. package/src/types/components/prose.ts +11 -11
  245. package/src/types/components/qr-code.ts +11 -11
  246. package/src/types/components/radio-group.ts +11 -11
  247. package/src/types/components/rating.ts +11 -11
  248. package/src/types/components/scroll-area.ts +23 -23
  249. package/src/types/components/scroll-to-top.ts +2 -2
  250. package/src/types/components/select.ts +2 -1
  251. package/src/types/components/separator.ts +19 -19
  252. package/src/types/components/sidebar.ts +87 -72
  253. package/src/types/components/slideover.ts +31 -31
  254. package/src/types/components/slider.ts +2 -2
  255. package/src/types/components/speed-dial.ts +11 -11
  256. package/src/types/components/spinner.ts +25 -25
  257. package/src/types/components/splitter.ts +19 -19
  258. package/src/types/components/spoiler.ts +11 -11
  259. package/src/types/components/stepper.ts +11 -11
  260. package/src/types/components/sticky-surface.ts +19 -19
  261. package/src/types/components/switch.ts +41 -41
  262. package/src/types/components/table-of-contents.ts +17 -17
  263. package/src/types/components/tabs.ts +2 -1
  264. package/src/types/components/textarea.ts +2 -1
  265. package/src/types/components/theme-selector.ts +15 -15
  266. package/src/types/components/timeline.ts +11 -11
  267. package/src/types/components/toast.ts +2 -1
  268. package/src/types/components/tooltip.ts +23 -23
  269. package/src/types/components/tour.ts +11 -11
  270. package/src/types/components/tree.ts +11 -11
  271. package/src/types/components/user.ts +11 -11
  272. package/src/types/components/watermark.ts +11 -11
  273. package/src/types/components/window-mockup.ts +11 -11
  274. package/src/types/theme.ts +10 -0
  275. package/src/utils/docs.ts +215 -189
  276. package/src/utils/headerStack.ts +95 -95
  277. package/src/utils/index.ts +5 -5
  278. package/src/components/astro/RLABlogPost.astro +0 -7
  279. package/src/components/astro/RLABlogPosts.astro +0 -9
  280. package/src/components/astro/RLAPosts.astro +0 -23
  281. package/src/themes/posts.theme.ts +0 -13
  282. package/src/types/components/posts.ts +0 -11
@@ -1,63 +1,63 @@
1
- <script setup lang="ts">
2
- import { computed, useSlots } from "vue"
3
- import { scv } from "css-variants"
4
- import { useUi, resolveClasses } from "../../utils"
5
- import type { PostProps } from "../../types/components/post"
6
- import postTheme from "../../themes/post.theme"
7
-
8
- const post = scv(postTheme)
9
-
10
- const props = withDefaults(defineProps<PostProps>(), {
11
- variant: "soft"
12
- })
13
-
14
- const slots = useSlots()
15
-
16
- const resolvedClasses = computed(() =>
17
- resolveClasses(post, { variant: props.variant }, useUi("post", props.ui), props.class)
18
- )
19
-
20
- const Tag = props.to ? "a" : "div"
21
- const formattedDate = computed(() =>
22
- props.date ? (props.date instanceof Date ? props.date.toLocaleDateString() : props.date) : null
23
- )
24
- </script>
25
-
26
- <template>
27
- <component :is="Tag" :href="to" :class="resolvedClasses.root" data-slot="root">
28
- <slot name="image" :ui="resolvedClasses">
29
- <div v-if="image" :class="resolvedClasses.imageWrapper" data-slot="image-wrapper">
30
- <img
31
- :src="typeof image === 'string' ? image : image.src"
32
- :alt="title"
33
- :class="resolvedClasses.image"
34
- data-slot="image"
35
- />
36
- </div>
37
- </slot>
38
-
39
- <div :class="resolvedClasses.content" data-slot="content">
40
- <slot name="title" :ui="resolvedClasses">
41
- <h3 v-if="title" :class="resolvedClasses.title" data-slot="title">{{ title }}</h3>
42
- </slot>
43
-
44
- <slot name="description" :ui="resolvedClasses">
45
- <p v-if="description" :class="resolvedClasses.description" data-slot="description">
46
- {{ description }}
47
- </p>
48
- </slot>
49
-
50
- <slot name="date" :ui="resolvedClasses">
51
- <time v-if="formattedDate" :class="resolvedClasses.date" data-slot="date">{{
52
- formattedDate
53
- }}</time>
54
- </slot>
55
-
56
- <slot />
57
- </div>
58
-
59
- <div v-if="slots.footer" :class="resolvedClasses.footer" data-slot="footer">
60
- <slot name="footer" :ui="resolvedClasses" />
61
- </div>
62
- </component>
63
- </template>
1
+ <script setup lang="ts">
2
+ import { computed, useSlots } from "vue"
3
+ import { scv } from "css-variants"
4
+ import { useUi, resolveClasses } from "../../utils"
5
+ import type { PostProps } from "../../types/components/post"
6
+ import postTheme from "../../themes/post.theme"
7
+
8
+ const post = scv(postTheme)
9
+
10
+ const props = withDefaults(defineProps<PostProps>(), {
11
+ variant: "soft"
12
+ })
13
+
14
+ const slots = useSlots()
15
+
16
+ const resolvedClasses = computed(() =>
17
+ resolveClasses(post, { variant: props.variant }, useUi("post", props.ui), props.class)
18
+ )
19
+
20
+ const Tag = props.to ? "a" : "div"
21
+ const formattedDate = computed(() =>
22
+ props.date ? (props.date instanceof Date ? props.date.toLocaleDateString() : props.date) : null
23
+ )
24
+ </script>
25
+
26
+ <template>
27
+ <component :is="Tag" :href="to" :class="resolvedClasses.root" data-slot="root">
28
+ <slot name="image" :ui="resolvedClasses">
29
+ <div v-if="image" :class="resolvedClasses.imageWrapper" data-slot="image-wrapper">
30
+ <img
31
+ :src="typeof image === 'string' ? image : image.src"
32
+ :alt="title"
33
+ :class="resolvedClasses.image"
34
+ data-slot="image"
35
+ />
36
+ </div>
37
+ </slot>
38
+
39
+ <div :class="resolvedClasses.content" data-slot="content">
40
+ <slot name="title" :ui="resolvedClasses">
41
+ <h3 v-if="title" :class="resolvedClasses.title" data-slot="title">{{ title }}</h3>
42
+ </slot>
43
+
44
+ <slot name="description" :ui="resolvedClasses">
45
+ <p v-if="description" :class="resolvedClasses.description" data-slot="description">
46
+ {{ description }}
47
+ </p>
48
+ </slot>
49
+
50
+ <slot name="date" :ui="resolvedClasses">
51
+ <time v-if="formattedDate" :class="resolvedClasses.date" data-slot="date">{{
52
+ formattedDate
53
+ }}</time>
54
+ </slot>
55
+
56
+ <slot />
57
+ </div>
58
+
59
+ <div v-if="slots.footer" :class="resolvedClasses.footer" data-slot="footer">
60
+ <slot name="footer" :ui="resolvedClasses" />
61
+ </div>
62
+ </component>
63
+ </template>
@@ -1,21 +1,21 @@
1
- <script setup lang="ts">
2
- import { computed } from "vue"
3
- import { scv } from "css-variants"
4
- import { useUi, resolveClasses } from "../../utils"
5
- import type { PostsProps } from "../../types/components/posts"
6
- import postsTheme from "../../themes/posts.theme"
7
-
8
- const posts = scv(postsTheme)
9
-
10
- const props = defineProps<PostsProps>()
11
-
12
- const resolvedClasses = computed(() =>
13
- resolveClasses(posts, {}, useUi("posts", props.ui), props.class)
14
- )
15
- </script>
16
-
17
- <template>
18
- <div :class="resolvedClasses.root" data-slot="root">
19
- <slot />
20
- </div>
21
- </template>
1
+ <script setup lang="ts">
2
+ import { computed } from "vue"
3
+ import { scv } from "css-variants"
4
+ import { useUi, resolveClasses } from "../../utils"
5
+ import type { PostsProps } from "../../types/components/posts"
6
+ import postsTheme from "../../themes/posts.theme"
7
+
8
+ const posts = scv(postsTheme)
9
+
10
+ const props = defineProps<PostsProps>()
11
+
12
+ const resolvedClasses = computed(() =>
13
+ resolveClasses(posts, {}, useUi("posts", props.ui), props.class)
14
+ )
15
+ </script>
16
+
17
+ <template>
18
+ <div :class="resolvedClasses.root" data-slot="root">
19
+ <slot />
20
+ </div>
21
+ </template>
@@ -1,68 +1,68 @@
1
- <script setup lang="ts">
2
- import { computed } from "vue"
3
- import { scv } from "css-variants"
4
- import { useUi, resolveClasses } from "../../utils"
5
- import type { ToastProps } from "../../types/components/toast"
6
- import toastTheme from "../../themes/toast.theme"
7
-
8
- const toast = scv(toastTheme)
9
-
10
- const props = withDefaults(defineProps<ToastProps & { id?: string | number }>(), {
11
- variant: "default",
12
- duration: 5000
13
- })
14
-
15
- const emit = defineEmits<{
16
- (e: "close", id: string | number | undefined): void
17
- }>()
18
-
19
- const resolvedClasses = computed(() =>
20
- resolveClasses(toast, { variant: props.variant }, useUi("toast", props.ui), props.class)
21
- )
22
-
23
- const variantIcons: Record<string, string> = {
24
- default: "i-lucide-bell",
25
- destructive: "i-lucide-alert-circle",
26
- success: "i-lucide-check-circle-2",
27
- warning: "i-lucide-alert-triangle",
28
- info: "i-lucide-info"
29
- }
30
-
31
- const icon = computed(() => variantIcons[props.variant] ?? variantIcons.default!)
32
- </script>
33
-
34
- <template>
35
- <div
36
- :class="resolvedClasses.root"
37
- data-slot="root"
38
- role="alert"
39
- aria-live="assertive"
40
- aria-atomic="true"
41
- >
42
- <span :class="[icon, 'size-4 shrink-0 mt-0.5']" aria-hidden="true" />
43
-
44
- <div class="flex flex-col gap-0.5 flex-1 min-w-0">
45
- <div v-if="title" :class="resolvedClasses.title" data-slot="title">
46
- {{ title }}
47
- </div>
48
- <div v-if="description" :class="resolvedClasses.description" data-slot="description">
49
- {{ description }}
50
- </div>
51
- <slot />
52
- </div>
53
-
54
- <button v-if="actionLabel" type="button" :class="resolvedClasses.action" data-slot="action">
55
- {{ actionLabel }}
56
- </button>
57
-
58
- <button
59
- type="button"
60
- :class="resolvedClasses.close"
61
- data-slot="close"
62
- aria-label="Dismiss notification"
63
- @click="emit('close', id)"
64
- >
65
- <span class="i-lucide-x size-3.5" aria-hidden="true" />
66
- </button>
67
- </div>
68
- </template>
1
+ <script setup lang="ts">
2
+ import { computed } from "vue"
3
+ import { scv } from "css-variants"
4
+ import { useUi, resolveClasses } from "../../utils"
5
+ import type { ToastProps } from "../../types/components/toast"
6
+ import toastTheme from "../../themes/toast.theme"
7
+
8
+ const toast = scv(toastTheme)
9
+
10
+ const props = withDefaults(defineProps<ToastProps & { id?: string | number }>(), {
11
+ variant: "default",
12
+ duration: 5000
13
+ })
14
+
15
+ const emit = defineEmits<{
16
+ (e: "close", id: string | number | undefined): void
17
+ }>()
18
+
19
+ const resolvedClasses = computed(() =>
20
+ resolveClasses(toast, { variant: props.variant }, useUi("toast", props.ui), props.class)
21
+ )
22
+
23
+ const variantIcons: Record<string, string> = {
24
+ default: "i-lucide-bell",
25
+ destructive: "i-lucide-alert-circle",
26
+ success: "i-lucide-check-circle-2",
27
+ warning: "i-lucide-alert-triangle",
28
+ info: "i-lucide-info"
29
+ }
30
+
31
+ const icon = computed(() => variantIcons[props.variant] ?? variantIcons.default!)
32
+ </script>
33
+
34
+ <template>
35
+ <div
36
+ :class="resolvedClasses.root"
37
+ data-slot="root"
38
+ role="alert"
39
+ aria-live="assertive"
40
+ aria-atomic="true"
41
+ >
42
+ <span :class="[icon, 'size-4 shrink-0 mt-0.5']" aria-hidden="true" />
43
+
44
+ <div class="flex flex-col gap-0.5 flex-1 min-w-0">
45
+ <div v-if="title" :class="resolvedClasses.title" data-slot="title">
46
+ {{ title }}
47
+ </div>
48
+ <div v-if="description" :class="resolvedClasses.description" data-slot="description">
49
+ {{ description }}
50
+ </div>
51
+ <slot />
52
+ </div>
53
+
54
+ <button v-if="actionLabel" type="button" :class="resolvedClasses.action" data-slot="action">
55
+ {{ actionLabel }}
56
+ </button>
57
+
58
+ <button
59
+ type="button"
60
+ :class="resolvedClasses.close"
61
+ data-slot="close"
62
+ aria-label="Dismiss notification"
63
+ @click="emit('close', id)"
64
+ >
65
+ <span class="i-lucide-x size-3.5" aria-hidden="true" />
66
+ </button>
67
+ </div>
68
+ </template>
@@ -1,29 +1,29 @@
1
- <script setup lang="ts">
2
- import { useToast } from "../../composables/useToast"
3
- import RLVToast from "./RLVToast.vue"
4
-
5
- const { toasts, remove } = useToast()
6
- </script>
7
-
8
- <template>
9
- <div
10
- class="fixed bottom-0 right-0 p-4 z-[100] flex flex-col gap-2 w-full max-w-sm pointer-events-none"
11
- >
12
- <TransitionGroup
13
- enter-active-class="transition duration-300 ease-out"
14
- enter-from-class="transform translate-y-2 opacity-0"
15
- enter-to-class="transform translate-y-0 opacity-100"
16
- leave-active-class="transition duration-200 ease-in"
17
- leave-from-class="transform translate-y-0 opacity-100"
18
- leave-to-class="transform translate-y-2 opacity-0"
19
- >
20
- <RLVToast
21
- v-for="toast in toasts"
22
- :key="toast.id"
23
- v-bind="toast"
24
- class="pointer-events-auto"
25
- @close="remove"
26
- />
27
- </TransitionGroup>
28
- </div>
29
- </template>
1
+ <script setup lang="ts">
2
+ import { useToast } from "../../composables/useToast"
3
+ import RLVToast from "./RLVToast.vue"
4
+
5
+ const { toasts, remove } = useToast()
6
+ </script>
7
+
8
+ <template>
9
+ <div
10
+ class="fixed bottom-0 right-0 p-4 z-[100] flex flex-col gap-2 w-full max-w-sm pointer-events-none"
11
+ >
12
+ <TransitionGroup
13
+ enter-active-class="transition duration-300 ease-out"
14
+ enter-from-class="transform translate-y-2 opacity-0"
15
+ enter-to-class="transform translate-y-0 opacity-100"
16
+ leave-active-class="transition duration-200 ease-in"
17
+ leave-from-class="transform translate-y-0 opacity-100"
18
+ leave-to-class="transform translate-y-2 opacity-0"
19
+ >
20
+ <RLVToast
21
+ v-for="toast in toasts"
22
+ :key="toast.id"
23
+ v-bind="toast"
24
+ class="pointer-events-auto"
25
+ @close="remove"
26
+ />
27
+ </TransitionGroup>
28
+ </div>
29
+ </template>
@@ -1,3 +1,3 @@
1
- export { useScrollToTop } from "./useScrollToTop"
2
- export { useToast } from "./useToast"
3
- export { headerLayersStore } from "./useHeaderStore"
1
+ export { useScrollToTop } from "./useScrollToTop"
2
+ export { useToast } from "./useToast"
3
+ export { headerLayersStore } from "./useHeaderStore"
@@ -1,14 +1,13 @@
1
- import { map } from "nanostores"
2
-
3
- export interface HeaderLayerInfo {
4
- order: number
5
- isVisible: boolean
6
- height: number
7
- }
8
-
9
- /**
10
- * Global store tracking all registered header layers.
11
- * This allows child components to subscribe to header layer changes
12
- * even across Vue/Astro boundaries, since nanostores is framework-agnostic.
13
- */
14
- export const headerLayersStore = map<Record<string, HeaderLayerInfo>>({})
1
+ import { map } from "nanostores"
2
+
3
+ export interface HeaderLayerInfo {
4
+ order: number
5
+ isVisible: boolean
6
+ height: number
7
+ }
8
+
9
+ /**
10
+ * Global store tracking all registered header layers. This allows child components to subscribe to
11
+ * header layer changes even across Vue/Astro boundaries, since nanostores is framework-agnostic.
12
+ */
13
+ export const headerLayersStore = map<Record<string, HeaderLayerInfo>>({})
@@ -1,62 +1,62 @@
1
- import { ref, onMounted, onUnmounted, type Ref } from "vue"
2
-
3
- export interface UseScrollToTopOptions {
4
- /**
5
- * The scroll threshold (in pixels) before the button becomes visible.
6
- *
7
- * @default 200
8
- */
9
- threshold?: number
10
- }
11
-
12
- export interface UseScrollToTopReturn {
13
- /**
14
- * Whether the scroll-to-top button should be visible.
15
- */
16
- isVisible: Ref<boolean>
17
- /**
18
- * The current scroll percentage (0-100).
19
- */
20
- scrollPercentage: Ref<number>
21
- /**
22
- * Scrolls the window to the top with a smooth animation.
23
- */
24
- scrollToTop: () => void
25
- }
26
-
27
- function scrollToTop() {
28
- window.scrollTo({
29
- top: 0,
30
- behavior: "smooth"
31
- })
32
- }
33
-
34
- export function useScrollToTop(options: UseScrollToTopOptions = {}): UseScrollToTopReturn {
35
- const { threshold = 200 } = options
36
-
37
- const isVisible = ref(false)
38
- const scrollPercentage = ref(0)
39
-
40
- function updateScrollState() {
41
- const scrollTop = window.scrollY || document.documentElement.scrollTop
42
- const scrollHeight = document.documentElement.scrollHeight - window.innerHeight
43
-
44
- isVisible.value = scrollTop > threshold
45
- scrollPercentage.value = scrollHeight > 0 ? (scrollTop / scrollHeight) * 100 : 0
46
- }
47
-
48
- onMounted(() => {
49
- window.addEventListener("scroll", updateScrollState, { passive: true })
50
- updateScrollState()
51
- })
52
-
53
- onUnmounted(() => {
54
- window.removeEventListener("scroll", updateScrollState)
55
- })
56
-
57
- return {
58
- isVisible,
59
- scrollPercentage,
60
- scrollToTop
61
- }
62
- }
1
+ import { ref, onMounted, onUnmounted, type Ref } from "vue"
2
+
3
+ export interface UseScrollToTopOptions {
4
+ /**
5
+ * The scroll threshold (in pixels) before the button becomes visible.
6
+ *
7
+ * @default 200
8
+ */
9
+ threshold?: number
10
+ }
11
+
12
+ export interface UseScrollToTopReturn {
13
+ /**
14
+ * Whether the scroll-to-top button should be visible.
15
+ */
16
+ isVisible: Ref<boolean>
17
+ /**
18
+ * The current scroll percentage (0-100).
19
+ */
20
+ scrollPercentage: Ref<number>
21
+ /**
22
+ * Scrolls the window to the top with a smooth animation.
23
+ */
24
+ scrollToTop: () => void
25
+ }
26
+
27
+ function scrollToTop() {
28
+ window.scrollTo({
29
+ top: 0,
30
+ behavior: "smooth"
31
+ })
32
+ }
33
+
34
+ export function useScrollToTop(options: UseScrollToTopOptions = {}): UseScrollToTopReturn {
35
+ const { threshold = 200 } = options
36
+
37
+ const isVisible = ref(false)
38
+ const scrollPercentage = ref(0)
39
+
40
+ function updateScrollState() {
41
+ const scrollTop = window.scrollY || document.documentElement.scrollTop
42
+ const scrollHeight = document.documentElement.scrollHeight - window.innerHeight
43
+
44
+ isVisible.value = scrollTop > threshold
45
+ scrollPercentage.value = scrollHeight > 0 ? (scrollTop / scrollHeight) * 100 : 0
46
+ }
47
+
48
+ onMounted(() => {
49
+ window.addEventListener("scroll", updateScrollState, { passive: true })
50
+ updateScrollState()
51
+ })
52
+
53
+ onUnmounted(() => {
54
+ window.removeEventListener("scroll", updateScrollState)
55
+ })
56
+
57
+ return {
58
+ isVisible,
59
+ scrollPercentage,
60
+ scrollToTop
61
+ }
62
+ }
@@ -1,42 +1,43 @@
1
- import { reactive } from "vue"
2
-
3
- export interface Toast {
4
- id?: string | number
5
- title?: string
6
- description?: string
7
- icon?: string
8
- color?: "primary" | "success" | "warning" | "error" | "info" | "neutral"
9
- timeout?: number
10
- callback?: () => void
11
- }
12
-
13
- const toasts = reactive<Toast[]>([])
14
-
15
- export function useToast() {
16
- const add = (toast: Toast) => {
17
- const id = toast.id || Date.now()
18
- const newToast = { ...toast, id }
19
- toasts.push(newToast)
20
-
21
- if (toast.timeout !== 0) {
22
- setTimeout(() => {
23
- remove(id)
24
- }, toast.timeout || 5000)
25
- }
26
-
27
- return newToast
28
- }
29
-
30
- const remove = (id: string | number) => {
31
- const index = toasts.findIndex((t) => t.id === id)
32
- if (index !== -1) {
33
- toasts.splice(index, 1)
34
- }
35
- }
36
-
37
- return {
38
- toasts,
39
- add,
40
- remove
41
- }
42
- }
1
+ import { reactive } from "vue"
2
+ import type { ThemeColor } from "../types"
3
+
4
+ export interface Toast {
5
+ id?: string | number
6
+ title?: string
7
+ description?: string
8
+ icon?: string
9
+ color?: ThemeColor
10
+ timeout?: number
11
+ callback?: () => void
12
+ }
13
+
14
+ const toasts = reactive<Toast[]>([])
15
+
16
+ export function useToast() {
17
+ const add = (toast: Toast) => {
18
+ const id = toast.id || Date.now()
19
+ const newToast = { ...toast, id }
20
+ toasts.push(newToast)
21
+
22
+ if (toast.timeout !== 0) {
23
+ setTimeout(() => {
24
+ remove(id)
25
+ }, toast.timeout || 5000)
26
+ }
27
+
28
+ return newToast
29
+ }
30
+
31
+ const remove = (id: string | number) => {
32
+ const index = toasts.findIndex((t) => t.id === id)
33
+ if (index !== -1) {
34
+ toasts.splice(index, 1)
35
+ }
36
+ }
37
+
38
+ return {
39
+ toasts,
40
+ add,
41
+ remove
42
+ }
43
+ }
@@ -1 +1,2 @@
1
1
  export * from "./site.config"
2
+ export * from "./security"