@refrakt-md/svelte 0.7.2 → 0.8.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/package.json +4 -4
- package/src/Renderer.svelte +1 -1
- package/src/ThemeShell.svelte +6 -0
- package/src/route-rules.ts +2 -31
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@refrakt-md/svelte",
|
|
3
3
|
"description": "Svelte renderer for refrakt.md content",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@markdoc/markdoc": "0.4.0",
|
|
30
|
-
"@refrakt-md/behaviors": "0.
|
|
31
|
-
"@refrakt-md/transform": "0.
|
|
32
|
-
"@refrakt-md/types": "0.
|
|
30
|
+
"@refrakt-md/behaviors": "0.8.1",
|
|
31
|
+
"@refrakt-md/transform": "0.8.1",
|
|
32
|
+
"@refrakt-md/types": "0.8.1"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"svelte": "^5.0.0"
|
package/src/Renderer.svelte
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
{:else if typeof node === 'number'}
|
|
61
61
|
{String(node)}
|
|
62
62
|
{:else if isTag(node)}
|
|
63
|
-
{@const Component = node.attributes?.
|
|
63
|
+
{@const Component = node.attributes?.['data-rune'] ? getComponent(node.attributes['data-rune']) : undefined}
|
|
64
64
|
{@const ElementOverride = !Component && merged?.[node.name] ? merged[node.name] : undefined}
|
|
65
65
|
{#if Component}
|
|
66
66
|
<Component tag={node}>
|
package/src/ThemeShell.svelte
CHANGED
|
@@ -70,7 +70,11 @@
|
|
|
70
70
|
// Keep RfContext in sync for web components BEFORE DOM updates.
|
|
71
71
|
// $effect.pre runs before {#key page.url} recreates the DOM, so
|
|
72
72
|
// RfNav.connectedCallback sees the new URL when it fires.
|
|
73
|
+
// Also save sidebar scroll position before the DOM is destroyed.
|
|
74
|
+
let savedSidebarScroll = 0;
|
|
73
75
|
$effect.pre(() => {
|
|
76
|
+
const sidebar = document.querySelector('.rf-docs-sidebar');
|
|
77
|
+
if (sidebar) savedSidebarScroll = sidebar.scrollTop;
|
|
74
78
|
RfContext.pages = page.pages;
|
|
75
79
|
RfContext.currentUrl = page.url;
|
|
76
80
|
});
|
|
@@ -88,6 +92,8 @@
|
|
|
88
92
|
if (active) {
|
|
89
93
|
cleanupRunes = initRuneBehaviors();
|
|
90
94
|
cleanupLayout = initLayoutBehaviors();
|
|
95
|
+
const sidebar = document.querySelector('.rf-docs-sidebar');
|
|
96
|
+
if (sidebar) sidebar.scrollTop = savedSidebarScroll;
|
|
91
97
|
}
|
|
92
98
|
});
|
|
93
99
|
return () => {
|
package/src/route-rules.ts
CHANGED
|
@@ -1,31 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Match a URL against an ordered list of route rules.
|
|
5
|
-
* Returns the layout name from the first matching rule, or 'default' if none match.
|
|
6
|
-
*
|
|
7
|
-
* Pattern syntax:
|
|
8
|
-
* - "docs/**" matches /docs/anything and /docs/nested/deep
|
|
9
|
-
* - "blog/*" matches /blog/post but not /blog/nested/deep
|
|
10
|
-
* - "**" matches everything (catch-all)
|
|
11
|
-
* - "about" matches /about exactly
|
|
12
|
-
*/
|
|
13
|
-
export function matchRouteRule(url: string, rules: RouteRule[]): string {
|
|
14
|
-
const normalized = url.startsWith('/') ? url.slice(1) : url;
|
|
15
|
-
|
|
16
|
-
for (const rule of rules) {
|
|
17
|
-
if (matchPattern(normalized, rule.pattern)) {
|
|
18
|
-
return rule.layout;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return 'default';
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function matchPattern(url: string, pattern: string): boolean {
|
|
25
|
-
const regexStr = pattern
|
|
26
|
-
.replace(/[.+^${}()|[\]\\]/g, '\\$&') // escape regex special chars (except * and ?)
|
|
27
|
-
.replace(/\*\*/g, '{{GLOBSTAR}}')
|
|
28
|
-
.replace(/\*/g, '[^/]*')
|
|
29
|
-
.replace(/\{\{GLOBSTAR\}\}/g, '.*');
|
|
30
|
-
return new RegExp(`^${regexStr}$`).test(url);
|
|
31
|
-
}
|
|
1
|
+
// Re-export from @refrakt-md/transform for backward compatibility
|
|
2
|
+
export { matchRouteRule } from '@refrakt-md/transform';
|