raffel 1.1.11 → 1.1.15
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/docs/ui/assets/raffel-docs.css +25 -0
- package/dist/docs/ui/assets/raffel-docs.js +43 -7
- package/dist/docs/ui/assets/sidebar-tree.js +9 -2
- package/dist/docs/ui/html-builder.d.ts.map +1 -1
- package/dist/docs/ui/html-builder.js +14 -1
- package/dist/docs/ui/html-builder.js.map +1 -1
- package/dist/docs/ui/runtime/index.js +43 -7
- package/dist/docs/ui/runtime/index.js.map +1 -1
- package/dist/docs/ui/runtime/sidebar-tree.js +9 -2
- package/dist/docs/ui/runtime/sidebar-tree.js.map +1 -1
- package/dist/docs/ui/style-sections/layout-navigation.d.ts +1 -1
- package/dist/docs/ui/style-sections/layout-navigation.d.ts.map +1 -1
- package/dist/docs/ui/style-sections/layout-navigation.js +25 -0
- package/dist/docs/ui/style-sections/layout-navigation.js.map +1 -1
- package/dist/docs/ui/types.d.ts +2 -0
- package/dist/docs/ui/types.d.ts.map +1 -1
- package/dist/docs/usd-middleware.d.ts.map +1 -1
- package/dist/docs/usd-middleware.js +12 -11
- package/dist/docs/usd-middleware.js.map +1 -1
- package/dist/ui/docs/ui/html-builder.d.ts.map +1 -1
- package/dist/ui/docs/ui/style-sections/layout-navigation.d.ts +1 -1
- package/dist/ui/docs/ui/style-sections/layout-navigation.d.ts.map +1 -1
- package/dist/ui/docs/ui/types.d.ts +2 -0
- package/dist/ui/docs/ui/types.d.ts.map +1 -1
- package/dist/ui/docs/usd-middleware.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -951,6 +951,31 @@
|
|
|
951
951
|
}
|
|
952
952
|
}
|
|
953
953
|
|
|
954
|
+
.docs-pages-group > .tag-group-header {
|
|
955
|
+
color: var(--text-primary);
|
|
956
|
+
background: var(--hover-bg);
|
|
957
|
+
border-left: 3px solid var(--primary-color);
|
|
958
|
+
padding-left: 9px;
|
|
959
|
+
margin-bottom: 4px;
|
|
960
|
+
letter-spacing: 0.01em;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
.docs-pages-group > .tag-group-header:hover {
|
|
964
|
+
background: var(--hover-bg);
|
|
965
|
+
opacity: 0.85;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
.docs-sidebar-home {
|
|
969
|
+
display: flex;
|
|
970
|
+
align-items: center;
|
|
971
|
+
gap: 6px;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
.docs-sidebar-home-icon {
|
|
975
|
+
flex-shrink: 0;
|
|
976
|
+
opacity: 0.7;
|
|
977
|
+
}
|
|
978
|
+
|
|
954
979
|
/* ========== TOC (On this page) — editorial sidenote ========== */
|
|
955
980
|
.toc {
|
|
956
981
|
align-self: start;
|
|
@@ -908,8 +908,13 @@ function setDocsPage(path, headingId = '') {
|
|
|
908
908
|
activePagePath = resolveDocsAlias(normalizeDocsPath(path));
|
|
909
909
|
activeHeadingId = headingId;
|
|
910
910
|
win.history?.replaceState?.(null, '', routeToHash(activePagePath, activeHeadingId));
|
|
911
|
-
if (!activeHeadingId)
|
|
912
|
-
|
|
911
|
+
if (!activeHeadingId) {
|
|
912
|
+
const appEl = doc.getElementById('docs') ?? doc.querySelector('.app-container');
|
|
913
|
+
if (appEl)
|
|
914
|
+
appEl.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
915
|
+
else
|
|
916
|
+
win.scrollTo?.({ top: 0, behavior: 'smooth' });
|
|
917
|
+
}
|
|
913
918
|
runVoidHook('onRouteChange', getPluginContext({ pagePath: activePagePath, headingId: activeHeadingId }));
|
|
914
919
|
render();
|
|
915
920
|
}
|
|
@@ -1039,8 +1044,30 @@ function renderSidebar() {
|
|
|
1039
1044
|
function renderDocsPagesNav(nav) {
|
|
1040
1045
|
if (sidebarConfig.docsPages === false)
|
|
1041
1046
|
return;
|
|
1047
|
+
const groupLabel = sidebarConfig.docsPagesGroup;
|
|
1048
|
+
const hasActiveDocPage = Boolean(activePagePath);
|
|
1049
|
+
let target = nav;
|
|
1050
|
+
if (groupLabel) {
|
|
1051
|
+
const allPages = getDocsPageViews();
|
|
1052
|
+
const wrapper = doc.createElement('div');
|
|
1053
|
+
wrapper.className = `tag-group docs-pages-group${hasActiveDocPage || sidebarConfig.expandAll ? '' : ' collapsed'}`;
|
|
1054
|
+
const header = doc.createElement('div');
|
|
1055
|
+
header.className = 'tag-group-header';
|
|
1056
|
+
header.innerHTML = `<span class="tag-group-arrow">▼</span>${esc(groupLabel)}<span class="tag-group-count">${allPages.length}</span>`;
|
|
1057
|
+
const inner = doc.createElement('div');
|
|
1058
|
+
inner.className = 'tag-group-items';
|
|
1059
|
+
inner.style.maxHeight = hasActiveDocPage || sidebarConfig.expandAll ? '9999px' : '0';
|
|
1060
|
+
header.onclick = () => {
|
|
1061
|
+
wrapper.classList.toggle('collapsed');
|
|
1062
|
+
inner.style.maxHeight = wrapper.classList.contains('collapsed') ? '0' : '9999px';
|
|
1063
|
+
};
|
|
1064
|
+
wrapper.appendChild(header);
|
|
1065
|
+
wrapper.appendChild(inner);
|
|
1066
|
+
nav.appendChild(wrapper);
|
|
1067
|
+
target = inner;
|
|
1068
|
+
}
|
|
1042
1069
|
if (docsSidebar.length > 0 && !searchQuery) {
|
|
1043
|
-
renderDeclarativeDocsSidebar(
|
|
1070
|
+
renderDeclarativeDocsSidebar(target);
|
|
1044
1071
|
return;
|
|
1045
1072
|
}
|
|
1046
1073
|
const pages = getDocsPageViews().filter(page => !searchQuery ||
|
|
@@ -1054,9 +1081,10 @@ function renderDocsPagesNav(nav) {
|
|
|
1054
1081
|
sections.get(page.section)?.push(page);
|
|
1055
1082
|
}
|
|
1056
1083
|
for (const [section, sectionPages] of sections) {
|
|
1057
|
-
appendSidebarGroup(
|
|
1084
|
+
appendSidebarGroup(target, section, sectionPages.map(page => ({
|
|
1058
1085
|
active: page.path === activePagePath,
|
|
1059
1086
|
label: page.title,
|
|
1087
|
+
path: page.path,
|
|
1060
1088
|
children: page.path === activePagePath && !searchQuery ? extractSidebarHeadings(page.markdown) : [],
|
|
1061
1089
|
onClick: () => setDocsPage(page.path),
|
|
1062
1090
|
})));
|
|
@@ -1078,21 +1106,29 @@ function renderDeclarativeDocsSidebar(nav) {
|
|
|
1078
1106
|
extractSidebarHeadings,
|
|
1079
1107
|
});
|
|
1080
1108
|
}
|
|
1109
|
+
const HOME_ICON_SVG = '<svg class="docs-sidebar-home-icon" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>';
|
|
1081
1110
|
function appendSidebarGroup(nav, title, items) {
|
|
1082
1111
|
const group = doc.createElement('div');
|
|
1083
1112
|
group.className = 'tag-group';
|
|
1084
1113
|
const header = doc.createElement('div');
|
|
1085
1114
|
header.className = 'tag-group-header';
|
|
1086
1115
|
header.innerHTML = `<span class="tag-group-arrow">▼</span>${esc(title)}<span class="tag-group-count">${items.length}</span>`;
|
|
1087
|
-
header.onclick = () => group.classList.toggle('collapsed');
|
|
1088
1116
|
const itemContainer = doc.createElement('div');
|
|
1089
1117
|
itemContainer.className = 'tag-group-items';
|
|
1090
1118
|
const childCount = items.reduce((count, item) => count + (item.children?.length ?? 0), 0);
|
|
1091
|
-
|
|
1119
|
+
const expandedHeight = `${items.length * 50 + childCount * 34}px`;
|
|
1120
|
+
itemContainer.style.maxHeight = expandedHeight;
|
|
1121
|
+
header.onclick = () => {
|
|
1122
|
+
group.classList.toggle('collapsed');
|
|
1123
|
+
itemContainer.style.maxHeight = group.classList.contains('collapsed') ? '0' : expandedHeight;
|
|
1124
|
+
};
|
|
1092
1125
|
for (const item of items) {
|
|
1093
1126
|
const el = doc.createElement('div');
|
|
1094
1127
|
el.className = `nav-item${item.active ? ' active' : ''}`;
|
|
1095
|
-
|
|
1128
|
+
const isHome = item.path === '/' || item.path === '';
|
|
1129
|
+
el.innerHTML = isHome
|
|
1130
|
+
? `<span class="docs-sidebar-home">${HOME_ICON_SVG}<span class="nav-item-path">${esc(item.label)}</span></span>`
|
|
1131
|
+
: `${item.prefix ? `<span class="nav-item-method method-${esc(item.prefix.toLowerCase())}">${esc(item.prefix)}</span>` : ''}<span class="nav-item-path">${esc(item.label)}</span>`;
|
|
1096
1132
|
el.onclick = (event) => {
|
|
1097
1133
|
event.stopPropagation();
|
|
1098
1134
|
item.onClick();
|
|
@@ -16,10 +16,13 @@ function appendSidebarItem(parent, item, depth, deps) {
|
|
|
16
16
|
const header = deps.doc.createElement('div');
|
|
17
17
|
header.className = `tag-group-header${active ? ' active' : ''}`;
|
|
18
18
|
header.innerHTML = `<span class="tag-group-arrow">▼</span>${deps.esc(title)}<span class="tag-group-count">${countLeaves(children)}</span>`;
|
|
19
|
-
header.onclick = () => group.classList.toggle('collapsed');
|
|
20
19
|
const childContainer = deps.doc.createElement('div');
|
|
21
20
|
childContainer.className = 'tag-group-items';
|
|
22
21
|
childContainer.style.maxHeight = expanded ? `${Math.max(1, countRows(children)) * 90}px` : '0';
|
|
22
|
+
header.onclick = () => {
|
|
23
|
+
group.classList.toggle('collapsed');
|
|
24
|
+
childContainer.style.maxHeight = group.classList.contains('collapsed') ? '0' : `${Math.max(1, countRows(children)) * 90}px`;
|
|
25
|
+
};
|
|
23
26
|
if (itemPath || item.href) {
|
|
24
27
|
childContainer.appendChild(createPageItem(item, title, active, depth, deps));
|
|
25
28
|
if (active && !deps.searchQuery)
|
|
@@ -39,7 +42,11 @@ function appendSidebarItem(parent, item, depth, deps) {
|
|
|
39
42
|
function createPageItem(item, title, active, depth, deps) {
|
|
40
43
|
const element = deps.doc.createElement('div');
|
|
41
44
|
element.className = `nav-item docs-page-nav-item docs-sidebar-page docs-sidebar-depth-${depth}${active ? ' active' : ''}`;
|
|
42
|
-
|
|
45
|
+
const normalizedPath = item.path ? deps.normalizeDocsPath(item.path) : '';
|
|
46
|
+
const isHome = depth === 0 && (normalizedPath === '/' || normalizedPath === '');
|
|
47
|
+
element.innerHTML = isHome
|
|
48
|
+
? `<span class="docs-sidebar-home"><svg class="docs-sidebar-home-icon" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg><span class="nav-item-text">${deps.esc(title)}</span></span>`
|
|
49
|
+
: `<span class="nav-item-text">${deps.esc(title)}</span>`;
|
|
43
50
|
element.onclick = (event) => {
|
|
44
51
|
event.stopPropagation();
|
|
45
52
|
if (item.href && !item.path) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-builder.d.ts","sourceRoot":"","sources":["../../../src/docs/ui/html-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAA6C,kBAAkB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"html-builder.d.ts","sourceRoot":"","sources":["../../../src/docs/ui/html-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAA6C,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAoB/F;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA0JlE;AAmCD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAYjE"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* 2. All user-visible text is escaped before rendering
|
|
12
12
|
* 3. JSON data is escaped for script embedding to prevent XSS
|
|
13
13
|
*/
|
|
14
|
+
const _startupTs = Date.now();
|
|
14
15
|
import { generateStyles } from './styles.js';
|
|
15
16
|
import { escapeHtml, escapeJsonForScript, generateHeroBackgroundCSS } from './utils.js';
|
|
16
17
|
import { generateAppContainer, generateHeroSection, generateIntroductionSection, generateSkipLink, generateTopNavigation, mergeHeroConfig, } from './html-shell.js';
|
|
@@ -99,9 +100,21 @@ ${styles}
|
|
|
99
100
|
});
|
|
100
101
|
})();
|
|
101
102
|
</script>
|
|
103
|
+
<script type="importmap">
|
|
104
|
+
{
|
|
105
|
+
"imports": {
|
|
106
|
+
"${escapeHtml(assetBasePath)}/-/sidebar-tree.js": "${escapeHtml(assetBasePath)}/-/sidebar-tree.js?v=${_startupTs}",
|
|
107
|
+
"${escapeHtml(assetBasePath)}/-/marked-renderer.js": "${escapeHtml(assetBasePath)}/-/marked-renderer.js?v=${_startupTs}",
|
|
108
|
+
"${escapeHtml(assetBasePath)}/-/protocol-console.js": "${escapeHtml(assetBasePath)}/-/protocol-console.js?v=${_startupTs}",
|
|
109
|
+
"${escapeHtml(assetBasePath)}/-/code-block-toolbar.js": "${escapeHtml(assetBasePath)}/-/code-block-toolbar.js?v=${_startupTs}",
|
|
110
|
+
"${escapeHtml(assetBasePath)}/-/page-nav.js": "${escapeHtml(assetBasePath)}/-/page-nav.js?v=${_startupTs}",
|
|
111
|
+
"${escapeHtml(assetBasePath)}/-/search-modal.js": "${escapeHtml(assetBasePath)}/-/search-modal.js?v=${_startupTs}"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
</script>
|
|
102
115
|
<script src="${escapeHtml(assetBasePath)}/-/marked.umd.js"></script>
|
|
103
116
|
<script src="${escapeHtml(assetBasePath)}/-/prism.js"></script>
|
|
104
|
-
<script type="module" data-raffel-runtime="external" src="${escapeHtml(assetBasePath)}/-/raffel-docs.js"></script>`
|
|
117
|
+
<script type="module" data-raffel-runtime="external" src="${escapeHtml(assetBasePath)}/-/raffel-docs.js?v=${_startupTs}"></script>`
|
|
105
118
|
: `${generateInlineRuntimeDependencyScripts()}
|
|
106
119
|
<script type="module" data-raffel-runtime="inline">
|
|
107
120
|
${generateClientRuntimeScript()}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-builder.js","sourceRoot":"","sources":["../../../src/docs/ui/html-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"html-builder.js","sourceRoot":"","sources":["../../../src/docs/ui/html-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -908,8 +908,13 @@ function setDocsPage(path, headingId = '') {
|
|
|
908
908
|
activePagePath = resolveDocsAlias(normalizeDocsPath(path));
|
|
909
909
|
activeHeadingId = headingId;
|
|
910
910
|
win.history?.replaceState?.(null, '', routeToHash(activePagePath, activeHeadingId));
|
|
911
|
-
if (!activeHeadingId)
|
|
912
|
-
|
|
911
|
+
if (!activeHeadingId) {
|
|
912
|
+
const appEl = doc.getElementById('docs') ?? doc.querySelector('.app-container');
|
|
913
|
+
if (appEl)
|
|
914
|
+
appEl.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
915
|
+
else
|
|
916
|
+
win.scrollTo?.({ top: 0, behavior: 'smooth' });
|
|
917
|
+
}
|
|
913
918
|
runVoidHook('onRouteChange', getPluginContext({ pagePath: activePagePath, headingId: activeHeadingId }));
|
|
914
919
|
render();
|
|
915
920
|
}
|
|
@@ -1039,8 +1044,30 @@ function renderSidebar() {
|
|
|
1039
1044
|
function renderDocsPagesNav(nav) {
|
|
1040
1045
|
if (sidebarConfig.docsPages === false)
|
|
1041
1046
|
return;
|
|
1047
|
+
const groupLabel = sidebarConfig.docsPagesGroup;
|
|
1048
|
+
const hasActiveDocPage = Boolean(activePagePath);
|
|
1049
|
+
let target = nav;
|
|
1050
|
+
if (groupLabel) {
|
|
1051
|
+
const allPages = getDocsPageViews();
|
|
1052
|
+
const wrapper = doc.createElement('div');
|
|
1053
|
+
wrapper.className = `tag-group docs-pages-group${hasActiveDocPage || sidebarConfig.expandAll ? '' : ' collapsed'}`;
|
|
1054
|
+
const header = doc.createElement('div');
|
|
1055
|
+
header.className = 'tag-group-header';
|
|
1056
|
+
header.innerHTML = `<span class="tag-group-arrow">▼</span>${esc(groupLabel)}<span class="tag-group-count">${allPages.length}</span>`;
|
|
1057
|
+
const inner = doc.createElement('div');
|
|
1058
|
+
inner.className = 'tag-group-items';
|
|
1059
|
+
inner.style.maxHeight = hasActiveDocPage || sidebarConfig.expandAll ? '9999px' : '0';
|
|
1060
|
+
header.onclick = () => {
|
|
1061
|
+
wrapper.classList.toggle('collapsed');
|
|
1062
|
+
inner.style.maxHeight = wrapper.classList.contains('collapsed') ? '0' : '9999px';
|
|
1063
|
+
};
|
|
1064
|
+
wrapper.appendChild(header);
|
|
1065
|
+
wrapper.appendChild(inner);
|
|
1066
|
+
nav.appendChild(wrapper);
|
|
1067
|
+
target = inner;
|
|
1068
|
+
}
|
|
1042
1069
|
if (docsSidebar.length > 0 && !searchQuery) {
|
|
1043
|
-
renderDeclarativeDocsSidebar(
|
|
1070
|
+
renderDeclarativeDocsSidebar(target);
|
|
1044
1071
|
return;
|
|
1045
1072
|
}
|
|
1046
1073
|
const pages = getDocsPageViews().filter(page => !searchQuery ||
|
|
@@ -1054,9 +1081,10 @@ function renderDocsPagesNav(nav) {
|
|
|
1054
1081
|
sections.get(page.section)?.push(page);
|
|
1055
1082
|
}
|
|
1056
1083
|
for (const [section, sectionPages] of sections) {
|
|
1057
|
-
appendSidebarGroup(
|
|
1084
|
+
appendSidebarGroup(target, section, sectionPages.map(page => ({
|
|
1058
1085
|
active: page.path === activePagePath,
|
|
1059
1086
|
label: page.title,
|
|
1087
|
+
path: page.path,
|
|
1060
1088
|
children: page.path === activePagePath && !searchQuery ? extractSidebarHeadings(page.markdown) : [],
|
|
1061
1089
|
onClick: () => setDocsPage(page.path),
|
|
1062
1090
|
})));
|
|
@@ -1078,21 +1106,29 @@ function renderDeclarativeDocsSidebar(nav) {
|
|
|
1078
1106
|
extractSidebarHeadings,
|
|
1079
1107
|
});
|
|
1080
1108
|
}
|
|
1109
|
+
const HOME_ICON_SVG = '<svg class="docs-sidebar-home-icon" width="13" height="13" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>';
|
|
1081
1110
|
function appendSidebarGroup(nav, title, items) {
|
|
1082
1111
|
const group = doc.createElement('div');
|
|
1083
1112
|
group.className = 'tag-group';
|
|
1084
1113
|
const header = doc.createElement('div');
|
|
1085
1114
|
header.className = 'tag-group-header';
|
|
1086
1115
|
header.innerHTML = `<span class="tag-group-arrow">▼</span>${esc(title)}<span class="tag-group-count">${items.length}</span>`;
|
|
1087
|
-
header.onclick = () => group.classList.toggle('collapsed');
|
|
1088
1116
|
const itemContainer = doc.createElement('div');
|
|
1089
1117
|
itemContainer.className = 'tag-group-items';
|
|
1090
1118
|
const childCount = items.reduce((count, item) => count + (item.children?.length ?? 0), 0);
|
|
1091
|
-
|
|
1119
|
+
const expandedHeight = `${items.length * 50 + childCount * 34}px`;
|
|
1120
|
+
itemContainer.style.maxHeight = expandedHeight;
|
|
1121
|
+
header.onclick = () => {
|
|
1122
|
+
group.classList.toggle('collapsed');
|
|
1123
|
+
itemContainer.style.maxHeight = group.classList.contains('collapsed') ? '0' : expandedHeight;
|
|
1124
|
+
};
|
|
1092
1125
|
for (const item of items) {
|
|
1093
1126
|
const el = doc.createElement('div');
|
|
1094
1127
|
el.className = `nav-item${item.active ? ' active' : ''}`;
|
|
1095
|
-
|
|
1128
|
+
const isHome = item.path === '/' || item.path === '';
|
|
1129
|
+
el.innerHTML = isHome
|
|
1130
|
+
? `<span class="docs-sidebar-home">${HOME_ICON_SVG}<span class="nav-item-path">${esc(item.label)}</span></span>`
|
|
1131
|
+
: `${item.prefix ? `<span class="nav-item-method method-${esc(item.prefix.toLowerCase())}">${esc(item.prefix)}</span>` : ''}<span class="nav-item-path">${esc(item.label)}</span>`;
|
|
1096
1132
|
el.onclick = (event) => {
|
|
1097
1133
|
event.stopPropagation();
|
|
1098
1134
|
item.onClick();
|