Skip to content

feat(ui): more custom components#677

Open
avivkeller wants to merge 1 commit intomainfrom
ui-custom
Open

feat(ui): more custom components#677
avivkeller wants to merge 1 commit intomainfrom
ui-custom

Conversation

@avivkeller
Copy link
Member

Fixes #665 by adding:

  • #theme/Logo (renamed from #config)
  • #theme/Footer (no op by default)
  • #theme/Layout
  • #theme/Metabar
  • #theme/Sidebar

@avivkeller avivkeller requested a review from a team as a code owner March 14, 2026 15:22
Copilot AI review requested due to automatic review settings March 14, 2026 15:22
@vercel
Copy link

vercel bot commented Mar 14, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
api-docs-tooling Ready Ready Preview Mar 14, 2026 3:22pm

Request Review

@codecov
Copy link

codecov bot commented Mar 14, 2026

Codecov Report

❌ Patch coverage is 69.23077% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.43%. Comparing base (84f6dac) to head (647b96a).
⚠️ Report is 3 commits behind head on main.

Files with missing lines Patch % Lines
src/generators/jsx-ast/utils/buildContent.mjs 0.00% 4 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #677      +/-   ##
==========================================
- Coverage   74.76%   74.43%   -0.33%     
==========================================
  Files         146      146              
  Lines       13251    13350      +99     
  Branches      960      967       +7     
==========================================
+ Hits         9907     9937      +30     
- Misses       3338     3407      +69     
  Partials        6        6              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
Copy link

api-links Generator

