radiant-docs 0.1.37 → 0.1.39
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/template/astro.config.mjs +2 -0
- package/template/src/components/Footer.astro +1 -1
- package/template/src/components/Header.astro +8 -8
- package/template/src/components/OpenApiPage.astro +18 -18
- package/template/src/components/Search.astro +18 -18
- package/template/src/components/Sidebar.astro +4 -2
- package/template/src/components/SidebarDropdown.astro +82 -79
- package/template/src/components/SidebarSegmented.astro +5 -5
- package/template/src/components/TableOfContents.astro +24 -15
- package/template/src/components/ThemeSwitcher.astro +15 -8
- package/template/src/components/chat/AskAiWidget.tsx +4 -3
- package/template/src/components/endpoint/PlaygroundBar.astro +3 -3
- package/template/src/components/endpoint/PlaygroundButton.astro +2 -2
- package/template/src/components/endpoint/PlaygroundField.astro +53 -53
- package/template/src/components/endpoint/PlaygroundForm.astro +38 -22
- package/template/src/components/endpoint/RequestSnippets.astro +54 -21
- package/template/src/components/endpoint/ResponseDisplay.astro +24 -24
- package/template/src/components/endpoint/ResponseFieldTree.astro +12 -12
- package/template/src/components/endpoint/ResponseFields.astro +19 -19
- package/template/src/components/endpoint/ResponseSnippets.astro +66 -29
- package/template/src/components/ui/CodeTabEdge.astro +6 -4
- package/template/src/components/ui/Field.astro +7 -7
- package/template/src/components/ui/demo/Demo.astro +1 -1
- package/template/src/components/user/Accordion.astro +3 -3
- package/template/src/components/user/Callout.astro +8 -8
- package/template/src/components/user/CodeBlock.astro +63 -25
- package/template/src/components/user/CodeGroup.astro +259 -22
- package/template/src/components/user/ComponentPreviewBlock.astro +36 -10
- package/template/src/components/user/Image.astro +2 -2
- package/template/src/components/user/Step.astro +4 -4
- package/template/src/components/user/Tab.astro +1 -1
- package/template/src/components/user/Tabs.astro +142 -42
- package/template/src/layouts/Layout.astro +1 -1
- package/template/src/lib/code/code-block.ts +150 -15
- package/template/src/lib/mdx/remark-resolve-internal-links.ts +639 -0
- package/template/src/pages/404.astro +44 -0
- package/template/src/styles/global.css +51 -19
|
@@ -33,15 +33,15 @@ for (const heading of headings) {
|
|
|
33
33
|
aria-label="Table of Contents"
|
|
34
34
|
data-slugs={JSON.stringify(headings.map((h) => h.slug))}
|
|
35
35
|
>
|
|
36
|
-
<div class="text-sm font-medium mb-3">On this page</div>
|
|
37
|
-
<div class="flex text-neutral-600/90">
|
|
36
|
+
<div class="text-sm font-medium mb-3 text-neutral-900 dark:text-neutral-100">On this page</div>
|
|
37
|
+
<div class="flex text-neutral-600/90 dark:text-neutral-300/90">
|
|
38
38
|
<svg viewBox="0 0 22 100" width="22px" height="100" class="shrink-0">
|
|
39
39
|
<path
|
|
40
40
|
id="toc-bg-path"
|
|
41
41
|
d=""
|
|
42
42
|
stroke-width="1.2"
|
|
43
43
|
vector-effect="non-scaling-stroke"
|
|
44
|
-
class="stroke-neutral-200"
|
|
44
|
+
class="stroke-neutral-200 dark:stroke-neutral-700/70"
|
|
45
45
|
fill="none"
|
|
46
46
|
stroke-linecap="round"
|
|
47
47
|
stroke-linejoin="round"></path>
|
|
@@ -50,7 +50,7 @@ for (const heading of headings) {
|
|
|
50
50
|
d=""
|
|
51
51
|
stroke-width="1.4"
|
|
52
52
|
vector-effect="non-scaling-stroke"
|
|
53
|
-
class="stroke-
|
|
53
|
+
class="stroke-neutral-700/70 dark:stroke-neutral-300/80 transition-[stroke-dasharray] duration-200"
|
|
54
54
|
fill="none"
|
|
55
55
|
stroke-linecap="round"
|
|
56
56
|
stroke-linejoin="round"></path>
|
|
@@ -63,7 +63,7 @@ for (const heading of headings) {
|
|
|
63
63
|
{heading.text && (
|
|
64
64
|
<a
|
|
65
65
|
href={`#${heading.slug}`}
|
|
66
|
-
class="block transition duration-200 hover:text-neutral-900"
|
|
66
|
+
class="block transition duration-200 hover:text-neutral-900 dark:hover:text-neutral-100"
|
|
67
67
|
data-slug={heading.slug}
|
|
68
68
|
>
|
|
69
69
|
{heading.text}
|
|
@@ -75,7 +75,7 @@ for (const heading of headings) {
|
|
|
75
75
|
<li class:list={["", heading.text ? "mt-3" : "mt-0"]}>
|
|
76
76
|
<a
|
|
77
77
|
href={`#${subHeading.slug}`}
|
|
78
|
-
class="block transition duration-200 hover:text-neutral-900"
|
|
78
|
+
class="block transition duration-200 hover:text-neutral-900 dark:hover:text-neutral-100"
|
|
79
79
|
data-slug={subHeading.slug}
|
|
80
80
|
>
|
|
81
81
|
{subHeading.text}
|
|
@@ -239,10 +239,11 @@ for (const heading of headings) {
|
|
|
239
239
|
);
|
|
240
240
|
circle.setAttribute("cx", String(item.x));
|
|
241
241
|
circle.setAttribute("cy", String(midY));
|
|
242
|
-
circle.setAttribute("r", "2.
|
|
242
|
+
circle.setAttribute("r", "2.25");
|
|
243
243
|
circle.setAttribute("fill", "currentColor");
|
|
244
244
|
circle.classList.add(
|
|
245
245
|
"fill-neutral-300",
|
|
246
|
+
"dark:fill-neutral-600",
|
|
246
247
|
"transition-all",
|
|
247
248
|
"duration-200"
|
|
248
249
|
);
|
|
@@ -328,13 +329,21 @@ for (const heading of headings) {
|
|
|
328
329
|
circles?.forEach((circle) => {
|
|
329
330
|
const slug = (circle as SVGCircleElement).dataset.slug;
|
|
330
331
|
if (slug && visibleSlugs.has(slug)) {
|
|
331
|
-
circle.classList.remove("fill-neutral-300");
|
|
332
|
-
circle.classList.add(
|
|
333
|
-
|
|
332
|
+
circle.classList.remove("fill-neutral-300", "dark:fill-neutral-600");
|
|
333
|
+
circle.classList.add(
|
|
334
|
+
"fill-neutral-700",
|
|
335
|
+
"dark:fill-neutral-200",
|
|
336
|
+
"delay-100"
|
|
337
|
+
);
|
|
338
|
+
circle.setAttribute("r", "2.75");
|
|
334
339
|
} else {
|
|
335
|
-
circle.classList.remove(
|
|
336
|
-
|
|
337
|
-
|
|
340
|
+
circle.classList.remove(
|
|
341
|
+
"fill-neutral-700",
|
|
342
|
+
"dark:fill-neutral-200",
|
|
343
|
+
"delay-100"
|
|
344
|
+
);
|
|
345
|
+
circle.classList.add("fill-neutral-300", "dark:fill-neutral-600");
|
|
346
|
+
circle.setAttribute("r", "2.25");
|
|
338
347
|
}
|
|
339
348
|
});
|
|
340
349
|
|
|
@@ -343,9 +352,9 @@ for (const heading of headings) {
|
|
|
343
352
|
tocLinks?.forEach((link) => {
|
|
344
353
|
const slug = (link as HTMLAnchorElement).dataset.slug;
|
|
345
354
|
if (slug && visibleSlugs.has(slug)) {
|
|
346
|
-
link.classList.add("text-neutral-900");
|
|
355
|
+
link.classList.add("text-neutral-900", "dark:text-neutral-100");
|
|
347
356
|
} else {
|
|
348
|
-
link.classList.remove("text-neutral-900");
|
|
357
|
+
link.classList.remove("text-neutral-900", "dark:text-neutral-100");
|
|
349
358
|
}
|
|
350
359
|
});
|
|
351
360
|
}
|
|
@@ -9,6 +9,7 @@ import { Icon } from "astro-icon/components";
|
|
|
9
9
|
return mode === 'light' || mode === 'dark' ? mode : null;
|
|
10
10
|
})(),
|
|
11
11
|
theme: localStorage.getItem('theme') || 'system',
|
|
12
|
+
themeSwitchFrameId: null,
|
|
12
13
|
init() {
|
|
13
14
|
if (this.forcedTheme) {
|
|
14
15
|
this.theme = this.forcedTheme;
|
|
@@ -43,16 +44,22 @@ import { Icon } from "astro-icon/components";
|
|
|
43
44
|
});
|
|
44
45
|
},
|
|
45
46
|
updateDOM() {
|
|
46
|
-
document.documentElement
|
|
47
|
+
const root = document.documentElement;
|
|
48
|
+
root.classList.add('is-switching-theme');
|
|
47
49
|
const activeTheme = this.forcedTheme || this.theme;
|
|
48
50
|
const isDark = activeTheme === 'dark' ||
|
|
49
51
|
(activeTheme === 'system' && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
root.classList.toggle('dark', isDark);
|
|
54
|
+
root.dataset.theme = isDark ? 'dark' : 'light';
|
|
55
|
+
|
|
56
|
+
if (this.themeSwitchFrameId !== null) {
|
|
57
|
+
cancelAnimationFrame(this.themeSwitchFrameId);
|
|
58
|
+
}
|
|
59
|
+
this.themeSwitchFrameId = requestAnimationFrame(() => {
|
|
60
|
+
root.classList.remove('is-switching-theme');
|
|
61
|
+
this.themeSwitchFrameId = null;
|
|
62
|
+
});
|
|
56
63
|
},
|
|
57
64
|
markerStyle: { left: null, width: null },
|
|
58
65
|
updateMarker() {
|
|
@@ -67,10 +74,10 @@ import { Icon } from "astro-icon/components";
|
|
|
67
74
|
}
|
|
68
75
|
}
|
|
69
76
|
}"
|
|
70
|
-
class="relative flex gap-[3px] p-px bg-
|
|
77
|
+
class="relative flex gap-[3px] p-px bg-background-dark dark:bg-neutral-800/40 rounded-full w-fit text-neutral-500"
|
|
71
78
|
>
|
|
72
79
|
<div
|
|
73
|
-
class="anchor-pill absolute top-px bottom-px bg-white dark:bg-neutral-
|
|
80
|
+
class="anchor-pill absolute top-px dark:top-0.5 bottom-px dark:bottom-0.5 bg-white dark:bg-neutral-800 rounded-full shadow-xs border-[0.5px] border-neutral-200/80 dark:border-neutral-700/50 ease-out z-0 flex items-center justify-center animate-[scaleIn_0.5s_ease-out]"
|
|
74
81
|
style="left: 3px;"
|
|
75
82
|
:style="markerStyle.width ? `left: ${markerStyle.left}; width: ${markerStyle.width}` : ''"
|
|
76
83
|
>
|
|
@@ -1707,10 +1707,10 @@ export default function AskAiWidget({
|
|
|
1707
1707
|
}
|
|
1708
1708
|
`}</style>
|
|
1709
1709
|
{!isOpen ? (
|
|
1710
|
-
<div className="fixed bottom-5 right-
|
|
1710
|
+
<div className="fixed bottom-5 right-5 size-12 z-40 bg-background rounded-full hover:scale-105 transition duration-300 ease-in-out">
|
|
1711
1711
|
<button
|
|
1712
1712
|
type="button"
|
|
1713
|
-
className="w-full h-full inline-flex items-center justify-center gap-2 rounded-full bg-linear-to-b from-neutral-900/85 to-neutral-900 shadow-xl dark:
|
|
1713
|
+
className="w-full h-full inline-flex items-center justify-center gap-2 rounded-full bg-linear-to-b from-neutral-900/85 to-neutral-900 dark:from-neutral-100 dark:to-neutral-200 shadow-xl dark:shadow-white/5 cursor-pointer"
|
|
1714
1714
|
onClick={() => handleOpenChange(true)}
|
|
1715
1715
|
data-pagefind-ignore
|
|
1716
1716
|
>
|
|
@@ -1729,6 +1729,7 @@ export default function AskAiWidget({
|
|
|
1729
1729
|
open={isOpen}
|
|
1730
1730
|
onOpenChange={handleOpenChange}
|
|
1731
1731
|
disablePreventScroll={true}
|
|
1732
|
+
repositionInputs={false}
|
|
1732
1733
|
>
|
|
1733
1734
|
<Drawer.Portal>
|
|
1734
1735
|
<Drawer.Overlay className="fixed inset-0 z-50 bg-black/40" />
|
|
@@ -1743,7 +1744,7 @@ export default function AskAiWidget({
|
|
|
1743
1744
|
</Drawer.Root>
|
|
1744
1745
|
) : isOpen ? (
|
|
1745
1746
|
<div
|
|
1746
|
-
className="fixed bottom-4 right-
|
|
1747
|
+
className="fixed bottom-4 right-4 z-50"
|
|
1747
1748
|
data-pagefind-ignore
|
|
1748
1749
|
onWheelCapture={handleDesktopWheelCapture}
|
|
1749
1750
|
>
|
|
@@ -12,7 +12,7 @@ const { route, serverUrl } = Astro.props;
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
<div
|
|
15
|
-
class="min-w-0 flex-1 flex items-center p-1 border bg-white rounded-xl shadow-xs overflow-hidden"
|
|
15
|
+
class="min-w-0 flex-1 flex items-center p-1 border border-neutral-200 bg-white rounded-xl shadow-xs overflow-hidden dark:border-neutral-800 dark:bg-(--rd-code-surface)"
|
|
16
16
|
>
|
|
17
17
|
<span
|
|
18
18
|
class:list={[
|
|
@@ -23,7 +23,7 @@ const { route, serverUrl } = Astro.props;
|
|
|
23
23
|
{route.openApiMethod}
|
|
24
24
|
</span>
|
|
25
25
|
<code
|
|
26
|
-
class="group flex-1 mx-2 h-[30px] flex items-center text-[13px] text-neutral-600 min-w-0 relative cursor-pointer"
|
|
26
|
+
class="group flex-1 mx-2 h-[30px] flex items-center text-[13px] text-neutral-600 dark:text-neutral-300 min-w-0 relative cursor-pointer"
|
|
27
27
|
@click="copyPath()"
|
|
28
28
|
x-data=`{
|
|
29
29
|
copied: false,
|
|
@@ -45,7 +45,7 @@ const { route, serverUrl } = Astro.props;
|
|
|
45
45
|
{route.openApiPath}
|
|
46
46
|
</span>
|
|
47
47
|
<div
|
|
48
|
-
class="absolute right-0 top-1/2 -translate-y-1/2 flex items-center gap-1 text-[12px] px-1.5 py-px bg-white border border-neutral-200 rounded-md duration-200 opacity-0 scale-75 group-hover:scale-100 group-hover:opacity-100 group-hover:duration-200 group-hover:ease-out group-hover:delay-75"
|
|
48
|
+
class="absolute right-0 top-1/2 -translate-y-1/2 flex items-center gap-1 text-[12px] px-1.5 py-px bg-white border border-neutral-200 rounded-md duration-200 opacity-0 scale-75 group-hover:scale-100 group-hover:opacity-100 group-hover:duration-200 group-hover:ease-out group-hover:delay-75 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-300"
|
|
49
49
|
>
|
|
50
50
|
<Icon
|
|
51
51
|
name="lucide:copy"
|
|
@@ -38,7 +38,7 @@ import { Icon } from "astro-icon/components";
|
|
|
38
38
|
>
|
|
39
39
|
<button
|
|
40
40
|
x-on:click="open = true"
|
|
41
|
-
class="font-[350]
|
|
41
|
+
class="font-[350] dark:font-[450] flex h-8 items-center gap-2 rounded-lg [corner-shape:superellipse(1.2)] bg-linear-to-b from-neutral-900/85 to-neutral-900 dark:from-neutral-100 dark:to-neutral-200 px-3 text-[13px] text-white dark:text-neutral-950 shadow-sm transition-all duration-200 whitespace-nowrap cursor-pointer"
|
|
42
42
|
>
|
|
43
43
|
<Icon class="-ml-px size-3.5" name="lucide:square-mouse-pointer" />
|
|
44
44
|
Try it
|
|
@@ -71,7 +71,7 @@ import { Icon } from "astro-icon/components";
|
|
|
71
71
|
x-on:click.stop
|
|
72
72
|
x-on:pointerdown.stop="backdropInteractionStarted = false"
|
|
73
73
|
x-trap.noscroll.inert="open"
|
|
74
|
-
class="relative flex max-h-[calc(100dvh-4rem)] max-w-7xl w-full overflow-hidden rounded-xl bg-white p-4 sm:p-6 pb-0! shadow-lg"
|
|
74
|
+
class="relative flex max-h-[calc(100dvh-4rem)] max-w-7xl w-full overflow-hidden rounded-xl bg-white p-4 sm:p-6 pb-0! shadow-lg dark:bg-neutral-900"
|
|
75
75
|
>
|
|
76
76
|
<slot />
|
|
77
77
|
</div>
|
|
@@ -644,19 +644,19 @@ const layoutClass = isObjectLikeField
|
|
|
644
644
|
x-for={`(mapKey, mapIndex) in getMapEntryKeys()`}
|
|
645
645
|
:key={`${fieldNameKey} + '-map-' + mapKey + '-' + mapIndex`}
|
|
646
646
|
>
|
|
647
|
-
<div class="rounded-lg border border-neutral-200 bg-neutral-50/50 p-2.5">
|
|
647
|
+
<div class="rounded-lg border border-neutral-200 bg-neutral-50/50 p-2.5 dark:border-neutral-800 dark:bg-neutral-900/50">
|
|
648
648
|
<div class="mb-2 flex items-center gap-2">
|
|
649
649
|
<input
|
|
650
650
|
type="text"
|
|
651
651
|
:value="mapKey"
|
|
652
652
|
@change="renameMapKey(mapKey, $event.target.value)"
|
|
653
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200 bg-white"
|
|
653
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200 bg-white dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-200 dark:placeholder:text-neutral-500 dark:focus:border-neutral-600"
|
|
654
654
|
placeholder="Property key"
|
|
655
655
|
/>
|
|
656
656
|
<button
|
|
657
657
|
type="button"
|
|
658
658
|
@click="removeMapEntry(mapKey)"
|
|
659
|
-
class="h-[31px] px-2 rounded-md border border-neutral-200 text-neutral-500 hover:text-neutral-700 hover:border-neutral-300 hover:bg-white transition-colors duration-200 cursor-pointer"
|
|
659
|
+
class="h-[31px] px-2 rounded-md border border-neutral-200 text-neutral-500 hover:text-neutral-700 hover:border-neutral-300 hover:bg-white transition-colors duration-200 cursor-pointer dark:border-neutral-700 dark:text-neutral-400 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/70 dark:hover:text-neutral-200"
|
|
660
660
|
aria-label={`Remove ${field.name} key`}
|
|
661
661
|
>
|
|
662
662
|
<Icon class="size-4" name="lucide:x" />
|
|
@@ -668,7 +668,7 @@ const layoutClass = isObjectLikeField
|
|
|
668
668
|
rows="3"
|
|
669
669
|
:value="getMapJsonValue(mapKey)"
|
|
670
670
|
@input="setMapJsonValue(mapKey, $event.target.value)"
|
|
671
|
-
class="w-full px-3 py-2 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200 bg-white font-mono"
|
|
671
|
+
class="w-full px-3 py-2 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200 bg-white font-mono dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-200 dark:placeholder:text-neutral-500 dark:focus:border-neutral-600"
|
|
672
672
|
placeholder="JSON value"
|
|
673
673
|
/>
|
|
674
674
|
) : field.enum && field.enum.length > 0 ? (
|
|
@@ -676,8 +676,8 @@ const layoutClass = isObjectLikeField
|
|
|
676
676
|
<select
|
|
677
677
|
:value="getMapValue(mapKey)"
|
|
678
678
|
@change="setMapValue(mapKey, $event.target.value, $event.target)"
|
|
679
|
-
:class="getMapValue(mapKey) ? 'text-neutral-700' : 'text-neutral-400'"
|
|
680
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none"
|
|
679
|
+
:class="getMapValue(mapKey) ? 'text-neutral-700 dark:text-neutral-200' : 'text-neutral-400 dark:text-neutral-500'"
|
|
680
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none dark:border-neutral-700 dark:bg-neutral-900 dark:focus:border-neutral-600"
|
|
681
681
|
>
|
|
682
682
|
<option value="" disabled hidden>Select value</option>
|
|
683
683
|
<option value="__clear__">Clear selection</option>
|
|
@@ -695,8 +695,8 @@ const layoutClass = isObjectLikeField
|
|
|
695
695
|
<select
|
|
696
696
|
:value="getMapBooleanValue(mapKey)"
|
|
697
697
|
@change="setMapBooleanValue(mapKey, $event.target.value)"
|
|
698
|
-
:class="getMapBooleanValue(mapKey) ? 'text-neutral-700' : 'text-neutral-400'"
|
|
699
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none"
|
|
698
|
+
:class="getMapBooleanValue(mapKey) ? 'text-neutral-700 dark:text-neutral-200' : 'text-neutral-400 dark:text-neutral-500'"
|
|
699
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none dark:border-neutral-700 dark:bg-neutral-900 dark:focus:border-neutral-600"
|
|
700
700
|
>
|
|
701
701
|
<option value="" disabled hidden>Select value</option>
|
|
702
702
|
<option value="__clear__">Clear selection</option>
|
|
@@ -719,7 +719,7 @@ const layoutClass = isObjectLikeField
|
|
|
719
719
|
step={numericInputStep}
|
|
720
720
|
minlength={textInputMinLength}
|
|
721
721
|
maxlength={textInputMaxLength}
|
|
722
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200 bg-white"
|
|
722
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200 bg-white dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-200 dark:placeholder:text-neutral-500 dark:focus:border-neutral-600"
|
|
723
723
|
placeholder="Property value"
|
|
724
724
|
/>
|
|
725
725
|
)
|
|
@@ -729,7 +729,7 @@ const layoutClass = isObjectLikeField
|
|
|
729
729
|
<button
|
|
730
730
|
type="button"
|
|
731
731
|
@click="addMapEntry()"
|
|
732
|
-
class="inline-flex items-center gap-1 text-xs font-medium text-neutral-700 hover:text-neutral-900 cursor-pointer transition-colors duration-200"
|
|
732
|
+
class="inline-flex items-center gap-1 text-xs font-medium text-neutral-700 hover:text-neutral-900 cursor-pointer transition-colors duration-200 dark:text-neutral-300 dark:hover:text-neutral-100"
|
|
733
733
|
>
|
|
734
734
|
<Icon class="size-3.5" name="lucide:plus" />
|
|
735
735
|
Add property
|
|
@@ -743,17 +743,17 @@ const layoutClass = isObjectLikeField
|
|
|
743
743
|
:key={`${fieldNameKey} + '-item-' + index`}
|
|
744
744
|
>
|
|
745
745
|
<div
|
|
746
|
-
class="rounded-lg border border-neutral-200 bg-neutral-50/50 p-2.5"
|
|
746
|
+
class="rounded-lg border border-neutral-200 bg-neutral-50/50 p-2.5 dark:border-neutral-800 dark:bg-neutral-900/50"
|
|
747
747
|
x-init="ensureArrayObjectItem(index)"
|
|
748
748
|
>
|
|
749
749
|
<div class="mb-2 flex items-center justify-between">
|
|
750
|
-
<span class="text-xs font-medium text-neutral-600">
|
|
750
|
+
<span class="text-xs font-medium text-neutral-600 dark:text-neutral-400">
|
|
751
751
|
Item <span x-text="index + 1" />
|
|
752
752
|
</span>
|
|
753
753
|
<button
|
|
754
754
|
type="button"
|
|
755
755
|
@click="removeArrayObjectValue(index)"
|
|
756
|
-
class="inline-flex h-6 items-center rounded-md border border-neutral-200 px-2 text-[11px] font-medium text-neutral-600 hover:border-neutral-300 hover:bg-white hover:text-neutral-700 transition-colors duration-200 cursor-pointer"
|
|
756
|
+
class="inline-flex h-6 items-center rounded-md border border-neutral-200 px-2 text-[11px] font-medium text-neutral-600 hover:border-neutral-300 hover:bg-white hover:text-neutral-700 transition-colors duration-200 cursor-pointer dark:border-neutral-700 dark:text-neutral-400 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/70 dark:hover:text-neutral-200"
|
|
757
757
|
aria-label={`Remove ${field.name} item`}
|
|
758
758
|
>
|
|
759
759
|
Remove
|
|
@@ -761,7 +761,7 @@ const layoutClass = isObjectLikeField
|
|
|
761
761
|
</div>
|
|
762
762
|
<div class="space-y-3">
|
|
763
763
|
{field.nested?.map((nestedField) => (
|
|
764
|
-
<div class="border-b border-b-neutral-100 last:border-none pb-3 last:pb-0">
|
|
764
|
+
<div class="border-b border-b-neutral-100 dark:border-b-neutral-800 last:border-none pb-3 last:pb-0">
|
|
765
765
|
<Astro.self
|
|
766
766
|
field={nestedField}
|
|
767
767
|
requestPart={requestPart}
|
|
@@ -774,19 +774,19 @@ const layoutClass = isObjectLikeField
|
|
|
774
774
|
<div class:list={["space-y-2", hasNestedFields && "pt-1"]}>
|
|
775
775
|
{hasOneOfVariants ? (
|
|
776
776
|
<>
|
|
777
|
-
<p class="text-xs text-neutral-500">
|
|
777
|
+
<p class="text-xs text-neutral-500 dark:text-neutral-400">
|
|
778
778
|
Select one variant.
|
|
779
779
|
</p>
|
|
780
|
-
<div class="inline-flex max-w-full flex-wrap items-center gap-1 rounded-lg bg-neutral-100 p-1">
|
|
780
|
+
<div class="inline-flex max-w-full flex-wrap items-center gap-1 rounded-lg bg-neutral-100 p-1 dark:bg-neutral-900/60">
|
|
781
781
|
{field.variants.map((variant, variantIndex) => (
|
|
782
782
|
<button
|
|
783
783
|
type="button"
|
|
784
784
|
@click={`selectArrayItemVariant(index, ${variantIndex})`}
|
|
785
785
|
:class={`{
|
|
786
|
-
'bg-white text-neutral-900 shadow-xs ring-1 ring-neutral-200': getSelectedArrayItemVariant(index) === ${variantIndex},
|
|
787
|
-
'text-neutral-600 hover:bg-neutral-50 hover:text-neutral-800': getSelectedArrayItemVariant(index) !== ${variantIndex}
|
|
786
|
+
'bg-white text-neutral-900 shadow-xs ring-1 ring-neutral-200 dark:bg-(--rd-code-surface) dark:text-neutral-100 dark:ring-neutral-700/70': getSelectedArrayItemVariant(index) === ${variantIndex},
|
|
787
|
+
'text-neutral-600 hover:bg-neutral-50 hover:text-neutral-800 dark:text-neutral-400 dark:hover:bg-neutral-800/70 dark:hover:text-neutral-200': getSelectedArrayItemVariant(index) !== ${variantIndex}
|
|
788
788
|
}`}
|
|
789
|
-
class="inline-flex h-7 items-center justify-center whitespace-nowrap rounded-md px-2.5 text-[11px] font-medium transition-all duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-300"
|
|
789
|
+
class="inline-flex h-7 items-center justify-center whitespace-nowrap rounded-md px-2.5 text-[11px] font-medium transition-all duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-300 dark:focus-visible:ring-neutral-700"
|
|
790
790
|
>
|
|
791
791
|
{variant.label}
|
|
792
792
|
</button>
|
|
@@ -797,13 +797,13 @@ const layoutClass = isObjectLikeField
|
|
|
797
797
|
x-show={`getSelectedArrayItemVariant(index) === ${variantIndex}`}
|
|
798
798
|
x-cloak
|
|
799
799
|
>
|
|
800
|
-
<div class="rounded-md border border-neutral-200 bg-white p-2.5">
|
|
801
|
-
<div class="mb-2 text-xs font-medium text-neutral-600">
|
|
800
|
+
<div class="rounded-md border border-neutral-200 bg-white p-2.5 dark:border-neutral-800 dark:bg-neutral-900/60">
|
|
801
|
+
<div class="mb-2 text-xs font-medium text-neutral-600 dark:text-neutral-400">
|
|
802
802
|
{variant.label}
|
|
803
803
|
</div>
|
|
804
804
|
<div class="space-y-3">
|
|
805
805
|
{variant.fields.map((variantField) => (
|
|
806
|
-
<div class="border-b border-b-neutral-100 last:border-none pb-3 last:pb-0">
|
|
806
|
+
<div class="border-b border-b-neutral-100 dark:border-b-neutral-800 last:border-none pb-3 last:pb-0">
|
|
807
807
|
<Astro.self
|
|
808
808
|
field={variantField}
|
|
809
809
|
requestPart={requestPart}
|
|
@@ -819,17 +819,17 @@ const layoutClass = isObjectLikeField
|
|
|
819
819
|
</>
|
|
820
820
|
) : (
|
|
821
821
|
<>
|
|
822
|
-
<p class="text-xs text-neutral-500">
|
|
822
|
+
<p class="text-xs text-neutral-500 dark:text-neutral-400">
|
|
823
823
|
One or more variants may apply.
|
|
824
824
|
</p>
|
|
825
825
|
{field.variants.map((variant) => (
|
|
826
|
-
<div class="rounded-md border border-neutral-200 bg-white p-2.5">
|
|
827
|
-
<div class="mb-2 text-xs font-medium text-neutral-600">
|
|
826
|
+
<div class="rounded-md border border-neutral-200 bg-white p-2.5 dark:border-neutral-800 dark:bg-neutral-900/60">
|
|
827
|
+
<div class="mb-2 text-xs font-medium text-neutral-600 dark:text-neutral-400">
|
|
828
828
|
{variant.label}
|
|
829
829
|
</div>
|
|
830
830
|
<div class="space-y-3">
|
|
831
831
|
{variant.fields.map((variantField) => (
|
|
832
|
-
<div class="border-b border-b-neutral-100 last:border-none pb-3 last:pb-0">
|
|
832
|
+
<div class="border-b border-b-neutral-100 dark:border-b-neutral-800 last:border-none pb-3 last:pb-0">
|
|
833
833
|
<Astro.self
|
|
834
834
|
field={variantField}
|
|
835
835
|
requestPart={requestPart}
|
|
@@ -851,7 +851,7 @@ const layoutClass = isObjectLikeField
|
|
|
851
851
|
<button
|
|
852
852
|
type="button"
|
|
853
853
|
@click="addArrayObjectValue()"
|
|
854
|
-
class="inline-flex items-center gap-1 text-xs font-medium text-neutral-700 hover:text-neutral-900 cursor-pointer transition-colors duration-200"
|
|
854
|
+
class="inline-flex items-center gap-1 text-xs font-medium text-neutral-700 hover:text-neutral-900 cursor-pointer transition-colors duration-200 dark:text-neutral-300 dark:hover:text-neutral-100"
|
|
855
855
|
>
|
|
856
856
|
<Icon class="size-3.5" name="lucide:plus" />
|
|
857
857
|
Add item
|
|
@@ -869,8 +869,8 @@ const layoutClass = isObjectLikeField
|
|
|
869
869
|
:value="value"
|
|
870
870
|
@change={`setArrayValue(index, $event.target.value, $event.target)`}
|
|
871
871
|
:required={`index === 0 && ${isRequiredField ? "true" : "false"}`}
|
|
872
|
-
:class="value ? 'text-neutral-700' : 'text-neutral-400'"
|
|
873
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none"
|
|
872
|
+
:class="value ? 'text-neutral-700 dark:text-neutral-200' : 'text-neutral-400 dark:text-neutral-500'"
|
|
873
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none dark:border-neutral-700 dark:bg-neutral-900 dark:focus:border-neutral-600"
|
|
874
874
|
>
|
|
875
875
|
<option value="" disabled hidden>Select value</option>
|
|
876
876
|
<option value="__clear__">Clear selection</option>
|
|
@@ -891,8 +891,8 @@ const layoutClass = isObjectLikeField
|
|
|
891
891
|
:value="getArrayBooleanValue(index)"
|
|
892
892
|
@change={`setArrayBooleanValue(index, $event.target.value)`}
|
|
893
893
|
:required={`index === 0 && ${isRequiredField ? "true" : "false"}`}
|
|
894
|
-
:class="getArrayBooleanValue(index) ? 'text-neutral-700' : 'text-neutral-400'"
|
|
895
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none"
|
|
894
|
+
:class="getArrayBooleanValue(index) ? 'text-neutral-700 dark:text-neutral-200' : 'text-neutral-400 dark:text-neutral-500'"
|
|
895
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none dark:border-neutral-700 dark:bg-neutral-900 dark:focus:border-neutral-600"
|
|
896
896
|
>
|
|
897
897
|
<option value="" disabled hidden>Select value</option>
|
|
898
898
|
<option value="__clear__">Clear selection</option>
|
|
@@ -918,7 +918,7 @@ const layoutClass = isObjectLikeField
|
|
|
918
918
|
step={numericInputStep}
|
|
919
919
|
minlength={textInputMinLength}
|
|
920
920
|
maxlength={textInputMaxLength}
|
|
921
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200"
|
|
921
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200 bg-white dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-200 dark:placeholder:text-neutral-500 dark:focus:border-neutral-600"
|
|
922
922
|
/>
|
|
923
923
|
)
|
|
924
924
|
)
|
|
@@ -926,7 +926,7 @@ const layoutClass = isObjectLikeField
|
|
|
926
926
|
<button
|
|
927
927
|
type="button"
|
|
928
928
|
@click="removeArrayValue(index)"
|
|
929
|
-
class="h-[31px] px-2 rounded-md border border-neutral-200 text-neutral-500 hover:text-neutral-700 hover:border-neutral-300 hover:bg-neutral-50 transition-colors duration-200 cursor-pointer"
|
|
929
|
+
class="h-[31px] px-2 rounded-md border border-neutral-200 text-neutral-500 hover:text-neutral-700 hover:border-neutral-300 hover:bg-neutral-50 transition-colors duration-200 cursor-pointer dark:border-neutral-700 dark:text-neutral-400 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/70 dark:hover:text-neutral-200"
|
|
930
930
|
aria-label={`Remove ${field.name} value`}
|
|
931
931
|
>
|
|
932
932
|
<Icon class="size-4" name="lucide:x" />
|
|
@@ -936,7 +936,7 @@ const layoutClass = isObjectLikeField
|
|
|
936
936
|
<button
|
|
937
937
|
type="button"
|
|
938
938
|
@click="addArrayValue()"
|
|
939
|
-
class="inline-flex items-center gap-1 text-xs font-medium text-neutral-700 hover:text-neutral-900 cursor-pointer transition-colors duration-200"
|
|
939
|
+
class="inline-flex items-center gap-1 text-xs font-medium text-neutral-700 hover:text-neutral-900 cursor-pointer transition-colors duration-200 dark:text-neutral-300 dark:hover:text-neutral-100"
|
|
940
940
|
>
|
|
941
941
|
<Icon class="size-3.5" name="lucide:plus" />
|
|
942
942
|
Add value
|
|
@@ -944,10 +944,10 @@ const layoutClass = isObjectLikeField
|
|
|
944
944
|
</div>
|
|
945
945
|
)
|
|
946
946
|
) : hasNestedFields || hasFieldVariants ? (
|
|
947
|
-
<div class="rounded-lg border border-neutral-200 bg-neutral-50/50 p-2.5">
|
|
947
|
+
<div class="rounded-lg border border-neutral-200 bg-neutral-50/50 p-2.5 dark:border-neutral-800 dark:bg-neutral-900/50">
|
|
948
948
|
<div class="space-y-3">
|
|
949
949
|
{field.nested?.map((nestedField) => (
|
|
950
|
-
<div class="border-b border-b-neutral-100 last:border-none pb-3 last:pb-0">
|
|
950
|
+
<div class="border-b border-b-neutral-100 dark:border-b-neutral-800 last:border-none pb-3 last:pb-0">
|
|
951
951
|
<Astro.self
|
|
952
952
|
field={nestedField}
|
|
953
953
|
requestPart={requestPart}
|
|
@@ -960,19 +960,19 @@ const layoutClass = isObjectLikeField
|
|
|
960
960
|
<div class:list={["space-y-2", hasNestedFields && "pt-1"]}>
|
|
961
961
|
{hasOneOfVariants ? (
|
|
962
962
|
<>
|
|
963
|
-
<p class="text-xs text-neutral-500">
|
|
963
|
+
<p class="text-xs text-neutral-500 dark:text-neutral-400">
|
|
964
964
|
Select one variant.
|
|
965
965
|
</p>
|
|
966
|
-
<div class="inline-flex max-w-full flex-wrap items-center gap-1 rounded-lg bg-neutral-100 p-1">
|
|
966
|
+
<div class="inline-flex max-w-full flex-wrap items-center gap-1 rounded-lg bg-neutral-100 p-1 dark:bg-neutral-900/60">
|
|
967
967
|
{field.variants.map((variant, variantIndex) => (
|
|
968
968
|
<button
|
|
969
969
|
type="button"
|
|
970
970
|
@click={`selectOneOfVariant(${variantIndex})`}
|
|
971
971
|
:class={`{
|
|
972
|
-
'bg-white text-neutral-900 shadow-xs ring-1 ring-neutral-200': getSelectedOneOfVariant() === ${variantIndex},
|
|
973
|
-
'text-neutral-600 hover:bg-neutral-50 hover:text-neutral-800': getSelectedOneOfVariant() !== ${variantIndex}
|
|
972
|
+
'bg-white text-neutral-900 shadow-xs ring-1 ring-neutral-200 dark:bg-(--rd-code-surface) dark:text-neutral-100 dark:ring-neutral-700/70': getSelectedOneOfVariant() === ${variantIndex},
|
|
973
|
+
'text-neutral-600 hover:bg-neutral-50 hover:text-neutral-800 dark:text-neutral-400 dark:hover:bg-neutral-800/70 dark:hover:text-neutral-200': getSelectedOneOfVariant() !== ${variantIndex}
|
|
974
974
|
}`}
|
|
975
|
-
class="inline-flex h-7 items-center justify-center whitespace-nowrap rounded-md px-2.5 text-[11px] font-medium transition-all duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-300"
|
|
975
|
+
class="inline-flex h-7 items-center justify-center whitespace-nowrap rounded-md px-2.5 text-[11px] font-medium transition-all duration-200 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-300 dark:focus-visible:ring-neutral-700"
|
|
976
976
|
>
|
|
977
977
|
{variant.label}
|
|
978
978
|
</button>
|
|
@@ -983,13 +983,13 @@ const layoutClass = isObjectLikeField
|
|
|
983
983
|
x-show={`getSelectedOneOfVariant() === ${variantIndex}`}
|
|
984
984
|
x-cloak
|
|
985
985
|
>
|
|
986
|
-
<div class="rounded-md border border-neutral-200 bg-white p-2.5">
|
|
987
|
-
<div class="mb-2 text-xs font-medium text-neutral-600">
|
|
986
|
+
<div class="rounded-md border border-neutral-200 bg-white p-2.5 dark:border-neutral-800 dark:bg-neutral-900/60">
|
|
987
|
+
<div class="mb-2 text-xs font-medium text-neutral-600 dark:text-neutral-400">
|
|
988
988
|
{variant.label}
|
|
989
989
|
</div>
|
|
990
990
|
<div class="space-y-3">
|
|
991
991
|
{variant.fields.map((variantField) => (
|
|
992
|
-
<div class="border-b border-b-neutral-100 last:border-none pb-3 last:pb-0">
|
|
992
|
+
<div class="border-b border-b-neutral-100 dark:border-b-neutral-800 last:border-none pb-3 last:pb-0">
|
|
993
993
|
<Astro.self
|
|
994
994
|
field={variantField}
|
|
995
995
|
requestPart={requestPart}
|
|
@@ -1005,17 +1005,17 @@ const layoutClass = isObjectLikeField
|
|
|
1005
1005
|
</>
|
|
1006
1006
|
) : (
|
|
1007
1007
|
<>
|
|
1008
|
-
<p class="text-xs text-neutral-500">
|
|
1008
|
+
<p class="text-xs text-neutral-500 dark:text-neutral-400">
|
|
1009
1009
|
One or more variants may apply.
|
|
1010
1010
|
</p>
|
|
1011
1011
|
{field.variants.map((variant) => (
|
|
1012
|
-
<div class="rounded-md border border-neutral-200 bg-white p-2.5">
|
|
1013
|
-
<div class="mb-2 text-xs font-medium text-neutral-600">
|
|
1012
|
+
<div class="rounded-md border border-neutral-200 bg-white p-2.5 dark:border-neutral-800 dark:bg-neutral-900/60">
|
|
1013
|
+
<div class="mb-2 text-xs font-medium text-neutral-600 dark:text-neutral-400">
|
|
1014
1014
|
{variant.label}
|
|
1015
1015
|
</div>
|
|
1016
1016
|
<div class="space-y-3">
|
|
1017
1017
|
{variant.fields.map((variantField) => (
|
|
1018
|
-
<div class="border-b border-b-neutral-100 last:border-none pb-3 last:pb-0">
|
|
1018
|
+
<div class="border-b border-b-neutral-100 dark:border-b-neutral-800 last:border-none pb-3 last:pb-0">
|
|
1019
1019
|
<Astro.self
|
|
1020
1020
|
field={variantField}
|
|
1021
1021
|
requestPart={requestPart}
|
|
@@ -1042,8 +1042,8 @@ const layoutClass = isObjectLikeField
|
|
|
1042
1042
|
:value="getFieldValue()"
|
|
1043
1043
|
@change="setFieldValue($event.target.value, $event.target)"
|
|
1044
1044
|
required={isRequiredField}
|
|
1045
|
-
:class="getFieldValue() ? 'text-neutral-700' : 'text-neutral-400'"
|
|
1046
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none"
|
|
1045
|
+
:class="getFieldValue() ? 'text-neutral-700 dark:text-neutral-200' : 'text-neutral-400 dark:text-neutral-500'"
|
|
1046
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none dark:border-neutral-700 dark:bg-neutral-900 dark:focus:border-neutral-600"
|
|
1047
1047
|
>
|
|
1048
1048
|
<option value="" disabled hidden>Select value</option>
|
|
1049
1049
|
<option value="__clear__">Clear selection</option>
|
|
@@ -1063,8 +1063,8 @@ const layoutClass = isObjectLikeField
|
|
|
1063
1063
|
:value="getBooleanFieldValue()"
|
|
1064
1064
|
@change="setBooleanFieldValue($event.target.value)"
|
|
1065
1065
|
required={isRequiredField}
|
|
1066
|
-
:class="getBooleanFieldValue() ? 'text-neutral-700' : 'text-neutral-400'"
|
|
1067
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none"
|
|
1066
|
+
:class="getBooleanFieldValue() ? 'text-neutral-700 dark:text-neutral-200' : 'text-neutral-400 dark:text-neutral-500'"
|
|
1067
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow transition-all duration-200 bg-white appearance-none dark:border-neutral-700 dark:bg-neutral-900 dark:focus:border-neutral-600"
|
|
1068
1068
|
>
|
|
1069
1069
|
<option value="" disabled hidden>Select value</option>
|
|
1070
1070
|
<option value="__clear__">Clear selection</option>
|
|
@@ -1090,7 +1090,7 @@ const layoutClass = isObjectLikeField
|
|
|
1090
1090
|
step={numericInputStep}
|
|
1091
1091
|
minlength={textInputMinLength}
|
|
1092
1092
|
maxlength={textInputMaxLength}
|
|
1093
|
-
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200"
|
|
1093
|
+
class="w-full px-3 py-1.5 text-sm border border-neutral-200 focus:border-neutral-300 outline-none rounded-md shadow-xs focus:shadow placeholder:text-neutral-400 transition-all duration-200 bg-white dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-200 dark:placeholder:text-neutral-500 dark:focus:border-neutral-600"
|
|
1094
1094
|
/>
|
|
1095
1095
|
)}
|
|
1096
1096
|
</>
|