@rimelight/ui 0.0.46 → 0.0.48

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 (222) hide show
  1. package/dist/icons-DPnFQCts.d.mts +72 -0
  2. package/dist/icons.d.mts +1 -1
  3. package/dist/index.d.mts +5 -6
  4. package/dist/preset.d.mts +1 -1
  5. package/dist/preset.mjs +73 -1
  6. package/dist/resolver.d.mts +4 -5
  7. package/dist/resolver.mjs +2 -4
  8. package/dist/shortcuts.d.mts +10 -11
  9. package/dist/stores.d.mts +3 -4
  10. package/dist/{types-DqAgCNcm.d.mts → types-DWmKMcYC.d.mts} +1 -1
  11. package/dist/types.d.mts +1 -1
  12. package/package.json +8 -6
  13. package/src/components/3d-hover/RLS3dHover.tsx +21 -0
  14. package/src/components/accordion/RLSAccordion.tsx +112 -0
  15. package/src/components/app/RLSApp.tsx +21 -0
  16. package/src/components/aspect-ratio/RLSAspectRatio.tsx +30 -0
  17. package/src/components/audio/RLSAudio.tsx +27 -0
  18. package/src/components/avatar/RLSAvatar.tsx +142 -0
  19. package/src/components/avatar/avatar.ts +22 -21
  20. package/src/components/avatar-group/RLSAvatarGroup.tsx +163 -0
  21. package/src/components/badge/RLSBadge.tsx +1 -1
  22. package/src/components/badge/RLVBadge.vue +5 -3
  23. package/src/components/banner/RLABanner.astro +1 -1
  24. package/src/components/banner/RLSBanner.tsx +151 -0
  25. package/src/components/breadcrumb/RLSBreadcrumb.tsx +194 -0
  26. package/src/components/browser-mockup/RLSBrowserMockup.tsx +21 -0
  27. package/src/components/button/RLSButton.tsx +53 -38
  28. package/src/components/button/RLVButton.vue +44 -32
  29. package/src/components/calendar/RLSCalendar.tsx +26 -0
  30. package/src/components/callout/RLSCallout.tsx +151 -0
  31. package/src/components/card/RLSCard.tsx +4 -0
  32. package/src/components/card/RLVCard.vue +4 -0
  33. package/src/components/card/card.ts +10 -0
  34. package/src/components/carousel/RLACarousel.astro +14 -1
  35. package/src/components/carousel/RLSCarousel.tsx +260 -0
  36. package/src/components/chart/RLSChart.tsx +299 -0
  37. package/src/components/chat/RLSChat.tsx +27 -0
  38. package/src/components/chat-message/RLSChatMessage.tsx +27 -0
  39. package/src/components/chat-messages/RLSChatMessages.tsx +27 -0
  40. package/src/components/chat-palette/RLSChatPalette.tsx +27 -0
  41. package/src/components/chat-prompt/RLSChatPrompt.tsx +27 -0
  42. package/src/components/chat-prompt-submit/RLSChatPromptSubmit.tsx +27 -0
  43. package/src/components/chat-reasoning/RLSChatReasoning.tsx +27 -0
  44. package/src/components/chat-shimmer/RLSChatShimmer.tsx +27 -0
  45. package/src/components/chat-tool/RLSChatTool.tsx +27 -0
  46. package/src/components/checkbox/RLACheckbox.astro +1 -0
  47. package/src/components/checkbox/RLSCheckbox.tsx +1 -1
  48. package/src/components/checkbox/checkbox.theme.ts +2 -2
  49. package/src/components/chip/RLSChip.tsx +65 -0
  50. package/src/components/collapsible/RLSCollapsible.tsx +89 -0
  51. package/src/components/color-area/RLSColorArea.tsx +554 -0
  52. package/src/components/color-field/RLSColorField.tsx +236 -0
  53. package/src/components/color-picker/RLSColorPicker.tsx +26 -0
  54. package/src/components/color-slider/RLSColorSlider.tsx +373 -0
  55. package/src/components/command-palette/RLSCommandPalette.tsx +26 -0
  56. package/src/components/compare/RLSCompare.tsx +26 -0
  57. package/src/components/confirm/RLSConfirm.tsx +173 -0
  58. package/src/components/container/RLSContainer.tsx +24 -0
  59. package/src/components/context-menu/RLSContextMenu.tsx +26 -0
  60. package/src/components/copy-markdown/RLSCopyMarkdown.tsx +57 -0
  61. package/src/components/dashboard-group/RLSDashboardGroup.tsx +29 -0
  62. package/src/components/dashboard-navbar/RLSDashboardNavbar.tsx +116 -0
  63. package/src/components/dashboard-panel/RLSDashboardPanel.tsx +84 -0
  64. package/src/components/dashboard-resize-handle/RLSDashboardResizeHandle.tsx +35 -0
  65. package/src/components/dashboard-search/RLADashboardSearch.astro +1 -1
  66. package/src/components/dashboard-search/RLSDashboardSearch.tsx +125 -0
  67. package/src/components/dashboard-search-button/RLSDashboardSearchButton.tsx +82 -0
  68. package/src/components/dashboard-sidebar/RLADashboardSidebar.astro +4 -4
  69. package/src/components/dashboard-sidebar/RLSDashboardSidebar.tsx +184 -0
  70. package/src/components/dashboard-sidebar-collapse/RLSDashboardSidebarCollapse.tsx +46 -0
  71. package/src/components/dashboard-sidebar-toggle/RLSDashboardSidebarToggle.tsx +35 -0
  72. package/src/components/dashboard-toolbar/RLSDashboardToolbar.tsx +49 -0
  73. package/src/components/date/RLSDate.tsx +34 -0
  74. package/src/components/dock/RLSDock.tsx +26 -0
  75. package/src/components/drawer/RLSDrawer.tsx +177 -0
  76. package/src/components/dropdown-menu/RLADropdownMenu.astro +250 -241
  77. package/src/components/dropdown-menu/RLSDropdownMenu.tsx +183 -86
  78. package/src/components/editor/RLSEditor.tsx +26 -0
  79. package/src/components/empty/RLSEmpty.tsx +132 -0
  80. package/src/components/error/RLSError.tsx +26 -0
  81. package/src/components/field-group/RLSFieldGroup.tsx +46 -0
  82. package/src/components/fieldset/RLSFieldset.tsx +26 -0
  83. package/src/components/file-upload/RLAFileUpload.astro +1 -1
  84. package/src/components/file-upload/RLSFileUpload.tsx +163 -0
  85. package/src/components/floating-action/RLSFloatingAction.tsx +26 -0
  86. package/src/components/footer/RLSFooter.tsx +56 -0
  87. package/src/components/form/RLSForm.tsx +34 -0
  88. package/src/components/gallery/RLSGallery.tsx +21 -0
  89. package/src/components/gamepad/RLSGamepad.tsx +269 -0
  90. package/src/components/grid/RLSGrid.tsx +29 -0
  91. package/src/components/head/RLAHead.astro +9 -0
  92. package/src/components/head/RLSHead.tsx +42 -0
  93. package/src/components/head/UIHead.astro +3 -0
  94. package/src/components/header/HeaderLayer.astro +1 -1
  95. package/src/components/header/RLSHeader.tsx +87 -0
  96. package/src/components/hover-card/RLSHoverCard.tsx +72 -0
  97. package/src/components/icon/RLSIcon.tsx +3 -1
  98. package/src/components/image/RLAImage.astro +447 -138
  99. package/src/components/image/RLSImage.tsx +545 -0
  100. package/src/components/image/image.theme.ts +19 -3
  101. package/src/components/image/image.ts +31 -1
  102. package/src/components/input/RLAInput.astro +62 -51
  103. package/src/components/input/RLSInput.tsx +1 -1
  104. package/src/components/input-date/RLSInputDate.tsx +92 -0
  105. package/src/components/input-menu/RLAInputMenu.astro +3 -3
  106. package/src/components/input-menu/RLSInputMenu.tsx +199 -0
  107. package/src/components/input-number/RLSInputNumber.tsx +184 -0
  108. package/src/components/input-pin/RLSInputPin.tsx +185 -0
  109. package/src/components/input-rating/RLAInputRating.astro +8 -8
  110. package/src/components/input-rating/RLSInputRating.tsx +198 -0
  111. package/src/components/input-rating/input-rating.ts +4 -0
  112. package/src/components/input-tags/RLSInputTags.tsx +94 -0
  113. package/src/components/input-time/RLSInputTime.tsx +92 -0
  114. package/src/components/kbd/RLSKbd.tsx +37 -0
  115. package/src/components/keyboard/RLSKeyboard.tsx +476 -0
  116. package/src/components/knob/RLSKnob.tsx +27 -0
  117. package/src/components/label/RLSLabel.tsx +27 -0
  118. package/src/components/layout-grid/RLALayoutGrid.astro +29 -29
  119. package/src/components/layout-grid/RLSLayoutGrid.tsx +402 -0
  120. package/src/components/layout-grid/layout-grid.ts +25 -1
  121. package/src/components/link/RLALink.astro +5 -5
  122. package/src/components/link/RLSLink.tsx +6 -5
  123. package/src/components/link/link.ts +21 -12
  124. package/src/components/link-group/RLSLinkGroup.tsx +76 -0
  125. package/src/components/listbox/RLSListbox.tsx +27 -0
  126. package/src/components/locale-selector/RLALocaleSelector.astro +110 -102
  127. package/src/components/locale-selector/RLSLocaleSelector.tsx +178 -0
  128. package/src/components/locale-selector/locale-selector.ts +2 -7
  129. package/src/components/logo/RLALogo.astro +153 -102
  130. package/src/components/logo/RLSLogo.tsx +129 -0
  131. package/src/components/main/RLSMain.tsx +40 -0
  132. package/src/components/marquee/RLSMarquee.tsx +80 -0
  133. package/src/components/meter/RLSMeter.tsx +27 -0
  134. package/src/components/modal/RLAModal.astro +1 -1
  135. package/src/components/modal/RLSModal.tsx +109 -72
  136. package/src/components/navigation-menu/RLANavigationMenu.astro +6 -6
  137. package/src/components/navigation-menu/RLSNavigationMenu.tsx +228 -0
  138. package/src/components/navigation-menu/navigation-menu.ts +2 -2
  139. package/src/components/package-managers/RLSPackageManagers.tsx +204 -0
  140. package/src/components/page/RLSPage.tsx +21 -0
  141. package/src/components/page-aside/RLSPageAside.tsx +21 -0
  142. package/src/components/page-body/RLSPageBody.tsx +21 -0
  143. package/src/components/page-header/RLSPageHeader.tsx +21 -0
  144. package/src/components/page-section/RLSPageSection.tsx +201 -0
  145. package/src/components/pagination/RLSPagination.tsx +114 -0
  146. package/src/components/password/RLSPassword.tsx +27 -0
  147. package/src/components/phone-mockup/RLSPhoneMockup.tsx +27 -0
  148. package/src/components/placeholder/RLSPlaceholder.tsx +47 -0
  149. package/src/components/popover/RLAPopover.astro +2 -2
  150. package/src/components/popover/RLSPopover.tsx +124 -0
  151. package/src/components/post/RLSPost.tsx +134 -0
  152. package/src/components/pricing-plan/RLSPricingPlan.tsx +26 -0
  153. package/src/components/pricing-table/RLSPricingTable.tsx +26 -0
  154. package/src/components/progress/RLSProgress.tsx +53 -0
  155. package/src/components/prose/RLSProse.tsx +26 -0
  156. package/src/components/qr-code/RLSQrCode.tsx +26 -0
  157. package/src/components/quote/RLAQuote.astro +10 -6
  158. package/src/components/quote/RLSQuote.tsx +37 -0
  159. package/src/components/quote/quote.theme.ts +5 -2
  160. package/src/components/radio-group/RLSRadioGroup.tsx +37 -0
  161. package/src/components/rating/RLSRating.tsx +27 -0
  162. package/src/components/scroll-area/RLAScrollArea.astro +1 -1
  163. package/src/components/scroll-area/RLSScrollArea.tsx +210 -0
  164. package/src/components/scroll-to-top/RLAScrollToTop.astro +5 -4
  165. package/src/components/scroll-to-top/RLSScrollToTop.tsx +145 -0
  166. package/src/components/search/RLASearch.astro +6 -6
  167. package/src/components/search/RLSSearch.tsx +237 -0
  168. package/src/components/select/RLASelect.astro +67 -4
  169. package/src/components/select/RLSSelect.tsx +107 -39
  170. package/src/components/select/RLVSelect.vue +50 -1
  171. package/src/components/select/select.theme.ts +30 -10
  172. package/src/components/select/select.ts +20 -1
  173. package/src/components/separator/RLSSeparator.tsx +92 -0
  174. package/src/components/share/RLSShare.tsx +66 -0
  175. package/src/components/shortcuts/RLAShortcuts.astro +2 -2
  176. package/src/components/shortcuts/RLSShortcuts.tsx +393 -0
  177. package/src/components/sidebar/RLASidebar.astro +1 -1
  178. package/src/components/sidebar/RLSSidebar.tsx +271 -0
  179. package/src/components/skeleton/RLSSkeleton.tsx +21 -0
  180. package/src/components/slideover/RLASlideover.astro +1 -1
  181. package/src/components/slideover/RLSSlideover.tsx +159 -0
  182. package/src/components/slider/RLSSlider.tsx +112 -0
  183. package/src/components/speed-dial/RLSSpeedDial.tsx +27 -0
  184. package/src/components/spinner/RLSSpinner.tsx +22 -0
  185. package/src/components/splitter/RLASplitter.astro +1 -1
  186. package/src/components/splitter/RLSSplitter.tsx +178 -0
  187. package/src/components/spoiler/RLSSpoiler.tsx +26 -0
  188. package/src/components/stepper/RLAStepper.astro +9 -9
  189. package/src/components/stepper/RLSStepper.tsx +205 -0
  190. package/src/components/steps/RLSSteps.tsx +108 -0
  191. package/src/components/sticky-surface/RLSStickySurface.tsx +63 -0
  192. package/src/components/surround/RLSSurround.tsx +57 -0
  193. package/src/components/switch/RLSSwitch.tsx +56 -0
  194. package/src/components/table/RLATable.astro +1044 -579
  195. package/src/components/table/RLSTable.tsx +893 -0
  196. package/src/components/table/table.theme.ts +47 -16
  197. package/src/components/table/table.ts +104 -66
  198. package/src/components/table-of-contents/RLSTableOfContents.tsx +196 -0
  199. package/src/components/tabs/RLATabs.astro +8 -8
  200. package/src/components/tabs/RLSTabs.tsx +298 -0
  201. package/src/components/textarea/RLATextarea.astro +1 -0
  202. package/src/components/textarea/RLSTextarea.tsx +3 -1
  203. package/src/components/theme-selector/RLAThemeSelector.astro +85 -56
  204. package/src/components/theme-selector/RLSThemeSelector.tsx +131 -0
  205. package/src/components/theme-selector/theme-selector.theme.ts +5 -7
  206. package/src/components/theme-selector/theme-selector.ts +11 -1
  207. package/src/components/timeline/RLSTimeline.tsx +171 -0
  208. package/src/components/toast/RLAToast.astro +2 -2
  209. package/src/components/toast/RLSToast.tsx +179 -0
  210. package/src/components/toaster/RLSToaster.tsx +82 -0
  211. package/src/components/tooltip/RLSTooltip.tsx +48 -0
  212. package/src/components/tour/RLSTour.tsx +26 -0
  213. package/src/components/tree/RLSTree.tsx +26 -0
  214. package/src/components/user/RLSUser.tsx +26 -0
  215. package/src/components/video/RLAVideo.astro +4 -1
  216. package/src/components/video/RLSVideo.tsx +158 -0
  217. package/src/components/watermark/RLSWatermark.tsx +27 -0
  218. package/src/components/window-mockup/RLSWindowMockup.tsx +27 -0
  219. package/src/preset.ts +73 -1
  220. package/src/resolver.ts +6 -1
  221. package/src/virtual.d.ts +6 -0
  222. package/dist/icons--RzV1RTU.d.mts +0 -72