apilinks.json
Expected values to be strictly deep-equal:
+ actual - expected
... Skipped lines

  {
    'Agent.defaultMaxSockets': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L227',
    'Buffer.alloc': 'https://github.com/nodejs/node/blob/HEAD/lib/buffer.js#L432',
    'Buffer.allocUnsafe': 'https://github.com/nodejs/node/blob/HEAD/lib/buffer.js#L446',
    'Buffer.allocUnsafeSlow': 'https://github.com/nodejs/node/blob/HEAD/lib/buffer.js#L458',
...
    'agent.addRequest': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L292',
+   'agent.createConnection': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L231',
-   'agent.createConnection': 'https://github.com/nodejs/node/blob/HEAD/lib/https.js#L326',
    'agent.createSocket': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L363',
    'agent.destroy': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L595',
+   'agent.getName': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L261',
-   'agent.getName': 'https://github.com/nodejs/node/blob/HEAD/lib/https.js#L484',
    'agent.keepSocketAlive': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L552',
    'agent.removeSocket': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L491',
    'agent.reuseSocket': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_agent.js#L588',
    'assert.assert': 'https://github.com/nodejs/node/blob/HEAD/lib/assert.js#L185',
    'asyncResource.asyncId': 'https://github.com/nodejs/node/blob/HEAD/lib/async_hooks.js#L242',
...
    'server.address': 'https://github.com/nodejs/node/blob/HEAD/lib/net.js#L2289',
+   'server.close': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L614',
+   'server.closeAllConnections': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L624',
+   'server.closeIdleConnections': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L636',
-   'server.close': 'https://github.com/nodejs/node/blob/HEAD/lib/net.js#L2422',
-   'server.closeAllConnections': 'https://github.com/nodejs/node/blob/HEAD/lib/https.js#L120',
-   'server.closeIdleConnections': 'https://github.com/nodejs/node/blob/HEAD/lib/https.js#L122',
    'server.getConnections': 'https://github.com/nodejs/node/blob/HEAD/lib/net.js#L2384',
    'server.listen': 'https://github.com/nodejs/node/blob/HEAD/lib/net.js#L2106',
    'server.ref': 'https://github.com/nodejs/node/blob/HEAD/lib/net.js#L2527',
+   'server.setTimeout': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L652',
-   'server.setTimeout': 'https://github.com/nodejs/node/blob/HEAD/lib/https.js#L124',
    'server.unref': 'https://github.com/nodejs/node/blob/HEAD/lib/net.js#L2536',
+   'server[SymbolAsyncDispose]': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L620',
+   'server[undefined]': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L659',
-   'server[SymbolAsyncDispose]': 'https://github.com/nodejs/node/blob/HEAD/lib/net.js#L2462',
-   'server[undefined]': 'https://github.com/nodejs/node/blob/HEAD/lib/net.js#L2491',
    'serverresponse._finish': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L246',
    'serverresponse._implicitHeader': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L360',
    'serverresponse.assignSocket': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L296',
    'serverresponse.detachSocket': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L307',
    'serverresponse.statusCode': 'https://github.com/nodejs/node/blob/HEAD/lib/_http_server.js#L269',

orama-db Generator

File Base Head Diff
orama-db.json 8.04 MB 8.04 MB +1.78 KB (+0.02%)

web Generator

File Base Head Diff
errors.js 407.90 KB 350.80 KB -57.10 KB (-14.00%)
webcrypto.js 423.71 KB 380.50 KB -43.22 KB (-10.20%)
deprecations.js 313.77 KB 283.27 KB -30.50 KB (-9.72%)
crypto.js 1.16 MB 1.13 MB -28.04 KB (-2.36%)
cli.js 325.41 KB 299.75 KB -25.66 KB (-7.89%)
webcrypto.html 529.82 KB 505.27 KB -24.54 KB (-4.63%)
http.js 692.18 KB 671.93 KB -20.25 KB (-2.93%)
fs.js 1.19 MB 1.17 MB -18.77 KB (-1.55%)
quic.js 169.48 KB 152.98 KB -16.50 KB (-9.73%)
perf_hooks.js 375.18 KB 359.48 KB -15.70 KB (-4.18%)
buffer.js 1.10 MB 1.08 MB -15.11 KB (-1.35%)
process.js 717.80 KB 703.91 KB -13.88 KB (-1.93%)
test.js 865.27 KB 851.39 KB -13.88 KB (-1.60%)
util.js 754.67 KB 741.04 KB -13.63 KB (-1.81%)
net.js 287.37 KB 276.11 KB -11.25 KB (-3.92%)
n-api.js 721.32 KB 710.24 KB -11.08 KB (-1.54%)
globals.js 137.16 KB 126.19 KB -10.96 KB (-7.99%)
tls.js 322.11 KB 313.08 KB -9.04 KB (-2.80%)
zlib.js 320.85 KB 312.11 KB -8.74 KB (-2.73%)
worker_threads.js 401.97 KB 394.03 KB -7.94 KB (-1.98%)
dns.js 270.57 KB 263.18 KB -7.40 KB (-2.73%)
events.js 550.91 KB 543.96 KB -6.95 KB (-1.26%)
sqlite.js 235.67 KB 228.79 KB -6.88 KB (-2.92%)
vm.js 443.64 KB 436.83 KB -6.81 KB (-1.53%)
v8.js 336.01 KB 330.23 KB -5.78 KB (-1.72%)
dgram.js 174.74 KB 169.90 KB -4.84 KB (-2.77%)
child_process.js 469.81 KB 465.17 KB -4.64 KB (-0.99%)
stream.js 855.81 KB 851.40 KB -4.42 KB (-0.52%)
assert.js 457.93 KB 453.76 KB -4.17 KB (-0.91%)
readline.js 225.61 KB 221.64 KB -3.97 KB (-1.76%)
inspector.js 122.38 KB 118.60 KB -3.78 KB (-3.09%)
esm.js 137.90 KB 134.29 KB -3.61 KB (-2.62%)
cluster.js 197.88 KB 194.40 KB -3.49 KB (-1.76%)
async_context.js 189.28 KB 185.86 KB -3.43 KB (-1.81%)
single-executable-applications.js 86.41 KB 83.00 KB -3.41 KB (-3.95%)
timers.js 100.79 KB 97.38 KB -3.41 KB (-3.38%)
modules.js 151.41 KB 148.15 KB -3.26 KB (-2.16%)
console.js 109.11 KB 105.86 KB -3.26 KB (-2.98%)
module.js 337.77 KB 334.68 KB -3.08 KB (-0.91%)
crypto.html 1.03 MB 1.02 MB -3.02 KB (-0.29%)
errors.html 456.80 KB 459.67 KB +2.88 KB (+0.63%)
https.js 162.04 KB 159.23 KB -2.81 KB (-1.73%)
fs.html 1.39 MB 1.40 MB +2.79 KB (+0.20%)
os.js 107.30 KB 104.58 KB -2.72 KB (-2.54%)
n-api.html 803.53 KB 806.20 KB +2.67 KB (+0.33%)
repl.js 211.69 KB 209.05 KB -2.63 KB (-1.24%)
packages.js 124.76 KB 122.18 KB -2.58 KB (-2.07%)
tty.js 49.45 KB 46.94 KB -2.51 KB (-5.08%)
http2.js 803.47 KB 800.97 KB -2.50 KB (-0.31%)
webstreams.js 285.67 KB 283.17 KB -2.50 KB (-0.87%)
async_hooks.js 197.29 KB 195.17 KB -2.12 KB (-1.07%)
url.js 337.22 KB 335.30 KB -1.91 KB (-0.57%)
addons.js 294.48 KB 292.76 KB -1.71 KB (-0.58%)
domain.js 91.28 KB 89.57 KB -1.70 KB (-1.87%)
path.js 97.70 KB 96.01 KB -1.69 KB (-1.73%)
stream.html 856.50 KB 858.06 KB +1.56 KB (+0.18%)
http.html 735.07 KB 736.61 KB +1.54 KB (+0.21%)
http2.html 767.47 KB 768.96 KB +1.49 KB (+0.19%)
cli.html 488.11 KB 489.55 KB +1.43 KB (+0.29%)
process.html 672.86 KB 674.27 KB +1.40 KB (+0.21%)
typescript.js 25.38 KB 24.04 KB -1.34 KB (-5.27%)
buffer.html 904.70 KB 906.00 KB +1.30 KB (+0.14%)
intl.js 37.08 KB 35.88 KB -1.20 KB (-3.24%)
punycode.js 28.47 KB 27.34 KB -1.13 KB (-3.96%)
util.html 690.89 KB 692.01 KB +1.11 KB (+0.16%)
wasi.js 42.51 KB 41.40 KB -1.11 KB (-2.62%)
debugger.js 30.69 KB 29.63 KB -1.07 KB (-3.47%)
deprecations.html 494.80 KB 495.84 KB +1.04 KB (+0.21%)
test.html 738.25 KB 739.27 KB +1.02 KB (+0.14%)
querystring.js 31.24 KB 30.26 KB -1004.00 B (-3.14%)
tls.html 372.28 KB 373.24 KB +978.00 B (+0.26%)
tracing.js 77.51 KB 76.59 KB -943.00 B (-1.19%)
url.html 346.80 KB 347.61 KB +821.00 B (+0.23%)
documentation.js 9.74 KB 8.96 KB -801.00 B (-8.03%)
environment_variables.js 15.15 KB 14.42 KB -750.00 B (-4.83%)
string_decoder.js 31.49 KB 30.77 KB -735.00 B (-2.28%)
net.html 380.69 KB 381.40 KB +727.00 B (+0.19%)
child_process.html 381.38 KB 382.03 KB +672.00 B (+0.17%)
events.html 454.02 KB 454.67 KB +666.00 B (+0.14%)
embedding.js 37.29 KB 36.65 KB -655.00 B (-1.72%)
vm.html 369.57 KB 370.20 KB +644.00 B (+0.17%)
modules.html 176.88 KB 177.47 KB +609.00 B (+0.34%)
report.js 188.55 KB 187.97 KB -598.00 B (-0.31%)
esm.html 152.68 KB 153.23 KB +558.00 B (+0.36%)
module.html 325.48 KB 326.01 KB +547.00 B (+0.16%)
v8.html 320.09 KB 320.61 KB +529.00 B (+0.16%)
packages.html 153.11 KB 153.62 KB +522.00 B (+0.33%)
worker_threads.html 363.79 KB 364.30 KB +518.00 B (+0.14%)
readline.html 250.90 KB 251.39 KB +498.00 B (+0.19%)
perf_hooks.html 379.00 KB 379.49 KB +496.00 B (+0.13%)
zlib.html 289.44 KB 289.88 KB +459.00 B (+0.15%)
dns.html 295.20 KB 295.64 KB +456.00 B (+0.15%)
assert.html 329.39 KB 329.82 KB +442.00 B (+0.13%)
cluster.html 194.67 KB 195.07 KB +407.00 B (+0.20%)
dgram.html 193.24 KB 193.63 KB +402.00 B (+0.20%)
diagnostics_channel.html 234.20 KB 234.58 KB +392.00 B (+0.16%)
addons.html 261.10 KB 261.47 KB +378.00 B (+0.14%)
path.html 137.92 KB 138.26 KB +348.00 B (+0.25%)
repl.html 182.05 KB 182.38 KB +339.00 B (+0.18%)
synopsis.js 15.72 KB 15.39 KB -336.00 B (-2.09%)
inspector.html 170.04 KB 170.35 KB +322.00 B (+0.18%)
webstreams.html 355.66 KB 355.98 KB +320.00 B (+0.09%)
permissions.js 28.57 KB 28.26 KB -319.00 B (-1.09%)
async_hooks.html 158.40 KB 158.70 KB +305.00 B (+0.19%)
sqlite.html 267.54 KB 267.84 KB +301.00 B (+0.11%)
quic.html 357.00 KB 357.30 KB +298.00 B (+0.08%)
globals.html 227.26 KB 227.53 KB +273.00 B (+0.12%)
single-executable-applications.html 105.67 KB 105.92 KB +257.00 B (+0.24%)
os.html 141.53 KB 141.77 KB +249.00 B (+0.17%)
async_context.html 162.33 KB 162.55 KB +234.00 B (+0.14%)
timers.html 132.41 KB 132.60 KB +199.00 B (+0.15%)
index.js 9.69 KB 9.50 KB -194.00 B (-1.96%)
console.html 145.74 KB 145.92 KB +185.00 B (+0.12%)
domain.html 103.85 KB 104.02 KB +176.00 B (+0.17%)
https.html 149.00 KB 149.16 KB +161.00 B (+0.11%)
report.html 174.66 KB 174.81 KB +157.00 B (+0.09%)
permissions.html 53.92 KB 54.05 KB +133.00 B (+0.24%)
environment_variables.html 42.79 KB 42.92 KB +130.00 B (+0.30%)
tracing.html 83.00 KB 83.10 KB +102.00 B (+0.12%)
typescript.html 52.28 KB 52.38 KB +101.00 B (+0.19%)
tty.html 94.08 KB 94.17 KB +99.00 B (+0.10%)
wasi.html 68.33 KB 68.42 KB +96.00 B (+0.14%)
intl.html 56.96 KB 57.04 KB +82.00 B (+0.14%)
synopsis.html 41.51 KB 41.58 KB +77.00 B (+0.18%)
diagnostics_channel.js 228.46 KB 228.38 KB -76.00 B (-0.03%)
querystring.html 62.81 KB 62.89 KB +76.00 B (+0.12%)
debugger.html 53.07 KB 53.14 KB +74.00 B (+0.14%)
punycode.html 62.00 KB 62.07 KB +73.00 B (+0.11%)
embedding.html 58.29 KB 58.34 KB +50.00 B (+0.08%)
string_decoder.html 54.33 KB 54.36 KB +36.00 B (+0.06%)
documentation.html 36.92 KB 36.96 KB +33.00 B (+0.09%)
index.html 35.01 KB 35.01 KB +4.00 B (+0.01%)

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a theming/custom-component mechanism to the web generator by routing core UI composition through #theme/* import aliases, enabling downstream consumers to override major page sections.

Changes:

  • Introduces a default Layout component (and a NoOp component used as the default Footer) and wires layout composition through #theme/* imports.
  • Replaces the previous logo alias (#config/Logo) with #theme/Logo, and adds additional theme aliases (Navigation, Sidebar, Metabar, Footer, Layout) to the web generator defaults.
  • Updates JSX AST document construction to render a single Layout component instead of composing page structure directly.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/generators/web/ui/components/NoOp.jsx Adds a no-op component used as the default footer implementation.
src/generators/web/ui/components/NavBar.jsx Switches logo import to the new #theme/Logo alias.
src/generators/web/ui/components/Layout/index.jsx Adds default page layout component that composes Navigation/Sidebar/Metabar/Footer.
src/generators/web/index.mjs Defines default #theme/* alias mappings for overridable UI components.
src/generators/web/constants.mjs Updates JSX_IMPORTS to use #theme/Layout as the top-level render entry.
src/generators/web/README.md Documents imports as theme alias customization (but currently incomplete vs defaults).
src/generators/jsx-ast/utils/buildContent.mjs Updates document AST creation to delegate page composition to Layout.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Copy link
Member

@ovflowd ovflowd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Custom Theming Components

3 participants