raffel 1.1.82 → 1.1.83

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.
Files changed (63) hide show
  1. package/dist/docs/ui/assets/raffel-docs.css +385 -196
  2. package/dist/docs/ui/assets/raffel-docs.js +269 -55
  3. package/dist/docs/ui/assets/sidebar-tree.js +3 -0
  4. package/dist/docs/ui/html-shell.d.ts.map +1 -1
  5. package/dist/docs/ui/html-shell.js +13 -0
  6. package/dist/docs/ui/html-shell.js.map +1 -1
  7. package/dist/docs/ui/runtime/index.js +269 -55
  8. package/dist/docs/ui/runtime/index.js.map +1 -1
  9. package/dist/docs/ui/runtime/sidebar-tree.js +3 -0
  10. package/dist/docs/ui/runtime/sidebar-tree.js.map +1 -1
  11. package/dist/docs/ui/style-sections/content.d.ts +1 -1
  12. package/dist/docs/ui/style-sections/content.d.ts.map +1 -1
  13. package/dist/docs/ui/style-sections/content.js +54 -54
  14. package/dist/docs/ui/style-sections/edit-link.d.ts +1 -1
  15. package/dist/docs/ui/style-sections/edit-link.js +2 -2
  16. package/dist/docs/ui/style-sections/layout-navigation.d.ts +1 -1
  17. package/dist/docs/ui/style-sections/layout-navigation.d.ts.map +1 -1
  18. package/dist/docs/ui/style-sections/layout-navigation.js +81 -20
  19. package/dist/docs/ui/style-sections/layout-navigation.js.map +1 -1
  20. package/dist/docs/ui/style-sections/schema-code.d.ts +1 -1
  21. package/dist/docs/ui/style-sections/schema-code.d.ts.map +1 -1
  22. package/dist/docs/ui/style-sections/schema-code.js +204 -77
  23. package/dist/docs/ui/style-sections/schema-code.js.map +1 -1
  24. package/dist/docs/ui/style-sections/shell.d.ts.map +1 -1
  25. package/dist/docs/ui/style-sections/shell.js +14 -13
  26. package/dist/docs/ui/style-sections/shell.js.map +1 -1
  27. package/dist/docs/ui/style-sections/try-it.d.ts +1 -1
  28. package/dist/docs/ui/style-sections/try-it.d.ts.map +1 -1
  29. package/dist/docs/ui/style-sections/try-it.js +30 -30
  30. package/dist/docs/ui/types.d.ts +8 -0
  31. package/dist/docs/ui/types.d.ts.map +1 -1
  32. package/dist/docs/usd-middleware.d.ts +8 -0
  33. package/dist/docs/usd-middleware.d.ts.map +1 -1
  34. package/dist/docs/usd-middleware.js.map +1 -1
  35. package/dist/server/types/lifecycle-docs-types.d.ts +4 -0
  36. package/dist/server/types/lifecycle-docs-types.d.ts.map +1 -1
  37. package/dist/ui/docs/ui/html-shell.d.ts.map +1 -1
  38. package/dist/ui/docs/ui/style-sections/content.d.ts +1 -1
  39. package/dist/ui/docs/ui/style-sections/content.d.ts.map +1 -1
  40. package/dist/ui/docs/ui/style-sections/edit-link.d.ts +1 -1
  41. package/dist/ui/docs/ui/style-sections/layout-navigation.d.ts +1 -1
  42. package/dist/ui/docs/ui/style-sections/layout-navigation.d.ts.map +1 -1
  43. package/dist/ui/docs/ui/style-sections/schema-code.d.ts +1 -1
  44. package/dist/ui/docs/ui/style-sections/schema-code.d.ts.map +1 -1
  45. package/dist/ui/docs/ui/style-sections/shell.d.ts.map +1 -1
  46. package/dist/ui/docs/ui/style-sections/try-it.d.ts +1 -1
  47. package/dist/ui/docs/ui/style-sections/try-it.d.ts.map +1 -1
  48. package/dist/ui/docs/ui/types.d.ts +8 -0
  49. package/dist/ui/docs/ui/types.d.ts.map +1 -1
  50. package/dist/ui/docs/usd-middleware.d.ts +8 -0
  51. package/dist/ui/docs/usd-middleware.d.ts.map +1 -1
  52. package/dist/ui/usd/builder/http.d.ts +17 -1
  53. package/dist/ui/usd/builder/http.d.ts.map +1 -1
  54. package/dist/ui/usd/spec/types.d.ts +5 -1
  55. package/dist/ui/usd/spec/types.d.ts.map +1 -1
  56. package/dist/usd/builder/http.d.ts +17 -1
  57. package/dist/usd/builder/http.d.ts.map +1 -1
  58. package/dist/usd/builder/http.js +10 -2
  59. package/dist/usd/builder/http.js.map +1 -1
  60. package/dist/usd/spec/types.d.ts +5 -1
  61. package/dist/usd/spec/types.d.ts.map +1 -1
  62. package/dist/usd/spec/types.js.map +1 -1
  63. package/package.json +1 -1