@@ -0,0 +1,204 @@
1
+ import { createMemo, createSignal, For, Show, splitProps, type Component } from "solid-js"
2
+ import RLSButton from "../button/RLSButton"
3
+
4
+ type Manager = "npm" | "pnpm" | "yarn" | "deno" | "bun" | "vp"
5
+ type CommandType = "add" | "create" | "dlx" | "exec" | "install" | "remove" | "run"
6
+
7
+ export interface RLSPackageManagersProps {
8
+ pkg?: string
9
+ type?: CommandType
10
+ dev?: boolean
11
+ args?: string
12
+ comment?: string
13
+ prefix?: string
14
+ managers?: Manager[]
15
+ }
16
+
17
+ const commands: Record<Manager, Partial<Record<CommandType, string>> & { dev: string }> = {
18
+ npm: {
19
+ add: "npm i",
20
+ create: "npm create",
21
+ dlx: "npx",
22
+ exec: "npx",
23
+ install: "npm install",
24
+ run: "npm run",
25
+ remove: "npm uninstall",
26
+ dev: "-D"
27
+ },
28
+ yarn: {
29
+ add: "yarn add",
30
+ create: "yarn create",
31
+ dlx: "yarn dlx",
32
+ exec: "yarn",
33
+ install: "yarn install",
34
+ run: "yarn run",
35
+ remove: "yarn remove",
36
+ dev: "-D"
37
+ },
38
+ pnpm: {
39
+ add: "pnpm add",
40
+ create: "pnpm create",
41
+ dlx: "pnpx",
42
+ exec: "pnpm",
43
+ install: "pnpm install",
44
+ run: "pnpm run",
45
+ remove: "pnpm remove",
46
+ dev: "-D"
47
+ },
48
+ deno: {
49
+ add: "deno add",
50
+ create: "deno run -A",
51
+ dlx: "deno run",
52
+ exec: "deno run",
53
+ install: "deno install",
54
+ run: "deno task",
55
+ remove: "deno remove",
56
+ dev: "--dev"
57
+ },
58
+ bun: {
59
+ add: "bun add",
60
+ create: "bun create",
61
+ install: "bun install",
62
+ run: "bun run",
63
+ remove: "bun remove",
64
+ dev: "-d"
65
+ },
66
+ vp: {
67
+ add: "vp add",
68
+ create: "vp create",
69
+ dlx: "vp dlx",
70
+ exec: "vp exec",
71
+ install: "vp install",
72
+ run: "vp run",
73
+ remove: "vp remove",
74
+ dev: "-D"
75
+ }
76
+ }
77
+
78
+ const RLSPackageManagers: Component<RLSPackageManagersProps> = (allProps) => {
79
+ const [props] = splitProps(allProps, [
80
+ "pkg",
81
+ "type",
82
+ "dev",
83
+ "args",
84
+ "comment",
85
+ "prefix",
86
+ "managers"
87
+ ])
88
+
89
+ const getCommand = (mgr: Manager, cmdType: CommandType): string | undefined => {
90
+ let cmd = commands[mgr][cmdType]
91
+ if (cmd === undefined) return undefined
92
+
93
+ if (props.prefix) cmd = `${props.prefix} ${cmd}`
94
+ if (props.comment) cmd = `# ${props.comment.replaceAll("{PKG}", mgr)}\n${cmd}`
95
+ if (props.dev && cmdType === "add") cmd += ` ${commands[mgr].dev}`
96
+
97
+ if (props.pkg) {
98
+ const processedPkg =
99
+ cmdType === "create" && mgr === "yarn"
100
+ ? props.pkg.replace(/@(?![^@]*\/)\S*$/, "")
101
+ : props.pkg
102
+ cmd += ` ${processedPkg}`
103
+ }
104
+
105
+ if (props.args) {
106
+ const needsDoubleDash = mgr === "npm" && !["dlx", "exec", "run"].includes(cmdType)
107
+ cmd += `${needsDoubleDash ? " --" : ""} ${props.args}`
108
+ }
109
+
110
+ return cmd
111
+ }
112
+
113
+ const tabs = createMemo(() =>
114
+ (props.managers ?? ["npm", "pnpm", "yarn", "deno", "bun", "vp"])
115
+ .map((mgr) => ({ mgr, cmd: getCommand(mgr, props.type ?? "add") }))
116
+ .filter((tab) => tab.cmd !== undefined)
117
+ )
118
+
119
+ const [activeIdx, setActiveIdx] = createSignal(0)
120
+ const [copied, setCopied] = createSignal<string | null>(null)
121
+
122
+ const copyCommand = async (mgr: string, cmd: string) => {
123
+ try {
124
+ await navigator.clipboard.writeText(cmd)
125
+ setCopied(mgr)
126
+ setTimeout(() => {
127
+ setCopied((current) => (current === mgr ? null : current))
128
+ }, 2000)
129
+ } catch {
130
+ setCopied(null)
131
+ }
132
+ }
133
+
134
+ return (
135
+ <div
136
+ class="w-full overflow-hidden rounded-xl border border-default bg-elevated/60"
137
+ data-slot="root"
138
+ >
139
+ <div
140
+ class="flex flex-wrap items-center gap-1 border-b border-default bg-elevated/80 px-2 pt-2"
141
+ role="tablist"
142
+ data-slot="list"
143
+ >
144
+ <For each={tabs()}>
145
+ {(tab, idx) => {
146
+ const active = idx() === activeIdx()
147
+ return (
148
+ <button
149
+ type="button"
150
+ role="tab"
151
+ class={`px-3 py-1.5 text-sm font-semibold rounded-t-lg transition-colors ${
152
+ active
153
+ ? "bg-default text-highlighted border border-default border-b-transparent"
154
+ : "text-muted hover:text-highlighted"
155
+ }`}
156
+ data-slot="trigger"
157
+ data-state={active ? "active" : "inactive"}
158
+ data-value={tab.mgr}
159
+ aria-selected={active ? "true" : "false"}
160
+ onClick={() => setActiveIdx(idx())}
161
+ >
162
+ {tab.mgr}
163
+ </button>
164
+ )
165
+ }}
166
+ </For>
167
+ </div>
168
+
169
+ <For each={tabs()}>
170
+ {(tab, idx) => (
171
+ <div
172
+ role="tabpanel"
173
+ data-value={tab.mgr}
174
+ data-slot="content"
175
+ hidden={idx() !== activeIdx() ? "until-found" : undefined}
176
+ >
177
+ <Show when={idx() === activeIdx()}>
178
+ <div class="relative">
179
+ <pre class="overflow-x-auto bg-[#0a0a0f] px-4 py-3 pr-16 text-sm font-mono leading-6 text-[#e4e4e7] whitespace-pre">
180
+ <code aria-hidden="true">{tab.cmd!}</code>
181
+ </pre>
182
+ <RLSButton
183
+ type="button"
184
+ variant="ghost"
185
+ color="neutral"
186
+ size="sm"
187
+ class="absolute right-2 top-2"
188
+ leadingIcon={copied() === tab.mgr ? "check" : "copy"}
189
+ aria-label="Copy command"
190
+ data-slot="copy-button"
191
+ onClick={() => copyCommand(tab.mgr, tab.cmd!)}
192
+ >
193
+ {copied() === tab.mgr ? "Copied" : "Copy"}
194
+ </RLSButton>
195
+ </div>
196
+ </Show>
197
+ </div>
198
+ )}
199
+ </For>
200
+ </div>
201
+ )
202
+ }
203
+
204
+ export default RLSPackageManagers
@@ -0,0 +1,21 @@
1
+ import { createMemo, splitProps, type Component, type JSX } from "solid-js"
2
+ import type { PageProps } from "./page"
3
+ import { pageTheme } from "./page.theme"
4
+
5
+ export interface RLSPageProps extends PageProps {
6
+ children?: JSX.Element
7
+ }
8
+
9
+ const RLSPage: Component<RLSPageProps> = (allProps) => {
10
+ const [props, rest] = splitProps(allProps, ["ui", "class", "children"])
11
+
12
+ const resolvedClasses = createMemo(() => pageTheme({ ui: props.ui, class: props.class }))
13
+
14
+ return (
15
+ <div class={resolvedClasses().root} data-slot="root" {...rest}>
16
+ {props.children}
17
+ </div>
18
+ )
19
+ }
20
+
21
+ export default RLSPage
@@ -0,0 +1,21 @@
1
+ import { createMemo, splitProps, type Component, type JSX } from "solid-js"
2
+ import type { PageAsideProps } from "./page-aside"
3
+ import { pageAsideTheme } from "./page-aside.theme"
4
+
5
+ export interface RLSPageAsideProps extends PageAsideProps {
6
+ children?: JSX.Element
7
+ }
8
+
9
+ const RLSPageAside: Component<RLSPageAsideProps> = (allProps) => {
10
+ const [props, rest] = splitProps(allProps, ["ui", "class", "children"])
11
+
12
+ const resolvedClasses = createMemo(() => pageAsideTheme({ ui: props.ui, class: props.class }))
13
+
14
+ return (
15
+ <div class={resolvedClasses().root} data-slot="root" {...rest}>
16
+ {props.children}
17
+ </div>
18
+ )
19
+ }
20
+
21
+ export default RLSPageAside
@@ -0,0 +1,21 @@
1
+ import { createMemo, splitProps, type Component, type JSX } from "solid-js"
2
+ import type { PageBodyProps } from "./page-body"
3
+ import { pageBodyTheme } from "./page-body.theme"
4
+
5
+ export interface RLSPageBodyProps extends PageBodyProps {
6
+ children?: JSX.Element
7
+ }
8
+
9
+ const RLSPageBody: Component<RLSPageBodyProps> = (allProps) => {
10
+ const [props, rest] = splitProps(allProps, ["ui", "class", "children"])
11
+
12
+ const resolvedClasses = createMemo(() => pageBodyTheme({ ui: props.ui, class: props.class }))
13
+
14
+ return (
15
+ <div class={resolvedClasses().root} data-slot="root" {...rest}>
16
+ {props.children}
17
+ </div>
18
+ )
19
+ }
20
+
21
+ export default RLSPageBody
@@ -0,0 +1,21 @@
1
+ import { createMemo, splitProps, type Component, type JSX } from "solid-js"
2
+ import type { PageHeaderProps } from "./page-header"
3
+ import { pageHeaderTheme } from "./page-header.theme"
4
+
5
+ export interface RLSPageHeaderProps extends PageHeaderProps {
6
+ children?: JSX.Element
7
+ }
8
+
9
+ const RLSPageHeader: Component<RLSPageHeaderProps> = (allProps) => {
10
+ const [props, rest] = splitProps(allProps, ["ui", "class", "children"])
11
+
12
+ const resolvedClasses = createMemo(() => pageHeaderTheme({ ui: props.ui, class: props.class }))
13
+
14
+ return (
15
+ <div class={resolvedClasses().root} data-slot="root" {...rest}>
16
+ {props.children}
17
+ </div>
18
+ )
19
+ }
20
+
21
+ export default RLSPageHeader
@@ -0,0 +1,201 @@
1
+ import { createMemo, splitProps, For, type Component, type JSX } from "solid-js"
2
+ import { Dynamic } from "solid-js/web"
3
+ import type { PageSectionProps } from "./page-section"
4
+ import { pageSectionTheme } from "./page-section.theme"
5
+ import RLSIcon from "../icon/RLSIcon"
6
+ import RLSButton from "../button/RLSButton"
7
+
8
+ export interface RLSPageSectionProps extends PageSectionProps {
9
+ background?: JSX.Element
10
+ top?: JSX.Element
11
+ header?: JSX.Element
12
+ leading?: JSX.Element
13
+ headlineSlot?: JSX.Element
14
+ titleSlot?: JSX.Element
15
+ descriptionSlot?: JSX.Element
16
+ body?: JSX.Element
17
+ footer?: JSX.Element
18
+ linksSlot?: JSX.Element
19
+ content?: JSX.Element
20
+ bottom?: JSX.Element
21
+ children?: JSX.Element
22
+ }
23
+
24
+ const RLSPageSection: Component<RLSPageSectionProps> = (allProps) => {
25
+ const [props, rest] = splitProps(allProps, [
26
+ "as",
27
+ "variant",
28
+ "ctaVariant",
29
+ "headline",
30
+ "icon",
31
+ "title",
32
+ "description",
33
+ "links",
34
+ "orientation",
35
+ "reverse",
36
+ "contentVisibility",
37
+ "containIntrinsicSize",
38
+ "ui",
39
+ "class",
40
+ "background",
41
+ "top",
42
+ "header",
43
+ "leading",
44
+ "headlineSlot",
45
+ "titleSlot",
46
+ "descriptionSlot",
47
+ "body",
48
+ "footer",
49
+ "linksSlot",
50
+ "content",
51
+ "bottom",
52
+ "children"
53
+ ])
54
+
55
+ const resolvedVariant = () =>
56
+ props.variant === "default" || props.variant === "hero" || props.variant === "cta"
57
+ ? props.variant
58
+ : "default"
59
+
60
+ const resolvedClasses = createMemo(() =>
61
+ pageSectionTheme({
62
+ variant: resolvedVariant(),
63
+ ...(resolvedVariant() === "cta" ? { ctaVariant: props.ctaVariant ?? "solid" } : {}),
64
+ orientation: props.orientation ?? "vertical",
65
+ reverse: !!props.reverse,
66
+ headline: !!(props.headlineSlot || props.headline),
67
+ title: !!(props.titleSlot || props.title),
68
+ description: !!(props.descriptionSlot || props.description),
69
+ body: !!props.body,
70
+ ui: props.ui,
71
+ class: props.class
72
+ })
73
+ )
74
+
75
+ const tag = () => props.as ?? "section"
76
+ const titleTag = () => (resolvedVariant() === "hero" ? "h1" : "h2")
77
+
78
+ const showHeader = () =>
79
+ !!(
80
+ props.header ||
81
+ props.icon ||
82
+ props.headline ||
83
+ props.headlineSlot ||
84
+ props.title ||
85
+ props.titleSlot ||
86
+ props.description ||
87
+ props.descriptionSlot
88
+ )
89
+
90
+ const showWrapper = () =>
91
+ !!(
92
+ showHeader() ||
93
+ props.body ||
94
+ props.footer ||
95
+ props.linksSlot ||
96
+ (props.links?.length ?? 0) > 0
97
+ )
98
+
99
+ return (
100
+ <Dynamic
101
+ component={tag()}
102
+ data-orientation={props.orientation ?? "vertical"}
103
+ class={`${resolvedClasses().root} ${
104
+ props.contentVisibility === "auto"
105
+ ? "[content-visibility:auto] [contain-intrinsic-size:var(--rla-contain-intrinsic-size,auto_500px)]"
106
+ : ""
107
+ }`}
108
+ style={
109
+ props.containIntrinsicSize
110
+ ? { "--rla-contain-intrinsic-size": props.containIntrinsicSize }
111
+ : undefined
112
+ }
113
+ {...rest}
114
+ >
115
+ {props.background ? (
116
+ <div class={resolvedClasses().background} data-slot="background">
117
+ {props.background}
118
+ </div>
119
+ ) : null}
120
+
121
+ {props.top}
122
+
123
+ <div class={resolvedClasses().container}>
124
+ {showWrapper() ? (
125
+ <div class={resolvedClasses().wrapper}>
126
+ {showHeader() ? (
127
+ <div class={resolvedClasses().header}>
128
+ {props.header ? (
129
+ props.header
130
+ ) : (
131
+ <>
132
+ {props.icon || props.leading ? (
133
+ <div class={resolvedClasses().leading}>
134
+ {props.leading ? (
135
+ props.leading
136
+ ) : props.icon ? (
137
+ <RLSIcon
138
+ name={props.icon}
139
+ size="md"
140
+ ui={{ root: resolvedClasses().leadingIcon }}
141
+ />
142
+ ) : null}
143
+ </div>
144
+ ) : null}
145
+
146
+ {props.headline || props.headlineSlot ? (
147
+ <div class={resolvedClasses().headline}>
148
+ {props.headlineSlot ?? props.headline}
149
+ </div>
150
+ ) : null}
151
+
152
+ {props.title || props.titleSlot ? (
153
+ <Dynamic component={titleTag()} class={resolvedClasses().title}>
154
+ {props.titleSlot ?? props.title}
155
+ </Dynamic>
156
+ ) : null}
157
+
158
+ {props.description || props.descriptionSlot ? (
159
+ <div class={resolvedClasses().description}>
160
+ {props.descriptionSlot ?? props.description}
161
+ </div>
162
+ ) : null}
163
+ </>
164
+ )}
165
+ </div>
166
+ ) : null}
167
+
168
+ {props.body ? <div class={resolvedClasses().body}>{props.body}</div> : null}
169
+
170
+ {props.footer || props.linksSlot || (props.links?.length ?? 0) > 0 ? (
171
+ <div class={resolvedClasses().footer}>
172
+ {props.footer ? (
173
+ props.footer
174
+ ) : (
175
+ <div class={resolvedClasses().links}>
176
+ <For each={props.links ?? []}>
177
+ {(link) => <RLSButton size="lg" {...link} />}
178
+ </For>
179
+ {props.linksSlot}
180
+ </div>
181
+ )}
182
+ </div>
183
+ ) : null}
184
+ </div>
185
+ ) : null}
186
+
187
+ {props.children !== undefined && props.children !== null ? (
188
+ props.children
189
+ ) : (props.orientation ?? "vertical") === "horizontal" ? (
190
+ <div class="hidden lg:block" />
191
+ ) : null}
192
+
193
+ {props.content ? <div class="col-span-full w-full">{props.content}</div> : null}
194
+ </div>
195
+
196
+ {props.bottom}
197
+ </Dynamic>
198
+ )
199
+ }
200
+
201
+ export default RLSPageSection
@@ -0,0 +1,114 @@
1
+ import { createMemo, splitProps, For, type Component } from "solid-js"
2
+ import type { PaginationProps } from "./pagination"
3
+ import { paginationTheme } from "./pagination.theme"
4
+ import RLSIcon from "../icon/RLSIcon"
5
+
6
+ export interface RLSPaginationProps extends PaginationProps {
7
+ page?: number
8
+ onPageChange?: (page: number) => void
9
+ }
10
+
11
+ const RLSPagination: Component<RLSPaginationProps> = (allProps) => {
12
+ const [props, rest] = splitProps(allProps, [
13
+ "currentPage",
14
+ "page",
15
+ "totalPages",
16
+ "baseUrl",
17
+ "onPageChange",
18
+ "ui",
19
+ "class"
20
+ ])
21
+
22
+ const currentPage = () => props.page ?? props.currentPage ?? 1
23
+ const totalPages = () => props.totalPages ?? 1
24
+
25
+ const resolvedClasses = createMemo(() =>
26
+ paginationTheme({
27
+ ui: props.ui,
28
+ class: props.class
29
+ })
30
+ )
31
+
32
+ const pageNumbers = createMemo<(number | "ellipsis")[]>(() => {
33
+ const total = totalPages()
34
+ const current = currentPage()
35
+ const pages: (number | "ellipsis")[] = []
36
+ const maxVisible = 5
37
+ if (total <= maxVisible) {
38
+ for (let i = 1; i <= total; i++) pages.push(i)
39
+ } else {
40
+ pages.push(1)
41
+ if (current > 3) pages.push("ellipsis")
42
+ const start = Math.max(2, current - 1)
43
+ const end = Math.min(total - 1, current + 1)
44
+ for (let i = start; i <= end; i++) {
45
+ if (!pages.includes(i)) pages.push(i)
46
+ }
47
+ if (current < total - 2) pages.push("ellipsis")
48
+ if (!pages.includes(total)) pages.push(total)
49
+ }
50
+ return pages
51
+ })
52
+
53
+ const itemLinkClasses = (isActive: boolean) => paginationTheme({ active: isActive }).link
54
+
55
+ return (
56
+ <nav
57
+ class={resolvedClasses().root}
58
+ data-slot="pagination-root"
59
+ aria-label="pagination"
60
+ {...rest}
61
+ >
62
+ <ul class={resolvedClasses().list} data-slot="list">
63
+ <li class={resolvedClasses().item}>
64
+ <button
65
+ type="button"
66
+ class={`${resolvedClasses().link} ${currentPage() === 1 ? "pointer-events-none opacity-50" : ""}`}
67
+ aria-label="Go to previous page"
68
+ aria-disabled={currentPage() === 1}
69
+ disabled={currentPage() === 1}
70
+ onClick={() => props.onPageChange?.(currentPage() - 1)}
71
+ >
72
+ <RLSIcon name="chevronLeft" size="sm" aria-hidden="true" />
73
+ </button>
74
+ </li>
75
+
76
+ <For each={pageNumbers()}>
77
+ {(p) => (
78
+ <li class={resolvedClasses().item}>
79
+ {p === "ellipsis" ? (
80
+ <span class={resolvedClasses().ellipsis} aria-hidden="true">
81
+ &hellip;
82
+ </span>
83
+ ) : (
84
+ <button
85
+ type="button"
86
+ class={itemLinkClasses(p === currentPage())}
87
+ aria-current={p === currentPage() ? "page" : undefined}
88
+ onClick={() => props.onPageChange?.(p)}
89
+ >
90
+ {p}
91
+ </button>
92
+ )}
93
+ </li>
94
+ )}
95
+ </For>
96
+
97
+ <li class={resolvedClasses().item}>
98
+ <button
99
+ type="button"
100
+ class={`${resolvedClasses().link} ${currentPage() === totalPages() ? "pointer-events-none opacity-50" : ""}`}
101
+ aria-label="Go to next page"
102
+ aria-disabled={currentPage() === totalPages()}
103
+ disabled={currentPage() === totalPages()}
104
+ onClick={() => props.onPageChange?.(currentPage() + 1)}
105
+ >
106
+ <RLSIcon name="chevronRight" size="sm" aria-hidden="true" />
107
+ </button>
108
+ </li>
109
+ </ul>
110
+ </nav>
111
+ )
112
+ }
113
+
114
+ export default RLSPagination
@@ -0,0 +1,27 @@
1
+ import { createMemo, splitProps, type Component, type JSX } from "solid-js"
2
+ import type { PasswordProps } from "./password"
3
+ import { passwordTheme } from "./password.theme"
4
+
5
+ export interface RLSPasswordProps extends PasswordProps {
6
+ children?: JSX.Element
7
+ }
8
+
9
+ const RLSPassword: Component<RLSPasswordProps> = (allProps) => {
10
+ const [props, rest] = splitProps(allProps, ["ui", "class", "children"])
11
+
12
+ const resolvedClasses = createMemo(() =>
13
+ passwordTheme({
14
+ ui: props.ui,
15
+ class: props.class,
16
+ ...allProps
17
+ })
18
+ )
19
+
20
+ return (
21
+ <div class={resolvedClasses().root} data-slot="root" {...rest}>
22
+ {props.children}
23
+ </div>
24
+ )
25
+ }
26
+
27
+ export default RLSPassword
@@ -0,0 +1,27 @@
1
+ import { createMemo, splitProps, type Component, type JSX } from "solid-js"
2
+ import type { PhoneMockupProps } from "./phone-mockup"
3
+ import { phoneMockupTheme } from "./phone-mockup.theme"
4
+
5
+ export interface RLSPhoneMockupProps extends PhoneMockupProps {
6
+ children?: JSX.Element
7
+ }
8
+
9
+ const RLSPhoneMockup: Component<RLSPhoneMockupProps> = (allProps) => {
10
+ const [props, rest] = splitProps(allProps, ["ui", "class", "children"])
11
+
12
+ const resolvedClasses = createMemo(() =>
13
+ phoneMockupTheme({
14
+ ui: props.ui,
15
+ class: props.class,
16
+ ...allProps
17
+ })
18
+ )
19
+
20
+ return (
21
+ <div class={resolvedClasses().root} data-slot="root" {...rest}>
22
+ {props.children}
23
+ </div>
24
+ )
25
+ }
26
+
27
+ export default RLSPhoneMockup