@rimelight/ui 0.0.29 → 0.0.31
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.
- package/package.json +1 -1
- package/src/components/astro/RLAAlert.astro +60 -0
- package/src/components/astro/RLAAlertDialog.astro +86 -0
- package/src/components/astro/RLAAspectRatio.astro +23 -0
- package/src/components/astro/RLAAvatar.astro +56 -0
- package/src/components/astro/RLAAvatarGroup.astro +19 -0
- package/src/components/astro/RLABadge.astro +31 -0
- package/src/components/astro/RLABreadcrumb.astro +44 -0
- package/src/components/astro/RLACard.astro +74 -0
- package/src/components/astro/RLACarousel.astro +71 -0
- package/src/components/astro/RLAChart.astro +215 -0
- package/src/components/astro/RLACheckbox.astro +51 -0
- package/src/components/astro/RLACollapsible.astro +38 -0
- package/src/components/astro/RLACombobox.astro +131 -0
- package/src/components/astro/RLADialog.astro +95 -0
- package/src/components/astro/RLADrawer.astro +74 -0
- package/src/components/astro/RLADropdownMenu.astro +82 -0
- package/src/components/astro/RLADropzone.astro +134 -0
- package/src/components/astro/RLAField.astro +43 -0
- package/src/components/{Head.astro → astro/RLAHead.astro} +181 -199
- package/src/components/astro/RLAHoverCard.astro +31 -0
- package/src/components/astro/RLAInput.astro +60 -0
- package/src/components/astro/RLAInputGroup.astro +35 -0
- package/src/components/astro/RLAKbd.astro +22 -0
- package/src/components/astro/RLALabel.astro +23 -0
- package/src/components/astro/RLALocaleSelector.astro +110 -0
- package/src/components/astro/RLAMain.astro +28 -0
- package/src/components/astro/RLAMarquee.astro +32 -0
- package/src/components/astro/RLANativeSelect.astro +51 -0
- package/src/components/astro/RLANavigationMenu.astro +136 -0
- package/src/components/astro/RLAPagination.astro +94 -0
- package/src/components/astro/RLAPopover.astro +31 -0
- package/src/components/astro/RLAProgress.astro +43 -0
- package/src/components/astro/RLAResizable.astro +177 -0
- package/src/components/astro/RLAScrollArea.astro +157 -0
- package/src/components/astro/RLASection.astro +0 -1
- package/src/components/astro/RLASelect.astro +109 -0
- package/src/components/astro/RLASeparator.astro +27 -0
- package/src/components/astro/RLASheet.astro +72 -0
- package/src/components/astro/RLASidebar.astro +135 -0
- package/src/components/astro/RLASkeleton.astro +20 -0
- package/src/components/astro/RLASlider.astro +53 -0
- package/src/components/astro/RLASpinner.astro +25 -0
- package/src/components/astro/RLAStickySurface.astro +27 -0
- package/src/components/astro/RLASwitch.astro +49 -0
- package/src/components/astro/RLATable.astro +60 -0
- package/src/components/astro/RLATabs.astro +92 -0
- package/src/components/astro/RLATextarea.astro +42 -0
- package/src/components/astro/RLAThemeSelector.astro +73 -0
- package/src/components/astro/RLAToast.astro +107 -0
- package/src/components/astro/RLAToggle.astro +38 -0
- package/src/components/astro/RLAToggleGroup.astro +30 -0
- package/src/components/astro/RLATooltip.astro +31 -0
- package/src/integrations/ui.ts +1 -0
- package/src/themes/alert.theme.ts +51 -0
- package/src/themes/alertDialog.theme.ts +33 -0
- package/src/themes/aspectRatio.theme.ts +11 -0
- package/src/themes/avatar.theme.ts +28 -0
- package/src/themes/avatarGroup.theme.ts +10 -0
- package/src/themes/badge.theme.ts +61 -0
- package/src/themes/breadcrumb.theme.ts +15 -0
- package/src/themes/card.theme.ts +34 -0
- package/src/themes/carousel.theme.ts +32 -0
- package/src/themes/chart.theme.ts +21 -0
- package/src/themes/checkbox.theme.ts +42 -0
- package/src/themes/collapsible.theme.ts +22 -0
- package/src/themes/combobox.theme.ts +28 -0
- package/src/themes/dialog.theme.ts +37 -0
- package/src/themes/drawer.theme.ts +44 -0
- package/src/themes/dropdownMenu.theme.ts +27 -0
- package/src/themes/dropzone.theme.ts +24 -0
- package/src/themes/field.theme.ts +24 -0
- package/src/themes/hoverCard.theme.ts +27 -0
- package/src/themes/input.theme.ts +36 -0
- package/src/themes/inputGroup.theme.ts +23 -0
- package/src/themes/kbd.theme.ts +24 -0
- package/src/themes/label.theme.ts +20 -0
- package/src/themes/localeSelector.theme.ts +50 -0
- package/src/themes/main.theme.ts +12 -0
- package/src/themes/marquee.theme.ts +27 -0
- package/src/themes/nativeSelect.theme.ts +24 -0
- package/src/themes/navigationMenu.theme.ts +19 -0
- package/src/themes/pagination.theme.ts +26 -0
- package/src/themes/popover.theme.ts +28 -0
- package/src/themes/progress.theme.ts +26 -0
- package/src/themes/resizable.theme.ts +22 -0
- package/src/themes/scrollArea.theme.ts +24 -0
- package/src/themes/section.theme.ts +1 -2
- package/src/themes/select.theme.ts +27 -0
- package/src/themes/separator.theme.ts +19 -0
- package/src/themes/sheet.theme.ts +43 -0
- package/src/themes/sidebar.theme.ts +33 -0
- package/src/themes/skeleton.theme.ts +20 -0
- package/src/themes/slider.theme.ts +28 -0
- package/src/themes/spinner.theme.ts +30 -0
- package/src/themes/stickySurface.theme.ts +10 -0
- package/src/themes/switch.theme.ts +59 -0
- package/src/themes/table.theme.ts +36 -0
- package/src/themes/tabs.theme.ts +44 -0
- package/src/themes/textarea.theme.ts +26 -0
- package/src/themes/themeSelector.theme.ts +16 -0
- package/src/themes/toast.theme.ts +25 -0
- package/src/themes/toggle.theme.ts +42 -0
- package/src/themes/toggleGroup.theme.ts +21 -0
- package/src/themes/tooltip.theme.ts +27 -0
- package/src/types/components/alert-dialog.ts +35 -0
- package/src/types/components/alert.ts +31 -0
- package/src/types/components/aspect-ratio.ts +15 -0
- package/src/types/components/avatar.ts +47 -0
- package/src/types/components/badge.ts +27 -0
- package/src/types/components/breadcrumb.ts +24 -0
- package/src/types/components/card.ts +31 -0
- package/src/types/components/carousel.ts +25 -0
- package/src/types/components/chart.ts +38 -0
- package/src/types/components/checkbox.ts +35 -0
- package/src/types/components/collapsible.ts +31 -0
- package/src/types/components/combobox.ts +43 -0
- package/src/types/components/dialog.ts +39 -0
- package/src/types/components/drawer.ts +31 -0
- package/src/types/components/dropdown-menu.ts +42 -0
- package/src/types/components/dropzone.ts +39 -0
- package/src/types/components/field.ts +31 -0
- package/src/types/components/hover-card.ts +19 -0
- package/src/types/components/index.ts +51 -3
- package/src/types/components/input-group.ts +23 -0
- package/src/types/components/input.ts +59 -0
- package/src/types/components/kbd.ts +15 -0
- package/src/types/components/label.ts +19 -0
- package/src/types/components/localeSelector.ts +33 -0
- package/src/types/components/main.ts +17 -0
- package/src/types/components/marquee.ts +23 -0
- package/src/types/components/native-select.ts +39 -0
- package/src/types/components/navigation-menu.ts +27 -0
- package/src/types/components/pagination.ts +23 -0
- package/src/types/components/popover.ts +23 -0
- package/src/types/components/progress.ts +27 -0
- package/src/types/components/resizable.ts +19 -0
- package/src/types/components/scroll-area.ts +23 -0
- package/src/types/components/select.ts +43 -0
- package/src/types/components/separator.ts +19 -0
- package/src/types/components/sheet.ts +31 -0
- package/src/types/components/sidebar.ts +36 -0
- package/src/types/components/skeleton.ts +15 -0
- package/src/types/components/slider.ts +35 -0
- package/src/types/components/spinner.ts +19 -0
- package/src/types/components/sticky-surface.ts +19 -0
- package/src/types/components/switch.ts +35 -0
- package/src/types/components/table.ts +31 -0
- package/src/types/components/tabs.ts +43 -0
- package/src/types/components/textarea.ts +51 -0
- package/src/types/components/themeSelector.ts +15 -0
- package/src/types/components/toast.ts +35 -0
- package/src/types/components/toggle-group.ts +23 -0
- package/src/types/components/toggle.ts +27 -0
- package/src/types/components/tooltip.ts +23 -0
- package/src/components/ThemeToggle.astro +0 -57
|
@@ -1,199 +1,181 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { ClientRouter } from 'astro:transitions';
|
|
3
|
-
import type { SiteConfig } from '@/config';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
is404
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
? formatCanonicalURL(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
<meta
|
|
119
|
-
<meta name="
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
<
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
{
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
<meta property="og:
|
|
141
|
-
<meta property="og:
|
|
142
|
-
<meta property="og:
|
|
143
|
-
<meta property="og:
|
|
144
|
-
{
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
<meta property="twitter:
|
|
151
|
-
<meta property="twitter:
|
|
152
|
-
<meta property="twitter:
|
|
153
|
-
{
|
|
154
|
-
{
|
|
155
|
-
{
|
|
156
|
-
{twitterHandle && <meta property="twitter:
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
window.localStorage.setItem('theme', theme);
|
|
183
|
-
</script>
|
|
184
|
-
|
|
185
|
-
<script>
|
|
186
|
-
document.addEventListener('astro:after-swap', () => {
|
|
187
|
-
if (localStorage.getItem('theme') === 'dark') {
|
|
188
|
-
document.documentElement.classList.add('dark');
|
|
189
|
-
} else {
|
|
190
|
-
document.documentElement.classList.remove('dark');
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
</script>
|
|
194
|
-
|
|
195
|
-
{transitions && <ClientRouter />}
|
|
196
|
-
|
|
197
|
-
<App client:load>
|
|
198
|
-
<slot />
|
|
199
|
-
</App>
|
|
1
|
+
---
|
|
2
|
+
import { ClientRouter } from 'astro:transitions';
|
|
3
|
+
import type { SiteConfig } from '@/config';
|
|
4
|
+
|
|
5
|
+
export interface OGImage {
|
|
6
|
+
/** Image URL (relative or absolute) */
|
|
7
|
+
src: string;
|
|
8
|
+
/** Alt text for the image */
|
|
9
|
+
alt: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface RSSFeed {
|
|
13
|
+
/** RSS feed URL */
|
|
14
|
+
href: string;
|
|
15
|
+
/** Feed title (defaults to "RSS") */
|
|
16
|
+
title?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface HeadProps {
|
|
20
|
+
/** Page title */
|
|
21
|
+
title?: string;
|
|
22
|
+
/** Page description */
|
|
23
|
+
description?: string;
|
|
24
|
+
/** Open Graph image with alt text */
|
|
25
|
+
ogImage?: OGImage;
|
|
26
|
+
/** Open Graph type (e.g., "website", "article") */
|
|
27
|
+
ogType?: string;
|
|
28
|
+
/** Open Graph locale (defaults to "en_US") */
|
|
29
|
+
ogLocale?: string;
|
|
30
|
+
/** Whether to prevent indexing */
|
|
31
|
+
noindex?: boolean;
|
|
32
|
+
/** Whether this is a 404 page */
|
|
33
|
+
is404?: boolean;
|
|
34
|
+
/** Robots metadata (overrides noindex/is404 logic if provided) */
|
|
35
|
+
robots?: string;
|
|
36
|
+
/** Canonical URL */
|
|
37
|
+
canonical?: string;
|
|
38
|
+
/** Language alternates for i18n */
|
|
39
|
+
languageAlternates?: Array<{ hreflang: string; href: string }>;
|
|
40
|
+
/** Site configuration for defaults */
|
|
41
|
+
config?: SiteConfig;
|
|
42
|
+
/** Whether to enable View Transitions (ClientRouter) */
|
|
43
|
+
transitions?: boolean;
|
|
44
|
+
/** Meta charset */
|
|
45
|
+
charset?: string;
|
|
46
|
+
/** Meta viewport */
|
|
47
|
+
viewport?: string;
|
|
48
|
+
/** RSS feed configuration */
|
|
49
|
+
rssFeed?: RSSFeed;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const {
|
|
53
|
+
title,
|
|
54
|
+
description,
|
|
55
|
+
ogImage,
|
|
56
|
+
ogType = 'website',
|
|
57
|
+
ogLocale = 'en_US',
|
|
58
|
+
noindex = false,
|
|
59
|
+
is404 = false,
|
|
60
|
+
robots,
|
|
61
|
+
canonical,
|
|
62
|
+
languageAlternates = [],
|
|
63
|
+
config,
|
|
64
|
+
transitions = true,
|
|
65
|
+
charset = 'utf-8',
|
|
66
|
+
viewport = 'width=device-width,initial-scale=1',
|
|
67
|
+
rssFeed,
|
|
68
|
+
} = Astro.props as HeadProps;
|
|
69
|
+
|
|
70
|
+
// Resolve defaults from config if available
|
|
71
|
+
const siteName = config?.name || 'Rimelight';
|
|
72
|
+
const siteDescription = config?.description || '';
|
|
73
|
+
const ogImageFallback = config?.seo?.ogImageFallback || config?.ogImage || '';
|
|
74
|
+
const themeColor = config?.branding?.colors?.themeColor;
|
|
75
|
+
const favicon = config?.branding?.favicon?.svg || '/favicon.svg';
|
|
76
|
+
const twitterHandle = config?.seo?.authorHandle;
|
|
77
|
+
const titleTemplate = config?.seo?.titleTemplate || `%s | ${siteName}`;
|
|
78
|
+
|
|
79
|
+
// Calculated Values
|
|
80
|
+
const displayTitle = is404
|
|
81
|
+
? `404 - Not Found | ${siteName}`
|
|
82
|
+
: title
|
|
83
|
+
? titleTemplate.replace('%s', title)
|
|
84
|
+
: siteName;
|
|
85
|
+
|
|
86
|
+
const finalDescription = description || siteDescription;
|
|
87
|
+
const safeDescription = finalDescription && config?.seo?.maxDescriptionLength
|
|
88
|
+
? (finalDescription.length > config.seo.maxDescriptionLength
|
|
89
|
+
? finalDescription.slice(0, config.seo.maxDescriptionLength - 3) + '...'
|
|
90
|
+
: finalDescription)
|
|
91
|
+
: finalDescription;
|
|
92
|
+
|
|
93
|
+
const finalOgImage = ogImage || (ogImageFallback ? { src: ogImageFallback, alt: siteName } : undefined);
|
|
94
|
+
const absoluteOgImage = finalOgImage
|
|
95
|
+
? new URL(finalOgImage.src, Astro.site).toString()
|
|
96
|
+
: undefined;
|
|
97
|
+
|
|
98
|
+
function formatCanonicalURL(url: string | URL) {
|
|
99
|
+
const resolved = new URL(url, Astro.site);
|
|
100
|
+
const path = resolved.toString();
|
|
101
|
+
const hasQueryParams = path.includes('?');
|
|
102
|
+
if (hasQueryParams) {
|
|
103
|
+
return path.replace(/\/?$/, '');
|
|
104
|
+
}
|
|
105
|
+
return path.replace(/\/?$/, '/');
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const finalCanonical = canonical
|
|
109
|
+
? formatCanonicalURL(canonical)
|
|
110
|
+
: (!is404 ? formatCanonicalURL(Astro.url) : undefined);
|
|
111
|
+
|
|
112
|
+
const isIndexable = !noindex && !is404;
|
|
113
|
+
const defaultRobots = isIndexable ? 'index, follow, max-image-preview:large' : 'noindex, nofollow';
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
<!-- Basic Metadata -->
|
|
117
|
+
<meta charset={charset} />
|
|
118
|
+
<meta name="viewport" content={viewport} />
|
|
119
|
+
<meta name="generator" content={Astro.generator} />
|
|
120
|
+
|
|
121
|
+
<!-- Sitemap -->
|
|
122
|
+
<link rel="sitemap" href="/sitemap-index.xml" />
|
|
123
|
+
|
|
124
|
+
<!-- RSS Feed -->
|
|
125
|
+
{rssFeed && <link rel="alternate" type="application/rss+xml" href={rssFeed.href} title={rssFeed.title || 'RSS'} />}
|
|
126
|
+
|
|
127
|
+
<!-- SEO -->
|
|
128
|
+
<title>{displayTitle}</title>
|
|
129
|
+
{safeDescription && <meta name="description" content={safeDescription} />}
|
|
130
|
+
<meta name="robots" content={robots || defaultRobots} />
|
|
131
|
+
{finalCanonical && <link rel="canonical" href={finalCanonical} />}
|
|
132
|
+
|
|
133
|
+
<!-- i18n Alternates -->
|
|
134
|
+
{languageAlternates.map((alt) => (
|
|
135
|
+
<link rel="alternate" hreflang={alt.hreflang} href={alt.href} />
|
|
136
|
+
))}
|
|
137
|
+
|
|
138
|
+
<!-- Open Graph / Facebook -->
|
|
139
|
+
<meta property="og:type" content={ogType} />
|
|
140
|
+
<meta property="og:locale" content={ogLocale} />
|
|
141
|
+
<meta property="og:url" content={Astro.url.href} />
|
|
142
|
+
<meta property="og:title" content={title || siteName} />
|
|
143
|
+
{safeDescription && <meta property="og:description" content={safeDescription} />}
|
|
144
|
+
{absoluteOgImage && <meta property="og:image" content={absoluteOgImage} />}
|
|
145
|
+
{finalOgImage && <meta property="og:image:alt" content={finalOgImage.alt} />}
|
|
146
|
+
<meta property="og:site_name" content={siteName} />
|
|
147
|
+
|
|
148
|
+
<!-- Twitter -->
|
|
149
|
+
<meta property="twitter:card" content="summary_large_image" />
|
|
150
|
+
<meta property="twitter:url" content={Astro.url.href} />
|
|
151
|
+
<meta property="twitter:title" content={title || siteName} />
|
|
152
|
+
{safeDescription && <meta property="twitter:description" content={safeDescription} />}
|
|
153
|
+
{absoluteOgImage && <meta property="twitter:image" content={absoluteOgImage} />}
|
|
154
|
+
{finalOgImage && <meta property="twitter:image:alt" content={finalOgImage.alt} />}
|
|
155
|
+
{twitterHandle && <meta property="twitter:site" content={twitterHandle} />}
|
|
156
|
+
{twitterHandle && <meta property="twitter:creator" content={twitterHandle} />}
|
|
157
|
+
|
|
158
|
+
<!-- Icons -->
|
|
159
|
+
<link rel="icon" type="image/svg+xml" href={favicon} />
|
|
160
|
+
|
|
161
|
+
<!-- Theme -->
|
|
162
|
+
{themeColor && <meta name="theme-color" content={themeColor} />}
|
|
163
|
+
|
|
164
|
+
<script is:inline>
|
|
165
|
+
(function() {
|
|
166
|
+
const stored = localStorage.getItem('theme');
|
|
167
|
+
if (stored) {
|
|
168
|
+
if (stored === 'dark') {
|
|
169
|
+
document.documentElement.classList.add('dark');
|
|
170
|
+
} else {
|
|
171
|
+
document.documentElement.classList.remove('dark');
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
175
|
+
document.documentElement.classList.add('dark');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
})();
|
|
179
|
+
</script>
|
|
180
|
+
|
|
181
|
+
{transitions && <ClientRouter />}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { scv } from "css-variants"
|
|
3
|
+
import { useUi, resolveClasses } from "../../utils"
|
|
4
|
+
import type { HoverCardProps } from "../../types"
|
|
5
|
+
import hoverCardTheme from "../../themes/hoverCard.theme"
|
|
6
|
+
|
|
7
|
+
const hoverCard = scv(hoverCardTheme)
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
triggerLabel,
|
|
11
|
+
placement = "bottom",
|
|
12
|
+
ui: uiProp,
|
|
13
|
+
class: className,
|
|
14
|
+
...rest
|
|
15
|
+
} = Astro.props as HoverCardProps
|
|
16
|
+
|
|
17
|
+
const classes = resolveClasses(hoverCard, {
|
|
18
|
+
placement
|
|
19
|
+
}, useUi("hoverCard", uiProp), className)
|
|
20
|
+
---
|
|
21
|
+
<div class={classes.root} data-slot="hover-card-container" {...rest}>
|
|
22
|
+
<div class={classes.trigger} data-slot="trigger" tabindex="0">
|
|
23
|
+
<slot name="trigger">
|
|
24
|
+
{triggerLabel && <span class="cursor-help underline decoration-dotted">{triggerLabel}</span>}
|
|
25
|
+
</slot>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<div class={classes.content} data-slot="content">
|
|
29
|
+
<slot />
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { scv } from "css-variants"
|
|
3
|
+
import { useUi, resolveClasses } from "../../utils"
|
|
4
|
+
import type { InputProps } from "../../types"
|
|
5
|
+
import inputThemeDefault, { createInputTheme } from "../../themes/input.theme"
|
|
6
|
+
|
|
7
|
+
const inputTheme = inputThemeDefault
|
|
8
|
+
const input = scv(inputTheme)
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
type = "text",
|
|
12
|
+
value = "",
|
|
13
|
+
placeholder,
|
|
14
|
+
disabled = false,
|
|
15
|
+
readonly = false,
|
|
16
|
+
name,
|
|
17
|
+
required = false,
|
|
18
|
+
error = false,
|
|
19
|
+
leadingIcon,
|
|
20
|
+
trailingIcon,
|
|
21
|
+
size = "md",
|
|
22
|
+
color = "primary",
|
|
23
|
+
ui: uiProp,
|
|
24
|
+
class: className,
|
|
25
|
+
...rest
|
|
26
|
+
} = Astro.props as InputProps
|
|
27
|
+
|
|
28
|
+
const hasLeading = !!leadingIcon
|
|
29
|
+
const hasTrailing = !!trailingIcon
|
|
30
|
+
|
|
31
|
+
const classes = resolveClasses(input, {
|
|
32
|
+
size,
|
|
33
|
+
hasLeading,
|
|
34
|
+
hasTrailing,
|
|
35
|
+
error: !!error
|
|
36
|
+
}, useUi("input", uiProp), className);
|
|
37
|
+
---
|
|
38
|
+
<div class={classes.root} data-slot="root">
|
|
39
|
+
{leadingIcon && (
|
|
40
|
+
<span class={classes.leading} data-slot="leading-icon">
|
|
41
|
+
<span class={leadingIcon} />
|
|
42
|
+
</span>
|
|
43
|
+
)}
|
|
44
|
+
<input
|
|
45
|
+
type={type}
|
|
46
|
+
class={classes.input}
|
|
47
|
+
value={value}
|
|
48
|
+
placeholder={placeholder}
|
|
49
|
+
disabled={disabled}
|
|
50
|
+
readonly={readonly}
|
|
51
|
+
name={name}
|
|
52
|
+
required={required}
|
|
53
|
+
{...rest}
|
|
54
|
+
/>
|
|
55
|
+
{trailingIcon && (
|
|
56
|
+
<span class={classes.trailing} data-slot="trailing-icon">
|
|
57
|
+
<span class={trailingIcon} />
|
|
58
|
+
</span>
|
|
59
|
+
)}
|
|
60
|
+
</div>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { scv } from "css-variants"
|
|
3
|
+
import { useUi, resolveClasses } from "../../utils"
|
|
4
|
+
import type { InputGroupProps } from "../../types"
|
|
5
|
+
import inputGroupThemeDefault, { createInputGroupTheme } from "../../themes/inputGroup.theme"
|
|
6
|
+
|
|
7
|
+
const inputGroupTheme = inputGroupThemeDefault
|
|
8
|
+
const inputGroup = scv(inputGroupTheme)
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
prepend,
|
|
12
|
+
append,
|
|
13
|
+
size = "md",
|
|
14
|
+
ui: uiProp,
|
|
15
|
+
class: className,
|
|
16
|
+
...rest
|
|
17
|
+
} = Astro.props as InputGroupProps
|
|
18
|
+
|
|
19
|
+
const classes = resolveClasses(inputGroup, {
|
|
20
|
+
size
|
|
21
|
+
}, useUi("inputGroup", uiProp), className);
|
|
22
|
+
---
|
|
23
|
+
<div class={classes.root} data-slot="root" {...rest}>
|
|
24
|
+
{prepend && (
|
|
25
|
+
<div class={classes.prepend} data-slot="prepend">
|
|
26
|
+
{prepend}
|
|
27
|
+
</div>
|
|
28
|
+
)}
|
|
29
|
+
<slot />
|
|
30
|
+
{append && (
|
|
31
|
+
<div class={classes.append} data-slot="append">
|
|
32
|
+
{append}
|
|
33
|
+
</div>
|
|
34
|
+
)}
|
|
35
|
+
</div>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { scv } from "css-variants"
|
|
3
|
+
import { useUi, resolveClasses } from "../../utils"
|
|
4
|
+
import type { KbdProps } from "../../types"
|
|
5
|
+
import kbdTheme from "../../themes/kbd.theme"
|
|
6
|
+
|
|
7
|
+
const kbd = scv(kbdTheme)
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
size = "md",
|
|
11
|
+
ui: uiProp,
|
|
12
|
+
class: className,
|
|
13
|
+
...rest
|
|
14
|
+
} = Astro.props as KbdProps
|
|
15
|
+
|
|
16
|
+
const classes = resolveClasses(kbd, {
|
|
17
|
+
size
|
|
18
|
+
}, useUi("kbd", uiProp), className)
|
|
19
|
+
---
|
|
20
|
+
<kbd class={classes.root} data-slot="root" {...rest}>
|
|
21
|
+
<slot />
|
|
22
|
+
</kbd>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { scv } from "css-variants"
|
|
3
|
+
import { useUi, resolveClasses } from "../../utils"
|
|
4
|
+
import type { LabelProps } from "../../types"
|
|
5
|
+
import labelTheme from "../../themes/label.theme"
|
|
6
|
+
|
|
7
|
+
const label = scv(labelTheme)
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
for: htmlFor,
|
|
11
|
+
size = "md",
|
|
12
|
+
ui: uiProp,
|
|
13
|
+
class: className,
|
|
14
|
+
...rest
|
|
15
|
+
} = Astro.props as LabelProps
|
|
16
|
+
|
|
17
|
+
const classes = resolveClasses(label, {
|
|
18
|
+
size
|
|
19
|
+
}, useUi("label", uiProp), className)
|
|
20
|
+
---
|
|
21
|
+
<label class={classes.root} data-slot="root" for={htmlFor} {...rest}>
|
|
22
|
+
<slot />
|
|
23
|
+
</label>
|