@@ -61,7 +61,12 @@ let searchQuery = '';
61
61
  let routeState = parseRouteHash();
62
62
  let activePagePath = resolveDocsAlias(routeState.pagePath);
63
63
  let activeHeadingId = routeState.headingId;
64
- const docsPlugins = [], themeStorageKey = 'raffel-docs-theme';
64
+ const docsPlugins = [];
65
+ const themeStorageKey = 'raffel-docs-theme';
66
+ const sidebarWidthStorageKey = 'raffel-docs-sidebar-width';
67
+ const defaultSidebarWidth = 280;
68
+ const defaultSidebarMinWidth = 220;
69
+ const defaultSidebarMaxWidth = 560;
65
70
  const docsStatePollMs = 10000;
66
71
  const docsStateRevisionNoticeMs = 15000;
67
72
  let docsStateSnapshot = {
@@ -949,6 +954,92 @@ function getGrpcMethodType(method) {
949
954
  function byId(id) {
950
955
  return doc?.getElementById(id);
951
956
  }
957
+ function finiteSidebarNumber(value, fallback) {
958
+ if (value === null || value === undefined || value === '')
959
+ return fallback;
960
+ const numeric = Number(value);
961
+ return Number.isFinite(numeric) ? numeric : fallback;
962
+ }
963
+ function sidebarWidthLimits() {
964
+ const min = Math.max(180, Math.round(finiteSidebarNumber(sidebarConfig.minWidth, defaultSidebarMinWidth)));
965
+ const configuredMax = Math.max(min, Math.round(finiteSidebarNumber(sidebarConfig.maxWidth, defaultSidebarMaxWidth)));
966
+ const viewportMax = Math.max(min, Math.floor(finiteSidebarNumber(win.innerWidth, 1440) * 0.6));
967
+ const max = Math.min(configuredMax, viewportMax);
968
+ const initial = Math.max(min, Math.min(max, Math.round(finiteSidebarNumber(sidebarConfig.width, defaultSidebarWidth))));
969
+ return { min, max, initial };
970
+ }
971
+ function initSidebarResize() {
972
+ const app = byId('docs');
973
+ const handle = byId('sidebarResizer');
974
+ if (!app || !handle || app.dataset?.sidebarHidden === 'true')
975
+ return;
976
+ let limits = sidebarWidthLimits();
977
+ const stored = finiteSidebarNumber(win.localStorage?.getItem?.(sidebarWidthStorageKey), limits.initial);
978
+ let width = Math.max(limits.min, Math.min(limits.max, Math.round(stored)));
979
+ let dragging = false;
980
+ const applyWidth = (nextWidth, persist = false) => {
981
+ limits = sidebarWidthLimits();
982
+ width = Math.max(limits.min, Math.min(limits.max, Math.round(nextWidth)));
983
+ app.style?.setProperty?.('--sidebar-width', `${width}px`);
984
+ handle.setAttribute?.('aria-valuemin', String(limits.min));
985
+ handle.setAttribute?.('aria-valuemax', String(limits.max));
986
+ handle.setAttribute?.('aria-valuenow', String(width));
987
+ if (persist)
988
+ win.localStorage?.setItem?.(sidebarWidthStorageKey, String(width));
989
+ };
990
+ applyWidth(width);
991
+ if (sidebarConfig.resizable === false) {
992
+ handle.hidden = true;
993
+ return;
994
+ }
995
+ const widthFromPointer = (event) => {
996
+ const left = Number(app.getBoundingClientRect?.().left ?? 0);
997
+ return Number(event.clientX ?? width) - left;
998
+ };
999
+ const finishResize = (event) => {
1000
+ if (!dragging)
1001
+ return;
1002
+ dragging = false;
1003
+ doc.documentElement?.classList?.remove?.('sidebar-is-resizing');
1004
+ if (event?.pointerId !== undefined)
1005
+ handle.releasePointerCapture?.(event.pointerId);
1006
+ applyWidth(width, true);
1007
+ };
1008
+ handle.addEventListener?.('pointerdown', (event) => {
1009
+ if (event.button !== undefined && event.button !== 0)
1010
+ return;
1011
+ dragging = true;
1012
+ handle.setPointerCapture?.(event.pointerId);
1013
+ doc.documentElement?.classList?.add?.('sidebar-is-resizing');
1014
+ applyWidth(widthFromPointer(event));
1015
+ event.preventDefault?.();
1016
+ });
1017
+ handle.addEventListener?.('pointermove', (event) => {
1018
+ if (!dragging)
1019
+ return;
1020
+ applyWidth(widthFromPointer(event));
1021
+ });
1022
+ handle.addEventListener?.('pointerup', finishResize);
1023
+ handle.addEventListener?.('pointercancel', finishResize);
1024
+ handle.addEventListener?.('dblclick', () => applyWidth(limits.initial, true));
1025
+ handle.addEventListener?.('keydown', (event) => {
1026
+ const step = event.shiftKey ? 32 : 16;
1027
+ let next = null;
1028
+ if (event.key === 'ArrowLeft')
1029
+ next = width - step;
1030
+ else if (event.key === 'ArrowRight')
1031
+ next = width + step;
1032
+ else if (event.key === 'Home')
1033
+ next = limits.min;
1034
+ else if (event.key === 'End')
1035
+ next = limits.max;
1036
+ if (next === null)
1037
+ return;
1038
+ event.preventDefault?.();
1039
+ applyWidth(next, true);
1040
+ });
1041
+ win.addEventListener?.('resize', () => applyWidth(width));
1042
+ }
952
1043
  function renderProtocolTabs() {
953
1044
  const container = byId('protocolTabs');
954
1045
  if (!container)
@@ -1124,6 +1215,7 @@ function renderDocsPagesNav(nav) {
1124
1215
  wrapper.className = `tag-group docs-pages-group${hasActiveDocPage || sidebarConfig.expandAll ? '' : ' collapsed'}`;
1125
1216
  const header = doc.createElement('div');
1126
1217
  header.className = 'tag-group-header';
1218
+ header.title = String(groupLabel);
1127
1219
  header.innerHTML = `<span class="tag-group-arrow">▼</span>${esc(groupLabel)}<span class="tag-group-count">${allPages.length}</span>`;
1128
1220
  const inner = doc.createElement('div');
1129
1221
  inner.className = 'tag-group-items';
@@ -1183,6 +1275,7 @@ function appendSidebarGroup(nav, title, items) {
1183
1275
  group.className = 'tag-group';
1184
1276
  const header = doc.createElement('div');
1185
1277
  header.className = 'tag-group-header';
1278
+ header.title = title;
1186
1279
  header.innerHTML = `<span class="tag-group-arrow">▼</span>${esc(title)}<span class="tag-group-count">${items.length}</span>`;
1187
1280
  const itemContainer = doc.createElement('div');
1188
1281
  itemContainer.className = 'tag-group-items';
@@ -1196,6 +1289,7 @@ function appendSidebarGroup(nav, title, items) {
1196
1289
  for (const item of items) {
1197
1290
  const el = doc.createElement('div');
1198
1291
  el.className = `nav-item${item.active ? ' active' : ''}`;
1292
+ el.title = item.label;
1199
1293
  const isHome = item.path === '/' || item.path === '';
1200
1294
  el.innerHTML = isHome
1201
1295
  ? `<span class="docs-sidebar-home">${HOME_ICON_SVG}<span class="nav-item-path">${esc(item.label)}</span></span>`
@@ -1213,6 +1307,7 @@ function appendSidebarGroup(nav, title, items) {
1213
1307
  childEl.type = 'button';
1214
1308
  childEl.className = `nav-subitem nav-subitem-level-${child.level}${child.id === activeHeadingId ? ' active' : ''}`;
1215
1309
  childEl.textContent = child.title;
1310
+ childEl.title = child.title;
1216
1311
  childEl.onclick = (event) => {
1217
1312
  event.stopPropagation();
1218
1313
  setDocsPage(activePagePath || item.label, child.id);
@@ -1329,8 +1424,6 @@ function schemaConstraintChips(schema) {
1329
1424
  if (!schema || typeof schema !== 'object')
1330
1425
  return [];
1331
1426
  const chips = [];
1332
- if (schema.format)
1333
- chips.push(`format: ${schema.format}`);
1334
1427
  if (typeof schema.minLength === 'number')
1335
1428
  chips.push(`min length: ${schema.minLength}`);
1336
1429
  if (typeof schema.maxLength === 'number')
@@ -1392,6 +1485,125 @@ function appendConstraintChips(row, schema) {
1392
1485
  });
1393
1486
  row.appendChild(wrap);
1394
1487
  }
1488
+ function formatContractExample(value) {
1489
+ if (typeof value === 'string')
1490
+ return value;
1491
+ const json = JSON.stringify(value);
1492
+ return json === undefined ? String(value) : json;
1493
+ }
1494
+ function collectContractExamples(owner, schema) {
1495
+ const examples = [];
1496
+ if (owner?.example !== undefined)
1497
+ examples.push(owner.example);
1498
+ Object.values(owner?.examples ?? {}).forEach((example) => {
1499
+ if (example && typeof example === 'object' && 'value' in example)
1500
+ examples.push(example.value);
1501
+ });
1502
+ if (schema?.example !== undefined)
1503
+ examples.push(schema.example);
1504
+ if (Array.isArray(schema?.examples))
1505
+ examples.push(...schema.examples);
1506
+ const seen = new Set();
1507
+ return examples.filter(value => {
1508
+ const key = formatContractExample(value);
1509
+ if (seen.has(key))
1510
+ return false;
1511
+ seen.add(key);
1512
+ return true;
1513
+ });
1514
+ }
1515
+ function contractSchemaType(rawSchema, schema) {
1516
+ const refName = rawSchema?.$ref ? String(rawSchema.$ref).split('/').pop() : '';
1517
+ const type = Array.isArray(schema?.type)
1518
+ ? schema.type.join(' | ')
1519
+ : schema?.type || (refName ? 'object' : 'any');
1520
+ if (type === 'array') {
1521
+ const items = resolveSchema(schema?.items);
1522
+ const itemType = items?.type || (schema?.items?.$ref ? String(schema.items.$ref).split('/').pop() : 'any');
1523
+ const itemFormat = items?.format ? ` <${items.format}>` : '';
1524
+ return { type, label: `array of ${itemType}${itemFormat}` };
1525
+ }
1526
+ const format = schema?.format ? ` <${schema.format}>` : '';
1527
+ const reference = refName ? ` <${refName}>` : '';
1528
+ return { type, label: `${type}${format}${reference}` };
1529
+ }
1530
+ function appendContractDescription(parent, description, className) {
1531
+ if (!description)
1532
+ return;
1533
+ const desc = doc.createElement('div');
1534
+ desc.className = `${className} markdown-content`;
1535
+ desc.innerHTML = parseMarkdown(description);
1536
+ parent.appendChild(desc);
1537
+ }
1538
+ function appendContractExamples(parent, examples, prefix = '') {
1539
+ examples.forEach((value, index) => {
1540
+ const line = doc.createElement('div');
1541
+ line.className = 'schema-tree-example';
1542
+ const label = examples.length > 1 ? `Example ${index + 1}:` : 'Example:';
1543
+ const rendered = prefix ? `${prefix}${formatContractExample(value)}` : formatContractExample(value);
1544
+ line.innerHTML = `<span>${label}</span><code>${esc(rendered)}</code>`;
1545
+ parent.appendChild(line);
1546
+ });
1547
+ }
1548
+ function createContractRow(name, rawSchema, required, options = {}) {
1549
+ const schema = resolveSchema(rawSchema) ?? {};
1550
+ const nestedSchema = schema.type === 'object' && schema.properties
1551
+ ? rawSchema
1552
+ : schema.type === 'array' && resolveSchema(schema.items)?.properties
1553
+ ? schema.items
1554
+ : null;
1555
+ const row = doc.createElement('div');
1556
+ row.className = `schema-tree-row${nestedSchema ? ' schema-tree-row-expandable' : ''}`;
1557
+ const key = doc.createElement('div');
1558
+ key.className = 'schema-tree-key';
1559
+ let toggle = null;
1560
+ if (nestedSchema) {
1561
+ toggle = doc.createElement('button');
1562
+ toggle.type = 'button';
1563
+ toggle.className = 'schema-tree-toggle';
1564
+ toggle.setAttribute('aria-expanded', 'false');
1565
+ toggle.setAttribute('aria-label', `Expand ${name}`);
1566
+ toggle.textContent = '›';
1567
+ key.appendChild(toggle);
1568
+ }
1569
+ const nameEl = doc.createElement('code');
1570
+ nameEl.className = 'schema-tree-name';
1571
+ nameEl.textContent = name;
1572
+ key.appendChild(nameEl);
1573
+ const state = doc.createElement('span');
1574
+ state.className = required ? 'schema-tree-required' : 'schema-tree-optional';
1575
+ state.textContent = required ? 'required' : 'optional';
1576
+ key.appendChild(state);
1577
+ if (options.deprecated) {
1578
+ const deprecated = doc.createElement('span');
1579
+ deprecated.className = 'schema-tree-deprecated';
1580
+ deprecated.textContent = 'deprecated';
1581
+ key.appendChild(deprecated);
1582
+ }
1583
+ const details = doc.createElement('div');
1584
+ details.className = 'schema-tree-details';
1585
+ const schemaType = contractSchemaType(rawSchema, schema);
1586
+ const type = doc.createElement('div');
1587
+ type.className = `schema-tree-type type-text-${esc(schemaType.type)}`;
1588
+ type.textContent = schemaType.label;
1589
+ details.appendChild(type);
1590
+ appendContractExamples(details, collectContractExamples(options.owner, schema), options.examplePrefix ?? '');
1591
+ appendContractDescription(details, options.description ?? schema.description, 'schema-tree-description');
1592
+ appendConstraintChips(details, schema);
1593
+ if (schema.type === 'array' && schema.items) {
1594
+ const items = resolveSchema(schema.items);
1595
+ if (Array.isArray(items?.enum) && items.enum.length > 0) {
1596
+ const label = doc.createElement('div');
1597
+ label.className = 'schema-tree-items-label';
1598
+ label.textContent = 'Items';
1599
+ details.appendChild(label);
1600
+ appendConstraintChips(details, items);
1601
+ }
1602
+ }
1603
+ row.appendChild(key);
1604
+ row.appendChild(details);
1605
+ return { row, toggle, nestedSchema };
1606
+ }
1395
1607
  // Render a JSON value as a Python literal (for the Python request sample).
1396
1608
  function pyLiteral(value) {
1397
1609
  if (value === null || value === undefined)
@@ -1804,9 +2016,18 @@ function renderResponseSamples(responses, endpoint) {
1804
2016
  wrap.appendChild(contents);
1805
2017
  return wrap;
1806
2018
  }
1807
- function renderSchemaTree(parent, schema, depth = 0) {
2019
+ function renderSchemaTree(parent, schema, depth = 0, refStack = new Set()) {
1808
2020
  if (!schema)
1809
2021
  return;
2022
+ const pointer = schema.$ref ? String(schema.$ref) : '';
2023
+ if (pointer && refStack.has(pointer)) {
2024
+ const recursive = doc.createElement('div');
2025
+ recursive.className = 'schema-tree-row schema-tree-unresolved';
2026
+ recursive.textContent = `Recursive schema: ${pointer.split('/').pop()}`;
2027
+ parent.appendChild(recursive);
2028
+ return;
2029
+ }
2030
+ const nextRefStack = pointer ? new Set([...refStack, pointer]) : refStack;
1810
2031
  schema = resolveSchema(schema);
1811
2032
  const div = doc.createElement('div');
1812
2033
  div.className = depth === 0 ? 'schema-tree schema-tree-root' : 'schema-tree schema-tree-nested';
@@ -1819,34 +2040,35 @@ function renderSchemaTree(parent, schema, depth = 0) {
1819
2040
  }
1820
2041
  else if (schema.type === 'object' && schema.properties) {
1821
2042
  Object.entries(schema.properties).forEach(([key, prop]) => {
1822
- const row = doc.createElement('div');
1823
- row.className = 'schema-tree-row';
1824
- const type = prop.type || 'any';
1825
- const required = schema.required?.includes(key) ? '<span class="schema-tree-required">*</span>' : '';
1826
- row.innerHTML = `<div class="schema-tree-property">${esc(key)}${required}<span class="schema-type type-${esc(prop.type || 'null')}">${esc(type)}</span></div>`;
1827
- if (prop.description) {
1828
- const desc = doc.createElement('div');
1829
- desc.className = 'schema-tree-description';
1830
- desc.textContent = prop.description;
1831
- row.appendChild(desc);
1832
- }
1833
- appendConstraintChips(row, prop);
1834
- div.appendChild(row);
1835
- if (prop.type === 'object' && prop.properties) {
1836
- renderSchemaTree(div, prop, depth + 1);
1837
- }
1838
- else if (prop.type === 'array' && prop.items?.properties) {
1839
- renderSchemaTree(div, prop.items, depth + 1);
2043
+ const contract = createContractRow(key, prop, schema.required?.includes(key) === true);
2044
+ div.appendChild(contract.row);
2045
+ if (contract.nestedSchema && contract.toggle) {
2046
+ const children = doc.createElement('div');
2047
+ children.className = 'schema-tree-children collapsed';
2048
+ renderSchemaTree(children, contract.nestedSchema, depth + 1, nextRefStack);
2049
+ contract.toggle.onclick = () => {
2050
+ const collapsed = children.classList.toggle('collapsed');
2051
+ contract.toggle.classList.toggle('open', !collapsed);
2052
+ contract.toggle.setAttribute('aria-expanded', String(!collapsed));
2053
+ contract.toggle.setAttribute('aria-label', `${collapsed ? 'Expand' : 'Collapse'} ${key}`);
2054
+ };
2055
+ div.appendChild(children);
1840
2056
  }
1841
2057
  });
1842
2058
  }
1843
2059
  else if (schema.type === 'array' && schema.items) {
1844
- const row = doc.createElement('div');
1845
- row.className = 'schema-tree-row';
1846
- row.innerHTML = `<span class="schema-tree-label">array</span> <span class="schema-tree-meta">of ${esc(schema.items.type || 'object')}</span>`;
1847
- div.appendChild(row);
1848
- if (schema.items.properties) {
1849
- renderSchemaTree(div, schema.items, depth + 1);
2060
+ const contract = createContractRow('items', schema.items, true);
2061
+ div.appendChild(contract.row);
2062
+ if (contract.nestedSchema && contract.toggle) {
2063
+ const children = doc.createElement('div');
2064
+ children.className = 'schema-tree-children collapsed';
2065
+ renderSchemaTree(children, contract.nestedSchema, depth + 1, nextRefStack);
2066
+ contract.toggle.onclick = () => {
2067
+ const collapsed = children.classList.toggle('collapsed');
2068
+ contract.toggle.classList.toggle('open', !collapsed);
2069
+ contract.toggle.setAttribute('aria-expanded', String(!collapsed));
2070
+ };
2071
+ div.appendChild(children);
1850
2072
  }
1851
2073
  }
1852
2074
  else {
@@ -1867,28 +2089,17 @@ function renderParamGroup(title, params) {
1867
2089
  heading.textContent = title;
1868
2090
  group.appendChild(heading);
1869
2091
  const list = doc.createElement('div');
1870
- list.className = 'http-params';
2092
+ list.className = 'http-params schema-tree schema-tree-root';
1871
2093
  params.forEach(param => {
1872
- const item = doc.createElement('div');
1873
- item.className = 'http-param';
1874
2094
  const schema = param.schema || {};
1875
- const typeName = schema.type === 'array' ? `${schema.items?.type || 'any'}[]` : (schema.type || 'string');
1876
- const head = doc.createElement('div');
1877
- head.className = 'http-param-head';
1878
- head.innerHTML = `<span class="http-param-name">${esc(param.name)}</span>` +
1879
- `<span class="schema-type type-${esc(schema.type || 'string')}">${esc(typeName)}</span>` +
1880
- (param.required ? '<span class="http-param-required">required</span>' : '') +
1881
- (param.deprecated ? '<span class="http-param-deprecated">deprecated</span>' : '');
1882
- item.appendChild(head);
1883
- const description = param.description || schema.description;
1884
- if (description) {
1885
- const desc = doc.createElement('div');
1886
- desc.className = 'http-param-desc';
1887
- desc.textContent = description;
1888
- item.appendChild(desc);
1889
- }
1890
- appendConstraintChips(item, schema);
1891
- list.appendChild(item);
2095
+ const contract = createContractRow(param.name, schema, param.required === true, {
2096
+ owner: param,
2097
+ description: param.description || schema.description,
2098
+ deprecated: param.deprecated,
2099
+ examplePrefix: `${param.name}=`,
2100
+ });
2101
+ contract.row.classList.add('http-param');
2102
+ list.appendChild(contract.row);
1892
2103
  });
1893
2104
  group.appendChild(list);
1894
2105
  return group;
@@ -1903,7 +2114,7 @@ function renderResponseAccordion(status, resp, openByDefault) {
1903
2114
  acc.className = `response-accordion${openByDefault ? ' open' : ''}`;
1904
2115
  const header = doc.createElement('button');
1905
2116
  header.type = 'button';
1906
- header.className = 'response-accordion-header';
2117
+ header.className = `response-accordion-header ${statusClass}`;
1907
2118
  header.innerHTML = `<span class="response-accordion-caret">▶</span>` +
1908
2119
  `<span class="response-status-dot ${statusClass}"></span>` +
1909
2120
  `<span class="response-status-code">${esc(status)}</span>` +
@@ -1918,14 +2129,16 @@ function renderResponseAccordion(status, resp, openByDefault) {
1918
2129
  sub.textContent = 'Response Headers';
1919
2130
  block.appendChild(sub);
1920
2131
  const list = doc.createElement('div');
1921
- list.className = 'http-params';
2132
+ list.className = 'http-params schema-tree schema-tree-root';
1922
2133
  Object.entries(resp.headers).forEach(([name, def]) => {
1923
- const item = doc.createElement('div');
1924
- item.className = 'http-param';
1925
2134
  const hschema = def.schema || {};
1926
- item.innerHTML = `<div class="http-param-head"><span class="http-param-name">${esc(name)}</span><span class="schema-type type-${esc(hschema.type || 'string')}">${esc(hschema.type || 'string')}</span></div>` +
1927
- (def.description ? `<div class="http-param-desc">${esc(def.description)}</div>` : '');
1928
- list.appendChild(item);
2135
+ const contract = createContractRow(name, hschema, def.required === true, {
2136
+ owner: def,
2137
+ description: def.description,
2138
+ deprecated: def.deprecated,
2139
+ });
2140
+ contract.row.classList.add('http-param');
2141
+ list.appendChild(contract.row);
1929
2142
  });
1930
2143
  block.appendChild(list);
1931
2144
  body.appendChild(block);
@@ -3745,6 +3958,7 @@ function init() {
3745
3958
  const intro = byId('introductionContent');
3746
3959
  if (intro && introductionMarkdown)
3747
3960
  intro.innerHTML = parseMarkdown(introductionMarkdown);
3961
+ initSidebarResize();
3748
3962
  bindEvents();
3749
3963
  renderFooter();
3750
3964
  render();
@@ -15,6 +15,7 @@ function appendSidebarItem(parent, item, depth, deps) {
15
15
  group.className = `tag-group docs-sidebar-group docs-sidebar-depth-${depth}${expanded ? '' : ' collapsed'}`;
16
16
  const header = deps.doc.createElement('div');
17
17
  header.className = `tag-group-header${active ? ' active' : ''}`;
18
+ header.title = title;
18
19
  header.innerHTML = `<span class="tag-group-arrow">▼</span>${deps.esc(title)}<span class="tag-group-count">${countLeaves(children)}</span>`;
19
20
  const childContainer = deps.doc.createElement('div');
20
21
  childContainer.className = 'tag-group-items';
@@ -42,6 +43,7 @@ function appendSidebarItem(parent, item, depth, deps) {
42
43
  function createPageItem(item, title, active, depth, deps) {
43
44
  const element = deps.doc.createElement('div');
44
45
  element.className = `nav-item docs-page-nav-item docs-sidebar-page docs-sidebar-depth-${depth}${active ? ' active' : ''}`;
46
+ element.title = title;
45
47
  const normalizedPath = item.path ? deps.normalizeDocsPath(item.path) : '';
46
48
  const isHome = depth === 0 && (normalizedPath === '/' || normalizedPath === '');
47
49
  element.innerHTML = isHome
@@ -76,6 +78,7 @@ function appendActivePageHeadings(parent, path, deps) {
76
78
  childElement.type = 'button';
77
79
  childElement.className = `nav-subitem nav-subitem-level-${child.level}${child.id === deps.activeHeadingId ? ' active' : ''}`;
78
80
  childElement.textContent = child.title;
81
+ childElement.title = child.title;
79
82
  childElement.onclick = (event) => {
80
83
  event.stopPropagation();
81
84
  deps.setDocsPage(deps.activePagePath || path, child.id);
@@ -1 +1 @@
1
- {"version":3,"file":"html-shell.d.ts","sourceRoot":"","sources":["../../../src/docs/ui/html-shell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAG/D;;GAEG;AACH,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,EAC9C,MAAM,EAAE,UAAU,GAAG,SAAS,GAC7B,UAAU,GAAG,SAAS,CAgBxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CAIvE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAUpF;AAiBD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAmDR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EAAE,GAClB,MAAM,CAgBR;AAeD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,CA4BR"}
1
+ {"version":3,"file":"html-shell.d.ts","sourceRoot":"","sources":["../../../src/docs/ui/html-shell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAG/D;;GAEG;AACH,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,EAC9C,MAAM,EAAE,UAAU,GAAG,SAAS,GAC7B,UAAU,GAAG,SAAS,CAgBxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CAIvE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAUpF;AAiBD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAmDR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EAAE,GAClB,MAAM,CAgBR;AAeD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,CAyCR"}
@@ -158,6 +158,19 @@ export function generateAppContainer(logo, title, sidebar, footer) {
158
158
  </div>
159
159
  <div class="protocol-tabs" id="protocolTabs"></div>
160
160
  <nav class="sidebar-nav" id="sidebarNav"></nav>
161
+ <button
162
+ type="button"
163
+ class="sidebar-resizer"
164
+ id="sidebarResizer"
165
+ role="separator"
166
+ aria-label="Resize navigation sidebar"
167
+ aria-controls="sidebarNav"
168
+ aria-orientation="vertical"
169
+ aria-valuemin="220"
170
+ aria-valuemax="560"
171
+ aria-valuenow="280"
172
+ title="Drag to resize the sidebar; use arrow keys for precise control"
173
+ ></button>
161
174
  </aside>
162
175
  <main class="main-shell">
163
176
  <div class="main" id="mainContent"></div>
@@ -1 +1 @@
1
- {"version":3,"file":"html-shell.js","sourceRoot":"","sources":["../../../src/docs/ui/html-shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-shell.js","sourceRoot":"","sources":["../../../src/docs/ui/html-shell.ts"],"names":[],"mappings":"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"}