Fix nested component initialization to preserve child components and their events #20
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When using nested SipaComponent structures, child components defined within other components were not being properly initialized, causing their events to be inaccessible. This affected scenarios like:
In this case,
myGrandchild
would not be initialized andparent.children().myChild.children().myGrandchild
would be undefined, breaking event subscriptions and component references.Root Cause
The issue was in the
_applySlots
method. When a component didn't have explicit<slot>
elements in its template, any nested content (including child components) was completely ignored and lost during template rendering.Components that defined their templates without slots like:
Would lose any nested components that were defined inside them in the parent's template.
Solution
Modified the
_applySlots
method to automatically preserve and append child components from body nodes when no explicit slots are present. The fix:Testing
Added comprehensive test cases covering:
All tests now pass, confirming that nested components are properly initialized and their events work correctly.
Impact
This fix enables proper use of nested component architectures in SipaJS applications, allowing developers to create complex component hierarchies where events and component references work as expected at all nesting levels.
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
accounts.google.com
/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3457 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-63145743 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4676642323610872200,4071665905546289216,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)/opt/google/chrome/chrome --user-data-dir=/tmp/karma-63145743 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=63145743
(dns block)/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3687 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-76954777 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15958608692870724369,14936992825570280982,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)android.clients.google.com
/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3457 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-63145743 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4676642323610872200,4071665905546289216,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)/opt/google/chrome/chrome --user-data-dir=/tmp/karma-63145743 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=63145743
(dns block)/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3687 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-76954777 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15958608692870724369,14936992825570280982,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)clients2.google.com
/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3457 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-63145743 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4676642323610872200,4071665905546289216,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)/opt/google/chrome/chrome --user-data-dir=/tmp/karma-63145743 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=63145743
(dns block)/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3687 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-76954777 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15958608692870724369,14936992825570280982,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)clientservices.googleapis.com
/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3457 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-63145743 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4676642323610872200,4071665905546289216,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)/opt/google/chrome/chrome --user-data-dir=/tmp/karma-63145743 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=63145743
(dns block)/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3687 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-76954777 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15958608692870724369,14936992825570280982,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)optimizationguide-pa.googleapis.com
/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3457 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-63145743 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4676642323610872200,4071665905546289216,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)/opt/google/chrome/chrome --user-data-dir=/tmp/karma-63145743 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=63145743
(dns block)/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3687 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-76954777 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15958608692870724369,14936992825570280982,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)redirector.gvt1.com
/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3457 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-63145743 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4676642323610872200,4071665905546289216,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)/opt/google/chrome/chrome --user-data-dir=/tmp/karma-63145743 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=63145743
(dns block)/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3687 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-76954777 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15958608692870724369,14936992825570280982,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)safebrowsingohttpgateway.googleapis.com
/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3457 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-63145743 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4676642323610872200,4071665905546289216,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)/opt/google/chrome/chrome --user-data-dir=/tmp/karma-63145743 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=63145743
(dns block)/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3687 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-76954777 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15958608692870724369,14936992825570280982,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)www.google.com
/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3457 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-63145743 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4676642323610872200,4071665905546289216,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)/opt/google/chrome/chrome --user-data-dir=/tmp/karma-63145743 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=63145743
(dns block)/opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3687 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-76954777 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15958608692870724369,14936992825570280982,262144 --disable-features=PaintHolding --variations-seed-version
(dns block)If you need me to access, download, or install something from one of these locations, you can either:
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.