@silicajs/components 0.2.4 → 0.3.1
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/dist/backlinks.d.ts +2 -2
- package/dist/breadcrumbs.d.ts +2 -2
- package/dist/dark-mode-toggle.d.ts +2 -2
- package/dist/google-icon.d.ts +2 -2
- package/dist/index.d.ts +0 -1
- package/dist/not-allowed.d.ts +2 -2
- package/dist/not-found.d.ts +2 -2
- package/dist/page-properties.d.ts +5 -3
- package/dist/page-properties.js +28 -4
- package/dist/page-properties.js.map +1 -1
- package/dist/routing.d.ts +1 -2
- package/dist/search.d.ts +3 -3
- package/dist/search.js +24 -9
- package/dist/search.js.map +1 -1
- package/dist/sign-in-shell.d.ts +2 -2
- package/dist/table-of-contents.d.ts +1 -2
- package/dist/tags-list.d.ts +2 -2
- package/dist/user-menu.d.ts +2 -2
- package/dist/vault-tree.d.ts +2 -2
- package/package.json +4 -4
package/dist/backlinks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type BacklinkItem = {
|
|
4
4
|
slug: string;
|
|
@@ -8,6 +8,6 @@ type BacklinksProps = {
|
|
|
8
8
|
backlinks: BacklinkItem[];
|
|
9
9
|
className?: string;
|
|
10
10
|
};
|
|
11
|
-
declare function Backlinks({ backlinks, className }: BacklinksProps):
|
|
11
|
+
declare function Backlinks({ backlinks, className }: BacklinksProps): React.JSX.Element | null;
|
|
12
12
|
|
|
13
13
|
export { type BacklinkItem, Backlinks, type BacklinksProps };
|
package/dist/breadcrumbs.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type BreadcrumbLinkItem = {
|
|
4
4
|
label: string;
|
|
@@ -8,6 +8,6 @@ type BreadcrumbsProps = {
|
|
|
8
8
|
items: BreadcrumbLinkItem[];
|
|
9
9
|
className?: string;
|
|
10
10
|
};
|
|
11
|
-
declare function Breadcrumbs({ items, className }: BreadcrumbsProps):
|
|
11
|
+
declare function Breadcrumbs({ items, className }: BreadcrumbsProps): React.JSX.Element | null;
|
|
12
12
|
|
|
13
13
|
export { type BreadcrumbLinkItem, Breadcrumbs, type BreadcrumbsProps };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type DarkModeToggleProps = {
|
|
4
4
|
className?: string;
|
|
5
5
|
};
|
|
6
|
-
declare function DarkModeToggle({ className }: DarkModeToggleProps):
|
|
6
|
+
declare function DarkModeToggle({ className }: DarkModeToggleProps): React.JSX.Element;
|
|
7
7
|
|
|
8
8
|
export { DarkModeToggle, type DarkModeToggleProps };
|
package/dist/google-icon.d.ts
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,5 @@ export { TagsList, TagsListProps } from './tags-list.js';
|
|
|
13
13
|
export { UserMenu, UserMenuProps } from './user-menu.js';
|
|
14
14
|
export { VaultTree, VaultTreeProps } from './vault-tree.js';
|
|
15
15
|
export { breadcrumbSegmentHref, prettySegment, slugToHref } from './slug.js';
|
|
16
|
-
import 'react/jsx-runtime';
|
|
17
16
|
import 'react';
|
|
18
17
|
import '@silicajs/core/runtime';
|
package/dist/not-allowed.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type NotAllowedProps = {
|
|
4
4
|
title?: string;
|
|
@@ -9,6 +9,6 @@ type NotAllowedProps = {
|
|
|
9
9
|
};
|
|
10
10
|
className?: string;
|
|
11
11
|
};
|
|
12
|
-
declare function NotAllowed({ title, description, cta, className, }: NotAllowedProps):
|
|
12
|
+
declare function NotAllowed({ title, description, cta, className, }: NotAllowedProps): React.JSX.Element;
|
|
13
13
|
|
|
14
14
|
export { NotAllowed, type NotAllowedProps };
|
package/dist/not-found.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type NotFoundProps = {
|
|
4
4
|
title?: string;
|
|
@@ -9,6 +9,6 @@ type NotFoundProps = {
|
|
|
9
9
|
};
|
|
10
10
|
className?: string;
|
|
11
11
|
};
|
|
12
|
-
declare function NotFound({ title, description, cta, className, }: NotFoundProps):
|
|
12
|
+
declare function NotFound({ title, description, cta, className, }: NotFoundProps): React.JSX.Element;
|
|
13
13
|
|
|
14
14
|
export { NotFound, type NotFoundProps };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { PageProperty } from '@silicajs/core/runtime';
|
|
2
3
|
|
|
3
4
|
type PagePropertiesProps = {
|
|
4
|
-
frontmatter
|
|
5
|
+
frontmatter?: Record<string, unknown>;
|
|
6
|
+
properties?: PageProperty[];
|
|
5
7
|
className?: string;
|
|
6
8
|
defaultOpen?: boolean;
|
|
7
9
|
};
|
|
8
|
-
declare function PageProperties({ frontmatter, className, defaultOpen, }: PagePropertiesProps):
|
|
10
|
+
declare function PageProperties({ frontmatter, properties: resolvedProperties, className, defaultOpen, }: PagePropertiesProps): React.JSX.Element | null;
|
|
9
11
|
|
|
10
12
|
export { PageProperties, type PagePropertiesProps };
|
package/dist/page-properties.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { ChevronRight } from "lucide-react";
|
|
4
4
|
import { useEffect, useState } from "react";
|
|
5
5
|
import { cn } from "@silicajs/ui/lib/utils";
|
|
@@ -8,14 +8,18 @@ import {
|
|
|
8
8
|
CollapsibleContent,
|
|
9
9
|
CollapsibleTrigger
|
|
10
10
|
} from "@silicajs/ui/components/collapsible";
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
getPageProperties
|
|
13
|
+
} from "@silicajs/core/runtime";
|
|
14
|
+
import { SilicaLink } from "./routing.js";
|
|
12
15
|
const STORAGE_KEY = "silica:page-properties:open";
|
|
13
16
|
function PageProperties({
|
|
14
17
|
frontmatter,
|
|
18
|
+
properties: resolvedProperties,
|
|
15
19
|
className,
|
|
16
20
|
defaultOpen = false
|
|
17
21
|
}) {
|
|
18
|
-
const properties = getPageProperties(frontmatter);
|
|
22
|
+
const properties = resolvedProperties ?? getPageProperties(frontmatter ?? {});
|
|
19
23
|
const [open, setOpen] = useState(defaultOpen);
|
|
20
24
|
useEffect(() => {
|
|
21
25
|
try {
|
|
@@ -65,7 +69,7 @@ function PageProperties({
|
|
|
65
69
|
className: "grid grid-cols-[10rem_1fr] gap-x-4 border-t border-border first:border-t-0",
|
|
66
70
|
children: [
|
|
67
71
|
/* @__PURE__ */ jsx("dt", { className: "px-4 py-2 text-muted-foreground", children: property.label }),
|
|
68
|
-
/* @__PURE__ */ jsx("dd", { className: "px-4 py-2 text-foreground", children: property
|
|
72
|
+
/* @__PURE__ */ jsx("dd", { className: "px-4 py-2 text-foreground", children: /* @__PURE__ */ jsx(PagePropertyValue, { property }) })
|
|
69
73
|
]
|
|
70
74
|
},
|
|
71
75
|
property.key
|
|
@@ -74,6 +78,26 @@ function PageProperties({
|
|
|
74
78
|
}
|
|
75
79
|
);
|
|
76
80
|
}
|
|
81
|
+
function PagePropertyValue({ property }) {
|
|
82
|
+
if (!property.parts) return /* @__PURE__ */ jsx(Fragment, { children: property.value });
|
|
83
|
+
return /* @__PURE__ */ jsx(Fragment, { children: property.parts.map((part, index) => /* @__PURE__ */ jsx(PagePropertyPartView, { part }, `${part.type}-${index}`)) });
|
|
84
|
+
}
|
|
85
|
+
function PagePropertyPartView({ part }) {
|
|
86
|
+
if (part.type === "link") {
|
|
87
|
+
return /* @__PURE__ */ jsx(
|
|
88
|
+
SilicaLink,
|
|
89
|
+
{
|
|
90
|
+
href: part.href,
|
|
91
|
+
className: "text-primary underline underline-offset-2",
|
|
92
|
+
children: part.value
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
if (part.type === "broken-link") {
|
|
97
|
+
return /* @__PURE__ */ jsx("span", { className: "silica-broken-link", children: part.value });
|
|
98
|
+
}
|
|
99
|
+
return /* @__PURE__ */ jsx(Fragment, { children: part.value });
|
|
100
|
+
}
|
|
77
101
|
export {
|
|
78
102
|
PageProperties
|
|
79
103
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/page-properties.tsx"],"sourcesContent":["\"use client\";\n\nimport { ChevronRight } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\n\nimport { cn } from \"@silicajs/ui/lib/utils\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@silicajs/ui/components/collapsible\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/page-properties.tsx"],"sourcesContent":["\"use client\";\n\nimport { ChevronRight } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\n\nimport { cn } from \"@silicajs/ui/lib/utils\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@silicajs/ui/components/collapsible\";\nimport {\n getPageProperties,\n type PageProperty,\n type PagePropertyPart,\n} from \"@silicajs/core/runtime\";\nimport { SilicaLink } from \"./routing.js\";\n\nconst STORAGE_KEY = \"silica:page-properties:open\";\n\nexport type PagePropertiesProps = {\n frontmatter?: Record<string, unknown>;\n properties?: PageProperty[];\n className?: string;\n defaultOpen?: boolean;\n};\n\nexport function PageProperties({\n frontmatter,\n properties: resolvedProperties,\n className,\n defaultOpen = false,\n}: PagePropertiesProps) {\n const properties = resolvedProperties ?? getPageProperties(frontmatter ?? {});\n const [open, setOpen] = useState<boolean>(defaultOpen);\n\n useEffect(() => {\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n if (stored === \"true\" || stored === \"false\") {\n setOpen(stored === \"true\");\n }\n } catch {\n // ignore (private mode, disabled storage, etc.)\n }\n }, []);\n\n function handleOpenChange(next: boolean) {\n setOpen(next);\n try {\n window.localStorage.setItem(STORAGE_KEY, String(next));\n } catch {\n // ignore\n }\n }\n\n if (properties.length === 0) return null;\n\n return (\n <Collapsible\n data-slot=\"page-properties\"\n open={open}\n onOpenChange={handleOpenChange}\n className={cn(\n \"rounded-lg border border-border bg-card text-sm\",\n className,\n )}\n >\n <CollapsibleTrigger className=\"flex w-full cursor-pointer items-center gap-2 px-4 py-2.5 text-left font-medium\">\n <ChevronRight\n className={cn(\n \"size-4 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-90\",\n )}\n aria-hidden\n />\n <span className=\"text-foreground\">Page Properties</span>\n <span className=\"ml-auto text-xs tabular-nums text-muted-foreground\">\n {properties.length}\n </span>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"h-[var(--collapsible-panel-height)] overflow-hidden transition-[height] duration-200 ease-out data-[ending-style]:h-0 data-[starting-style]:h-0 motion-reduce:transition-none\">\n <dl className=\"border-t border-border\">\n {properties.map((property) => (\n <div\n key={property.key}\n className=\"grid grid-cols-[10rem_1fr] gap-x-4 border-t border-border first:border-t-0\"\n >\n <dt className=\"px-4 py-2 text-muted-foreground\">\n {property.label}\n </dt>\n <dd className=\"px-4 py-2 text-foreground\">\n <PagePropertyValue property={property} />\n </dd>\n </div>\n ))}\n </dl>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\nfunction PagePropertyValue({ property }: { property: PageProperty }) {\n if (!property.parts) return <>{property.value}</>;\n\n return (\n <>\n {property.parts.map((part, index) => (\n <PagePropertyPartView key={`${part.type}-${index}`} part={part} />\n ))}\n </>\n );\n}\n\nfunction PagePropertyPartView({ part }: { part: PagePropertyPart }) {\n if (part.type === \"link\") {\n return (\n <SilicaLink\n href={part.href}\n className=\"text-primary underline underline-offset-2\"\n >\n {part.value}\n </SilicaLink>\n );\n }\n\n if (part.type === \"broken-link\") {\n return <span className=\"silica-broken-link\">{part.value}</span>;\n }\n\n return <>{part.value}</>;\n}\n"],"mappings":";AAoEM,SAmCwB,UAlCtB,KADF;AAlEN,SAAS,oBAAoB;AAC7B,SAAS,WAAW,gBAAgB;AAEpC,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,OAGK;AACP,SAAS,kBAAkB;AAE3B,MAAM,cAAc;AASb,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,cAAc;AAChB,GAAwB;AACtB,QAAM,aAAa,sBAAsB,kBAAkB,eAAe,CAAC,CAAC;AAC5E,QAAM,CAAC,MAAM,OAAO,IAAI,SAAkB,WAAW;AAErD,YAAU,MAAM;AACd,QAAI;AACF,YAAM,SAAS,OAAO,aAAa,QAAQ,WAAW;AACtD,UAAI,WAAW,UAAU,WAAW,SAAS;AAC3C,gBAAQ,WAAW,MAAM;AAAA,MAC3B;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,WAAS,iBAAiB,MAAe;AACvC,YAAQ,IAAI;AACZ,QAAI;AACF,aAAO,aAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAAA,IACvD,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,EAAG,QAAO;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,cAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA,6BAAC,sBAAmB,WAAU,mFAC5B;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,QAAQ;AAAA,cACV;AAAA,cACA,eAAW;AAAA;AAAA,UACb;AAAA,UACA,oBAAC,UAAK,WAAU,mBAAkB,6BAAe;AAAA,UACjD,oBAAC,UAAK,WAAU,sDACb,qBAAW,QACd;AAAA,WACF;AAAA,QACA,oBAAC,sBAAmB,WAAU,iLAC5B,8BAAC,QAAG,WAAU,0BACX,qBAAW,IAAI,CAAC,aACf;AAAA,UAAC;AAAA;AAAA,YAEC,WAAU;AAAA,YAEV;AAAA,kCAAC,QAAG,WAAU,mCACX,mBAAS,OACZ;AAAA,cACA,oBAAC,QAAG,WAAU,6BACZ,8BAAC,qBAAkB,UAAoB,GACzC;AAAA;AAAA;AAAA,UARK,SAAS;AAAA,QAShB,CACD,GACH,GACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,kBAAkB,EAAE,SAAS,GAA+B;AACnE,MAAI,CAAC,SAAS,MAAO,QAAO,gCAAG,mBAAS,OAAM;AAE9C,SACE,gCACG,mBAAS,MAAM,IAAI,CAAC,MAAM,UACzB,oBAAC,wBAAmD,QAAzB,GAAG,KAAK,IAAI,IAAI,KAAK,EAAgB,CACjE,GACH;AAEJ;AAEA,SAAS,qBAAqB,EAAE,KAAK,GAA+B;AAClE,MAAI,KAAK,SAAS,QAAQ;AACxB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX,WAAU;AAAA,QAET,eAAK;AAAA;AAAA,IACR;AAAA,EAEJ;AAEA,MAAI,KAAK,SAAS,eAAe;AAC/B,WAAO,oBAAC,UAAK,WAAU,sBAAsB,eAAK,OAAM;AAAA,EAC1D;AAEA,SAAO,gCAAG,eAAK,OAAM;AACvB;","names":[]}
|
package/dist/routing.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
|
|
4
3
|
type SilicaLinkProps = React.AnchorHTMLAttributes<HTMLAnchorElement> & {
|
|
@@ -13,7 +12,7 @@ type SilicaRoutingContextValue = {
|
|
|
13
12
|
type SilicaRoutingProviderProps = Partial<SilicaRoutingContextValue> & {
|
|
14
13
|
children: React.ReactNode;
|
|
15
14
|
};
|
|
16
|
-
declare function SilicaRoutingProvider({ children, Link, currentSlug, navigate, }: SilicaRoutingProviderProps):
|
|
15
|
+
declare function SilicaRoutingProvider({ children, Link, currentSlug, navigate, }: SilicaRoutingProviderProps): React.JSX.Element;
|
|
17
16
|
declare function useSilicaRouting(): SilicaRoutingContextValue;
|
|
18
17
|
declare const SilicaLink: React.ForwardRefExoticComponent<React.AnchorHTMLAttributes<HTMLAnchorElement> & {
|
|
19
18
|
href: string;
|
package/dist/search.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type SearchTriggerProps = {
|
|
4
4
|
placeholder?: string;
|
|
5
5
|
className?: string;
|
|
6
6
|
};
|
|
7
|
-
declare function SearchTrigger({ placeholder, className, }: SearchTriggerProps):
|
|
7
|
+
declare function SearchTrigger({ placeholder, className, }: SearchTriggerProps): React.JSX.Element;
|
|
8
8
|
type SearchPaletteProps = {
|
|
9
9
|
open: boolean;
|
|
10
10
|
onOpenChange: (next: boolean) => void;
|
|
11
11
|
};
|
|
12
|
-
declare function SearchPalette({ open, onOpenChange }: SearchPaletteProps):
|
|
12
|
+
declare function SearchPalette({ open, onOpenChange }: SearchPaletteProps): React.JSX.Element;
|
|
13
13
|
|
|
14
14
|
export { SearchPalette, type SearchPaletteProps, SearchTrigger, type SearchTriggerProps };
|
package/dist/search.js
CHANGED
|
@@ -115,21 +115,21 @@ function SearchPalette({ open, onOpenChange }) {
|
|
|
115
115
|
/* @__PURE__ */ jsx(
|
|
116
116
|
DialogContent,
|
|
117
117
|
{
|
|
118
|
-
className: "top-
|
|
118
|
+
className: "top-[12vh] translate-y-0 overflow-hidden rounded-xl! p-0 sm:max-w-xl",
|
|
119
119
|
showCloseButton: false,
|
|
120
120
|
children: /* @__PURE__ */ jsxs(Command, { shouldFilter: false, children: [
|
|
121
121
|
/* @__PURE__ */ jsx(
|
|
122
122
|
CommandInput,
|
|
123
123
|
{
|
|
124
124
|
autoFocus: true,
|
|
125
|
-
placeholder: "
|
|
125
|
+
placeholder: "Type to search\u2026",
|
|
126
126
|
value: query,
|
|
127
127
|
onValueChange: setQuery
|
|
128
128
|
}
|
|
129
129
|
),
|
|
130
|
-
/* @__PURE__ */ jsxs(CommandList, { children: [
|
|
131
|
-
isLoading ? /* @__PURE__ */ jsx("div", { className: "
|
|
132
|
-
!isLoading &&
|
|
130
|
+
query.trim() ? /* @__PURE__ */ jsxs(CommandList, { children: [
|
|
131
|
+
isLoading ? /* @__PURE__ */ jsx("div", { className: "py-12 text-center text-sm text-muted-foreground", children: "Searching\u2026" }) : null,
|
|
132
|
+
!isLoading && results.length === 0 ? /* @__PURE__ */ jsx(CommandEmpty, { children: "No results found" }) : null,
|
|
133
133
|
results.map((result) => /* @__PURE__ */ jsx(
|
|
134
134
|
CommandItem,
|
|
135
135
|
{
|
|
@@ -138,14 +138,29 @@ function SearchPalette({ open, onOpenChange }) {
|
|
|
138
138
|
navigate(slugToHref(result.slug));
|
|
139
139
|
close();
|
|
140
140
|
},
|
|
141
|
-
children: /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-
|
|
142
|
-
/* @__PURE__ */ jsx("span", { className: "truncate font-medium text-foreground", children: /* @__PURE__ */ jsx(HighlightedText, { parts: result.titleParts }) }),
|
|
143
|
-
result.excerptParts.length > 0 ? /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-muted-foreground", children: /* @__PURE__ */ jsx(HighlightedText, { parts: result.excerptParts }) }) : null
|
|
141
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [
|
|
142
|
+
/* @__PURE__ */ jsx("span", { className: "truncate text-sm font-medium text-foreground", children: /* @__PURE__ */ jsx(HighlightedText, { parts: result.titleParts }) }),
|
|
143
|
+
result.excerptParts.length > 0 ? /* @__PURE__ */ jsx("span", { className: "truncate text-xs leading-relaxed text-muted-foreground", children: /* @__PURE__ */ jsx(HighlightedText, { parts: result.excerptParts }) }) : null
|
|
144
144
|
] })
|
|
145
145
|
},
|
|
146
146
|
result.slug
|
|
147
147
|
))
|
|
148
|
-
] })
|
|
148
|
+
] }) : null,
|
|
149
|
+
results.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 border-t border-border px-4 py-2.5 text-xs text-muted-foreground", children: [
|
|
150
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
151
|
+
/* @__PURE__ */ jsx("kbd", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1 font-sans", children: "\u21B5" }),
|
|
152
|
+
"to select"
|
|
153
|
+
] }),
|
|
154
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
155
|
+
/* @__PURE__ */ jsx("kbd", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1 font-sans", children: "\u2191" }),
|
|
156
|
+
/* @__PURE__ */ jsx("kbd", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1 font-sans", children: "\u2193" }),
|
|
157
|
+
"to navigate"
|
|
158
|
+
] }),
|
|
159
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
160
|
+
/* @__PURE__ */ jsx("kbd", { className: "inline-flex h-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-sans", children: "esc" }),
|
|
161
|
+
"to close"
|
|
162
|
+
] })
|
|
163
|
+
] }) : null
|
|
149
164
|
] })
|
|
150
165
|
}
|
|
151
166
|
)
|
package/dist/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/search.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@silicajs/ui/components/command\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@silicajs/ui/components/dialog\";\nimport { Button } from \"@silicajs/ui/components/button\";\nimport { SearchIcon } from \"lucide-react\";\n\nimport { useSilicaRouting } from \"./routing.js\";\nimport { slugToHref } from \"./slug.js\";\n\ntype SearchHighlightPart = {\n text: string;\n highlighted: boolean;\n};\n\ntype SearchResult = {\n slug: string;\n title: string;\n titleParts: SearchHighlightPart[];\n excerptParts: SearchHighlightPart[];\n};\n\nexport type SearchTriggerProps = {\n placeholder?: string;\n className?: string;\n};\n\nexport function SearchTrigger({\n placeholder = \"Search…\",\n className,\n}: SearchTriggerProps) {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\") {\n event.preventDefault();\n setOpen((value) => !value);\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, []);\n\n return (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setOpen(true)}\n className={className}\n >\n <SearchIcon\n data-icon=\"inline-start\"\n className=\"text-muted-foreground\"\n />\n <span className=\"flex-1 text-left text-muted-foreground\">\n {placeholder}\n </span>\n <kbd\n data-icon=\"inline-end\"\n className=\"pointer-events-none ml-2 inline-flex h-5 select-none items-center gap-1 rounded border border-border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground\"\n >\n <span className=\"text-xs\">⌘</span>K\n </kbd>\n </Button>\n <SearchPalette open={open} onOpenChange={setOpen} />\n </>\n );\n}\n\nexport type SearchPaletteProps = {\n open: boolean;\n onOpenChange: (next: boolean) => void;\n};\n\nexport function SearchPalette({ open, onOpenChange }: SearchPaletteProps) {\n const { navigate } = useSilicaRouting();\n const [query, setQuery] = React.useState(\"\");\n const [results, setResults] = React.useState<SearchResult[]>([]);\n const [isLoading, setIsLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (!open) {\n setQuery(\"\");\n setResults([]);\n setIsLoading(false);\n }\n }, [open]);\n\n React.useEffect(() => {\n const controller = new AbortController();\n const trimmed = query.trim();\n if (!trimmed) {\n setResults([]);\n setIsLoading(false);\n return () => controller.abort();\n }\n\n setIsLoading(true);\n const timeout = window.setTimeout(() => {\n fetch(`/api/search?q=${encodeURIComponent(trimmed)}`, {\n signal: controller.signal,\n })\n .then((response) => (response.ok ? response.json() : { results: [] }))\n .then((payload: { results?: SearchResult[] }) => {\n setResults(payload.results ?? []);\n })\n .catch((error: unknown) => {\n if (error instanceof DOMException && error.name === \"AbortError\")\n return;\n setResults([]);\n })\n .finally(() => setIsLoading(false));\n }, 120);\n\n return () => {\n window.clearTimeout(timeout);\n controller.abort();\n };\n }, [query]);\n\n const close = () => onOpenChange(false);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>Search</DialogTitle>\n <DialogDescription>Search your vault.</DialogDescription>\n </DialogHeader>\n <DialogContent\n className=\"top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0\"\n showCloseButton={false}\n >\n <Command shouldFilter={false}>\n <CommandInput\n autoFocus\n placeholder=\"Search your vault…\"\n value={query}\n onValueChange={setQuery}\n />\n <CommandList>\n {isLoading ? (\n <div className=\"px-4 py-6 text-center text-sm text-muted-foreground\">\n Searching…\n </div>\n ) : null}\n {!isLoading && query.trim() && results.length === 0 ? (\n <CommandEmpty>No results</CommandEmpty>\n ) : null}\n {results.map((result) => (\n <CommandItem\n key={result.slug}\n value={`${result.title} ${result.slug}`}\n onSelect={() => {\n navigate(slugToHref(result.slug));\n close();\n }}\n >\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate font-medium text-foreground\">\n <HighlightedText parts={result.titleParts} />\n </span>\n {result.excerptParts.length > 0 ? (\n <span className=\"truncate text-xs text-muted-foreground\">\n <HighlightedText parts={result.excerptParts} />\n </span>\n ) : null}\n </div>\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction HighlightedText({ parts }: { parts: SearchHighlightPart[] }) {\n return (\n <>\n {parts.map((part, index) =>\n part.highlighted ? (\n <mark\n key={index}\n className=\"bg-transparent p-0 font-medium text-primary\"\n >\n {part.text}\n </mark>\n ) : (\n <React.Fragment key={index}>{part.text}</React.Fragment>\n ),\n )}\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/search.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@silicajs/ui/components/command\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@silicajs/ui/components/dialog\";\nimport { Button } from \"@silicajs/ui/components/button\";\nimport { SearchIcon } from \"lucide-react\";\n\nimport { useSilicaRouting } from \"./routing.js\";\nimport { slugToHref } from \"./slug.js\";\n\ntype SearchHighlightPart = {\n text: string;\n highlighted: boolean;\n};\n\ntype SearchResult = {\n slug: string;\n title: string;\n titleParts: SearchHighlightPart[];\n excerptParts: SearchHighlightPart[];\n};\n\nexport type SearchTriggerProps = {\n placeholder?: string;\n className?: string;\n};\n\nexport function SearchTrigger({\n placeholder = \"Search…\",\n className,\n}: SearchTriggerProps) {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\") {\n event.preventDefault();\n setOpen((value) => !value);\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, []);\n\n return (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setOpen(true)}\n className={className}\n >\n <SearchIcon\n data-icon=\"inline-start\"\n className=\"text-muted-foreground\"\n />\n <span className=\"flex-1 text-left text-muted-foreground\">\n {placeholder}\n </span>\n <kbd\n data-icon=\"inline-end\"\n className=\"pointer-events-none ml-2 inline-flex h-5 select-none items-center gap-1 rounded border border-border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground\"\n >\n <span className=\"text-xs\">⌘</span>K\n </kbd>\n </Button>\n <SearchPalette open={open} onOpenChange={setOpen} />\n </>\n );\n}\n\nexport type SearchPaletteProps = {\n open: boolean;\n onOpenChange: (next: boolean) => void;\n};\n\nexport function SearchPalette({ open, onOpenChange }: SearchPaletteProps) {\n const { navigate } = useSilicaRouting();\n const [query, setQuery] = React.useState(\"\");\n const [results, setResults] = React.useState<SearchResult[]>([]);\n const [isLoading, setIsLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (!open) {\n setQuery(\"\");\n setResults([]);\n setIsLoading(false);\n }\n }, [open]);\n\n React.useEffect(() => {\n const controller = new AbortController();\n const trimmed = query.trim();\n if (!trimmed) {\n setResults([]);\n setIsLoading(false);\n return () => controller.abort();\n }\n\n setIsLoading(true);\n const timeout = window.setTimeout(() => {\n fetch(`/api/search?q=${encodeURIComponent(trimmed)}`, {\n signal: controller.signal,\n })\n .then((response) => (response.ok ? response.json() : { results: [] }))\n .then((payload: { results?: SearchResult[] }) => {\n setResults(payload.results ?? []);\n })\n .catch((error: unknown) => {\n if (error instanceof DOMException && error.name === \"AbortError\")\n return;\n setResults([]);\n })\n .finally(() => setIsLoading(false));\n }, 120);\n\n return () => {\n window.clearTimeout(timeout);\n controller.abort();\n };\n }, [query]);\n\n const close = () => onOpenChange(false);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>Search</DialogTitle>\n <DialogDescription>Search your vault.</DialogDescription>\n </DialogHeader>\n <DialogContent\n className=\"top-[12vh] translate-y-0 overflow-hidden rounded-xl! p-0 sm:max-w-xl\"\n showCloseButton={false}\n >\n <Command shouldFilter={false}>\n <CommandInput\n autoFocus\n placeholder=\"Type to search…\"\n value={query}\n onValueChange={setQuery}\n />\n {query.trim() ? (\n <CommandList>\n {isLoading ? (\n <div className=\"py-12 text-center text-sm text-muted-foreground\">\n Searching…\n </div>\n ) : null}\n {!isLoading && results.length === 0 ? (\n <CommandEmpty>No results found</CommandEmpty>\n ) : null}\n {results.map((result) => (\n <CommandItem\n key={result.slug}\n value={`${result.title} ${result.slug}`}\n onSelect={() => {\n navigate(slugToHref(result.slug));\n close();\n }}\n >\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n <HighlightedText parts={result.titleParts} />\n </span>\n {result.excerptParts.length > 0 ? (\n <span className=\"truncate text-xs leading-relaxed text-muted-foreground\">\n <HighlightedText parts={result.excerptParts} />\n </span>\n ) : null}\n </div>\n </CommandItem>\n ))}\n </CommandList>\n ) : null}\n {results.length > 0 ? (\n <div className=\"flex items-center gap-4 border-t border-border px-4 py-2.5 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1.5\">\n <kbd className=\"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1 font-sans\">\n ↵\n </kbd>\n to select\n </span>\n <span className=\"flex items-center gap-1.5\">\n <kbd className=\"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1 font-sans\">\n ↑\n </kbd>\n <kbd className=\"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1 font-sans\">\n ↓\n </kbd>\n to navigate\n </span>\n <span className=\"flex items-center gap-1.5\">\n <kbd className=\"inline-flex h-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-sans\">\n esc\n </kbd>\n to close\n </span>\n </div>\n ) : null}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction HighlightedText({ parts }: { parts: SearchHighlightPart[] }) {\n return (\n <>\n {parts.map((part, index) =>\n part.highlighted ? (\n <mark\n key={index}\n className=\"bg-transparent p-0 font-medium text-primary\"\n >\n {part.text}\n </mark>\n ) : (\n <React.Fragment key={index}>{part.text}</React.Fragment>\n ),\n )}\n </>\n );\n}\n"],"mappings":";AA2DI,mBAQI,KAOA,YAfJ;AAzDJ,YAAY,WAAW;AAEvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAE3B,SAAS,wBAAwB;AACjC,SAAS,kBAAkB;AAmBpB,SAAS,cAAc;AAAA,EAC5B,cAAc;AAAA,EACd;AACF,GAAuB;AACrB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAE5C,QAAM,UAAU,MAAM;AACpB,UAAM,YAAY,CAAC,UAAyB;AAC1C,WAAK,MAAM,WAAW,MAAM,YAAY,MAAM,IAAI,YAAY,MAAM,KAAK;AACvE,cAAM,eAAe;AACrB,gBAAQ,CAAC,UAAU,CAAC,KAAK;AAAA,MAC3B;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,WAAO,MAAM,OAAO,oBAAoB,WAAW,SAAS;AAAA,EAC9D,GAAG,CAAC,CAAC;AAEL,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SAAS,MAAM,QAAQ,IAAI;AAAA,QAC3B;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,WAAU;AAAA;AAAA,UACZ;AAAA,UACA,oBAAC,UAAK,WAAU,0CACb,uBACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,WAAU;AAAA,cAEV;AAAA,oCAAC,UAAK,WAAU,WAAU,oBAAC;AAAA,gBAAO;AAAA;AAAA;AAAA,UACpC;AAAA;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,iBAAc,MAAY,cAAc,SAAS;AAAA,KACpD;AAEJ;AAOO,SAAS,cAAc,EAAE,MAAM,aAAa,GAAuB;AACxE,QAAM,EAAE,SAAS,IAAI,iBAAiB;AACtC,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,EAAE;AAC3C,QAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAAyB,CAAC,CAAC;AAC/D,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,KAAK;AAEtD,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,MAAM;AACT,eAAS,EAAE;AACX,iBAAW,CAAC,CAAC;AACb,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,UAAU,MAAM;AACpB,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,CAAC,SAAS;AACZ,iBAAW,CAAC,CAAC;AACb,mBAAa,KAAK;AAClB,aAAO,MAAM,WAAW,MAAM;AAAA,IAChC;AAEA,iBAAa,IAAI;AACjB,UAAM,UAAU,OAAO,WAAW,MAAM;AACtC,YAAM,iBAAiB,mBAAmB,OAAO,CAAC,IAAI;AAAA,QACpD,QAAQ,WAAW;AAAA,MACrB,CAAC,EACE,KAAK,CAAC,aAAc,SAAS,KAAK,SAAS,KAAK,IAAI,EAAE,SAAS,CAAC,EAAE,CAAE,EACpE,KAAK,CAAC,YAA0C;AAC/C,mBAAW,QAAQ,WAAW,CAAC,CAAC;AAAA,MAClC,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,YAAI,iBAAiB,gBAAgB,MAAM,SAAS;AAClD;AACF,mBAAW,CAAC,CAAC;AAAA,MACf,CAAC,EACA,QAAQ,MAAM,aAAa,KAAK,CAAC;AAAA,IACtC,GAAG,GAAG;AAEN,WAAO,MAAM;AACX,aAAO,aAAa,OAAO;AAC3B,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,QAAQ,MAAM,aAAa,KAAK;AAEtC,SACE,qBAAC,UAAO,MAAY,cAClB;AAAA,yBAAC,gBAAa,WAAU,WACtB;AAAA,0BAAC,eAAY,oBAAM;AAAA,MACnB,oBAAC,qBAAkB,gCAAkB;AAAA,OACvC;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,iBAAiB;AAAA,QAEjB,+BAAC,WAAQ,cAAc,OACrB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAS;AAAA,cACT,aAAY;AAAA,cACZ,OAAO;AAAA,cACP,eAAe;AAAA;AAAA,UACjB;AAAA,UACC,MAAM,KAAK,IACV,qBAAC,eACE;AAAA,wBACC,oBAAC,SAAI,WAAU,mDAAkD,6BAEjE,IACE;AAAA,YACH,CAAC,aAAa,QAAQ,WAAW,IAChC,oBAAC,gBAAa,8BAAgB,IAC5B;AAAA,YACH,QAAQ,IAAI,CAAC,WACZ;AAAA,cAAC;AAAA;AAAA,gBAEC,OAAO,GAAG,OAAO,KAAK,IAAI,OAAO,IAAI;AAAA,gBACrC,UAAU,MAAM;AACd,2BAAS,WAAW,OAAO,IAAI,CAAC;AAChC,wBAAM;AAAA,gBACR;AAAA,gBAEA,+BAAC,SAAI,WAAU,+BACb;AAAA,sCAAC,UAAK,WAAU,gDACd,8BAAC,mBAAgB,OAAO,OAAO,YAAY,GAC7C;AAAA,kBACC,OAAO,aAAa,SAAS,IAC5B,oBAAC,UAAK,WAAU,0DACd,8BAAC,mBAAgB,OAAO,OAAO,cAAc,GAC/C,IACE;AAAA,mBACN;AAAA;AAAA,cAhBK,OAAO;AAAA,YAiBd,CACD;AAAA,aACH,IACE;AAAA,UACH,QAAQ,SAAS,IAChB,qBAAC,SAAI,WAAU,4FACb;AAAA,iCAAC,UAAK,WAAU,6BACd;AAAA,kCAAC,SAAI,WAAU,4GAA2G,oBAE1H;AAAA,cAAM;AAAA,eAER;AAAA,YACA,qBAAC,UAAK,WAAU,6BACd;AAAA,kCAAC,SAAI,WAAU,4GAA2G,oBAE1H;AAAA,cACA,oBAAC,SAAI,WAAU,4GAA2G,oBAE1H;AAAA,cAAM;AAAA,eAER;AAAA,YACA,qBAAC,UAAK,WAAU,6BACd;AAAA,kCAAC,SAAI,WAAU,sGAAqG,iBAEpH;AAAA,cAAM;AAAA,eAER;AAAA,aACF,IACE;AAAA,WACN;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,SAAS,gBAAgB,EAAE,MAAM,GAAqC;AACpE,SACE,gCACG,gBAAM;AAAA,IAAI,CAAC,MAAM,UAChB,KAAK,cACH;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QAET,eAAK;AAAA;AAAA,MAHD;AAAA,IAIP,IAEA,oBAAC,MAAM,UAAN,EAA4B,eAAK,QAAb,KAAkB;AAAA,EAE3C,GACF;AAEJ;","names":[]}
|
package/dist/sign-in-shell.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
|
|
4
4
|
type SignInShellProps = {
|
|
@@ -9,6 +9,6 @@ type SignInShellProps = {
|
|
|
9
9
|
subheadline?: string;
|
|
10
10
|
children: ReactNode;
|
|
11
11
|
};
|
|
12
|
-
declare function SignInShell({ title, description, logo, headline, subheadline, children, }: SignInShellProps):
|
|
12
|
+
declare function SignInShell({ title, description, logo, headline, subheadline, children, }: SignInShellProps): React.JSX.Element;
|
|
13
13
|
|
|
14
14
|
export { SignInShell, type SignInShellProps };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
import { TocItem } from '@silicajs/core/runtime';
|
|
4
3
|
|
|
@@ -8,6 +7,6 @@ type TableOfContentsProps = {
|
|
|
8
7
|
heading?: React.ReactNode;
|
|
9
8
|
className?: string;
|
|
10
9
|
};
|
|
11
|
-
declare function TableOfContents({ toc, activeId, heading, className, }: TableOfContentsProps):
|
|
10
|
+
declare function TableOfContents({ toc, activeId, heading, className, }: TableOfContentsProps): React.JSX.Element | null;
|
|
12
11
|
|
|
13
12
|
export { TableOfContents, type TableOfContentsProps };
|
package/dist/tags-list.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { ManifestEntry } from '@silicajs/core/runtime';
|
|
3
3
|
|
|
4
4
|
type TagsListProps = {
|
|
@@ -6,6 +6,6 @@ type TagsListProps = {
|
|
|
6
6
|
tag: string;
|
|
7
7
|
className?: string;
|
|
8
8
|
};
|
|
9
|
-
declare function TagsList({ entries: allEntries, tag, className, }: TagsListProps):
|
|
9
|
+
declare function TagsList({ entries: allEntries, tag, className, }: TagsListProps): React.JSX.Element;
|
|
10
10
|
|
|
11
11
|
export { TagsList, type TagsListProps };
|
package/dist/user-menu.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type UserMenuProps = {
|
|
4
4
|
logo?: string;
|
|
5
5
|
};
|
|
6
|
-
declare function UserMenu({ logo }: UserMenuProps):
|
|
6
|
+
declare function UserMenu({ logo }: UserMenuProps): React.JSX.Element;
|
|
7
7
|
|
|
8
8
|
export { UserMenu, type UserMenuProps };
|
package/dist/vault-tree.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type VaultTreeEntry = {
|
|
4
4
|
slug: string;
|
|
@@ -10,7 +10,7 @@ type VaultTreeProps = {
|
|
|
10
10
|
currentSlug?: string;
|
|
11
11
|
showHomeLink?: boolean;
|
|
12
12
|
};
|
|
13
|
-
declare function VaultTree({ navigationEndpoint, currentSlug: currentSlugProp, showHomeLink, }: VaultTreeProps):
|
|
13
|
+
declare function VaultTree({ navigationEndpoint, currentSlug: currentSlugProp, showHomeLink, }: VaultTreeProps): React.JSX.Element;
|
|
14
14
|
declare function loadNavigationEntries(endpoint: string): Promise<VaultTreeEntry[]>;
|
|
15
15
|
|
|
16
16
|
export { VaultTree, type VaultTreeEntry, type VaultTreeProps, loadNavigationEntries };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silicajs/components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Silica-aware, framework-agnostic React composables built on @silicajs/ui.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"test": "vitest run --passWithNoTests"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@silicajs/core": "^0.
|
|
31
|
+
"@silicajs/core": "^0.7.1",
|
|
32
32
|
"@silicajs/remark-obsidian": "^0.1.0",
|
|
33
|
-
"@silicajs/ui": "^0.1.
|
|
33
|
+
"@silicajs/ui": "^0.1.3",
|
|
34
34
|
"lucide-react": "^1.17.0"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"react-dom": "^19.2.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@types/react": "^19.2.
|
|
41
|
+
"@types/react": "^19.2.17",
|
|
42
42
|
"@types/react-dom": "^19.2.3",
|
|
43
43
|
"react": "^19.2.6",
|
|
44
44
|
"react-dom": "^19.2.7",
|